<?xml version="1.0" encoding="utf-8"?>
<FunctionList>
   <Function Deprecated="no">
      <Name>cmf.addaddressentry</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.addaddressentry( long aid , string role , string name , string address , string addresstype  [, domain ttcmf.catg key]  [, domain ttcmf.catg category] )</Syntax>
      <Description>Creates an address child node in the address list aid. The attributes of the node are provided by the parameters of the function. Note: If an argument is left empty and the attribute is currently present in the message object, it will be removed completely.</Description>
      <HelpID>/progguide/emessage_connector/cmf.addaddressentry</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cmf.addobjecttomessage</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.addobjecttomessage( long oid , long mid , string class(100) )</Syntax>
      <Description>The object identified by oid is added to the message object identified by mid. The class of this message is set to the string class (mandatory attribute for a message: for example CMF.TASK for tasks, CMF.APPOINTMENT for appointments and so on). The object is written to a temporary file with extension .xml, which is placed in the current working directory. This file is added as an attachment to the message object. The body attribute of this attachment is set to true, the mimetype is set to application/xml and the delete attribute is set to true. All attachments currently attached to the task are also attached to the message object. Finally the object identified by oid is deleted (because changes in this object are not reflected anymore in the message object). Note: If an error is returned, the object identified by oid is not deleted</Description>
      <HelpID>/progguide/emessage_connector/cmf.addobjecttomessage</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.copyattachment</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.copyattachment( long attachment.id , long oid )</Syntax>
      <Description>Copies the attachment identified by attachment.id from the object identified by id1 to the object identified by id2. All attributes and their values are also copied</Description>
      <HelpID>/progguide/emessage_connector/cmf.copyattachment</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.create</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.create( )</Syntax>
      <Description>Creates a new Infor ERP LN eMessage Connector message object.</Description>
      <HelpID>/progguide/emessage_connector/cmf.create</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cmf.createaddresslist</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.createaddresslist( )</Syntax>
      <Description>Creates an address list object.</Description>
      <HelpID>/progguide/emessage_connector/cmf.createaddresslist</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.createappointment</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.createappointment(  [long mid] )</Syntax>
      <Description>Creates a new Infor ERP LN eMessage Connector appointment object. </Description>
      <HelpID>/progguide/emessage_connector/cmf.createappointment</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.createattachment</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.createattachment( long mid )</Syntax>
      <Description>Creates an attachment entry in the message identified by mid and returns the identification of the attachment.</Description>
      <HelpID>/progguide/emessage_connector/cmf.createattachment</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.createrecipient</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.createrecipient( long mid , enum role )</Syntax>
      <Description>Creates a recipient entry of type role in the message identified by midand returns the identification of the recipient object.</Description>
      <HelpID>/progguide/emessage_connector/cmf.createrecipient</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.createtask</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.createtask( )</Syntax>
      <Description>Creates a new Infor ERP LN eMessage Connector task object. </Description>
      <HelpID>/progguide/emessage_connector/cmf.createtask</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.destroy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.destroy( long mid )</Syntax>
      <Description>Destroys the Infor ERP LN eMessage Connector (message) object identified by id. This function can also be used to destroy recipient objects, attachment objects, etc.</Description>
      <HelpID>/progguide/emessage_connector/cmf.destroy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.enableservice</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.enableservice( domain ttcmf.prov service , long enable )</Syntax>
      <Description>Checks in the Services (ttcmf030) table if service is enabled (ttcmf030.enab = yes) or not. If not, and enable is true, then service is enabled. If yes, and enable is false, then service is disabled. In the other (two) cases nothing happens.    </Description>
      <HelpID>/progguide/emessage_connector/cmf.enableservice</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getaddressbookkey</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getaddressbookkey( long entry.id , ref string key , ref string category )</Syntax>
      <Description>Gets the two key fields of the Address Book (ttcmf200) of the recipient identified by entry.id and returns them in the strings key and category.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getaddressbookkey</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getaddressdetails</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getaddressdetails( long entry_id , ref string category , ref string key , ref string role , ref string name , ref string address , ref string addresstype , ref long errorcode )</Syntax>
      <Description>Retrieves the details of an address entry specified by entry_id. Entry_id is obtained from the function cmf.getNextAddress() or cmf.addAddressEntry() . The attribute values for the object identified by entry_id are copied to the appropriate parameter variables.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getaddressdetails</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentalarm</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentalarm( long apid , ref domain ttutc alarm )</Syntax>
      <Description>Gets the alarm of the appointment identified by apid and returns it in the utc date alarm.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentalarm</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentalldayevent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentalldayevent( long apid , ref enum alldayevent )</Syntax>
      <Description>Gets the alldayevent flag of the appointment identified by apid and returns it in the string alldayevent.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentalldayevent</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentbusystatus</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentbusystatus( long apid , ref string busystatus )</Syntax>
      <Description>Gets the busystatus of the appointment identified by apid and return string into busystatus.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentbusystatus</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentendtime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentendtime( long apid , ref domain ttutc endtime )</Syntax>
      <Description>Gets the endtime of the appointment identified by apid and returns it in the utc date endtime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentendtime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentlocation</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentlocation( long apid , ref string location )</Syntax>
      <Description>Gets the appointment location of the appointment identified by apidand return string into location.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentlocation</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentmeeting</Name>
      <ScriptType>all</ScriptType>
      <Syntax>4GLE cmf.getappointmentmeeting( long apid , ref enum meeting )</Syntax>
      <Description>Gets the meeting flag of the appointment identified by apid and returns it in the string meeting.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentmeeting</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentstarttime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentstarttime( long apid , ref domain ttutc starttime )</Syntax>
      <Description>Gets the starttime of the appointment identified by apid and returns it in the utc date starttime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentstarttime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getappointmentsubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getappointmentsubject( long apid , ref string subject )</Syntax>
      <Description>Gets the appointment subject of the appointment identified by apid and returns string into subject.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentsubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getattachmentbody</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getattachmentbody( long attachment , enum ttyeno body )</Syntax>
      <Description>Gets the type of the attachment identified by attachment and returns it in the enum body.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getattachmentbody</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getattachmentfilename</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getattachmentfilename( long attachment , string filename , ref string displayname )</Syntax>
      <Description>Gets the filename and display name of the attachment identified by attachment and return them in the strings� filename and displayname.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getattachmentfilename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getattachmentmime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getattachmentmime( long attachment , ref string mime )</Syntax>
      <Description>Gets the mime type of the attachment identified by attachment and returns it in the string mime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getattachmentmime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getattachmentposition</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getattachmentposition( long attachment , string position(10) )</Syntax>
      <Description>Gets the position of the attachment identified by attachment and returns it in the string position.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getattachmentposition</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getcategories</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getcategories( long mid , ref string categories )</Syntax>
      <Description>Gets the categories of the message identified by mid and returns string into categories.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getcategories</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getchargecode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getchargecode( long mid , ref string chargecode )</Syntax>
      <Description>Gets the message charge code of the message identified by mid and returns string into chargecode.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getchargecode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getclass</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getclass( long mid , ref string class )</Syntax>
      <Description>Gets the message class of the message identified by mid and returns string into class.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getclass</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getcreatetime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getcreatetime( long mid , ref domain ttutc createtime )</Syntax>
      <Description>Gets the message creation time of the message identified by mid and returns it into utc date createtime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getcreatetime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getdisplay</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getdisplay( long mid , ref enum display )</Syntax>
      <Description>Gets the display option of this message identified by mid and put it in the variable display.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getdisplay</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getduedate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getduedate( long mid , ref domain ttutc duedate )</Syntax>
      <Description>Gets the duedate of the message identified by mid and returns it in the utc date duedate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getduedate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getexpiry</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getexpiry( long mid , ref domain ttutc expiry )</Syntax>
      <Description>Gets the expiry time of the message identified by mid and returns it in the utc date expiry.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getexpiry</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getfollowupflag</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getfollowupflag( long mid )</Syntax>
      <Description>Get the value of the followup flag from the message identified by mid.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getfollowupflag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getid</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getid( long messageld , string service , domain ttcmf.mdir message.direction , ref string error_string() )</Syntax>
      <Description>Creates a path to the header.xml file, which consists of the message storage path in the Services (ttcmf030) table and inbox or outbox (depending on message direction) and header.xml. This file is opened in read mode and then parsed with function xml.read which returns the bshell-wide unique object ID of the message object, which is often needed to call other functions in this library.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getmessageid</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getmessageid( long mid , ref string messageId )</Syntax>
      <Description>Gets the message id of the message identified by mid and return string into messageId.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getmessageid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getnextaddress</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getnextaddress( long aid , long previous )</Syntax>
      <Description>Retrieves the next address child element in the address list root element identified by aid. If previous is 0 (zero) the id of the first entry on the addresslist is returned with type element. Else, the entry following the entry identified by previous is returned.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getnextaddress</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getnextattachment</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getnextattachment( long mid , long previous )</Syntax>
      <Description>Gets an attachment entry in the message identified by mid and returns the identification of the attachment. If previous is 0 (no valid object id), then the first attachment is returned.  If previous is a valid object id (not 0) then the attachment id of the attachment that follows the attachment identified by previous is returned.  Subsequent calls to this function return succeeding attachments. The current attachment pointer can be reset by setting previous to 0 again.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getnextattachment</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getnextrecipient</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getnextrecipient( long mid , ref enum role )</Syntax>
      <Description>Retrieves the recipient entry in the message identified by the combination of role and the id of the previous recipient listed in the XML document. It returns the id of the recipient object. If previous is 0 (zero), the id of the first recipient listed in the XML document is returned.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getnextrecipient</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getnotification</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getnotification( long mid , ref enum notification )</Syntax>
      <Description>Gets the notification required of the message identified by mid and returns it in the enum notification.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getnotification</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getpriority</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getpriority( long mid , ref enum priority )</Syntax>
      <Description>Gets the priority of the message identified by mid and returns it in the enum priority.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getpriority</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipientaddress</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipientaddress( long recipient , ref string address )</Syntax>
      <Description>Gets the address of the recipient identified by recipient and returns it in the string address.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipientaddress</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipientname</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipientname( long recipient , ref string name )</Syntax>
      <Description>Gets the name of the recipient identified by recipient and returns it in the string name.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipientname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipientreasoncode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipientreasoncode( long recipient , ref long reasoncode )</Syntax>
      <Description>Gets the reason code of the recipient identified by recipient and returns it in the string reasoncode.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipientreasoncode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipientreasonstring</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipientreasonstring( long recipient , ref string reasonstring )</Syntax>
      <Description>Gets the reason string of the recipient identified by recipient and returns it in the string reasonstring.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipientreasonstring</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipientresponsibility</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipientresponsibility( long recipient , ref string responsibility )</Syntax>
      <Description>Gets the responsibility of the recipient identified by recipient and returns it in the string responsibility.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipientresponsibility</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getrecipienttype</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getrecipienttype( long recipient , ref string type )</Syntax>
      <Description>Gets the type of the recipient identified by recipient and returns it in the string type.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getrecipienttype</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getsensitivity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getsensitivity( long mid , ref enum sensitivity )</Syntax>
      <Description>Gets the sensitivity of the message identified by mid and returns it in the enum sensitivity.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getsensitivity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getservice</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getservice( long addresstype , enum user_interaction , enum resolve , ref string service )</Syntax>
      <Description>Returns the name of the service that supports the addresstype specified by the variables addresstype, user_interaction and resolve.  The enum variables use the same enum types as their respective fields in the Infor ERP LN eMessage Connector Address Types by Service table.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getservice</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getstarttime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getstarttime( long mid , ref domain ttutc starttime )</Syntax>
      <Description>Gets the delivery start time of the message identified by mid and return in the utc date starttime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getstarttime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getsubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getsubject( long mid , ref string subject )</Syntax>
      <Description>Gets the message subject of the message identified by mid and return string into subject.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getsubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettaskduedate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettaskduedate( long tid , ref domain ttutc duedate )</Syntax>
      <Description>Gets the task duedate of the task identified by tid and return it in the utc date duedate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettaskduedate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettaskpriority</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettaskpriority( long tid , ref enum priority )</Syntax>
      <Description>Gets the task priority of the task identified by tid and returns string into priority.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettaskpriority</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettaskremindertime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettaskremindertime( long tid , ref domain ttutc remindertime )</Syntax>
      <Description>Gets the task remindertime of the task identified by tid and returns it in the utc date remindertime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettaskremindertime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettaskstartdate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettaskstartdate( long tid , ref domain ttutc startdate )</Syntax>
      <Description>Gets the task startdate of the task identified by tid and returns it in the string startdate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettaskstartdate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettasksubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettasksubject( long tid , ref string subject )</Syntax>
      <Description>Gets the task subject of the task identified by tid and return string into subject.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettasksubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettasktotalwork</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettasktotalwork( long tid , ref string totalwork )</Syntax>
      <Description>Gets the totalwork of the task identified by tid and return string into totalwork.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettasktotalwork</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.gettemplate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.gettemplate( long mid , ref string template )</Syntax>
      <Description>Gets the message template of the message identified by mid and return string into template.</Description>
      <HelpID>/progguide/emessage_connector/cmf.gettemplate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.isserviceenabled</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.isserviceenabled( domain ttcmf.prov service )</Syntax>
      <Description>Checks in the Services (ttcmf030) table if service is enabled (ttcmf030.enab = yes) or not.  </Description>
      <HelpID>/progguide/emessage_connector/cmf.isserviceenabled</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.messagedialog</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.messagedialog( long mode , long show  [, long show.message] )</Syntax>
      <Description>Launches a Message dialog box.</Description>
      <HelpID>/progguide/emessage_connector/cmf.messagedialog</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.receive</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.receive( long mid , domain ttcmf.prov service , long block )</Syntax>
      <Description>Receives a Infor ERP LN eMessage Connector message object and returns the object id in mid. The appropriate connector must have been previously started prior to calling this function using cmf.startService()cmf.startService .</Description>
      <HelpID>/progguide/emessage_connector/cmf.receive</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.resolveaddress</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.resolveaddress( ref domain ttcmf.catg category , ref domain ttcmf.catg key , ref domain ttcmf.defa addresstype , ref string address() , ref string message.str  [, string name(100) mb]  [, long use.default] )</Syntax>
      <Description>Selects address data of recipient identified by key and category from Address Book and sets address depending on value of addresstype. Address data is selected from Tools Address Book (table ttcmf200) if current company is 0 and from Infor ERP LN Address Book (table tccom130/131) if current company is not 0. If key and categoryarguments are  empty, it is possible to search the Tools Address Book using the optional argument name. If more than one record is found, an error is returned. The Infor ERP LN Address Book cannot be searched using just a name. In this case a RECIPIENT_NOT_FOUND (-2) error is returned.If the argument use.defaultis set to true and addresstype is empty, the address is resolved using the default address type specified in the Address Book. If the addresstype argument is empty and use.default is not set to true, the address is not resolved.If the key and categoryarguments are both filled and also a name argument is supplied, then it is checked if they match. If they do not match, the category and key arguments are made empty and the Tools Address Book is searched for an entry with name= &lt;name&gt;. If exactly one entry is found the category, key andaddress argument  are filled with the found values. Note: the Infor ERP LN Address Book cannot be searched with just a nameargument. So in this case a RECIPIENT_NOT_FOUND (-2) error is returned.If category is ‘Distribution List’, the function stops immediately after the above check and returns SUCCESS (0). If the category and key arguments are empty and the name argument filled, the Tools Address Book (ttcmf200) is searched to determine if this name represents a distribution list, if so, the keyargument is filled with the name of the list (ttcmf210.list) and the categoryargument is set to ‘Distribution List’.</Description>
      <HelpID>/progguide/emessage_connector/cmf.resolveaddress</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.send</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.send( long mid , string service(15) )</Syntax>
      <Description>Sends the Infor ERP LN eMessage Connector message object identified by midusing the service specified by service. The message class is set to the service name.</Description>
      <HelpID>/progguide/emessage_connector/cmf.send</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.sendtoperson</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.sendtoperson( long mid , long aid , long display , long show.progress , ref string message_string() , long convert , string filename1 ... )</Syntax>
      <Description>Takes the message object and sends it to the recipients in the addresslist object that is identified by aid. Recipients are separated into groups by address type (fax, SMTP, telex, SITA, and so on). For each group a separate message object is built with the recipients in that group attached to it. The Infor ERP LN eMessage Connector service for that address type is started and the message sent to it. If no sender information is available, it will automatically be added. This holds also for the notify recipient (who, for example, gets the delivery reports). Also it's checked that the addresslist object contains only one sender (from-recipient). Any errors encountered are stored for each recipient in the addresslist object. Infor ERP LN eMessage Connector services opened by this function are not stopped. This is for efficiency purposes. It is expensive to start and stop services. This allows applications to make multiple calls to cmf.sendToPerson without incurring the overhead of service startup and shutdown. Instead another function will be provided to stop all services opened by this function (cmf.stopAllServices).</Description>
      <HelpID>/progguide/emessage_connector/cmf.sendtoperson</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentalarm</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentalarm( long apid , domain ttutc alarm )</Syntax>
      <Description>Sets the alarm of the appointment identified by apid to the value alarm.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentalarm</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentalldayevent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentalldayevent( long apid , enum alldayevent )</Syntax>
      <Description>Sets the alldayevent flag of the appointment identified by apid to the value alldayevent.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentalldayevent</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentbusystatus</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentbusystatus( long apid , enum busystatus )</Syntax>
      <Description>Sets the busystatus of the appointment identified by apid to the valuebusystatus.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentbusystatus</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentendtime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentendtime( long apid , domain ttutc endtime )</Syntax>
      <Description>Sets the endtime of the appointment identified by apid to the value endtime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentendtime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentlocation</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentlocation( long apid , string location )</Syntax>
      <Description>Sets the appointment location of the appointment identified by apid to the value location.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentlocation</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentmeeting</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentmeeting( long apid , enum meeting )</Syntax>
      <Description>Sets the meeting flag of the appointment identified by apid to the value meeting.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentmeeting</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentstarttime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentstarttime( long apid , domain ttutc starttime )</Syntax>
      <Description>Sets the appointment starttime of the appointment identified by apidto the value starttime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentstarttime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setappointmentsubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setappointmentsubject( long apid , string subject )</Syntax>
      <Description>Sets the appointment subject of the appointment identified by apid to the value subject.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentsubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setattachmentbody</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setattachmentbody( long attachment , enum body )</Syntax>
      <Description>Sets the type of the attachment identified by attachment to the value body.If body is “YES”, then the attachment is considered to be the bodytext.  Only one body attachment is allowed for each message object, although this is NOT enforced by the Infor ERP LN eMessage Connector.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setattachmentbody</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setattachmentfilename</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setattachmentfilename( long attachment , string filename  [, string displayname] )</Syntax>
      <Description>Sets the physical filename of the attachment identified by attachmentto the value filename.  Sets the human-readable filename to displayname.  If displayname is not supplied, then the readable filename is set to the physical filename.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setattachmentfilename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setattachmentmime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setattachmentmime( long attachment , string mimetype )</Syntax>
      <Description>Sets the mime type of the attachment identified by attachment to the value mime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setattachmentmime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setattachmentposition</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setattachmentposition( long attachment , string position(10) )</Syntax>
      <Description>Sets the position of the attachment identified as attachment to the value position. Position determines the number of characters (of the bodytext) after which the attachment-icon will be placed. By default the attachment-icon is positioned at the end of the bodytext.   </Description>
      <HelpID>/progguide/emessage_connector/cmf.setattachmentposition</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setcategories</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setcategories( long mid , string categories )</Syntax>
      <Description>Sets the categories of the message identified by mid to the value categories.Categories are supplied in a comma delimited list.  Mail clients such as Microsoft Outlook make use of categories and all categories used in Outlook can be used here.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setcategories</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setchargecode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setchargecode( long mid , string chargecode )</Syntax>
      <Description>Sets the message charge code of the message identified by mid to the value chargecode. Chargecodes are used to determine who will be charged for sending/receiving this message.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setchargecode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setclass</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setclass( long mid , string class )</Syntax>
      <Description>Sets the message class of the message identified by mid to the value class.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setclass</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setdisplay</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setdisplay( long mid , enum display )</Syntax>
      <Description>Sets the display option of this message identified by mid to the valuedisplay.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setdisplay</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setduedate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setduedate( long mid , domain ttutc duedate )</Syntax>
      <Description>Sets the duedate of the message identified by mid to the value duedate. In case this message is routed through Microsoft Outlook, the message follow-up flag is set together with the indicated duedate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setduedate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setexpiry</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setexpiry( long mid , domain ttutc expiry )</Syntax>
      <Description>Sets the expiry time of the message identified by mid to the value expiry.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setexpiry</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setfollowupflag</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setfollowupflag( long mid )</Syntax>
      <Description>Sets the follow-up flag of the message identified by mid.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setfollowupflag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setmessageid</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setmessageid( long mid , string messageId )</Syntax>
      <Description>Sets the message ID of the message identified by mid and returns string into messageId. The messageId is a string that uniquely identifies a message within Infor ERP LN eMessage Connector. The application using Baan eMessage Connector need not to call this function as Infor ERP LN eMessage Connector will take care of this automatically.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setmessageid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setnotification</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setnotification( long mid , enum notification )</Syntax>
      <Description>Sets the notification required of the message identified by mid to the value notification.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setnotification</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setpriority</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setpriority( long mid , enum priority )</Syntax>
      <Description>Sets the priority of the message identified by mid to the value priority.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setpriority</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipientaddress</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipientaddress( long recipient , string address )</Syntax>
      <Description>Sets the address of the recipient identified by recipient to the valueaddress.  An address could be a fax number, SMTP address, SMS number, and so on)</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipientaddress</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipientname</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipientname( long recipient , string name )</Syntax>
      <Description>Sets the (human-readable) name of the recipient identified by recipientto the value name.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipientname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipientreasoncode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipientreasoncode( long recipient , long reasoncode )</Syntax>
      <Description>Sets the reason code of the recipient identified by recipient to the value reasoncode. The reason code is used only in case of a non-delivery of a message to a recipient.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipientreasoncode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipientreasonstring</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipientreasonstring( long recipient , string reasonstring(100) )</Syntax>
      <Description>Sets the (human-readable) reason string of the recipient identified by recipientto the value reasonstring. The reason string is used only in case of a non-delivery of a message to a recipient.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipientreasonstring</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipientresponsibility</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipientresponsibility( long recipient , string responsibility )</Syntax>
      <Description>Sets the responsibility of the recipient identified by recipient to the value responsibility.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipientresponsibility</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setrecipienttype</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setrecipienttype( long recipient , string type )</Syntax>
      <Description>Sets the type of the recipient identified by recipient to the value type.The listed types are only examples and new types can be introduced at any time.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setrecipienttype</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setsensitivity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setsensitivity( long mid , enum sensitivity )</Syntax>
      <Description>Sets the sensitivity of the message identified by mid to the value sensitivity.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setsensitivity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setstarttime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setstarttime( long mid , domain ttutc starttime )</Syntax>
      <Description>Sets the delivery start time of the message identified by mid to the value starttime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setstarttime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setsubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setsubject( long mid , string subject )</Syntax>
      <Description>Sets the message subject line of the message identified by mid to the value subject. This is a mandatory property for a Infor ERP LN eMessage Connector Connector message.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setsubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settaskduedate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settaskduedate( long tid , domain ttutc duedate )</Syntax>
      <Description>Sets the task duedate of the task identified by tid to the value duedate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settaskduedate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settaskpriority</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settaskpriority( long tid , enum priority )</Syntax>
      <Description>Sets the task priority of the task identified by tid to the value priority.This is a mandatory property for a Infor ERP LN eMessage Connector task.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settaskpriority</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settaskremindertime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settaskremindertime( long tid , domain ttutc remindertime )</Syntax>
      <Description>Sets the task remindertime of the task identified by tid to the value remindertime.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settaskremindertime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settaskstartdate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settaskstartdate( long tid , domain ttutc startdate )</Syntax>
      <Description>Sets the task startdate of the task identified by tid to the value startdate.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settaskstartdate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settasksubject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settasksubject( long tid , string subject )</Syntax>
      <Description>Sets the task subject of the task identified by tid to the value subject.This is a mandatory property for a Infor ERP LN eMessage Connector task.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settasksubject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settasktotalwork</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settasktotalwork( long tid , string totalwork )</Syntax>
      <Description>Sets the task totalwork of the task identified by tid to the value totalwork.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settasktotalwork</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.settemplate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.settemplate( long mid , string template )</Syntax>
      <Description>Sets the message template identification of the message identified by midto the value template.</Description>
      <HelpID>/progguide/emessage_connector/cmf.settemplate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.startservice</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.startservice( long service(15) , long mode  [, string address(13)] )</Syntax>
      <Description>Starts the Infor ERP LN eMessage Connector service</Description>
      <HelpID>/progguide/emessage_connector/cmf.startservice</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.stopallservices</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void cmf.stopallservices( )</Syntax>
      <Description>Stops all Infor ERP LN eMessage Connector services started by cmf.sendToPerson().</Description>
      <HelpID>/progguide/emessage_connector/cmf.stopallservices</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.stopservice</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.stopservice( long service(15) , long mode )</Syntax>
      <Description>Stops the currently running Infor ERP LN eMessage Connector service named servicewhich is running in mode mode.</Description>
      <HelpID>/progguide/emessage_connector/cmf.stopservice</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.updateaddressstatus</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.updateaddressstatus( long entry_id , long errorcode )</Syntax>
      <Description>Updates the error status of an address entry. Entry_id is obtained from the function cmf.getNextAddress(). The possible values of errorcode are subdivided into two categories: errors which can  also occur when the addresslist object is empty (global error variables used) and errors which only occur when the addresslist object is filled with one or more recipients: then the errorcode of the recipient is set to indicate the nature of the error. Possible values: Errors indicated by global variables0OKNo errors for this recipient-1SERVICE_NOT_STARTEDService could not be started: cmf.startService returned error-2SEND_ERRORCmf.send returned error-3SERVICE_DISABLEDService for current address type disabled in the Services (ttcmf030) table Errors indicated by errorcode-10ADDRTYPE_NOT_SUPPORTEDCurrent addresstype not supported by any service.-11NO_SITA_SENDER_ADDRESSFrom-recipient has no SITA-address in Address Book (ttcmf200), so all recipients with addresstype SITA could not be reached.-12MORE_SENDERS_FOUNDMore than one from-recipient found. Message not send to all recipients -13NO_ADDRESSNo address found or set for this recipient. Message not sent to the intended recipient.-14LIST_MEMBER_NOT_ADDEDA member of a distribution list could not be added to the addresslist object.</Description>
      <HelpID>/progguide/emessage_connector/cmf.updateaddressstatus</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getAppointmentDescription</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getAppointmentDescription( long apid , ref string description )</Syntax>
      <Description>Get the value of the description text of the appointment identified by apid and returns it in description.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentdescription</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getAppointmentMethod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getAppointmentMethod( long apid , ref domain ttcmf.mth method )</Syntax>
      <Description>Get the value of the METHOD attribute of the appointment identified by apid and returns it in method.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentmethod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.getAppointmentUUID</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.getAppointmentUUID( long apid , ref string uuid )</Syntax>
      <Description>Get the value of the UUID attribute of the appointment identified by apid and returns it in uuid.</Description>
      <HelpID>/progguide/emessage_connector/cmf.getappointmentuuid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setAppointmentDescription</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setAppointmentDescription( long apid , string description )</Syntax>
      <Description>Set the description text of the appointment identified byapid to the value description. The description of an appointment is optional and may consist of multiple lines of text. Each line must be terminated by a linefeed character.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentdescription</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setAppointmentMethod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setAppointmentMethod( long apid , domain ttcmf.mth method )</Syntax>
      <Description>Set the METHOD attribute of the appointment identified by apid to the value method.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentmethod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmf.setAppointmentUUID</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long cmf.setAppointmentUUID( long apid , string uuid )</Syntax>
      <Description>Set the unique identifier attribute of the appointment identified by apid to the value uuid. The function cmf.createAppointment() creates globally unique identifier and assigns it to the created appointment object. The function cmf.setAppointmentUUID() can be used to change this identifier. This identifier is used by calendar systems to correlate previously sent appointments to this appointment. For instance to recognize an appointment as an update of previously sent appointment the same UUID must be used. In addition the UUID must be set by the application to cancel a previously sent appointment.</Description>
      <HelpID>/progguide/emessage_connector/cmf.setappointmentuuid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>next.event</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long next.event(  [long event(EVTMAXSIZE)] )</Syntax>
      <Description>This removes the event at the top of the event queue and stores it in event. If the event queue is empty, the function waits (that is, it is blocked) until an event arrives. To time out the next.event() function, use set.timer()set.timer. Note that events are send to a Process Group and not to a process. In order to receive events to a process a call to the function set.pgrp(pid, pid) will create a process group for the current process. See set.pgrp() The best way to trace next.event() related problems is to use on the command link of the bshell the following options: -dbgflow -dbgfun -tracelevel 1 -dbgmulact -keeplog -logfile a.file.name.</Description>
      <HelpID>/progguide/events/next.event</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>peek.event</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long peek.event(  [long event(EVTMAXSIZE)] )</Syntax>
      <Description>This reads the event at the top of the event queue and stores it in event. It does not remove the event from the queue. If the event queue is empty, the function waits (that is, it is blocked) until an event arrives. To time out the peek.event() function, use set.timer()set.timer.</Description>
      <HelpID>/progguide/events/peek.event</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pending.events</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long pending.events( )</Syntax>
      <Description>This returns the number of events present in the event queue of the process group. Note that including the function in an empty loop uses a lot of processor time. For example: while pending.events() = 0 ... endwhile</Description>
      <HelpID>/progguide/events/pending.events</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>select.event.input</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void select.event.input( long object_id , long masks )</Syntax>
      <Description>This defines which event types can be generated by the specified object.</Description>
      <HelpID>/progguide/events/select.event.input</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>send.event</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long send.event( long proc_grp , long event(EVTMAXSIZE) )</Syntax>
      <Description>This sends an event from the current process to the specified process group. It enables event-driven communication between processes. A process can send any event type using this function. Note that this is the only way to send events of type EVTCLIENTMESSAGE. If the sending process requires an immediate response, use suspend(0) to force a context switch; that is, to force the system to give processor time to the destination process.</Description>
      <HelpID>/progguide/events/send.event</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.delete</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.delete( const string name )</Syntax>
      <Description>This removes a specified application lock. Only the owner of the lock can delete it. And a lock can be deleted only from within the same process in which it was set.</Description>
      <HelpID>/progguide/functions_appl/appl.delete</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.get.user</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.get.user( const string name , ref string user(12) )</Syntax>
      <Description>This retrieves the BAAN login name of the user who created the specified application lock.</Description>
      <HelpID>/progguide/functions_appl/appl.get.user</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.modify</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.modify( const string name , long old.owner , long new.owner )</Syntax>
      <Description>This changes the owner of a specified application lock. That is, it links the application lock to another 4GL process in the same bshell.</Description>
      <HelpID>/progguide/functions_appl/appl.modify</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.set</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.set( const string name , long mode )</Syntax>
      <Description>This creates an application lock for the current application.</Description>
      <HelpID>/progguide/functions_appl/appl.set</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.delete.excl</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.delete.excl( const string name )</Syntax>
      <Description>This removes a specified exclusive application lock. Only the owner of the lock can delete it. And a lock can be deleted only from within the same process in which it was set.</Description>
      <HelpID>/progguide/functions_appl/appl.delete.excl</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>appl.set.excl</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long appl.set.excl( const string name )</Syntax>
      <Description>This creates an exclusive application lock for the current application.</Description>
      <HelpID>/progguide/functions_appl/appl.set.excl</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>artm.begin.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long artm.begin.transaction( long artm.transaction.class.id  [, long metric.type]  [, void metric.value] )</Syntax>
      <Description>Marks the beginning of a transaction. Each time a transaction starts, artm.begin.transaction() must be called at the beginning of each transaction instance the user wants to monitor.</Description>
      <HelpID>/progguide/functions_artm/artm.begin.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>artm.define.transaction.class</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long artm.define.transaction.class( string tran.name(128) , string tran.detail(128)  [, long metric.type]  [, string metric.name(44)] )</Syntax>
      <Description>Assigns a unique identifier to a transaction class, and optionally to describe the format of additional data passed on by artm.begin.transaction (), artm.update.transaction(), and the artm.end.transaction() calls. This is normally done during the initialization of the specified application. The value returned by artm.define.transaction.class() is passed as a parameter in artm.begin.transaction() calls to identify which class of transaction is starting. A transaction class is a description of a unit of work, such as Check Account Balance. Any number of transaction classes can be defined within each application.</Description>
      <HelpID>/progguide/functions_artm/artm.define.transaction.class</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>artm.end.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long artm.end.transaction( long artm.transaction.id , long tran.status  [, long metric.type]  [, void metric.value] )</Syntax>
      <Description>Marks the end of a transaction instance that was started with artm.begin.transaction(). artm.end.transaction () should be called from the application program just after each transaction instance ends.</Description>
      <HelpID>/progguide/functions_artm/artm.end.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>artm.redefine.transaction.class</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long artm.redefine.transaction.class( string tran.name(128)  [, long metric.type]  [, string metric.name(44)] )</Syntax>
      <Description>Updates the metrics of a predefined session transaction class at the beginning of a session. The 4GL-Engine normally defines a transaction class (without metrics) on session startup for each form command to be measured. If the 4GL-developer wants to do an update on this transaction with specific metrics, they must redefine the transaction class themselves. Call this function in section before.program. Note: if you redefine an existing form command transaction class, you must also handle the start and stop of the transaction yourself. The 4GL-Engine will not take care of this anymore. Implement begin.transaction() in the begin and end.transaction() in the end of the function that is attached to the form command.</Description>
      <HelpID>/progguide/functions_artm/artm.redefine.transaction.class</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>artm.update.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long artm.update.transaction( long artm.transaction.id  [, long metric.type]  [, void metric.value] )</Syntax>
      <Description>This function is not required, and can thus be omitted if not needed. It can be used for two purposes, namely: To show the progress of a long transaction Put the artm.update.transaction() call into the application program after artm.begin.transaction() and before artm.end.transaction() each time "heartbeat" must be sent to indicate that the transaction instance is still running. This would typically be done after fixed interval time. There can be any number of artm.update.transaction() calls between artm.begin.transaction() and artm.end.transaction() pair. This call is most useful for long-running transactions that take minutes or hours to complete. Another way to capture data about the steps within a long transaction is to use component transactions. To provide extra information about a transaction Place artm.update.transaction() into the application program after artm.begin.transaction() and before artm.end.transaction() each time special information about a transaction instance should be provided. If there is no additional information to be provided, don't pass any metrics. There are several types of additional information that may be useful: information about the size of the transaction, information about the state of the application, and diagnostic information.</Description>
      <HelpID>/progguide/functions_artm/artm.update.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>asc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long asc( string characters )</Syntax>
      <Description>This function returns the sum of the code point values encoded in the supplied string. If the supplied string is a single byte string, then each byte of the supplied string is treated as a separate code point, so effectively the sum of all the bytes of the string is returned. If the supplied string is a multi byte string, then a byte with hexadecimal value 0x9B is treated as the beginning of a four-byte encoding of a TSS character 9B pp qq rr, which contributes the hexadecimal value 9Bppqqrr to the value to be returned. Other bytes contribute their own value to the value to be returned.</Description>
      <HelpID>/progguide/functions_ascii_conversion/asc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string chr$( long code )</Syntax>
      <Description>This function returns a single character string corresponding to the supplied code point.</Description>
      <HelpID>/progguide/functions_ascii_conversion/chr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_close_audit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_close_audit( long seqid )</Syntax>
      <Description>Discards the specified sequence identifier. seqid is the identifier returned by aud_open_audit()aud_open_audit when the particular sequence file was opened. When the last sequence file associated with an info file is closed, the info file is also closed.</Description>
      <HelpID>/progguide/functions_aud/aud_close_audit</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_get_audit_dd</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void aud_get_audit_dd( const string seqhdr() , ref string colnames(,) , ref long colinfo(,) )</Syntax>
      <Description>This retrieves the audit data dictionary information from the sequence header of a particular sequence file.</Description>
      <HelpID>/progguide/functions_aud/aud_get_audit_dd</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_get_col_info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void aud_get_col_info( const string seqhdr() , long col_no , ref string col_name() , ref long col_type , ref long col_dep , ref long col_len )</Syntax>
      <Description>This retrieves information about a specified field from the sequence header of a particular sequence file. It retrieves the same information as aud_get_audit_dd(), but for a single field only.</Description>
      <HelpID>/progguide/functions_aud/aud_get_col_info</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_get_fld_values</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_get_fld_values( long colno , const long colinfo , const string rec_buff() , ref string values(,) )</Syntax>
      <Description>This retrieves the values of a specified field from an audit record. You can use this for records of type insert, delete, and update only. For records of type insert and delete, you can retrieve the values of any field. For records of type update, you can retrieve the values of changed fields and primary key fields only.</Description>
      <HelpID>/progguide/functions_aud/aud_get_fld_values</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_get_hdr_size</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_get_hdr_size( long seqid )</Syntax>
      <Description>Because the audit DD of a table can differ in different sequence files, the size of the sequence header can also differ from sequence file to sequence file. This function returns the size (in bytes) of the header of a specified sequence file. You can use the return value to allocate space for the sequence header before retrieving it with aud_read_info_seq_hdr() or aud_read_seq_hdr(). seqid is the sequence identifier returned byaud_open_audit() when the particular sequence file was opened.</Description>
      <HelpID>/progguide/functions_aud/aud_get_hdr_size</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_get_info_seq_hdr_size</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_get_info_seq_hdr_size( long seqid , long seqno )</Syntax>
      <Description>Because the audit DD of a table can differ in different sequence files, the size of the sequence header can also differ from sequence file to sequence file. This function returns the size (in bytes) of the header of a specified sequence file, as stored in the associated info file. You can use the return value to allocate space for the sequence header before retrieving it with aud_read_info_seq_hdr()or aud_read_seq_hdr().</Description>
      <HelpID>/progguide/functions_aud/aud_get_info_seq_hdr_size</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_open_audit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_open_audit( const string host_name() , const string table_name() , long compno , long seqno )</Syntax>
      <Description>This opens a specified sequence file. You identify the file to open by the table/company combination with which it is associated, the host on which it is located, and the sequence file number. The function returns a unique identifier for the file. Other audit functions use this identifier (referred to as the sequence identifier) to refer to this particular sequence file. When you open a sequence file, the associated info file is automatically opened also (unless it is already open).</Description>
      <HelpID>/progguide/functions_aud/aud_open_audit</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_audit_rec</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_audit_rec( long seqid , long rec_no , ref string rec_buff() )</Syntax>
      <Description>This retrieves a specified audit record from the current transaction. You can use aud_read_next_audit_rec() to retrieve the next and subsequent records from the transaction. You can access information in the audit record using the transaction record macros.</Description>
      <HelpID>/progguide/functions_aud/aud_read_audit_rec</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_info_hdr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_info_hdr( const string host_name() , const string table_name() , long compno , ref string info_hdr() )</Syntax>
      <Description>This retrieves the header of the info file associated with a specified table and company number combination. You can access information in the info header using the info header macros.</Description>
      <HelpID>/progguide/functions_aud/aud_read_info_hdr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_info_seq_hdr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_info_seq_hdr( long seqid , long seqno , ref string seqhdr )</Syntax>
      <Description>This reads the header information for a particular sequence file from the associated info file. You can access information in the sequence header using the sequence header macros. Use aud_read_seq_hdr() to read the sequence header from the sequence file itself. The information retrieved by both functions is normally the same.</Description>
      <HelpID>/progguide/functions_aud/aud_read_info_seq_hdr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_next_audit_rec</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_next_audit_rec( long seqid , ref string rec_buff )</Syntax>
      <Description>This reads the next audited record from the current transaction. You can use aud_read_audit_rec() to read a specific audit record and then use aud_read_next_audit_rec() to read the next and subsequent records. You can access information in the audited record using the transaction record macros.</Description>
      <HelpID>/progguide/functions_aud/aud_read_next_audit_rec</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_next_tran</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_next_tran( long seqid , ref string tran_hdr() )</Syntax>
      <Description>This reads the next transaction header in the specified sequence file. You can use aud_read_tran() to read a specific transaction header and then use aud_read_next_tran() to read the next and subsequent transaction headers. You can access information in the transaction header using the transaction header macros.</Description>
      <HelpID>/progguide/functions_aud/aud_read_next_tran</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_seq_hdr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_seq_hdr( long seqid , ref string seqhdr )</Syntax>
      <Description>This retrieves the header information from a specified sequence file. You can access information in the sequence header with the sequence header macros. Use aud_read_info_seq_hdr() to read the sequence header from the info file instead of the sequence file. The information retrieved by both functions is normally the same.</Description>
      <HelpID>/progguide/functions_aud/aud_read_seq_hdr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_read_tran</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_read_tran( long seqid , long tran_no , ref string tran_hdr() )</Syntax>
      <Description>This reads a specified transaction header from a specified sequence file. You can use aud_read_tran() to read a specific transaction header and then use aud_read_next_tran() to read the next and subsequent transaction headers. You can access information in the transaction header with the transaction header macros.</Description>
      <HelpID>/progguide/functions_aud/aud_read_tran</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_select_host</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_select_host( const string table_name() , long compno , long user_interaction , ref string host_name() )</Syntax>
      <Description>Audit files can be located on more than one host (for example, on the local host and a remote host, or on two or more remote hosts). The system maintains a list of hosts where audit files for particular table and company number combinations are located. When accessing audit files, this host list is used to select the particular host on which the files are to be accessed. aud_select_host() selects and returns the name of the host on which the audit files for a specified table and company are to be accessed. You can use this host name as input to aud_open_audit(), aud_read_info_hdr(), and aud_write_info_hdr().</Description>
      <HelpID>/progguide/functions_aud/aud_select_host</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_update_infofile</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_update_infofile( long seqid , const string seqhdr )</Syntax>
      <Description>This writes sequence header information to the info file associated with the specified sequence file. You can set the information for the sequence header with the sequence header macros Note that the sequence header information is not automatically copied to the sequence header in the sequence file itself. To ensure that there is no mismatch between the sequence headers in the info file and in the sequence file, use aud_write_seq_hdr()instead to update a sequence header.</Description>
      <HelpID>/progguide/functions_aud/aud_update_infofile</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_write_info_hdr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_write_info_hdr( long host_name() , string table_name() , long compno , const string info_hdr )</Syntax>
      <Description>This writes info header information to a specified info file. You can set the information for the info header with the info header macros</Description>
      <HelpID>/progguide/functions_aud/aud_write_info_hdr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>aud_write_seq_hdr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud_write_seq_hdr( long seqid , const string seqhdr() )</Syntax>
      <Description>This writes header information to a specified sequence file. You can set the information for the sequence header with the sequence header macros. The function writes the header information to the sequence file and to the associated info file.</Description>
      <HelpID>/progguide/functions_aud/aud_write_seq_hdr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.audit.is.on.for.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>bool aud.audit.is.on.for.table( const string table.code() , long company )</Syntax>
      <Description>This function checks whether audit is on for a specific database table.</Description>
      <HelpID>/progguide/functions_audtr/aud.audit.is.on.for.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.close.selection</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.close.selection( long selection.id )</Syntax>
      <Description>The opening of the audit trail is not done explicitly in comparison to the low-level audit library functions. To close the opened files again, the developer must use the aud.close.selection. During the invocation of aud.select.transactions() and all functions beginning with aud.get.next, each file that is opened but not closed will be registered within the Infor ERP LN Audit Management. The function aud.close.selection() will use this information to close the files that are registered as being open. The function also closes the selection of transactions that have been created using the aud.select.transactions function.</Description>
      <HelpID>/progguide/functions_audtr/aud.close.selection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.field.ids</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.get.field.ids( long selection.id , long table.id , long number.of.fields , const string field.names(,) , ref long field.ids() )</Syntax>
      <Description>aud.get.next.action() stores the contents of the action row internally: old value, new value and status of each field. To retrieve this information, the application needs to have a reference for each field. These references are called field ids. Only when the meta data is changed do the field ids change, so only in such a case does this function have to be used. This function also enables the user to filter only those fields that are relevant to the application by means of a field.names array. This array contains the field names for which an id has to be retrieved.</Description>
      <HelpID>/progguide/functions_audtr/aud.get.field.ids</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.field.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void aud.get.field.info( long selection.id , long table.id , long field.id , ref long field.depth , ref long field.type , ref long field.length )</Syntax>
      <Description>Returns the format of the field at the time it was audited. The information consists of the type, the depth and the size of the field. This function will not check the input, because of performance reasons. Instead the combination selection.id, table.id, field.id is assumed to refer to an existing field, as returned by aud.get.field.ids(). This means that if the input parameters are not valid, an error message will be presented to the end user</Description>
      <HelpID>/progguide/functions_audtr/aud.get.field.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.field.list</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.get.field.list( long selection.id , long table.id , ref string field.names(,) )</Syntax>
      <Description>Use this function to get the field names of all fields logged for a database table in the audit trail. This function is especially useful if the user is not aware or interested in the table fields but simply needs the names of all fields. In this case the user uses the aud.get.number.of.fields() to determine how many fields are available and also uses aud.get.field.list() to obtain the field ids for each field. The information of these two function can be used to further retrieve field info as well as the value of the field using the functions: aud.get.field.info() , aud.get.field.status() and aud.put.old.field.value() and aud.put.new.field.value().</Description>
      <HelpID>/progguide/functions_audtr/aud.get.field.list</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.field.status</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string aud.get.field.status( long selection.id , long table.id , long field.id )</Syntax>
      <Description>Retrieves the status of a field in a database action (insert, update or delete). The status can be one of the following values: X Not available (insert, update or delete) This either means the field does not exist, or it was not logged because this was specified in the data model, or (in case of an update) it was not logged because it has not changed Y (changed)Depending on Action Type: old value available (delete), new value available (insert), both old and new value available, value has changed (update)N (not changed)Value has not changed, yet both old and new values are available (update). The following table shows the status in all cases that might occur: Action TypeField in Audit DDField ChangedField LoggedStatusIYesYesYesYINo--XDYesYesYesYDNo--XUYesYesYesYUYesNoYesNUYesNoNoXUNo--X</Description>
      <HelpID>/progguide/functions_audtr/aud.get.field.status</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.next.action</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.get.next.action( long selection.id , ref long table.id , ref long company , ref string table.code , ref bool meta.data.changed , ref long current.action.number , ref string action.type )</Syntax>
      <Description>Determines and reads the next action from the list of tables that was constructed by the aud.get.next.transaction() function. The action header is returned, which consists of the current.action.number and the action.type. Furthermore, an indication is given on whether the meta data is changed. If this is the case, the number of fields, the type, or the length of one or more fields has changed, which means the meta data functions aud.get.field.ids() and aud.get.field.info() must be used to handle the meta data. The other information on the action (for each field the status, the old value and the new value) is kept internally and can be retrieved using function aud.get.field.status(), aud.put.old.field.value(), and aud.put.new.field.value(). The action.type specifies if the action is a table operation (create table, clear table and drop table) or a row operation (insert row, delete row and update row). If the maximum number of opened files has been reached, the function uses the action numbers to determine the last action in the list. The sequence file of this action is closed before opening a new sequence file.</Description>
      <HelpID>/progguide/functions_audtr/aud.get.next.action</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.next.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.get.next.transaction( long selection.id , long number.of.retries , long retry.interval , ref string transaction.id , ref long commit.time , ref string session , ref string user )</Syntax>
      <Description>After the transactions to be selected have been specified using aud.select.transactions() the next step is to retrieve the audit data from the audit trail. The retrieved audit data can be processed in combination with the acquired meta data. The aud.get.next.transaction function fetches the next transaction data based on the selection defined with the aud.select.transactions() function. When a transaction is read successfully, the function returns the transaction header, consisting of transaction.id, commit.time, session and user.</Description>
      <HelpID>/progguide/functions_audtr/aud.get.next.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.get.number.of.fields</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.get.number.of.fields( long selection.id , long table.id , ref long number.of.fields )</Syntax>
      <Description>Use this function to determine the number of fields, read from the data dictionary, that are stored in the sequence files. This function is especially useful if the user is not aware or interested in the table fields but simply needs to pick up the value of all fields. In this situation the user uses this function together with the aud.get.field.list() to read all the information of all fields.</Description>
      <HelpID>/progguide/functions_audtr/aud.get.number.of.fields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.put.old.field.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void aud.put.old.field.value( long pid , string variable.name , long selection.id , long table.id , long field.id , long element  [, bool endian] )</Syntax>
      <Description>Use aud.put.old.field.value (and aud.put.new.field.value) to retrieve the value of a field from the old (new) value string. The retrieved value is put into the variable supplied by the application. If the action is a table operation the old value and new value have no meaning and therefore this function cannot be used in that case. Depending on the status of a field the old value and/or new value can be retrieved. Insert rowThe value part of the action row contains all the field values of the inserted row. This part is copied to the new.value string.Delete rowThe value part of the action row contains all the field values of the deleted row. This part is copied to the new.value string.Update row The value part of the action row contains both old and new values but not for all fields. Only those fields that have been changed or are part of the key or specified in the audit_set file are stored in the action row. Unchanged field entries in the action row consist of only two parts: the status that is 'N', meaning unchanged, and the old value. Changed field entries in the action row consist of three parts: the status which is 'Y', meaning that the field has changed, and both old value and new value. The function reads each field entry in the action row and, depending on the status, copies the values to the old.value or the new.value string. If the field is unchanged, the status string will have an 'N' for this field entry otherwise an 'Y'. The following table shows whether the functions can be used, depending on action type and status: Action TypeStatusField in OldValuesField in NewValuesIYNoYesIXNoNoDYYesNoDXNoNoUYYesYesUNYesYesUXNoNoUXNoNo</Description>
      <HelpID>/progguide/functions_audtr/aud.put.old.field.value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.put.new.field.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void aud.put.new.field.value( long pid , string variable.name , long selection.id , long table.id , long field.id , long element  [, bool endian] )</Syntax>
      <Description>Use aud.put.old.field.value (and aud.put.new.field.value) to retrieve the value of a field from the old (new) value string. The retrieved value is put into the variable supplied by the application. If the action is a table operation the old value and new value have no meaning and therefore this function cannot be used in that case. Depending on the status of a field the old value and/or new value can be retrieved. Insert rowThe value part of the action row contains all the field values of the inserted row. This part is copied to the new.value string.Delete rowThe value part of the action row contains all the field values of the deleted row. This part is copied to the new.value string.Update row The value part of the action row contains both old and new values but not for all fields. Only those fields that have been changed or are part of the key or specified in the audit_set file are stored in the action row. Unchanged field entries in the action row consist of only two parts: the status that is 'N', meaning unchanged, and the old value. Changed field entries in the action row consist of three parts: the status which is 'Y', meaning that the field has changed, and both old value and new value. The function reads each field entry in the action row and, depending on the status, copies the values to the old.value or the new.value string. If the field is unchanged, the status string will have an 'N' for this field entry otherwise an 'Y'. The following table shows whether the functions can be used, depending on action type and status: Action TypeStatusField in OldValuesField in NewValuesIYNoYesIXNoNoDYYesNoDXNoNoUYYesYesUNYesYesUXNoNoUXNoNo</Description>
      <HelpID>/progguide/functions_audtr/aud.put.old.field.value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>aud.select.transactions</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long aud.select.transactions( long nr.tables , const string table.codes(,) , const long companies() , const string selection.criteria , ref long selection.id )</Syntax>
      <Description>Before transactional data can be read from the audit trail the developer has to select the transactions. This function selects transactions from the audit trail using a list of tables and, if required, some additional selection criteria. The selection.criteria is given in a SQL 'where' like fashion and is used to filter the desired transactions.</Description>
      <HelpID>/progguide/functions_audtr/aud.select.transactions</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>base64.decode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long base64.decode( string data.in , ref string data.out )</Syntax>
      <Description>Decodes the Base64 encoded input to binary output.</Description>
      <HelpID>/progguide/functions_base64/base64.decode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>base64.encode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long base64.encode( string data.in , ref string data.out )</Syntax>
      <Description>Encodes the binary input to Base64 encoded output.</Description>
      <HelpID>/progguide/functions_base64/base64.encode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.and</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.and( long pattern1 , long pattern2 )</Syntax>
      <Description>These functions compute binary bit operations on one or two bit patterns. Both patterns must be of type long; a long is 32 bits.</Description>
      <HelpID>/progguide/functions_bit/bit_and_exor_in_inv_or</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit exor</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit exor( long pattern1 , long pattern2 )</Syntax>
      <Description>These functions compute binary bit operations on one or two bit patterns. Both patterns must be of type long; a long is 32 bits.</Description>
      <HelpID>/progguide/functions_bit/bit_and_exor_in_inv_or</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.in( long pattern1 , long pattern2 )</Syntax>
      <Description>These functions compute binary bit operations on one or two bit patterns. Both patterns must be of type long; a long is 32 bits.</Description>
      <HelpID>/progguide/functions_bit/bit_and_exor_in_inv_or</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.or</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.or( long pattern1 , long pattern2 )</Syntax>
      <Description>These functions compute binary bit operations on one or two bit patterns. Both patterns must be of type long; a long is 32 bits.</Description>
      <HelpID>/progguide/functions_bit/bit_and_exor_in_inv_or</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.inv</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.inv( long pattern1 )</Syntax>
      <Description>Inverts all bits of the passed long.</Description>
      <HelpID>/progguide/functions_bit/bit_and_exor_in_inv_or</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.shiftl</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.shiftl( long bitpattern , long no_of_bits )</Syntax>
      <Description>These shift a bit pattern to the left or to the right. The bit pattern can be of type long, or it can be a hexadecimal constant. When using a hexadecimal constant, it must begin with '0x'. The no_of_bits argument indicates the number of bits that the pattern must be shifted.</Description>
      <HelpID>/progguide/functions_bit/bit_shift</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bit.shiftr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bit.shiftr( long bitpattern , long no_of_bits )</Syntax>
      <Description>These shift a bit pattern to the left or to the right. The bit pattern can be of type long, or it can be a hexadecimal constant. When using a hexadecimal constant, it must begin with '0x'. The no_of_bits argument indicates the number of bits that the pattern must be shifted.</Description>
      <HelpID>/progguide/functions_bit/bit_shift</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>bg$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string bg$( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to set the background color of the current window. The color argument can have the following values: CW.BLACKCW.BLUECW.GREENCW.CYANCW.REDCW.MAGENTACW.YELLOWCW.WHITE</Description>
      <HelpID>/progguide/functions_char_b_win/bg</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>box</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void box( long box_x , long box_y , long box_width , long box_height , long mode )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This draws a rectangle on the screen. If the specified box does not fit in the current window, only the part that does fit is displayed. Changes become visible on screen only after calling refresh().</Description>
      <HelpID>/progguide/functions_char_b_win/box</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>bs$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string bs$(  [long num_expr] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to position the cursor num_expr positions to the left. If you do not specify the num_expr argument, the default number of positions is 1.</Description>
      <HelpID>/progguide/functions_char_b_win/bs</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string cf$( long attribute_code )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to send a control code to the current window or printer. All characters after the command are printed or displayed in the font associated with the control code. To reset the font to normal, call cf$(0). The following codes are available: CodeScreenPrinter0normalnormal1boldbold2blinkingbold3bold blinkingbold4reversereverse5bold reversebold reverse6blinking reversebold reverse7bold blinking reversebold reverse8underscoreunderscore9underscore boldunderscore bold10underscore blinkingunderscore bold11underscore bold blinkingunderscore bold12underscore reverseunderscore reverse13underscore reverse boldunderscore bold reverse14underscore reverse blinkingunderscore bold reverse15underscore reverse bold blinkingunderscore bold reverse</Description>
      <HelpID>/progguide/functions_char_b_win/cf</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>change.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void change.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This makes the specified window current. This does not affect the screen display.</Description>
      <HelpID>/progguide/functions_char_b_win/change.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cl.screen</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void cl.screen( long column , long row , long no_of_cols , long no_of_rows )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This clears a specified area of the current window. The changes become visible on screen only after you call refresh().</Description>
      <HelpID>/progguide/functions_char_b_win/cl.screen</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cp$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string cp$( long column , long row )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to position the cursor at the specified column and row. The cursor position is always relative to the upper left corner of the current window.</Description>
      <HelpID>/progguide/functions_char_b_win/cp</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string cr$( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to send a carriage return (without a line feed) to the screen or printer. The cursor is positioned at column 1 of the current line.</Description>
      <HelpID>/progguide/functions_char_b_win/cr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>cs$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string cs$(  [long num_expr] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to change the window size and/or clear the window. The num_expr argument can have one of the the following values: 0clear current window1clear current window (default value)2set screen to 80 columns and clear current window3set screen to 132 columns and clear current window4set screen to 80 columns without clearing current window5set screen to 132 columns without clearing current window</Description>
      <HelpID>/progguide/functions_char_b_win/cs</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>current.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long current.window( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This returns the identification number of the current window. A window becomes current when it is created or when you call change.window(). All actions to the screen ( print() for example) are sent to the current window.</Description>
      <HelpID>/progguide/functions_char_b_win/current.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>data.input</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void data.input( string options(.) , ref string result(.) , string default(.) , ref long event(EVTMAXSIZE) , ref long char_value )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This reads data from the keyboard. If the function specifies a default value, that value is displayed on screen. The value is accepted when the user presses ENTER. However, if the user enters a character at the first position in the field, the default value is deleted. Normally, characters typed by the user are inserted before the current cursor position. However, if option 'C' is included in the options argument, characters typed by the user are inserted at the current cursor position. Users can edit the default value or make minor corrections to the string entered (before they press ENTER) by using the following keys: RIGHT ARROWScroll right.LEFT ARROWScroll left.DELDelete character at cursor position. Characters to the right of the deleted character are moved one position to the left. If the cursor is positioned beyond the last character, this character is deleted and the cursor moves one position to the left. Pressing DEL in an empty field redisplays the default value.CTRL+XClear field.TABDelete all characters from the cursor position to the end of the field.</Description>
      <HelpID>/progguide/functions_char_b_win/data.input</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>del.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void del.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This deletes the specified window. When you delete the current window, the next window in the internal window stack becomes the current one. The screen is not refreshed automatically.</Description>
      <HelpID>/progguide/functions_char_b_win/del.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>delch$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string delch$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to delete num_expr characters, from the current cursor position to the right. The text following the deleted characters shifts num_expr positions to the left.</Description>
      <HelpID>/progguide/functions_char_b_win/delch</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>deleteln$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string deleteln$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to delete num_expr lines, from the current line down. Lines below the deleted ones are moved up.</Description>
      <HelpID>/progguide/functions_char_b_win/deleteln</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>el$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string el$( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to erase all characters from the current character to the end of the line. The cursor position is not changed.</Description>
      <HelpID>/progguide/functions_char_b_win/el</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>es$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string es$( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to erase all characters from the current cursor position to the end of the screen. The cursor position is not changed.</Description>
      <HelpID>/progguide/functions_char_b_win/es</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>ff$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string ff$( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to send a form feed to the printer. The result of this function cannot be sent to the screen.</Description>
      <HelpID>/progguide/functions_char_b_win/ff</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>fg$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string fg$( long color )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to set the foreground color of text, starting at the current cursor position. The color argument can have the following values: CW.BLACKCW.BLUECW.GREENCW.CYANCW.REDCW.MAGENTACW.YELLOWCW.WHITE</Description>
      <HelpID>/progguide/functions_char_b_win/fg</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>first.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void first.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This places the specified window above all other windows on the screen. The window is also placed at the first position in the internal window stack. The alterations become visible on screen only when you call refresh() or wrebuild(0).</Description>
      <HelpID>/progguide/functions_char_b_win/first.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>fs$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string fs$(  [long num_expr] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to move the cursor num_expr positions to the left. If you exclude the num_expr argument, the cursor is moved one space to the left.</Description>
      <HelpID>/progguide/functions_char_b_win/fs</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.col</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.col( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This retrieves the number of the column where the cursor is currently positioned. The function uses get.cp(), so it is slower than that function.</Description>
      <HelpID>/progguide/functions_char_b_win/get.col</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.cp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void get.cp( ref long x , ref long y )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This stores the coordinates of the current cursor position in the x and y arguments.</Description>
      <HelpID>/progguide/functions_char_b_win/get.cp</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.row</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.row( )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This retrieves the number of the row where the cursor is currently positioned. The function uses get.cp(), so it is slower than that function.</Description>
      <HelpID>/progguide/functions_char_b_win/get.row</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.window.attrs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.window.attrs( long wind_id , ref long attrs(WINMAXSIZE) )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This stores attributes of the specified window in the attrs array. The maximum number of attributes that can be retrieved is indicated by the predefined constant WINMAXSIZE. You can retrieve the attributes with the following predefined variables: win.parent( attrs )window ID of parent windowwin.x( attrs )x-position of windowwin.y( attrs )y-position of windowwin.width( attrs )width of windowwin.height( attrs )height of windowwin.border.width( attrs )border width of window (gwindow only)win.background( attrs )background color of windowwin.event.mask( attrs )mask indicating the events generated by the window</Description>
      <HelpID>/progguide/functions_char_b_win/get.window.attrs</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>insch$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string insch$( string attr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to insert the result of string_expr at the current cursor position. The characters to the right of the cursor are moved string_expr positions to the right.</Description>
      <HelpID>/progguide/functions_char_b_win/insch</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>insertln$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string insertln$( string string_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to insert the result of string_expr on a new line, above the current line. The current and succeeding lines are moved down.</Description>
      <HelpID>/progguide/functions_char_b_win/insertln</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>keyin$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string keyin$(  [long flag] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This reads the first character from the keyboard buffer. If there is no character in the buffer, the function waits until one is entered. If you include the optional argument, the function performs a non-blocking read. If there is no character in the buffer, the function returns immediately with an empty string. This form of the function is used for interrupting a batch process when the user presses a key. The function converts the following function keys to ASCII characters: KeyAsciiLEFT ARROWBS8^HRIGHT ARROWFF12^LUP ARROWVT11^KDOWN ARROWLF10^JINSERTEM25^Y</Description>
      <HelpID>/progguide/functions_char_b_win/keyin</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>last.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void last.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This places the specified window below all other windows on the screen. The window is also placed at the last position in the internal window stack. The alterations become visible on screen only when you call refresh() or wrebuild(0).</Description>
      <HelpID>/progguide/functions_char_b_win/last.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>lf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string lf$(  [long num_expr] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to send one or more line feeds to the screen or printer. The cursor is moved down num_expr lines. If you do not specify a number of lines, the cursor is moved down one line.</Description>
      <HelpID>/progguide/functions_char_b_win/lf</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>map.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void map.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This makes the specified window visible, without changing the order of the windows.</Description>
      <HelpID>/progguide/functions_char_b_win/map.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>mark.handler</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long mark.handler( ref long mark.table() )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This enables a user to mark one or more records on an ASCII form. On return, the mark.table argument indicates which records are marked. Each element in the mark.table array corresponds to a record on the form. If an array element is set to 1, the corresponding record is marked. If it set to 0, the corresponding array element is not marked. The predefined variables marked and mark.status are not affected by this function.</Description>
      <HelpID>/progguide/functions_char_b_win/mark.handler</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>move.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void move.window( long col , long row )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This moves the current window to a specified position (relative to the top left corner of the parent window). There is no need to refresh the window.</Description>
      <HelpID>/progguide/functions_char_b_win/move.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>new.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long new.window( long height , long width , long row , long col )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This creates a new window. The new window automatically becomes the current window.</Description>
      <HelpID>/progguide/functions_char_b_win/newwindow</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>no.scroll</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void no.scroll( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This disables scrolling for the specified window.</Description>
      <HelpID>/progguide/functions_char_b_win/no.scroll</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string pc$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to set certain printer codes. The following printer codes are available: 1paper bin 12paper bin 23paper bin 34paper bin 45landscape6portrait7usr18usr2......22usr16 You define codes 9 to 22 in the printer information file for the particular printer (for example, $BSE/lib/printinf/m/m290).</Description>
      <HelpID>/progguide/functions_char_b_win/pc</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string pf$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to change the printer font settings. The following settings are available: 1large2small3middle4dblwide5nlq6italic7superscript8subscript9.font110font2......24font16 You define settings 9 to 24 in the printer information file of the particular printer (for example, $BSE/lib/printinf/m/m290).</Description>
      <HelpID>/progguide/functions_char_b_win/pf</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>refresh</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void refresh(  [long wind_id] )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This copies the internal screen to the terminal screen. The internal screen is modified by any function which sends data to the screen (for example, print(), box(), map.window()). The terminal screen is updated only after you call refresh(). If you specify a window ID, the specified window is refreshed. But the window sequence is not changed. If you do not specify a window ID, the current window is refreshed and placed above all other windows on the screen.</Description>
      <HelpID>/progguide/functions_char_b_win/refresh</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>resize.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void resize.window( long width , long height )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This resizes the current window. You must specify the new width and height in pixels. There is no need to refresh the window.</Description>
      <HelpID>/progguide/functions_char_b_win/resize.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>scroll</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void scroll( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This enables scrolling for the specified window. By default, windows do not scroll.</Description>
      <HelpID>/progguide/functions_char_b_win/scroll</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.fg.color</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void set.fg.color( long wind_id , long color )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This sets the foreground color of a specified ASCII window. The color argument can have the following values: CW.BLACKCW.BLUECW.GREENCW.CYANCW.REDCW.MAGENTACW.YELLOWCW.WHITE</Description>
      <HelpID>/progguide/functions_char_b_win/set.fg.color</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.bg.color</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void set.bg.color( long wind_id , long color )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This sets the background color of a specified ASCII window. The color argument can have the following values: CW.BLACKCW.BLUECW.GREENCW.CYANCW.REDCW.MAGENTACW.YELLOWCW.WHITE</Description>
      <HelpID>/progguide/functions_char_b_win/setbgcolor</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>sf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void sf$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to set all text on the screen to bold. Use face="Courier New" sf$(0) to reset the screen to normal.</Description>
      <HelpID>/progguide/functions_char_b_win/sf</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>sub.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sub.window( long parent_wind , long height , long width , long row , long col )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This creates a new window in the specified parent window.</Description>
      <HelpID>/progguide/functions_char_b_win/sub.window</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>tab$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string tab$( long num_expr )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. Use this to position the cursor at a specified column in the current window. If you use this function in the variable spool.pr.line for the function spool.line(), the printer is set to column num_expr.</Description>
      <HelpID>/progguide/functions_char_b_win/tab</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>unmap.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void unmap.window( long wind_id )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This hides the specified window.</Description>
      <HelpID>/progguide/functions_char_b_win/unmapwindow</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>wrebuild</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void wrebuild( long mode )</Syntax>
      <Description>Deprecated. This function is only supported for character-based windows and its usage is therefore deprecated. This redraws the entire screen. The mode argument can have one of the following values: 0All windows are refreshed.1The screen is cleared and all windows are rebuilt.</Description>
      <HelpID>/progguide/functions_char_b_win/wrebuild</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.axis.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.axis.in( long axis_name , long logarithmic , long log_base , long divisions , double divisionstep , double intersection , string division_set(16) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This defines an axis for an axis-oriented graph.</Description>
      <HelpID>/progguide/functions_chm/chm.axis.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.axis.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.axis.out( long axis_name , ref long logarithmic , ref long log_base , ref long divisions , ref double divisionstep , ref double intersection , ref string division_set() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about a specified axis from the Business Chart Manager. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.axis.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.chartman</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.chartman( long chart_manager(80) , string title(80) , string user(14) , string owner(14)  [, string version(4)]  [, string release(2)]  [, string cust(4)] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts the Business Chart Manager for a specified Business Chart Manager application, user, owner, and, optionally, VRC code. Window preferences, fonts, charts, chart types, and option sets are defined by Business Chart Manager application. For a particular application, authorizations, option sets, and window preferences are defined by user (see the Chart Manager Application Data session (ttchm1500m000)). You can also assign the same option set to a group of users. The owner is the creator of the charts; the charts are stored under the owner name (for example, a login name). Users can change only those charts they have created themselves.</Description>
      <HelpID>/progguide/functions_chm/chm.chartman</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.check( sting chart_manager(14) , string user(14) , string chart_type(16) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This checks whether a specified user can access a particular chart type within a specified Business Chart Manager application.</Description>
      <HelpID>/progguide/functions_chm/chm.check</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.data.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.data.in( double series_value , double category_value , long data_number , double data_value , long footnote_no  [, long duplicate_option] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This sends a data point to the Business Chart Manager. You must call this function for each data point that you want to send.</Description>
      <HelpID>/progguide/functions_chm/chm.data.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.data2domain.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.data2domain.in( double series_value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Data domain II defines the start value, end value, and step size for the data II axis. You use the second data domain and axis when you want to draw two different series to different scales in order to facilitate comparison. You use chm.domain.in() to define a domain. You use this function to specify which series uses the second data domain. By default, the other series uses the normal data domain.</Description>
      <HelpID>/progguide/functions_chm/chm.data2domain.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.delete.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.delete.data( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes from memory the data points added by chm.data.in(). The function cannot delete data points that the application has already saved.</Description>
      <HelpID>/progguide/functions_chm/chm.delete.data</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.delete.data2domains</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.delete.data2domains( ref double series_value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes the second data domain from memory. The series that uses the second data domain will use the first data domain after this function has been called.</Description>
      <HelpID>/progguide/functions_chm/chm.delete.data2domains</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.delete.footnotes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.delete.footnotes( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes from memory the footnotes added by chm.footnote.in(). The function cannot delete values that the application has already saved.</Description>
      <HelpID>/progguide/functions_chm/chm.delete.footnotes</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.delete.projections</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.delete.projections( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes from memory the projection points added by chm.projection.in(). The function cannot delete values that the application has already saved.</Description>
      <HelpID>/progguide/functions_chm/chm.delete.projections</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.delete.sets</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.delete.sets( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes from memory the set elements added by chm.set.in(). The function cannot delete values that the application has already saved.</Description>
      <HelpID>/progguide/functions_chm/chm.delete.sets</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.disconnect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.disconnect( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This disconnects the Business Chart Manager from the application, enabling independent user interaction. The user can now work with the Chart Manager and modify data, without affecting the data in the application.</Description>
      <HelpID>/progguide/functions_chm/chm.disconnect</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.domain.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.domain.in( long domain_name , long data_type , string set_name(16) , string title(16) , string unit_label(16) , double from_value , double to_value , double interval , string display_format(80) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This defines a domain, which specifies a start value, an end value, and a step value for a particular axis. The domain determines which values are legal for the axis.</Description>
      <HelpID>/progguide/functions_chm/chm.domain.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.domain.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.domain.out( long domain_name , ref long data_type , ref string set_name() , ref string title() , ref string unit_label , ref double from value , ref double to_value , ref double interval , ref string display_format() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information from the Business Chart Manager about a specified domain. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.domain.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.draw</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.draw(  [double cat_from_value] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This signals to the Business Chart Manager that it must start (re)drawing the chart. The optional argument enables you to specify the value of the first category for which the chart must be (re)drawn.</Description>
      <HelpID>/progguide/functions_chm/chm.draw</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.first.data.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.first.data.out( long option , ref double series_value , ref double category_value , ref long data_number , ref double data_value , ref long footnote_no )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information from the Business Chart Manager about the first data point in the current chart. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started. Use chm.next.data.out() to retrieve information about the next and subsequent data points.</Description>
      <HelpID>/progguide/functions_chm/chm.first.data.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.first.data2domain.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.first.data2domain.out( ref double series_value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this to check which is the first graph series that is linked to the second data domain of the current chart.</Description>
      <HelpID>/progguide/functions_chm/chm.first.data2domain.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.first.footnote.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.first.footnote.out( ref long footnote_no , ref string footnote_text() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This returns information about the first footnote in the current chart. Use chm.next.footnote.out() to retrieve information about subsequent footnotes in the chart.</Description>
      <HelpID>/progguide/functions_chm/chm.first.footnote.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.first.projection.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.first.projection.out( ref double projection_point , ref long footnote_no )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about the first projection point in the current chart. Use chm.next.projection.out() to retrieve information about subsequent projection points in the chart.</Description>
      <HelpID>/progguide/functions_chm/chm.first.projection.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.first.set.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.first.set.out( string set_name(16) , ref long element_number , ref string element_name() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about the first element in the specified set. Use chm.next.set.out() to retrieve information about subsequent elements in the set.</Description>
      <HelpID>/progguide/functions_chm/chm.first.set.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.footnote.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.footnote.in( long footnoote_no , string footnote_text(80) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This function defines a footnote that can be used to annotate a data point or projection point.</Description>
      <HelpID>/progguide/functions_chm/chm.footnote.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.get.request</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.get.request( long chart_no , ref double category_from_value , ref double category_to_value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves a request from the Business Chart Manager. After calling the function, the application waits for a signal from the Chart Manager that a request is ready. It can then check the return value of the function to determine the nature of the request. The application must react to the request appropriately.</Description>
      <HelpID>/progguide/functions_chm/chm.get.request</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.new</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.new( string chart_name(16) , ref string chart_type() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This creates a new chart. The chart is not saved until the user executes the Save command.</Description>
      <HelpID>/progguide/functions_chm/chm.new</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.next.data.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.next.data.out( long option , ref double series_value , ref double category_value , ref long data_number , ref double data_value , ref long footnote_no )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. You use chm.first.data.out() to retrieve information about the first data point in the current chart. You use chm.next.data.out() to retrieve information about the next data point in the same chart. To retrieve information about all subsequent data points, you can place this function in a loop that executes as long as the return value is CHM_OK. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.next.data.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.next.data2domain.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.next.data2domain.out( ref double series_value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. You use chm.first.data2domain.out() to retrieve the sequence number of the first graph series that is linked to the second data domain of the current chart. You use chm.next.data2domain.out() to retrieve the sequence number of the next graph series that is linked to the second data domain of the same chart. To retrieve information about all subsequent graph series that are linked to the second domain, you can place this function in a loop that executes as long as the return value is CHM_OK. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.next.data2domain.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.next.footnote.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.next.footnote.out( ref long footnote_no , ref string footnote_text() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use chm.first.footnote.out()to retrieve information information about the first footnote in the current chart. Use chm.next.footnote.out() to retrieve information about the next footnote in the current chart. To retrieve information about all subsequent footnotes in the chart, you can place this function in a loop that executes as long as the return value is CHM_OK. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.next.footnote.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.next.projection.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.next.projection.out( ref double projeection_point , ref long footnote_no )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use chm.first.projection.out() to retrieve information about the first projection point in the current chart. Use chm.next.projection.out() to retrieve information about the next projection point in the same chart. To retrieve information about all subsequent projections in the chart, you can place this function in a loop that executes as long as the return value is CHM_OK. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.next.projection.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.next.set.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.next.set.out( string set_name(16) , ref long element_number , ref string element_name() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use chm.first.set.out() to retrieve information about the first element in a specified set. Use chm.next.set.out() to retrieve information about the next element in the set. To retrieve information about all subsequent elements in the set, you can place this function in a loop that executes as long as the return value is CHM_OK.</Description>
      <HelpID>/progguide/functions_chm/chm.next.set.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.open( string chart_name(16) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This opens the specified chart with its associated data.</Description>
      <HelpID>/progguide/functions_chm/chm.open</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.projection.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.projection.in( double projection_point , long footnote_no )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This defines a projection point for the current chart.</Description>
      <HelpID>/progguide/functions_chm/chm.projection.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.remove</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.remove( string chart_manager(80) , string owner_from(14) , string ower_to(14) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes all charts from the chart list for the specified users. It is not necessary to start the Business Chart Manager in order to use this function.</Description>
      <HelpID>/progguide/functions_chm/chm.remove</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.scale.axis</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void chm.scale.axis( double from_value , double to_value , long divisions , double factor , ref double domain_from_value , ref double domain_to_value , ref double divisionstep )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This generates a scaling based on the minimum and maximum data values to be presented by the graph and on the number of divisions required. You can use the returned domain_from_value, domain_to_value, and divisionstep as inputs to chm.domain.in() and chm.axis.in().</Description>
      <HelpID>/progguide/functions_chm/chm.scale.axis</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.select</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.select( string chart_manager(80) , string title(80) , long mode , string user(14) , string owner(14) , ref string chart_name(16) , ref string chart_type(16) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts a session in which the user can select or create another chart or chart type. It is not necessary to start the Business Chart Manager in order to use this function.</Description>
      <HelpID>/progguide/functions_chm/chm.select</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.set.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.set.in( string set_name(16) , ref long element_number , string element_name(80) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This adds an element to a specified set.</Description>
      <HelpID>/progguide/functions_chm/chm.set.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.set.option</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.set.option( long option , long flag )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this to switch an application option on and off. Applications options are defined in the Applications Options session (ttchm1120s000). Actions can be linked to an application option using the chm.get.request() function</Description>
      <HelpID>/progguide/functions_chm/chm.set.option</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.set.timer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.set.timer( long time )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts a timer. The Business Chart Manager sends a CHM_TIMER signal to the application every specified number of milliseconds. When the application retrieves the signal, it can perform appropriate actions (see chm.get.request()). You can turn off the timer by calling chm.set.timer() with a time of zero.</Description>
      <HelpID>/progguide/functions_chm/chm.set.timer</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.title.in</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.title.in( string main_title(80) , string sub_title(80) )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This function defines a main title and a subtitle for the current chart.</Description>
      <HelpID>/progguide/functions_chm/chm.title.in</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>chm.title.out</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chm.title.out( ref string main_title() , ref string sub_title() )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves the main title and subtitle of the current chart. If the client application modifies the information and saves it to the source table or file, the new information is included the next time the chart is started.</Description>
      <HelpID>/progguide/functions_chm/chm.title.out</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>app_start</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long app_start( string commandline , string directory , string stdin , string stdout , string stderr )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use function: start.application.local(). This starts the application specified in the commandline argument. It returns an ID for the started application. You can subsequently use this ID as the app.id argument in the app_status() function.</Description>
      <HelpID>/progguide/functions_client_file_access/app_start</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>app_status</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long app_status( long app.id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use function: start.application.local(). This retrieves information about a specified application.</Description>
      <HelpID>/progguide/functions_client_file_access/app_status</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>client2server</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long client2server( string source , string dest , boolean text.mode  [, boolean rm.file]  [, boolean progress.window] )</Syntax>
      <Description>This copies a specified file from the client to the server.</Description>
      <HelpID>/progguide/functions_client_file_access/client2server</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.local.directory</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long create.local.directory( string dirent )</Syntax>
      <Description>This creates a specified directory on a client system. You must have write permission in the parent directory to do this. Access permissions for the new directory are set to read and write for all users.</Description>
      <HelpID>/progguide/functions_client_file_access/create.local.directory</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.local.file</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long create.local.file( string filename )</Syntax>
      <Description>This creates a specified file on a client system. You must have write permission in the parent directory to do this. Access permissions for the new file are set to read and write, for all users. When the file does already exist, it will be truncated.</Description>
      <HelpID>/progguide/functions_client_file_access/create.local.file</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.select.dialog.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dir.select.dialog.local( ref string dirname )</Syntax>
      <Description>This shows the Windows Browse For Folder dialog, to allow the user to select one new or existing folder (directory) on the client.</Description>
      <HelpID>/progguide/functions_client_file_access/dir.select.dialog.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.client.hostname</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.client.hostname( ref string hostname )</Syntax>
      <Description>This returns the hostname of the local client (if available). In case of Baan Windows this is the client machine on which BW is running. In case of WebUI, this is the client machine on which the Internet Browser is running.</Description>
      <HelpID>/progguide/functions_client_file_access/get.client.hostname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.client.ip.address</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.client.ip.address( ref string ip.address )</Syntax>
      <Description>Get the IP address of the local client. In case of Baan Windows this is the client machine on which BW is running. In case of WebUI, this is the client machine on which the Internet Browser is running</Description>
      <HelpID>/progguide/functions_client_file_access/get.client.ip.address</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.local.filename</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string get.local.filename( )</Syntax>
      <Description>This function returns the last client filename used by the function server2client() or client2server(). When the last server2client() or client2server() function failed, this function will return an empty string.</Description>
      <HelpID>/progguide/functions_client_file_access/get.local.filename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.local.directory</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long remove.local.directory( string dirent )</Syntax>
      <Description>This deletes a specified directory on the client system.</Description>
      <HelpID>/progguide/functions_client_file_access/remove.local.directory</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.local.file</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void remove.local.file( string filename )</Syntax>
      <Description>This deletes a specified file on the client system.</Description>
      <HelpID>/progguide/functions_client_file_access/remove.local.file</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>seq.close.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void seq.close.local( long lfn )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use functions: server2client() or client2server(). This empties the buffers associated with the specified file and closes the file. If the remove.after.use flag was set when the file was opened, the file is removed after it is closed.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.close.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.fstat.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.fstat.local( string filename , ref long nr.bytes )</Syntax>
      <Description>This retrieves information about a specified file on a client system.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.fstat.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.open.dialog.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.open.dialog.local( boolean mselect , string defaultname , string directory , string filter , ref string filename )</Syntax>
      <Description>This shows the Windows file-open dialog, to allow the user to select one or more local files.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.open.dialog.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.open.dialog.next</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.open.dialog.next( ref string filename )</Syntax>
      <Description>Retrieve the next full pathname of the file selected by the user in a previous seq.open.dialog.local() function. This function should only be used when a previous call to seq.open.dialog.local() returned a value greater than 1.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.open.dialog.next</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>seq.open.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.open.local( string filename , string mode(2)  [, long remove.after.use] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use functions: server2client() or client2server(). This opens a specified file on the client system. It returns a file pointer, which you can use to identify the file in subsequent operations.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.open.local</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>seq.read.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.read.local( ref string buf , ref long size , long lfn )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use function: client2server(). This reads a specified number of bytes from a specified file into buf.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.read.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.saveas.dialog.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.saveas.dialog.local( string defaultname , string directory , string filter , ref string filename )</Syntax>
      <Description>This shows the Windows file save-as dialog, to allow the user to select a new or existing local file to be saved.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.saveas.dialog.local</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>seq.write.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.write.local( long buf , long size , long lfn )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Instead you should use function: server2client(). This writes data from the specified buffer to the specified file, beginning at the current file position.</Description>
      <HelpID>/progguide/functions_client_file_access/seq.write.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>server2client</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long server2client( string source , string dest , boolean text.mode  [, boolean progress.window]  [, boolean read.only] )</Syntax>
      <Description>This copies a specified file from the server to the client.</Description>
      <HelpID>/progguide/functions_client_file_access/server2client</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>start.application.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean start.application.local( string commandline , boolean waitFlag , ref long exitCode  [, const string verb] )</Syntax>
      <Description>This starts the client application specified in the commandline argument.</Description>
      <HelpID>/progguide/functions_client_file_access/start.application.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>color.dialog</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void color.dialog( ref long io.color )</Syntax>
      <Description>This shows a color selection dialog, to allow the user to select a color. The selected color is then reported back to the application when the dialog box exits.</Description>
      <HelpID>/progguide/functions_client_file_access/color.dialog</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>open.url.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean open.url.local( string url , long mode  [, string dialog.title]  [, string dialog.message] )</Syntax>
      <Description>This function opens a URL in an (embedded) browser. This function is only supported in the WebUI.</Description>
      <HelpID>/progguide/functions_client_file_access/open.url.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.client.timezone</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string get.client.timezone( )</Syntax>
      <Description>This returns the current Windows Timezone name of the local client (if available). In case of Baan Windows this is the client machine on which BW is running. In case of WebUI, this is the client machine on which the Internet Browser is running when running on a Windows system. When then client runs on a non-Widows operating system an empty string is returned.</Description>
      <HelpID>/progguide/functions_client_file_access/get.client.timezone</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>blue.component</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long blue.component( long color )</Syntax>
      <Description>These return the values of the blue, green, and red components respectively of an rgb color.</Description>
      <HelpID>/progguide/functions_color/color.component</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>geen.component</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long geen.component( long color )</Syntax>
      <Description>These return the values of the blue, green, and red components respectively of an rgb color.</Description>
      <HelpID>/progguide/functions_color/color.component</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>red.component</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long red.component( long color )</Syntax>
      <Description>These return the values of the blue, green, and red components respectively of an rgb color.</Description>
      <HelpID>/progguide/functions_color/color.component</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rgb</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long rgb( long red , long green , long blue )</Syntax>
      <Description>Use this to compose a color by specifying its red, green, and blue intensities. The intensities must be in the range 0 to 255.</Description>
      <HelpID>/progguide/functions_color/rgb</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>compnr.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean compnr.check( long new_compnr )</Syntax>
      <Description>This switches to another company and sets the read-only variable COMPNR to the specified company number. It checks whether the user is authorized for the new company, and switches company only if so.</Description>
      <HelpID>/progguide/functions_company_operations/compnr.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.appl.data.company</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.appl.data.company( string package(2) , string application.id(30) )</Syntax>
      <Description>This function read the application data company for a user. First a search for the setting of the current user is done. If there is no setting for the current user available, the generic settings for the environment is read.</Description>
      <HelpID>/progguide/functions_company_operations/get.appl.data.company</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.company</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string get.company( )</Syntax>
      <Description>This returns the name of the current company.</Description>
      <HelpID>/progguide/functions_company_operations/get.company</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.compnr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.compnr( )</Syntax>
      <Description>This returns the ID number of the current company.</Description>
      <HelpID>/progguide/functions_company_operations/get.compnr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>switch.to.company</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long switch.to.company( long new_compnr )</Syntax>
      <Description>This switches to another company and sets the read-only variable COMPNR to the specified company number. It performs several checks before switching company and switches company only if the checks are successful. For example, it checks if the user is authorized to change to the new company, it checks if the package combination linked to the old company contains the same package VRC's as the package combination linked to the new company, and it checks if the old and new companies have the same first day of the week.</Description>
      <HelpID>/progguide/functions_company_operations/switch.to.company</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.currencies</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void set.currencies( long seqno , string currency(3)  [, string currency.desc mb] )</Syntax>
      <Description>Use this function to create and fill the multicurrency table. The function inserts a single entry in the table. Currency rotation is based on the order of currencies in this table. Make sure that all the indices of the table (seqno) form a consecutive range, starting at 1</Description>
      <HelpID>/progguide/functions_currency_tables/set.currencies</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.abort.transaction</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void after.abort.transaction( )</Syntax>
      <Description>This hook is called after the application did an abort.io() in the UI script from the after.choice of the choice.update.db section If there is a DAL for an object set, this hook is called to perform the required actions. This hook is called only by the STP and CDAS. It is not called by Data Access Methods or abort.transaction()</Description>
      <HelpID>/progguide/functions_dal/after.abort.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.change.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long after.change.object( )</Syntax>
      <Description>This hook is called after the current record has been changed, but not yet updated in the database. It marks the end of changing the current record.</Description>
      <HelpID>/progguide/functions_dal/after.change.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.commit.transaction</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void after.commit.transaction( )</Syntax>
      <Description>Use this to update other database tables after an update of the current table has been committed to the database. This object hook is called just after the after.update.db.commit event section in a UI script. If there is a DAL for an object set, this hook is called to perform the required actions. This hook is called only by the STP and CDAS. It is not called by Data Access Methods or commit.transaction()</Description>
      <HelpID>/progguide/functions_dal/after.commit.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.destroy.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long after.destroy.object( )</Syntax>
      <Description>Use this to update referenced tables after the current object has been deleted. This object hook replaces the after.delete subsection of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary actions. Any after.delete sections in the UI script are ignored. So, if a UI script contains after.delete sections for the main table, you must replace these by after.destroy.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/after.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.get.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>extern long after.get.object( long direction )</Syntax>
      <Description>Use this to program checks that determine whether reading a record is permitted. The checks are performed after the record has been retrieved from the database. The dir argument is set by the STP and specifies the object being read. The possible values are: DAL_GET_FIRST DAL_GET_NEXT DAL_GET_PREV DAL_GET_LAST DAL_FIND DAL_GET_CURR This object hook replaces the after.read subsection of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary checks. Any after.read sections in the UI script are ignored. So, if a UI script contains after.read sections for the main table, you must replace these by after.get.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/after.get.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.new.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long after.new.object( )</Syntax>
      <Description>This hook is called after a new record has been created, but not yet saved in the database. It marks the end of creating a new record.</Description>
      <HelpID>/progguide/functions_dal/after.new.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>after.save.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long after.save.object( long mode )</Syntax>
      <Description>Use this to update referenced tables after a record has been added or updated. The mode argument is set by the 4GL engine. The possible values are: DAL_NEW indicates a new record DAL_UPDATE indicates a record being updated This object hook replaces the after.write and after.rewrite subsections of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary actions. Any after.write and before.rewrite sections in the UI script are ignored. So, if a UI script contains after.write and after.rewrite sections for the main table, you must replace these by after.save.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/after.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.change.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long before.change.object( )</Syntax>
      <Description>This hook is called when the current record is about to be changed/modified. It marks the start of modifying the record.</Description>
      <HelpID>/progguide/functions_dal/before.change.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.destroy.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>function extern long before.destroy.object( )</Syntax>
      <Description>Use this to program checks that determine whether deleting a record is permitted. This object hook replaces the before.delete subsection of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary checks. Any before.delete sections in the UI script are ignored. So, if a UI script contains before.delete sections for the main table, you must replace these by before.destroy.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/before.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.get.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>function extern long before.get.object( long direction )</Syntax>
      <Description>Use this to program checks that determine whether reading a record is permitted. The argument is set by the STP or CDAS and specifies the object being read. The possible values are: DAL_GET_FIRST DAL_GET_NEXT DAL_GET_PREV DAL_GET_LAST DAL_FIND DAL_GET_CURR This object hook replaces the before.read subsection of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary checks. Any before.read sections in the UI script are ignored. So, if a UI script contains before.read sections for the main table, you must replace these by before.get.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/before.get.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.new.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long before.new.object( )</Syntax>
      <Description>This hook is called when a new record is about to be created. It marks the start of creating a new record.</Description>
      <HelpID>/progguide/functions_dal/before.new.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.open.object.set</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long before.open.object.set( )</Syntax>
      <Description>Use this to program checks that determine whether opening of the object set is permitted. If this hook exists, it is executed after the before.program event section for the main table. It is also called for every first access to a DAL by business methods or Data Access Methods. You can also use this section to program query extensions and to initialize data (like reading parameter tables).</Description>
      <HelpID>/progguide/functions_dal/before.open.object.set</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>before.save.object</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>function extern long before.save.object( long mode )</Syntax>
      <Description>Use this to program checks that determine whether saving a record is permitted. The mode argument is set by the 4GL engine. The possible values are: DAL_NEW indicates a new record DAL_UPDATE indicates a record being updated This object hook replaces the before.write and before.rewrite subsections of the main.table.io event section in a UI script. If there is a DAL for an object set, this hook is called to perform the necessary checks. Any before.write and before.rewrite sections in the UI script are ignored. So, if a UI script contains before.write and before.rewrite sections for the main table, you must replace these by before.save.object() hooks in the DAL.</Description>
      <HelpID>/progguide/functions_dal/before.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>business.method.is.allowed</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean business.method.is.allowed( )</Syntax>
      <Description>Use this hook to check if the business method may be executed. If the business method may not be executed, then the 4GL engine will disable the corresponding form command on the UI.</Description>
      <HelpID>/progguide/functions_dal/business.method.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>business.method.is.never.allowed</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean business.method.is.never.allowed( )</Syntax>
      <Description>Use this hook to check if the business method may never be executed. If the business method may never be executed, then the 4GL engine will remove the corresponding form command from the UI.</Description>
      <HelpID>/progguide/functions_dal/business.method.is.never.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.field.depends.on</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.field.depends.on( const string fieldname , long hook.list , const string parent.fld.name, ...  [, long hook.list]  [, const string parent.fieldname, ...] )</Syntax>
      <Description>Use this to define that a field depends on one or more other fields. Dependencies are defined in terms of field hooks. In general dal.field.depends.on("a", HOOK_X, "b") means the following: the result of hook a.x() depends on the value of field b. So when changing field "b", hook a.x() is executed. For example, dal.field.depends.on("whinh312.fire", HOOK_IS_APPLICABLE, "whinh312.lsta") should be used if the result of hook whinh312.fire.yes.is.applicable() depends on the value of whinh312.lsta.</Description>
      <HelpID>/progguide/functions_dal/dal.field.depends.on</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.enum.is.applicable</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.enum.is.applicable(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate whether a certain enum constant is applicable. In case the enum constant is not applicable the 4GL engine will not show it in the field's list box, so the end-user cannot select it.</Description>
      <HelpID>/progguide/functions_dal/field.enum.is.applicable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.applicable</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.applicable(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate whether the field is applicable. If a field is not applicable then the 4GL Engine disables the field and the field will be cleared. Depending on the data type of the field the field's value then becomes: string""double0.0long0enumThe default value as defined in the Data Dictionary</Description>
      <HelpID>/progguide/functions_dal/field.is.applicable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.derived</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.derived(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate whether the field is derived. If a field is derived then the 4GL engine makes the field readonly in the UI. The field however, still can have a value. The difference with the readonly hook is: the field's value can be modified, but only by the DAL to which the field belongs. So the end-user is not allowed to change the field�s value. Often, derived fields are redundant fields. Static vs. dynamicDerived fields can be more or less static or dynamic:Static The field will have a value derived from fields not belonging to the DAL's table. Examples: The Business Partner from the Order Header is added to the Order Lines for sorting purposesFields like a Business Partner Balance, or a Quantity Received on an Order LineA Total Order Amount field that is stored in the database for performance reasons Dynamic The field will have a value derived from fields belonging to the DAL's table. Examples: Home Currency Amounts on an Invoice which is stored for performance reasonsThe start and end date that indicate the relation between the NLG and the EUR currencies. This is a fixed period starting at 1999-01-01 and ending at 2002-06-30. However, for other relationships this value does not have to be derived. Public vs. privateSome derived fields are publicly known by other components, like the Stock on Order of an Item. Others are more or less an internal field (private fields). Public derived fields could have a business method that allows other components to modify the field's value. Example: function extern long update.stock.on.order(domain tegen.quan quantity) { FunctionUsage Updates the Stock on Order of the current Item. The Item record is not yet written to the database. Preconditions - Postconditions the Stock on Order property is updated Parameters In quantity the quantity to update the Stock on Order with if negative, the Stock on Order is decremented if positive, the Stock on Order is incremented Returns 0 on success EndFunctionUsage teitm020.ostk = teitm020.ostk + quantity return(0) } Private derived fields should be modified by means of the field.update() hook. Example: |* Updates the Start Date function extern void temmt020.sdat.update() { |* In case the Parent Currency is the Euro, set the start date |* to 1999-01-01. if temmt020.prnt = temmt001.euro then temmt020.sdat = date.to.num(1999, 01, 01) endif }</Description>
      <HelpID>/progguide/functions_dal/field.is.derived</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.mandatory</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.mandatory(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate whether the field is mandatory. If a field is mandatory then it should have a value other than "", 0.0, 0 or empty.</Description>
      <HelpID>/progguide/functions_dal/field.is.mandatory</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.never.applicable</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.never.applicable(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate if the field is never applicable. If a field is never applicable then the 4GL engine will not display the field in the UI (it is made invisible at start up of a session). A field can become never applicable based on a static constraint, like a parameter setting.</Description>
      <HelpID>/progguide/functions_dal/field.is.never.applicable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.readonly</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.readonly(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to indicate whether the field is readonly. If a field is readonly then the 4GL Engine makes the field readonly in the UI. The field however, still can have a value.</Description>
      <HelpID>/progguide/functions_dal/field.is.readonly</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.valid</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean field.is.valid(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to perform any checks not already defined in one of the other field hooks. Some examples: Examples: whether a reference exists or whether the reference is valid. Whether a start date is less than an end date, etc.</Description>
      <HelpID>/progguide/functions_dal/field.is.valid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.update</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>[void|long] field.update(  [long mode]  [, long element] )</Syntax>
      <Description>Use this hook to (re) determine the value of the field based on the current record values. Think of determining defaults and calculating derived values. When using this hook you don't have to use the when.field.changes section in the UI script to update fields.</Description>
      <HelpID>/progguide/functions_dal/field.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.check</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long field.check( long has_changed  [, long element] )</Syntax>
      <Description>Use this hook to program logical integrity rules for a specified field. The function name is ppmmmvss.bbbb.check(), where pp is the package code, mmm is the module code, vss is the table number, and bbbb is the field name. Insert a new objectUpdate an existing object Does the property check for all fields. The has_changed flag is always set to DAL_NEW. Also for fields that are not changed! Does the property check for all fields. The has_changed flag is only set to DAL_UPDATE for changed fields. For unchanged fields, the flag is cleared.</Description>
      <HelpID>/progguide/functions_dal/fieldname.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.make.valid</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long field.make.valid( long mode  [, long element] )</Syntax>
      <Description>This hook is meant to adjust the field's value before it is checked. You can use it for example to round a field's value.</Description>
      <HelpID>/progguide/functions_dal/fieldname.make.valid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.set.defaults</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long field.set.defaults( long has_changed )</Syntax>
      <Description>Use this hook to set defaults based on a specified field. The function name is ppmmmvss.bbbb.check(), where pp is the package code, mmm is the module code, vss is the table number, and bbbb is the field name. If this hook exists, it is executed only by B3 through a BOI in case of DAL_NEW or DAL_UPDATE. A record will be created or modified in a specific order. This order should be defined in the table definition in the section default sequence. default mandatory Possible values are: Always this field should be passed by the BOI (insert) Conditionally this field can be set by defaults; otherwise mandatory Not this field is not really required; but can be passed sequenceThis indicates the number in the sequence. The lowest number will be executed first (0 does not count). First the sequence for default mandatory Always will be executed, followed by Conditionally and Not.</Description>
      <HelpID>/progguide/functions_dal/fieldname.set.defaults</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>method.is.allowed</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean method.is.allowed( long method )</Syntax>
      <Description>This is a special hook for handling centralized authorizations. Use it to perform checks that determine whether certain Data Access Methods are permitted for an object. The method argument specifies the method to check.</Description>
      <HelpID>/progguide/functions_dal/method.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.object.defaults</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long set.object.defaults( )</Syntax>
      <Description>Use this hook to fill a new record with defaults. Before this hook will be called a db.set.to.default() has been executed; therefore it is not necessary to assign values that are already present in the table definition. This is hook is executed by OpenWorld through a BOI in case of a DAL_NEW or in case of a DAL2 DAL, when an insert is started. Note: This hook only contains assignments.</Description>
      <HelpID>/progguide/functions_dal/set.object.defaults</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.any.parent.changed</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean dal.any.parent.changed( )</Syntax>
      <Description>The function dal.any.parent.changed() determines whether any of the fields, from which the current field depends, is changed. This function can only be used in combination with dal.require.field() .</Description>
      <HelpID>/progguide/functions_dal/dal.any.parent.changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.require.field</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax> dal.require.field( const string fieldname  [, long element]  [, ref boolean field.changed] )</Syntax>
      <Description>This function can be used to determine a specific order for the calls to the update hooks. The function only works properly if update hooks are triggered by the 4GL engine (amdll), and not called from the application itself.</Description>
      <HelpID>/progguide/functions_dal/dal.require.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>choose.time.zone.from.list</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long choose.time.zone.from.list( ref string new.timezone )</Syntax>
      <Description>This starts a session where the user can choose a time zone from a list. The function then calls set.timezone() with the time zone selected by the user.</Description>
      <HelpID>/progguide/functions_date_time_zones/choose.time.zone.from.list</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.num</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long date.num( )</Syntax>
      <Description>This returns the number of days from 01-01-0001 to the system date.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.num</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.to.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long date.to.date( long in_date , long in_time , const string in_zone , const string out_zone , ref long out_date , ref long out_time )</Syntax>
      <Description>This converts a date and time in one time zone to the corresponding date and time in a different time zone.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.to.date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.to.inputstr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string date.to.inputstr$( long dayno , string format(7) , long length )</Syntax>
      <Description>This converts a specified number of days since 01-01-0001 to a date input string.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.to.inputstr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.to.num</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long date.to.num( long yearno , long monthno , long month_dayno )</Syntax>
      <Description>This returns the number of days since 01-01-0001 for a specified year, month, and day of the month.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.to.num</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long date.to.utc( long yearno , long monthno , long month_dayno , long hours , long minutes , long seconds )</Syntax>
      <Description>This converts the specified local date and time to UTC long format.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>date.with.timezone.info.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long date.with.timezone.info.to.utc( long yearno , long monthno , long month_dayno , long hours , long minutes , long seconds , long utcdiff )</Syntax>
      <Description>This converts the specified local date and time to UTC long format. For this conversion it will NOT use the timezone of the user, but the difference in seconds to UTC as supplied in the variable utcdiff.</Description>
      <HelpID>/progguide/functions_date_time_zones/date.with.timezone.info.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dte$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string dte$( )</Syntax>
      <Description>This returns the current date and time in the format</Description>
      <HelpID>/progguide/functions_date_time_zones/dte</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.time.zone</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.time.zone( ref string time_zone() )</Syntax>
      <Description>This returns the current time zone. The program must supply a buffer of size 50 to store the result.</Description>
      <HelpID>/progguide/functions_date_time_zones/get.time.zone</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>input.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long input.to.utc( const string value() , const string format() )</Syntax>
      <Description>This converts a local date or local time string to UTC long format.</Description>
      <HelpID>/progguide/functions_date_time_zones/input.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>inputstr.to.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long inputstr.to.date( string inputstr(.) , string format(7) )</Syntax>
      <Description>This converts a date input string to the number of days since 01-01-0001.</Description>
      <HelpID>/progguide/functions_date_time_zones/inputstr.to.date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>inputstr.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long inputstr.to.utc( const string date.inputstr() , string date.format(7) , const string time.inputstr() , string time.format(7) )</Syntax>
      <Description>This converts the specified local date and time input strings to UTC long format.</Description>
      <HelpID>/progguide/functions_date_time_zones/inputstr.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>iso.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long iso.to.utc( const string iso.string )</Syntax>
      <Description>This converts a string, representing a time in ISO-8601 format into a utc.</Description>
      <HelpID>/progguide/functions_date_time_zones/iso.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>local.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long local.to.utc( long local_days , long local_time , ref long utc  [, ref string local_dst] )</Syntax>
      <Description>This converts a local date and time to UTC long format.</Description>
      <HelpID>/progguide/functions_date_time_zones/local.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>local.with.timezone.info.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long local.with.timezone.info.to.utc( long local_days , long local_time , ref long utcdiff , ref long utc )</Syntax>
      <Description>This converts a local date and time to UTC long format. For the conversion, it will NOT use the timezone of the user, but the difference in seconds to UTC as supplied in the variable utcdiff.</Description>
      <HelpID>/progguide/functions_date_time_zones/local.with.timezone.info.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>num.to.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long num.to.date( long dayno , ref long yearno , ref long monthno , ref long month_dayno )</Syntax>
      <Description>This converts a specified number of days since 01-01-0001 to the corresponding year, month, and day of the month.</Description>
      <HelpID>/progguide/functions_date_time_zones/num.to.date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>num.to.date$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string num.to.date$( long dayno , long mode )</Syntax>
      <Description>This converts a specified number of days since 01-01-0001 to the corresponding date, formatted as a date string. The sequence of day, month, and year in the string depends on the user data settings defined in the data dictionary. The separator character used is also defined in the data dictionary.</Description>
      <HelpID>/progguide/functions_date_time_zones/num.to.dates</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>num.to.week</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long num.to.week( long dayno , ref long week_dayno , ref long year_dayno , ref long weekno  [, ref long yearno] )</Syntax>
      <Description>This converts a specified number of days since 01-01-0001 to the corresponding day of the week, day of the year, and week number of the year.</Description>
      <HelpID>/progguide/functions_date_time_zones/num.to.week</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.time.zone</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long set.time.zone( string time_zone(50) )</Syntax>
      <Description>This sets the local time zone at run time.</Description>
      <HelpID>/progguide/functions_date_time_zones/set.time.zone</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>time.num</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long time.num( )</Syntax>
      <Description>This returns the current time as the number of seconds since 00:00.</Description>
      <HelpID>/progguide/functions_date_time_zones/time.num</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>timezone.exists</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean timezone.exists( string time_zone(50) )</Syntax>
      <Description>This checks that the input argument contains the name of a valid time zone.</Description>
      <HelpID>/progguide/functions_date_time_zones/timezone.exists</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.add</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.add( long i.utc , long year , long month , long day , long hour , long minute , long second , long o.utc )</Syntax>
      <Description>This adds years, months, days, hours, minutes, seconds to the input utc value and makes corrections if necessary. It processes the parameters from bigger to smaller units: First adds only years and the date is corrected (if started from a leap year)Than the months are added and the date is corrected to an existing one.The addition of days follow, and the result is so far the same hour, minutes, as it was in the beginning in the actual time-zone.Finally the hours, minutes, seconds are added.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.add</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.num</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.num( )</Syntax>
      <Description>This returns the current local date and time in UTC long format.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.num</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.date.with.timezone.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.date.with.timezone.info( long utc , ref long yearno , ref long monthno , ref long month_dayno , ref long hours , ref long minutes , ref long seconds , ref long utcdiff )</Syntax>
      <Description>This converts a UTC long format value to the corresponding year, month, day, and so on, in local time. The difference in seconds to UTC is returned in the variable utcdiff.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.date.with.timezone.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.date( long utc , ref long yearno , ref long monthno , ref long month_dayno , ref long hours , ref long minutes , ref long seconds )</Syntax>
      <Description>This converts a UTC long format value to the corresponding year, month, day, and so on, in local time.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.input</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string utc.to.input( long lvalue , const string format() )</Syntax>
      <Description>This converts a UTC long format value to an input date string or an input time string (in local time). The format specified determines whether the function returns a date string or a time string.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.input</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.inputstr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.inputstr$( long utc , string date.format(7) , string time.format(7) , ref string local.date() , ref string local.time() )</Syntax>
      <Description>This converts a UTC long format value to a local date string and a local time string.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.inputstr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.iso</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string utc.to.iso( string utc , long format )</Syntax>
      <Description>This converts a utc into a string representation of the utc in ISO8601 format.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.iso</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.local.with.timezone.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.local.with.timezone.info( long utc , ref long local_days , ref long local_time , ref long utcdiff )</Syntax>
      <Description>This converts a UTC long format value to local date and time. The difference in seconds to UTC is returned in the variable utcdiff.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.local.with.timezone.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.local</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.local( long utc , ref long local_days , ref long local_time  [, ref string local_dst] )</Syntax>
      <Description>This converts a UTC long format value to local date and time.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.local</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utc.to.week</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long utc.to.week( long utc , ref long week_dayno , ref long year_dayno , ref long weekno , ref long hours , ref long minutes , ref long seconds  [, ref long yearno] )</Syntax>
      <Description>This converts a UTC long format value to the corresponding day of the week, day of the year, week of the year, and so on, in local time.</Description>
      <HelpID>/progguide/functions_date_time_zones/utc.to.week</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>week.to.num</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long week.to.num( long weekno , long yearno , long week_dayno )</Syntax>
      <Description>This returns the number of days since 01-01-0001 for a specified week number, year number, and day of the week. The day of the week is interpreted by using the day defined as the first day of the week in the user data settings in the data dictionary (see Week handling).</Description>
      <HelpID>/progguide/functions_date_time_zones/week.to.num</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>week.to.utc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long week.to.utc( long weekno , long yearno , long week_dayno , long hours , long minutes , long seconds )</Syntax>
      <Description>This converts a specified week number, year number, day number in week, and so on, in local time, to UTC long format. For information on week numbering, see Week handling.</Description>
      <HelpID>/progguide/functions_date_time_zones/week.to.utc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>abort.io</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void abort.io( string mesg(14)  [,  ...] )</Syntax>
      <Description>This cancels the current database transaction. After this function is called, new values entered on the form remain on the form and the predefined variable stp.abort.error is set to TRUE. In the case of a single-occurrence form, the transaction is then canceled without further actions. In the case of a multioccurrence form, the transaction is canceled but the user is given the opportunity to retry the updates that did not cause an error. If the user chooses to retry the updates, occurrences that caused an error are skipped and those that did not are updated. If the user chooses not to retry the transaction, the transaction is canceled without further action. The user can then start the update again or recover.</Description>
      <HelpID>/progguide/functions_db_operations/abort.io</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>abort.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long abort.transaction( )</Syntax>
      <Description>This cancels the current database transaction. No changes are stored in the database. To commit a transaction and store changes made in the database, use commit.transaction() instead.</Description>
      <HelpID>/progguide/functions_db_operations/abort.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>activate.search</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void activate.search( )</Syntax>
      <Description>This forces a random search action on the main table. You call the function immediately after input to a field during insertion of a new record (standard command ADD.SET or DUPL.OCCUR) or during MODIFY.SET (if the predefined variable modify.prim.key is set to TRUE). When a new record is being added to the database, the 4GL engine normally executes a search action in the main table after input to the field(s) of the primary index. If the key values entered belong to an existing record in the main table, the 4GL engine displays all the fields of that record and stops adding the new record. Otherwise, the user must fill the remaining fields; then the record is added to the main table. In some applications, not all parts of the primary index appear on the form. In this case, the search operation in the main table occurs when the user leaves the last input field of the occurrence. You can force an earlier search action by calling activate.search() after input to any field of the occurrence.</Description>
      <HelpID>/progguide/functions_db_operations/activate.search</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>commit.transaction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long commit.transaction( )</Syntax>
      <Description>This ends the current transaction. All changes made during the transaction are stored in the database. To cancel a transaction, use abort.transaction() instead.</Description>
      <HelpID>/progguide/functions_db_operations/commit.transaction</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>count.records.in.view</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long count.records.in.view( )</Syntax>
      <Description>Counts the number of records that exist in the maintable for the current view. Any filter or query extension that has been set is taken into account. This function can be used in combination with the display.total.fields() function.</Description>
      <HelpID>/progguide/functions_db_operations/count.records.in.view</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.change.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.change.object( string dal_name )</Syntax>
      <Description>Use this to indicate the DAL that the current record is about to be changed. After this call, fields can be changed with dal.set.field(). And after that, the record can be saved with dal.save.object().</Description>
      <HelpID>/progguide/functions_db_operations/dal.change.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.check.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.check.field( string fld.name  [, long element]  [, long mode] )</Syntax>
      <Description>Checks whether the given field has a valid value. This performs the DAL check hooks in the given mode (default is DAL_UPDATE).</Description>
      <HelpID>/progguide/functions_db_operations/dal.check.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.copy.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.copy.object( string dal_name )</Syntax>
      <Description>Use this to indicate the DAL that a record is about to be copied. In contrary to dal.new.object(), this function does not call the set.object.defaults() hook! After this call, fields can be set with dal.set.field(). And after that, the record can be saved with dal.save.object().</Description>
      <HelpID>/progguide/functions_db_operations/dal.copy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.destroy.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.destroy.object( string tbl.name  [, long error.flag] )</Syntax>
      <Description>Deletes a record of the given table. The record must have been locked for update. This function does the same as dal.destroy(), however it does more detailed permission checking. Further, the method.is.allowed hook is always called ( dal.destroy() allows you to skip this hook by passing FALSE to the prop_check parameter). Except for more detailed permission checking, this function is equivalent to: dal.destroy(tbl.name, tbl.cursor, retval, true, db.retry) The sequence of the actions is as follows: Table level permission is checkedRecord level permission is checkedThe method.is.allowed(DAL_DESTROY) hook is calledThe before.destroy.object hook is calledThe delete is performedThe after.destroy.object hook is called</Description>
      <HelpID>/progguide/functions_db_operations/dal.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.destroy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void dal.destroy( string dal.name , long object_set , ref long retval , long prop_check  [, long mode]  [, long eflag] )</Syntax>
      <Description>Use this to delete a database record. The function encapsulates the db.delete() function with the DAL hooks of the object set. If the before.destroy.object() hook fails, the database operation is cancelled.</Description>
      <HelpID>/progguide/functions_db_operations/dal.destroy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.field.mode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.get.field.mode( string tbl.name  [, long element] )</Syntax>
      <Description>Returns the mode of the given field. The mode indicates if the field has changed. This function is equivalent to: dal.get.property.flag(tbl.name, tbl.cursor, fld.name)</Description>
      <HelpID>/progguide/functions_db_operations/dal.get.field.mode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.get.object( string tbl.name , long lock  [, string key_field1]  [, string key_value1] ,  ... )</Syntax>
      <Description>Reads a record of the given table. In case the lock parameter is set to true, the record is locked for update. This function accepts a list of primary key field/value pairs. The sequence of the actions is as follows: The key fields are set according to the passed list of fieldsThe before.get.object hook is called with the DAL_FIND optionThe record is read or lockedRecord level permission is checkedThe after.get.object hook is called with the DAL_FIND option In case this function is called in the context of a 4GL-Session for a table which is either defined as the maintable or a secondary table for this session, this function will check if the requested record is already present in the 4GL-Engine buffers. If so, the 4GL-Engine record buffer is fetched and will not be read from the database. This is especially useful when in a DAL script of a secondary table the corresponding maintable record is needed. Note The dal.get.object() function will return the table fields which are updated through the UI script or by the UI. However, in case these table fields are changed in a DAL script before the dal.get.object() function is called, the dal.get.object() will overwrite these changes.</Description>
      <HelpID>/progguide/functions_db_operations/dal.get.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.property.flag</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.get.property.flag( stirng tbl.name , long object_set , string prop_name )</Syntax>
      <Description>Use this to retrieve the value of the has_changed flag (see property hooks) for any database property dat.get.property.flag. The property must have been changed by the dal.set.property function.</Description>
      <HelpID>/progguide/functions_db_operations/dal.get.property.flag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.is.field.changed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean dal.is.field.changed( string fld.name  [, long element] )</Syntax>
      <Description>Use this to test whether a field has changed. It is equivalent to: dal.get.field.mode(fld.name, [ element ] ) &lt;&gt; 0</Description>
      <HelpID>/progguide/functions_db_operations/dal.is.field.changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.new.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.new.object( string tbl.name )</Syntax>
      <Description>Use this to indicate the DAL that a new record is about to be inserted. This function set record defaults, by calling db.set.to.default() and the set.object.defaults() hook. After this call, fields can be set with dal.set.field(). And after that, the record can be saved with dal.save.object().</Description>
      <HelpID>/progguide/functions_db_operations/dal.new.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.new</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void dal.new( string tbl.name , long object_set , ref long retval , long prop_check  [, long mode]  [, long eflag] )</Syntax>
      <Description>Use this to add a new record to the database. The function encapsulates the db.insert() function with the DAL hooks of the object set. If the before.save.object() hook fails, the database operation is cancelled.</Description>
      <HelpID>/progguide/functions_db_operations/dal.new</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.parent.caused.update</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean dal.parent.caused.update( string fld.name  [, long element] )</Syntax>
      <Description>This function may only be called within an .update() hook. It checks whether this call to this hook was triggered by a change in field fld.name.</Description>
      <HelpID>/progguide/functions_db_operations/dal.parent.caused.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.save.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.save.object( string tbl.name  [, long error.flag] )</Syntax>
      <Description>Saves a record of the given table. In case a dal.new.object() or a dal.copy.object() was done, the record is inserted in the database. In case a dal.change.object() was done, the record is updated in the database. In case field dependencies have been defined in the DAL, this function takes care that dependent fields will be triggered in the right order so that they can update themselves. Note that this is done based on the values of the fields that have been set by calling dal.set.field() Before the record is saved all (changed) fields will be validated. The sequence of the actions is as follows: Table level permission is checked.For all fields set, the field.make.valid() is executed, e.g. to perform rounding of data.All dependent fields are triggered to update themselves.Record level permission is checked.The actual save (insert or update) is done.</Description>
      <HelpID>/progguide/functions_db_operations/dal.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void dal.set.field( string fld.name , void value  [, long element] )</Syntax>
      <Description>Sets the value of the given field and informs the DAL that the field is changed. This function does the same as: ret.val = dal.set.property(tbl.name, tbl.cursor, fld.name, value, mode) where tbl.name and tbl.cursor are provided automatically, and mode is DAL_NEW after dal.new.object or dal.copy.object, and otherwise DAL_UPDATE.</Description>
      <HelpID>/progguide/functions_db_operations/dal.set.field</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>dal.set.property.with.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.set.property.with.check( string tbl.name , long object_set , const string proper_name , void value )</Syntax>
      <Description>In order to notify the DAL about a change to the value of a property, you must use this function to change the value. Using this function ensures that the relevant property hooks are executed when the value is changed. If you use an assignment or the db.* functions to change a property value, the DAL is not notified of the change. Consequently, the property checks in the DAL are not executed.</Description>
      <HelpID>/progguide/functions_db_operations/dal.set.property.with.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.property</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dal.set.property( string tbl.name , long object_set , string prop_name , void value , long mode )</Syntax>
      <Description>In order to notify the DAL about a change to the value of a property, you must use this function to change the value. Using this function ensures that the relevant property hooks are executed when the value is changed. If you use an assignment or the db.* functions to change a property value, the DAL is not notified of the change. Consequently, the property checks in the DAL are not executed.</Description>
      <HelpID>/progguide/functions_db_operations/dal.set.property</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.skip.never.applicable.checks</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.skip.never.applicable.checks( )</Syntax>
      <Description>By default, the 4GL engine will check fields that are defined as never applicable. You can skip these checks by calling this function in the before.open.object.set() hook in the DAL.</Description>
      <HelpID>/progguide/functions_db_operations/dal.skip.never.applicable.checks</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.start.business.method</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void dal.start.business.method( string set_id , string name , ref long retval  [,  ...] )</Syntax>
      <Description>This starts a specified business method. The business method must be implemented as a function of type EXTERN LONG. If this is the first call to a particular class (that is, table), the before.open.object.set() hook is automatically called before the business method is called.</Description>
      <HelpID>/progguide/functions_db_operations/dal.start.business.method</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.update</Name>
      <ScriptType>all</ScriptType>
      <Syntax> dal.update( string class_name , long object_set , ref long retval , long prop_check  [, long mode]  [, long eflag] )</Syntax>
      <Description>Use this to update an existing database record. The function encapsulates the db.update() function with the DAL hooks of the object set. If the before.save.object() hook fails, the database operation is cancelled.</Description>
      <HelpID>/progguide/functions_db_operations/dal.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.bind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.bind( string table_name(9)  [, ref string buffer(.)]  [, long comp_nr] )</Syntax>
      <Description>This creates a pointer to a specified table. It returns a table ID that you use in other database calls to identify the table. The pointer is to a table with a particular company number and record buffer. You can create additional pointers to the same table by calling the function with a different company number and/or record buffer.</Description>
      <HelpID>/progguide/functions_db_operations/db.bind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.change.order</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.change.order( long table_id , long index_nr  [, long compnr] )</Syntax>
      <Description>This makes a specified index the current index. After this action, the record pointer is undefined.</Description>
      <HelpID>/progguide/functions_db_operations/db.change.order</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.check.restricted</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.check.restricted( long table_id , long mode , ref string message(256) )</Syntax>
      <Description>In a table definition, it is possible to set restrictions on update and/or delete actions for records that are referenced by other tables. These restrictions mean that you cannot delete and/or update the primary key that is referenced by another table. This function checks whether there are references to the current record with delete and/or update restrictions. This function can take a long time to complete if no reference counter is kept (lookup mode).</Description>
      <HelpID>/progguide/functions_db_operations/db.check.restricted</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.check.row.changed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.check.row.changed( long table_id )</Syntax>
      <Description>This function checks whether a record that has been delayed locked and changed by the current process has been changed by another process ("user"). It does not check whether the row has been modified in the current process. In a way it answers the question: "If I would update the current record now, would I get the infamous EROWCHANGED error?"</Description>
      <HelpID>/progguide/functions_db_operations/db.check.row.changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.check.row.dlocked</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.check.row.dlocked( long table_id )</Syntax>
      <Description>This checks whether the row, identified by its primary key columns is delayed locked or not. If the row is already locked, the function returns the dlock number of the row. This function can result in a considerable performance gain as it eradicates the need for multiple reads of the same record.</Description>
      <HelpID>/progguide/functions_db_operations/db.check.row.dlocked</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.check.row.domains</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.check.row.domains( long table_id , ref string fld_name )</Syntax>
      <Description>This checks whether the current record of a specified table conforms to the domain definitions in the data dictionary. All fields of the record are checked in turn until an error occurs. The function returns when the first error is encountered.</Description>
      <HelpID>/progguide/functions_db_operations/db.check.row.domains</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.clear.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.clear.table( long table_id  [, long flag]  [, long comp_nr] )</Syntax>
      <Description>This deletes all data from a specified table. Reference counters are automatically updated. By default, all deleted records are saved in rollback segments. Consequently, using this function to clear a large table can result in reduced performance and, in some cases, can cause overflow of the internal rollback segments. Note that this function cannot be used within a transaction if the option NO.ROLLBACK is given; see transaction handling.</Description>
      <HelpID>/progguide/functions_db_operations/db.clear.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.columns.to.record</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.columns.to.record( long table_id )</Syntax>
      <Description>The record buffer of a table is used for reading records from that table. When you bind to a table (see db.bind()) and specify that the default record buffer is to be used, the contents of the table fields are automatically copied to the buffer. This does not happen when you specify a record buffer other than the default buffer. Consequently, you must call this function to copy the field values to the buffer if you have filled the fields before reading from the database.</Description>
      <HelpID>/progguide/functions_db_operations/db.columns.to.record</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.create.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.create.table( string table_name , long compnr )</Syntax>
      <Description>This creates a new database table. Note that this function cannot be used within a transaction; see transaction handling.</Description>
      <HelpID>/progguide/functions_db_operations/db.create.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.curr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.curr( long table_id  [, long lock] )</Syntax>
      <Description>This reads the current record from a specified table.</Description>
      <HelpID>/progguide/functions_db_operations/db.curr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.delete</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.delete( long table_id  [, long mode]  [, long eflag] )</Syntax>
      <Description>This deletes the current record. The record pointer is not changed, so the current record is undefined after the record has been deleted.</Description>
      <HelpID>/progguide/functions_db_operations/db.delete</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.drop.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.drop.table( long table_id  [, long flag]  [, long comp_nr] )</Syntax>
      <Description>This deletes a specified table. Data and indices associated with the table are also deleted. Reference counters are automatically updated. Note that this function cannot be used within a transaction; see transaction handling.</Description>
      <HelpID>/progguide/functions_db_operations/db.drop.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.eq</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.eq( long table_id , long lock )</Syntax>
      <Description>This reads from a specified table the record whose key value equals a certain predefined value. Before calling db.eq(), you must assign the required value to the key field. For example, the following code retrieves the item with item number 001 from the items table: tiitm001.item = "001" db.eq( ttiitm001 )</Description>
      <HelpID>/progguide/functions_db_operations/db.eq</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.error.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  db.error.message( )</Syntax>
      <Description>Some errors returned by a database action have an associated error message. This message provides additional information about the error. Use the db.error.message() function to retrieve the error message (if any) associated with the most recent error code returned by a database action.</Description>
      <HelpID>/progguide/functions_db_operations/db.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.error</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.error( long table_id )</Syntax>
      <Description>Use this to retrieve the error code returned by the most recent database action. If you specify a table ID, the function retrieves the most recent error code returned by an action on that table.</Description>
      <HelpID>/progguide/functions_db_operations/db.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.first</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.first( long table_id  [, long lock] )</Syntax>
      <Description>This reads the first record from a specified table. It uses the current index to search the table.</Description>
      <HelpID>/progguide/functions_db_operations/db.first</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.ge</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.ge( long table_id  [, long lock] )</Syntax>
      <Description>This reads from a specified table the record whose key value is greater than or equal to a certain predefined value. Before calling db.ge(), you must assign the required value to the key field. For example: tiitm001.item = "001" db.ge( ttiitm001 )</Description>
      <HelpID>/progguide/functions_db_operations/db.ge</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.get.physical.compnr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.get.physical.compnr( string tblname , long logical.compnr )</Syntax>
      <Description>Use this to retrieve the physical company number for the specified table (tblname) and logical company number (logical.compnr).</Description>
      <HelpID>/progguide/functions_db_operations/db.get.physical.compnr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.gt</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.gt( long table_id , long lock )</Syntax>
      <Description>This reads from a specified table the record whose key value is greater than a certain predefined value. Before calling db.gt(), you must assign the required value to the key field. For example: tiitm001.item = "001" db.gt( ttiitm001 )</Description>
      <HelpID>/progguide/functions_db_operations/db.gt</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.indexinfo</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.indexinfo( long table_id , long index_nr , ref long index_info(32, 3) , ref long indexparts , ref boolean indexdups , ref boolean indexactive )</Syntax>
      <Description>This returns information about the parts of a specified index.</Description>
      <HelpID>/progguide/functions_db_operations/db.indexinfo</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.insert</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.insert( long table_id , long mode , long eflag )</Syntax>
      <Description>This adds a new record to a specified table. The record pointer does not change.</Description>
      <HelpID>/progguide/functions_db_operations/db.insert</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.last</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.last( long table_id  [, long lock] )</Syntax>
      <Description>This reads the last record from a specified table. It uses the current index to search the table.</Description>
      <HelpID>/progguide/functions_db_operations/db.last</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.le</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.le( long table_id  [, long lock] )</Syntax>
      <Description>This reads from a specified table the record whose key value is less than or equal to a certain predefined value. Before calling db.le(), you must assign the required value to the key field. For example: tiitm001.item = "001" db.le( ttiitm001 )</Description>
      <HelpID>/progguide/functions_db_operations/db.le</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.lock.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.lock.table( long table_id )</Syntax>
      <Description>This locks a specified table. Other users cannot then write to or delete the table or any parts of the table. Nor can they lock the table or any parts of the table. The lock is released by commit.transaction() or abort.transaction(). Note that this function cannot be used within a transaction; see transaction handling.</Description>
      <HelpID>/progguide/functions_db_operations/db.lock.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.lt</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.lt( long table_id  [, long lock] )</Syntax>
      <Description>This reads from a specified table the record whose key value is less than a certain predefined value. Before calling db.lt(), you must assign the required value to the key field. For example: tiitm001.item = "001" db.lt( ttiitm001 )</Description>
      <HelpID>/progguide/functions_db_operations/db.lt</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.next</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.next( long table_id  [, long lock] )</Syntax>
      <Description>This reads the next record from a specified table. It uses the current index to search the table. If there is no current record, the function returns an error message.</Description>
      <HelpID>/progguide/functions_db_operations/db.next</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.nr.indices</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.nr.indices( long table_id , ref long nr_indices )</Syntax>
      <Description>This returns the number of indices that exist on a specified table.</Description>
      <HelpID>/progguide/functions_db_operations/db.nr.indices</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.nr.rows</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.nr.rows( long table_id , ref long nr_rows  [, long comp_nr] )</Syntax>
      <Description>This returns the number of rows that a specified table contains.</Description>
      <HelpID>/progguide/functions_db_operations/db.nr.rows</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.permission</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.permission( long table_id , string field  [, ref string buffer] )</Syntax>
      <Description>Use this to check the access permissions that a user has to a specified table or table field.</Description>
      <HelpID>/progguide/functions_db_operations/db.permission</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.prev</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.prev( long table_id  [, long lock] )</Syntax>
      <Description>This reads the previous record from a specified table. It uses the current index to search the table. If there is no current record, the function returns an error message.</Description>
      <HelpID>/progguide/functions_db_operations/db.prev</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.record.changed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean db.record.changed( long table_id )</Syntax>
      <Description>Tests whether the current value of the record buffer belonging to the given table id has changed since the last call of db.store.record(). First, a db.columns.to.record() is done in order to copy the table field values to the record buffer. Then this record buffer is compared to the one stored with db.store.record(). Note Note that, because of performance reasons, db.record.changed() is implemented as a macro. This is the actual implementation: #define db.record.changed(tbl) ^ (db.columns.to.record(tbl) &lt;&gt; 0 or changed(rcd.##tbl, KEEP.CHANGED.FLAG.RAISED))</Description>
      <HelpID>/progguide/functions_db_operations/db.record.changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.record.to.columns</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.record.to.columns( long table_id )</Syntax>
      <Description>When you bind to a table (see db.bind() and specify that the default record buffer is to be used, the contents of the buffer are automatically copied to the table fields in your program script. This does not happen when you specify a record buffer other than the default buffer. Consequently, you must call this function to copy the field values from the buffer to the table fields in your program script.</Description>
      <HelpID>/progguide/functions_db_operations/db.record.to.columns</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.ref.handle.mode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.ref.handle.mode( string table_name , long mode )</Syntax>
      <Description>Use this to check whether a full table scan (FTS) is necessary during delete or update operations. Delete and update operations can take a long time to complete when the table is referenced by other tables but no reference counter is kept (cascade, nullify, or lookup mode). When there is no index on the foreign key in the child table, normally a full table scan is required to search for referring records.</Description>
      <HelpID>/progguide/functions_db_operations/db.ref.handle.mode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.restore.record</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  db.restore.record( long table_id )</Syntax>
      <Description>This restores the record of the given table that was stored previously with db.store.record(). Also the table's field values will be restored. Note Note that, because of performance reasons, db.record.changed() is implemented as a macro. This is the actual implementation: #define db.restore.record(tbl) ^ not.curr(rcd.##tbl) ^ db.record.to.columns(tbl)</Description>
      <HelpID>/progguide/functions_db_operations/db.restore.record</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.retry.hit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.retry.hit( )</Syntax>
      <Description>Use this to check whether the client database layer has returned to a retry point. You must set the retry point by using db.retry.point() before you call db.retry.hit(). See also Database Handling.</Description>
      <HelpID>/progguide/functions_db_operations/db.retry.hit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.retry.point</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  db.retry.point( )</Syntax>
      <Description>This sets a retry point for the current transaction. The program returns to this point if an error occurs during the transaction; the transaction is then retried. When you include a retry point for a transaction, you must set it before the start of the transaction. When a retry occurs, all messages that were set with dal.set.error.message are also reset. Messages that were set before the retry point will be retained.</Description>
      <HelpID>/progguide/functions_db_operations/db.retry.point</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.row.length</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.row.length( long table_id , ref long row_length )</Syntax>
      <Description>Use this to retrieve the length of records in a specified table.</Description>
      <HelpID>/progguide/functions_db_operations/db.row.length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.set.to.default</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.set.to.default( long table_id )</Syntax>
      <Description>This sets bound variables in the program script to the default values defined in the data dictionary.</Description>
      <HelpID>/progguide/functions_db_operations/db.set.to.default</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.store.record</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void db.store.record( long table_id )</Syntax>
      <Description>Creates a copy of the current value of the record buffer belonging to the given table id. Later on this copied value can be restored by calling db.restore.record(). db.record.changed() compares the current record buffer values with the copy that is created with db.store.record(). Note Note that, because of performance reasons, db.record.changed() is implemented as a macro. This is the actual implementation: #define db.store.record(tbl) ^ db.columns.to.record(tbl) ^ on.change.check(rcd.##tbl)</Description>
      <HelpID>/progguide/functions_db_operations/db.store.record</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.unbind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.unbind( long table_id )</Syntax>
      <Description>This deletes the specified table pointer.</Description>
      <HelpID>/progguide/functions_db_operations/db.unbind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.update</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  db.update( long table_id  [, long mode]  [, long eflag] )</Syntax>
      <Description>This rewrites the current record. When updating a record with this function, you are permitted to update the primary key of the record.</Description>
      <HelpID>/progguide/functions_db_operations/db.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>for.each.record.in.view.do</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  for.each.record.in.view.do( string callback_function )</Syntax>
      <Description>Executes the specified UI script callback function for each record in the current view on the maintable. This means that for the current view (e.g. a sales order), all records (e.g. all order lines) are fetched from the maintable one by one, and for each fetched record, the given callback function is called. In case the session has no view fields, then all records of the maintable are fetched. Any filter, query extend etc. is taken into account. So e.g. a filter set by the user has influence on the number of records being fetched.</Description>
      <HelpID>/progguide/functions_db_operations/for.each.record.in.view.do</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>on.main.table</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void on.main.table( string function_name  [, string ...] )</Syntax>
      <Description>This copies the contents current record of the main table to the record buffer of that table, saves the record, and executes the specified function. After that the saved record buffer is restored. This enables you to perform actions on the record contents without affecting the values in the table.</Description>
      <HelpID>/progguide/functions_db_operations/on.main.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>restore.rcd.main</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  restore.rcd.main( long occurrence )</Syntax>
      <Description>This updates the main table with the contents of the buffer of the specified occurrence. It also makes the specified occurrence the current occurrence.</Description>
      <HelpID>/progguide/functions_db_operations/restore.rcd.main</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.limits.off</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.limits.off( )</Syntax>
      <Description>This removes the limits set with the store.occ.max() and/or store.occ.min() functions. The entire table can then be accessed again.</Description>
      <HelpID>/progguide/functions_db_operations/set.limits.off</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.transaction.readonly</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.transaction.readonly( )</Syntax>
      <Description>This defines a transaction as read only. The transaction can only read records (without locks) from the database; it cannot update the database. When included, this function must be the first command of a transaction. So, you must include it either at the start of the program or immediately following a commit.transaction() or abort.transaction() call. Because it is not possible to update the database in a read-only transaction, you can use only the following database calls in the transaction: db.first() db.lt() db.last() db.le() db.next() db.set.to.default() db.prev() db.change.order() db.gt() db.indexinfo() db.ge() db.nr.indices() db.eq() db.nr.rows() db.cur() db.row.length() db.bind() db.record.to.columns() db.unbind() db.columns.to.record() db.error()</Description>
      <HelpID>/progguide/functions_db_operations/set.transaction.readonly</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>skip.io</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  skip.io( string mesg  [, string ...] )</Syntax>
      <Description>This function is deprecated! Use this to skip the current database action on the current record. The predefined variable stp.skip.error indicates whether or not skip.io() has been called.</Description>
      <HelpID>/progguide/functions_db_operations/skip.io</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.occ.max</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  store.occ.max( )</Syntax>
      <Description>Normally, standard commands that access records of the main table can access all records of that table. You can use these functions to limit the records that can be accessed to those whose key values are within a specified range. Use store.occ.max() to define the upper limit of the range. Use store.occ.min() to define the lower limit of the range. If you wish, you can define only a maximum or only a minimum limit. Before you call either of these functions, you must fill the key value with the required maximum or minimum value. If you set a limit that has previously been defined, the new value of the limit overwrites the previous value of the limit. Use set.limits.off() to switch off the limits defined with these functions.</Description>
      <HelpID>/progguide/functions_db_operations/store.occ.maxmin</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.occ.min</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  store.occ.min( )</Syntax>
      <Description>Normally, standard commands that access records of the main table can access all records of that table. You can use these functions to limit the records that can be accessed to those whose key values are within a specified range. Use store.occ.max() to define the upper limit of the range. Use store.occ.min() to define the lower limit of the range. If you wish, you can define only a maximum or only a minimum limit. Before you call either of these functions, you must fill the key value with the required maximum or minimum value. If you set a limit that has previously been defined, the new value of the limit overwrites the previous value of the limit. Use set.limits.off() to switch off the limits defined with these functions.</Description>
      <HelpID>/progguide/functions_db_operations/store.occ.maxmin</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>this.dal</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>string  this.dal( )</Syntax>
      <Description>Returns the name of the current DAL. Note: This function can only be called from the current DAL!</Description>
      <HelpID>/progguide/functions_db_operations/this.dal</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>to.key</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  to.key( long key_number  [, long nr.view.fields] )</Syntax>
      <Description>Use this to change the key of the main table without user interaction. The key_number argument specifies the new key. When nr.view.fields is specified the session will start with the specified number of viewfields, this is valid only for sessions with dynamic index switching. When in dynamic index switching sessions this parameter is not passed, the default number of viewfields as defined in Sessions - Indices for that index. Note the alignment, labels, and validation when you have sessions with variable number of viewfields. When changing the key of the main table within the on.main.table() function, you must use db.change.order() instead. Also, to change the key of a table other than the main table, you must use db.change.order(). You can also use execute(change.order) to change the key of the main table. In this case, the user selects the new key. Note that during execution of the ADD.SET, MODIFY.SET and MARK.DELETE commands, the current key is saved and the primary key becomes the current key. After the database has been updated, the 4GL engine restores the saved key.</Description>
      <HelpID>/progguide/functions_db_operations/to.key</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>with.object.set.do</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void with.object.set.do( string function_name  [, &lt;type&gt; ...] )</Syntax>
      <Description>With this function you can perform actions on records in the DAL's table, without affecting the current record. First the current record is saved into a temporary record buffer, then the specified function is executed. Afterwards the current record is restored from the temporary buffer. You can call this function in any DAL hook. It is the equivalent of the on.main.table() function used in UI scripts.</Description>
      <HelpID>/progguide/functions_db_operations/with.object.set.do</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>with.old.object.values.do</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void with.old.object.values.do( string function_name  [, &lt;type&gt; ...] )</Syntax>
      <Description>This executes the specified function for the current record, using the old values of the record. The record must have been previously modified. You can call this function in the field hooks and the before.save.object() hook of a DAL script. It is the equivalent of the on.old.occ() function used in UI scripts.</Description>
      <HelpID>/progguide/functions_db_operations/with.old.object.values.do</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>creat.tmp.file$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string creat.tmp.file$(  [string pathname] )</Syntax>
      <Description>This creates a temporary file. By default, the file is created in the current directory. To create the file in a different directory, use the optional pathname argument to specify the full path to the required directory. In UNIX environments, a unique temporary file is created with UNIX-privilege mode 0664.</Description>
      <HelpID>/progguide/functions_directory_file_operations/creat.tmp.file</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dir.close( long dfd )</Syntax>
      <Description>This closes a specified directory and frees all memory allocated to it. The dfd argument is the pointer to the directory returned by dir.open() or dir.open.tree() when the directory was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/dir.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.entry</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  dir.entry( long dfd , long read_type , ref long return_type , ref long filesize , ref long mode )</Syntax>
      <Description>This retrieves entries from a previously opened directory. It retrieves the entries sequentially.</Description>
      <HelpID>/progguide/functions_directory_file_operations/dir.entry</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.open.tree</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dir.open.tree( const string path  [, long nlevels] )</Syntax>
      <Description>This is similar to dir.open() in that it reads a specified directory into memory. However, dir.open.tree() can retrieve up to 256 directory levels. The function returns a pointer (dfd) to the directory data. dir.entry() , dir.rewind() , and dir.close() use this pointer to access the directory.</Description>
      <HelpID>/progguide/functions_directory_file_operations/dir.open.tree</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dir.open( const string path )</Syntax>
      <Description>This reads the specified directory into memory. The path argument can have a maximum length of 2048 characters. The function returns a pointer (dfd) to the directory data. dir.entry() , dir.rewind() , and dir.close() use this pointer to access the directory.</Description>
      <HelpID>/progguide/functions_directory_file_operations/dir.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dir.rewind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dir.rewind( long dfd )</Syntax>
      <Description>This resets the read pointer of the specified directory to the beginning of the directory entry list. The dfd argument is the pointer to the directory returned by dir.open() or dir.open.tree() when the directory was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/dir.rewind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.chown</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.chown( string file , string user , string group )</Syntax>
      <Description>This changes the owner and/or group of a file. You can use a single call to change both the owner and the group. Alternatively, you can specify either the user argument or the group argument as an empty string.</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.chown</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.cp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.cp( const string source , const string target )</Syntax>
      <Description>This copies a specified source file to a specified target file. Both files can be either local or remote. They can also be on different hosts (provided that the bshell can access both hosts).</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.cp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.mv.across.hosts</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.mv.across.hosts( const string source , const string target )</Syntax>
      <Description>This moves a specified source file to the location specified in the target argument. The file can be either local or remote. Source and target can be on different hosts.</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.mv.across.hosts</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.mv</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.mv( const string source , const string target )</Syntax>
      <Description>This moves a specified source file to the location specified in the target argument. The file can be either local or remote. Both source and target must be on the same host.</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.mv</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.rm</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.rm( const string path )</Syntax>
      <Description>This deletes a specified local or remote file. The path argument must include the full path to the file, including the host name, where appropriate. For example: "host!/usr/myfile".</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.rm</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.stat</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.stat( string file_name , ref long file_size  [, ref long ctime]  [, ref long mtime]  [, ref long atime] )</Syntax>
      <Description>This returns information about a specified file. It is a short version of the stat.info() function.</Description>
      <HelpID>/progguide/functions_directory_file_operations/file.stat</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>file.chmod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  file.chmod( const string file , long mode )</Syntax>
      <Description>This sets the access permissions for a specified file.</Description>
      <HelpID>/progguide/functions_directory_file_operations/file_chmod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>fstat.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  fstat.info( long fp , ref long size , ref long mode , ref long inode , ref long dev , ref long uid , ref long gid , ref long nlink , ref long ctime , ref long mtime , ref long atime )</Syntax>
      <Description>This returns information about a specified file. It provides the same information as stat.info(). But instead of retrieving information about a named file, it returns information about an open file that is known by the file descriptor fp. This descriptor can be obtained, for example, from a successful seq.open() call.</Description>
      <HelpID>/progguide/functions_directory_file_operations/fstat.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>getcwd</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  getcwd( )</Syntax>
      <Description>This returns the current path as a string. Note that on Windows NT systems, pathnames can include drive letters (for example, c:/baan/bin).</Description>
      <HelpID>/progguide/functions_directory_file_operations/getcwd</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>make.path.absolute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  make.path.absolute( ref string path_name )</Syntax>
      <Description>Makes path absolute given in path_name. It gives the full path back also in path_name.</Description>
      <HelpID>/progguide/functions_directory_file_operations/make.path.absolute</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mkdir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long mkdir( string path_name$ )</Syntax>
      <Description>This creates a specified directory (local or remote). You must have write permission in the parent directory to do this. Access permissions for the new directory are set to read, write, and execute for all users. The path_name$ argument must include the full path to the directory, including the host name, where appropriate. For example: mkdir( "host1!/usr/mydir" )</Description>
      <HelpID>/progguide/functions_directory_file_operations/mkdir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.is.absolute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  path.is.absolute( string path_name )</Syntax>
      <Description>This checks if path_name is an absolute path.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.is.absolute</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pathname</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long pathname( string file_basename , string file_type , ref string file_path )</Syntax>
      <Description>This searches for and returns the location of a specified file. The function uses the file $BSE/lib/fdver.pack_combination to find the file. ver refers to a particular release of the software; pack_combination refers to a particular package combination. It is not necessary to use this function within functions such as db.bind(). These also use the file $BSE/lib/fdver.pack_combination to search for a path name.</Description>
      <HelpID>/progguide/functions_directory_file_operations/pathname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rmdir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rmdir( const string spath )</Syntax>
      <Description>This deletes the specified directory (local or remote). The path argument must include the full path to the directory, including the host name, where appropriate. For example: "host!c:\usr".</Description>
      <HelpID>/progguide/functions_directory_file_operations/rmdir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.clearerr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.clearerr( long fp )</Syntax>
      <Description>This resets the error and end-of-file indicators for the specified file. fp is the file pointer returned by seq.open() when the file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.clearerr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.close( long fp )</Syntax>
      <Description>This flushes the buffers associated with the specified file and closes the file. fp is the file pointer returned by seq.open() when the file was opened. Buffers allocated by the standard i/o system are also flushed and closed. These actions are performed automatically when the process exits.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.eof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.eof( long fp )</Syntax>
      <Description>This checks the end-of-file indicator of a specified file. fp is the file pointer returned by seq.open() when the file was opened. An end-of-file indication lasts until it is cleared by seq.clearerr() or until the file is closed.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.eof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.error</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.error( long fp )</Syntax>
      <Description>This checks the error indicator of a specified file. The error indicator is set when an error occurs while reading from or writing to the file. It lasts until it is cleared by seq.clearerr() or until the file is closed. fp is the file pointer returned by seq.open() when the file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.flush</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.flush( long fp )</Syntax>
      <Description>This causes all buffered data for a specified file to be written to that file. The file remains open. fp is the file pointer returned by seq.open() when the file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.flush</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.getc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  seq.getc$( long fp )</Syntax>
      <Description>This returns the next character from a specified file. fp is the file pointer returned by seq.open() when the file was opened. An empty string (a string of length 0) indicates either that the end-of-file has been reached or that an error has occurred.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.getc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.gets</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.gets( ref string line , long nrbytes , long fp  [, long mode]  [, ref long there.was.more] )</Syntax>
      <Description>This reads one or more characters from a specified file.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.gets</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.islocked</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.islocked( long  mode , long offset , long size , long fp )</Syntax>
      <Description>This checks whether a specified file or segment of a file has been locked by seq.lock().</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.islocked</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.lock</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.lock( long mode , long offset , long size , long fp )</Syntax>
      <Description>This sets read and write locks on a specified file or segment of a file.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.lock</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.open( string file , string openmode  [, ref string pathnm] )</Syntax>
      <Description>This opens a specified file. It uses the file $BSE/lib/fdver.pack_combination to find the file. ver refers to a particular release of the software; pack_combination refers to a particular package combination (see pathname()).</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.putc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  seq.putc$( string char , long fp )</Syntax>
      <Description>This writes a specified character to a specified file. fp is the file pointer returned by seq.open() when the particular file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.putc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.puts</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.puts( const string line , long fp )</Syntax>
      <Description>This writes the specified characters to a specified file, and appends a new line character. fp is the file pointer returned by seq.open() when the particular file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.puts</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.read( ref string buffer , long nrbytes , long fp )</Syntax>
      <Description>This reads a specified number of bytes from a specified file into buffer. fp is the file pointer returned by seq.open() when the particular file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.read</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.rewind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.rewind( long fp )</Syntax>
      <Description>This sets the current file position to the beginning of the file. It is equivalent to: seq.seek( 0, 0, fp ), except that the return value is always -1 on error.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.rewind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.seek</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.seek( long offset , long opt , long fp )</Syntax>
      <Description>This changes the current file position.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.seek</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.skip</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.skip( long nrbytes , long fp )</Syntax>
      <Description>This skips nrbytes bytes, relative to the current file position, in a file represented by fp. fp is the file pointer returned by seq.open() when the particular file was opened. It is equivalent to: seq.seek( nrbytes, 1, fp ).</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.skip</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.tell</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.tell( long fp )</Syntax>
      <Description>This returns the current file position, relative to the beginning of the file. The file position is measured in bytes. fp is the file pointer returned by seq.open() when the particular file was opened. Take care when using this function on files that have been opened in append mode (that is, with the openmode argument set to a or a+). Before calling seq.tell(), always call seq.flush() after you have written to the file with seq.write().</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.tell</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.ungetc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  seq.ungetc$( string char , long fp )</Syntax>
      <Description>This puts back a specified character, retrieved by seq.getc$(). The character will be returned by the next seq.getc$() call on that file. This function works only if something has been read from the file and if the file is buffered. fp is the file pointer returned by seq.open() when the particular file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.ungetc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.unlink</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.unlink( string path_name(128) )</Syntax>
      <Description>This deletes the file indicated by the path_name argument.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.unlink</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.unlock</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  seq.unlock( long mode , long offset , long size , long fp )</Syntax>
      <Description>This removes a lock set by seq.lock().</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.unlock</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>seq.write</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long seq.write( const string buffer , long nrbytes , long fp )</Syntax>
      <Description>This appends data from the specified buffer to the specified file, beginning at the current file position. The nrbytes argument indicates the number of bytes to be written to the file. fp is the file pointer returned by seq.open() when the particular file was opened.</Description>
      <HelpID>/progguide/functions_directory_file_operations/seq.write</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>stat.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  stat.info( string file_name , ref long size , ref long mode , ref long inode , ref long dev , ref long uid , ref long gid , ref long nlink , ref long ctime , ref long mtime , ref long atime )</Syntax>
      <Description>This returns information about a named file. It provides the same information as fstat.info(), but for a named file.</Description>
      <HelpID>/progguide/functions_directory_file_operations/stat.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.change.extension</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.change.extension( const string path , const string extension  [, long os.type] )</Syntax>
      <Description>Changes the extension of the specified path string. By default the path string is interpreted according to the Operating System of the ERP LN server. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.change.extension</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.combine</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.combine( const string path ,  ... , long os.type )</Syntax>
      <Description>Combines one ore more strings into a path. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.combine</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.dir.separator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.dir.separator(  [long os.type] )</Syntax>
      <Description>Provides a platform-specific character used to separate directory levels in a path string that reflects a hierarchical file system organization. If ERP LN is running on UNIX, the returned directory separator is the forward slash ("/"); if ERP LN is running on Windows, the returned directory separator is the backslash ("\"). By supplying the OS type this function will return the directory separator for the given OS type.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.dir.separator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.directory</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.directory( const string path  [, long os.type] )</Syntax>
      <Description>Returns the directory information for the specified path string. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.directory</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.extension</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.extension( const string path  [, long os.type] )</Syntax>
      <Description>Returns the extension of the specified path string. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.extension</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.filename.without.extension</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.filename.without.extension( const string path  [, long os.type] )</Syntax>
      <Description>Returns the filename of the specified path string without the extension. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.filename.without.extension</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.filename</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.filename( const string path  [, long os.type] )</Syntax>
      <Description>Returns the filename and extension of the specified path string. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.filename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.has.extension</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean path.has.extension( const string path  [, long os.type] )</Syntax>
      <Description>Determines whether a path string includes a file name extension. If ERP LN is running on UNIX, the given path is interpreted as a Unix path; if ERP LN is running on Windows, the path is interpreted as a Windows path. Optionally, this can be overridden, by supplying the OS type. When dealing with paths for the client (e.g. when using seq.open.local(), it is advised to always specify OS_WINDOWS_NT.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.has.extension</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>path.separator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string path.separator(  [long os.type] )</Syntax>
      <Description>Returns a platform-specific separator character (":" or ";") used to separate path strings in environment variables. Do not confuse this function with path.dir.separator(). If ERP LN is running on UNIX, the returned separator is the colon (:); if ERP LN is running on Windows, the returned separator is the semi-colon (;). By supplying the OS type this function will return the separator for the given OS type.</Description>
      <HelpID>/progguide/functions_directory_file_operations/path.separator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>exec_dll_function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long exec_dll_function( string dll_name , function_name function_name  [, ref void return_value]  [, void ...] )</Syntax>
      <Description>This loads a specified DLL and executes a specified function within that DLL. It provides a fast algorithm for executing a DLL function that is to be executed only once. If the DLL is already loaded, the identification number of the loaded DLL is used to search for the specified function. Otherwise, a load_dll(dll_name, 0) call is executed automatically. If a function is to be called more than once, it is faster to use the load_dll(), get_function(), and exec_function() combination.</Description>
      <HelpID>/progguide/functions_dll/exec_dll_function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>exec_function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long exec_function( long dll_id , long funct_id  [, ref void return_value]  [, void ...] )</Syntax>
      <Description>This executes a function previously loaded by a call to get_function(). After the function has been loaded, you can call exec_function() any number of times to execute the function.</Description>
      <HelpID>/progguide/functions_dll/exec_function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get_function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get_function( long dll_id , string funct_name )</Syntax>
      <Description>This loads a specified function from a previously loaded DLL. It returns an identification number for the function.</Description>
      <HelpID>/progguide/functions_dll/get_function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load_dll</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  load_dll( string dll_name  [, long overload] )</Syntax>
      <Description>This loads a specified DLL. You can use it in combination with get_function() and exec_function() to call and execute a function in a DLL. These three functions provide a fast algorithm for accessing a function that is to be executed more than once. You load the DLL and function only once and can then execute the function any number of times. load_dll() returns an identification number that the other functions use to identify a particular DLL. You can also use load_dll() to replace one or more functions within a DLL by overloading a different DLL containing functions with the same names and arguments. But note that once a function has been loaded from a DLL, that DLL cannot subsequently be overloaded. For a full discussion on function overloading, see Function overloading.</Description>
      <HelpID>/progguide/functions_dll/load_dll</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>parse_and_exec_function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  parse_and_exec_function( string dll_name , string function_call  [, ref void return_value]  [, ref string return_call] )</Syntax>
      <Description>This function is similar to exec_dll_function(). It loads a specified DLL and parses and executes a specified function within that DLL. If the DLL is already loaded, the identification number of the loaded DLL is used to search for the specified function. Otherwise, a load_dll(dll_name, 0) call is executed automatically. Use this function only when the function and its arguments are known only at runtime. The function is intended for handing function calls received as strings from other processes.</Description>
      <HelpID>/progguide/functions_dll/parse_and_exec_function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.break</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.break( long sql_id )</Syntax>
      <Description>This stops the specified query and clears any interim results. The sql_id argument indicates the query ID, as returned by sql.parse(). The function does not remove the query itself. So the query can be reused after binding to another variable, for example.</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.break</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.close( long sql_id )</Syntax>
      <Description>This deletes all internal information relating to the specified query. The sql_id argument indicates the query ID, as returned by sql.parse().</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.exec</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.exec( long sql_id )</Syntax>
      <Description>This initializes the specified query and evaluates any bind variables in the WHERE clause. Before calling this function, you must previously have called sql.parse() to define the query. The sql_id argument indicates the query ID, as returned by sql.parse().</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.exec</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.fetch</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.fetch( long sql_id )</Syntax>
      <Description>This reads a single query result and stores the values retrieved in the variables specified in the SELECT list. The sql_id argument indicates the query ID, as returned by sql.parse(). You must call the function for each individual record in the result set.</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.fetch</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.parse</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.parse( string query(.)  [, long mode] )</Syntax>
      <Description>This defines an SQL query that you can subsequently execute and retrieve the results of by using the other dynamic SQL functions. The query takes the form of a SELECT statement (see Database handling). The optional argument mode can be used to influence the behavior. PARSE.SUPPRESSWhen this flag is set, error messages are suppressed. (the predefined variable e contains the error number).PARSE.ANSI When this flag is set: The &lt;like predicate&gt; defaults to ANSI patterns instead of regular expressions. REFERS TO clauses are not allowed in a WHERE clause. (You can use OUTER JOIN instead.)</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.parse</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.select.bind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sql.select.bind( long sql_id , long pseudo_var , varname var_name(.) )</Syntax>
      <Description>When you define an SQL statement with the sql.parse() function, you can define a pseudo variable for any or all of the fields specified in the SELECT statement. You do this by appending a number, prefixed by a colon [:], to each field. You use sql.select.bind() to bind a pseudo variable to a BAAN 4GL variable. As a result, the values of the field retrieved by the SELECT statement are stored in the 4GL variable. They can then be used elsewhere in the program. Note that it is not necessary to bind external variables.</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.select.bind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.set.rds.full</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sql.set.rds.full( long sql_id , long size )</Syntax>
      <Description>This sets the size of the RDBMS buffer. The buffer is used to send the result rows of a query from the database back to the client (that is, the bshell). For example, if a query fetches 20 rows and you have set the size of the buffer to 5, then the database sends the rows back to the client five at a time. You call the function immediately after calling sql.parse().</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.set.rds.full</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sql.where.bind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sql.where.bind( long sql_id , long pseudo_var , varname var_name(.) )</Syntax>
      <Description>This binds a pseudo variable from the WHERE clause of a specified SQL query to a BAAN 4GL variable. This enables the BAAN 4GL variable to be used in the WHERE clause. Note that there is no need to bind external variables.</Description>
      <HelpID>/progguide/functions_dynamic_sql_queries/sql.where.bind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ask.enum</Name>
      <ScriptType>all</ScriptType>
      <Syntax>bset ask.enum( string quescode , bset default_enumval  [, void arg, ...] )</Syntax>
      <Description>This displays a message box containing a question and a number of possible responses. The responses are presented as push buttons. To respond to the question and close the message box, the user selects one of the push buttons. The possible responses are defined in the data dictionary as an enumerated domain. By default, the function displays all of the defined enumerate values. To display a subset only, call set.ask.enum.values() before calling ask.enum().</Description>
      <HelpID>/progguide/functions_enumerates/ask.enum</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enum.descr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  enum.descr$( string domain_code(12) ,  enum_expr  [, string language_code] )</Syntax>
      <Description>This returns the description associated with a specific value in an enumerated domain.</Description>
      <HelpID>/progguide/functions_enumerates/enum.descr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>etol</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  etol( domain domain_value )</Syntax>
      <Description>This returns the numeric code corresponding to a specified value in an enumerated domain.</Description>
      <HelpID>/progguide/functions_enumerates/etol</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ltoe</Name>
      <ScriptType>all</ScriptType>
      <Syntax>domain  ltoe( long long_value )</Syntax>
      <Description>This returns the named constant corresponding to a specified numeric code. The numeric code represents one of the values in an enumerated domain.</Description>
      <HelpID>/progguide/functions_enumerates/ltoe</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.ask.enum.values</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.ask.enum.values( enum_constant,... enum_consdtant )</Syntax>
      <Description>This restricts the values valid for the ask.enum() function. Only the values specified are shown as buttons.</Description>
      <HelpID>/progguide/functions_enumerates/set.ask.enum.values</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.enum.array.for.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.enum.array.for.field( const string field.name , const long size , const long values )</Syntax>
      <Description>In case the field is a listbox, this fills the list with a specified set of enumerate values. In case the field is an optionset, only the options that are specified will be enabled; all other options will be disabled. This function should be used in the before.display.object section and/or in the when.field.changes section of each field on which the change depends.</Description>
      <HelpID>/progguide/functions_enumerates/set.enum.array.for.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.enum.values.for.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.enum.values.for.field( const string field.name  [, long ALL_ENUMS_EXCEPT]  [, enum enum_value, ...] )</Syntax>
      <Description>In case the field is a listbox, this fills the list with a specified set of enumerate values. In case the field is an optionset, only the options that are specified will be enabled; all other options will be disabled. This function should used in the before.display.object section and/or in the when.field.changes section of each field on which the change depends.</Description>
      <HelpID>/progguide/functions_enumerates/set.enum.values.for.field</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.enum.values</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.enum.values( enum_constant enum_constant,... )</Syntax>
      <Description>This restricts the values valid for the ask.enum() function. Only the values specified are shown as buttons.</Description>
      <HelpID>/progguide/functions_enumerates/set.enum.values</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.initial.enum.values.for.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.initial.enum.values.for.field( const string field.name , long ALL_ENUMS_EXCEPT , enum enum_value, ... )</Syntax>
      <Description>This function applies to enumerated fields that are displayed as optionset. It limits the number of options (radiobuttons) to the specified set of enum constants. Any options not specified will be hidden.</Description>
      <HelpID>/progguide/functions_enumerates/set.initial.enum.values.for.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>d.expr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double d.expr( long expr_id , string arg )</Syntax>
      <Description>Executes (or evaluates) an expression previously compiled by expr.compile. The result is always converted to a double.</Description>
      <HelpID>/progguide/functions_expressions_runtime/d.expr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>expr.compile</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  expr.compile( string expression )</Syntax>
      <Description>This compiles the specified expression and returns an ID number for the compiled expression. The expression can be executed subsequently using l.expr(), d.expr(), or s.expr$(). Because variables included in the expression must be know at runtime, they must be declared as external variables. You can execute compiled expressions multiple times without recompiling. The current values of the variables are used each time.</Description>
      <HelpID>/progguide/functions_expressions_runtime/expr.compile</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>expr.free</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  expr.free( long expr_id )</Syntax>
      <Description>This frees the memory allocated to a compiled expression. expr_id is the ID of the compiled expression, as returned by expr.compile It is important to call this function when you have finished with an expression.</Description>
      <HelpID>/progguide/functions_expressions_runtime/expr.free</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>l.expr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long l.expr( long expr_id , string arg )</Syntax>
      <Description>Executes (or evaluates) an expression previously compiled by expr.compile. The result is always converted to a long.</Description>
      <HelpID>/progguide/functions_expressions_runtime/l.expr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>s.expr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string s.expr$( long expr_id , string arg )</Syntax>
      <Description>Executes (or evaluates) an expression previously compiled by expr.compile. The result is always converted to a string.</Description>
      <HelpID>/progguide/functions_expressions_runtime/s.expr</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>add.view.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  add.view.field( long index.nr , const string fname )</Syntax>
      <Description>Deprecated. This function is supported for compatibility reasons, do not use this function anymore but use for conditional view-fields remove.field.from.view(). Standard use the field-property "View" instead. In case of dynamic index switching, use the View column in the Available Indices by Session session. For conditional view-fields it is possible to add viewfields with this function from before.program or after.form.read section.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/add.view.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>blank.all</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void blank.all( )</Syntax>
      <Description>This clears all display fields and input fields on the current form. Display only and input only fields (that is, display and input fields that are not included in the form’s TAB sequence) are not cleared.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/blank.all</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.dal.field</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax> change.dal.field( string field , void value )</Syntax>
      <Description>Changes the value of the given table field and calls the DAL Layer to update any dependent fields. Afterwards, the UI is updated.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/change.dal.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.field.label</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long change.field.label( const string fname , long element , const string label1  [, const string label2]  [, const string label3] )</Syntax>
      <Description>Use this to set the label for a specified field. A field can have up to three lines of text (label-lines). The new label-line(s) replace the current label-line(s). The function requires that the specified field already has a (dummy) label in the form-definition. When the field is not in the grid, the label in the form-definition should have at least the same number of label-lines, as specified with this function. This function is may be used for dynamic sessions only! This function may not be used in the before.program section.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/change.field.label</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.picture</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>
         void  change.picture( const string fname , const string icon  [, const string &gt;absolute.file] )</Syntax>
      <Description>Static pictures stored on the server can be displayed on a form. Pictures can be added to the form using the DFE. For display of an icon, the picture must be one of the pictures in the Icon Group "form_&lt;pp&gt;", where pp is the package-code of the picture's session. For display of an image from a local file on the server, the optional argument absolute.file must be filled.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/change.picture</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>check.all.input</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void check.all.input( )</Syntax>
      <Description>This executes all check.input subsections (if any) included in the program script. When an input error is detected, the choice.again() function is automatically executed. The check.all.input function doesn't work for array fields. When a DAL is used, the property checks in the DAL are executed after the check.input subsections of the UI script are executed.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/check.all.input</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>choice.again</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  choice.again( )</Syntax>
      <Description>This cancels execution of a standard command and transfers control to the 4GL engine. Statements programmed after this function will never be executed. You can call this function during execution of a standard command. You can also call the function in field sections, as these are called indirectly during execution of some commands.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/choice.again</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>disable.commands</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  disable.commands( command command  [, command command] )</Syntax>
      <Description>This disables the specified standard and/or form command(s). Standard commands are identified by their commandIDs. Form commands are identified either by a function name, a session code, or a menu code.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/disable.commands</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>disable.fields</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  disable.fields(  [long mode] , string field [,occurrence],... )</Syntax>
      <Description>This disables single-occurrence and multi-occurrence fields on a form. To disable all fields of a group, see disable.group(). Because the information is not available, you can not use this function in the before.program section.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/disable.fields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>disable.group</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  disable.group( long group.nr  [, long type]  [, long occurrence] )</Syntax>
      <Description>This disables all the fields of the specified (dynamic) group. See disable.fields. There is a second, optional, argument that can have two possible values: DISABLEThe default mode, it does not need to be specified.READONLYIn this mode the fields become read-only and cannot be edited by the user. This function is relevant to dynamic forms only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/disable.group</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>disable.pagemode</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  disable.pagemode( )</Syntax>
      <Description>This disables pagemode for this session, even when the user runs in pagemode.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/disable.pagemode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>disable.satellite</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  disable.satellite( const string session.code )</Syntax>
      <Description>This disables the specified satellite. The TAB on which the satellite is shown will become disabled. When this TAB is currently active, another TAB will be selected. Initially all satellite TAB buttons are enabled. This function is relevant in multi-main table controller sessions only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/disable.satellite</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display.total.fields</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  display.total.fields( string fieldname1 , void value1 , string fieldname2,... , void value2,... )</Syntax>
      <Description>When a total line is included in a form, this function displays total values for specified fields in the grid. The function takes one or more pairs of arguments. In each pair, the first argument is the field name; the second argument is the total value for that field. The fields must be defined on the form as multioccurrence form fields. They must also be declared in the UI script. Alternately, the fields can be table fields. To add a total line to a grid, add the following code to the UI script: before.program: fattr.total.line = true Preferably call this function from the program section on.display.total.line. Alternatively for every update that effects the total fields, call display.total.fields() to display the new totals. The total line can display an enum value. To do this, the description of the enum must be passed using enum.descr$() . For example: display.total.fields( "tffbs.dbcr", enum.descr$( "tfgld.dbcr", tfgld.dbcr.debit ) )</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display.total.fields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>do.all.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void do.all.occ( function_name function_name , function_name ... )</Syntax>
      <Description>This executes the specified function for all occurrences on the current form. When included in the before.choice subsection of a choice.update.db section, the function is executed only for occurrences that are pending to be saved. If the update.status has not yet been set, then do.all.occ() will first lock all records. After the function has been executed for all occurrences, all fields of all occurrences are redisplayed.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/do.all.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>do.occ.without.update</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long do.occ.without.update( long occurrence , function_name function_name , function_name ... )</Syntax>
      <Description>This executes the specified function for a specified occurrence, without any locking or update actions. After the function has been executed all fields of the specified occurrence are redisplayed.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/do.occ.without.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>do.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void do.occ( long occurrence , function_name function_name , function_name ... )</Syntax>
      <Description>This locks the specified occurrence (delayed lock) and executes the specified function for that occurrence. After the function has been executed all fields of the specified occurrence are redisplayed.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/do.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>do.selection</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void do.selection( long mode , function_name function_name  [, function_name ...] )</Syntax>
      <Description>This executes the specified function for all marked occurrences. Depending on the mode parameter, this executes either do.occ() or do.occ.without.update() on the currently marked records.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/do.selection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.commands</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  enable.commands( command command,... )</Syntax>
      <Description>This enables the specified standard and/or form command(s). Standard commands are identified by their commandIDs. Form commands are identified either by a function name, a session code, or a menu code.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/enable.commands</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.fields</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  enable.fields( string field,... )</Syntax>
      <Description>This enables the specified single-occurrence and/or multi-occurrence field(s) on a form. To enable all fields of a group, see enable.group(). The field argument identifies the field to be enabled. For a single-occurrence field, this is the field name. For a multioccurrence field, this can be either the field name or the field name followed by an occurrence number (depending on whether you wish to enable all occurrences of the field or only one particular occurrence). For array fields, UTC fields, and segmented fields, you can append suffixes to the field name to indicate the particular element or segment to be enabled. If you omit these suffixes, all elements/segments are enabled. To enable a particular element of an array field, append the element number (in parentheses) to the field name. The element number must be an integer, formatted as a string. It cannot be a variable. For example: "tfmod100.perd(10)".To enable only the date or time element of a UTC field, append either .date or .time to the field name. For example: "ttadv300.cdat.time".To enable a particular segment of a segmented field, append .segment.segment_id to the field name. For example: "tiitm001.item.segment.1". Because the information is not available, you can not use this function in the before.program section.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/enable.fields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.group</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  enable.group( long group.nr  [, long occurrence] )</Syntax>
      <Description>This enables all the fields of the specified (dynamic) group. See enable.fields. This function is relevant to dynamic forms only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/enable.group</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.satellite</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  enable.satellite( const string session.code  )</Syntax>
      <Description>This enables the specified satellite. The TAB on which the satellite is shown will become enabled when it was disabled. Initially all satellite TAB buttons are enabled. This function is relevant in multi-main table controller sessions only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/enable.satellite</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.save.on.occ.change</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  enable.save.on.occ.change( )</Syntax>
      <Description>Use this function to force the 4GL Engine to save an occurrence at the time the user selects or moves to another occurrence. Any unsaved changes to the occurrence, will be automatically saved. I.e. the UPDATE.DB choice is executed and the 4GL engine will continue in the previous mode (MODIFY.SET or ADD.SET).</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/enable.save.on.occ.change</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>execute</Name>
      <ScriptType>all</ScriptType>
      <Syntax> execute( long command )</Syntax>
      <Description>This executes the specified standard command. Normally, standard commands are activated by the user. This function enables applications to execute standard commands without user intervention. This is useful, for example, if you want to display the first record of the main table when a session is started. Infinite recursion is possible when using this command. For example, if you include execute(add.set) in the after.choice subsection of choice.add.set. So, never use this function to execute a standard command in its own choice sections.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/execute</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>fields.autocomplete</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  fields.autocomplete( boolean try.autocomplete,...  [, string fieldname(18)] )</Syntax>
      <Description>Auto-complete is automatically executed by the 4GLE for fields that have a reference path to another table and have a zoom session and has no button and is not segmented. With this function auto-complete can be turned off ( try.autocomplete = FALSE ) and on again ( try.autocomplete = TRUE ). For array fields, the element number should be sent as part of the string, between brackets. See example</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/fields.autocomplete</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.current.field.label</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.current.field.label( const string fname , long element , ref string label1 to label3 )</Syntax>
      <Description>This retrieves the current label text associated with the specified field. The function is relevant to dynamic forms only. The current label can only differ from the initial label if the function change.field.label() has been used.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.current.field.label</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.field.label</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.field.label( const string fname , long element , ref string label1 to label3 )</Syntax>
      <Description>This retrieves the label text associated with the specified field. The function is relevant to dynamic forms only. NOTE: For historical reasons this function sometimes returns the initial label, and sometimes the current label (as changed using change.field.label()). The initial label is returned for grid fields, and the current label is returned for non-grid-fields. Therefore this function is deprecated. Please use get.initial.field.label() or get.current.field.label() instead.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.field.label</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.initial.field.label</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.initial.field.label( const string fname , long element , ref string label1 to label3 )</Syntax>
      <Description>This retrieves the initial label text associated with the specified field. The function is relevant to dynamic forms only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.initial.field.label</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.prev.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  get.prev.value( long value )</Syntax>
      <Description>This function retrieves the field's previous value. The previous value is converted to the type of the output parameter. This function only works on the current field</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.prev.value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.screen.defaults</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  get.screen.defaults( )</Syntax>
      <Description>The save.defaults standard command enables users to save the current field values of a session as the default values for that session. The get.screen.defaults() function displays the default values for all fields on all forms of the current session. It is often used at the start of update or print programs, where the user must specify some parameters before executing the session. If no user defaults are defined, set.fields.default() is executed automatically.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.screen.defaults</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>group.invisible</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  group.invisible( long group.nr )</Syntax>
      <Description>This hides the specified group completely, including all associated fields, labels, and subgroups. The group.nr argument specifies the group number, as defined in the form editor. The group cannot be made visible again. This function is relevant to dynamic forms only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/group.invisible</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>input.again</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  input.again( )</Syntax>
      <Description>After input by a user, this forces the user to input the data again. If there is an input error, it is preferable to use set.input.error() in the check.input subsection for the field.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/input.again</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>inputfield.invisible</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  inputfield.invisible( string field_name(18),... )</Syntax>
      <Description>This hides the specified field(s) completely. In dynamic sessions, associated label and button are also hidden. To hide a particular element of an array field, append the element number (in parentheses) to the field name. For example: "ttadv301.labl(2)". For multicurrency fields specify -1 for the element number, for example: "tfacr200.fcmh(-1)". Note that when the predefined variable attr.echo is set to off, the field value is not displayed but the field itself remains visible.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/inputfield.invisible</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>inputfield.password</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  inputfield.password( string field_name(18),... )</Syntax>
      <Description>This causes input to the specified field to be displayed as asterisks (*). To specify a particular element of an array field, append the element number (in parentheses) to the field name. For example: "ttadv301.labl(2)".</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/inputfield.password</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>inputfield.visible</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  inputfield.visible( string field_name(18) )</Syntax>
      <Description>Use this to redisplay one or more fields made invisible by inputfield.invisible(). To redisplay a particular element of an array field, append the element number (in parentheses) to the field name. For example: "ttadv301.labl(2)". For multicurrency fields specify -1 for the element number, for example: "tfacr200.fcmh(-1)".</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/inputfield.visible</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.field.invisible</Name>
      <ScriptType>all</ScriptType>
      <Syntax>if not  is.field.invisible( string field_name(18) )</Syntax>
      <Description>This checks whether a specified field is currently visible or invisible. To specify a particular element of an array field, append the element number (in parentheses) to the field name. For example: "ttadv301.labl(2)". For multicurrency fields specify -1 for the element number, for example: "tfacr200.fcmh(-1)".</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/is.field.invisible</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.field.multi.currency</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  is.field.multi.currency( string field_name(18) )</Syntax>
      <Description>This returns whether a specified field is a multi currency field.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/is.field.multi.currency</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.mmt.satellite</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  is.mmt.satellite( )</Syntax>
      <Description>This function checks whether the current session is running as a multi-main table satellite session or not. This function can be usefull when a session can be run in standalone mode or as a satellite within a multi-main table session.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/is.mmt.satellite</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>make.current</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  make.current( )</Syntax>
      <Description>This reads the current main table record and displays it on screen. Calling this function is similar to calling execute(find.data), except that if the specified record is not present, make.current() does not read the next record.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/make.current</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mark.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  mark.occ( long occurence )</Syntax>
      <Description>This marks the specified occurrence with a reverse bar, makes the marked record the current record in the database, and sets the predefined variable actual.occ to the marked occurrence. For sessions with TIV lower than 1075 the following predefined variables are relevant to this function: markedUse this to check whether an occurrence is marked or not. This can also be tested in the on.exit subsection of a zoom process.mark.status This is available in the subsections before.choice and after.choice of choice.mark.occur. It indicates the type of marking that the 4GL engine is executing. It can have the following values: DUPL.OCCUR     during marking for copying TEXT.MANAGER during marking for edit text 0                            in all other cases and when not marking For sessions with TIV 1075 or higher see the synopsis for an overview of related functions and variables.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/mark.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>occ.independent.view.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  occ.independent.view.field( string field.name )</Syntax>
      <Description>This defines the specified field as occurrence independent. This means that its value is not stored in one of the records that is shown in the grid. An example is an order total field that is shown in the grid. Another example is a field that is used to filter out records. Occurrence independent fields are treated in a special way. When normal fields get input, the update.status and choice variables will be set (if they do not already have a value) and the record will be locked (delayed lock). This is not the case for occurrence independent fields, which makes them perfectly suitable for e.g. filtering functionality.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/occ.independent.view.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>on.old.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void on.old.occ( function_name function_name , function_name ... )</Syntax>
      <Description>This executes the specified function for the current occurrence, using the old values of the record. The record must have been previously modified.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/on.old.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>print.const</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  print.const( )</Syntax>
      <Description>This displays a specified constant string value in the current form field. The current value of the database field is not affected. If you do not include the fill_string argument, the field is filled with asterisk characters (*). If the argument is a string of length one, the field is filled with the specified character. If the argument is a string of length greater than one, the specified string is displayed in the field, without repetition. The maximum length for the string is 127 characters.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/print.const</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>refresh.all.occs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  refresh.all.occs( )</Syntax>
      <Description>This re-reads all records that are currently on the screen and refreshes them. Note that this is not done in the following cases: One of the occurrences on the screen has been modified by the user, but not yet saved.An occurrence is being added in an editable grid session.The session is a parent session and it has been updated due to the adding of a record in a synchronized dialog. In that case the occurrences of the parent session are not ordered on the screen: the record being added appears at the end of the grid. This function works in both overview and details sessions.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/refresh.all.occs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>refresh.curr.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  refresh.curr.occ( )</Syntax>
      <Description>This reads the current record and refreshes it on screen. All references on the form are read again. For example, in the case of a zoom from a field to a session where the record can be modified, calling refresh.curr.occ() refreshes the occurrence on the parent form also. Note that the function locks the record before reading it; this is necessary for delayed locks.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/refresh.curr.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.field.from.view</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  remove.field.from.view( const string fname )</Syntax>
      <Description>The view fields for a dynamic session are determined by the view-property of a field in the DFE or, in case of dynamic index switching, by the view column in the Available Indices by Session session. You can use this function to conditionally remove a field from the view-area. E.g. based on the current index (the predefined variable curr.key).</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/remove.field.from.view</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.form.commands</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  remove.form.commands( string command,... )</Syntax>
      <Description>This removes the specified form command(s). Form commands are identified either by a function name or a session code. There is no way to restore or create a new form command.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/remove.form.commands</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.mark</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  remove.mark( )</Syntax>
      <Description>This function clears the selection.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/remove.mark</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>satellite.invisible</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  satellite.invisible( const string session.code )</Syntax>
      <Description>This hides the specified satellite. This function can only be used in section: after.form.read. This function is relevant in multi-main table controller sessions only.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/satellite.invisible</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.checked.command</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.checked.command( string command , boolean checked )</Syntax>
      <Description>Use this to check or uncheck a command in the menubar or the toolbar. This can be used to indicate to the user that the command is activated. Example:  Passing TRUE as the 2nd argument to this function will place a check mark in front of the command in the menubar. If the command is also shown as a toolbar icon then the icon will appear pressed.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/set.checked.command</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.fields.default</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.fields.default( )</Syntax>
      <Description>It is possible to define default values for form fields with the form editor. For all fields of the current form, this function sets the corresponding script variables to the default form values. The function is often used before batch or print programs, where the user must specify some parameters for the batch run.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/set.fields.default</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.list.values.for.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.list.values.for.field( const string field.name.string , string no.list.values , const string list.values(,) )</Syntax>
      <Description>This fills a listbox field or a combobox field with a specified set of values. The field must be a string type field, and the appearance must be set to Dropdown Listbox or Dropdown Combobox in the DFE.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/set.list.values.for.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>standard.commands.off</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void standard.commands.off( long command, ... )</Syntax>
      <Description>In session Standard Commands (ttadv3110s000) you can define which standard commands are available to the user. E.g. you can permanently disable the File | New (ADD.SET) command by unchecking its check box. With function standard.commands.off(), you can turn off standard commands programmatically. That makes it possible to turn off standard commands based on a certain parameter setting.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/standard.commands.off</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>to.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  to.field( field field )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This transfers control of the 4GL engine to the specified field after input to or display of the current field. This overrides the TAB sequence of the form. You can specify the field by using the field number or a string containing the field name. After handling the specified field, control passes to the next field in the TAB sequence.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/to.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>to.form</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  to.form( long form_number )</Syntax>
      <Description>This forces a switch from the current form to the specified form. The form_number argument must specify an existing form in the session, and must be in the range one to the value of the predefined variable number.forms. During the switch operation, the after.form subsection of the current form is executed and the init.form and before.form subsections of the new form are executed. The init.form subsection is executed only the first time a form becomes current. The following predefined variables are relevant to this function: number.formsindicates the total number of forms in the sessionform.previndicates the previous form numberform.currindicates the current form numberform.nextindicates the next form number</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/to.form</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>to.group</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  to.group( long group_number )</Syntax>
      <Description>Use this to make the first form on which the specified group occurs the current form. This function is relevant to dynamic forms only. In a well-designed GUI, users (and not the application) select and initiate the actions to be performed. Using to.group() removes control from the user. Therefore it does not conform to good GUI design principles.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/to.group</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>unlink.from.maintable</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  unlink.from.maintable( string field, ... )</Syntax>
      <Description>By default, when a session has a maintable, all form fields are treated as if they have a link to the maintable. When such fields are modified by the user, the maintable's update.status is set and the current record is marked as changed. In some cases this behaviour is unwanted, e.g. if the fields are used as a kind of filter, or in case fields are used to select records (by means of checkboxes). This function can be used to remove this link with the maintable. In that way when such fields are modified by the user, the update.status of the maintable is not set and the record is not marked as changed. This will also prevent that when the session ends, the user is asked if data should be saved in case these fields have been modified.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/unlink.from.maintable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>update.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  update.occ( )</Syntax>
      <Description>The 4GL engine automatically detects changes a user makes to a field. However, it cannot detect changes to field values made in the program script. When you modify a field of the main table in the program script, you must call update.occ() to lock the record (delayed lock) and to switch on the update.status flag of the 4GL engine. This ensures when that the database is next updated, the modifications are saved to the database. The database update action can be initiated either by the user or within the script (use execute(update.db)). Before the update.db command is executed, the user can undo the changes with the recover.set command. If you do not want users to be able to undo changes, you can force an immediate update by calling execute(update.db) in the script.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/update.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>refresh.total.line</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  refresh.total.line( )</Syntax>
      <Description>This triggers the 4GL-Engine to execute the program section: on.display.total.line. This section is not called directly but after all other sections have been executed. This function can be usefull when the total line must be updated immediately after a user action or a change of a field value. When this function is not used, the program section on.display.total.line is only called after reading a new set of records from the database.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/refresh.total.line</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.user.default</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  get.user.default( const string session.code , const string field , ref string field.value )</Syntax>
      <Description>Returns the default value for the passed sessioncode, field combination. The default is retrieved using the current user and current company.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/get.user.default</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>job.add.field</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void job.add.field( string fld_name  [, long fld_element]  [, long fld_type]  [, string fld_descr] )</Syntax>
      <Description>Save other fields in the jobdata which are not on the form. All form fields are stored in the jobdata.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/job.add.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display.all</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void display.all( )</Syntax>
      <Description>Use this function to display all fields on a form. Usually, the 4GL engine displays fields automatically, either when the form is opened or when data in a related input field is changed. However, there are situations when you need to use these functions to display fields. For example, to display stand-alone fields, to display fields that are not in the input field TAB sequence, or to send data to the form during batch processes. display.all()Displays all fields of all occurrences.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display.all</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display.curr.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void display.curr.occ( )</Syntax>
      <Description>Use this function to display all fields of the current occurrence on a form. Usually, the 4GL engine displays fields automatically, either when the form is opened or when data in a related input field is changed. However, there are situations when you need to use these functions to display fields. For example, to display stand-alone fields, to display fields that are not in the input field TAB sequence, or to send data to the form during batch processes. display.curr.occ()Displays all fields of the current occurrence.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display.curr.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display.fld</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void display.fld( long occurrence , string field )</Syntax>
      <Description>Use this functions to display a specified field of a specific occurrence on a form. Usually, the 4GL engine displays fields automatically, either when the form is opened or when data in a related input field is changed. However, there are situations when you need to use these functions to display fields. For example, to display stand-alone fields, to display fields that are not in the input field TAB sequence, or to send data to the form during batch processes. display.fld() Displays a specified field of a specified occurrence. To display a field for all occurrences, use the following construction: for i= 1 to filled.occ   display.fld( i, field ) endfor</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display.fld</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display.occ</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void display.occ( long occurrence )</Syntax>
      <Description>Use this function to display the fields of a specific occurrence on a form. Usually, the 4GL engine displays fields automatically, either when the form is opened or when data in a related input field is changed. However, there are situations when you need to use these functions to display fields. For example, to display stand-alone fields, to display fields that are not in the input field TAB sequence, or to send data to the form during batch processes. display.occ()Displays all fields of a specified occurrence.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display.occ</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>display</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void display( string field )</Syntax>
      <Description>Use this function to display a specified field on a form. Usually, the 4GL engine displays fields automatically, either when the form is opened or when data in a related input field is changed. However, there are situations when you need to use these functions to display fields. For example, to display stand-alone fields, to display fields that are not in the input field TAB sequence, or to send data to the form during batch processes. display()Displays a single-occurrence field. You cannot use this to display a field for all occurrences.</Description>
      <HelpID>/progguide/functions_form_and_form_field_operations/display</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>edit$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string edit$( void expression , string format )</Syntax>
      <Description>This formats an expression according to a specified format.</Description>
      <HelpID>/progguide/functions_formatting_io/edit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sprintf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string sprintf$( string format  [, void ...] )</Syntax>
      <Description>This formats a string and returns the formatted string. The format argument contains zero or more ordinary characters and substitution symbols. The ordinary characters are copied directly to the output string. The substitution symbols specify formats for the values specified in the expression arguments and are substituted by these formatted values. The substitution symbols are used in the sequence in which they are specified. The first substitution symbol is used for the first expression argument. The second substitution symbol is used for the second expression argument, and so on. In addition to a range of numeric type expressions, the function supports dates, amounts, single-byte strings, multibyte strings, bidirectional strings, and combined normal and bidirectional strings. input strings that contain bidirectional strings must be specified in logic order. The result is also returned in logic order.</Description>
      <HelpID>/progguide/functions_formatting_io/sprintf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>string.scan</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long string.scan( string str_expr , string format  [, void ...] )</Syntax>
      <Description>This scans an input string (str_expr) for one or more fields and stores each individual field found in the first available variable argument. The format argument contains conversion symbols that the function uses to interpret the input string and retrieve the individual field values. The conversion symbols indicate the types of values expected: %s       expects a single-byte or multibyte string %f        expects a double %d       expects a long An input field is defined as all characters up to the next separator character or up to the next character that does not match the type of the corresponding conversion symbol. A separator character is a single character used to separate individual values in the input string. It can be a space character, or any other character that is not used within individual fields in the input string. You cannot use multibyte characters as separators. The string.scan() function scans the input string using each conversion symbol in the argument in turn. For each conversion symbol, it scans the input string for characters that match the specified format. It stops scanning when it meets a separator character or a character that does match the expected type. For example, consider the following function call: string.scan( input_string, "%d|%f",long,double ) In this case, the function expects input_string to contain two separate numeric values. It reads the input string until it meets a pipe [|] character (this is the separator specified in the format argument). It then converts the characters read (excluding the separator) to a long value and stores that value in the long variable. The function then continues scanning the input string using the next conversion symbol in the format argument. Note that if two conversion symbols are separated by more than one separator character, the function ignores those characters unless they match the input.</Description>
      <HelpID>/progguide/functions_formatting_io/string.scan</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>vsprintf$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string vsprintf$( string format  [, void ...] )</Syntax>
      <Description>This acts the same as sprintf$(), except that the arguments to be substituted for the substitution symbols in the format argument are not known until run time.</Description>
      <HelpID>/progguide/functions_formatting_io/vsprintf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.add.header</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.add.header( const string object.key() , string object.description() mb , long object.value )</Syntax>
      <Description>Adds a header to the object tree. Same as: gbf.add.object(key, desc, value, GBF.HEADER)</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.add.header</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.add.interior</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.add.interior( const string object.key() , string object.description() mb , long object.value )</Syntax>
      <Description>Adds an interior node to the object tree.   Same as: gbf.add.object(key, desc, value, GBF.INTERIOR)</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.add.interior</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.add.leaf</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.add.leaf( const string object.key() , string object.description() mb , long object.value )</Syntax>
      <Description>Adds a leaf node to the object tree. Same as: gbf.add.object(key, desc, value, GBF.LEAF)</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.add.leaf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.add.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.add.object( const string object.key() , const string object.description() mb , long object.value , long obj.type  [, long icon.set]  [, long default.function.id]  [, long help.function.id]  [, long drop.function.id]  [, long menumask]  [, long text.color]  [, long line.style]  [, long context.menu.id] )</Syntax>
      <Description>Adds a header, interior, or leaf node to the object tree.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.add.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.bms.received</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.bms.received( long sender.id , const string mask() , const string mss() , long length )</Syntax>
      <Description>This function will be called by the GBF when the GBF receives a BMS message that it cannot handle itself. The application should now deal (or ignore) this message. Note The nature of these BMS messages is that they arrive at undeterminable times, so one should not assume that the message is related to the current selected object(s), so be very careful with actions or return values such as delete current selected object.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.bms.received</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.create.context.menu</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.create.context.menu( )</Syntax>
      <Description>This function creates a popup menu that is activated when the user clicks on the right mouse button and the mouse cursor is on a node. The popup menu is initially completely empty. The programmer has to add the popup menu items with the function gbf.set.menu.item(). After that, the developer has to bind this context menu to a certain object through a call to gbf.add.object() which has an argument context.menu.id for this so at the same time the node is created the context menu is assigned to it. Thus each node can have its own specific context menu. The behaviour of each menu item is determined by the programmer who binds a function to the entry with the function gbf.set.menu.function(). The function gbf.create.context.menu() has to be called before the call to gbf.start().</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.create.context.menu</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.current.library</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string gbf.current.library( )</Syntax>
      <Description>The gbf.current.library() is a macro, which is defined as: gbf.file.to.library(__FILE__). It makes an educated guess based on the current filename what the object name is.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.current.library</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.delete.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.delete.object( long obj.id )</Syntax>
      <Description>Deletes the given object, identified by obj.id, including all its child objects. When obj.id is GBF.ROOT.OBJECT then all child objects will be deleted.Note that in most cases a return value from gbf.menu.selected() will do better than using this function. The object identified by obj.id is deleted from the object tree, including all its children. Deleting obj.id in case when it is part of a multiple selection has some complications. If the obj.id is in the list of current selected objects, then it will also be removed from that list, which implies that the list is now at least one element shorter than it used to be and all elements that follow this element now have a smaller index. For example, if this obj.id used to have an index of 3 (see gbf.get.selected()) then the object which used to have index 4 will now have index 3, object 5 will now be object 4 and so on. Take care that when this to be deleted obj.id, has child objects that are also in the current selection, then these will be removed to. So that the list will get even shorter and the indices of the remaining objects may have changed more than just with 1.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.delete.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.drag.drop</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.drag.drop( long drag.obj , const string drag.key() , long drag.value , long drag.type , long drop.obj , const string drop.key() , long drop.value , long drop.type , long button.mode )</Syntax>
      <Description>This function will be called by the GBF when a drag and drop operation has been performed by the end-user. Note that in order to receive these function calls, the GBF must be configured for drag and drop (see gbf.init()), otherwise it will not support drag and drop. Also when the GBF is not configured for multiple select, then always only one object can be dragged and dropped. The drag.obj identifies the object(s) being dragged: drag.obj.&lt; 0 More that one object was currently selected when the drop was done and drag.obj contains the negative number of selected objects, that is: -drag.obj is the actual number of selected objects. So drag.obj in this case is NO valid object identification, but on the other hand drag.key, drag.value and drag.type contain the identification of the first selected object. All currently selected objects can be obtained using a gbf.get.selected() This case will only happen if the GBF is configured to support multiple select (see gbf.init()) drag.obj = 0Cannot happendrag.obj &gt; 0Precisely one object was selected when the drop was done and that object is identified by drag.obj as well as by the object.key and object.value, which have been given to the GBF on a preceding gbf.add.object() call, that includes the drop.type, which indicates the type of drag.obj. The given drag.obj identifies the object for the GBF and should be used only as object identification for other GBF functions like gbf.get.parent(), gbf.get.first.child(), gbf.get.next() and gbf.update.object(). The drop target, that is the object on which the selected objects are dropped, is identified by the drop.obj, drop.key, drop.value and drop.type, which have been given to the GBF on a preceding gbf.add.object() call. The GBF will prevent dragging and dropping on or off header objects. In other words drag.type and/or drop.type will never be GBF.HEADER. Note that the application may have defined other fetch child functions, in stead of this function, see gbf.set.child.function() . Still the GBF assumes that the interface (incoming arguments as well as the return values) are exactly the same as defined here.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.drag.drop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.error.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string gbf.error.string( long error )</Syntax>
      <Description>Returns the string which represents the given error. This error should be a return value from any other GBF function call. This function translates such an (error) return value into its defined format. For example: sprintf$(“The error is: %s.”, gbf.error.string(GBF.NO.MEMORY)) will build the following string: The error is: GBF.NO.MEMORY.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.error.string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.file.to.library</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  gbf.file.to.library( const string filename() )</Syntax>
      <Description>Uses the given filename to guess the object name of the session. It replaces the first "p" (of program file) in the file name with an "o" (of object file) and removes the trailing digit (usually a 0, but in fact the variant number). This macro can be used when all session functions, such as gbf.get.top.level(), gbf.get.children(), gbf.menu.selected() and so on, reside in the source file name filename. When these functions gbf.get.top.level() and so on reside in the current file, gbf.current.library() should be used.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.file.to.library</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.children</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.children( const string object.key() , long object.value , long cur.level )</Syntax>
      <Description>This function will be called by the GBF whenever it has the need for the children of a specific parent, for example after a parent is opened or after a refresh. Note that the application may have defined other fetch child functions, instead of this function, see gbf.set.child.function() Still the GBF assumes that the interface (incoming arguments as well as the return values) are exactly the same as defined here. Using functions like gbf.get.first.child() and gbf.get.next() is dangerous and should be avoided, especially when the force.read is set to TRUE, since that may lead to recursive calls towards this gbf.get.children() function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.children</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.current.parent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.current.parent( )</Syntax>
      <Description>Returns the object identification (obj.id) of the current parent, which is the parent for which the children are now asked for by the GBF. In other words, the current parent is the parent to which objects will be added with the gbf.add.object() function. This function can thus only be called during a call back to gbf.get.top.level() (in which case the return value will be the special value: GBF.ROOT.OBJECT), or during a gbf.get.children(). Unlike with gbf.get.parent() function the parents key and value are not returned by this gbf.get.current.parent() function, since that information has already been supplied with the original (gbf.get.top.level() and) gbf.get.children() function call. In case the GBF has added a special extra parent then this extra node will not be returned by this function. Note that since this function is available while the GBF is reading children, it may very well be that the tree is different than you would expect it to be. For example, not all children are already present, no deeper children are available and so on.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.current.parent</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.cutcopy.nr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.cutcopy.nr( )</Syntax>
      <Description>This function returns the number of objects that have been pasted into the so-called cut, copy and paste buffers. You can use the following user actions to fill the cut, copy and paste buffers: The menu commands Edit-&gt;Cut and Edit-&gt;CopyThe keystrokes Ctrl+X and Ctrl+CThe buttons Cut and PasteAnd all user defined menu commands that return a GBF.DO.CUTCOPY.INSERT (see gbf.menu.selected())</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.cutcopy.nr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.cutcopy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.cutcopy( long index , ref string obj.key() , ref string obj.description() , ref long obj.value )</Syntax>
      <Description>This function must only be used when a call back to the main application indicates that there are one or more objects in the cut, copy and paste buffers (see gbf.get.cutcopynr()). A further use of this function is immediately after the GBF has stopped (in other words the gbf.start() function call has completed) to get the current cut or copy objects, so in this case the GBF can be used as a zoom session to pick a specific object. This function then allows you to retrieve all the cut or copy objects one by one as it returns the cut or copy object at the given index. The object is identified by the obj.key, obj.desc and obj.value, which have been given to the GBF on a gbf.add.object() call. Note that the internal GBF obj.id is not returned, since the object may no longer be present in the GBF, for example typically after the cut operation. In case the application does not support multiple selection, this gbf.get.cutcopy() function can only be called with index set to 1.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.cutcopy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.description</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.description( long obj.id , ref string description() mb )</Syntax>
      <Description>This function returns the description of the given object. In other words the description with which the object has been created ( gbf.add.object() ) or last updated (gbf.update.object()).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.description</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.first.child</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.first.child( long obj.id , long force.read , ref long child.id , ref string child.key , ref long child.value , ref long child.type )</Syntax>
      <Description>This function returns the first child of the given object if the children are read by the GBF (see below). The returned child.id is the GBF child identification, to be used on subsequent gbf.get.parent(), gbf.get.first.child(), gbf.get.next() and gbf.update.object() function calls. The child is further identified by the child.key and child.value, which have been given to the GBF on a preceding gbf.add.object() call. If the obj.id has no children at all, then GBF.NO.CHILDREN will be returned (and of course the other return values, such as child.id and so on. will not contain any valid information). The force.read tells the GBF what to do when the children are not yet read: Force.readDescriptiontrue First the children are read, using the gbf.get.children() function call, and the first read child is returned by this gbf.get.first.child() call as described above. That is, in this case it does not matter whether or not the children are already read before the main application issued this call (except for the GBF.NO.MEMORY return call). falseThe special return value GBF.NO.READ.CHILDREN is returned, and of course the child.id, child.key, child.value and obj.type are all invalid and should not be used A very special value of obj.id may be used to indicate that the first child of the root object should be used. This special value is: GBF.ROOT.OBJECT. In this case an object which has been given to the GBF on the preceding gbf.add.object() from within the gbf.get.top.level() will be returned. The special successful completion return value GBF.LAST indicates that the child.id object returned is the only child object, which means that this child object has no further brothers, or in other words child.id cannot be used in a subsequent gbf.get.next() function call.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.first.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.key.desc.length</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.key.desc.length( ref long key.length , ref long desc.length )</Syntax>
      <Description>Returns the length of the key of the object and the length of the description of the object. The default length for the object key is 64 and for the object description 60.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.key.desc.length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.next</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.next( long obj.id , ref long next.id , ref string next.key() , ref long next.value , ref long next.type )</Syntax>
      <Description>Returns the next brother object of the given object. The returned next.id is the GBF identification, to be used on subsequent gbf.get.parent(), gbf.get.first.child() , gbf.get.next() and gbf.update.object() function calls. The next brother is further identified by the next.key and next.value, which have been given to the GBF on a preceding gbf.add.object() call. The special successful completion return value GBF.LAST indicates that the next.id object returned is the last object, which means that this next.id cannot be used in a subsequent gbf.get.next() function call. If this is attempted, that is a gbf.get.next() on this last brother, then GBF.ILL.OBJECT will be returned.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.next</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.object.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.object.info( long object.id , ref string key() , ref string description() , ref long value , ref long type )</Syntax>
      <Description>This function returns the information of the object obj.id. The returned information is the information set at the call to gbf.add.object().</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.object.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.open.depth</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.open.depth( ref long open.depth )</Syntax>
      <Description>Returns the current open and read depth. This open.depth is the number of levels the GBF will display when opening an interior node. When not all of these levels have been read yet, the GBF will read the necessary levels. The default value for open.depth is 1. This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.open.depth</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.open.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.open.strategy( ref long open.type )</Syntax>
      <Description>Returns the current automatic open and close schema. This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.open.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.parent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.parent( long obj.id , ref long parent.id , ref string parent.key() , ref long parent.value )</Syntax>
      <Description>Returns the parent of the given object. The returned parent.id is the GBF parent identification, to be used on subsequent gbf.get.parent(), gbf.get.first.child() , gbf.get.next() and gbf.update.object() function calls. The parent is further identified by the parent.key and parent.value, which have been given to the GBF on a preceding gbf.add.object() call. The special successful completion return value GBF.TOP.LEVEL indicates that the parent.id object returned resides at the top level, which means that this parent.id cannot be used in a subsequent gbf.get.parent() function call. In this case the parent.id, parent.key and the parent.value are not valid for the main application, since there is no parent of a top level object. Note that in case the GBF has added a special extra parent then this extra node will NOT be returned by this function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.parent</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.previous</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.previous( long obj.id , ref long prev.id , ref string prev.key , ref long prev.value , ref long prev.type )</Syntax>
      <Description>This function returns the previous brother object of the given object. The returned prev.idis the GBF identification, to be used on subsequent gbf.get.parent() , gbf.get.first.child() , gbf.get.next() and gbf.update.object() function call. The previous brother is further identified by the prev.key and prev.value, which have been given to the GBF on a preceding gbf.add.object() call. The special successful completion return value GBF.LAST indicates that the prev.id object returned is the last object, which means that this prev.id cannot be used in a subsequent gbf.get.next() function call. If this is attempted, that is a gbf.get.previous() on this last brother, then GBF.ILL.OBJECT will be returned.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.previous</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.print.options</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.print.options( ref long print.options )</Syntax>
      <Description>Returns the current print options in print.options. For more details about the print.options see function gbf.set.print.options() . This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.print.options</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.read.levels</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.read.levels( ref long read.levels  [, ref long show.levels] )</Syntax>
      <Description>Returns the current number of levels that will be read (and shown) when an application returns one of the restart return values (see: gbf.menu.selected() : for example the GBF.DO.RESTART.TREE). Initially these values are set to the values as supplied with the gbf.start() function call and can be changed using: gbf.set.read.level(). This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.read.levels</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.refresh.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.refresh.strategy( ref long refresh.rate , ref long refresh.type )</Syntax>
      <Description>Returns the current automatic refreshing schema. The two arguments will be used to store the values. If refresh.rate is 0, then the refresh.type may not be a valid type (see also gbf.set.refresh.strategy()). This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.refresh.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.resource</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.resource( long resource.type , ref void resource.value )</Syntax>
      <Description>Returns the current value for the given resource types. The arguments are given in name value pairs. For the possible resources see gbf.set.resource() . In almost all cases the &lt;type&gt; will be long (or a domain of basic type int, long, enumerate, bitset and so on.), except when the resource.type is DsNtitle, since in this case the &lt;type&gt; must be multi-byte string. This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run. Note When the Tree Control is used, it may very well be that the actual requested resources are NOT supported by this Tree Control. Nevertheless in these cases no error will be returned.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.search.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.search.strategy( ref long search.strategy )</Syntax>
      <Description>Returns the current search strategy. The argument will be used to store the value. For more details about the search.strategy see function gbf.set.search.strategy(). This function may be used after the GBF run has finished, to get the setting for this specific user, and to restore the search.strategy at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.search.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.selected.nr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.selected.nr( )</Syntax>
      <Description>This function returns the current number of selected objects. It can be used to obtain the maximum allowed index for gbf.get.selected() .</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.selected.nr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.selected</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.selected( long index , ref long obj.id , string obj.key() , ref long obj.value , ref long obj.type )</Syntax>
      <Description>This function must only be used when a call back to the main application indicates that there is one or more currently selected objects (see gbf.init() , gbf.menu.selected() , gbf.drag.drop() and so on). The function gbf.get.selected.nr() can be used to get the current number of selected objects. A further use of this function is immediately after the GBF has stopped (in other words the gbf.start() function call has completed) to get the current selected objects, so in this case the GBF can be used as zoom session to pick a specific object. This function then allows you to retrieve all the selected objects one by one as it returns the selected object at the given index. The returned obj.id is the GBF identification, to be used on subsequent gbf.get.parent(), gbf.get.first.child() , gbf.get.next() and gbf.update.object() function call. The object is further identified by the obj.key and obj.value, which have been given to the GBF on a preceding gbf.add.object() call. The obj.type flag indicates the type of node obj.id: GBF.LEAFReturned obj.id is a leaf nodeGBF.HEADERReturned obj.id is a header nodeGBF.INTERIORReturned obj.id is an interior node. In case the functions gbf.menu.selected() , gbf.drag.drop(), and so on. indicate that there is only one object selected (in other words obj.id in those functions is greater than 0) then this gbf.get.selected() function may only be called with index set to 1. Note that the order of objects, as well as the maximum valid index, changes when objects are deleted from the list using gbf.delete.object() .</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.sort.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.get.sort.strategy( ref long sort.strategy )</Syntax>
      <Description>This function returns the current sort strategy in sort.strategy. For more details about the sort.strategy see function gbf.set.sort.strategy(). This function may be used after the GBF run has finished to get the setting for this specific user, and restore them at the next run.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.sort.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.get.top.level</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.get.top.level( )</Syntax>
      <Description>This function will be called by the GBF after it has been started to get the top level node(s). The application should call for all nodes the function: gbf.add.object() with the appropriate arguments.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.get.top.level</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.help.selected</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void gbf.help.selected( long obj.id , const string object.key() , long object.value , long help.value )</Syntax>
      <Description>This function will be called when the object has been selected followed by a menu selection or a keystroke. There are three possibilities for obj.id: obj.id &lt; 0 More that one object was currently selected when this menu item was chosen and obj.id contains the negative number of selected objects, that is: -obj.id is the actual number of selected objects. So obj.id in this case is NO valid object identification, but on the other hand object.key and object.value contain the identification of the first selected object. All currently selected objects can be obtained using a gbf.get.selected() for each selected object. This case will only happen if the GBF is configured to support multiple select (see gbf.init()) obj.id = 0No object was currently selected when this menu entry was chosen, and object.key will be an empty string, that is isspace(object.key) is true.obj.id &gt; 0Precisely one object was currently selected when this menu item was chosen and that object is identified by obj.id as well as by the object.key and object.value, which have been given to the GBF on a preceding gbf.add.object() call. The given obj.id identifies the object for the GBF and should be used only as object identification for other GBF functions. The help.value identifies which help entry was chosen and what the end-user probably wants help on: ContentsGBF.MENU.HELP.CONTgive a table of contents of all available help within the current session that is using the GBFWhat’s This?GBF.MENU.HELP.SRCHStarts the context sensitive helpUsing SessionGBF.MENU.HELP.SESSGive help of how to use the current session which is build using the GBF The return value of this function is ignored, as it does not influence the normal flow of control of the application.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.help.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.init</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.init( const string library() , const string title()  [, long default.menu]  [, long default.button]  [, long default.options]  [, long standard.buttons]  [, long default.context] )</Syntax>
      <Description>This function must be the first to be called, it initializes the global data structures of the GBF. It is not forbidden to reactivate a new run of the GBF in a session after a previous run of the GBF has terminated, the GBF has to clear its global variables again. This cleaning of the global variables cannot be done when leaving the GBF as at that point in time it must still be possible to get some information about the settings in order for the application to save and restore some user preferences, see for example gbf.get.refresh.strategy() and gbf.get.sort.strategy() .</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.is.displayed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.is.displayed( const long obj.id )</Syntax>
      <Description>Returns whether or not the given object is currently displayed. That is whether the obj.id can be seen and is not hidden because its parent is closed. This function can be used when walking through the object tree (see gbf.get.first.child(), gbf.get.next(), gbf.get.parent() and so on.). It is only checked whether the Generic Browser Framework has drawn the object on the virtual window, but note that it may not actually be visible (on the physical window) because the current view is currently displaying another part of that virtual window.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.is.displayed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.menu.selected</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.menu.selected( long obj.id , const string object.key() , long object.value , long menu.option )</Syntax>
      <Description>This function will be called when the object has been selected followed by a menu selection or a keystroke. obj.id There are three possibilities for obj.id: obj.id &lt; 0 More that one object was currently selected when this menu item was chosen and obj.id contains the negative number of selected objects, that is: -obj.id is the actual number of selected objects. So obj.id in this case is NO valid object identification, but on the other hand object.key and object.value contain the identification of the first selected object. All currently selected objects can be obtained using a gbf.get.selected() for each selected object. This case will only happen if the GBF is configured to support multiple select (see gbf.init()) obj.id = 0No object was currently selected when this menu entry was chosen, and object.key will be an empty string, that is isspace(object.key) is true.obj.id &gt; 0Precisely one object was currently selected when this menu item was chosen and that object is identified by obj.id as well as by the object.key and object.value, which have been given to the GBF on a preceding gbf.add.object() call. The given obj.id identifies the object for the GBF and should be used only as object identification for other GBF functions like gbf.get.parent(), gbf.get.first.child(), gbf.get.next() and gbf.update.object().   menu.option The selected menu item or keystroke is identified by the given menu.option, which has been returned by the GBF on a preceding gbd.set.menu.item() call or is one of the standard GBF buttons and menu items which are supported by the application (see argument standard.button of gbf.init()). The following table suggests what the application should do on these standard buttons: Menu optionDescriptionGBF.BUTTON.COPYCopy the current selected object(s)GBF.BUTTON.CUTCut (delete) the current selected object(s) GBF.BUTTON. DELETE Delete the current selected object(s) GBF.BUTTON.GRP. NEW Insert a new group objectGBF.BUTTON.INSERTInsert a new objectGBF.BUTTON.PASTEPaste the contents of the cut/copy buffers into the current selected objectGBF.BUTTON.TEXTStart the text editor for the current selected object(s)GBF.BUTTON.UNDOUndo the last operation Note that the GBF will never delete objects by itself. So even after a GBF.BUTTON.CUT and/or GBF.BUTTON.DELETE action still a GBF.DO.DELETE.CURRENT (see below) must be returned. When the menu.option is GBF.BUTTON.COPY or GBF.BUTTON.CUT then the current selected object(s) are already stored in the so called Cut, Copy &amp; Paste buffers, so there is no need to return a GBF.DO.CUTCOPY.INSERT return flag in these cases. Of course a return value of GBF.DO.CUTCOPY.CLEAR will indeed clear this buffer, even on this Cut or Copy operation. After the application has been finished, the return value of this function to GBF will inform GBF what to do. There are a number of return categories defined, each having a number of different options. One flag of each group should be used to construct the full return value. These flags can be added (‘+’) or bitwise ‘or’ed.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.menu.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.on.selection</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void gbf.on.selection( long obj.id , long obj.type , long transition )</Syntax>
      <Description>This function will be called when the user clicks on an object. It has been made to create an extra possibility for the user to manipulate the state of the standard buttons through the function gbf.set.buttonstate() . It is recommended to use this function only for these purposes. The obj.id gives the id of the selected object and obj.type contains the type of the object, for example, GBF.LEAF, GBF.INTERIOR or GBF.HEADER. When an end user selects an object, the programmer wants to know to which state the object is moving. For example, when an object is selected and the end user clicks on the object again, then its transition state is that the object is moving from the selected state to the deselected state, thus the transition is GBF.DESELECT. When an object is not yet selected and the end user clicks on it, the transition state is from the unselected state to the selected state, thus the transition is GBF.SELECT.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.on.selection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.save</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.save( long obj.id , const string object.key() , long object.value , long save.type )</Syntax>
      <Description>This function will be called when the Save or Save+Exit menu has been called. The idea is that the main application should now save any unsaved data. The save.type indicates for what reason this function is called. The possible values are: ValueMenu item selectedKeystroke givenButton pressedGBF.MENU.FILE.SAVESaveCtrl+SSave (floppy disk)GBF.MENU.FILE.QUITSave+Exit Ctrl+Q Alt+F4 Exit button on button bar X in top right hand corner There are three possibilities for obj.id: obj.id &lt; 0 More that one object was currently selected when this menu item was chosen and obj.id contains the negative number of selected objects, that is: -obj.id is the actual number of selected objects. So obj.id in this case is no valid object identification, but on the other hand object.key and object.value contain the identification of the first selected object. All currently selected objects can be obtained using a gbf.get.selected() for each selected object. This case will only happen if the GBF is configured to support multiple select (see gbf.init()) obj.id = 0No object was currently selected when this menu entry was chosen, and object.key will be an empty string, that is isspace(object.key) is true.obj.id &gt; 0Precisely one object was currently selected when this menu item was chosen and that object is identified by obj.id as well as by the object.key and object.value, which have been given to the GBF on a preceding gbf.add.object() call. The given obj.id identifies the object for the GBF and should be used only as object identification for other GBF functions like gbf.get.parent(), gbf.get.first.child(), gbf.get.next() and gbf.update.object(). After the saving is done the return value of this function to GBF uses the same return patterns as gbf.menu.selected() . Note that even on GBF.MENU.FILE.QUIT the main application should still return to the GBF as the GBF will perform the exit part. This exit part may be skipped, that is the GBF will remain running when the special return value: GBF.DO.NOT.EXIT is returned in this case. This may be necessary when, for example, the user should have selected an object but they did not do so. The code in this case looks like: function extern long gbf.save(…) { if (save.type = GBF.MENU.FILE.QUIT) and (obj.id = 0) then | Please select at least one object before leaving mess("xxxxxxxxxx", 1) return (GBF.DO.NOT.EXIT) endif … return (0) }</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.save</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.button</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.button( const string button.group() , const string normal.button() , const string selected.button() , const string insensitive.button() , const string button.name() , long menu.item , long add.space )</Syntax>
      <Description>Adds a button to the button bar. A button needs three icons. These icons are all in the group identified by button.group. For Baan IV these three icons are for when the button is in the normal state (normal.button), when it is pushed (selected.button) and when it is currently not selectable (button.insensitive). When one or more of these icons do not exist, then another will be used instead. When no icon is available then an empty button will be used. The icons should be 20 x 20 pixels. For Baan V only the normal.button icon is used, since the GUI will take care of creating a selected icon and an insensitive icon based on this normal.button. For compatibility reasons with older versions of the GBF the arguments selected.button and insensitive.button should nevertheless be given, but may of course be empty (in other words: “”) or the same as the normal.button. The normal.button icons should be 16 x 15 pixels. When it is larger all buttons on the button bar will have this larger size. The menu.item is the menu item that will be used when the button is pushed. This menu.item should be a valid value from a preceding call to the function: gbf.set.menu.item() . In general the message used to get the for that function should be used as button.name for this function. The button has a name, identified by the button.name. Note that the Help associated with this button.name will be given as help when topic Help is asked for this button and this button is not associated to a menu item, in other words menu.item is 0 in this function call. In case help is asked for the button which is associated to a menu item, then the Help of that menu item will be activated rather than the Help for this button. When the button is pushed the value of the button.name will be shown in the left-most message box and the function gbf.menu.selected() is called with this menu.item as identification. So for the application there is no difference whether the menu item is selected or this button is pushed.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.button</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.buttonstate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.buttonstate( long button.id , long button.state )</Syntax>
      <Description>This function regulates the state of the standard buttons. This function can only be used if the default.button mask in the function gbf.init() is set with the standard buttons that need to be controlled. The old behavour of this option was that all the standard buttons were shown but disabled. This is still the case but now it is possible to enable or disable these buttons. When, however, the standard.button mask is used then it is not possible to adjust the standard buttons using this function. The GBF will then take over controll of these buttons. This is also default behaviour. To improve the accessibility to the buttons the application function gbf.on.selection() can be used. This function is called whenever a selection is made. It is clear that the user of this function is fully responsible for the behaviour of the buttons. The following table gives the buttons that can be manipulated through this function: Button.idDescriptionGBF.BUTTON.COPYCopy the current selected object(s)GBF.BUTTON.CUTCut (delete) the current selected object(s)GBF.BUTTON.DELETEDelete the current selected object(s)GBF.BUTTON.GRP.NEWInsert a new group objectGBF.BUTTON.INSERTInsert a new objectGBF.BUTTON.PASTEPaste the contents of the cut/copy buffers into the current selected objectGBF.BUTTON.TEXTStart the text editor for the current selected object(s)GBF.BUTTON.UNDOUndo the last operation</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.buttonstate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.child.function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.child.function( const string dll_id() , const string child.function.name() , long is.default )</Syntax>
      <Description>Adds a function to get children, to the set of all get children functions. If the child.function.name resides in the same source file as in which the call to this gbf.set.child.function() is made, then the function gbf.current.library() can be used, so use: gbf.set.child.function(gbf.current.library(), …). Note that the child.function.name function must be defined as: function extern long child.function.name(const string object.key(), long obj.value, long cur.level) The dll_id is tried to be loaded with the load_dll() function call, without overload. The value, if positive, which is returned by gbf.set.child.function() may be used in subsequent gbf.add.object() and/or gbf.update.object() calls to identify this child function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.child.function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.color</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.color( long color , const string color.desc() )</Syntax>
      <Description>Adds a description to the given color. This color.desc should be a message, which will be displayed when the Help on colors (Help -&gt; Color Descriptions…) is activated. These colors are the colors with which the actual object have been added to the GBF. See the text.color argument of the gbf.add.object() function. When using the same color then only the last color.description of this color will be remembered, even when this color.description is empty when a preceding color.description was not empty.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.color</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.desc.length</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.desc.length( long desc.length )</Syntax>
      <Description>The following functions are actually defines and they are defined as: gbf.set.desc.length(desc.length) : gbf.set.key.desc.length(0, desc.length) The gbf.set.key.desc.length() function adjusts the length of the key of an object and/or the length of the description of the object. The default length for the object key is 64 and for the object description is 60. A new value of 0 means that the associated length is not changed. So, for example, gbf.set.key.desc.length(100, 0) will increase the key length to 100 and leave the description length at 64 (see also the two macros defined at the top of this description). All objects will use the same key length and description length. That is regardless of the object, for example: top level, interior, leaf object, the key length will always be the same. The same holds for the object description. Note the bigger these lengths are made, the more memory is needed to store the objects. This means that making these too big will lead to memory problems further on. So, this function should also be used to shrink these lengths if they are too large for the current application. For example, if it is known that the key will never exceed 10 characters, then a gbf.set.key.length(10) should be made. This function can only be called before any object has been created, so once a gbf.start() has been given, this function will always return an error.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.desc.length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.drop.function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.drop.function( const string dll_id() , const string drop.function.name() , long is.default )</Syntax>
      <Description>Adds a new drag and drop function to the drag and drop functions. If the drop.function.name resides in the same source file as in which the call to this gbf.set.drop.function() is made, then the function gbf.current.library() can be used, so use: gbf.set.drop.function(gbf.current.library(), …). Note that the drop.function.name function must be defined as: function extern long drop.function.name(long drag.obj, const string drag.key(), long drag.value, long drag.leaf, long drop.obj, const string drop.key(), long drop.value, long drop.leaf, long button.mode) The dll_id is tried to be loaded with the load_dll() function call, without overload. The value, if non negative, which is returned by gbf.set.drop.function() may be used in subsequent gbf.add.object() and/or gbf.update.object() calls to identify this special drag and drop function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.drop.function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.header.icon</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.header.icon( const string icon.group() , const string icon() , long is.default  [, const string icon.desc()] )</Syntax>
      <Description>Adds a header node icon to the set of header node icons. The value, if non negative, which is returned must be used in subsequent calls to identify this icon set. Empty icons, in other words empty strings, are not allowed.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.header.icon</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.help.function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.help.function( const string dll_id() , const string help.function.name() , long is.default )</Syntax>
      <Description>This function adds a new help function to the help functions. If the help.function.name resides in the same source file as in which the call to this gbf.set.help.function() is made, then the function gbf.current.library() can be used, so use: gbf.set.help.function(gbf.current.library(), …). Note that the help.function.name function must be defined as: function extern help.function.name(long obj.id, const string object.key(), long obj.value, long help.value) The dll_id is tried to be loaded with the load_dll() function call, without overload. The value, if positive, which is returned by gbf.set.help.function() may be used in subsequent gbf.add.object() calls to identify this special help function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.help.function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.interior.icon</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.interior.icon( const string icon.group() , const string unselected.closed() , const string unselected.open() , const string selected.closed() , string unselected.open() , long is.default  [, const string icon.desc()]  [, long context.menu] )</Syntax>
      <Description>This function adds an interior node icon to the set of interior node icons. The return value, if non negative, must be used in subsequent gbf.add.object() calls to identify this icon set. Empty icons, in other words empty strings, are not allowed. It is not checked whether the icons are different, so for example it is allowed to have the same icon for both selected.open and selected.closed. Note that when using the Tree Control this default icon will also be used as dummy unique root icon.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.interior.icon</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.key.desc.length</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.key.desc.length( long key.length , long desc.length )</Syntax>
      <Description>This function is used to define: gbf.set.desc.length(desc.length) gbf.set.key.length(key.length) The gbf.set.key.desc.length() function adjusts the length of the key of an object and/or the length of the description of the object. The default length for the object key is 64 and for the object description is 60. A new value of 0 means that the associated length is not changed. So for example gbf.set.key.desc.length(100, 0) will increase the key length to 100 and leave the description length at 64 (see also the two macros defined at the top of this description). All objects will use the same key length and description length. That is regardless of the object, for example: top level, interior, leaf object, the key length will always be the same. The same holds for the object description. Note the bigger these lengths are made the more memory is needed to store the objects. This means that making these too big will lead to memory problems further on. So, this function should also be used to shrink these lengths if they are too large for the current application. For example if it is known that the key will never exceed 10 characters, then a gbf.set.key.length(10) should be made. This function can only be called before any object has been created, so once a gbf.start() has been given, this function will always return an error.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.key.desc.length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.key.length</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.key.length( long key.length )</Syntax>
      <Description>The following functions are actually defines and they are defined as: gbf.set.key.length(key.length) : gbf.set.key.desc.length(key.length, 0) The gbf.set.key.desc.length() function adjusts the length of the key of an object and/or the length of the description of the object. The default length for the object key is 64 and for the object description is 60. A new value of 0 means that the associated length is not changed. So, for example, gbf.set.key.desc.length(100, 0) will increase the key length to 100 and leave the description length at 64 (see also the two macros defined at the top of this description). All objects will use the same key length and description length. That is regardless of the object, for example: top level, interior, leaf object, the key length will always be the same. The same holds for the object description. Note the bigger these lengths are made, the more memory is needed to store the objects. This means that making these too big will lead to memory problems further on. So, this function should also be used to shrink these lengths if they are too large for the current application. For example, if it is known that the key will never exceed 10 characters, then a gbf.set.key.length(10) should be made. This function can only be called before any object has been created, so once a gbf.start() has been given, this function will always return an error.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.key.length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.label</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.label( const string label1 , const string label2 , const string label3 , const string label4 , const string label5 )</Syntax>
      <Description>The gbf.set.label&lt;nr&gt;() functions are actually defines and they are defined as: gbf.set.label1(label)gbf.set.label(label, “”, “”, “”, “”)gbf.set.label2(label)gbf.set.label( “”, label, “”, “”, “”)gbf.set.label3(label)gbf.set.label( “”, “”, label, “”, “”)gbf.set.label4(label)gbf.set.label( “”, “”, “”, label, “”)gbf.set.label5(label)gbf.set.label( “”, “”, “”, “”, label) The gbf.set.label() function will write the labels to the browser window and will display them in the bottom of this window in a status bar box. Note that the GBF will set and use these five labels for: label iddescriptiondynamically changed by GBFlabel1current action, like searching…, loading… and so on.yeslabel2key of the current selected itemyeslabel3company numbernolabel4company descriptionnolabel5current dateno As can be seen from this table label1 and label2 are changed dynamically by the GBF: when an action is started this action will be displayed in label1when another object becomes selected the key of the selected object will be displayed in label2 The others are only set in gbf.init() and left unchanged by the GBF, hence an overwrite using this gbf.set.label() will be permanent. Note that with gbf.init() it can be customized to have no labels or less than the default 5 labels, which implies that this function will return an error when trying to change a non existing label. A value of “” for a label means that that label is not changed, where as any other value for which isspace() returns true (like “ ”), that label will be cleared on the screen. Argumentsgbf.set.labellabel1()The current action, like searching…, loading… and so on.label2()The key of the current selected itemlabel3()The company numberlabel4()The company descriptionlabel5()The current date Argumentsgbf.set.labeln (n=1..5)label() For n: 1. The current action, like searching…and so on. 2. The key of the current selected item 3. The company number 4. The company description 5. The current date</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.labelxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.leaf.icon</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.leaf.icon( const string icon.group() , string unselected() , const string selected() , long is.default  [, const string icon.desc()]  [, long context.menu] )</Syntax>
      <Description>Adds a leaf node icon to the set of leaf node icons. The return value, if positive, must be used in subsequent calls to identify this icon set. Empty icons, that is empty strings, are not allowed. It is not checked whether the icons are different, so for example it is allowed to have the same icon for both selected and unselected. Note that when using the Tree Control this default icon will also be used as the dummy icon for the next level, to enable the displaying of the ‘+’.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.leaf.icon</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.menu.function</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.menu.function( const string dll_id() , const string menu.function.id() , long is.default )</Syntax>
      <Description>This functions adds a function to the menu functions. For more information about dll_id and menu.function.id see the standard dll manual page in the programmers manual. The dll_id is tried to be loaded with the load_dll() function call, without overload. The return value, if positive, may be used in subsequent gbf.set.menu.item() calls to identify this special menu function.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.menu.function</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.menu.head</Name>
      <ScriptType>all</ScriptType>
      <Syntax> long gbf.set.menu.head( string menu.text  [, long maskbit]  [, long multi.mask] )</Syntax>
      <Description>Adds a menu header to the menu bar. The value returned is to be used in subsequent gbf.set.menu.item() functions calls to add new menu items to this menu. The number of menus is limited, currently fixed to 10. Note that the default menus are included (see gbf.init()) if they must be generated.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.menu.head</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.menu.item</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.menu.item( long menu.id , const string menu.text() , const string keystroke()  [, long is.default]  [, long menu.function.id] , long maskbit  [, long multi.mask] , long std.button )</Syntax>
      <Description>Adds a menu item to the set of menu items under the heading as identified by menu.id, as well as it allows to assign a keystroke combination (such as &lt;Ctrl&gt;+A and so on.) and connect it to a standard GBF button which the GBF does not service itself.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.menu.item</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.menu.separator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.menu.separator( long menu.id )</Syntax>
      <Description>This function (actually: define) adds a separator to the given menu. A menu separator line is drawn in the menu which can never be selected and will generate a 0 return value. Also only BW supports these menu separator lines, but no error is generated when using this under BX.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.menu.separator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.menu.disabled</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.menu.disabled( long menu.id , long item.id , long disable , long checked  [, long radio] )</Syntax>
      <Description>The following functions are actual defines and they are defined as: gbf.set.menu.checked(item.id)gbf.set.menu.state(0, item.id, false, true)gbf.set.menu.disabled(item.id)gbf.set.menu.state(0, item.id, true, false)gbf.set.menu.enabled(item.id)gbf.set.menu.state(0, item.id, false, false)gbf.set.menu.not.checked(item.id)gbf.set.menu.state(0, item.id, false, false)gbf.set.menu.not.radio(item.id)gbf.set.menu.state(0, item.id, false, false, false)gbf.set.menu.radio(item.id)gbf.set.menu.state(0, item.id, false, false, true) This function can disable a menu head or menu item and place or remove a ticmark on a menu item, which has been created using the gbf.set.menu.head() and/or gbf.set.menu.item() functions. Also a radio button (small circle) can be put in front of a menu items which has been created with the gbf.set.menu.item() function. For changing of the standard GBF menu items see function: gbf.set.std.menu(). To change only a item give 0 for the menu.id and to only change an menu give 0 for the item.id. When both values are 0 nothing will change. The menu.id is the return value of the function gbf.set.menu.head() when that function was successfully completed. Arguments:gbf.set.menu.[enabled,disabled,radio,not radio, checked and not checked]item.idThe return value of the function gbf.set.menu.item() when that function was successful completed.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.menu</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.open.depth</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.open.depth( long open.depth )</Syntax>
      <Description>Sets the current open and read depth.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.open.depth</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.open.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.open.strategy( long open.strategy )</Syntax>
      <Description>These functions set the open or close strategy, which is what the GBF should do when an interior node is closed and opened again as well as what should be done on the Open All menu item or Ctrl+O keystroke. gbf.set.open.child()The function gbf.set.open.child() deals with what to do with the children when reopening an interior node. The open.strategy in this case may be one of:GBF.OPEN.AGAINOpen again all interior nodes which were already open when the original interior node was closed. That is restore the full state after a close - reopen sequence.GBF.OPEN.NONEDo not open the interior nodes when reopening the original interior node, that is closes all these sub nodes.GBF.OPEN.REFRESHDelete all nodes beneath the given node, which implies that when reopening this node its children will be read again.The default of GBF is to have the open.type set to GBF.OPEN.AGAIN.This open and close strategy is determined at the moment when the interior node gets closed (double click on open interior node and so on.). So when closing such a node, changing the open strategy and reopening that same interior node will reveal the contents of that node using the previous strategy and not the current strategy. gbf.set.open.read()The function gbf.set.open.read() deals with the Open All (Ctrl+O) menu item (keystroke) action. It determines what should be done on this action. The open.strategy in this case may be one of:GBF.OPEN.NOREADOpen only what is already known to the GBF. In other words use only that what has already been read before.GBF.OPEN.READALLFirst performs a read all (that is: menu item: Read All or keystroke Ctrl+R) and then open all nodes. gbf.set.open.what()The function gbf.set.open.what() determines on which object the Open All (Ctrl+O) menu item (keystroke) action works. The open.strategy in this case may be one of:GBF.OPEN.ALLTREEOperate on the whole object treeGBF.OPEN.CURSELWhen one or more objects are currently selected then operate only on these objects, otherwise operate on the whole object tree. gbf.set.open.strategy()For the function gbf.set.open.strategy() the open.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.open.strategy() is:GBF.OPEN.AGAIN + GBF.OPEN.NOREAD + GBF.OPEN.ALLTREE.Take care when using gbf.set.open.strategy() in cases where only one or two of the open strategy parts has to be changed, since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example, when one wants to use the GBF.OPEN.READALL strategy the following code should be used: function long force.open.read() { long retval, strategy retval = gbf.get.open.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.OPEN.READALL + bit.and(strategy, bit.inv(GBF.OPEN.NOREAD + GBF.OPEN.READALL)) return (gbf.set.open.strategy(strategy)) }</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.open.child</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.open.child( long open.strategy )</Syntax>
      <Description>These functions set the open or close strategy, which is what the GBF should do when an interior node is closed and opened again as well as what should be done on the Open All menu item or Ctrl+O keystroke. gbf.set.open.child()The function gbf.set.open.child() deals with what to do with the children when reopening an interior node. The open.strategy in this case may be one of:GBF.OPEN.AGAINOpen again all interior nodes which were already open when the original interior node was closed. That is restore the full state after a close - reopen sequence.GBF.OPEN.NONEDo not open the interior nodes when reopening the original interior node, that is closes all these sub nodes.GBF.OPEN.REFRESHDelete all nodes beneath the given node, which implies that when reopening this node its children will be read again.The default of GBF is to have the open.type set to GBF.OPEN.AGAIN.This open and close strategy is determined at the moment when the interior node gets closed (double click on open interior node and so on.). So when closing such a node, changing the open strategy and reopening that same interior node will reveal the contents of that node using the previous strategy and not the current strategy. gbf.set.open.read()The function gbf.set.open.read() deals with the Open All (Ctrl+O) menu item (keystroke) action. It determines what should be done on this action. The open.strategy in this case may be one of:GBF.OPEN.NOREADOpen only what is already known to the GBF. In other words use only that what has already been read before.GBF.OPEN.READALLFirst performs a read all (that is: menu item: Read All or keystroke Ctrl+R) and then open all nodes. gbf.set.open.what()The function gbf.set.open.what() determines on which object the Open All (Ctrl+O) menu item (keystroke) action works. The open.strategy in this case may be one of:GBF.OPEN.ALLTREEOperate on the whole object treeGBF.OPEN.CURSELWhen one or more objects are currently selected then operate only on these objects, otherwise operate on the whole object tree. gbf.set.open.strategy()For the function gbf.set.open.strategy() the open.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.open.strategy() is:GBF.OPEN.AGAIN + GBF.OPEN.NOREAD + GBF.OPEN.ALLTREE.Take care when using gbf.set.open.strategy() in cases where only one or two of the open strategy parts has to be changed, since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example, when one wants to use the GBF.OPEN.READALL strategy the following code should be used: function long force.open.read() { long retval, strategy retval = gbf.get.open.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.OPEN.READALL + bit.and(strategy, bit.inv(GBF.OPEN.NOREAD + GBF.OPEN.READALL)) return (gbf.set.open.strategy(strategy)) }</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.open.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.open.read( long open.strategy )</Syntax>
      <Description>These functions set the open or close strategy, which is what the GBF should do when an interior node is closed and opened again as well as what should be done on the Open All menu item or Ctrl+O keystroke. gbf.set.open.child()The function gbf.set.open.child() deals with what to do with the children when reopening an interior node. The open.strategy in this case may be one of:GBF.OPEN.AGAINOpen again all interior nodes which were already open when the original interior node was closed. That is restore the full state after a close - reopen sequence.GBF.OPEN.NONEDo not open the interior nodes when reopening the original interior node, that is closes all these sub nodes.GBF.OPEN.REFRESHDelete all nodes beneath the given node, which implies that when reopening this node its children will be read again.The default of GBF is to have the open.type set to GBF.OPEN.AGAIN.This open and close strategy is determined at the moment when the interior node gets closed (double click on open interior node and so on.). So when closing such a node, changing the open strategy and reopening that same interior node will reveal the contents of that node using the previous strategy and not the current strategy. gbf.set.open.read()The function gbf.set.open.read() deals with the Open All (Ctrl+O) menu item (keystroke) action. It determines what should be done on this action. The open.strategy in this case may be one of:GBF.OPEN.NOREADOpen only what is already known to the GBF. In other words use only that what has already been read before.GBF.OPEN.READALLFirst performs a read all (that is: menu item: Read All or keystroke Ctrl+R) and then open all nodes. gbf.set.open.what()The function gbf.set.open.what() determines on which object the Open All (Ctrl+O) menu item (keystroke) action works. The open.strategy in this case may be one of:GBF.OPEN.ALLTREEOperate on the whole object treeGBF.OPEN.CURSELWhen one or more objects are currently selected then operate only on these objects, otherwise operate on the whole object tree. gbf.set.open.strategy()For the function gbf.set.open.strategy() the open.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.open.strategy() is:GBF.OPEN.AGAIN + GBF.OPEN.NOREAD + GBF.OPEN.ALLTREE.Take care when using gbf.set.open.strategy() in cases where only one or two of the open strategy parts has to be changed, since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example, when one wants to use the GBF.OPEN.READALL strategy the following code should be used: function long force.open.read() { long retval, strategy retval = gbf.get.open.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.OPEN.READALL + bit.and(strategy, bit.inv(GBF.OPEN.NOREAD + GBF.OPEN.READALL)) return (gbf.set.open.strategy(strategy)) }</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.open.what</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.open.what( long open.strategy )</Syntax>
      <Description>These functions set the open or close strategy, which is what the GBF should do when an interior node is closed and opened again as well as what should be done on the Open All menu item or Ctrl+O keystroke. gbf.set.open.child()The function gbf.set.open.child() deals with what to do with the children when reopening an interior node. The open.strategy in this case may be one of:GBF.OPEN.AGAINOpen again all interior nodes which were already open when the original interior node was closed. That is restore the full state after a close - reopen sequence.GBF.OPEN.NONEDo not open the interior nodes when reopening the original interior node, that is closes all these sub nodes.GBF.OPEN.REFRESHDelete all nodes beneath the given node, which implies that when reopening this node its children will be read again.The default of GBF is to have the open.type set to GBF.OPEN.AGAIN.This open and close strategy is determined at the moment when the interior node gets closed (double click on open interior node and so on.). So when closing such a node, changing the open strategy and reopening that same interior node will reveal the contents of that node using the previous strategy and not the current strategy. gbf.set.open.read()The function gbf.set.open.read() deals with the Open All (Ctrl+O) menu item (keystroke) action. It determines what should be done on this action. The open.strategy in this case may be one of:GBF.OPEN.NOREADOpen only what is already known to the GBF. In other words use only that what has already been read before.GBF.OPEN.READALLFirst performs a read all (that is: menu item: Read All or keystroke Ctrl+R) and then open all nodes. gbf.set.open.what()The function gbf.set.open.what() determines on which object the Open All (Ctrl+O) menu item (keystroke) action works. The open.strategy in this case may be one of:GBF.OPEN.ALLTREEOperate on the whole object treeGBF.OPEN.CURSELWhen one or more objects are currently selected then operate only on these objects, otherwise operate on the whole object tree. gbf.set.open.strategy()For the function gbf.set.open.strategy() the open.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.open.strategy() is:GBF.OPEN.AGAIN + GBF.OPEN.NOREAD + GBF.OPEN.ALLTREE.Take care when using gbf.set.open.strategy() in cases where only one or two of the open strategy parts has to be changed, since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example, when one wants to use the GBF.OPEN.READALL strategy the following code should be used: function long force.open.read() { long retval, strategy retval = gbf.get.open.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.OPEN.READALL + bit.and(strategy, bit.inv(GBF.OPEN.NOREAD + GBF.OPEN.READALL)) return (gbf.set.open.strategy(strategy)) }</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.print.options</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.print.options( long print.options )</Syntax>
      <Description>This function sets the print options.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.print.options</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.read.levels</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.set.read.levels( long read.levels  [, long show.levels] )</Syntax>
      <Description>Sets the current number of levels that will be read (and shown) when an application returns one of the restart return values (see: gbf.menu.selected(): for example the GBF.DO.RESTART.TREE).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.read.levels</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.refresh.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.refresh.strategy( long refresh.rate , long refresh.type )</Syntax>
      <Description>Sets the automatic refresh rate and strategy, which means that after refresh.rate milliseconds the tree as maintained by GBF will be refreshed using the indicated strategy. A value of 0 for refresh.rate means no automatic refreshing and that refresh.type is ignored. The timing starts immediately after this function call when the GBF is already active, or immediately after the gbf.start() call. The default of GBF is to have a refresh.rate of 0.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.refresh.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.resource</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.resource( long resource.type , void resource.value )</Syntax>
      <Description>This function sets the resources given by resource.type to the given resource.value. The arguments are given in name value pairs. Table: ResourcetypesResource nameDescriptionGBF default valueDsNbackgroundbackground colordefault BX input field background colorDsNforegroundforeground colordefault BX input field foreground colorDsNfontSetfontdefault BX fontDsNheigthvertical size of the drawing area in pixels480 or when the display is smaller than 480 the default is 400DsNwidthhorizontal size of the drawing area in pixels640 or when the display is smaller than 640 the default is 600DsNtitletitle bar of main window of GBFSession code (optionally), session description, user nameDsNxhorizontal position of the drawing area in pixelsUndeterminedDsNyvertical position of the drawing area in pixelsUndeterminedGBF.LINEcolor of normal and dashed lines to parentsame as DsNforegroundGBF.CYCLEcolor of line which indicates cyclesred color (actually the define: RGB.RED)GBF.HSEPhorizontal spacing between vertical line from parent to child icon in pixels10GBF.VSEPvertical spacing between two consecutive rows (parent to first child, child to next child and so on.) in pixels10GBF.BUTTONwidth and height of button26For a further explanation about the colors, see text.color in gbf.add.object() In almost all cases the will be long (or a domain of basic type int, long, enumerate, bitset and so on.), except when the resource.type is DsNtitle, since in this case the must be multi-byte string.Note that since Baan V the resource GBF.BUTTON is no longer valid, that is it is not possible to change the value. When this resource is obtained through the gbf.get.resource() then always the default value will be returned for backward compatibility reasons.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.search.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.search.strategy( long search.strategy )</Syntax>
      <Description>The function gbf.set.search.strategy sets the search strategy, which means that starting with the next search, this strategy will be used. gbf.set.search.set()The function gbf.set.search.set() defines the set in which the wanted object is to be searched in. The search.strategy may be one of:GBF.SEARCH.CURRENTUse the current tree in memory, which may be an incomplete treeGBR.SEARCH.ALLRead the whole tree, which includes that what is not open, before searching gbf.set.search.sensitive()The function gbf.set.search.sensitive() defines whether or not the case must match. The search.strategy may be one of:GBF.SEARCH.SENSITIVEUse case sensitive searches, in other words an ‘a’n n n n is different from an ‘A’GBR.SEARCH.INSENSITIVEUse case insensitive searches, in other words an ‘ a’ is the same as an ‘A’ gbf.set.search.what()The function gbf.set.search.what() defines what to search for. The search.strategy may be one of:GBF.SEARCH.DESCRIPTIONSearch in the descriptions of the objectsGBR.SEARCH.KEYSearch in the codes (or keys) of the objects gbf.set.search.headers()Finally the function gbf.set.search.headers() defines whether header objects (see: gbf.add.header()) should be included or excluded from the search. The search.strategy may be one of:GBF.SEARCH.NO.HEADERSExclude header objects from the searchGBR.SEARCH.HEADERSInclude header objects in the search gbf.set.search.strategy()For the function gbf.set.search.strategy() the search.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.search.strategy() is:GBF.SEARCH.CURRENT + GBF.SEARCH.INSENSITIVE + GBF.SEARCH.DESCRIPTION + GBF.SEARCH.NO.HEADERSTake care when using gbf.set.search.strategy() in cases where only one or two the search strategy parts has to be changed since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example when one wants to use the GBF.SEARCH.INSENSITIVE strategy the following code should be used: function long force.search.insensitive() { long retval, strategy retval = gbf.get.search.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.SEARCH.INSENSITIVE + bit.and(strategy, bit.inv(GBF.SEARCH.SENSITIVE + GBF.SEARCH.INSENSITIVE)) return (gbf.set.search.strategy(strategy)) } Note that when the search strategy is changed the submenu items under the search menu are also updated with the tic-mark showing the current search strategy (see gbf.init() menu options: GBF.MENU.SRCH.CURR, GBF.MENU.SRCH.READ and so on.).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.searchxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.search.headers</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.search.headers( long search.strategy )</Syntax>
      <Description>The function gbf.set.search.strategy sets the search strategy, which means that starting with the next search, this strategy will be used. gbf.set.search.set()The function gbf.set.search.set() defines the set in which the wanted object is to be searched in. The search.strategy may be one of:GBF.SEARCH.CURRENTUse the current tree in memory, which may be an incomplete treeGBR.SEARCH.ALLRead the whole tree, which includes that what is not open, before searching gbf.set.search.sensitive()The function gbf.set.search.sensitive() defines whether or not the case must match. The search.strategy may be one of:GBF.SEARCH.SENSITIVEUse case sensitive searches, in other words an ‘a’n n n n is different from an ‘A’GBR.SEARCH.INSENSITIVEUse case insensitive searches, in other words an ‘ a’ is the same as an ‘A’ gbf.set.search.what()The function gbf.set.search.what() defines what to search for. The search.strategy may be one of:GBF.SEARCH.DESCRIPTIONSearch in the descriptions of the objectsGBR.SEARCH.KEYSearch in the codes (or keys) of the objects gbf.set.search.headers()Finally the function gbf.set.search.headers() defines whether header objects (see: gbf.add.header()) should be included or excluded from the search. The search.strategy may be one of:GBF.SEARCH.NO.HEADERSExclude header objects from the searchGBR.SEARCH.HEADERSInclude header objects in the search gbf.set.search.strategy()For the function gbf.set.search.strategy() the search.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.search.strategy() is:GBF.SEARCH.CURRENT + GBF.SEARCH.INSENSITIVE + GBF.SEARCH.DESCRIPTION + GBF.SEARCH.NO.HEADERSTake care when using gbf.set.search.strategy() in cases where only one or two the search strategy parts has to be changed since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example when one wants to use the GBF.SEARCH.INSENSITIVE strategy the following code should be used: function long force.search.insensitive() { long retval, strategy retval = gbf.get.search.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.SEARCH.INSENSITIVE + bit.and(strategy, bit.inv(GBF.SEARCH.SENSITIVE + GBF.SEARCH.INSENSITIVE)) return (gbf.set.search.strategy(strategy)) } Note that when the search strategy is changed the submenu items under the search menu are also updated with the tic-mark showing the current search strategy (see gbf.init() menu options: GBF.MENU.SRCH.CURR, GBF.MENU.SRCH.READ and so on.).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.searchxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.search.sensitive</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.search.sensitive( long search.strategy )</Syntax>
      <Description>The function gbf.set.search.strategy sets the search strategy, which means that starting with the next search, this strategy will be used. gbf.set.search.set()The function gbf.set.search.set() defines the set in which the wanted object is to be searched in. The search.strategy may be one of:GBF.SEARCH.CURRENTUse the current tree in memory, which may be an incomplete treeGBR.SEARCH.ALLRead the whole tree, which includes that what is not open, before searching gbf.set.search.sensitive()The function gbf.set.search.sensitive() defines whether or not the case must match. The search.strategy may be one of:GBF.SEARCH.SENSITIVEUse case sensitive searches, in other words an ‘a’n n n n is different from an ‘A’GBR.SEARCH.INSENSITIVEUse case insensitive searches, in other words an ‘ a’ is the same as an ‘A’ gbf.set.search.what()The function gbf.set.search.what() defines what to search for. The search.strategy may be one of:GBF.SEARCH.DESCRIPTIONSearch in the descriptions of the objectsGBR.SEARCH.KEYSearch in the codes (or keys) of the objects gbf.set.search.headers()Finally the function gbf.set.search.headers() defines whether header objects (see: gbf.add.header()) should be included or excluded from the search. The search.strategy may be one of:GBF.SEARCH.NO.HEADERSExclude header objects from the searchGBR.SEARCH.HEADERSInclude header objects in the search gbf.set.search.strategy()For the function gbf.set.search.strategy() the search.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.search.strategy() is:GBF.SEARCH.CURRENT + GBF.SEARCH.INSENSITIVE + GBF.SEARCH.DESCRIPTION + GBF.SEARCH.NO.HEADERSTake care when using gbf.set.search.strategy() in cases where only one or two the search strategy parts has to be changed since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example when one wants to use the GBF.SEARCH.INSENSITIVE strategy the following code should be used: function long force.search.insensitive() { long retval, strategy retval = gbf.get.search.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.SEARCH.INSENSITIVE + bit.and(strategy, bit.inv(GBF.SEARCH.SENSITIVE + GBF.SEARCH.INSENSITIVE)) return (gbf.set.search.strategy(strategy)) } Note that when the search strategy is changed the submenu items under the search menu are also updated with the tic-mark showing the current search strategy (see gbf.init() menu options: GBF.MENU.SRCH.CURR, GBF.MENU.SRCH.READ and so on.).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.searchxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.search.set</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.search.set( long search.strategy )</Syntax>
      <Description>The function gbf.set.search.strategy sets the search strategy, which means that starting with the next search, this strategy will be used. gbf.set.search.set()The function gbf.set.search.set() defines the set in which the wanted object is to be searched in. The search.strategy may be one of:GBF.SEARCH.CURRENTUse the current tree in memory, which may be an incomplete treeGBR.SEARCH.ALLRead the whole tree, which includes that what is not open, before searching gbf.set.search.sensitive()The function gbf.set.search.sensitive() defines whether or not the case must match. The search.strategy may be one of:GBF.SEARCH.SENSITIVEUse case sensitive searches, in other words an ‘a’n n n n is different from an ‘A’GBR.SEARCH.INSENSITIVEUse case insensitive searches, in other words an ‘ a’ is the same as an ‘A’ gbf.set.search.what()The function gbf.set.search.what() defines what to search for. The search.strategy may be one of:GBF.SEARCH.DESCRIPTIONSearch in the descriptions of the objectsGBR.SEARCH.KEYSearch in the codes (or keys) of the objects gbf.set.search.headers()Finally the function gbf.set.search.headers() defines whether header objects (see: gbf.add.header()) should be included or excluded from the search. The search.strategy may be one of:GBF.SEARCH.NO.HEADERSExclude header objects from the searchGBR.SEARCH.HEADERSInclude header objects in the search gbf.set.search.strategy()For the function gbf.set.search.strategy() the search.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.search.strategy() is:GBF.SEARCH.CURRENT + GBF.SEARCH.INSENSITIVE + GBF.SEARCH.DESCRIPTION + GBF.SEARCH.NO.HEADERSTake care when using gbf.set.search.strategy() in cases where only one or two the search strategy parts has to be changed since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example when one wants to use the GBF.SEARCH.INSENSITIVE strategy the following code should be used: function long force.search.insensitive() { long retval, strategy retval = gbf.get.search.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.SEARCH.INSENSITIVE + bit.and(strategy, bit.inv(GBF.SEARCH.SENSITIVE + GBF.SEARCH.INSENSITIVE)) return (gbf.set.search.strategy(strategy)) } Note that when the search strategy is changed the submenu items under the search menu are also updated with the tic-mark showing the current search strategy (see gbf.init() menu options: GBF.MENU.SRCH.CURR, GBF.MENU.SRCH.READ and so on.).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.searchxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.search.what</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.search.what( long search.strategy )</Syntax>
      <Description>The function gbf.set.search.strategy sets the search strategy, which means that starting with the next search, this strategy will be used. gbf.set.search.set()The function gbf.set.search.set() defines the set in which the wanted object is to be searched in. The search.strategy may be one of:GBF.SEARCH.CURRENTUse the current tree in memory, which may be an incomplete treeGBR.SEARCH.ALLRead the whole tree, which includes that what is not open, before searching gbf.set.search.sensitive()The function gbf.set.search.sensitive() defines whether or not the case must match. The search.strategy may be one of:GBF.SEARCH.SENSITIVEUse case sensitive searches, in other words an ‘a’n n n n is different from an ‘A’GBR.SEARCH.INSENSITIVEUse case insensitive searches, in other words an ‘ a’ is the same as an ‘A’ gbf.set.search.what()The function gbf.set.search.what() defines what to search for. The search.strategy may be one of:GBF.SEARCH.DESCRIPTIONSearch in the descriptions of the objectsGBR.SEARCH.KEYSearch in the codes (or keys) of the objects gbf.set.search.headers()Finally the function gbf.set.search.headers() defines whether header objects (see: gbf.add.header()) should be included or excluded from the search. The search.strategy may be one of:GBF.SEARCH.NO.HEADERSExclude header objects from the searchGBR.SEARCH.HEADERSInclude header objects in the search gbf.set.search.strategy()For the function gbf.set.search.strategy() the search.strategy is a combination of these three. These option flags should be add (‘+’) or bit.or()’ed. The default of GBF for gbf.set.search.strategy() is:GBF.SEARCH.CURRENT + GBF.SEARCH.INSENSITIVE + GBF.SEARCH.DESCRIPTION + GBF.SEARCH.NO.HEADERSTake care when using gbf.set.search.strategy() in cases where only one or two the search strategy parts has to be changed since the other values should remain unchanged. This is in fact the reason why the other three functions are added. For example when one wants to use the GBF.SEARCH.INSENSITIVE strategy the following code should be used: function long force.search.insensitive() { long retval, strategy retval = gbf.get.search.strategy(strategy) if retval &lt; 0 then return (retval) endif strategy = GBF.SEARCH.INSENSITIVE + bit.and(strategy, bit.inv(GBF.SEARCH.SENSITIVE + GBF.SEARCH.INSENSITIVE)) return (gbf.set.search.strategy(strategy)) } Note that when the search strategy is changed the submenu items under the search menu are also updated with the tic-mark showing the current search strategy (see gbf.init() menu options: GBF.MENU.SRCH.CURR, GBF.MENU.SRCH.READ and so on.).</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.searchxxx</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.sort.strategy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.sort.strategy( long sort.strategy )</Syntax>
      <Description>This function sets the automatic sort strategy, which tells the GBF how to sort the child nodes of an interior node. The sort.strategy is the same for the whole tree, that is it is not possible to define different sort strategies for different interior nodes. If this is really wanted, then the application should be doing the sorting. sort.strategy The sort.strategy may be one of: GBR.SORT.NONEGBF does not sort itself, it uses the order in which the nodes are handed overGBF.SORT.DESCGBF will sort the nodes using the descriptionGBF.SORT.KEYGBF will sort the node using the key Apart from the item to be sorted on, also the sort order can be chosen. These options should be added to the sort.strategy. Possible values are: GBF.SORT. ASCENDING Ascending sorting GBF.SORT. DESCENDING Descending sorting Finally you can also choose whether or not case insensitive sorting should be done. These options should be added to the sort strategy. Possible values are: GBF.SORT.SENSITIVEMake distinction between lower and upper case GBF.SORT. INSENSITIVE Make no distinction between lower and upper case The default sort strategy of GBF is GBF.SORT.NONE.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.sort.strategy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.std.menu</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.set.std.menu( long menu.pattern , long disabled , checked Parameter )</Syntax>
      <Description>The following functions are actual defines and they are defined as: gbf.set.std.menu.checked(menu.pattern):gbf.set.std.menu(menu.pattern, false, true)gbf.set.std.menu.disabled(menu.pattern):gbf.set.std.menu(menu.pattern, true, false)gbf.set.std.menu.enabled(menu.pattern):gbf.set.std.menu(menu.pattern, false, false)gbf.set.std.menu.not.checked(menu.pattern):gbf.set.std.menu(menu.pattern, false, false) This function can disable standard GBF menu headings and/or menu items and place or remove a ticmark on a menu item, which has been created using the gbf.init() function. For changing of the customized menu headings and items see function: gbf.set.menu.state(). The menu.pattern holds the pattern of all standard menu items which should be updated. The pattern is build the same way as the argument in the gbf.init() function. So for example to disable all menu items one could use: gbf.set.std.menu.disabled(GBF.MENU.ALL) to disable the “Read All” and “Using Session”: gbf.set.std.menu.disabled(GBF.MENU.FILE.READ + GBF.MENU.HELP.SESS) When disable is set to true then all of the specified standard GBF menu items and headings will become insensitive, that is white, which does not allow the end-user to select it. Also the associated keystroke with this menu.pattern is NOT usable as long as these menu items are disabled. These standard GBF menu items can become selectable again by using false for disable. When checked is true a ticmark will be added in front of all of the specified standard GBF menu items and headings. When checked is false these ticmarks will be removed again. You can change a menu heading and/or menu item which has not been created during the gbf.init() . In this case no error will be returned, but of course nothing will be changed. Also all other created menu headings and items which are not specified in this menu.pattern will be left unchanged. Note It is strongly discouraged to manipulate menu entries that are otherwise dealt with by the GBF. These menu items are: all of the GBF.MENU.SRCH and GBF.MENU.SORT, as well as GBF.MENU.PRINT. Arguments:gbf.set.std.menumenu.patternThe menu.pattern holds the pattern of all standard menu items which should be updated.disabledWhen disable is set to true all of the specified standard GBF menu items and headings will be disabled. Also the associated keystroke with this menu.pattern is not usable as long as these menu items are disabled. These standard GBF menu items can become selectable again by setting this parameter to false.checkedIf true a ticmark will be added in front of all of the specified standard GBF menu items and headings. When checked is set to false these ticmarks will be removed again. Arguments:gbf.set.std.menu.checked, gbf.set.std.menu.not.checked, gbf.set.std.menu.enabled,gbf.set.std.menu.disabledmenu.patternThe menu.pattern holds the pattern of all standard menu items which should be updated.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.std.menu</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.tree.report.subtitle</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void gbf.set.tree.report.subtitle( const string sub.title(80) mb )</Syntax>
      <Description>This function can be used to set the subtitle for the ASCII print report. The default value for this variable, which represents a subtitle for this report, is "(&lt;session code&gt; &lt;session description&gt;)" The presence of the &lt;session code&gt; depends on the user settings. By means of this function an alternate subtitle can be set for ASCII print reports. It should be called during the initialization phase of any session that uses the GBF tree functionality.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.tree.report.subtitle</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.start</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.start( long read.levels , long show.levels )</Syntax>
      <Description>Activates the GBF,in other words it takes over control from the application. See also gbf.init() for more information. read.levels The gbf.start() function will first try to read the number of levels of the tree as specified with the read.levels argument. If the read.levels argument is not given, it is set to 1. The possibilities for read.levels and the actions are: read.levelsdescription&lt; 0return an error, GBF is not activatedGBF.READ.ALLread all levels1read only top level&gt; 1read up to the given number of levels It is not considered an error when the specified read.levels cannot be read from the tree, thus when specifying too many levels which are not present in the actual tree. show.levels After this the number of levels contained in show.levels is displayed in the window. If the show.levels argument is not given, it is set to the value of read.levels. The possibilities for show.levels and the actions are: show.levelsdescription&lt; 0return an error, GBF is not activatedGBF.SHOW.ALLshow all levels which are read&lt;= read.levelsshow up to the given number of levels&gt; read.levelsshow up to read.levels After this the main event loop is activated, effectively meaning that the GBF is now in control. When the GBF is done it will return to the calling application, returning control to the main application.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.start</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.update.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.update.object( long obj.id , long object.description() mb  [, long icon.set]  [, long default.function.id]  [, long drop.function.id]  [, long menumask]  [, long text.color]  [, long line.style] )</Syntax>
      <Description>All but gbf.update.object() are defines and these functions are defined as: gbf.update.deffunc(obj.id, def.func)gbf.update.object(obj.id, GBF.NO.UPD.DESC, GBF.NO.UPD.ICON, def.func, GBF.NO.UPD.FUNC, GBF.NO.UPD.MENU)gbf.update.dropfunc(obj.id, drop.func)gbf.update.object(obj.id, GBF.NO.UPD.DESC, GBF.NO.UPD.ICON, GBF.NO.UPD.FUNC, drop.func, GBF.NO.UPD.MENU)gbf.update.desc(obj.id, description)gbf.update.object(obj.id, description, GBF.NO.UPD.ICON, GBF.NO.UPD.FUNC, GBF.NO.UPD.FUNC, GBF.NO.UPD.MENU)gbf.update.icon(obj.id, icon.set)gbf.update.object(obj.id, GBF.NO.UPD.DESC, icon.set, GBF.NO.UPD.FUNC, GBF.NO.UPD.FUNC, GBF.NO.UPD.MENU)gbf.update.menumask(obj.id, menu)gbf.update.object(obj.id, GBF.NO.UPD.DESC, GBF.NO.UPD.ICON, GBF.NO.UPD.FUNC, GBF.NO.UPD.FUNC, menumask) The gbf.update.object() function updates the given object, that is one or more of the attributes of the given obj.id are changed from what it was on its gbf.add.object() call, or any preceding  call. The items that can be updated are:</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.update</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.enable.drop</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.enable.drop( const string session.code , const string dllname , const string gbf.on.drop )</Syntax>
      <Description>Allow drop operation from objects dragged from the indicated composite child sessions. When an object from the indicated session is dropped, the function passed in parameter gbf.on.drop will be called. This function must be called by the application after gbf.init() has been called but before gbf.start() is called.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.enable.drop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.on.drag</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  gbf.on.drag( long to.pid , const string to.session , long drag.obj , const string drag.key , long drag.value , long drag.type , reference long collection )</Syntax>
      <Description>This function will be called by the GBF when one or more GBF objects are dragged from this session and dropped on another composite child session. This function will only be called when dragging to other sessions is enabled (see gbf.init() default.options, GBF.OPT.SESSION.DRAG). This callback function is supposed to create one or more key field objects related to the currently selected GBF objects and return this to the GBF framework through argument collection.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.on.drag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.on.drop</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long gbf.on.drop( long from.pid , long collection , long drop.obj , const string drop.key , long drop.value , long drop.type , boolean copy )</Syntax>
      <Description>Call back function which is passed in function gbf.enable.drop() This function will be called when a drop event from the associated session arrives. In this function the business logic related to the drop operation must be implemented.</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.on.drop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>gbf.set.selected</Name>
      <ScriptType>all</ScriptType>
      <Syntax> gbf.set.selected( long obj.id )</Syntax>
      <Description>This function can be used to set the selected object in a GBF</Description>
      <HelpID>/progguide/functions_generic_browser_frameworkf/gbf.set.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.clearerr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.clearerr( long bytearray )</Syntax>
      <Description>Resets the error and end-of-byte-array indicator.</Description>
      <HelpID>/progguide/functions_ims/ims.clearerr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.close( long bytearray )</Syntax>
      <Description>Closes the byte array. This is done automaticallly when you leave your process. For a variable byte array (VBA), the claimed memory will be freed. For a fixed byte array (FBA), the used memory buffer has to be freed manually (or is freed automatically when you leave your process).</Description>
      <HelpID>/progguide/functions_ims/ims.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.eof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.eof( long bytearray )</Syntax>
      <Description>Detects if the end of the byte array is reached.</Description>
      <HelpID>/progguide/functions_ims/ims.eof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.error</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.error( long bytearray )</Syntax>
      <Description>Detects if an error has occurred while reading from or writing to the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.getc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  ims.getc$( long bytearray )</Syntax>
      <Description>Returns the next character from the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.getc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.getproperties</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.getproperties( long bytearray , ref string buffer  [, ref long size] )</Syntax>
      <Description>Returns the properties of the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.getproperties</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.gets</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.gets( ref string line , long size , long opt , long bytearray  [, long skip.mode]  [, long there.was.more] )</Syntax>
      <Description>Reads characters from the byte array into a buffer (line).</Description>
      <HelpID>/progguide/functions_ims/ims.gets</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.openfba</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.openfba( string buffer , long size , string type )</Syntax>
      <Description>Opens a Fixed Byte Array (FBA). The following code fragment shows an example of how to create an FBA: string buffer(1) based long size long stream.id size = 1024 alloc.mem(buffer, size) stream.id = ims.openFBA(buffer, size, "rw")</Description>
      <HelpID>/progguide/functions_ims/ims.openfba</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.openvba</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.openvba( string type  [, long initialSize]  [, long increment] )</Syntax>
      <Description>Opens a Variable Byte Array (VBA).</Description>
      <HelpID>/progguide/functions_ims/ims.openvba</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.putc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  ims.putc$( string char , long bytearray )</Syntax>
      <Description>Writes a character to the current position in the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.putc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.puts</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.puts( string line , long bytearray )</Syntax>
      <Description>Writes a line (and a new-line character) to the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.puts</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.r.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.r.long( long bytearray )</Syntax>
      <Description>Reads a long value from the byte array</Description>
      <HelpID>/progguide/functions_ims/ims.r.long</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.r.short</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.r.short( long bytearray )</Syntax>
      <Description>Reads a short value from the byte array</Description>
      <HelpID>/progguide/functions_ims/ims.r.short</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.read( ref string buffer , long nrBytes , long bytearray )</Syntax>
      <Description>Reads a number of bytes from the byte array into a buffer.</Description>
      <HelpID>/progguide/functions_ims/ims.read</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.rewind</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.rewind( long bytearray )</Syntax>
      <Description>Sets the position in byte array to the beginning. Same as ims.seek(0, 0, bytearray).</Description>
      <HelpID>/progguide/functions_ims/ims.rewind</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.seek</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.seek( long offset , long opt , long bytearray )</Syntax>
      <Description>Changes the current position within the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.seek</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.setvbaproperties</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.setvbaproperties( long bytearray , long increment )</Syntax>
      <Description>Sets the properties of the Variable Byte Array (VBA).</Description>
      <HelpID>/progguide/functions_ims/ims.setvbaproperties</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.skip</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.skip( long nrbytes , long bytearray )</Syntax>
      <Description>Skips forward a number of bytes in the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.skip</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.spool.line</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.spool.line( ref string line , long bytearray )</Syntax>
      <Description>Spools a line and writes it to the byte array. The characters in the line are copied to the byte array until the last non-white character in the line is encountered. After that, the contents of the line is cleared.</Description>
      <HelpID>/progguide/functions_ims/ims.spool.line</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.tell</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.tell( long byetarray )</Syntax>
      <Description>Returns the current offset within the byte array relative to the begin of the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.tell</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.w.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.w.long( long value , long bytearray )</Syntax>
      <Description>Writes a value of data type long into the byte array</Description>
      <HelpID>/progguide/functions_ims/ims.w.long</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.w.short</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.w.short( long value , long bytearray )</Syntax>
      <Description>Writes a value of data type short into the byte array</Description>
      <HelpID>/progguide/functions_ims/ims.w.short</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ims.write</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ims.write( string buffer , long nrBytes , long bytearray )</Syntax>
      <Description>Appends a given number of bytes from the buffer into the byte array, beginning at the current position in the byte array.</Description>
      <HelpID>/progguide/functions_ims/ims.write</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bms.add.mask</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  bms.add.mask( string mask  [, long processno] )</Syntax>
      <Description>This adds the specified mask to a process. If you specify a process number, the mask is added to that process. Otherwise, the mask is added to the current process.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/bms.add.mask</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bms.delete.mask</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  bms.delete.mask( string mask  [, long processno] )</Syntax>
      <Description>This removes the specified mask from a process. If you specify a process number, the mask is removed from that process. Otherwise, the mask is removed from the current process.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/bms.delete.mask</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bms.receive.buffer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  bms.receive.buffer( ref string broadcast , ref long no.bytes  [, long level]  [, long wait.flag]  [, ref string mask] )</Syntax>
      <Description>Use this to receive a broadcast message. The function can retrieve a complete record, including ‘\0’ characters.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/bms.receive.buffer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bms.receive$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  bms.receive$(  [ref long level]  [, long wait.flag]  [, ref string mask] )</Syntax>
      <Description>Use this to receive a broadcast message. If no arguments are included, the function returns the first broadcast message sent to the process.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/bms.receive</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bms.send</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  bms.send( string broadcast , long level_or_evt , string mask , long processno  [, long no.bytes] )</Syntax>
      <Description>Use this to send a broadcast message to one or more processes.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/bms.send</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>receive.bucket$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  receive.bucket$( long processno )</Syntax>
      <Description>This waits for a bucket message to be sent to the calling process by another process. It then returns that message. The processno argument returns the process ID of the sending process.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/receive.bucket</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>send.bucket</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  send.bucket( long processno , string bucket )</Syntax>
      <Description>This sends a bucket message to a specified process. If the specified process is sleeping, it is automatically started. It can retrieve the message by calling receive.bucket$().</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/send.bucket</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>send.wait</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  send.wait( long processno , string bucket )</Syntax>
      <Description>This sends a bucket message to a specified process and waits for a reply. The receiving process must send a reply by using send.bucket() or send.wait(). Note that the waiting process cannot receive any message string contained in the reply.</Description>
      <HelpID>/progguide/functions_interprocess_communication_bshell/send.wait</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>close.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  close.message( long key  [, long fast] )</Syntax>
      <Description>This removes the specified mailbox. All messages in the mailbox are also automatically removed.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/close.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>open.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  open.message( long project , string name$ , long action  [, long fast] )</Syntax>
      <Description>Use this to create a new mailbox or to connect to an existing mailbox. You must call this function before you can read from or write to the mailbox.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/open.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.clearerr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.clearerr( long pipe_id )</Syntax>
      <Description>This resets the error and end-of-file indicators on the specified pipe.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.clearerr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.close( long pipe_id )</Syntax>
      <Description>This clears any buffers associated with the specified pipe and closes the file. Buffers allocated by the standard input/output system are also cleared. Note that pipe.close() is performed automatically when the process exits.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.eof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.eof( long pipe_id )</Syntax>
      <Description>This checks the end-of-file indicator on the specified pipe. Note that the end-of-file indicator lasts until the pipe is closed, unless you explicitly clear it by calling pipe.clearerr().</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.eof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.error</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.error( long pipe_id )</Syntax>
      <Description>This checks the error indicator on the specified pipe to determine whether an error has occurred when reading or writing to the pipe. Note that the error indicator lasts until the pipe is closed, unless you explicitly clear it by calling pipe.clearerr().</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.flush</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.flush( long pipe_id )</Syntax>
      <Description>This writes any buffered data associated with a pipe to the related file. The stream remains open.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.flush</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.gets</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.gets( ref string line , long nr_of_bytes , long pipe_id )</Syntax>
      <Description>This reads a maximum of one line from the specified pipe.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.gets</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.open( string pathnm , string openmode )</Syntax>
      <Description>This creates a UNIX process with the specified name and links an input and/or output stream to it. It returns a pointer to the pipe; this is used to identify the pipe in subsequent operations.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.puts</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.puts( string line , long pipe_id )</Syntax>
      <Description>This writes data to the specified pipe. It automatically appends a newline character to the data.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.puts</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.read( ref string buffer , long nr_of_bytes , long pipe_id )</Syntax>
      <Description>This reads a specified number of bytes from the specified pipe.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.read</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pipe.write</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pipe.write( string buffer , long nr_of_bytes , long pipe_id )</Syntax>
      <Description>This appends a specified number of bytes to the specified pipe.</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/pipe.write</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>recv.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  recv.message( long key , long sender.key , long time , ref string message$  [, long fast] )</Syntax>
      <Description>This reads a message from the specified mailbox. The process must previously have connected to the mailbox by calling open.message().</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/recv.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>send.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  send.message( long dest.key , long sender.key , string message$ , long fast )</Syntax>
      <Description>This stores a message in the specified mailbox. The process must previously have connected to the mailbox by calling open.message().</Description>
      <HelpID>/progguide/functions_interprocess_communication_os_level/send.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.destroy.queue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.destroy.queue( long Queue.id )</Syntax>
      <Description>Removes a queue, given the queue id. This will also remove all buckets on that queue!!</Description>
      <HelpID>/progguide/functions_javavm/java.destroy.queue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.execute.static.method.sync</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long java.execute.static.method.sync( string class.name , string method.name  [, void ...] )</Syntax>
      <Description>Executes a Java static method, with no return type, within the JavaVM. java.execute.static.method.sync() returns to the caller AFTER completion of the Java method. Java.execute.static.method.async() returns to the caller BEFORE completion of the Java method.</Description>
      <HelpID>/progguide/functions_javavm/java.execute.static.method.sync</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.execute.static.method.async</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long java.execute.static.method.async( string class.name , string method.name  [, void ...] )</Syntax>
      <Description>Executes a Java static method, with no return type, within the JavaVM. java.execute.static.method.sync() returns to the caller AFTER completion of the Java method. Java.execute.static.method.async() returns to the caller BEFORE completion of the Java method.</Description>
      <HelpID>/progguide/functions_javavm/java.execute.static.method.sync</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.get.bucket</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.get.bucket( long Queue.id , ref string body , long length  [, ref string header] )</Syntax>
      <Description>Retrieves a bucket from the queue (if available). The message is removed from the queue afterwards.</Description>
      <HelpID>/progguide/functions_javavm/java.get.bucket</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.install.listener</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.install.listener( long Queue.id  [, long become.owner] )</Syntax>
      <Description>Installs a listener at the Infor ERP LN side. Whenever a message arrives on the queue specified by queue.id, the 3GL process will be notified by an EVT_CHANNEL_EVENT event. For installation of a listener at the Java side, see the Java IQeueListener interface definition.</Description>
      <HelpID>/progguide/functions_javavm/java.install.listener</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.lookup.queue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.lookup.queue( long Queue.id  [, ref string header] )</Syntax>
      <Description>Checks whether a queue is still valid and, if so, if the queue contains a message. The message is not removed from the queue.</Description>
      <HelpID>/progguide/functions_javavm/java.lookup.queue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.new.queue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.new.queue( )</Syntax>
      <Description>Creates a new queue for buckets. Upon return, the new queue.id is returned, or an error code is presented. NOTE: queues are removed automatically if the process that created it (or the process that called java.install.listener(…) on that queue) is finished !! See also the 3GL function java.install.listener.</Description>
      <HelpID>/progguide/functions_javavm/java.new.queue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.put.bucket</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.put.bucket( long Queue.id , string body , long length  [, string header] )</Syntax>
      <Description>Places a message onto a queue. The message contains a header (of type string) and a body (which can contain any character).</Description>
      <HelpID>/progguide/functions_javavm/java.put.bucket</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>java.uninstall.listener</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  java.uninstall.listener( long Queue.id )</Syntax>
      <Description>Uninstalls a listener at the Infor ERP LN side. All buckets on this queue will remain available. The listener can only be uninstalled by the process that installed the listener.</Description>
      <HelpID>/progguide/functions_javavm/java.uninstall.listener</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>abs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double abs( double x )</Syntax>
      <Description>This returns the absolute value of the specified numeric expression. The expression can be of type integer or floating point.</Description>
      <HelpID>/progguide/functions_mathematical_operations/abs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>acos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  acos( double x )</Syntax>
      <Description>This computes the arc cosine of x. The value of x must be in the range [-1, 1].</Description>
      <HelpID>/progguide/functions_mathematical_operations/acos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>asin</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  asin( double x )</Syntax>
      <Description>This computes the arc sine of x. The value of x must be in the range [-1, 1].</Description>
      <HelpID>/progguide/functions_mathematical_operations/asin</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>atan</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  atan( double x )</Syntax>
      <Description>This computes the arc tangent of x.</Description>
      <HelpID>/progguide/functions_mathematical_operations/atan</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double cos( double x )</Syntax>
      <Description>This computes the cosine of x, in radians. The x argument can be a long or a double.</Description>
      <HelpID>/progguide/functions_mathematical_operations/cos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cosh</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  cosh( double x )</Syntax>
      <Description>This computes the hyperbolic cosine of x.</Description>
      <HelpID>/progguide/functions_mathematical_operations/cosh</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>double.cmp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  double.cmp( double double1 , double double2 , double tolerance )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_mathematical_operations/double.cmp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>exp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double exp( double x )</Syntax>
      <Description>This returns the exponent of x. That is, it computes the value of the mathematical constant e (2.7182818) raised to the power of x.</Description>
      <HelpID>/progguide/functions_mathematical_operations/exp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>format.round</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  format.round( double value , string format  [, long mode] )</Syntax>
      <Description>The rounds a value according to a specified format.</Description>
      <HelpID>/progguide/functions_mathematical_operations/format.round</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>int</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long int( double x )</Syntax>
      <Description>This converts the result of a floating point expression to an integer value. It returns only the integer portion of the result. If the result of double_expr is positive, it is incremented by 0.0000001 before conversion. If the result is negative, it is decremented by 0.0000001 before conversion. This is done to avoid rounding problems.</Description>
      <HelpID>/progguide/functions_mathematical_operations/int</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>log</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double log( double x )</Syntax>
      <Description>This computes the natural logarithm of x. The value of x must be greater than zero.</Description>
      <HelpID>/progguide/functions_mathematical_operations/log</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>log10</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  log10( double x )</Syntax>
      <Description>This computes the base 10 logarithm of x. The value of x must be greater than zero.</Description>
      <HelpID>/progguide/functions_mathematical_operations/log10</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lpow</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  lpow( long x , long y )</Syntax>
      <Description>This computes the value of x raised to the power of y. The y argument must be positive.</Description>
      <HelpID>/progguide/functions_mathematical_operations/lpow</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>max</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  max( double x , double y )</Syntax>
      <Description>This compares the values of the two arguments and returns whichever is the greatest. The arguments can be of type long or double or can contain any numeric expression.</Description>
      <HelpID>/progguide/functions_mathematical_operations/max</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>min</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  min( double x , double x )</Syntax>
      <Description>This compares the values of the two arguments and returns whichever is the smallest. The arguments can be of type long or double or can contain any numeric expression.</Description>
      <HelpID>/progguide/functions_mathematical_operations/min</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pow</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double pow( double x , double y )</Syntax>
      <Description>This computes the value of x raised to the power of y. If x is zero, y must be positive. If x is negative, y must be an integer.</Description>
      <HelpID>/progguide/functions_mathematical_operations/pow</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>round</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double round( double value , long diga , long mode )</Syntax>
      <Description>This rounds a given value to a specified number of decimal places.</Description>
      <HelpID>/progguide/functions_mathematical_operations/round</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sin</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double sin( double x )</Syntax>
      <Description>This computes the sine of x, in radians. The x argument can be a long or a double.</Description>
      <HelpID>/progguide/functions_mathematical_operations/sin</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sinh</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  sinh( double x )</Syntax>
      <Description>This computes the hyperbolic sine of x.</Description>
      <HelpID>/progguide/functions_mathematical_operations/sinh</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sqrt</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  sqrt( double x )</Syntax>
      <Description>This computes the non-negative square root of x. The x argument must not be less than zero. It can be of type long or double.</Description>
      <HelpID>/progguide/functions_mathematical_operations/sqrt</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>table.round</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void table.round(  [void field [, field] ...]  [, string table [, table] ...] )</Syntax>
      <Description>This rounds the values in certain tables and table fields according to parameters defined in the domain definition in the data dictionary.</Description>
      <HelpID>/progguide/functions_mathematical_operations/table.round</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tan</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double tan( double x )</Syntax>
      <Description>This computes the tangent of x, in radians. The x argument can be a long or a double.</Description>
      <HelpID>/progguide/functions_mathematical_operations/tan</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tanh</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  tanh( double x )</Syntax>
      <Description>This computes the hyperbolic tangent of x.</Description>
      <HelpID>/progguide/functions_mathematical_operations/tanh</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.fmax</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.fmax( void variable , string domain )</Syntax>
      <Description>This sets a specified multibyte string variable to its maximum value. For standard variables, use set.max() instead. For setting the minimum value, use set.fmin() and set.min().</Description>
      <HelpID>/progguide/functions_mathematical_operations/set.fmax</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.fmin</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.fmin( void variable , string domain )</Syntax>
      <Description>This sets a specified multibyte string variable to its minimum value. For standard variables, use set.min() instead. For setting the maximum value, use set.fmax() and set.max().</Description>
      <HelpID>/progguide/functions_mathematical_operations/set.fmin</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.max</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.max( void variable , string domain )</Syntax>
      <Description>This sets a specified standard variable to its maximum value. For multibyte strings, use set.fmax() instead. For setting the minimum value, use set.min() and set.fmin().</Description>
      <HelpID>/progguide/functions_mathematical_operations/set.max</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.min</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.min( void variable , string domain )</Syntax>
      <Description>This sets a specified standard variable to its minimum value. For multibyte strings, use set.fmin() instead. For setting the maximum value, use set.max() and set.fmax().</Description>
      <HelpID>/progguide/functions_mathematical_operations/set.min</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>alloc.mem</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  alloc.mem( ref variable , long dimension1  [, long dimension2, ...] )</Syntax>
      <Description>This allocates memory space to the specified variable at run time. The variable can be a string or an array (of any type). It must be declared as BASED. With multi-dimensional arrays, each dimension must be initialized to 1 at declaration. Once alloc.mem() has allocated memory for a variable, that variable behaves in the same way as any other variable. Behavior when TIV level of object is below 1700 When you call alloc.mem() a second time for the same variable, information already present is retained, but the variable is reallocated to a different part of memory. This is relevant only if you want to increase or decrease the memory space assigned to an array. Because the contents of array elements are contiguous in memory, you can change only the number of elements in the array (the first index in the case of longs and doubles; the second index in the case of strings). Changing the size of array elements during reallocation causes loss of information. Behavior when TIV level of object is 1700 or higher When you call alloc.mem() a second time for the same variable, information already present is retained, but the variable may be reallocated to a different part of memory, if one of the dimensions is different from the first time. The information in the array is retained in such a way that when an item is available at a certain point (identified by a number of indices) in the old array, that item can be found at the same point in the new array, when the dimensions of the new array allow. All points in the new array that have no corresponding point in the old array will have a 0 or empty value. For backward compatibility the function alloc.mem.deprecated() is available from TIV 1700. Regardless the object TIV the alloc.mem.deprecated() function behaves the same as alloc.mem() when the object TIV is less than 1700.</Description>
      <HelpID>/progguide/functions_memory_operations/alloc.mem</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>array.get.size.in.bytes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  array.get.size.in.bytes( void var )</Syntax>
      <Description>This returns the number of bytes available for a specified array or string</Description>
      <HelpID>/progguide/functions_memory_operations/array.get.size.in.bytes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>array.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  array.info( void var , ref long nr.dims , ref long Parameter )</Syntax>
      <Description>This returns the number of dimensions in a specified array variable and the size of each dimension.</Description>
      <HelpID>/progguide/functions_memory_operations/array.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cmp.mem</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  cmp.mem( void var1 , void var2  [, long count] )</Syntax>
      <Description>This compares the values of two variables or arrays. By default, the values are compared for the length of the shortest argument. If you specify the optional count argument, the function compares the first count digits or characters of both arguments.</Description>
      <HelpID>/progguide/functions_memory_operations/cmp.mem</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>copy.mem</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  copy.mem( ref void destination , void source  [, long count] )</Syntax>
      <Description>This copies the memory space from the source argument to the destination argument. By default, the total length of source is copied. But, if the destination argument is shorter than the source argument, then source is truncated. Use the optional count argument to copy a specified number of bytes only. You can use this function to copy single variables or entire arrays. You cannot copy variables of different types. It you attempt to do this, the destination argument remains unchanged.</Description>
      <HelpID>/progguide/functions_memory_operations/copy.mem</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>free.mem</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  free.mem( void variable )</Syntax>
      <Description>This deallocates memory space previously allocated to the specified variable by alloc.mem(). The freed memory becomes available for another allocation. The variable cannot be used again after deallocation, unless it is reallocated memory space again using alloc.mem().</Description>
      <HelpID>/progguide/functions_memory_operations/free.mem</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.mem</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.mem( ref void destination , void source  [, long count] )</Syntax>
      <Description>The stores the value of source in the destination argument. By default, the value of source is repeated in destination until the latter is completely filled. Use the optional count argument to repeat the value of source a specific number of times only. Elements in the destination argument which are not overwritten remain unchanged.</Description>
      <HelpID>/progguide/functions_memory_operations/set.mem</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>clean.mess</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  clean.mess( )</Syntax>
      <Description>This removes a message that was displayed by using the mess() function with its mode argument set to 0.</Description>
      <HelpID>/progguide/functions_message_handling/clean.mess</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.clear.error.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void  dal.clear.error.messages( )</Syntax>
      <Description>This clears all DAL error messages from the message buffer. Abbreviation for dal.reset.error.messages(0).</Description>
      <HelpID>/progguide/functions_message_handling/dal.clear.error.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.clear.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void  dal.clear.messages( long i.type )</Syntax>
      <Description>This clears all DAL messages of the specified type from the message buffer. Abbreviation for dal.reset.messages(i.type, 0).</Description>
      <HelpID>/progguide/functions_message_handling/dal.clear.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.count.error.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long  dal.count.error.messages( )</Syntax>
      <Description>This returns the number of DAL error messages currently in the message buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.count.error.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.count.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long  dal.count.messages( long i.type )</Syntax>
      <Description>This returns the number of DAL messages of the specified type that are currently in the message buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.count.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.error.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long  dal.get.error.message( ref string mesg )</Syntax>
      <Description>This retrieves the most recent DAL error message from the message buffer. The message is removed from the buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.get.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.error.msgcode</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>string  dal.get.error.msgcode( )</Syntax>
      <Description>This retrieves the message code of most recent DAL error message from the message buffer. The message is not removed from the buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.get.error.msgcode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.first.error.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>long  dal.get.first.error.message( ref string mesg , ref string code )</Syntax>
      <Description>This retrieves the oldest DAL error message from the message buffer, together with the message code. The message is removed from the buffer. Note that this function is slightly slower than dal.get.error.message().</Description>
      <HelpID>/progguide/functions_message_handling/dal.get.first.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.first.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean  dal.get.first.message( long i.type , ref string o.code , ref string o.text  [, ref long o.type] )</Syntax>
      <Description>Returns the code and text of the oldest message of the given type. In case MSG.ALL is passed as the type, then the type of the message is returned in the 4th argument.</Description>
      <HelpID>/progguide/functions_message_handling/dal.get.first.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.get.last.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>boolean  dal.get.last.message( long i.type , ref string o.code , ref string o.text  [, ref long o.type] )</Syntax>
      <Description>Returns the code and text of the most recent message of the given type. In case MSG.ALL is passed as the type, then the type of the message is returned in the 4th argument.</Description>
      <HelpID>/progguide/functions_message_handling/dal.get.last.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.peek.error.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>string  dal.peek.error.message( long n )</Syntax>
      <Description>This retrieves the DAL error message from the message buffer at position n. The message is not removed from the buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.peek.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.peek.error.msgcode</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>string  dal.peek.error.msgcode( long n )</Syntax>
      <Description>This retrieves the message code from the message buffer at position n. The message is not removed from the buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.peek.error.msgcode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.peek.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void  dal.peek.message( long i.type , long i.index , ref string o.code , ref string o.text  [, ref long o.type] )</Syntax>
      <Description>Returns the code and text of the message of the specified type that is located at the given index in the message buffer. In case you specify MSG.ALL as the type, the type of the message is returned in the 5th argument.</Description>
      <HelpID>/progguide/functions_message_handling/dal.peek.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.reset.error.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void  dal.reset.error.messages( long amt )</Syntax>
      <Description>This clears the most recent DAL error messages from the message buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.reset.error.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.reset.messages</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void  dal.reset.messages( long i.type , long i.count )</Syntax>
      <Description>Removes the most recent messages of the given type from the DAL message buffer. The 2nd argument determines how many messages will remain in the buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.reset.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.error.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.set.error.message( string mess.or.code  [, void arg ...] )</Syntax>
      <Description>These functions add a message to the DAL message buffer of type MSG.ERROR, MSG.WARNING, or MSG.INFO. They are short versions for function dal.set.message().</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.warning.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.set.warning.message( string mess.or.code  [, void arg ...] )</Syntax>
      <Description>These functions add a message to the DAL message buffer of type MSG.ERROR, MSG.WARNING, or MSG.INFO. They are short versions for function dal.set.message().</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.info.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.set.info.message( string mess.or.code  [, void arg ...] )</Syntax>
      <Description>These functions add a message to the DAL message buffer of type MSG.ERROR, MSG.WARNING, or MSG.INFO. They are short versions for function dal.set.message().</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.message</Name>
      <ScriptType>DAL</ScriptType>
      <Syntax>void dal.set.message( long i.type , const string i.mess.or.code  [, void arg ...] )</Syntax>
      <Description>Adds a message of the specified type to the DAL message buffer.</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>form.text$</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>string  form.text$( string messcode  [, string language_code] )</Syntax>
      <Description>This retrieves a message from the data dictionary. It is used for constructing strings with parameter substitution. For messages to the screen, use mess().</Description>
      <HelpID>/progguide/functions_message_handling/form.text</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mess</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void mess( string messcode , long separate_window  [, void arg ...] )</Syntax>
      <Description>This retrieves a message from the data dictionary and displays it on screen. Using this function makes your program script language independent.</Description>
      <HelpID>/progguide/functions_message_handling/mess</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void message( string mess_str  [, void arg ...] )</Syntax>
      <Description>This displays the specified message string on screen in a separate window, and waits until the user closes it. [TODO: Say something about 'non-interrupted mode'.]</Description>
      <HelpID>/progguide/functions_message_handling/message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.input.error</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void set.input.error( string mess.or.code  [, void arg ...] )</Syntax>
      <Description>This causes the 4GL engine to display the specified error message and to force input again in the same input field. If you specify an empty string, no error message is displayed.</Description>
      <HelpID>/progguide/functions_message_handling/set.input.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>show.dal.messages</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  show.dal.messages(  [long i.type] )</Syntax>
      <Description>Displays messages that are currently on the DAL message stack. Depending on the specified message type, you can display error, warning or info messages, or all messages. If no message type is specified, only error messages will be displayed.</Description>
      <HelpID>/progguide/functions_message_handling/show.dal.messages</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>status.del</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  status.del( )</Syntax>
      <Description>This clears the first status field in the status area. Abbreviation for status.mess("").</Description>
      <HelpID>/progguide/functions_message_handling/status.del</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>status.mess</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  status.mess( string strg )</Syntax>
      <Description>This displays the specified message in the first status field of a 4GL form.</Description>
      <HelpID>/progguide/functions_message_handling/status.mess</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.messages.off</Name>
      <ScriptType>all</ScriptType>
      <Syntax> dal.set.messages.off( )</Syntax>
      <Description>Turns off dal.set.error.message(). After calling dal.set.messages.off(), any calls to dal.set.error.message() are ignored. To turn on dal.set.error.message() again, use dal.set.messages.on().</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.messages.off</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dal.set.messages.on</Name>
      <ScriptType>all</ScriptType>
      <Syntax> dal.set.messages.on( )</Syntax>
      <Description>Turns on dal.set.error.message. To turn dal.set.error.message off, use dal.set.messages.off.</Description>
      <HelpID>/progguide/functions_message_handling/dal.set.messages.on</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.cast.to.str$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.cast.to.str$( string string_express )</Syntax>
      <Description>This function converts a specified string to a single-byte string. The content of the string remains the same.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.cast.to.str</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.cast$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.cast$( string string_expres )</Syntax>
      <Description>This function converts a specified string to a multibyte string. The content of the string remains the same.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.cast</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.char.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.char.info( string ch$ )</Syntax>
      <Description>This function identifies the character set to which a TSS character belongs. It returns the character set ID for the first character in the specified string. In TSS, due to the phenomenon of unification, it is not in all cases clear to which character set a character belongs. This functions tries all available character sets in a certain order and returns the ID of the first encountered character set containing a character that reasonably might have been mapped to the first character of the supplied string.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.char.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.char</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.char( long charvalue )</Syntax>
      <Description>This function tests if a specified character code represents a multibyte character. It is mainly used in conjunction with the next.event() function, which returns a character as a long value.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.char</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.display</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long mb.display( string string_expr , ref string substr$ , long space  [, long flags] )</Syntax>
      <Description>This function returns that part of a specified string that fits in a specified display space. The substring is equal to the source string if the source string fits in the display space. If one or more characters do not fit in the display space, a ghost character (default is &gt;) is appended to the substring.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.display</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.export.raw</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.export.raw( ref string target$ , string source$  [, long setid] )</Syntax>
      <Description>This function converts a string from the TSS character set to the external, native character set. By default, the setting of the current locale determines the character set to which the string is converted. This function is almost identical to mb.export$(), but in contrast to that function, no special conversion is done for code features in source$.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.export.raw</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.export$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.export$( ref string target$ , string source$  [, long setid] )</Syntax>
      <Description>This function converts a string from the TSS character set to the external, native character set. By default, the setting of the current locale determines the character set to which the string is converted. Code features in the string are skipped.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.export</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.ext.clean$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.ext.clean$( ref string ext.string )</Syntax>
      <Description>This function replaces characters in a specified string with spaces, if those characters cannot be converted from native format to TSS.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.ext.clean</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.hasbidi</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  mb.hasbidi( string string_expres )</Syntax>
      <Description>This function checks whether a specified string contains at least one bidirectional character. The function works regardless of the current user locale.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.hasbidi</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.import.raw</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.import.raw( ref string target$ , string source$  [, long setid] )</Syntax>
      <Description>This function converts a string from the external, native character set to the TSS character set. By default, the setting of the current locale determines the native character set from which the string is converted. Unlike mb.import$(), no special conversion is done for Code Features.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.import.raw</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.import$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.import$( ref string target$ , string source$  [, long setid] )</Syntax>
      <Description>This function converts a string from the external, native character set to the TSS character set. By default, the setting of the current locale determines the native character set from which the string is converted. Code features are restored.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.import</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.isbidi.language</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  mb.isbidi.language( string lang )</Syntax>
      <Description>This function checks whether the specified language is a bidirectional one. To use the function, you must link to the ttdllbidi library. The function checks the flag ‘ %TF@ttaad110.bidi’ in the table ‘%TB@ttaad110’.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.isbidi.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.isbidi</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  mb.isbidi( )</Syntax>
      <Description>This function checks whether the current environment is a bidirectional one.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.isbidi</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.locale.enumerate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.locale.enumerate( const string locale.name$ )</Syntax>
      <Description>This function returns information about one specific locale or about all locales.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.locale.enumerate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.locale.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.locale.info( long info_flag )</Syntax>
      <Description>This function returns information about the current locale.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.locale.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.localename$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.localename$( )</Syntax>
      <Description>This function returns the name of the current locale as defined in the file '$bse/lib/user/u&lt;user&gt;'. The file ‘$BSE/lib/tss_localex.x’  (where x.x is the bshell version) contains all locales that the system supports.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.localename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.long.to.str$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.long.to.str$( long charvalue )</Syntax>
      <Description>This function converts a character code to the equivalent string value. It accepts single byte and multibyte character codes only. Do not use it for other character codes, such as function keys.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.long.to.str</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.nsets</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.nsets( )</Syntax>
      <Description>This function returns the number of TSS character sets currently defined. This is useful for retrieving character set information using mb.set.info().</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.nsets</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.rev$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  mb.rev$( string string_expr  [, long flags] )</Syntax>
      <Description>This function reverses the order of the characters in a specified string.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.rev</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.scrpos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.scrpos( string string_expr , long pos )</Syntax>
      <Description>This function converts a string position to a screen position. Code features are ignored.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.scrpos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.set.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.set.info( long setid , ref string name , string desc , ref long n_items )</Syntax>
      <Description>This function returns information about a specified character set.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.set.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.strpos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.strpos( string string_expr , long pos )</Syntax>
      <Description>This function converts a screen position to a string position. Code features are ignored.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.strpos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.tss.clean$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.tss.clean$( ref string tss.string )</Syntax>
      <Description>This function replaces characters in a specified string with spaces, if those characters cannot be converted from TSS to native format.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.tss.clean</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.type</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.type( string string_expres )</Syntax>
      <Description>This function tests if a specified string is a multibyte string. It does not test the content of the string.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.type</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.width</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.width( string string_expres )</Syntax>
      <Description>This function returns the display width of a specified string; that is, the number of positions the string will occupy on the screen. A single byte character has a display width of zero or one screen positions. A multibyte character has a display width of zero or one or two screen positions.</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.width</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>uni.export</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  uni.export( ref string target$ , const string source$  [, long sb_flag] )</Syntax>
      <Description>This function converts a string from the TSS character set to Unicode, using a byte serialized UTF-16 encoding scheme. The default encoding scheme is UTF-16BE, i.e. each UTF-16 code unit is serialized with the most significant byte first.</Description>
      <HelpID>/progguide/functions_multibyte_strings/uni.export</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>uni.import</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  uni.import( ref string target$ , const string source$  [, long sb_flag] )</Syntax>
      <Description>This function converts a string from Unicode (encoded according to a byte serialized UTF-16 encoding scheme) to the TSS character set. The default encoding scheme is UTF-16BE, i.e. each UTF-16 code unit is assumed to be serialized with the most significant byte first.</Description>
      <HelpID>/progguide/functions_multibyte_strings/uni.import</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utf8.export</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  utf8.export( ref string target$ , const string source$ , long option_mask )</Syntax>
      <Description>This function converts a string from the TSS character set to Unicode, using a UTF-8 encoding.</Description>
      <HelpID>/progguide/functions_multibyte_strings/utf8.export</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>utf8.import</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  utf8.import( ref string target$ , const string source$ , long option_mask )</Syntax>
      <Description>This function converts a string from Unicode (encoded according to a UTF-8 encoding) to the TSS character set.</Description>
      <HelpID>/progguide/functions_multibyte_strings/utf8.import</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mb.coerce.to.sb</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mb.coerce.to.sb( ref string string$  [, long setid] )</Syntax>
      <Description>This function converts a string from the TSS character set to the external, native character set, assuring that each resulting character is a single byte. By default, the setting of the current user locale (singlebyte or multibyte environment) or the installation locale (Unicode environment) determines the character set to which the string is converted. Code features in the string are skipped. This function may be used when a string containing multibyte characters must be assigned to a singlebyte string. Note that the conversion may result in ambiguous high ascii characters (see ).</Description>
      <HelpID>/progguide/functions_multibyte_strings/mb.coerce.to.sb</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>publish.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  publish.check( const string bus.component.name , ref long result.xml )</Syntax>
      <Description>This function checks whether a destination (bus component) is available for publishing events. Note that publish.open() and publish.message() will not always report errors, but will send messages to an error handler or log file instead. To avoid publishing many message to the error handler or log file, this check function can be used before using publish.open().</Description>
      <HelpID>/progguide/functions_outbound_publishing/publish.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>publish.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  publish.close( long publication.id , ref long result.xml )</Syntax>
      <Description>This function closes a publication channel. After using this function, publish.message() and publish.error.message() cannot be used anymore unless a new publish.open() is done first.</Description>
      <HelpID>/progguide/functions_outbound_publishing/publish.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>publish.error.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  publish.error.message( long publication.id , long error.xml , ref long result.xml )</Syntax>
      <Description>This function reports an error instead of publishing a message. It can be used if a message could not be created or sent successfully. Note that the error message is not sent to the bus component as specified in publish.open(). Instead, the Adapter configuration specifies an error handler for the bus component and the error message is sent to that error handler. If the error handler cannot be found or is unavailable, the Adapter will take care that the error is logged.</Description>
      <HelpID>/progguide/functions_outbound_publishing/publish.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>publish.message</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  publish.message( long publication.id , long message.xml , ref long result.xml )</Syntax>
      <Description>This function publishes the specified message.</Description>
      <HelpID>/progguide/functions_outbound_publishing/publish.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>publish.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  publish.open( const string bus.component.name , ref long result.xml )</Syntax>
      <Description>This function initializes the publishing.</Description>
      <HelpID>/progguide/functions_outbound_publishing/publish.open</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.activate.session</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  pcm.activate.session( ref string session , string title )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts a specified 4GL session. It generates a new window for the session and ensures that it is handled correctly. You can use this function in combination with pcm.send.bms.event(), which sends changed values back to the application as events.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.activate.session</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pcm.change.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void pcm.change.object( long plan_id , long object_id  [, long flag]  [, long value,] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to change the attributes of an object that was created by pcm.create.object().</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.change.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pcm.change</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void pcm.change( long plan_id, ... , long flag , long value )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to change the attributes of a specified chart.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.change</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pcm.create.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long pcm.create.object( long plan_id , long object_type  [, long flag]  [, long value]  [, long flag, value] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This creates an object of the specified type – for example, a menu item, an activity, a relation, or a marker. The function returns the object_id, which in turn is used in the functions pcm.change.object() and pcm.destroy.object() to identify the particular object to be changed or deleted. The object_id is also used in submenus and with subactivities in order to indicate the parent of the menu or activity.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.create.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pcm.create</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long pcm.create(  [long flag]  [, long value,...] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts the Plan Chart Manager and creates a new chart with the specified attributes. It returns the variable plan_id, which is a unique identifier for the chart. You use plan_id in the other functions in order to identify the chart you want to work with.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.create</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.destroy.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  pcm.destroy.object( long plan_id , long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This deletes the specified object.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.destroy.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.destroy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  pcm.destroy( long plan_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This ends the specified plan chart and removes all associated settings and objects.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.destroy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pcm.get.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void pcm.get.data( long evt_type , ref string arglist,... )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. When the client application receives an event from the Plan Chart Manager, use this function to read the event.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.get.data</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.lock</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  pcm.lock( long plan_id , long lock )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to lock and unlock the Plan Chart Manager (for example, when data is changed in a session).</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.lock</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.refresh</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  pcm.refresh( long plan_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This (re)draws the specified chart and updates the display with all new and changed objects.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.refresh</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>pcm.send.bms.event</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  pcm.send.bms.event( long command , ref string arglist )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this in a process started by pcm.activate.session() in order to send an event back to the application that started the session.</Description>
      <HelpID>/progguide/functions_plan_chart_manager/pcm.send.bms.event</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.bms.is.notification</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  prcm.bms.is.notification(  [long bms.command] )</Syntax>
      <Description>Tests whether the specified bms command is a notification of a subject. If no bms command is passed to this function, the predefined 4GL variable bms.sender.command is checked. If the bms command is a notification of a subject then a bms.receive$() is done. The received bms message is decoded into a subject and an aspect. The decoced subject and aspect can be retrieved by calling: prcm.get.subject() prcm.get.aspect()</Description>
      <HelpID>/progguide/functions_prcm/prcm.bms.is.notification</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.get.aspect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>observer processes can call  prcm.get.aspect( )</Syntax>
      <Description>Returns the last decoded aspect of the subject that did a notification.</Description>
      <HelpID>/progguide/functions_prcm/prcm.get.aspect</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.get.subject</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  prcm.get.subject( )</Syntax>
      <Description>Returns the last decoded subject that did a notification.</Description>
      <HelpID>/progguide/functions_prcm/prcm.get.subject</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.notify</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  prcm.notify( const string subject  [, string aspect(32)]  [, long data] )</Syntax>
      <Description>Is called by a subject process to notify other processes that it has changed. Optionally, an aspect can be specified to indicate what aspect of the subject process has changed. It is also possible to pass some data to the observer processes in the form of an XML document. Observer processes then have read-only access to this XML document.</Description>
      <HelpID>/progguide/functions_prcm/prcm.notify</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.register</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  prcm.register( const string subject  [, string aspect(32)] )</Syntax>
      <Description>Is called by an Observer process (i.e. the current process) to register/subscribe itself for a certain Subject (and optionally Aspect). Afterwards, if the subject notifies its observers, this process will be notified by the Process Change Manager.</Description>
      <HelpID>/progguide/functions_prcm/prcm.register</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.unregister</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  prcm.unregister( const string subject  [, string aspect(32)] )</Syntax>
      <Description>Is called by an Observer process (i.e. the current process) to unregister/unsubscribe itself for a certain Subject (and optionally Aspect). Afterwards, this process will no longer be notified by the Process Change Manager if the subject tries to notify its observers.</Description>
      <HelpID>/progguide/functions_prcm/prcm.unregister</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>prcm.get.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long prcm.get.data( )</Syntax>
      <Description>Returns the last data passed by the subject that did a notification.</Description>
      <HelpID>/progguide/functions_prcm/prcm.get.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.pgrp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.pgrp( long process_id )</Syntax>
      <Description>This returns the identification number of the process group to which the specified process belongs. If you specify an unknown process ID, -1 is returned.</Description>
      <HelpID>/progguide/functions_process_groups/get.pgrp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>grab.mwindow</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void grab.mwindow( long mwindow , long process_group )</Syntax>
      <Description>This specifies the process group to which a particular main window must send its events. After calling this function, all events that occur in the main window are sent to the process group. grab.mwindow() is mainly used immediately after creation of a new process group.</Description>
      <HelpID>/progguide/functions_process_groups/grab.mwindow</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>kill.pgrp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  kill.pgrp( long process_id )</Syntax>
      <Description>This ends all processes within the specified process group. All windows and graphical parts of the processes are removed.</Description>
      <HelpID>/progguide/functions_process_groups/kill.pgrp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.pgrp</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.pgrp( long process_id , long process_id , long group_id )</Syntax>
      <Description>This places a specified process in a specified process group. If the process group ID is the same as the process ID, a new process group is created with the specified ID. The specified process becomes the leader of the new group. The parent of the process does not change when you call this function.</Description>
      <HelpID>/progguide/functions_process_groups/set.pgrp</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>act.and.sleep</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long act.and.sleep( string procname(.)  [, string arg1, arg2, ...] )</Syntax>
      <Description>This activates the specified process and places it in the sleeping process queue. It remains there until it is activated by calling the reactivate() function. You can remove the process with the kill() function. The process is automatically removed when the process group to which it belongs is killed.</Description>
      <HelpID>/progguide/functions_processes/act.and.sleep</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>activate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long activate( string procname(.)  [, string arg1, arg2, ...] )</Syntax>
      <Description>This activates the specified process and places it in the running process queue. Execution starts when the bshell schedules CPU time for the process.</Description>
      <HelpID>/progguide/functions_processes/activate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>argc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  argc( )</Syntax>
      <Description>This returns the number of arguments of the current program. You can pass arguments to the program by activating it with the activate(), act.and.sleep(), or wait.and.activate() functions. </Description>
      <HelpID>/progguide/functions_processes/argc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>argv$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string argv$( long num_expr )</Syntax>
      <Description>This returns the specified argument of the program as a string. The program name is stored in ARGV$(0). The last argument is stored in ARGV$( ARGC()-1 ). You can pass arguments to the program by activating it with the activate(), act.and.sleep(), or wait.and.activate() functions. When you pass a string array as an argument, all elements of the array are passed as single arguments.</Description>
      <HelpID>/progguide/functions_processes/argv</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bshell.pid</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long bshell.pid( )</Syntax>
      <Description>This returns the process ID of the current bshell (at operating system level).</Description>
      <HelpID>/progguide/functions_processes/bshell.pid</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>kill</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void kill( long processno )</Syntax>
      <Description>This deletes the specified process from the bshell process queue. If the process is in a running state, it is interrupted.</Description>
      <HelpID>/progguide/functions_processes/kill</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pstat</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long   pstat( long pid , ref string progname , ref long info(PSMAXSIZE) )</Syntax>
      <Description>This returns status information about a specified process.</Description>
      <HelpID>/progguide/functions_processes/pstat</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>reactivate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  reactivate( long processno )</Syntax>
      <Description>This activates the specified sleeping process.</Description>
      <HelpID>/progguide/functions_processes/reactivate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>signal</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void signal( long type , long action )</Syntax>
      <Description>This specifies whether the process in which it is called ignores child process signals or not.</Description>
      <HelpID>/progguide/functions_processes/signal</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sleep</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void sleep( long processno )</Syntax>
      <Description>This suspends execution of the specified process and places it in the sleeping process queue. To suspend execution of the your own process, specify the predefined variable pid in the argument. Use reactivate() to activate a sleeping process. When a child process of a sleeping parent process exits, the parent process wakens automatically. When the last process is put in a sleeping state, the program automatically stops.</Description>
      <HelpID>/progguide/functions_processes/sleep</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>suspend</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  suspend( long msec )</Syntax>
      <Description>This stops execution of the current process for a specified number of milliseconds. You can specify any number of milliseconds in the range 0 to 2147483647 (the maximum value for a long).</Description>
      <HelpID>/progguide/functions_processes/suspend</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>wait.and.activate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long wait.and.activate( string procname(.)  [, long arg1, arg2, ...] )</Syntax>
      <Description>This activates the specified program. The calling program is put in a waiting state. Because the calling program has not ended, it retains all its values. In the called program, the predefined variable background is set to 1. By testing this variable, the program can check whether it is running as a foreground or background process. If required, the functioning of the program can be made dependent on this. When the called program ends, the calling program is fetched from the waiting state and reactivated, starting from the statement immediately following the wait.and.activate() call. Note that this happens only when the two processes belong to the same process group. </Description>
      <HelpID>/progguide/functions_processes/wait.and.activate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>wait</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string wait( ref long process_id , long option )</Syntax>
      <Description>This waits for one or all child processes to exit.</Description>
      <HelpID>/progguide/functions_processes/wait</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.add.data.point</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long chart.add.data.point( long series , (long|string|double) x , (long|double) y )</Syntax>
      <Description>Add a datapoint to the indicated series. The x and y datatypes must correspond with the datatypes set for the indicated axis with the function: chart.set.axis.type().</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.add.data.point</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.add.series</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.add.series( long chart , const string title )</Syntax>
      <Description>Create a new series. A series is the container for a set of data points which belong together and form a chart. For a chart of type CHART_PIE exactly one series must be defined. For then other chart types one or more series can be added.Set the chart title and optionally the sub-title.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.add.series</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.clear.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.clear.data( long chart )</Syntax>
      <Description>Remove all series including its datapoints for the indicated chart. This function is typically used in a callback function before new series and datapoints are added.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.clear.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.set.axis.title</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.set.axis.title( long chart , long axis , const string title )</Syntax>
      <Description>Set the title for the indicated axis.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.set.axis.title</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.set.axis.type</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.set.axis.type( long chart , long axis , long type )</Syntax>
      <Description>Set the data type for the indicated axis. In case the x-axis is of type string, the advised initial chart type is: CHART_BAR, CHART_BAR_HORIZONTAL or CHART_PIE. In case the x-axis has a numeric, date or time type, the advised initial chart type is: CHART_LINE or CHART_AREA.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.set.axis.type</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.set.title</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.set.title( long chart , const string title  [, const string subtitle] )</Syntax>
      <Description>Set the chart title and optionally the sub-title.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.set.title</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.add.button</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.add.button( long dlg , const string btnFunction() , const string btnLabel )</Syntax>
      <Description>Creates a button on the dialog.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.add.button</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.add.chart</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.add.chart( long dlg , long initial.type  [, long allowed.types] )</Syntax>
      <Description>Note that this function only effects the Webtop User Interface. Add a chart to the indicated dialog. Chart data and other attributes must be set using other chart functions. The initial chart type is set with argument initial.type. The user can modify this type when the dialog is shown. Below an illustration of each supported type is given.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.add.chart</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.add.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.add.field( long dlg , const string fldName() , const string fldLabel()  [, long attribute, value,...] )</Syntax>
      <Description>This function creates a new field on the dialog.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.add.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.add.listbox</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.add.listbox( long dlg , const string fldName() , const string fldLabel() , const long no.items , long enum.vals() , string enum.desc(,)  [, string attribute, value,...] )</Syntax>
      <Description>This function creates a dynamic list box (not representing an enum domain) on the dialog. If there is an enum domain, use the function dialog.add.field().</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.add.listbox</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.add.text</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long dialog.add.text( long dlg , string text()  [, long attribute, value, ...] )</Syntax>
      <Description>This function creates static texts on the dialog. Purpose of this text can be for explanation or additional help.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.add.text</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.new</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.new( string dialogName  [, long attribute, value, ...] )</Syntax>
      <Description>Creates a new dialog. dialog.name will be used for the title bar of the new dialog. Possible attributes are:</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.new</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.refresh.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.refresh.field( long dlg , const string fldName() )</Syntax>
      <Description>Refreshes the value of a field. This function can be used in a button function if the value for a field has changed.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.refresh.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dialog.show</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  dialog.show( long dlg  [, long previous_window] )</Syntax>
      <Description>Displays the created dialog and start interaction with the user. This function returns when the user clicks the OK or Cancel button. Created dialogs can be used multiple times.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/dialog.show</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>chart.add.line.series</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  chart.add.line.series( long chart , const string title )</Syntax>
      <Description>Create a new serie of type line (CHART_TYPE_LINE). Only to be used if the chart is of type CHART_TYPE_BAR or CHART_TYPE_BARHORIZONTAL. A series is the container for a set of data points which belong together and form a chart.</Description>
      <HelpID>/progguide/functions_programmable_dialogs/chart.add.line.series</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.progress.indicator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  change.progress.indicator( long perc  [, string message, ...] )</Syntax>
      <Description>This changes the value of the progress indicator.</Description>
      <HelpID>/progguide/functions_progress_indicators/change.progress.indicator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.progress.title</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  change.progress.title( string title )</Syntax>
      <Description>Changes the title of the progress indicator.</Description>
      <HelpID>/progguide/functions_progress_indicators/change.progress.title</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.progress.indicator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  create.progress.indicator( string title  [, long mode] )</Syntax>
      <Description>This creates a progress indicator with the specified title displayed in its title bar. The progress indicator is activated after the first update (using change.progress.indicator). It is removed again using destroy.progress.indicator, or automatically if PROGRESS.NOAUTODESTROY is not specified. Only one progress indicator can be active at the same time. If this function is not successful, then it is not allowed to change or destroy the progress indicator.</Description>
      <HelpID>/progguide/functions_progress_indicators/create.progress.indicator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>destroy.progress.indicator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  destroy.progress.indicator( )</Syntax>
      <Description>Destroys the progress indicator.</Description>
      <HelpID>/progguide/functions_progress_indicators/destroy.progress.indicator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>change.progress.delay</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void change.progress.delay( long delay )</Syntax>
      <Description>Changes the delay time of the progress indicator. The delay time is the time in milliseconds after which the progress indicator will appear to the user. This can be used to prevent flashing progress indicators, in case the number of elements to process is low, (i.e. a progress indicator that starts and stops within one or two seconds). By setting the delay time this flashing can be prevented.</Description>
      <HelpID>/progguide/functions_progress_indicators/change.progress.delay</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>random</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long random( )</Syntax>
      <Description>This function uses a system-independent random number generator. On all systems, the generator will generate the same random numbers, provided that the same seed is supplied. Calls to this function return successive random numbers in the range 0 to 32767. The function uses a multiplicative congruential random number generator, with period 232. The default seed is 1. To use a different seed, call srand() before starting the generator.</Description>
      <HelpID>/progguide/functions_random_number_generator/random</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rnd.d</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double  rnd.d( )</Syntax>
      <Description>This function uses a system-independent random number generator. On all systems, the generator will generate the same random numbers, provided that the same seed is supplied. Calls to rnd.d() return successive random numbers in the range 0.0 to 1.0. Use rnd.init() to specify a seed value before starting the random number generator. If you do not do this, the first result of rnd.d() is undefined.</Description>
      <HelpID>/progguide/functions_random_number_generator/rnd.d</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rnd.i</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rnd.i(  [long range] )</Syntax>
      <Description>This function uses a system-independent random number generator. On all systems, the generator will generate the same random numbers, provided that the same seed is supplied. Calls to rnd.i() return successive random numbers in the range 0 to 32767. You can specify a range argument if you want to limit the range further. The function then returns numbers in the range 0 to range-1. Use rnd.init() to specify a seed value before starting the random number generator. If you do not do this, the first result of rnd.i() is undefined.</Description>
      <HelpID>/progguide/functions_random_number_generator/rnd.i</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rnd.init</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rnd.init( long seed )</Syntax>
      <Description>rnd.d() and rnd.I() use a system-independent random number generator to generate random numbers. On all systems, the generator will generate the same random numbers, provided that the same seed is supplied. rnd.init() resets the random number generator to the starting point specified by the seed argument (the seed can be any long value). If rnd.init() is not called before starting the generator, then the first results of rnd.d() and rnd.i() are undefined.</Description>
      <HelpID>/progguide/functions_random_number_generator/rnd.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>srand</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  srand( long seed )</Syntax>
      <Description>random() generates random numbers using a multiplicative congruential random number generator. The default seed is 1. srand() resets the random number generator to the starting point specified by the seed argument (the seed can be any long value).</Description>
      <HelpID>/progguide/functions_random_number_generator/srand</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>brp.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  brp.close( long brp_id )</Syntax>
      <Description>This stops the report writer for the specified report. brp_id is the report ID returned by brp.open() or brp.open.language() when the report was activated. The report is sorted (if necessary) and sent to the printer spooler. If output from different reports is sent to one spool file, you can manage the opening and closing of the printer spooler in the script by calling spool.open before calling brp.open() and by calling spool.close after closing the last report with brp.close(). By default, the spooler is opened and closed automatically.</Description>
      <HelpID>/progguide/functions_reports/brp.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>brp.open.language</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  brp.open.language( string rep_name(16) , string lang , string device(14) , long mode )</Syntax>
      <Description>This is the same as brp.open() in most respects, except that it includes a language argument. This enables you to specify a language for the report other than the default user language.</Description>
      <HelpID>/progguide/functions_reports/brp.open.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>brp.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  brp.open( string rep_name(16) , string device(14) , long mode )</Syntax>
      <Description>This activates a specified report and opens a specified spooler device (if it is not already open). Several reports can be active simultaneously. In a 4GL script, the name of the current report is stored in the predefined variable spool.report. This variable is available in the on.choice subsection of a choice.print.data section.</Description>
      <HelpID>/progguide/functions_reports/brp.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>brp.ready</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  brp.ready( long brp_id )</Syntax>
      <Description>This signals the report writer that a record is ready to be imported into a particular report. The report writer then prints the record. You call this function after filling the fields of a record that the report writer can process. The fields are specified in the report and must be declared as EXTERN in the program script.</Description>
      <HelpID>/progguide/functions_reports/brp.ready</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>choice.report</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  choice.report( ref string reportname(15) )</Syntax>
      <Description>This returns the name of a report from the session data in the data dictionary. The report is taken from the group defined in the predefined variable reportgrp (default = 1). If there is more than one report in the group, the user is presented with a menu from which to select the required report. The returned name consists of 15 characters, starting with an “r”. The language code is not included in the name. If you call brp.open() with the report name returned by this function, the report is opened with the user language. If you call brp.open.language() with the report name returned by this function, the report is opened with the specified language.</Description>
      <HelpID>/progguide/functions_reports/choice.report</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rprt_close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rprt_close(  [long mess_flag] )</Syntax>
      <Description>This is a short version of brp.close(). It closes the report writer for the current report. You can use the function in a 4GL script in the subsection on.choice of the section choice.print.data. In this section, the predefined variable spool.report is available. This variable stores the name of the current report.</Description>
      <HelpID>/progguide/functions_reports/rprt_close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rprt_open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rprt_open( )</Syntax>
      <Description>This is a short version of brp.open(). It has the same effect as: brp.open( spool.report, spool.device, 1 ) That is, it prints the current report to the default device. The predefined variables spool.report and spool.device store the names of the current report and default device respectively.</Description>
      <HelpID>/progguide/functions_reports/rprt_open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rprt_send</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rprt_send( )</Syntax>
      <Description>This is a short version of brp.ready(). It has the same effect as: brp.ready( spool.report ) That is, it signals the report writer that a record is ready to be imported into the current report. The predefined variable spool.report stores the name of the current report.</Description>
      <HelpID>/progguide/functions_reports/rprt_send</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.font.spec</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  rsc.font.spec( long font_weight , long font_slant , long font_height , long font_points , long font_spacing , long font_width , long font_charwidth )</Syntax>
      <Description>This returns a string that defines a font with the specified characteristics.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.font.spec</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.get</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.get( ref string values() , string package_code(2) , string resource_set(16) , string resource_id(24),... )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_resource_sets/rsc.get</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.boolean</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.boolean( string variable )</Syntax>
      <Description>These convert a specified program variable to the corresponding resource value format (boolean, double, enum, and so on).</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.many</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.double</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.double( string variable )</Syntax>
      <Description>These convert a specified program variable to the corresponding resource value format (boolean, double, enum, and so on).</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.many</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.enum</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.enum( string variable )</Syntax>
      <Description>These convert a specified program variable to the corresponding resource value format (boolean, double, enum, and so on).</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.many</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.long( string variable )</Syntax>
      <Description>These convert a specified program variable to the corresponding resource value format (boolean, double, enum, and so on).</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.many</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.string( string variable )</Syntax>
      <Description>These convert a specified program variable to the corresponding resource value format (boolean, double, enum, and so on).</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.many</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.put</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void rsc.put( string package_code(2) , string resource_set(16) , string resource_id(16), value(40)   [, string resource_id(16), value(40) . . .] )</Syntax>
      <Description>This updates one or more resource values in a specified resource set. You can use the following functions to convert program variables to a resource value format: rsc.boolean(), rsc.double(), rsc.enum(), rsc.long(), and rsc.string().</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.put</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.setboolean</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.setboolean( string variable , string value(40) )</Syntax>
      <Description>These store a resource value of a particular type in a specified program variable.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.setmany</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.setdouble</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.setdouble( string variable , string value(40) )</Syntax>
      <Description>These store a resource value of a particular type in a specified program variable.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.setmany</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.setenum</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.setenum( string variable , string value(40) )</Syntax>
      <Description>These store a resource value of a particular type in a specified program variable.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.setmany</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.setlong</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.setlong( string variable , string value(40) )</Syntax>
      <Description>These store a resource value of a particular type in a specified program variable.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.setmany</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rsc.setstring</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  rsc.setstring( string variable , string value(40) )</Syntax>
      <Description>These store a resource value of a particular type in a specified program variable.</Description>
      <HelpID>/progguide/functions_resource_sets/rsc.setmany</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>domainof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string domainof( string variable )</Syntax>
      <Description>This compile time function returns the name of the domain of the supplied variable.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/domainof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.session.permission</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.session.permission( string session(13) )</Syntax>
      <Description>Retrieves the permission of the session (session) in a bit pattern (see return values). Each of the listed 'return values' represents one bit. Multiple values can be bitwise OR-ed into one pattern and returned by the function. In cases of internal errors in the function, the value SESSION_NO_PERMISSION will be returned.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/get.session.permission</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.audit.hosts</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long rdi.audit.hosts( string table_name(9) , long comp_nr , ref string hosts() )</Syntax>
      <Description>This returns the names of the hosts on which audit information for a particular table is stored.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.audit.hosts</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.column.combined</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.column.combined( string column_name(18) , string child_colums(18, 32) )</Syntax>
      <Description>This returns information about the child columns of a specified column.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.column.combined</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.column</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.column( string column_name(18) , ref string domain_name(14) , ref long offset , ref long size , ref long dept , ref long type , ref long flag , ref string default_value(.) )</Syntax>
      <Description>This returns information about a specified table column.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.column</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.ctoe</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.ctoe( string domain_name(14) , string enum_name )</Syntax>
      <Description>This gets an enum as string and returns the enum-value as long belonging to it in the specified domain.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.ctoe</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.date.input.format$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string rdi.date.input.format$( string date_format(7)  [, ref string display_format()] )</Syntax>
      <Description>This returns the input format defined in the data dictionary for a specified date format. The input format can be any combination of day-in-week (D), week-in-year (W), and year (Y), or any combination of day-in-month (D), month-in-year (M), and year (Y). For example, if the function returns MDY, the input format on a form field must be month, day-in-month, and year (for example, 12311998).</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.date.input.format</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.byte</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.byte( string domain_name(14) , ref long digits )</Syntax>
      <Description>This returns information about a domain of type DB.BYTE.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.byte</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.combined</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.combined( string domain_name(14) , ref string child_domains(14, 32) )</Syntax>
      <Description>This returns information about a domain of type DB.COMBINED.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.combined</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.date( string domain_name(14) , ref long digits )</Syntax>
      <Description>This returns information about a domain of type DB.DATE.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.double</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.double( string domain_name(14) , ref long digits_before , ref long digits_after , ref long divide_factor , ref long round_code )</Syntax>
      <Description>This returns information about a domain of type DB.DOUBLE.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.double</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.enum.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.enum.value( string domain_name , long enum_item , string language , ref string keyword(.) , ref string descr(.) , long value )</Syntax>
      <Description>This returns information about a specified item in an enumerated domain.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.enum.value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.enum</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.enum( string domain_name(14) , ref long no_enum_items )</Syntax>
      <Description>This returns information about a domain of type DB.ENUM.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.enum</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.float</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.float( string domain_name(14) , ref long digits_before , ref long digits_after , ref long divide_factor , ref long round_code )</Syntax>
      <Description>This returns information about a domain of type DB.FLOAT.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.float</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.integer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.integer( string domain_name(14) , ref long digits )</Syntax>
      <Description>This returns information about a domain of type DB.INTEGER.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.integer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.long( string domain_name(14) , ref long digits )</Syntax>
      <Description>This returns information about a domain of type DB.LONG.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.long</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.set.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.set.value( string domain_name(14) , long enum_item , string language , ref string keyword(.) , string descr(.) , ref string value )</Syntax>
      <Description>This returns information about a specified item in a set-type domain.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.set.value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.set</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.set( string domain_name(14) , ref long no_enum_items )</Syntax>
      <Description>This returns information about a domain of type DB.BITSET.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.set</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.string( string domain_name(14) , ref long length , ref long convert )</Syntax>
      <Description>This returns information about a domain of type DB.STRING.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain.text</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain.text( string domain_name(14) , ref long digits )</Syntax>
      <Description>This returns information about a domain of type DB.TEXT.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain.text</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.domain</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.domain( string domain_name(14) , ref string oformat(.) , ref string lechar(.) , ref string ilchar(.) , ref long adjust , ref string errmess(.) , ref long range_expr_id  [, ref long plen]  [, ref string iformat(.)] )</Syntax>
      <Description>This returns information about a specified domain.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.domain</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.etoc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string rdi.etoc$( string domain_name(14) , long enum_value as long )</Syntax>
      <Description>This gets an enum-value as long and returns a string representing it in the specified domain.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.etoc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.first.day.of.week</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.first.day.of.week( )</Syntax>
      <Description>This function returns the first day of the week as defined for the company of the user. The returned number is relative to Sunday (=1). So, for example, if the function returns 2, this indicates that Monday is the user's first day of the week.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.first.day.of.week</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.format.digits</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.format.digits( string format() , ref long digits.before , ref long digits.after  [, ref string display.format()] )</Syntax>
      <Description>This returns information about  a specified format.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.format.digits</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.index</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.index( string table_name(9) , long index_no , ref long parts(32, 3) , ref boolean duplicate , ref boolean active )</Syntax>
      <Description>This returns information about  a specified index.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.index</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.reference</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.reference( string column_name(18) , ref string ref_column(18) , ref long ref_mode , ref string ref_mess()  [, ref boolean check_by_db]  [, ref long ref_update_mode]  [, ref long ref_delete_mode] )</Syntax>
      <Description>If a database column references a column in another table, use this function to retrieve information about the referenced column.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.reference</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.table.column</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.table.column( string table_name(9) , long column_number , ref string column_name , ref string domain_name(14) , ref long offset , ref long size , ref long dept , ref long type , ref long flag , ref long default_value  [, long flag_filter] )</Syntax>
      <Description>This returns information about a specified column which is identified by the table name and the column number. Note that the first columns in the table are reserved for the following columns: Refcntd, Refcntu, _compnr, _dlock, and _index&lt;number&gt; (one column for each index).</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.table.column</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.table( string table_name(9) , ref long no_keys , ref long no_columns , ref long int_length , ref long real_length  [, ref long no_cdf] )</Syntax>
      <Description>This returns information about a specified table.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.bobject.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.bobject.desc( string b_object(10) , ref string desc() mb )</Syntax>
      <Description>This retrieves the description of a specified business object (b_object). It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.bobject.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.chart.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.chart.desc( string chart  [, ref string desc() mb] )</Syntax>
      <Description>This retrieves the name of the specified chart (chart). It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.chart.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.comp.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.comp.desc(  [ref string desc() mb] )</Syntax>
      <Description>This retrieves the name of the current company. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.comp.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.company</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.company( long company , ref string comp_desc() mb , ref string deflt_curr() , ref long first_weekday )</Syntax>
      <Description>This returns information about a specified company.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.company</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.currency</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.currency( string cur(3) , ref string cur_desc() mb , ref string thous_sign , ref string dec_sign , ref string symbol() )</Syntax>
      <Description>This returns information about a specified currency.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.currency</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.device</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.device( string device(9) , ref string desc() mb , ref long device_type )</Syntax>
      <Description>This returns information about a specified device.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.device</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.field.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.field.desc( string field(17) , ref string desc() mb )</Syntax>
      <Description>This retrieves information about a specified table field. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.field.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.index.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.index.desc( string tabl(8) , long indexnr  [, ref string desc() mb] )</Syntax>
      <Description>This returns information about  a specified table index. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.index.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.is.domain.separated</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.is.domain.separated( const string a_domain()  [, ref long numberOfSeparators]  [, ref string separatorCharacter()] )</Syntax>
      <Description>Returns whether or not a segmented domain should be printed with separators</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.is.domain.separated</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.label.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.label.desc( string label_code(19) , domain ttadv.cont label_context , ref string desc )</Syntax>
      <Description>This returns information of the specified label. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.label.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.langdesc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.langdesc( string language , ref string desc() mb )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.langdesc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.language</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.language( string lang , ref string desc() mb , ref string dec_sign , ref string thous_sign , ref string date_sep , ref string time_sep )</Syntax>
      <Description>This returns information about a specified language.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.library</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.library( string library.code , ref string library.desc() mb )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.library</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.menu.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string tt.menu.desc( string menu(13) , string par_menu  [, ref string desc() mb] )</Syntax>
      <Description>This returns information about a specified menu. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.menu.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.menu.present</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.menu.present( string menu(13) , string par_menu )</Syntax>
      <Description>This checks if the specified menu of the current package is present in the runtime dictionary.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.menu.present</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.report.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.report.desc(  [ref string desc() mb] , string label_code(19) )</Syntax>
      <Description>This retrieves the description (in the user's current language) of a specified report (reprt). It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.) The report code has the following format  (it must be prefixed by an "r"): "r" &amp; package-code &amp; module-code &amp; report-code</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.report.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.reportgroup.exists</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.reportgroup.exists( string session(13) , long report_group )</Syntax>
      <Description>This checks if a specified report group (report_group) is present in the definition of the specified session (session). When more than one report is linked to a session, the reports may be grouped. Report groups are useful when specific reports must be used in specific situations. The current report group is defined in the predefined variable reportgrp (the default report group is 1).</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.reportgroup.exists</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.session.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.session.desc( string session(13)  [, ref string desc() mb]  [, string language] )</Syntax>
      <Description>This retrieves the description of a specified session (session). It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.) Optional the language code for the description can be specified. Default the description will be retrieved in the user's current language</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.session.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.session.present</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  tt.session.present( string session(13) )</Syntax>
      <Description>This checks if the specified session is present in the runtime dictionary.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.session.present</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.short.field.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.short.field.desc( string field(17) , long length , ref string desc() mb )</Syntax>
      <Description>This returns the description (in the user's current language) of a specified table field. It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.short.field.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.table.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.table.desc( string table(8) , ref string desc() mb )</Syntax>
      <Description>This retrieves the description (in the user's current language) of a specified table (table). It is returned, and optionally also stored in the desc argument. (The optional argument is only present for backwards compatibility.)</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.table.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.user</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.user( string user(12) , ref string name() mb )</Syntax>
      <Description>This retrieves the name of the specified user (user) and stores it in the name argument.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.user</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.chm.appl.desc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  tt.chm.appl.desc( string appl(40) , ref string desc() mb )</Syntax>
      <Description>This retrieves the description (in the user's current language) of a specified Chart Manager application.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt_chm.appl.desc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.chm.application</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.chm.application( string appl )</Syntax>
      <Description>This checks if the specified Chart Manager application is present in the runtime dictionary.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt_chm.application</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.chm.chart</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.chm.chart( string appl(40) , string chart_name(16) )</Syntax>
      <Description>This checks if the specified chart is present in the specified Chart Manager application.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt_chm.chart</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.chm.charttype</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tt.chm.charttype( string appl(40) , string chart_type(16) )</Syntax>
      <Description>This checks if the specified chart type is present in the specified Chart Manager application.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt_chm.charttype</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.report.sensitivity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.report.sensitivity( const string reportname )</Syntax>
      <Description>Returns sensitivity of current report if no reportname was specified, otherwise the given reportname is used.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.report.sensitivity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.session.sensitivity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long rdi.session.sensitivity( )</Syntax>
      <Description>Returns sensitivity of current session. The function rdi.session.sensitivity also checks all table fields on a form (if any). The returned sensitivity is the highest sensitivity applicable to a session of table field on a form.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.session.sensitivity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rdi.tablefield.sensitivity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  rdi.tablefield.sensitivity( const string tablefield )</Syntax>
      <Description>Returns sensitivity of the provided table field.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/rdi.tablefield.sensitivity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.label.desc.by.lang</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tt.label.desc.by.lang( string label_code(19) , string language(1)  [, long label_width]  [, long label_height]  [, domain ttadv.cont label_context] )</Syntax>
      <Description>Returns the label description of the specified label in the specified language.</Description>
      <HelpID>/progguide/functions_runtime_dictionary_information/tt.label.desc.by.lang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>qss.search</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long qss.search( long flag , void search , ref void array , ref long def  [, long dept] )</Syntax>
      <Description>This searches a specified array for a particular value, which is referred to as the search key. By default, it reads the array sequentially until it finds the specified value (that is, it performs a linear search). To perform a binary search instead, you must first sort the data, for example with qss.sort() and then call qss.search() with the flag argument set to QSS.SRC.IS.SORTED.</Description>
      <HelpID>/progguide/functions_searching_sorting_data/qss.search</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>qss.sort</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  qss.sort( ref void array , ref long def , long dept )</Syntax>
      <Description>This function performs a fast sort of a specified array. Note that the order in the result array of two elements that compare identical is unpredictable.</Description>
      <HelpID>/progguide/functions_searching_sorting_data/qss.sort</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.extra.toolbar</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long  create.extra.toolbar( string form_command , string gif_file  [, string form_command]  [, string gif_file] )</Syntax>
      <Description>This adds a secondary toolbar to a session.</Description>
      <HelpID>/progguide/functions_secondary_toolbars/create.extra.toolbar</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sha.add.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void sha.add.data( long id , string data.in )</Syntax>
      <Description>Adds one block of data to be hashed. It is not needed to supply all input data at once in one large block. Sha.add.data() may be called several times with relatively small blocks. Internally, the SHA-1 algorithm processes the input in 512 bit blocks, i.e. 64 byte at a time.</Description>
      <HelpID>/progguide/functions_sha/sha.add.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sha.compute.output</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sha.compute.output( long id , ref string data.out )</Syntax>
      <Description>Adds some padding and a bit count to the message, as prescibed in the standard, and computes the resulting message digest. After this, the Secure Hash Algorithm state may be reused for hashing another message, by calling sha.initialize, sha.add.data, and sha.compute.output again.</Description>
      <HelpID>/progguide/functions_sha/sha.compute.output</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sha.create</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sha.create( )</Syntax>
      <Description>Allocates memory to contain the state of the Secure Hash Algorithm.</Description>
      <HelpID>/progguide/functions_sha/sha.create</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sha.destroy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  sha.destroy( long id )</Syntax>
      <Description>Destroys the Secure Hash Algorithm state.</Description>
      <HelpID>/progguide/functions_sha/sha.destroy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sha.initialize</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  sha.initialize( long id )</Syntax>
      <Description>Initializes the state of the Secure Hash Algorithm.</Description>
      <HelpID>/progguide/functions_sha/sha.initialize</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>spool.buf</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  spool.buf( const string buffer , long length )</Syntax>
      <Description>This sends the contents of the buffer argument to the current spooler. The current spooler must be already open. The name of the current spooler is available in the predefined variable spool.id. No new line characters or other separators are sent to the spooler. To include these, you must program them in the buffer yourself. The length argument specifies the length of the send string. If this is 0, the spooler calculates the length of the buffer at runtime.</Description>
      <HelpID>/progguide/functions_spooling/spool.buf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>spool.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  spool.close( )</Syntax>
      <Description>This closes the spooler specified by the predefined variable spool.id. By default spool.id contains the ID of the current spooler. If more than one spooler is currently open, set spool.id to the ID of the required spooler before you call this function. After the spooler is closed, spool.id is set to zero.</Description>
      <HelpID>/progguide/functions_spooling/spool.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>spool.line</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  spool.line( )</Syntax>
      <Description>This sends the contents of the predefined variable spool.pr.line and a newline character to the spooler specified by the predefined variable spool.id. By default spool.id contains the ID of the current spooler. If more than one spooler is currently open, set spool.id to the ID of the required spooler before you call this function. After this function has been executed, spool.pr.line is cleared. Note that this function uses the relevant spooler predefined variables.</Description>
      <HelpID>/progguide/functions_spooling/spool.line</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>spool.open</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  spool.open( string reportname , string device , string mode )</Syntax>
      <Description>This opens a specified spooler device.</Description>
      <HelpID>/progguide/functions_spooling/spool.open</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>clear.query.extend.in.zoom</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  clear.query.extend.in.zoom( )</Syntax>
      <Description>This clears a query extension that was previously defined in the selection.filter section. The 4GL engine automatically clears the extension in the after.zoom section of the session. Use this function to force an earlier removal of the query extension. For example, to clear the query extension before defining an extension for another zoom session.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/clear.query.extend.in.zoom</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.from</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.from( string extension_string  [, long mode] )</Syntax>
      <Description>Use this to construct a query extension for the FROM clause of a database query. Use this function for non-zoom sessions. Use for defining query filters for zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.from</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.select</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.select( string extension_string  [, long mode] )</Syntax>
      <Description>Use this to construct a query extension for the SELECT clause of a database query. Use this function for non-zoom sessions. Use for defining query filters for zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.select</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.where</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.where( string extension_string  [, long mode] )</Syntax>
      <Description>Use this to construct a query extension for the WHERE clause of a database query. Use this function for non-zoom sessions. Use for defining query filters for zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.where</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rebuild.query</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  rebuild.query( )</Syntax>
      <Description>Use this function to rebuild a query. If the query.extend functions are used the default query should be rebuild. This is done automatically after the before.program and the before.open.object.set sections. If these functions are used in other sections (to adjust them dynamically), the 4GLE has to be informed when the query has to be rebuild.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/rebuild.query</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.from.in.zoom</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.from.in.zoom( string extension_string )</Syntax>
      <Description>Use this to construct a query extension for the FROM clause of a database query. Use this function for zoom sessions. Use for defining query filters in non-zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.from.in.zoom</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.select.in.zoom</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.select.in.zoom( string extension_string )</Syntax>
      <Description>Use this to construct a query extension for the SELECT clause of a database query. Use this function for zoom sessions. Use for defining query filters in non-zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.select.in.zoom</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>query.extend.where.in.zoom</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  query.extend.where.in.zoom( string extension_string )</Syntax>
      <Description>Use this to construct a query extension for the WHERE clause of a database query. Use this function for zoom sessions. Use for defining query filters in non-zoom sessions.</Description>
      <HelpID>/progguide/functions_sql_query_extensions/query.extend.where.in.zoom</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>abort</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  abort( )</Syntax>
      <Description>This cancels execution of a program script and returns control to the application. The database is not updated. The function has the same effect in both 3GL and 4GL scripts.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/abort</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>end</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void end( )</Syntax>
      <Description>When used in a 3GL script, this ends the program and returns control to the application. The database is not updated. When used in a 4GL script, the function has the same effect as the end.program standard command. When a 4GL script calls end() or execute(end.program), changes are stored in the database and  the program ends. Before the program ends, any before.choice subsections in a choice.end.program section are executed. The after.program section is also executed, if present.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/end</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>exit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void exit( long exitvalue )</Syntax>
      <Description>When included in a 3GL program that is not activated by a 4GL program, exit() has the same effect as end() and stop() in a 3GL program. When included in a 4GL script, or in a 3GL program that is activated from a 4GL program with zoom.to$(), an exit value is returned to the calling program. The exitvalue argument can be of any type (except an array). It is always converted to a string. If no exit value is specified, an empty string is returned.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/exit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>shell</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long shell( string command , long mode )</Syntax>
      <Description>Deprecated. This function is supported for backward compatibility only. In new applications, use run.prog() and run.baan.prog() instead. This starts the vt200 compatible terminal emulator to execute the command specified in the command argument. The shell (for example, UNIX, VMS, or MPE) process is connected with the bshell by means of a pseudo tty. Running a shell does not block the bshell. You can switch to another window and perform other tasks.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/shell</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>start.session</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>string  start.session( long mode , const string session.code , const string zoomname , const string returnfld )</Syntax>
      <Description>This starts a session from a program script.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/start.session</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>stop</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  stop( )</Syntax>
      <Description>This ends the program. The program immediately exits without updating the database and without executing any further sections. The function has the same effect in both 3GL and 4GL scripts.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/stop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>zoom.to$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  zoom.to$( string process , long zoomcode , string zoomname , string returnfld , long formpos )</Syntax>
      <Description>Use this to zoom to another session or menu.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/zoom.to</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>run.baan.prog</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  run.baan.prog( const string progname , const string arguments , long mode  [, string stdin]  [, string stdout]  [, string stderr] )</Syntax>
      <Description>The function run.baan.prog() runs a BAAN program.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/run.baan.prog</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>run.prog</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  run.prog( const string progname , const string arguments , long mode  [, string stdin]  [, string stdout]  [, string stderr] )</Syntax>
      <Description>The function run.prog() runs an operating system command. It is a system-dependent function. It must not be used in applications that are distributed across different platforms.</Description>
      <HelpID>/progguide/functions_starting_and_stopping_programs/run.prog</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>concat$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string concat$( string separator , void expr ... )</Syntax>
      <Description>This converts one or more expressions to strings and merges the expressions into a single string. You can use string.scan() to split the string again into its individual parts. This function is used mainly by the report processor to save unsorted records in a sequential file for subsequent sorting.</Description>
      <HelpID>/progguide/functions_string_operations/concat</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>isdigit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  isdigit( string str_expr )</Syntax>
      <Description>This function tests whether the supplied string is the textual representation of an integer value.</Description>
      <HelpID>/progguide/functions_string_operations/isdigit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>isspace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  isspace( string str_expr )</Syntax>
      <Description>This tests whether the result of string_expr contains only spaces or is empty.</Description>
      <HelpID>/progguide/functions_string_operations/isspace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>len.in.bytes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  len.in.bytes( string str_expr )</Syntax>
      <Description>This returns the number of bytes in string_expr. In the case of ASCII characters, the number of bytes equals the number of characters. In the case of multibyte characters, each character can consist of one or four bytes.</Description>
      <HelpID>/progguide/functions_string_operations/len.in.bytes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>len</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long len( string str_expr )</Syntax>
      <Description>This returns the number of characters in string_expr. For strings declared as FIXED, the total length of the string is returned. For non-fixed strings, the current length is returned. To retrieve the length of FIXED strings, excluding trailing spaces, use strip$().</Description>
      <HelpID>/progguide/functions_string_operations/len</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>not.fixed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  not.fixed( string string_var )</Syntax>
      <Description>You can fill a string with or without specifying a start position. If you specify a start position, unused positions in the string are filled with spaces. You can prevent the string from being filled out with spaces by calling not.fixed() before filling the string. Note that, when you assign a new value to the string variable, positions after the new value are not changed.</Description>
      <HelpID>/progguide/functions_string_operations/not.fixed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>quoted.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  quoted.string( string expr )</Syntax>
      <Description>quoted.string() assures that the contents of the variable can be used as a string for the query processor. If the string_expr contains a quote or double quote, the query processor will generate an error. This function inserts the necessary escapes for the string.</Description>
      <HelpID>/progguide/functions_string_operations/quoted.string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  str$( long or double number )</Syntax>
      <Description>This function converts an integer or floating point value to its textual representation.</Description>
      <HelpID>/progguide/functions_string_operations/str</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>string.set$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  string.set$( string string_expr , string num_expr )</Syntax>
      <Description>This returns a string that contains string_expr repeated num_expr times. Context Bshell function.</Description>
      <HelpID>/progguide/functions_string_operations/string.set</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>strip$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string strip$( string str )</Syntax>
      <Description>This returns a specified string without trailing spaces. The input string remains unchanged. Note that strip$() returns a reference to its argument, and not a copy of its argument. Therefore strip$(desc) is completely equivalent to desc(1;n), where n is the position of the last non-space character in desc.</Description>
      <HelpID>/progguide/functions_string_operations/strip</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>trim$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  trim$( string str )</Syntax>
      <Description>This returns a specified string without the leading and trailing spaces. The input string remains unchanged.</Description>
      <HelpID>/progguide/functions_string_operations/trim</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tt.align.according.domain</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  tt.align.according.domain( string string_in(.) , string string_out() , ref string domain_name )</Syntax>
      <Description>This aligns a string according to the alignment method of a specified domain.</Description>
      <HelpID>/progguide/functions_string_operations/tt.align.according.domain</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lval</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long lval( string expr )</Syntax>
      <Description>This function converts the supplied textual representation to the represented integer value or to the truncation of the represented floating point value.</Description>
      <HelpID>/progguide/functions_string_operations/lval</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.strip.mode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.strip.mode( long table.id , long mode )</Syntax>
      <Description>set.strip.mode() sets or resets the 'strip-on-assignment' flag for all string fields of the table specified by table_id. The mode argument indicates whether the flag is to be set on or off. 1 indicates set flag on, 0 indicates set flag off. Setting this flag on a symbol a means that assignments to other variables from this value will behave as an assignment from</Description>
      <HelpID>/progguide/functions_string_operations/set.strip.mode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.symbol.strip.mode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.symbol.strip.mode( ref string str , long mode )</Syntax>
      <Description>set.symbol.strip.mode() sets or resets the 'strip-on-assignment' flag for all string fields of the table specified by table_id. The mode argument indicates whether the flag is to be set on or off. 1 indicates set flag on, 0 indicates set flag off. Setting this flag on a symbol a means that assignments to other variables from this value will behave as an assignment from</Description>
      <HelpID>/progguide/functions_string_operations/set.symbol.strip.mode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>val</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double val( string expr )</Syntax>
      <Description>This function converts the supplied textual representation to the represented floating point value or to the floating point value corresponding to the represented integer value.</Description>
      <HelpID>/progguide/functions_string_operations/val</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load.byte</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long load.byte( string record )</Syntax>
      <Description>The load.byte(), load.short(), load.long(), load.float() and load.double() functions treat the supplied string merely as a sequence of bytes, without trying to interpret that sequence of bytes as the encoding of a sequence of characters. Instead, the bytes are interpreted as the encoding of numerical values. The function load.byte returns the numerical value of the first byte of the supplied string. The load.byte() function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/load.byte</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load.double</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double load.double( string record  [, long swap] )</Syntax>
      <Description>The load.byte(), load.short(), load.long(), load.float() and load.double() functions treat the supplied string merely as a sequence of bytes, without trying to interpret that sequence of bytes as the encoding of a sequence of characters. Instead, the bytes are interpreted as the encoding of numerical values. The function load.double returns the numerical value of the first eight bytes of the supplied string, interpreted as the eight-byte encoding of a floating point value. The load.double() function is not machine independent and must be used with care in (for example) network communications.</Description>
      <HelpID>/progguide/functions_string_operations/load.double</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load.float</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double load.float( string record  [, long swap] )</Syntax>
      <Description>The load.byte(), load.short(), load.long(), load.float() and load.double() functions treat the supplied string merely as a sequence of bytes, without trying to interpret that sequence of bytes as the encoding of a sequence of characters. Instead, the bytes are interpreted as the encoding of numerical values. The function load.float returns the numerical value of the first four bytes of the supplied string, interpreted as the four-byte encoding of a floating point value. The load.float() function is not machine independent and must be used with care in (for example) network communications.</Description>
      <HelpID>/progguide/functions_string_operations/load.float</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long load.long( string record  [, long endian] )</Syntax>
      <Description>The load.byte(), load.short(), load.long(), load.float() and load.double() functions treat the supplied string merely as a sequence of bytes, without trying to interpret that sequence of bytes as the encoding of a sequence of characters. Instead, the bytes are interpreted as the encoding of numerical values. The function load.long returns the numerical value of the first four bytes of the supplied string, interpreted as the four-byte encoding of an integer value. The load.long() function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/load.long</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>load.short</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long load.short( string record  [, long endian] )</Syntax>
      <Description>The load.byte(), load.short(), load.long(), load.float() and load.double() functions treat the supplied string merely as a sequence of bytes, without trying to interpret that sequence of bytes as the encoding of a sequence of characters. Instead, the bytes are interpreted as the encoding of numerical values. The function load.short returns the numerical value of the first two bytes of the supplied string, interpreted as the two-byte encoding of an integer value. The load.short() function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/load.short</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.byte</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  store.byte( long number , ref string rec$ )</Syntax>
      <Description>The store.byte(), store.short(), store.long(), store.float() and store.double() functions treat the supplied string merely as a sequence of bytes. The bytes written to the string are not the encoding of certain characters, but the encoding of the numerical value of the first argument of each function. The function store.byte writes a single byte to the supplied string, representing the numerical value of its first argument. This function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/store.byte</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.double</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  store.double( double number , ref string rec$ )</Syntax>
      <Description>The store.byte(), store.short(), store.long(), store.float() and store.double() functions treat the supplied string merely as a sequence of bytes. The bytes written to the string are not the encoding of certain characters, but the encoding of the numerical value of the first argument of each function. The function store.double writes eight bytes to the supplied string, representing the eight-byte encoding of the floating point value of its first argument. The store.double() function is not machine independent and must be used with care in (for example) network communications.</Description>
      <HelpID>/progguide/functions_string_operations/store.double</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.float</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  store.float( double number , ref string rec$ )</Syntax>
      <Description>The store.byte(), store.short(), store.long(), store.float() and store.double() functions treat the supplied string merely as a sequence of bytes. The bytes written to the string are not the encoding of certain characters, but the encoding of the numerical value of the first argument of each function. The function store.float writes four bytes to the supplied string, representing the four-byte encoding of the floating point value of its first argument. The store.float() function is not machine independent and must be used with care in (for example) network communications.</Description>
      <HelpID>/progguide/functions_string_operations/store.float</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.long</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  store.long( long number , ref string rec$ )</Syntax>
      <Description>The store.byte(), store.short(), store.long(), store.float() and store.double() functions treat the supplied string merely as a sequence of bytes. The bytes written to the string are not the encoding of certain characters, but the encoding of the numerical value of the first argument of each function. The function store.long writes four bytes to the supplied string, representing the four-byte encoding of the integer value of its first argument. This function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/store.long</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>store.short</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  store.short( long number , ref string rec$ )</Syntax>
      <Description>The store.byte(), store.short(), store.long(), store.float() and store.double() functions treat the supplied string merely as a sequence of bytes. The bytes written to the string are not the encoding of certain characters, but the encoding of the numerical value of the first argument of each function. The function store.short writes two bytes to the supplied string, representing the two-byte encoding of the integer value of its first argument. This function is machine independent and can be used (for example) in network communications.</Description>
      <HelpID>/progguide/functions_string_operations/store.short</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>pos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long pos( string source , string part  [, long offset] )</Syntax>
      <Description>This returns the start position of a specified substring (part) in a specified string (source). source and part can be either strings or string expressions. pos() starts searching for the substring at the first position in the source string. It returns the start position relative to the beginning of the source string. To start searching at the last position instead, use rpos(). As off TIV Level 1700, pos() can start the search at the specified offset. In this way it is possible to not only find the first occurrence of a substring, but also the next one(s). The returned start position is also in this case relative to the beginning of the source string. See the example below for how to use this optional parameter.</Description>
      <HelpID>/progguide/functions_string_operations/pos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rpos</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long rpos( string source , string part  [, long offset] )</Syntax>
      <Description>This returns the start position of a specified substring (part) in a specified string (source). source and part can be either strings or string expressions. rpos() starts searching for the substring at the last position in the source string, searching backwards. It returns the start position relative to the beginning of the source string. To start searching at the first position instead, use pos(). As off TIV Level 1700, rpos() can start the search at the specified offset. In this way it is possible to not only find the first occurrence of a substring, but also the next one(s). The returned start position is also in this case relative to the beginning of the source string. See the example below for how to use this optional parameter.</Description>
      <HelpID>/progguide/functions_string_operations/rpos</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>shiftc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  shiftc$( string str )</Syntax>
      <Description>This centers the specified string by equaling the number of leading and trailing spaces. If there is an odd number of spaces, the extra space becomes a trailing space. The returned string always has the same length as the input string. See also shiftl$ and shiftr$.</Description>
      <HelpID>/progguide/functions_string_operations/shiftc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>shiftl$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  shiftl$( string str )</Syntax>
      <Description>This function returns the specified string with any leading spaces removed. See also shiftc$ and shiftr$.</Description>
      <HelpID>/progguide/functions_string_operations/shiftl</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>shiftr$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  shiftr$( string str )</Syntax>
      <Description>This function moves the contents of the specified string to the right, if there are trailing spaces. The length of the result is always the same as the length of the input string (this is not necessarily the declaration length). See also shiftl$ and shiftc$.</Description>
      <HelpID>/progguide/functions_string_operations/shiftr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tolower$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  tolower$( string str )</Syntax>
      <Description>This function converts all upper case characters in its argument to lower case. It returns the converted string expression. The input string remains unchanged. To convert all lower case characters to upper case, use toupper$ instead.</Description>
      <HelpID>/progguide/functions_string_operations/tolower</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>toupper$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  toupper$( string str )</Syntax>
      <Description>This function converts all lower case characters in its argument to upper case. It returns the converted string expression. The input string remains unchanged. To convert all upper case characters to lower case, use tolower$ instead.</Description>
      <HelpID>/progguide/functions_string_operations/toupper</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.compare</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long str.compare( const string a$ , const string b$  [, boolean ignorecase] )</Syntax>
      <Description>Compares two strings on equality and returns whether string a$ is greater than, equal to or less than string b$. By default the test is done in a case sensitive way, e.g. "A" is not equal to "a". Optionally the comparison can be done case insensitive. Note that contrary to function cmp.mem(), this function compares the two strings using the length the of the largest string. According to cmp.mem(), "ab" and "abc" are equal, as cmp.mem() tests the two strings using the shortest length. According to str.compare(), "ab" and "abc" are not equal.</Description>
      <HelpID>/progguide/functions_string_operations/str.compare</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.containsMBchar</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean str.containsMBchar( const string string$ )</Syntax>
      <Description>Tests whether the specified string contains at least one multi byte character. It does not matter if the string to search in is declared as a single byte or a multi byte string.</Description>
      <HelpID>/progguide/functions_string_operations/str.containsmbchar</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.endswith</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean str.endswith( const string string$ , const string part$  [, boolean ignorecase] )</Syntax>
      <Description>Determines whether the end of the specified string matches the specified part. Optionally the test can be done case insensitive.</Description>
      <HelpID>/progguide/functions_string_operations/str.endswith</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.equals</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean str.equals( const string a$ , const string b$  [, boolean ignorecase] )</Syntax>
      <Description>Tests two strings on equality. By default the test is done in a case sensitive way, e.g. "A" is not equal to "a". Optionally the test can be done case insensitive. This function is a shorthand for (str.compare(a$, b$) = 0). Note that contrary to function cmp.mem(), this function compares the two strings using the length the of the largest string. According to cmp.mem(), "ab" and "abc" are equal, as cmp.mem() tests the two strings using the shortest length. According to str.equals(), "ab" and "abc" are not equal.</Description>
      <HelpID>/progguide/functions_string_operations/str.equals</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.insert$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string str.insert$( const string string$ , long offset , const string part$ )</Syntax>
      <Description>Returns a copy of a string having a specified part inserted at a specified character position.</Description>
      <HelpID>/progguide/functions_string_operations/str.insert</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.remove$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string str.remove$( const string string$ , long offset , long nchars )</Syntax>
      <Description>Returns a copy of a string having a number of characters deleted, beginning at a specified character position.</Description>
      <HelpID>/progguide/functions_string_operations/str.remove</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.replace$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string str.replace$( const string string$ , const string oldstr$ , const string newstr$ )</Syntax>
      <Description>Returns a (null terminated) copy of string$ that will have all instances of oldstr$ replaced with newstr$. As this function returns a string value that can become larger than the input string, you have to use a variable that is large enough to store the result.</Description>
      <HelpID>/progguide/functions_string_operations/str.replace$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.replace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void str.replace( const string string$ , const string oldstr$ , const string newstr$ , ref string result$ )</Syntax>
      <Description>Returns as an output argument a (null terminated) copy of string$ that will have all instances of oldstr$ replaced with newstr$. The result$ string will be resized as required, which ensures that in result$ all occurrences of oldstr$ have been replaced. In order to be able to resize result$, the variable passed must be declared as a based string. Use len() to know the new number of characters in result$.</Description>
      <HelpID>/progguide/functions_string_operations/str.replace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.sizeof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long str.sizeof( const string string$ )</Syntax>
      <Description>Returns the size of the specified string, i.e. the number of bytes the string can contain.</Description>
      <HelpID>/progguide/functions_string_operations/str.sizeof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.startswith</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean str.startswith( const string string$ , const string part$  [, boolean ignorecase] )</Syntax>
      <Description>Determines whether the beginning of the specified string matches the specified part. Optionally the test can be done case insensitive.</Description>
      <HelpID>/progguide/functions_string_operations/str.startswith</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>str.substring$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string str.substring$( const string string$ , long beginpos  [, long endpos] )</Syntax>
      <Description>Returns a substring from the specified string. The substring starts at the specified begin position. When an end position is specified, the substring extends to the character at position endpos - 1. Note that when using the var(x;y) construction, the y is the size of the substring, but when calling str.substring$(var, x, y), the y is the end position in var. See the example code below to see the difference.</Description>
      <HelpID>/progguide/functions_string_operations/str.substring</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.node</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  create.node( string tree_name , string parent_id , string node_id , string node_desc , long node_class  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This adds a new node to a specified tree. The node_id, together with the parent_id, determine where the new node is located in the tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/create.node</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.tree.button</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  create.tree.button( string tree_name , long button_id , string button_desc  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This adds a button to a specified tree. The client program can link a session or command to this button. An event is sent to the client when the user clicks on the button.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/create.tree.button</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.tree</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long  create.tree( string tree_name , string tree_title )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This starts the Structure Chart Manager for a specified tree. It returns the process ID of the tree. If there is more than one tree with the same name, you can specify the process ID in the other functions in order to identify a particular tree. The process ID is the unique identifier of a tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/create.tree</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>destroy.tree</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  destroy.tree( string tree_name  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This ends the Structure Chart Manager for the specified tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/destroy.tree</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.tree.default</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  get.tree.default( )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. When the client receives a bucket message that cannot be retrieved with get.tree.node.press,  get.tree.node.dpress or get.tree.push.button, call this function to remove the bucket message from the internal stack.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/get.tree.default</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.tree.node.dpress</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  get.tree.node.dpress( ref long event , ref long process_id , ref string node_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to retrieve data from the Structure Chart Manager after an EVTBUCKETMESSAGE-type event, with a MSG.NODE.DPRESS command, has been received.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/get.tree.node.dpress</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.tree.node.press</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  get.tree.node.press( ref long event , ref long process_id , ref string node_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to retrieve data from the Structure Chart Manager after an EVTBUCKETMESSAGE-type event, with a MSG.NODE.PRESS command, has been received.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/get.tree.node.press</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>get.tree.push.button</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  get.tree.push.button( ref long event , ref long process_id , ref string button_id , ref string node_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to retrieve data from the Structure Chart Manager after an EVTBUCKETMESSAGE-type event, with a MSG.PUSH.BUTTON command, has been received.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/get.tree.push.button</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.node.class.color</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.node.class.color( string tree_name , long node_class , long class_color  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. The node class assigned to a node determines the color in which the node is displayed. You use this function to define the color for a specified node class. You use set.node.class() to assign a class to a particular node.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.node.class.color</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.node.class</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.node.class( string tree_name , string node_id , long node_class  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. Use this function to assign a different class to a particular node. The node class determines the color in which a node is displayed.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.node.class</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.tree.background</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.tree.background( string tree_name , long color  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the background color of a specified tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.tree.background</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.tree.font</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.tree.font( string tree_name , long visible_level , long font  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the font used for nodes at a particular level in a specified tree. Use load.font() to load the font that you want to use.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.tree.font</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.tree.foreground</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.tree.foreground( string tree_name , long color  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the foreground color of a specified tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.tree.foreground</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.tree.linewidth</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.tree.linewidth( string tree_name , long visible_level , long linewidth  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the line width (in pixels) used for nodes at a particular level in a specified tree. The default line widths are: level 1      –    4 pixels level 2      –    2 pixels level 3      –    1 pixel level 4      –    1 pixel</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.tree.linewidth</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.tree.name</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.tree.name( string tree_name , string tree_title  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the title of a specified tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/set.tree.name</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>view.tree</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  view.tree( string tree_name , string node_id , long depth  [, long process_id] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes which levels are visible in a specified tree.</Description>
      <HelpID>/progguide/functions_structure_chart_manager/view.tree</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>substitute.session</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long substitute.session( long old.pid , string new.session , long new.pid  [, void ...] )</Syntax>
      <Description>This function overlays (substitutes) one session with another. The old session will be no longer visible and the new session will be placed on the same position with exactly the same dimensions.</Description>
      <HelpID>/progguide/functions_substitute_sessions/substitute.session</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>refresh.parent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  refresh.parent( long occurrence )</Syntax>
      <Description>This refreshes the parent session of the current session. The occurrence parameter determines which ocurrence of the child session must be refreshed in the parent session. If -1 is passed to this function, the parent session will refresh all its occurrences.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/refresh.parent</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.synchronized.dialog</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.synchronized.dialog( string sess_code  [, boolean editable.grid]  [, boolean use.dialog.for.insert] )</Syntax>
      <Description>This defines for the current session the dialog to synchronize with. Both sessions act on the same maintable. When the user double-clicks on an occurrence in the parent session, the synchronized dialog is updated with information from the selected record. The synchronized dialog also automatically opens when the user initiates any of the following actions: insert record, edit record or duplicate record. When a record is saved in the synchronized dialog, the 4GL engine updates the occurrence in the parent window. When the synchronized dialog is opened or updated, the synchronized.reason variable (read-only) is set. This indicates the command that caused the synchronization. The possible values are: ADD.SET, DUPL.OCCUR, MODIFY.SET, and DISPLAY.SET. This variable is available in all sections in the synchronized dialog session.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/set.synchronized.dialog</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>start.synchronized.child.with</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  start.synchronized.child.with( const long cmd )</Syntax>
      <Description>To start a synchronized child with a command other than the default synchronization command, call this function before calling start.synchronized.child(). Although you normally use this function to synchronize sessions that act on different main tables, it is also possible to use it to synchronize sessions that act on the same main table.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/start.synchronized.child.with</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>start.synchronized.child</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  start.synchronized.child( string sess_code  [, string parent.var child.var]  [, long start.mode] )</Syntax>
      <Description>Use this to synchronize two sessions that act on different main tables. The function starts the specified child session when the user chooses a particular form command in the multioccurrence parent session. The primary key of the parent's main table must be a subset of the primary key of the child's main table. Although you normally use this function to synchronize sessions that act on different main tables, it is also possible to use it to synchronize sessions that act on the same main table.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/start.synchronized.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>stop.synchronized.child</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  stop.synchronized.child( long child.id )</Syntax>
      <Description>This ends a child session.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/stop.synchronized.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>synchronize.with.child</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  synchronize.with.child( ref long child.id )</Syntax>
      <Description>This refreshes (that is, resynchronizes) a child session. If the specified child session does not exist, the child.id argument is set to 0 on return.</Description>
      <HelpID>/progguide/functions_synchronized_sessions/synchronize.with.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bse.dir$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  bse.dir$( )</Syntax>
      <Description>This returns a string containing the name of the directory where the Baan Software Environment is installed. The function uses the environment variable BSE to retrieve the information. If this variable is not filled, bse.dir$() returns the string "/usr/bse".</Description>
      <HelpID>/progguide/functions_system_and_user_information/bse.dir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bse.release$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  bse.release$( )</Syntax>
      <Description>This returns a string of 3 characters that contains the release number of BAAN Tools. For example,  "6.2".</Description>
      <HelpID>/progguide/functions_system_and_user_information/bse.release</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bse.tmp.dir$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  bse.tmp.dir$( )</Syntax>
      <Description>This returns a string containing the name of the directory where temporary files can be created by the application. The function uses the environment variable BSE_TMP to retrieve the information. If this environment variable is not filled, bse.tmp.dir$() returns the string "$BSE/tmp". If the environment variable BSE is not filled, the function returns the string "/usr/tmp".</Description>
      <HelpID>/progguide/functions_system_and_user_information/bse.tmp.dir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>current.display</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  current.display( )</Syntax>
      <Description>This returns the identification number of the current display. It is provided to support the use of multiple displays in future versions of the software. Currently it always returns zero (0)</Description>
      <HelpID>/progguide/functions_system_and_user_information/current.display</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.bw.hostname</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.bw.hostname( )</Syntax>
      <Description>This returns the hostname of the bw client (if available)</Description>
      <HelpID>/progguide/functions_system_and_user_information/get.bw.hostname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.bw.ip.address</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  get.bw.ip.address( )</Syntax>
      <Description>This returns the ip-address of the system of the BW or Webtop client (if available)</Description>
      <HelpID>/progguide/functions_system_and_user_information/get.bw.ip.address</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.bw.username</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.bw.username( ref string username )</Syntax>
      <Description>This returns the Windows username of the user that started the BW client</Description>
      <HelpID>/progguide/functions_system_and_user_information/get.bw.username</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.display.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.display.data( ref long server_data(SRVMAXSIZE) )</Syntax>
      <Description>This retrieves information about the display server. It stores the information in the array server_data. The predefined constant SRVMAXSIZE indicates the maximum size of the array. You can retrieve the information using a set of predefined variables: InformationVariableServer type typesrv.type(server_data)             DSNOSERVER             DSBX             DSBA             DSBW Display widthsrv.display.width(server_data)Display heightsrv.display.height(server_data)Display width in millimeterssrv.display.width.mm(server_data)Display height in millimeterssrv.display.height.mm(server_data)Number of colorssrv.display.colors(server_data)Microsoft operating system srv.display.os.type(server_data) DSBW_WIN_311 DSBW_WIN_NT DSBW_WIN_95 NT4</Description>
      <HelpID>/progguide/functions_system_and_user_information/get.display.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.resource$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string get.resource$( string resource_name )</Syntax>
      <Description>This function returns the value associated with the given resource of the current user. Resources are specified in the u&lt;user&gt; file in the '$BSE/lib/user' directory, but also in the files '$BSE/lib/defaults/&lt;logical_name_of_bshell&gt;' and '$BSE/lib/defaults/all'. The logical name of the bshell is the name you specify for the Bshell in BW. A string containing the resource value will be returned. If the resource can't be found, an empty string will be returned (please note that an existing resource may also be empty!).</Description>
      <HelpID>/progguide/functions_system_and_user_information/get.resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>getenv$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  getenv$( string env_var )</Syntax>
      <Description>This returns the value of a specified environment variable of the operating system. It returns an empty string if the variable is not available.</Description>
      <HelpID>/progguide/functions_system_and_user_information/getenv</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>group.exists</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  group.exists( const string groupname )</Syntax>
      <Description>This checks whether a specified group is defined on the system. Whether group names are case-sensitive or case-insensitive is a system-dependent feature.</Description>
      <HelpID>/progguide/functions_system_and_user_information/group.exists</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>hostname$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  hostname$( )</Syntax>
      <Description>This returns the host name of the local machine. If no host name is found, the function returns an empty string. If the host name is incorrect, the user can change it by setting the environment variable BSE_HOSTNAME.</Description>
      <HelpID>/progguide/functions_system_and_user_information/hostname</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.administrator</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  is.administrator( )</Syntax>
      <Description>This checks whether or not the user that is running the bshell has administrator rights on the server that the bshell is running. On UNIX systems, the function returns TRUE if the user has root access to the system. On Windows NT systems, the function returns TRUE if the user belongs to the administrator group.</Description>
      <HelpID>/progguide/functions_system_and_user_information/is.administrator</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ostype</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ostype( )</Syntax>
      <Description>This returns a long value that indicates the operating system environment. The possible values are: OS_WINDOWS_NTWindows/NTOS_WINDOWS_95Windows 95OS_UNIXAll UNIX variantsOS_OS400AS400</Description>
      <HelpID>/progguide/functions_system_and_user_information/ostype</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>setenv</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  setenv( string env_var , string env_value )</Syntax>
      <Description>This sets the value of a specified environment variable of the operating system. It returns non-zero in case of error.</Description>
      <HelpID>/progguide/functions_system_and_user_information/setenv</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>user.exists</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  user.exists( const string username )</Syntax>
      <Description>This checks whether a specified user is defined on the system. Whether user names are case-sensitive or case-insensitive is a system-dependent feature.</Description>
      <HelpID>/progguide/functions_system_and_user_information/user.exists</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>remove.textfields</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  remove.textfields( const string field.name.string  [, const string ...] )</Syntax>
      <Description>The text manager completely ignores the named text field(s) for this session.</Description>
      <HelpID>/progguide/functions_text_fields/remove.textfields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.file.for.textfield</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  set.file.for.textfield( const string field.name.string , string filename )</Syntax>
      <Description>This fills the textbox of a text field with the contents of a specified file present on the server.</Description>
      <HelpID>/progguide/functions_text_fields/set.file.for.textfield</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.buf.to.field</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  text.buf.to.field( string text_field , string buf )</Syntax>
      <Description>This function stores the text of a buffer in the specified multiline text formfield. This is only relevant for multiline text formfields in a non-maintable session. An additional 'display' of this field is needed to see the changes on the form.</Description>
      <HelpID>/progguide/functions_text_fields/text.buf.to.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.copy.between.companies</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.copy.between.companies( string text_field_to , string text_field_from , long source_company , long target_company , string kw1 , string kw2 , string kw3 , string kw4 , string tgroup , string edit_opt )</Syntax>
      <Description>This copies the entire text of a specified text field, for all languages, from one company to another.</Description>
      <HelpID>/progguide/functions_text_fields/text.copy.between.companies</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.copy.language</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.copy.language( long textnr , string lang_from , string lang_to )</Syntax>
      <Description>This copies a specified text from one language to another.</Description>
      <HelpID>/progguide/functions_text_fields/text.copy.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.copy</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.copy( string text_field_to , string text_field_from , string kw1 , string kw2 , string kw3 , string kw4 , string tgroup , string edit_opt )</Syntax>
      <Description>This makes a copy of the entire text of a specified text field, for all languages, and assigns it a new text number.</Description>
      <HelpID>/progguide/functions_text_fields/text.copy</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.defaults</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.defaults( string text_field , ref string tgroup , ref string edit_opt  [, long comp_number] )</Syntax>
      <Description>This retrieves the defaults for a specified text field.</Description>
      <HelpID>/progguide/functions_text_fields/text.defaults</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.delete</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.delete( string text_field , string lang )</Syntax>
      <Description>This deletes a specified text.</Description>
      <HelpID>/progguide/functions_text_fields/text.delete</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.edit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.edit( string text_field , string lang , string kw1 , string kw2 , string kw3 , string kw4 , string tgroup , string edit_opt , string mode )</Syntax>
      <Description>This opens an edit window in which the specified text can be edited. If the text number associated with the specified text (i.e., the value of the field with name text_field) is 0, the text manager prompts the user to confirm whether or not a new text must be created. After editing, the text number is stored in the field with name text_field.</Description>
      <HelpID>/progguide/functions_text_fields/text.edit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.present.in.language</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.present.in.language( long textnr , string lang  [, ref long nr_lines] )</Syntax>
      <Description>This tests whether a specified text is available in a specified language.</Description>
      <HelpID>/progguide/functions_text_fields/text.present.in.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.read( string text_field , string lang , string kw1 , string kw2 , string kw3 , string kw4 , ref string tgroup , ref string edit_opt , string tmp_file , long lock  [, string rtf_file] )</Syntax>
      <Description>This reads a specified text and stores it in a temporary file.</Description>
      <HelpID>/progguide/functions_text_fields/text.read</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.rewrite</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.rewrite( string text_field , string lang , string kw1 , string kw2 , string kw3 , string kw4 , string tgroup , string edit_opt , string tmp_file  [, long bidi]  [, string rtf_file] )</Syntax>
      <Description>This writes text from a specified file to a specified text field. The new text and new text attributes replace the existing text and text attributes.</Description>
      <HelpID>/progguide/functions_text_fields/text.rewrite</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.set.keywords</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  text.set.keywords( string text_field , string keyword1 , string keyword2 , string keyword3 , string keyword4 )</Syntax>
      <Description>This stores keyword(s) to the specified multiline text formfield. When the field can be edited with the textmanager (also), attr.textkw1$, attr.textkw2$, attr.textkw3$, attr.textkw4$ in the on.choice of 4gl-section choice.text.manager. In session "Texts overview" (tttxt1500m000) you can search for texts based on keywords.</Description>
      <HelpID>/progguide/functions_text_fields/text.set.keywords</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.set.language</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean  text.set.language( string text_field , string language , void ... )</Syntax>
      <Description>This function changes the language for multiline textfields that are displayed on the form and are part of the maintable. That language will be used when (one of) the textfields are/is read from the text tables. The language that is set with this function can still be overridden by setting attr.textlang$ in the before.choice section for the text.manager. If this function is called after one of the texts is changed in a multiline text formfield, then the record is saved first (with the text in the current language). After the language is set the text is read from the database in the new language, but not displayed on the form yet. You can use function display(&lt;text_field&gt;) to display the text in the multiline text formfield. Field names and language codes must be provided in pairs.</Description>
      <HelpID>/progguide/functions_text_fields/text.set.language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.to.buf</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.to.buf( string text_field , string lang , long nr_lines , ref string buf(,)  [, long rtf.text] )</Syntax>
      <Description>This stores the text of a specified text field in a two-dimensional string array.</Description>
      <HelpID>/progguide/functions_text_fields/text.to.buf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.window</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.window( string edit_opt , ref long start_column , ref long start_row , ref long number_columns , ref long number_rows )</Syntax>
      <Description>This returns information about a specified window type.</Description>
      <HelpID>/progguide/functions_text_fields/text.window</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.write</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  text.write( string text_field , string lang , string kw1 , string kw2 , string kw3 , string kw4 , string tgroup , string edit_opt , string tmp_file  [, long bidi]  [, string rtf_file] )</Syntax>
      <Description>This adds a new text to the text manager and assigns a new text number to the text.</Description>
      <HelpID>/progguide/functions_text_fields/text.write</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>textfield.to.buf</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  textfield.to.buf( string text_field , string buffer )</Syntax>
      <Description>Reads the text of a multiline text formfield and stores the text into the passed buffer. The passed buffer should be defined as a based string. This is only relevant for multiline text formfields in a non-maintable session.</Description>
      <HelpID>/progguide/functions_text_fields/textfield.to.buf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>textfield.to.database</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  textfield.to.database( string text_field )</Syntax>
      <Description>Gets the text from the text part of the specified field, and writes it into the texttable. If the text does not exist yet in the texttable, a new texttable record is created. This is only relevant for multiline text formfields in a non-maintable session.</Description>
      <HelpID>/progguide/functions_text_fields/textfield.to.database</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>kill.timer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  kill.timer( long timer_id )</Syntax>
      <Description>This ends a specified timer.</Description>
      <HelpID>/progguide/functions_timers/kill.timer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mtime</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  mtime( )</Syntax>
      <Description>This measures the time elapsed since the first mtime() call. The function is common to all processes within the same bshell. That is, when it is called by a process, the result is the number of milliseconds since the function was first called by a process in the same bshell.</Description>
      <HelpID>/progguide/functions_timers/mtime</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.alarm</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.alarm( long msec )</Syntax>
      <Description>This starts a timer that sends a single EVTTIMEREVENT event to the calling process after the number of milliseconds specified in the msec argument. The timer automatically ends after sending the event. The timer also ends automatically when the process ends or when the program explicitly kills it with kill.timer() .</Description>
      <HelpID>/progguide/functions_timers/set.alarm</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>set.timer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  set.timer( long msec )</Syntax>
      <Description>This starts a timer that sends an EVTTIMEREVENT event to the calling process every msec milliseconds. The timer continues to send events until the process ends or until the program explicitly terminates the timer using kill.timer().</Description>
      <HelpID>/progguide/functions_timers/set.timer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>field.is.readonly (UI template)</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean field.is.readonly (UI template)( )</Syntax>
      <Description>You can use this hook in your UI script to define the conditions under which the field should become readonly in the UI. The 4GL engine uses this hook to determine whether the field must be enabled or made readonly.</Description>
      <HelpID>/progguide/functions_ui_template/field.is.readonly</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>form.command.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean form.command.is.allowed( )</Syntax>
      <Description>You can use this hook to define the conditions under which the form command should become enabled in the UI. The 4GL engine will use this hooks to determine whether the form command must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/form.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>standard.command.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean standard.command.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>add.set.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean add.set.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>dupl.occur.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean dupl.occur.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>modify.set.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean modify.set.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>mark.delete.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean mark.delete.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>global.delete.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean global.delete.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>text.manager.is.allowed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean text.manager.is.allowed( )</Syntax>
      <Description>You can use these hooks in your UI script to define the conditions under which the specific standard command should become enabled in the UI. The 4GL engine will use these hooks to determine whether the standard commands must be enabled or disabled.</Description>
      <HelpID>/progguide/functions_ui_template/standard.command.is.allowed</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>change.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  change.object( long object_id , long attribute , void value  [, long size] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the attribute values of the specified object.</Description>
      <HelpID>/progguide/functions_user_interface_objects/change.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>change.sub.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  change.sub.object( long object , long sub_object_id , long attribute , void value , long size )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This changes the attribute values of the specified subobject.</Description>
      <HelpID>/progguide/functions_user_interface_objects/change.sub.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>compress.pixmap</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  compress.pixmap( long colormap , long num_colors , string pixmap() , long width , long height , ref string buffer , ref long buffer_length )</Syntax>
      <Description>This converts a specified colormap and pixmap to a picture in .gif format.</Description>
      <HelpID>/progguide/functions_user_interface_objects/compress.pixmap</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  create.object( long type , long parent_object , long attribute, value, size , void value , long size )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This creates a new object of the specified type.</Description>
      <HelpID>/progguide/functions_user_interface_objects/create.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.sub.object.by.id</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  create.sub.object.by.id( long object , long sub_object_id , long type , long attribute , void value  [, long size] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This creates a new subobject with a specified ID. The subobject is drawn on the parent window. If the parent object is destroyed, its subobjects are also destroyed.</Description>
      <HelpID>/progguide/functions_user_interface_objects/create.sub.object.by.id</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>create.sub.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  create.sub.object( long object , long type , long attribute, value, size , void value , long size )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This creates a new subobject of the specified type. The subobject is drawn on the parent window. If the parent object is destroyed, its subobjects are also destroyed.</Description>
      <HelpID>/progguide/functions_user_interface_objects/create.sub.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>decompress.pixmap</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  decompress.pixmap( string buffer , ref long colormap , ref string pixmap )</Syntax>
      <Description>This converts a picture in .gif format to a colormap and pixmap. The long array returned by the colormap argument can subsequently be used as the DsNcolorTable attribute of a DsCcolormap object. The string array returned by the pixmap argument can subsequently be used as the DsNdata attribute for a DsCpixmap object.</Description>
      <HelpID>/progguide/functions_user_interface_objects/decompress.pixmap</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>destroy.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  destroy.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes the specified object and all its children (if any).</Description>
      <HelpID>/progguide/functions_user_interface_objects/destroy.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>destroy.sub.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  destroy.sub.object( long object , long sub_object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes the specified subobject.</Description>
      <HelpID>/progguide/functions_user_interface_objects/destroy.sub.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.object( long object_id , long attribute , void value , long size )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about a specified object.</Description>
      <HelpID>/progguide/functions_user_interface_objects/get.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.pixmap.info</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.pixmap.info( ref string buffer , ref long num_colors , ref long width , ref long height )</Syntax>
      <Description>This retrieves information about a picture, in .gif format, that has been read with the seq.read() function. It returns the number of colors in the picture and the picture's width and height. When a picture is used in an object, the width and height values are necessary for determining the amount of memory that must be allocated for the picture.</Description>
      <HelpID>/progguide/functions_user_interface_objects/get.pixmap.info</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.sub.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.sub.object( long object , long sub_object_id  [, long attribute]  [, ref void value]  [, ref long size] )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about a specified subobject.</Description>
      <HelpID>/progguide/functions_user_interface_objects/get.sub.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>inherit.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  inherit.object( long process_nr , long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. With this function, a process can inherit an object from its parent process. For example, a zoom process can use a pushbutton that was defined in the parent process.</Description>
      <HelpID>/progguide/functions_user_interface_objects/inherit.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>lower.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  lower.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This moves the specified object to the bottom of the object stack on the workspace.</Description>
      <HelpID>/progguide/functions_user_interface_objects/lower.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>map.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  map.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This makes the specified object visible, without changing the order of the objects on the workspace.</Description>
      <HelpID>/progguide/functions_user_interface_objects/map.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>query.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  query.object( long object_id , long attribute_in , void value_in , long size_iin , long attribute_in , ref void value_out , ref long size_out )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about a specified object, based on specified attribute values. For example, you can query a DsCgwindow object for the ID of the subobject that is located at specified x- and y-coordinates within the gwindow. Or you can query a DsCgrid object for the type of control that a specified column contains.</Description>
      <HelpID>/progguide/functions_user_interface_objects/query.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>query.sub.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  query.sub.object( long object_id , long sub_object_id , long attribute_in, value_in, size_in , void value_in , long size_in , long attribute_in , ref void value_out , ref long size_out )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This retrieves information about a specified subobject, based on specified attribute values. For example, you can query a DsCgpOleSite subobject for data in a specific format.</Description>
      <HelpID>/progguide/functions_user_interface_objects/query.sub.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>raise.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  raise.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This moves the specified object to the top of the object stack on the workspace.</Description>
      <HelpID>/progguide/functions_user_interface_objects/raise.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.focus</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.focus( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This moves the keyboard input focus to the specified object. When an object has input focus, all keyboard input within the object's main window is received by that object, regardless of the position of the cursor. When an object has input focus, it is surrounded by a rectangular highlight.</Description>
      <HelpID>/progguide/functions_user_interface_objects/set.focus</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>set.sensitive</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  set.sensitive( long object_id , long status )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This sets the sensitivity of a specified object.</Description>
      <HelpID>/progguide/functions_user_interface_objects/set.sensitive</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>unmap.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  unmap.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This makes the specified object invisible.</Description>
      <HelpID>/progguide/functions_user_interface_objects/unmap.object</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>unset.focus</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  unset.focus( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This removes keyboard input focus from the specified object.</Description>
      <HelpID>/progguide/functions_user_interface_objects/unset.focus</HelpID>
   </Function>
   <Function Deprecated="yes">
      <Name>update.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  update.object( long object_id )</Syntax>
      <Description>Deprecated. This function is only supported for Baan Windows and its usage is therefore deprecated. This (re)draws the specified object. Some changes made to DsCgwindow and DsCbarMenu objects are stored internally and become visible only after an update.object() call. You must also call this function to make new DsCmwindow and DsCgwindow objects visible.</Description>
      <HelpID>/progguide/functions_user_interface_objects/update.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>uuid.format$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  uuid.format$( string uuid.compact )</Syntax>
      <Description>Computes the standard string representation, e.g. "17293b6c-4d4d-11d6-af08-080009da70ff", of a UUID which is supplied in compact string representation, e.g. "Fyk4JE1NEdaO4AgACdpw/w".</Description>
      <HelpID>/progguide/functions_uuid/uuid.format</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>uuid.generate$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  uuid.generate$( )</Syntax>
      <Description>Generates a UUID and returns its compact string representation, e.g. "Fyk4JE1NEdaO4AgACdpw/w".</Description>
      <HelpID>/progguide/functions_uuid/uuid.generate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>at.base</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long at.base( string basic_variable[,arg...] , string based_variable[,arg...] )</Syntax>
      <Description>Use this function to base one variable (the based variable) on another variable (the basic variable). The two variables then use the same memory area.</Description>
      <HelpID>/progguide/functions_variables_based/at.base1</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>at.base</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long at.base( long process_id , string name[,arg...] , string based_variable[,arg...] )</Syntax>
      <Description>Use this function to base one variable (the based variable) on an external variable in another process (the basic variable). The two variables then use the same memory area.</Description>
      <HelpID>/progguide/functions_variables_based/at.base2</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>changed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean changed( string variable  [, long keep.flag.raised] )</Syntax>
      <Description>This compares the current value of the specified variable with its checkpoint value to determine whether or not the value has changed.</Description>
      <HelpID>/progguide/functions_variables_checking_changes/changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>not.curr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  not.curr( string variable )</Syntax>
      <Description>This switches the current and previous values of the specified variable. This is considered a value change by the checking mechanism. So if you subsequently call changed(), that function will return TRUE.</Description>
      <HelpID>/progguide/functions_variables_checking_changes/not.curr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>off.change.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  off.change.check( string variable )</Syntax>
      <Description>This switches off the checking mechanism for the specified variable. Changes to the variable are no longer monitored by the checking mechanism.</Description>
      <HelpID>/progguide/functions_variables_checking_changes/off.change.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>on.change.check</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  on.change.check( string variable )</Syntax>
      <Description>This starts the checking mechanism by setting a checkpoint for the specified variable. The current value of the variable becomes the checkpoint value.</Description>
      <HelpID>/progguide/functions_variables_checking_changes/on.change.check</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>export</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] export( string var_name , void value )</Syntax>
      <Description>Export assigns the value of the specified variable of the parent process. This parent process is not always identified by the variable parent in case of dynamic index switching. When using dynamic index switching, the parent process is sometimes stopped and restarted. This causes a different parent process, whereas the variable parent is not updated. For all other circumstances, export is equivalent to put.var( parent, "variable", value).</Description>
      <HelpID>/progguide/functions_variables_interprocess_transfer/export</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.indexed.var</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] get.indexed.var( long processno , string variable_name , ref void value , long dim1 [, dim2, dim3, dim4 ] )</Syntax>
      <Description>This retrieves the value of the specified variable. It is the same as get.var() except that it enables retrieval of individual array elements.</Description>
      <HelpID>/progguide/functions_variables_interprocess_transfer/get.indexed.var</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.var</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] get.var( long processno , string variable_name , ref void value )</Syntax>
      <Description>This retrieves the value of the specified variable. The variable can be a single variable of any type or an array.</Description>
      <HelpID>/progguide/functions_variables_interprocess_transfer/get.var</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>import.4gl.var</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void import.4gl.var( string variable_name , ref void value )</Syntax>
      <Description>Imports a 'predefined' 4GL variable. Like number.of.marks which is actually a macro.</Description>
      <HelpID>/progguide/functions_variables_interprocess_transfer/import.4gl.var</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>import</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] import( string variable_name , ref void value )</Syntax>
      <Description>Import retrieves the value of the specified variable of the parent process. This parent process is not always identified by the variable parent in case of dynamic index switching. When using dynamic index switching, the parent process is sometimes killed and restarted. This causes a different parent process, whereas the variable parent is not updated. For all other circumstances, import is equivalent to get.var( parent, "variable", value).</Description>
      <HelpID>/progguide/functions_variables_interprocess_transfer/import</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.indexed.var</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] put.indexed.var( long processno , string variable_name , void expression , long dim1 [, dim2, dim3, dim4 ] )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_variables_interprocess_transfer/put.indexed.var</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.var</Name>
      <ScriptType>all</ScriptType>
      <Syntax>[long] put.var( long processno , string variable_name , void expression )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_variables_interprocess_transfer/put.var</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.arg.type</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.arg.type( long arg_no )</Syntax>
      <Description>This function returns the type of the specified argument.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.arg.type</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.argc</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  get.argc( )</Syntax>
      <Description>This function returns the number of arguments supplied to the currently executing function (i.e. the function in which get.argc() is called). Once you know this number, you can read from and write to particular arguments using the other functions.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.argc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.boolean.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean get.boolean.arg( long arg_no )</Syntax>
      <Description>These functions return the value of the specified argument, converted to the desired type. For get.boolean.arg(), the specified argument value is converted to a boolean. For get.double.arg(), the specified argument value is converted to a double. For get.long.arg(), the specified argument value is converted to a long. For get.string.arg(), the specified argument value is converted to a string.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.boolean.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.double.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double get.double.arg( long arg_no )</Syntax>
      <Description>These functions return the value of the specified argument, converted to the desired type. For get.boolean.arg(), the specified argument value is converted to a boolean. For get.double.arg(), the specified argument value is converted to a double. For get.long.arg(), the specified argument value is converted to a long. For get.string.arg(), the specified argument value is converted to a string.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.double.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.long.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.long.arg( long arg_no )</Syntax>
      <Description>These functions return the value of the specified argument, converted to the desired type. For get.boolean.arg(), the specified argument value is converted to a boolean. For get.double.arg(), the specified argument value is converted to a double. For get.long.arg(), the specified argument value is converted to a long. For get.string.arg(), the specified argument value is converted to a string.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.long.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.string.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string get.string.arg( long arg_no )</Syntax>
      <Description>These functions return the value of the specified argument, converted to the desired type. For get.boolean.arg(), the specified argument value is converted to a boolean. For get.double.arg(), the specified argument value is converted to a double. For get.long.arg(), the specified argument value is converted to a long. For get.string.arg(), the specified argument value is converted to a string.</Description>
      <HelpID>/progguide/functions_varying_arguments/get.string.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.boolean.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long put.boolean.arg( long arg_no , boolean value )</Syntax>
      <Description>These functions assign a value to the specified argument, after conversion to the type of the argument. For put.boolean.arg(), the original value is of type boolean. For put.double.arg(), the original value is of type double. For put.long.arg(), the original value is of type long. For put.string.arg(), the original value is of type string or multibyte string.</Description>
      <HelpID>/progguide/functions_varying_arguments/put.boolean.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.double.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long put.double.arg( long arg_no , double value )</Syntax>
      <Description>These functions assign a value to the specified argument, after conversion to the type of the argument. For put.boolean.arg(), the original value is of type boolean. For put.double.arg(), the original value is of type double. For put.long.arg(), the original value is of type long. For put.string.arg(), the original value is of type string or multibyte string.</Description>
      <HelpID>/progguide/functions_varying_arguments/put.double.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.long.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long put.long.arg( long arg_no , long value )</Syntax>
      <Description>These functions assign a value to the specified argument, after conversion to the type of the argument. For put.boolean.arg(), the original value is of type boolean. For put.double.arg(), the original value is of type double. For put.long.arg(), the original value is of type long. For put.string.arg(), the original value is of type string or multibyte string.</Description>
      <HelpID>/progguide/functions_varying_arguments/put.long.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>put.string.arg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long put.string.arg( long arg_no , string value )</Syntax>
      <Description>These functions assign a value to the specified argument, after conversion to the type of the argument. For put.boolean.arg(), the original value is of type boolean. For put.double.arg(), the original value is of type double. For put.long.arg(), the original value is of type long. For put.string.arg(), the original value is of type string or multibyte string.</Description>
      <HelpID>/progguide/functions_varying_arguments/put.string.arg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlContainsValidCharactersOnly</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlContainsValidCharactersOnly( string inputstring )</Syntax>
      <Description>This function verifies whether the supplied string contains valid characters only. According to [XMLSTD], the following Unicode characters are allowed in an XML document: Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] All other characters are forbidden. There is no possibility to escape them. The forbidden characters are: ASCII control characters in the range [#x0-#x1F], except the allowed characters #x9 (Horizontal Tab), #xA (Line Feed), and #xD (Carriage Return);Unicode surrogate characters in the range [#xD800-#xDFFF];The &lt;not a character&gt; Unicode values #xFFFE and #xFFFF.</Description>
      <HelpID>/progguide/functions_xml/contains_valid_characters_only</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNewNode</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNewNode( string name  [, long type]  [, long parentNode] )</Syntax>
      <Description>Create a new XML node.</Description>
      <HelpID>/progguide/functions_xml/create_a_new_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNewDataElement</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNewDataElement( string name , string data  [, long parentNode] )</Syntax>
      <Description>Create a new XML_ELEMENT node and new XML_DATA node. The XML_DATA node is the first child of the XML_ELEMENT node.</Description>
      <HelpID>/progguide/functions_xml/create_an_element_node_with_data_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>Create context</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long Create context( long mid memory )</Syntax>
      <Description>Create an XML context which is bound to a 3GL/4GL process.</Description>
      <HelpID>/progguide/functions_xml/create_context</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlRead</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlRead( long fp , ref string error  [, long whitespacehandling] )</Syntax>
      <Description>De-serialize an XML object by parsing an XML document and creating an in-memory object tree.</Description>
      <HelpID>/progguide/functions_xml/de_serialize_xml_object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDeleteAttribute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDeleteAttribute( long node , string attribute )</Syntax>
      <Description>Delete an attribute of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/delete_attribute</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>Delete context</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long Delete context( long pContext )</Syntax>
      <Description>Delete an XML context and all XML Object memory allocated on behalf of this context.</Description>
      <HelpID>/progguide/functions_xml/delete_context</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDelete</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDelete( long fromNode  [, long toNode] )</Syntax>
      <Description>Delete a tree or a list of trees. When this tree is a sub-tree of a larger tree, it is unlinked from this larger tree.</Description>
      <HelpID>/progguide/functions_xml/delete_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateAndAdd</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateAndAdd( long destinationNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees and add this list to an existing list after the node referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/duplicate_and_add_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateAndAppend</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateAndAppend( long destinationNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees and append this list to the end of the list referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/duplicate_and_append_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateAndAppendToChilds</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateAndAppendToChilds( long parentNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees and append this list as the last child of the node referred to by parentNode.</Description>
      <HelpID>/progguide/functions_xml/duplicate_and_append_nodes_to_children</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateAndInsert</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateAndInsert( long destinationNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees and insert this list in an existing list before the node referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/duplicate_and_insert_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateAndInsertInChilds</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateAndInsertInChilds( long parentNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees and insert this list as the first child of the node referred to by parentNode.</Description>
      <HelpID>/progguide/functions_xml/duplicate_and_insert_nodes_in_children</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicate( long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees.</Description>
      <HelpID>/progguide/functions_xml/duplicate_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindFirst</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindFirst( string tagName , long fromNode  [, long toNode] )</Syntax>
      <Description>Search in a tree or a list of trees and return the first XML_ELEMENT or XML_DTD, which name is equal to the string tagName.</Description>
      <HelpID>/progguide/functions_xml/find_first_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindFirstMatch</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindFirstMatch( string pattern , long fromNode  [, long toNode] )</Syntax>
      <Description>Search in a tree or a list of trees and return the first XML_ELEMENT or XML_DTD, which matches with the string pattern. The string pattern contains a search path relative to the starting node. The starting node is the list of nodes indicated by fromNode to toNode.</Description>
      <HelpID>/progguide/functions_xml/find_first_node_using_a_match_pattern</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindNodes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindNodes( long node , string criteria , long maxFound  [, ref long numFound] )</Syntax>
      <Description>Search in a tree starting at node and create a new tree containing references to all occurrences of XML_ELEMENT or XML_DTD nodes, which name matches with the string criteria. Searching stops when maxFound number of Nodes is found. When maxFound has value 0, searching stops when the complete tree has been traversed. The tree is traversed in the order as shown in Depth first Tree traversal order figure. On return, the optional argument numFound contains the number of matching nodes which have been found.</Description>
      <HelpID>/progguide/functions_xml/find_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindMatch</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindMatch( string pattern , long fromNode  [, long toNode] )</Syntax>
      <Description>Search in a tree or a list of trees and create a new tree containing references to all occurrences of XML_ELEMENT or XML_DTD nodes, which match with the pattern. The pattern contains a search path relative to the starting node. The starting node is the list of nodes indicated by fromNode to toNode.</Description>
      <HelpID>/progguide/functions_xml/find_nodes_using_a_match_pattern</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindSetOfSiblingNodes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindSetOfSiblingNodes( long node , string criteria , long maxFound  [, ref long numFound] )</Syntax>
      <Description>Traverse the tree starting at node and return all occurrences of XML_ELEMENT or XML_DTD nodes which name matches with the string criteria. Searching will stop when maxFound number of Nodes have been found. When maxFound has value 0, searching will stop when the complete tree has been traversed. The tree is traversed in the breadth first order as shown in the Breadth first Tree traversal order figure. On return, the optional argument numFound contains the number of matching nodes, which have been found.</Description>
      <HelpID>/progguide/functions_xml/find_set_of_sibling_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeLength( long node , string attributeName )</Syntax>
      <Description>Get the length of an attribute. This function may be used to determine the required size of the data argument supplied to xmlGetAttribute().</Description>
      <HelpID>/progguide/functions_xml/get_attribute_length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeName( long node , long attributeNr , ref string attributeName )</Syntax>
      <Description>Get an attribute name of an XML_ELEMENT or XML_DTD node by specifying its position.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_name</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeNameLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeNameLength( long node , int attributeNr )</Syntax>
      <Description>Get the length of an attribute name. This function may be used to determine the required size of the argumentName argument supplied to xmlGetAttributeName().</Description>
      <HelpID>/progguide/functions_xml/get_attribute_name_length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttribute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttribute( long node , string attributeName , ref void data )</Syntax>
      <Description>Get an attribute of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetFirstChild</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetFirstChild( long node )</Syntax>
      <Description>Get the first (most left) child node of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_child_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetDataLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetDataLength( long node )</Syntax>
      <Description>Get the data length of a node. When node is of type XML_DATA or XML_PI, only the length of the data from this node is obtained. When node is of type XML_ELEMENT or XML_DTD, the length of the data from all child XML_DATA and XML_PI nodes is counted. This function may be used to determine the required size of the data argument supplied to xmlGetData().</Description>
      <HelpID>/progguide/functions_xml/get_data_length_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetDataElementLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetDataElementLength( long node , string name )</Syntax>
      <Description>Get the data length of a node. For each child XML_ELEMENT node that has a name equal to name, the length of the data contained in XML_DATA child nodes is counted. This function may be used to determine the required size of the data argument supplied to xmlGetDataElement().</Description>
      <HelpID>/progguide/functions_xml/get_data_length_of_all_elements</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetData</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetData( long node , ref string data )</Syntax>
      <Description>Get the data of a node. When node is of type XML_DATA or XML_PI, only the data from this node is obtained. When node is of type XML_ELEMENT or XML_DTD, the data from all child XML_DATA and XML_PI nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetDataElement</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetDataElement( long node , string name , ref string data )</Syntax>
      <Description>For each child XML_ELEMENT node that has a name equal to name, get the data contained in XML_DATA child nodes. The data from all matching nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_all_elements</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNameLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNameLength( long node )</Syntax>
      <Description>Get the length of a node name. This function may be used to determine the required size of the name argument supplied to xmlGetName().</Description>
      <HelpID>/progguide/functions_xml/get_name_length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetName( long node , ref string name )</Syntax>
      <Description>Get the name of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_name_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetType</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetType( long node )</Syntax>
      <Description>Get the type of a node.</Description>
      <HelpID>/progguide/functions_xml/get_node_type</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNumAttributes</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNumAttributes( long node )</Syntax>
      <Description>Get the number of attributes of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_number_of_attributes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNumChilds</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNumChilds( long node )</Syntax>
      <Description>Get the number of child nodes of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_number_of_child_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNumSiblings</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNumSiblings( long node )</Syntax>
      <Description>Get the total number of sibling nodes.</Description>
      <HelpID>/progguide/functions_xml/get_number_of_sibling_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetParent</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetParent( long node )</Syntax>
      <Description>Get the parent of a node.</Description>
      <HelpID>/progguide/functions_xml/get_parent_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetStringLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetStringLength( long fromNode  [, long toNode] )</Syntax>
      <Description>Get the length of the serialized form of an XML Object. This functions may be used to determine the required size of the argument supplied to xmlWriteToString().</Description>
      <HelpID>/progguide/functions_xml/get_serialize_length</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetLeftSibling</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetLeftSibling( long node )</Syntax>
      <Description>Get the left sibling node of a node.</Description>
      <HelpID>/progguide/functions_xml/get_sibling_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlRewriteDataElement</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlRewriteDataElement( long node , string name , string data )</Syntax>
      <Description>Find first child XML_ELEMENT node that has a name equal to name. If a matching node is found and this node does not have any child node, a new XML_DATA node with value data is added as a child node. If a matching node is found and this node already has one or more child nodes, these child nodes are all replaced by a single new XML_DATA child node with value data. When no matching node is found, a new child XML_ELEMENT node is appended to the list of child nodes. To this new child node a new XML_DATA node with value data is added.</Description>
      <HelpID>/progguide/functions_xml/rewrite_data_element</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlWrite</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlWrite( long fp , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an open stream. Any string information in the XML document is converted to UTF-8 format. No additional formatting is done. Use xmlWritePretty instead to make the XML data human readable.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlSetAttribute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlSetAttribute( long node , string attributeName , void data )</Syntax>
      <Description>Set an attribute of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/set_attribute</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlSetData</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlSetData( long node , string data )</Syntax>
      <Description>Set the data of an XML_DATA or XML_PI node.</Description>
      <HelpID>/progguide/functions_xml/set_data_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlSetName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlSetName( long node , string name )</Syntax>
      <Description>Set the name of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/set_name_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAdd</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAdd( long destinationNode  [, long fromNode] , long toNode )</Syntax>
      <Description>Unlink a tree or a list of trees and add this list to a new list after the node referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/unlink_and_add_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAppend</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAppend( long destinationNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Unlink a tree or a list of trees and append this list to the end of the list referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/unlink_and_append_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAppendToChilds</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAppendToChilds( long parentNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Unlink a tree or a list of trees and append this list as the last child of the node referred to by parentNode.</Description>
      <HelpID>/progguide/functions_xml/unlink_and_append_nodes_to_children</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlInsert</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlInsert( long destinationNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Unlink a tree or a list of trees and insert this list in a new list before the node referred to by destinationNode.</Description>
      <HelpID>/progguide/functions_xml/unlink_and_insert_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlInsertInChilds</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlInsertInChilds( long parentNode , long fromNode  [, long toNode] )</Syntax>
      <Description>Unlink a tree or a list of trees and insert this list as the first child of the node referred to by parentNode.</Description>
      <HelpID>/progguide/functions_xml/unlink_and_insert_nodes_in_children</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlUnlink</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlUnlink( long fromNode  [, long toNode] )</Syntax>
      <Description>Unlink a tree or a list of trees.</Description>
      <HelpID>/progguide/functions_xml/unlink_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDuplicateToProcess</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDuplicateToProcess( long processId , long fromNode  [, long toNode] )</Syntax>
      <Description>Duplicate a tree or a list of trees into another 3GL-process space.</Description>
      <HelpID>/progguide/functions_xml/xmlduplicatetoprocess</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlReadFromString</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlReadFromString( string  xmlString , ref string error  [, long whitespacehandling] )</Syntax>
      <Description>De-serialize an XML object by parsing an XML document and creating an in-memory object tree.</Description>
      <HelpID>/progguide/functions_xml/de_serialize_xml_object_string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttributeName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttributeName( ref string basedString() , long node , long attributeNr  [, string default.value] )</Syntax>
      <Description>Get an attribute name of an XML_ELEMENT or XML_DTD node by specifying its position.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_name_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttributeName$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttributeName$( long node , long attributeNr  [, string default.value] )</Syntax>
      <Description>Get an attribute name of an XML_ELEMENT or XML_DTD node by specifying its position.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_name_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttribute</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttribute( ref string basedString() , long node , string attributeName , string default.value )</Syntax>
      <Description>Get an attribute of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_value_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttribute$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttribute$( long node , string attributeName  [, ref string default.value] )</Syntax>
      <Description>Get an attribute of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_attribute_value_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocData</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocData( ref string basedString , long node  [,  string default.value] )</Syntax>
      <Description>Get the data of a node. When node is of type XML_DATA or XML_PI, only the data from this node is obtained. When node is of type XML_ELEMENT or XML_DTD, the data from all child XML_DATA and XML_PI nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_a_node_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlData$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlData$( long node  [, ref string default.value] )</Syntax>
      <Description>Get the data of a node. When node is of type XML_DATA or XML_PI, only the data from this node is obtained. When node is of type XML_ELEMENT or XML_DTD, the data from all child XML_DATA and XML_PI nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_a_node_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocDataElement</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocDataElement( ref string basedString() , long node , string name  [, string default.value] )</Syntax>
      <Description>For each child XML_ELEMENT node that has a name equal to name, get the data contained in XML_DATA child nodes. The data from all matching nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_all_elements_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDataElement$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlDataElement$( long node , string name  [, string default.value] )</Syntax>
      <Description>For each child XML_ELEMENT node that has a name equal to name, get the data contained in XML_DATA child nodes. The data from all matching nodes is concatenated.</Description>
      <HelpID>/progguide/functions_xml/get_data_of_all_elements_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocName( ref string basedString , long node  [, string default.value] )</Syntax>
      <Description>Get the name of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_name_of_a_node_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlName$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlName$( long node  [, string default.value] )</Syntax>
      <Description>Get the name of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_name_of_a_node_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocString</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocString( ref string basedString() , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string buffer. Any string information in the XML document is converted to UTF-8 format. No additional formatting is done. Use xmlAllocPrettyString instead to make the XML data human readable.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_alloc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlString$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlString$( long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string. Any string information in the XML document is converted to UTF-8 format. No additional formatting is done. Use xmlPrettyString$ instead to make the XML data human readable.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_return</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlWriteToString</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlWriteToString( ref string buffer , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string. Any string information in the XML document is converted to UTF-8 format. No additional formatting is done. Use xmlWritePrettyToString instead to make the XML data human readable.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlReplaceInvalidCharacters</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlReplaceInvalidCharacters( ref string inputstring , string replacementCharacter(1) )</Syntax>
      <Description>This function replaces any character that is invalid in an XML document by the specified replacement character. The replacement character must be a single-byte ASCII character in the range from #20 (ASCII space) to #7e (ASCII tilde). According to [XMLSTD], the following Unicode characters are allowed in an XML document: Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] All other characters are forbidden. There is no possibility to escape them. The forbidden characters are: ASCII control characters in the range [#x0-#x1F], except the allowed characters #x9 (Horizontal Tab), #xA (Line Feed), and #xD (Carriage Return);Unicode surrogate characters in the range [#xD800-#xDFFF];The &lt;not a character&gt; Unicode values #xFFFE and #xFFFF.</Description>
      <HelpID>/progguide/functions_xml/replace_invalid_characters</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetLastChild</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetLastChild( long node )</Syntax>
      <Description>Get the last (most right) child node of an XML_ELEMENT or XML_DTD node.</Description>
      <HelpID>/progguide/functions_xml/get_last_child_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNumLeftSiblings</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNumLeftSiblings( long node )</Syntax>
      <Description>Get the number of left sibling nodes.</Description>
      <HelpID>/progguide/functions_xml/get_number_of_left_sibling_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNumRightSiblings</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNumRightSiblings( long node )</Syntax>
      <Description>Get the number of right sibling nodes.</Description>
      <HelpID>/progguide/functions_xml/get_number_of_right_sibling_nodes</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetRightSibling</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetRightSibling( long node )</Syntax>
      <Description>Get the right sibling node of a node.</Description>
      <HelpID>/progguide/functions_xml/get_right_sibling_of_a_node</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetPrettyStringLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetPrettyStringLength( long fromNode  [, long toNode] )</Syntax>
      <Description>Get the length of the serialized form of an XML Object. The additional new-lines and tabs for human-readable formatting are taken into account. This function may be used to determine the required size of the argument supplied to xmlWritePrettyToString().</Description>
      <HelpID>/progguide/functions_xml/get_serialize_length_pretty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocPrettyString</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocPrettyString( ref string basedString() , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string buffer. Any string information in the XML document is converted to UTF-8 format. The XML data is formatted by adding new-lines and tabs to make it human readable. Use xmlAllocString instead if the XML data does not need formatting.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_alloc_pretty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlWritePretty</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlWritePretty( long fp , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an open stream. Any string information in the XML document is converted to UTF-8 format. The XML data is formatted by adding new-lines and tabs to make it human readable. Use xmlWrite instead if the XML data does not need formatting.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_pretty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlPrettyString$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlPrettyString$( long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string. Any string information in the XML document is converted to UTF-8 format. The XML data is formatted by adding new-lines and tabs to make it human readable. Use xmlString$ instead if the XML data does not need formatting.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_return_pretty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlWritePrettyToString</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlWritePrettyToString( ref string buffer , long fromNode  [, long toNode] )</Syntax>
      <Description>Serialize an XML object to XML and write resulting XML document to an in-memory string. Any string information in the XML document is converted to UTF-8 format. The XML data is formatted by adding new-lines and tabs to make it human readable. Use xmlWriteToString instead if the XML data does not need formatting.</Description>
      <HelpID>/progguide/functions_xml/serialize_xml_object_string_pretty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttributeNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttributeNs( ref string basedString , long node , void namespaceOrURI , const string attributeName  [, const string default.value] )</Syntax>
      <Description>Get the value of an attribute of the specified node. If an attribute with the specified attributeName and with a namespace whose URI matches the URI specified by namespaceOrURI exists, then its value is returned. The function fails if the node is invalid or the namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocAttributeNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttributePrefix</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttributePrefix( ref string basedString , long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the prefix of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocAttributePrefix</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttributeQualifiedName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttributeQualifiedName( ref string basedString , long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the qualified name of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocAttributeQualifiedName</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocAttributeURI</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocAttributeURI( ref string basedString , long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the URI of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocAttributeURI</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocDataElementNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocDataElementNs( ref string basedString , long node , void namespaceOrURI , const string name  [, const string default.value] )</Syntax>
      <Description>Get the data of all child nodes of type XML_DATA of those child nodes of type XML_ELEMENT of the node whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. All data of the XML_DATA nodes is concatenated into a single string. If an XML_ELEMENT node has multiple XML_DATA nodes, then a single space is used as seperator.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocDataElementNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocPrefix</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocPrefix( ref string basedString , long node  [, const string default.value] )</Syntax>
      <Description>Get the prefix of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocPrefix</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocQualifiedName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocQualifiedName( ref string basedString , long node  [, const string default.value] )</Syntax>
      <Description>Get the qualified name of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocQualifiedName</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAllocURI</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlAllocURI( ref string basedString , long node  [, const string default.value] )</Syntax>
      <Description>Get the URI of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAllocURI</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttributeNs$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttributeNs$( long node , void namespaceOrURI , const string attributeName  [, const string default.value] )</Syntax>
      <Description>Get the value of an attribute of the specified node. If an attribute with the specified attributeName and with a namespace whose URI matches the URI specified by namespaceOrURI exists, then its value is returned. The function fails if the node is invalid or the namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlAttributeNs$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttributePrefix$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttributePrefix$( long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the prefix of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAttributePrefix$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttributeQualifiedName$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttributeQualifiedName$( long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the qualified name of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAttributeQualifiedName$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlAttributeURI$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlAttributeURI$( long node , long attributeNr  [, const string default.value] )</Syntax>
      <Description>Get the URI of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlAttributeURI$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlBuildNamespaceList$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlBuildNamespaceList$( const string prefix , const string URI  [, ... ] )</Syntax>
      <Description>This is a utility function that creates a string of namespace bindings, to be used for the and functions.</Description>
      <HelpID>/progguide/functions_xml/xmlBuildNamespaceList$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDataElementNs$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlDataElementNs$( long node , void namespaceOrURI , const string name  [, const string default.value] )</Syntax>
      <Description>Get the data of all child nodes of type XML_DATA of those child nodes of type XML_ELEMENT of the node whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. All data of the XML_DATA nodes is concatenated into a single string. If an XML_ELEMENT node has multiple XML_DATA nodes, then a single space is used as seperator.</Description>
      <HelpID>/progguide/functions_xml/xmlDataElementNs$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlDeleteAttributeNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlDeleteAttributeNs( long node , void namespaceOrURI , const string name )</Syntax>
      <Description>Delete an attribute with a namespace. If an attribute with the specified name and with a namespace whose URI matches the URI specified by namespaceOrURI exists, then this attribute is deleted. The function fails if the node is invalid or the namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlDeleteAttributeNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindFirstMatchNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindFirstMatchNs( string pattern , const string namespaceList , long fromNode  [, long toNode] )</Syntax>
      <Description>Search in a tree or a list of trees and return the first XML_ELEMENT or XML_DTD, which matches with the string pattern. The string pattern contains a search path relative to the starting node. The starting node is the list of nodes indicated by fromNode to toNode.</Description>
      <HelpID>/progguide/functions_xml/xmlFindFirstMatchNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindFirstNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindFirstNs( void namespaceOrURI , const string name , long fromNode  [, long toNode] )</Syntax>
      <Description>In an XML tree, or a list of XML trees, find the first XML node of type XML_ELEMENT or XML_DTD, whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. This is a depth first search.</Description>
      <HelpID>/progguide/functions_xml/xmlFindFirstNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindMatchNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindMatchNs( string pattern , const string namespaceList , long fromNode  [, long toNode] )</Syntax>
      <Description>Search in a tree or a list of trees and create a new tree containing references to all occurrences of XML_ELEMENT or XML_DTD nodes, which match with the pattern. The pattern contains a search path relative to the starting node. The starting node is the list of nodes indicated by fromNode to toNode.</Description>
      <HelpID>/progguide/functions_xml/xmlFindMatchNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindNamespace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindNamespace( long node , const string URI )</Syntax>
      <Description>Find the namespace with the specified URI. This function searches the specified XML node and all parent nodes. If successful, this function returns a handle to the namespace as created by the xmlNewNamespace() function. The handle can be used in for example the xmlNewNodeNs() function.</Description>
      <HelpID>/progguide/functions_xml/xmlFindNamespace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFindNodesNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFindNodesNs( long node , void namespaceOrURI , const string name , long maxFound  [, ref long numFound] )</Syntax>
      <Description>In an XML tree, find all XML nodes of type XML_ELEMENT or XML_DTD, whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. This is a depth first search.</Description>
      <HelpID>/progguide/functions_xml/xmlFindNodesNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlFirstNamespaceDecl</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlFirstNamespaceDecl( long node )</Syntax>
      <Description>Get the first namespace declaration from an XML node.</Description>
      <HelpID>/progguide/functions_xml/xmlFirstNamespaceDecl</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeLengthNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeLengthNs( long node , void namespaceOrURI , const string attributeName )</Syntax>
      <Description>Get the length of the value of an attribute of the specified node. If an attribute with the specified attributeName and with a namespace whose URI matches the URI specified by namespaceOrURI exists, then the length of its value is returned. The function fails if the node is invalid or the namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeLengthNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeNs( long node , void namespaceOrURI , const string attributeName , ref void value )</Syntax>
      <Description>Get the value of an attribute of the specified node. If an attribute with the specified attributeName and with a namespace whose URI matches the URI specified by namespaceOrURI exists, then its value is returned. The function fails if the node is invalid or the namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributePrefix</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributePrefix( long node , long attributeNr , ref string prefix )</Syntax>
      <Description>Get the prefix of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributePrefix</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributePrefixLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributePrefixLength( long node , long attributeNr )</Syntax>
      <Description>Get the length of the prefix of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributePrefixLength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeQualifiedName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeQualifiedName( long node , long attributeNr , ref string name )</Syntax>
      <Description>Get the qualified name of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeQualifiedName</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeQualifiedNameLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeQualifiedNameLength( long node , long attributeNr )</Syntax>
      <Description>Get the length of the qualified name of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeQualifiedNameLength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeURI</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeURI( long node , long attributeNr , ref string URI )</Syntax>
      <Description>Get the URI of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeURI</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetAttributeURILength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetAttributeURILength( long node , long attributeNr )</Syntax>
      <Description>Get the length of the URI of an attribute of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetAttributeURILength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetDataElementLengthNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetDataElementLengthNs( long node , void namespaceOrURI , const string name )</Syntax>
      <Description>Get the length of the data of all child nodes of type XML_DATA of those child nodes of type XML_ELEMENT of the node whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. All data of the XML_DATA nodes is concatenated into a single string. If an XML_ELEMENT node has multiple XML_DATA nodes, then a single space is used as seperator.</Description>
      <HelpID>/progguide/functions_xml/xmlGetDataElementLengthNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetDataElementNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetDataElementNs( long node , void namespaceOrURI , const string name , ref string data )</Syntax>
      <Description>Get the data of all child nodes of type XML_DATA of those child nodes of type XML_ELEMENT of the node whose local name matches the specified name and whose URI matches the URI specified by namespaceOrURI. All data of the XML_DATA nodes is concatenated into a single string. If an XML_ELEMENT node has multiple XML_DATA nodes, then a single space is used as seperator.</Description>
      <HelpID>/progguide/functions_xml/xmlGetDataElementNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetNamespace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetNamespace( long node )</Syntax>
      <Description>Get the namespace of an XML node. This function returns a reference to the namespace as created by the xmlNewNamespace() function. The reference can be used in for example the xmlNewNodeNs() function.</Description>
      <HelpID>/progguide/functions_xml/xmlGetNamespace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetPrefix</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetPrefix( long node , ref string prefix )</Syntax>
      <Description>Get the prefix of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetPrefix</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetPrefixLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetPrefixLength( long node )</Syntax>
      <Description>Get the length of the prefix of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetPrefixLength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetQualifiedName</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetQualifiedName( long node , ref string name )</Syntax>
      <Description>Get the qualified name of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetQualifiedName</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetQualifiedNameLength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetQualifiedNameLength( long node )</Syntax>
      <Description>Get the length of the qualified name of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetQualifiedNameLength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetURI</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetURI( long node , ref string URI )</Syntax>
      <Description>Get the URI of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetURI</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlGetURILength</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlGetURILength( long node )</Syntax>
      <Description>Get the length of the URI of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlGetURILength</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNamespacePrefix$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlNamespacePrefix$( long namespace )</Syntax>
      <Description>Get the prefix of the specified namespace.</Description>
      <HelpID>/progguide/functions_xml/xmlNamespacePrefix$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNamespaceURI$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlNamespaceURI$( long namespace )</Syntax>
      <Description>Get the URI of the specified namespace.</Description>
      <HelpID>/progguide/functions_xml/xmlNamespaceURI$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNewDataElementNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNewDataElementNs( long namespace , const string name , void data  [, long parentNode] )</Syntax>
      <Description>Create a new XML node of type XML_ELEMENT with local name as specified by name and in the namespace as specified by namespace. A new XML node of type XML_DATA is created as the first child of the newly created XML_ELEMENT node, with data as specified by data. The function fails if namespace is invalid or parentNode is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlNewDataElementNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNewNamespace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNewNamespace( long node , const string prefix , const string URI )</Syntax>
      <Description>Create a new namespace with the specified prefix and URI. The specified node becomes the carrier of the namespace, but the node itself is not yet in the namespace. Various restrictions apply to the specified prefix and the URI. For example, when the prefix equals "xml", then the URI must equal "http://www.w3.org/XML/1998/namespace". For this and other restrictions, see Declaring Namespaces.</Description>
      <HelpID>/progguide/functions_xml/xmlNewNamespace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNewNodeNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNewNodeNs( long namespace , const string name  [, long type]  [, long parentNode] )</Syntax>
      <Description>Create a new XML node in the specified namespace.</Description>
      <HelpID>/progguide/functions_xml/xmlNewNodeNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlNextNamespaceDecl</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlNextNamespaceDecl( long namespace )</Syntax>
      <Description>Get the next namespace declaration of an XML node.</Description>
      <HelpID>/progguide/functions_xml/xmlNextNamespaceDecl</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlPrefix$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlPrefix$( long node  [, const string default.value] )</Syntax>
      <Description>Get the prefix of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlPrefix$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlQualifiedName$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlQualifiedName$( long node  [, const string default.value] )</Syntax>
      <Description>Get the qualified name of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlQualifiedName$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlReadFromStringNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlReadFromStringNs( string  xmlString , ref string error  [, long whitespacehandling] )</Syntax>
      <Description>De-serialize an XML object by parsing an XML document and creating an in-memory object tree. This function supports XML namespaces, and will create namespace declarations carried by the respective XML nodes, and put XML nodes in their appropriate namespace.</Description>
      <HelpID>/progguide/functions_xml/xmlReadFromStringNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlReadNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlReadNs( long fp , ref string error  [, long whitespacehandling] )</Syntax>
      <Description>De-serialize an XML object by parsing an XML document and creating an in-memory object tree. This function supports XML namespaces, and will create namespace declarations carried by the respective XML nodes, and put XML nodes in their appropriate namespace.</Description>
      <HelpID>/progguide/functions_xml/xmlReadNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlRewriteDataElementNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlRewriteDataElementNs( long node , void namespaceOrURI , const string name , void data )</Syntax>
      <Description>If node has no child node of type XML_ELEMENT whose local name equals name and whose URI equals the URI specified by namespaceOrURI, then a new XML node of type XML_ELEMENT is created, with an XML node of type XML_DATA with the specified data. Otherwise, for each child node of type XML_ELEMENT whose local name equals name and whose URI equals the URI specified by namespaceOrURI do the following: if the child node has no child node of type XML_DATA, then create such a node with the specified data; otherwise, all child nodes of type XML_DATA are replaced by a single child node of type XML_DATA with the specified data. The function fails if node is invalid or namespaceOrURI is invalid.</Description>
      <HelpID>/progguide/functions_xml/xmlRewriteDataElementNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlSetAttributeNs</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlSetAttributeNs( long node , long namespace , const string name , void value )</Syntax>
      <Description>Set the value of an attribute with a namespace. If no attribute with the specified name and with a namespace whose URI matches the URI of the specified namespace exists, then a new attribute with the specified name, namespace and value is created. If the XML node is not of type XML_ELEMENT then the function fails.</Description>
      <HelpID>/progguide/functions_xml/xmlSetAttributeNs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlSetNamespace</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long xmlSetNamespace( long node , long namespace )</Syntax>
      <Description>Set the namespace of an XML node to the specified namespace. The specified node does not become the carrier of the namespace. In other words, the node does not declare the namespace, but it is put in the namespace. If the XML node is not of type XML_ELEMENT then the function fails.</Description>
      <HelpID>/progguide/functions_xml/xmlSetNamespace</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>xmlURI$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string xmlURI$( long node  [, const string default.value] )</Syntax>
      <Description>Get the URI of the namespace of the specified node.</Description>
      <HelpID>/progguide/functions_xml/xmlURI$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sec.add.set</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax> sec.add.set( long id )</Syntax>
      <Description>Perform an add.set on a secondary table.</Description>
      <HelpID>/progguide/multitable/sec.add.set</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sec.add.table</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long sec.add.table( const string tablename() )</Syntax>
      <Description>Add the passed table as a secondary table to the current session. This function call is only allowed from the before.program section.</Description>
      <HelpID>/progguide/multitable/sec.add.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sec.get.update.status</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sec.get.update.status( long id , long occ )</Syntax>
      <Description>Retrieve the update status of occurrence occ of secondary table id.</Description>
      <HelpID>/progguide/multitable/sec.get.update.status</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sec.mark.delete</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void  sec.mark.delete( long id )</Syntax>
      <Description>Perform an MARK.DELETE on a secondary table. The record will be deleted on the next save (update.db).</Description>
      <HelpID>/progguide/multitable/sec.mark.delete</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sec.record.exists</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  sec.record.exists( long id , long occ )</Syntax>
      <Description>Check whether a secondary table record exists. When the record is saved but not yet committed, the function returns true.</Description>
      <HelpID>/progguide/multitable/sec.record.exists</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.chdir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.chdir( string path , long connection )</Syntax>
      <Description>Change current working directory on remote system.</Description>
      <HelpID>/progguide/functions_ftp/ftp.chdir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.chmod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.chmod( long mode , string path , long connection )</Syntax>
      <Description>Change access permissions of provided path. The allowed modes are similar to the modes supported for file.chmod.</Description>
      <HelpID>/progguide/functions_ftp/ftp.chmod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.close( long connection )</Syntax>
      <Description>Obsolete function. Please remove any calls to this function from your code. Using this function can crash the bshell if followed by ftp.quit.</Description>
      <HelpID>/progguide/functions_ftp/ftp.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.command</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.command( string command , long connection )</Syntax>
      <Description>Executes command on remote system. Functionality is system dependent. The manual pages of the ftp deamon may provide additional information.</Description>
      <HelpID>/progguide/functions_ftp/ftp.command</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.connect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.connect( string hostname , long connection )</Syntax>
      <Description>Connect to ftp daemon on remote host. On succesful completion, a connection identifier is assigned to the connection argument. Use this identifier in all other ftp functions if such argument is required.</Description>
      <HelpID>/progguide/functions_ftp/ftp.connect</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.del</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.del( string path , long connection )</Syntax>
      <Description>Delete file on remote host.</Description>
      <HelpID>/progguide/functions_ftp/ftp.del</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.dir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.dir( string localfile , string path , long connection )</Syntax>
      <Description>Get contents of remote directory in long format (including date/time stamps) in a local file.</Description>
      <HelpID>/progguide/functions_ftp/ftp.dir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.get</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.get( string localfile , string remotefile , long xfrmode , long connection )</Syntax>
      <Description>Transfer file from remote host to local host. The xfrmode affects how the file is transferred.</Description>
      <HelpID>/progguide/functions_ftp/ftp.get</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.init</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long ftp.init( )</Syntax>
      <Description>Calls OS specific initialization routines. This function need to be called once per bshell. Subsequent calls after first call to ftp.init() has no effect.</Description>
      <HelpID>/progguide/functions_ftp/ftp.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.last.response</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.last.response( long connection , ref string response )</Syntax>
      <Description>Get last response of ftp daemon on remote host. This will be helpful in case of a ftp function returns with an error value.</Description>
      <HelpID>/progguide/functions_ftp/ftp.last.response</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.login</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.login( string user , string password , long connection  [, long options] )</Syntax>
      <Description>Logon to ftp deamon, using a user identity. Support of username 'anonymous' and/or 'ftp' is dependent on how the ftp daemon on remote host is configured.</Description>
      <HelpID>/progguide/functions_ftp/ftp.login</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.mkdir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.mkdir( string path , long connection )</Syntax>
      <Description>Create directory on remote system.</Description>
      <HelpID>/progguide/functions_ftp/ftp.mkdir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.nlst</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.nlst( string localfile , string path , long connection )</Syntax>
      <Description>Get contents of remote directory in short format (file and directory names only) in a local file.</Description>
      <HelpID>/progguide/functions_ftp/ftp.nlst</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.put</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.put( string localfile , string remotefile , long xfrmode , long connection )</Syntax>
      <Description>Transfer file from local host to remote host. The xfrmode affects how the file is transferred.</Description>
      <HelpID>/progguide/functions_ftp/ftp.put</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.quit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.quit( long connection )</Syntax>
      <Description>Close connection to ftp daemon on remote host. Any further communications to the ftp daemon on remote host is not possible after close of a connection.</Description>
      <HelpID>/progguide/functions_ftp/ftp.quit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.rename</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.rename( string source , string destination , long connection )</Syntax>
      <Description>Rename directory on remote host.</Description>
      <HelpID>/progguide/functions_ftp/ftp.rename</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.rmdir</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.rmdir( string path , long connection )</Syntax>
      <Description>Remove an empty directory on remote system.</Description>
      <HelpID>/progguide/functions_ftp/ftp.rmdir</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ftp.site</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ftp.site( string command , long connection )</Syntax>
      <Description>Execute SITE command. Functionality is system dependent. The manual pages of the ftp deamon may provide additional information.</Description>
      <HelpID>/progguide/functions_ftp/ftp.site</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>do.parent.selection</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void do.parent.selection( void function_name  [,  ...] )</Syntax>
      <Description>This function can be used to process records selected in a parent session. For example: in a print session only print the records that are selected in the parent. If updating the records is needed, then this should be done in the function "function_name". The function "function_name" is executed once for each marked record in the parent. At the moment the function is called, the primary keyfields of the marked records will be restored. If the function returns a value not equal to 0, then no more records are selected and do.parent.selection returns.</Description>
      <HelpID>/progguide/functions_selection/do.parent.selection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sel.num.selected</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long  sel.num.selected( )</Syntax>
      <Description>This function returns the number of records that is selected in the session.</Description>
      <HelpID>/progguide/functions_selection/sel.num.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sel.parent.num.selected</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long  sel.parent.num.selected( )</Syntax>
      <Description>This function returns the number of records that is selected in the parent of the current session. Note Note that this function returns the number of records that is selected in the parent session at the moment the function is called. If the selection changes because the parent is not blocked (the child is started modeless), the number is not valid anymore.</Description>
      <HelpID>/progguide/functions_selection/sel.parent.num.selected</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sel.use.parent.selection</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean  sel.use.parent.selection( string parent_table )</Syntax>
      <Description>This function can be used in a print or a processing session to determine whether to user wants to print/process based on a selection range, or based on the selection that is made in the parent. If the user wants to use the selection of the parent, you should use the function do.parent.selection to get the selection. The user can indicate his choice with an optionset. Read below how to create that option set. Because the information is not available, you can not use this function in the before.program section.</Description>
      <HelpID>/progguide/functions_selection/sel.use.parent.selection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sel.add.parent.tables</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean  sel.add.parent.tables( long group_id , string parent_table )</Syntax>
      <Description>In the Dynamic Form Editor you can already indicate the main table of the parent session for which a session can handle the selection. You should specify that table at the "selection range group" in which the user can specify the range if the selection of the parent session is not used. Because you can only specify one table per group, you need to use this function of you want to add one or more extra tables to a group.</Description>
      <HelpID>/progguide/functions_selection/sel.add.parent.tables</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ncrs.is.session.empty</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean  ncrs.is.session.empty( )</Syntax>
      <Description>This function can be used in a print or a processing session in an init.form section. The function can be used to decide whether the functional default command should be triggered. Possible the default command is another one, than the command that actually trigges the wanted functionality. The function tells whether the session has no fields left, because the selection group has been made invisible.</Description>
      <HelpID>/progguide/functions_selection/ncrs.is.session.empty</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.activity.action.performed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.activity.action.performed( const string activity.id )</Syntax>
      <Description>Callback-function for when the activity is double-click upon.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_activity_action_performed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.activity.deleted</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.activity.deleted( const string activity.id )</Syntax>
      <Description>Callback-function for when the activity is about to be deleted in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_activity_deleted</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.activity.moved</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.activity.moved( string activity.id , long start.date , long end.date )</Syntax>
      <Description>Callback-function for when the activity end-date and/or start-date have been changed in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_activity_moved</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.activity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.activity( string parent.activity.id , string activity.id , string activity.name  [, long start.date]  [, long end.date]  [, long completion.percentage] )</Syntax>
      <Description>Adds a child activity to an activity. This will cause the parent activity to be displayed as a summary bar.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_activity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.activity.property</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.activity.property( string property.id , string property.label )</Syntax>
      <Description>Adds a property to an activity. The property will be visualized as a column in the table part of the Gantt view.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_activity_property</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.command</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.command( string command.id , const string command.text )</Syntax>
      <Description>Adds a custom command. This command will appear in the specific menu of the plan chart.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_command</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.constraint</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.constraint( string activity.id.from , string activity.id.to , long constraint.type )</Syntax>
      <Description>Adds a constraint between two activities.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_constraint</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.reservation</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.reservation( string activity.id , string resource.id )</Syntax>
      <Description>Assigns an activity to a resource.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_reservation</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.resource</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.resource( string parent.resource.id , string resource.id , string resource.name  [, long quantity] )</Syntax>
      <Description>Adds a child resource to a resource.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.resource.property</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.resource.property( string property.id , string property.label )</Syntax>
      <Description>Adds a property to a resource. The property will be visualized as a column in the table part of the Schedule view.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_resource_property</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.root.activity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.root.activity( string root.activity.id , string root.activity.name )</Syntax>
      <Description>Call this function only once. The root activity will serve as highest level parent for all other activities. Therefore it will be displayed as summary bar in the Gantt view.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_root_activity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.add.root.resource</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.add.root.resource( string root.resource.id , string root.resource.name )</Syntax>
      <Description>Call this function only once. The root resource will serve as highest level parent for all other resources</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_add_root_resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.clear</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long plcm.clear( )</Syntax>
      <Description>Clears the plan chart in order to build up a new schedule.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_clear</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.command.performed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.command.performed( string command.id , const long activities.context.count , const string activities.context() , const long resources.context.count , string resources.context() )</Syntax>
      <Description>Callback-function for when a "custom' command has been performed in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_command_performed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.constraint.deleted</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.constraint.deleted( const string activity.id.from , const string activity.id.to , const long constraint.type )</Syntax>
      <Description>Callback-function for when the constraint is about to be deleted in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_constraint_deleted</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.create.legend.entry</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.create.legend.entry( string legend.id , long color , string description )</Syntax>
      <Description>Defines a legend entry. This function must be called before the plcm.start() is called. The legend will be visualized in the underneath the plan chart.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_create_legend_entry</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.delete.activity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.delete.activity( string activity.id )</Syntax>
      <Description>Deletes an activity.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_delete_activity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.delete.constraint</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.delete.constraint( string activity.id.from , string activity.id.to , long constraint.type )</Syntax>
      <Description>Deletes a constraint between two activities.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_delete_constraint</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.delete.reservation</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.delete.reservation( string activity.id , string resource.id )</Syntax>
      <Description>Deletes a reservation.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_delete_reservation</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.delete.resource</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.delete.resource( string resource.id )</Syntax>
      <Description>Deletes a resource.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_delete_resource</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.init</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.init( string title , string initial.types  [, long options] )</Syntax>
      <Description>This function must be the first to be called, it initializes the global data structures of the plan chart.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.move.activity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.move.activity( string activity.id , long start.date , long end.date )</Syntax>
      <Description>Sets a new start/end date for an activity</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_move_activity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.reservation.changed</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean plcm.reservation.changed( const string activity.id. , const string old.resource.id , const string new.resource.id )</Syntax>
      <Description>Callback-function for when a reservation is about to change in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_reservation_changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.reservation.deleted</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.reservation.deleted( const string activity.id , const string resource.id )</Syntax>
      <Description>Callback-function for when the reservation is about to be deleted in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_reservation_deleted</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.resource.deleted</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  plcm.resource.deleted( const string resource.id )</Syntax>
      <Description>Callback-function for when the resource is about to be deleted in the UI.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_resource_deleted</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.activity.completion.percentage</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.activity.completion.percentage( string activity.id , long completion.percentage )</Syntax>
      <Description>Change the completion.percentage of an activity.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_activity_completion_percentage</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.activity.end.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long plcm.set.activity.end.date( string activity.id , long end.date )</Syntax>
      <Description>Change the end.date of an activity.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_activity_end_date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.activity.name</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.activity.name( string activity.id , string name )</Syntax>
      <Description>Change the name of an activity.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_activity_name</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.activity.property.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.activity.property.value( string activity.id , string property.id , string property.value )</Syntax>
      <Description>Sets an activity property. The property will be visualized in the table part of the Gantt view.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_activity_property_value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.activity.start.date</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.activity.start.date( string activity.id , long start.date )</Syntax>
      <Description>Change the start.date of an activity.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_activity_start_date</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.legend.for.activity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.legend.for.activity( string activity.id , string legend.id )</Syntax>
      <Description>Lets the complete activity refer to a legend entry. The activity will get the color of the legend. Note that plcm.create.legend.entry() must be called for this legend.id before the plcm.start() has been called.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_legend_for_activity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.legend.for.activity.division</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.legend.for.activity.division( string activity.id , string legend.id , long Start.percentage , long End.percentage )</Syntax>
      <Description>Lets a division of an activity refer to a legend entry. Thedivision will get the color of the legend. Note that plcm.create.legend.entry() must be called for this legend.id before the plcm.start() has been called.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_legend_for_activity_division</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.resource.name</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.resource.name( string resource.id , string name )</Syntax>
      <Description>Change the name of a resource.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_resource_name</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.resource.property.value</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.resource.property.value( string resource.id , string property.id , string property.value )</Syntax>
      <Description>Sets a resource property. The property will be visualized in the table part of the Schedule view.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_resource_property_value</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.set.resource.quantity</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  plcm.set.resource.quantity( string resource.id , long quantity )</Syntax>
      <Description>Change the quantity of a resource.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_set_resource_quantity</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>plcm.start</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long plcm.start( )</Syntax>
      <Description>Activates the plan chart,in other words it takes over control from the application. See also plcm.init() for more information.</Description>
      <HelpID>/progguide/functions_gantt_and_schedule_charts/plcm_start</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.accept</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.accept( long socket )</Syntax>
      <Description>A server process uses this to accept a connection request received on a socket created by sock.listen(). The function returns a valid connected socket on which the server process can send data to and receive data from the client process.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.accept</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.clearerr</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.clearerr( long socket )</Syntax>
      <Description>This resets the error and end-of-file indicators on the specified socket.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.clearerr</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sock.close( long socket  [, long linger.timeout] )</Syntax>
      <Description>This closes a specified socket.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.connect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.connect( string host.name , string service.name , long timeout )</Syntax>
      <Description>A client process uses this to initiate a socket connection with a specified server. If the server accepts the connection request, the function returns a valid connected socket on which the client process can send data to and receive data from the server process. The function does not return until either there is a valid connection, or the connection request fails, or a specified timeout expires.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.connect</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.eof</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.eof( long socket )</Syntax>
      <Description>This checks the end-of-file indicator on the specified socket. Note that the end-of-file indicator lasts until the socket is closed, unless you explicitly clear it by calling sock.clearerr().</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.eof</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.error</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sock.error( long socket )</Syntax>
      <Description>This checks the error indicator on the specified socket to determine whether an error has occurred when reading or writing to the socket. Note that the error indicator lasts until the socket is closed, unless you explicitly clear it by calling sock.clearerr().</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.error</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.flush</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.flush( long socket )</Syntax>
      <Description>You use sock.send() to place data in the send buffer of a connected socket. The data is automatically transferred on the socket when the buffer is full. But you can also call sock.flush() to transfer the data on the socket. It is important to always check the return value of sock.flush() to verify whether or not the data has been sent successfully.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.flush</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.inherit</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.inherit( long socket )</Syntax>
      <Description>A process calls this function in order to take over ownership of a specified socket from another process. The socket is removed from the list of open files for the process that originally owned the socket; it is added to the list of open files for the calling process. The socket is automatically closed when the new owner process terminates. The use of sock.inherit() is required when a server starts a new process to handle a connection returned by sock.accept(). The new process must call sock.inherit() to become the owner of the socket. If it does not, then terminating the server program will close the socket handled by the new process as well.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.inherit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.listen</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.listen( string service.name  [, long options] )</Syntax>
      <Description>A server calls this function to create a listen socket that it can use to receive connection requests from clients. The function binds the new socket to the address specified by INADDR_ANY and the service specified by . It returns a valid listen socket that sock.accept() can access in order to accept connection requests.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.listen</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.recv</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.recv( long socket , ref string data , long num.bytes )</Syntax>
      <Description>Both client and server processes use this function to read data from a specified connected socket. The function returns only when the number of bytes specified by has been received.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.recv</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.send</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  sock.send( long socket , string data , long num.bytes )</Syntax>
      <Description>You use sock.send() to place data in the send buffer of a connected socket. The data is automatically transferred on the socket when the buffer is full. But you can also call sock.flush() to transfer the data on the socket.</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.send</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.daemon.connect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long sock.daemon.connect( )</Syntax>
      <Description>This function can be used from a process that is started with the x call. On success, it returns the socket that can be used to communicate with the activating process by means of the x and x functions. Event handling When event handling is used to capture I/O events, the call to select.event.input() must be called before the sock.start.process.*() and the sock.daemon.connect().</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.daemon.connect</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>sock.start.process</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  sock.start.process( ref string error.code , const string hostname , long protocol , long port , const string remote.bse , const string os.user.name , const string password , const string bse.user.name , const string remote.prog , const string remote.prog.opts , const string remote.obj ,  ... )</Syntax>
      <Description>These functions allow to start a 3GL process in another bshell on the local host within the current BSE using sock.start.process.local() on a different host using the r&lt;user&gt; files using sock.start.process.remote() on a different host using supplied user name and password using sock.start.process() This function comes in three flavors. The following function starts a process on the local host in the current BSE. long sock.start.process.local( ref string error.msg, const string prog, const string prog.opts, const string object, ...) The following function starts a remote process on the specified host, using the connection parameters stored in the $BSE/lib/user/r&lt;user&gt; file. long sock.start.process.remote( ref string error.msg, const string hostname, const string prog, const string prog.opts, const string object, ...) The following function starts a remote process on any host using the specified connection paramaters. long sock.start.process( ref string error.msg, const string hostname, long protocol, long port, const string remote.bse, const string os.user.name, const string password, const string bse.user.name, const string remote.prog, const string remote.prog.opts, const string remote.obj, ...) These functions in combination with x communicate with each other using sockets. Sockets are always used, even on the same host for transparency reasons. Event handling When event handling is used to capture I/O events, the call to select.event.input() must be called before the sock.start.process.*() and the sock.daemon.connect(). Example: string arr(20,5) string err.mesg(1024) long sock arr(1) = "arg1" arr(2) = "" arr(3) = "arg3" arg(4) = "arg4" arg(5) = "arg5" sock = sock.start.process.local( err.mesg, "", | uses bshell "", | no bshell options "oremoteobj" | object to start arg) This starts oremoteobj with the 4 arguments "arg1" "arg3" "arg4" "arg5". In the started process (oremoteobj), argv$(0) will be "oremoteobj", argv$(1) will be "arg1", argv$(2) will be "arg3", argv$(3) will be "arg4" and argv$(4) will be "arg5". The following example will give the same result: sock = sock.start.process.local( err.mesg, "", | uses bshell "", | no bshell options "oremoteobj" | object to start arg(1), arg(3), arg(4), arg(5))</Description>
      <HelpID>/progguide/functions_interprocess_communication_cross_platform/sock.start.process</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bc$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string bc$( long type , long rows , string barcode , long options )</Syntax>
      <Description>Use this to create a barcode of the specified type.</Description>
      <HelpID>/progguide/functions_barcodes/bc</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_get_baselang</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  ml_get_baselang( )</Syntax>
      <Description>Returns the base language of the environment.</Description>
      <HelpID>/progguide/functions_mle/ml_get_baselang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_get_datalang</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  ml_get_datalang( )</Syntax>
      <Description>Returns the current data language of the user.</Description>
      <HelpID>/progguide/functions_mle/ml_get_datalang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_get_datalang_of_softlang</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  ml_get_datalang_of_softlang( const string softlang )</Syntax>
      <Description>Returns the data language of the specified software language.</Description>
      <HelpID>/progguide/functions_mle/ml_get_datalang_of_softlang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_is_active</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  ml_is_active( )</Syntax>
      <Description>Tests whether Multi Language support is active on runtime for the current environment.</Description>
      <HelpID>/progguide/functions_mle/ml_is_active</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_set_datalang</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  ml_set_datalang( const string datalang )</Syntax>
      <Description>Sets a new data language for the user.</Description>
      <HelpID>/progguide/functions_mle/ml_set_datalang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_one_lang()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string ml_one_lang()( const string mlv  [, const string language] )</Syntax>
      <Description>This function retrieves the value in a specific data language from a string variable.</Description>
      <HelpID>/progguide/functions_mle_internal/ml_one_lang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>_ml_get_data_language()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string _ml_get_data_language()( )</Syntax>
      <Description>This function retrieves the current data language of the user.</Description>
      <HelpID>/progguide/functions_mle_internal/_ml_get_data_language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>_ml_set_data_language()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long _ml_set_data_language()( const string language )</Syntax>
      <Description>This function changes the current data language for the user.</Description>
      <HelpID>/progguide/functions_mle_internal/_ml_set_data_language</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_all_langs()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string ml_all_langs()( const string flatmlv , const string language )</Syntax>
      <Description>This function creates an MLV that has the same value for all data languages.</Description>
      <HelpID>/progguide/functions_mle_internal/ml_all_langs</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_check_in_lang()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string ml_check_in_lang()( const string mlv  [, const string language] )</Syntax>
      <Description>This function retrieves the 'check flag' from an MLF for a certain data language. The 'check flag' is set if the base data language changed after the MLV was translated to a non-base data language. The check flag is retrieved for the base data language if the optional argument 'language' is not specified.</Description>
      <HelpID>/progguide/functions_mle_internal/ml_check_in_lang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_lang_of()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string ml_lang_of()( const string mlv  [, const string language] )</Syntax>
      <Description>This function retrieves the language code of the value of string 'mlv' in a certain data language. If the string is an MLV which has no translations the language codes of the value in the various data languages will show a fallback.</Description>
      <HelpID>/progguide/functions_mle_internal/ml_lang_of</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ml_set_one_lang()</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void ml_set_one_lang()( ref string mlvsymbol , string flatmlv  [, const string language] )</Syntax>
      <Description>This function sets the value in string 'mlvsymbol' to the value of 'flatmlv' in one data language (the 'current data language' is used when the argument 'language' is not specified). The value in the other data languages will be preserved.</Description>
      <HelpID>/progguide/functions_mle_internal/ml_set_one_lang</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.after.after.destroy.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.after.after.destroy.object( )</Syntax>
      <Description>This hook is called in case data is deleted, either by the user pressing the delete button on the UI, or programmatically when one of the functions dal.destroy.object() or dal.destroy() is called. Note that this hook is not executed in case a db.delete() is done. In case a DAL is present, this hook is executed just after the after.destroy.object() hook. In case no DAL is present, this hook is executed just after the main.table.io:after.delete: UI script section.</Description>
      <HelpID>/progguide/functions_uedll/ue.after.after.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.after.after.save.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.after.after.save.object(  [long mode] )</Syntax>
      <Description>This hook is called in case data is saved, either by the user pressing the save button on the UI, or programmatically when one of the functions dal.save.object(), dal.new(), or dal.update() is called. Note that this hook is not executed in case a db.insert() or a db.update() is done. In case a DAL is present, this hook is executed just after the after.save.object() hook. In case no DAL is present, this hook is executed just after the main.table.io:after.write: and main.table.io:after.rewrite: UI script sections.</Description>
      <HelpID>/progguide/functions_uedll/ue.after.after.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.after.before.destroy.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.after.before.destroy.object( )</Syntax>
      <Description>This hook is called in case data is deleted, either by the user pressing the delete button on the UI, or programmatically when one of the functions dal.destroy.object() or dal.destroy() is called. Note that this hook is not executed in case a db.delete() is done. In case a DAL is present, this hook is executed just after the before.destroy.object() hook. In case no DAL is present, this hook is executed just before the main.table.io:before.delete: UI script section.</Description>
      <HelpID>/progguide/functions_uedll/ue.after.before.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.after.before.save.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.after.before.save.object(  [long mode] )</Syntax>
      <Description>This hook is called in case data is saved, either by the user pressing the save button on the UI, or programmatically when one of the functions dal.save.object(), dal.new(), or dal.update() is called. Note that this hook is not executed in case a db.insert() or a db.update() is done. In case a DAL is present, this hook is executed just after the before.save.object() hook. In case no DAL is present, this hook is executed just after the main.table.io:before.write: and main.table.io:before.rewrite: UI script sections.</Description>
      <HelpID>/progguide/functions_uedll/ue.after.before.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.before.after.destroy.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.before.after.destroy.object( )</Syntax>
      <Description>This hook is called in case data is deleted, either by the user pressing the delete button on the UI, or programmatically when one of the functions dal.destroy.object() or dal.destroy() is called. Note that this hook is not executed in case a db.delete() is done. In case a DAL is present, this hook is executed just before the after.destroy.object() hook. In case no DAL is present, this hook is executed just before the main.table.io:after.delete: UI script section.</Description>
      <HelpID>/progguide/functions_uedll/ue.before.after.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.before.after.save.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.before.after.save.object(  [long mode] )</Syntax>
      <Description>This hook is called in case data is saved, either by the user pressing the save button on the UI, or programmatically when one of the functions dal.save.object(), dal.new(), or dal.update() is called. Note that this hook is not executed in case a db.insert() or a db.update() is done. In case a DAL is present, this hook is executed just before the after.save.object() hook. In case no DAL is present, this hook is executed just before the main.table.io:after.write: and main.table.io:after.rewrite: UI script sections.</Description>
      <HelpID>/progguide/functions_uedll/ue.before.after.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.before.before.destroy.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.before.before.destroy.object( )</Syntax>
      <Description>This hook is called in case data is deleted, either by the user pressing the delete button on the UI, or programmatically when one of the functions dal.destroy.object() or dal.destroy() is called. Note that this hook is not executed in case a db.delete() is done. In case a DAL is present, this hook is executed just before the before.destroy.object() hook. In case no DAL is present, this hook is executed just before the main.table.io:before.delete: UI script section.</Description>
      <HelpID>/progguide/functions_uedll/ue.before.before.destroy.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ue.before.before.save.object</Name>
      <ScriptType>UEDLL</ScriptType>
      <Syntax>extern long ue.before.before.save.object(  [long mode] )</Syntax>
      <Description>This hook is called in case data is saved, either by the user pressing the save button on the UI, or programmatically when one of the functions dal.save.object(), dal.new(), or dal.update() is called. Note that this hook is not executed in case a db.insert() or a db.update() is done. In case a DAL is present, this hook is executed just before the before.save.object() hook. In case no DAL is present, this hook is executed just before the main.table.io:before.write: and main.table.io:before.rewrite: UI script sections.</Description>
      <HelpID>/progguide/functions_uedll/ue.before.before.save.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tc.ignore.process</Name>
      <ScriptType>all</ScriptType>
      <Syntax> tc.ignore.process( boolean flag  [, long processno] )</Syntax>
      <Description>This function indicates if the WebTop should ignore this session (process). By default, the WebTop does not ignore a session. Therefore this function should only be called from a 3GL session which does not present a User Interface. When this function is not called from such 3GL session, the WebTop will seriously delay when such a 3GL Session is started.</Description>
      <HelpID>/progguide/functions_webtop/tc.ignore.process</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>tc.is.thin.client</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  tc.is.thin.client( )</Syntax>
      <Description>This function returns whether you are running in thin-client mode.</Description>
      <HelpID>/progguide/functions_webtop/tc.is.thin.client</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.append</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.append( const string blob.locator , long num.bytes , const string bytes.array  [, long mode]  [, long eflag] )</Syntax>
      <Description>This function appends data to the BLOB, to which the BLOB locator refers. Before calling db.blob.append(), the BLOB locator must be read from the database. It is required to lock the record. if the lock is a delayed lock then db.blob.append() will promote the delayed lock to a lock in the database automatically (limitation: without EROWCHANGED check on the BLOB data). A call to db.blob.append() causes a flush of buffered updates. Such a flush can cause a jump to the retry point. Errors that occur in db.blob.append() itself do not cause a jump to the retry point. For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then appends data to the BLOB: long num.bytes long ret string blobdata(100) blobdata = "the quick brown fox jumps over the lazy dog" num.bytes = len(blobdata) select dbtst000.photo from dbtst000 for update where dbtst000.item = "001" selectdo ret = db.blob.append(dbtst000.photo, num.bytes, blobdata) endselect commit.transaction()</Description>
      <HelpID>/progguide/functions_blob/db.blob.append</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.clear</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.clear( const string blob.locator  [, long mode]  [, long eflag] )</Syntax>
      <Description>This function clears the BLOB, to which the BLOB locator refers. Before calling db.blob.clear(), the BLOB locator must be read from the database. It is required to lock the record. if the lock is a delayed lock then db.blob.clear() will promote the delayed lock to a lock in the database automatically (limitation: without EROWCHANGED check on the BLOB data). For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then clears the BLOB: long num.bytes long ret select dbtst000.photo from dbtst000 for update where dbtst000.item = "001" selectdo ret = db.blob.clear(dbtst000.photo) endselect commit.transaction()</Description>
      <HelpID>/progguide/functions_blob/db.blob.clear</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.read</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.read( const string blob.locator , long offset , long num.bytes , ref string bytes.array , ref long num.bytes.read )</Syntax>
      <Description>This function reads data from the BLOB, to which the BLOB locator refers. Before calling db.blob.read(), the BLOB locator must be read from the database. For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then retrieves the first 256 bytes of the picture: string bytes.array(256) long num.bytes long ret select dbtst000.photo from dbtst000 where dbtst000.item = "001" selectdo ret = db.blob.read(dbtst000.photo, 1, 256, bytes.array, num.bytes) endselect</Description>
      <HelpID>/progguide/functions_blob/db.blob.read</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.size</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.size( const string blob.locator , ref long num.bytes )</Syntax>
      <Description>This function retrieves the size of the BLOB, to which the BLOB locator refers. Before calling db.blob.size(), the BLOB locator must be read from the database. For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then retrieves the size of the picture: long num.bytes long ret select dbtst000.photo from dbtst000 where dbtst000.item = "001" selectdo ret = db.blob.size(dbtst000.photo, num.bytes) endselect</Description>
      <HelpID>/progguide/functions_blob/db.blob.size</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.append.xml</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.append.xml( const string blob.locator , long xml.node  [, long mode]  [, long eflag] )</Syntax>
      <Description>This function appends data from an XML tree to the BLOB, to which the BLOB locator refers. Before calling db.blob.append.xml(), the BLOB locator must be read from the database. It is required to lock the record. if the lock is a delayed lock then db.blob.append.xml() will promote the delayed lock to a lock in the database automatically (limitation: without EROWCHANGED check on the BLOB data). A call to db.blob.append.xml() causes a flush of buffered updates. Such a flush can cause a jump to the retry point. Errors that occur in db.blob.append.xml() itself do not cause a jump to the retry point.</Description>
      <HelpID>/progguide/functions_blob/db.blob.append.xml</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.read.xml</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.read.xml( const string blob.locator , long offset , ref long bytes.read , ref long xml.node , ref string error , long whitespacehandling )</Syntax>
      <Description>This function reads data from the BLOB, to which the BLOB locator refers, and parses it to an XML tree. Before calling db.blob.read.xml(), the BLOB locator must be read from the database. For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then retrieves the first 256 bytes of the picture: string bytes.array(256) string error(120) long bytes.read long xml.node long ret select dbtst000.photo from dbtst000 where dbtst000.item = "001" selectdo ret = db.blob.read.xml(dbtst000.photo, 1, bytes.read, xml.node, error, XmlPreserveWhiteSpace) endselect Note: A parse error is returned when the BLOB is empty; this is similar to parsing an empty string using XmlReadFromString().</Description>
      <HelpID>/progguide/functions_blob/db.blob.read.xml</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>db.blob.read.xml.ns</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long db.blob.read.xml.ns( const string blob.locator , long offset , ref long bytes.read , ref long xml.node , ref string error , long whitespacehandling )</Syntax>
      <Description>This function reads data from the BLOB, to which the BLOB locator refers, and parses it to an XML tree. Before calling db.blob.read.xml.ns(), the BLOB locator must be read from the database. For example, the following code retrieves the BLOB locator that refers to a certain picture from a table, and then retrieves the first 256 bytes of the picture: string bytes.array(256) string error(120) long bytes.read long xml.node long ret select dbtst000.photo from dbtst000 where dbtst000.item = "001" selectdo ret = db.blob.read.xml.ns(dbtst000.photo, 1, bytes.read, xml.node, error, XmlPreserveWhiteSpace) endselect Note: A parse error is returned when the BLOB is empty; this is similar to parsing an empty string using XmlReadFromString(). This function supports XML namespaces, and will create namespace declarations carried by the respective XML nodes, and put XML nodes in their appropriate namespace.</Description>
      <HelpID>/progguide/functions_blob/db.blob.read.xml.ns</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>copy.cdf</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long copy.cdf( long src.table.id , long dest.table.id )</Syntax>
      <Description>This function facilitates thet application in the task of carrying forward the information in the CDFs through the business process. The function will copy CDFs from a source record buffer to a destnation record buffer if (1) the destination table has a CDF with the same name and (2) the value in the destination record buffer is empty. Example: copy.cdf( ttdsls101, ttdsls401 ) Example: quotation.line.table = db.bind("tdsls101", my.quot.line.buf ) order.line.table = db.bind("tdsls401, my.order.line.buf ) . . . copy.cdf(quotation.line.table, order.line.table)</Description>
      <HelpID>/progguide/functions_cdf/copy.cdf</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.rbhp.mode</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean is.rbhp.mode( )</Syntax>
      <Description>This function can be used to check if this 4GL session is directly started from a Role Based Home Page.</Description>
      <HelpID>/progguide/functions_rbhp/is.rbhp.mode</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.get.parameter</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>string rbhp.get.parameter( const string name )</Syntax>
      <Description>This function returns the named drillback parameter value which was passed by the Role Based Home Page drillback URL. This function can be called from the application function: tcint.dll0001.drill.back(). This function can also be called from a 4GL session when it was started from a Role Based Home Page drillback.</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.get.parameter</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.query.extend.from</Name>
      <ScriptType>DLL</ScriptType>
      <Syntax> rbhp.query.extend.from( const string from.extension )</Syntax>
      <Description>Set the FROM clause extension to be used when starting the session. No syntax checking on the passed extension will be done. This extension will be appended to the extension set by the session. This function can only be called from the application function: tcint.dll0001.drill.back().</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.query.extend.from</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.query.extend.select</Name>
      <ScriptType>DLL</ScriptType>
      <Syntax> rbhp.query.extend.select( const string select.extension )</Syntax>
      <Description>Set the SELECT clause extension to be used when starting the session. No syntax checking on the passed extension will be done. This extension will be appended to the extension set by the session. This function can only be called from the application function: tcint.dll0001.drill.back().</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.query.extend.select</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.query.extend.where</Name>
      <ScriptType>DLL</ScriptType>
      <Syntax> rbhp.query.extend.where( const string where.extension )</Syntax>
      <Description>Set the WHERE clause extension to be used when starting the session. No syntax checking on the passed extension will be done. This extension will be appended to the extension set by the session. This function can only be called from the application function: tcint.dll0001.drill.back().</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.query.extend.where</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.set.error.message</Name>
      <ScriptType>DLL</ScriptType>
      <Syntax> rbhp.set.error.message( const string mess.or.code  [, void arg ...] )</Syntax>
      <Description>Set error message and/or error code to be reported to the end user when during the tcint.dll0001.drill.back() function an error occurred. This function can only be called from the application function: tcint.dll0001.drill.back().</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.set.error.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>rbhp.set.session</Name>
      <ScriptType>DLL</ScriptType>
      <Syntax> rbhp.set.session( const string session.code , long mode , long company )</Syntax>
      <Description>Set the session to be started, the mode of this session and the company number in which this session should be started. This function can only be called from the application function: tcint.dll0001.drill.back().</Description>
      <HelpID>/progguide/functions_rbhp/rbhp.set.session</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.bse.encode$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.cas.bse.encode$( const string BSE )</Syntax>
      <Description>Replace all characters of a BSE with an escape character, except for lowercase ascii characters (a-z).</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.bse.encode$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.bse.gettable</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.cas.bse.gettable( ref string(2,128) EscapeTable )</Syntax>
      <Description>Returns a string array with an escapetable.</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.bse.gettable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.free.serviceresponse</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.cas.free.serviceresponse( )</Syntax>
      <Description>Clean up connection</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.free.serviceresponse</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.get.failurecode$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.cas.get.failurecode$( )</Syntax>
      <Description>Returns an error code number, indicating the status of an action.</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.get.failurecode$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.get.failuretext$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.cas.get.failuretext$( )</Syntax>
      <Description>Can be used to get a readable description of failurecode.</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.get.failuretext$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.get.serviceresponsetype</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.cas.get.serviceresponsetype( )</Syntax>
      <Description>Get the response type of the server.</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.get.serviceresponsetype</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cas.get.user$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.cas.get.user$( )</Syntax>
      <Description>Read the CAS user.</Description>
      <HelpID>/progguide/functions_cURL/curl.cas.get.user$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.cleanup</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.cleanup( )</Syntax>
      <Description>End cURL session.</Description>
      <HelpID>/progguide/functions_cURL/curl.cleanup</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.escape.encode$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.escape.encode$( const string SomeText )</Syntax>
      <Description>Escape a string</Description>
      <HelpID>/progguide/functions_cURL/curl.escape.encode$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.escape.encode.ext$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.escape.encode.ext$( const string(2,128) EscapeTable , const string SomeText )</Syntax>
      <Description>Escape special characters</Description>
      <HelpID>/progguide/functions_cURL/curl.escape.encode.ext$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.escape.gettable</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.escape.gettable( ref string(2,128) EscapeTable )</Syntax>
      <Description>Returns a string array with an escapetable.</Description>
      <HelpID>/progguide/functions_cURL/curl.escape.gettable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.get.errorbuffer$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.get.errorbuffer$( )</Syntax>
      <Description>Descriptive message on result of previous action</Description>
      <HelpID>/progguide/functions_cURL/curl.get.errorbuffer$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.getinfo</Name>
      <ScriptType>all</ScriptType>
      <Syntax> curl.getinfo( )</Syntax>
      <Description>This isn't the actual function. This help topic lists all curl.getinfo functions. See curl website for more information on these functions double curl.getinfo.connect_time() double curl.getinfo.content_length_download() double curl.getinfo.content_length_upload() double curl.getinfo.namelookup_time() double curl.getinfo.pretransfer_time() double curl.getinfo.redirect_time() double curl.getinfo.size_download() double curl.getinfo.size_upload() double curl.getinfo.speed_download() double curl.getinfo.speed_upload() double curl.getinfo.starttransfer_time() double curl.getinfo.total_time() long curl.getinfo.filetime() long curl.getinfo.header_size() long curl.getinfo.http_connectcode() long curl.getinfo.httpauth_avail() long curl.getinfo.lastsocket() long curl.getinfo.num_connects() long curl.getinfo.os_errno() long curl.getinfo.proxyauth_avail() long curl.getinfo.redirect_count() long curl.getinfo.request_size() long curl.getinfo.response_code() long curl.getinfo.ssl_verifyresult() string curl.getinfo.content_type$() string curl.getinfo.effective_url$() string curl.getinfo.ftp_entry_path$()</Description>
      <HelpID>/progguide/functions_cURL/curl.getinfo</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.perform</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.perform( )</Syntax>
      <Description>Execute the action.</Description>
      <HelpID>/progguide/functions_cURL/curl.perform</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.reset.errorbuffer</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.reset.errorbuffer( )</Syntax>
      <Description>Clear the error buffer.</Description>
      <HelpID>/progguide/functions_cURL/curl.reset.errorbuffer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.reset</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.reset( )</Syntax>
      <Description>Resets all options.</Description>
      <HelpID>/progguide/functions_cURL/curl.reset</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.setopt.postperform.cas.serviceresponse</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.setopt.postperform.cas.serviceresponse( )</Syntax>
      <Description/>
      <HelpID>/progguide/functions_cURL/curl.setopt.postperform.cas.serviceresponse</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.setopt.url.cas.proxyvalidate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.setopt.url.cas.proxyvalidate( const string CasServerURL , const string Service , const string Ticket  [, const string PgtURL]  [, long Renew] )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.setopt.url.cas.proxyvalidate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.setopt.url.cas.servicevalidate</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.setopt.url.cas.servicevalidate( const string CasServerURL , const string Service , const string Ticket  [, const string PgtURL]  [, long Renew] )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.setopt.url.cas.servicevalidate</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.setopt</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.setopt( )</Syntax>
      <Description>This isn't the actual function. This help topic lists all curl.setopt functions. See curl website for more information on these functions long curl.setopt.append(long OptionValue) long curl.setopt.autoreferer(long OptionValue) long curl.setopt.buffersize(long OptionValue) long curl.setopt.connect_only(long OptionValue) long curl.setopt.connecttimeout(long OptionValue) long curl.setopt.connecttimeout_ms(long OptionValue) long curl.setopt.cookiesession(long OptionValue) long curl.setopt.crlf(long OptionValue) long curl.setopt.dirlistonly(long OptionValue) long curl.setopt.dns_cache_timeout(long OptionValue) long curl.setopt.dns_use_global_cache(long OptionValue) long curl.setopt.failonerror(long OptionValue) long curl.setopt.filetime(long OptionValue) long curl.setopt.followlocation(long OptionValue) long curl.setopt.forbid_reuse(long OptionValue) long curl.setopt.fresh_connect(long OptionValue) long curl.setopt.ftp_create_missing_dirs(long OptionValue) long curl.setopt.ftp_filemethod(long OptionValue) long curl.setopt.ftp_response_timeout(long OptionValue) long curl.setopt.ftp_skip_pasv_ip(long OptionValue) long curl.setopt.ftp_ssl_ccc(long OptionValue) long curl.setopt.ftp_use_eprt(long OptionValue) long curl.setopt.ftp_use_epsv(long OptionValue) long curl.setopt.ftp_use_pret(long OptionValue) long curl.setopt.ftpsslauth(long OptionValue) long curl.setopt.header(long OptionValue) long curl.setopt.http_content_decoding(long OptionValue) long curl.setopt.http_transfer_decoding(long OptionValue) long curl.setopt.http_version(long OptionValue) long curl.setopt.httpauth(long OptionValue) |** defines for setopt.httpauth and setopt.proxyauth CURLAUTH_NONE 0 | nothing CURLAUTH_BASIC 1 | Basic (default) CURLAUTH_DIGEST 2 | Digest CURLAUTH_GSSNEGOTIATE 4 | GSS-Negotiate CURLAUTH_NTLM 8 | NTLM CURLAUTH_ANY -1 | all types set CURLAUTH_ANYSAFE (CURLAUTH_BASIC - CURLAUTH_BASIC) long curl.setopt.httpget(long OptionValue) long curl.setopt.httpheader(long sListId) long curl.setopt.httpproxytunnel(long OptionValue) long curl.setopt.ignore_content_length(long OptionValue) long curl.setopt.infilesize(long OptionValue) long curl.setopt.ipresolve(long OptionValue) long curl.setopt.localport(long OptionValue) long curl.setopt.localportrange(long OptionValue) long curl.setopt.low_speed_limit(long OptionValue) long curl.setopt.low_speed_time(long OptionValue) long curl.setopt.maxconnects(long OptionValue) long curl.setopt.maxfilesize(long OptionValue) long curl.setopt.maxredirs(long OptionValue) long curl.setopt.netrc(long OptionValue) long curl.setopt.new_directory_perms(long OptionValue) long curl.setopt.new_file_perms(long OptionValue) long curl.setopt.nobody(long OptionValue) long curl.setopt.noprogress(long OptionValue) long curl.setopt.nosignal(long OptionValue) long curl.setopt.port(long OptionValue) long curl.setopt.post(long OptionValue) long curl.setopt.postredir(long OptionValue) |** defines for setopt.postredir CURL_REDIR_POST_301 1 CURL_REDIR_POST_302 2 CURL_REDIR_POST_ALL CURL_REDIR_POST_301 + CURL_REDIR_POST_302 long curl.setopt.post301(long OptionValue) long curl.setopt.postfieldsize(long OptionValue) long curl.setopt.protocols(long OptionValue) long curl.setopt.proxy_transfer_mode(long OptionValue) long curl.setopt.proxyauth(long OptionValue) |** defines for setopt.httpauth and setopt.proxyauth CURLAUTH_NONE 0 | nothing CURLAUTH_BASIC 1 | Basic (default) CURLAUTH_DIGEST 2 | Digest CURLAUTH_GSSNEGOTIATE 4 | GSS-Negotiate CURLAUTH_NTLM 8 | NTLM CURLAUTH_ANY -1 | all types set CURLAUTH_ANYSAFE (CURLAUTH_BASIC - CURLAUTH_BASIC) long curl.setopt.proxyport(long OptionValue) long curl.setopt.proxytype(long OptionValue) long curl.setopt.put(long OptionValue) long curl.setopt.readdata(long sioId) long curl.setopt.redir_protocols(long OptionValue) long curl.setopt.resume_from(long OptionValue) long curl.setopt.ssh_auth_types(long OptionValue) long curl.setopt.ssl_sessionid_cache(long OptionValue) long curl.setopt.ssl_verifyhost(long OptionValue) long curl.setopt.ssl_verifypeer(long OptionValue) long curl.setopt.sslengine_default(long OptionValue) long curl.setopt.sslversion(long OptionValue) long curl.setopt.tcp_nodelay(long OptionValue) long curl.setopt.timecondition(long OptionValue) long curl.setopt.timeout(long OptionValue) long curl.setopt.timeout_ms(long OptionValue) long curl.setopt.timevalue(long OptionValue) long curl.setopt.transfertext(long OptionValue) long curl.setopt.unrestricted_auth(long OptionValue) long curl.setopt.upload(long OptionValue) long curl.setopt.use_ssl(long OptionValue) long curl.setopt.verbose(long OptionValue) long curl.setopt.wildcardmatch(long OptionValue) long curl.setopt.writedata(long sioId) long curl.setopt.writeheader(long sioId) long curl.setopt.cainfo(string OptionValue) long curl.setopt.capath(string OptionValue) long curl.setopt.cookie(string OptionValue) long curl.setopt.cookiefile(string OptionValue) long curl.setopt.cookiejar(string OptionValue) long curl.setopt.cookielist(string OptionValue) long curl.setopt.copypostfields(string OptionValue) long curl.setopt.customrequest(string OptionValue) long curl.setopt.egdsocket(string OptionValue) long curl.setopt.encoding(string OptionValue) long curl.setopt.ftp_account(string OptionValue) long curl.setopt.ftp_alternative_to_user(string OptionValue) long curl.setopt.ftpport(string OptionValue) long curl.setopt.interface(string OptionValue) long curl.setopt.keypasswd(string OptionValue) long curl.setopt.krblevel(string OptionValue) long curl.setopt.netrc_file(string OptionValue) long curl.setopt.noproxy(string OptionValue) long curl.setopt.password(string OptionValue) long curl.setopt.postfields(string OptionValue) long curl.setopt.proxy(string OptionValue) long curl.setopt.proxypassword(string OptionValue) long curl.setopt.proxyusername(string OptionValue) long curl.setopt.proxyuserpwd(string OptionValue) long curl.setopt.random_file(string OptionValue) long curl.setopt.range(string OptionValue) long curl.setopt.referer(string OptionValue) long curl.setopt.ssh_host_public_key_md5(string OptionValue) long curl.setopt.ssh_private_keyfile(string OptionValue) long curl.setopt.ssh_public_keyfile(string OptionValue) long curl.setopt.ssl_cipher_list(string OptionValue) long curl.setopt.sslcert(string OptionValue) long curl.setopt.sslcerttype(string OptionValue) long curl.setopt.sslengine(string OptionValue) long curl.setopt.sslkey(string OptionValue) long curl.setopt.sslkeytype(string OptionValue) long curl.setopt.url(string OptionValue) long curl.setopt.useragent(string OptionValue) long curl.setopt.username(string OptionValue) long curl.setopt.userpwd(string OptionValue)</Description>
      <HelpID>/progguide/functions_cURL/curl.setopt</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.sso.get.ssolocation$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.sso.get.ssolocation$( )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.sso.get.ssolocation$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.sso.user.encode$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.sso.user.encode$( const string User )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.sso.user.encode$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.sso.user.gettable</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.sso.user.gettable( ref string(2,128) EscapeTable )</Syntax>
      <Description>Returns a string array with an escapetable.</Description>
      <HelpID>/progguide/functions_cURL/curl.sso.user.gettable</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.strerror$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.strerror$( long CurlCode )</Syntax>
      <Description>Descriptive message on result of previous action</Description>
      <HelpID>/progguide/functions_cURL/curl.strerror$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.xml.get.error$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.xml.get.error$( )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.xml.get.error$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.xml.set.whitespacehandling</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.xml.set.whitespacehandling( long WhiteSpaceHandling )</Syntax>
      <Description>...</Description>
      <HelpID>/progguide/functions_cURL/curl.xml.set.whitespacehandling</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.escape.decode$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.escape.decode$( const string SomeText )</Syntax>
      <Description>curl.escape.decode$() offers the inverse functionality of curl.escape.encode$().</Description>
      <HelpID>/progguide/functions_cURL/curl.escape.decode$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.slist.append</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void curl.slist.append( const string SomeText )</Syntax>
      <Description>curl.slist.append() appends a specified string to a linked list of strings. The existing list should be passed as the first argument while the new list is returned from this function. The specified string has been appended when this function returns. The list should be freed again (after usage) with curl.slist.free.all().</Description>
      <HelpID>/progguide/functions_cURL/curl.slist</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.download.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.download.data( const string url , ref string data , ref long data.size  [, long header.list] )</Syntax>
      <Description>Downloads data from the specified url and writes it to the specified data buffer. Note that the buffer must be large enough to store all downloaded data.</Description>
      <HelpID>/progguide/functions_cURL/curl.download.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.download.file</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.download.file( const string url , const string file  [, long header.list] )</Syntax>
      <Description>Downloads data from the specified url and writes it to the specified file.</Description>
      <HelpID>/progguide/functions_cURL/curl.download.file</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.download.stream</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.download.stream( const string url , long response.stream  [, long header.list] )</Syntax>
      <Description>Downloads data from the specified url and writes it to the specified stream, which can be either a file or a memory stream. Note that you have to rewind the stream first before reading data from the response.stream.</Description>
      <HelpID>/progguide/functions_cURL/curl.download.stream</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.download.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.download.string( const string url , ref string data  [, long header.list] )</Syntax>
      <Description>Downloads data from the specified url and writes it to the specified string buffer. Note that the string buffer must be large enough to store all data. The data will be null terminated, if possible.</Description>
      <HelpID>/progguide/functions_cURL/curl.download.string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.http.status$</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string curl.http.status$( long http.status )</Syntax>
      <Description>Returns a english descriptive text for a given HTTP Status Code. E.g. when 200 (HTTP_STATUS_OK) is passed "OK" is returned, or when 503 (HTTP_STATUS_SERVICE_UNAVAILABLE) is passed, "Service Unavailable" is returned. The descriptive text is meant for logging and tracing purposes and/or technical error messages.</Description>
      <HelpID>/progguide/functions_cURL/curl.http.status$</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.upload.data</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.upload.data( const string url , const string data , long data.size , long response.stream  [, long header.list]  [, const string method] )</Syntax>
      <Description>Uploads binary data to the specified url.</Description>
      <HelpID>/progguide/functions_cURL/curl.upload.data</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.upload.file</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.upload.file( const string url , const string file , long response.stream  [, long header.list]  [, const string method] )</Syntax>
      <Description>Uploads a file to the specified url.</Description>
      <HelpID>/progguide/functions_cURL/curl.upload.file</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.upload.stream</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.upload.stream( const string url , long request.stream , long data.size , long response.stream  [, long header.list]  [, const string method] )</Syntax>
      <Description>Uploads data from a stream (a file or a memory stream) to the specified url.</Description>
      <HelpID>/progguide/functions_cURL/curl.upload.stream</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>curl.upload.string</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long curl.upload.string( const string url , const string data , long response.stream  [, long header.list]  [, const string method] )</Syntax>
      <Description>Uploads a (null terminated) string to the specified url.</Description>
      <HelpID>/progguide/functions_cURL/curl.upload.string</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cps.add.child</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long cps.add.child( const string session.code , long bars , const string title , long splitpane )</Syntax>
      <Description>Add a child session to this controller, which will be shown and started in the frame of the composite controller. This session will be shown in the passed split pane. To a split pane exactly two objects must be added: sessions and/or split panes. The order of adding these objects to the split pane determines the order on the screen (left/right or top/bottom).</Description>
      <HelpID>/progguide/functions_composite_sessions/cps.add.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cps.create.splitpane</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long cps.create.splitpane( long orientation , long divider  [, long splitpane] )</Syntax>
      <Description>Create a split pane which can either hold another split pane or a child session. There can only be one top-level split pane created. This function may not be called before the call to cps.init()</Description>
      <HelpID>/progguide/functions_composite_sessions/cps.create.splitpane</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cps.init</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long cps.init( )</Syntax>
      <Description>Initialize the Composite Session Controller. This must be the first cps function called by the 3GL-Script. When this session was started from a parent session in modeless mode, this function will reactive the parent session. So any imports which must be done by this session from the parent should be done before this function is called.</Description>
      <HelpID>/progguide/functions_composite_sessions/cps.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cps.start</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>void  cps.start( )</Syntax>
      <Description>Activates the Composite Session Controller and the related child sessions. This function will only return when the user decides to close this composite session.</Description>
      <HelpID>/progguide/functions_composite_sessions/cps.start</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>cps.status.mess</Name>
      <ScriptType>4GL/GBF</ScriptType>
      <Syntax>void  cps.status.mess( const string message )</Syntax>
      <Description>This function displays the specified message in the status bar of a composite session. To clear this message, an empty message string must be passed. This function can be called from composite child sessions (GBF or 4GL). When this function is called from other session types, it will do nothing.</Description>
      <HelpID>/progguide/functions_composite_sessions/cps.status.mess</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.drag</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void enable.drag( )</Syntax>
      <Description>Enable dragging objects from this 4GL-session to other sessions. This function must be called from the before.program:section or from the after.form.read: section of a multi-occurrence 4GL-Session which runs as a composite child.</Description>
      <HelpID>/progguide/functions_composite_sessions/enable.drag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>enable.drop</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void enable.drop( const string session.code , const string on.drop.function )</Syntax>
      <Description>Allow drop operation onto this 4GL-Session from objects dragged from the indicated sessions. When an object from the indicated session is dropped, the function passed in string on.drop.function will be called. This function can be called more than once in order to allow drop operations from different sessions. This function must be called from the before.program:section or from the after.form.read: section of a multi-occurrence 4GL-Session which runs as a composite child.</Description>
      <HelpID>/progguide/functions_composite_sessions/enable.drop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.composite.child</Name>
      <ScriptType>4GL/GBF</ScriptType>
      <Syntax>boolean is.composite.child( )</Syntax>
      <Description>This function checks whether the current session is running as a composite child session or not. This function can be useful when a session can be run in standalone mode and as a child within a composite session. This function can be called from a 4GL-Session or from a GBF session.</Description>
      <HelpID>/progguide/functions_composite_sessions/is.composite.child</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>on.drop</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void on.drop( long from.pid , long collection , boolean copy )</Syntax>
      <Description>Call back function which is passed in function enable.drop(). This function will be called when a drop event from the associated session arrives. In this function the business logic related to the drop operation must be implemented. In case database table updates are done in this function, the function must also commit the transaction.</Description>
      <HelpID>/progguide/functions_composite_sessions/on.drop</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.keyfields.collection</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long create.keyfields.collection( )</Syntax>
      <Description>Create an object which can hold a collection of key fields objects</Description>
      <HelpID>/progguide/functions_keyfields/create.keyfields.collection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>create.keyfields.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long create.keyfields.object( const string tablename  [, long collection] )</Syntax>
      <Description>Create an object which can hold the key fields and the corresponding values referring to one record of the passed database table. The key fields of index 1 are used.</Description>
      <HelpID>/progguide/functions_keyfields/create.keyfields.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>delete.keyfields.collection</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void delete.keyfields.collection( long object )</Syntax>
      <Description>Delete the indicated key fields collection including all key field objects which are currently stored in this collection</Description>
      <HelpID>/progguide/functions_keyfields/delete.keyfields.collection</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>delete.keyfields.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void delete.keyfields.object( long object )</Syntax>
      <Description>Delete the indicated key fields object. When this object is currently part of a collection it will also be removed from this collection.</Description>
      <HelpID>/progguide/functions_keyfields/delete.keyfields.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.first.keyfields.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.first.keyfields.object( long object )</Syntax>
      <Description>Get the first key fields object in this collection.</Description>
      <HelpID>/progguide/functions_keyfields/get.first.keyfields.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.keyfields.table</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  get.keyfields.table( long object )</Syntax>
      <Description>Return the name of the table associated with the passed key fields object.</Description>
      <HelpID>/progguide/functions_keyfields/get.keyfields.table</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.next.keyfields.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.next.keyfields.object( long object )</Syntax>
      <Description>Get the next key fields object in a collection.</Description>
      <HelpID>/progguide/functions_keyfields/get.next.keyfields.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>get.num.keyfields.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long get.num.keyfields.object( long object )</Syntax>
      <Description>Get the number of key field objects in this collection.</Description>
      <HelpID>/progguide/functions_keyfields/get.num.keyfields.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>keyfields.to.object</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void keyfields.to.object( long object )</Syntax>
      <Description>Store the current value of the key fields to the passed key field object.</Description>
      <HelpID>/progguide/functions_keyfields/keyfields.to.object</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>object.to.keyfields</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void object.to.keyfields( long object )</Syntax>
      <Description>Restore the value of the key fields from the passed key field object.</Description>
      <HelpID>/progguide/functions_keyfields/object.to.keyfields</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lma.enable.counting</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  lma.enable.counting( )</Syntax>
      <Description>Enables LMA counting. This function enables collection of data and periodic start of 'ottstplmapub' (for publishing to the bus). Once enabled, LMA counting cannot be switched off anymore.</Description>
      <HelpID>/progguide/functions_lma/lma.enable.counting</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lma.get.license.usage.noun</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long lma.get.license.usage.noun( ref long xml.node )</Syntax>
      <Description>This function retrieves the license usage noun. This function can only be called successfully from the ottstplmapub process that is started by bshell.</Description>
      <HelpID>/progguide/functions_lma/lma.get.license.usage.noun</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lma.named.user.report</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long  lma.named.user.report( string counting.type , string user.name  [, string product.id] )</Syntax>
      <Description>This function is used to report named users. It can only be called successfully from the ottstplmapub process that is started by bshell. Reporting of named users is done once per restart of the environment, which is indicated by a flag in shared memory. For more information on that flag refer to lma.named.user.shm.flag() . This function can only be called successfully from the ottstplmapub process that is started by bshell.</Description>
      <HelpID>/progguide/functions_lma/lma.named.user.report</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>lma.named.user.shm.flag</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long lma.named.user.shm.flag( )</Syntax>
      <Description>This function retrieves (and resets) a flag that indicates that the named user information must be reported. The flag is raised once when shared memory is in it's initial state. Whether the flag exists for each tenant is still to be decided (TODO). This function can only be called successfully from the ottstplmapub process that is started by bshell.</Description>
      <HelpID>/progguide/functions_lma/lma.named.user.shm.flag</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.addFunctionArg</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void jca.addFunctionArg( long i_funcall , const string i_scope , const string i_type , const string i_name  [, long i_size] )</Syntax>
      <Description>Adds an argument definition to the specified JCA Function Call definition. Note that the sequence in which the arguments are added to the JCA Function Call must be in accordance with the 3GL function definition that is to be executed.</Description>
      <HelpID>/progguide/functions_jca/jca.addfunctionarg</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.close</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.close( )</Syntax>
      <Description>Closes the JCA Connection of this 3GL process. After this call, a jca.connect must be done again to re-establish a JCA connection.</Description>
      <HelpID>/progguide/functions_jca/jca.close</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.closeBde</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.closeBde( )</Syntax>
      <Description>Closes the current BDE Manager on the server of the current 3GL process. The BDE Manager will first handle any request it is processing before it closes. After this call, another jca.openBde can be done, or the connection may be closed using jca.close.</Description>
      <HelpID>/progguide/functions_jca/jca.closebde</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.connect</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.connect( const string i_hostname , long i_port , const string i_bse , const string i_osUsername , const string i_password , const string i_bseUsername , const string i_bshellname , const string i_bshellargs , long i_company )</Syntax>
      <Description>Connects the current 3GL process to a bshell using the specified connection parameters. A 3GL process can have one JCA connection at a time. When this function returns successfully, a BDE Manager can be opened, used and eventually closed, after which the connection can be closed. In case the server to which must be connected is not yet running it will be activated first, using the specified connection parameters. In case several 3/4GL processes connect using the same connection parameters, they will share the same connection. However, in case one of the connection parameters differ, a new connection will be started.</Description>
      <HelpID>/progguide/functions_jca/jca.connect</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.createFunctionCall</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.createFunctionCall( const string i_dll , const string i_function , const string i_returntype )</Syntax>
      <Description>Creates a JCA Function Call definition which can be executed by an open BDE Manager. To this Function Call structure, arguments including their values can be added, as required.</Description>
      <HelpID>/progguide/functions_jca/jca.createfunctioncall</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.deleteFunctionCall</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void jca.deleteFunctionCall( ref long io_funcall )</Syntax>
      <Description>Delete the specified JCA Function Call definition from memory, including all defined arguments with their values, and the return value, if any. The passed identifier is set to 0 on return.</Description>
      <HelpID>/progguide/functions_jca/jca.deletefunctioncall</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.execFunctionCall</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.execFunctionCall( long i_funcall )</Syntax>
      <Description>Executes the specified JCA Function Call. The function will be executed using the current open JCA Connection and Bde Manager. When the function has executed successfully, the JCA Function Call return value and its output arguments will have been assigned a value, which can then be retrieved with the jca.getFunctionReturnStrValue, jca.getFunctionReturnLngValue, jca.getFunctionReturnDblValue, jca.getFunctionReturnXmlValue and the jca.getFunctionArgStrValue, jca.getFunctionArgLngValue, jca.getFunctionArgDblValue, jca.getFunctionArgXmlValue functions.</Description>
      <HelpID>/progguide/functions_jca/jca.execfunctioncall</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionArgDblValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double jca.getFunctionArgDblValue( long i_funcall , const string i_name )</Syntax>
      <Description>Retrieves the value of the specified function argument as a double.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionargdblvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionArgLngValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.getFunctionArgLngValue( long i_funcall , const string i_name )</Syntax>
      <Description>Retrieves the value of the specified function argument as a long. Use this also for values of type enum and boolean. Do not use this for values that contain an XML node. Instead use jca.getFunctionArgXmlValue for XML nodes.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionarglngvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionArgStrValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string jca.getFunctionArgStrValue( long i_funcall , const string i_name )</Syntax>
      <Description>Retrieves the value of the specified function argument as a string.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionargstrvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionArgXmlValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.getFunctionArgXmlValue( long i_funcall , const string i_name )</Syntax>
      <Description>Retrieves the value of the specified function argument as an XML node.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionargxmlvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionCallErrors</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.getFunctionCallErrors( long i_funcall )</Syntax>
      <Description>Retrieves a list of error messages for the given JCA Function Call. In case any errors occurred after executing the JCA Function Call, they are stored in an error list. In case no errors occurs, this list is empty.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctioncallerrors</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionReturnDblValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>double jca.getFunctionReturnDblValue( long i_funcall )</Syntax>
      <Description>Retrieves the return value of the JCA Function Call as a double.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionreturndblvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionReturnLngValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.getFunctionReturnLngValue( long i_funcall )</Syntax>
      <Description>Retrieves the return value of the JCA Function Call as a long. Use this also for values of type enum and boolean. Do not use this for values that contain an XML node. Instead use jca.getFunctionReturnXmlValue() for XML nodes.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionreturnlngvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionReturnStrValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string jca.getFunctionReturnStrValue( long i_funcall )</Syntax>
      <Description>Retrieves the return value of the JCA Function Call as a string.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionreturnstrvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getFunctionReturnXmlValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.getFunctionReturnXmlValue( long i_funcall )</Syntax>
      <Description>Retrieves the return value of the JCA Function Call as an XML node.</Description>
      <HelpID>/progguide/functions_jca/jca.getfunctionreturnxmlvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.getLastErrorText</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string jca.getLastErrorText( )</Syntax>
      <Description>Retrieves an english error text (of max. 512 chars) of the last occurred error. The error text contains information about wrong usage of the JCA Client Functionality, or information about an I/O error, like a lost connection with the server.</Description>
      <HelpID>/progguide/functions_jca/jca.getlasterrortext</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.openBde</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long jca.openBde( long i_company )</Syntax>
      <Description>Opens a BDE Manager on the server for the current 3GL process, using the current JCA Connection. Per 3GL Process one BDE manager can be open at a time.</Description>
      <HelpID>/progguide/functions_jca/jca.openbde</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>jca.setFunctionArgValue</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void jca.setFunctionArgValue( long i_funcall , const string i_name , void i_value )</Syntax>
      <Description>Sets the value of a function argument for the specified JCA Function Call definition. This function can be used several times for the same function argument. In that way it is possible to re-use a JCA Function Call definition, only supplying new argument values.</Description>
      <HelpID>/progguide/functions_jca/jca.setfunctionargvalue</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ps.acquire.lock</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  ps.acquire.lock( string id )</Syntax>
      <Description>Tries to acquire a process lock. The lock to acquire is identified by the specified id. This may be any string value. When a lock has already been acquired by another 3GL/4GL process, then the current process will be suspended and registered as waiting for the lock to be released. It may be that other processes want to acquire the lock as well. All processes waiting for a lock are handled in a FIFO (first in first out) way.</Description>
      <HelpID>/progguide/functions_pslock/ps.acquire.lock</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ps.is.locked</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean  ps.is.locked( string id )</Syntax>
      <Description>Tests if the lock identified by the specified id has been acquired by any process, including the current 3GL/4GL process.</Description>
      <HelpID>/progguide/functions_pslock/ps.is.locked</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>ps.release.lock</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void  ps.release.lock( string id )</Syntax>
      <Description>Releases the lock identified by the specified id. If any other 3GL/4GL processes are waiting for this lock to be released, then the one that is waiting the longest time will acquire it.</Description>
      <HelpID>/progguide/functions_pslock/ps.release.lock</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>saas.bse.is.multi.tenant.enabled</Name>
      <ScriptType>all</ScriptType>
      <Syntax>boolean saas.bse.is.multi.tenant.enabled( )</Syntax>
      <Description>Returns TRUE if the current BSE is multi-tenant enabled; FALSE otherwise. A BSE is multi-tenant enabled if the directory ${BSE}/tenant_config exists.</Description>
      <HelpID>/progguide/functions_saas/saas.bse.is.multi.tenant.enabled</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>saas.get.tenant.id</Name>
      <ScriptType>all</ScriptType>
      <Syntax>string  saas.get.tenant.id( )</Syntax>
      <Description>Returns the tenant id of the tenant under which the user is logged in. If the user is not logged in under a tenant then the empty string is returned.</Description>
      <HelpID>/progguide/functions_saas/saas.get.tenant.id</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.abort.client.server</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>void par.abort.client.server( string error.message )</Syntax>
      <Description>This function can be used in the client as well in the server. When there are (application) problems in the client or server, an abort message will be sent to the client and all servers. After this function call, all servers are stopped and all communication will be ended.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.abort.client.server</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.close.servers</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.client.close.servers( long group.id )</Syntax>
      <Description>This function will close all servers in a group. Normally this call should only be done when all servers are ready, so after a call to par.client.wait.ready(). Closing the servers means that the application servers will terminate.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.close.servers</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.get.message</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.client.get.message( long group.id , ref string comm.string )</Syntax>
      <Description>This function will check if a message has been sent by one of the servers in the indicated server group. A server process can sent a message back to the client with the function: par.server.send.message(). This function will not wait for any messages from a server process.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.get.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.get.status</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.client.get.status( long group.id , long server.number , ref long messages )</Syntax>
      <Description>Returns the current status of the specified server.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.get.status</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.running</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.client.running( )</Syntax>
      <Description>This function will return whether the current session is running in parallel processing client mode. It will be true when function par.init.client.to.server() was called successfully. This function can be useful in DLL’s.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.running</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.send.message</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.client.send.message( long group.id , string comm.string  [, long server.number] )</Syntax>
      <Description>Send a message to the indicated group or application server. When a server.number is passed, the message is sent to that particular server. Otherwise the message is sent to the first server in the group which is ready. This function will wait until the message has been sent to a server. This does however not mean that the message is already processed by this server when this function returns. When not in CONTINUE_ON_SERVER_ERRORS mode, this function will return false when one or more servers are in error state. When in CONTINUE_ON_SERVER_ERRORS mode the following rules are applied: When a specific server.number is supplied and this particular server is in an error state, this function will return false.When no server.number is supplied this function will return true as long as there is one server available to which this message can be sent.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.send.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.start.servers</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.client.start.servers( long group.id  [, long options] )</Syntax>
      <Description>This function is used to actually start the application servers (Bshells) for the indicated group.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.start.servers</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.client.wait.ready</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.client.wait.ready(  [long group.id]  [, long server.number] )</Syntax>
      <Description>This function will wait until servers are ready with processing messages. When no group.id and no server.number are specified, this function will wait for all servers in all groups to become ready. When only a group.id is specified, this function will wait for all servers in the specified group to become ready. When both a group.id and a server.number is specified, this function will wait for one specific server to become ready. When not in CONTINUE_ON_SERVER_ERRORS mode, this function will return false when one or more servers are in error state. When in CONTINUE_ON_SERVER_ERRORS mode the following rules are applied: When a specific server.number is supplied and this particular server is in an error state, this function will return false.When no server.number is supplied this function will return true as long as there is one server available to which messages can be sent.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.client.wait.ready</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.get.no.of.server</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.get.no.of.server( )</Syntax>
      <Description>This function will return the number of servers configured for this client session. See the section Parallel Application Processing Configuration.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.get.no.of.server</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.init.client.to.server</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.init.client.to.server( long nr.of.servers , string server.session  [, string support.session] )</Syntax>
      <Description>This function is used to initialize the client to server communication for one group. Starting the application servers (Bshells) will be done when the function par.client.start.servers() is called.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.init.client.to.server</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.init.server.to.client</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.init.server.to.client( ref long group.number , ref long server.number  [, ref long tot.nr.servers] )</Syntax>
      <Description>This function is used to initialize the communication to the client. This function must be called rather in the beginning of a program which can be started as server. This because of the fact that the client function has a time out time (default 2 minutes) on starting each server (receiving the 'known' command).</Description>
      <HelpID>/progguide/functions_parallel_processing/par.init.server.to.client</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.get.message</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.server.get.message( ref string comm.string )</Syntax>
      <Description>This function will inform the client that this server is ready and wait for a new message from the client.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.get.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.id</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.server.id( )</Syntax>
      <Description>This function will return the identification of a server within its group. This function can be useful in includes or DLL’s to determine if the session is running in the context of parallel processing.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.id</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.retry.hit</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>void par.server.retry.hit( )</Syntax>
      <Description>This function must be called in a server after a real db.retry.hit() call. When this function is called x times and x = MAX.RETRY-1, this function will do an abort of the client server communication with the abort message "Too many retry hits in server". See section: Database Retries for a further explanation.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.retry.hit</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.retry.point</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>void par.server.retry.point( )</Syntax>
      <Description>This function is used for setting a not real retry point after a db.retry.point (). It must be used together with function par.server.retry.hit(). See section: Database Retries for a further explanation.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.retry.point</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.running</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.server.running( )</Syntax>
      <Description>This function will return whether the current session is running in parallel processing server mode. It will be true when function par.init.server.to.client() was called successfully. This function can be useful in DLL’s.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.running</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.send.message</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.server.send.message( string comm.string )</Syntax>
      <Description>Send a message to the client. This function will return as soon as the message has been sent. Note This function is not intended to sent a high volume of messages from the server to the client. This function is also not intended to ask the client for additional information during processing a client message.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.send.message</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.server.question</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.server.question( string question , ref string answer )</Syntax>
      <Description>This function can be used by a server session to send a question message to the "support" session in the client. The "support" session in the client must use function par.support.get.question() to receive questions from server processes and function par.support.send.answer() to sent an answer message to the server. The function par.server.question() waits until an answer message is received from the "support" session.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.server.question</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.support.get.question</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>long par.support.get.question( ref string question )</Syntax>
      <Description>This function will wait for a question message from any server. When this function returns -1, the support session must end processing and exit.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.support.get.question</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.support.init</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.support.init( ref long group.number , ref long tot.nr.servers )</Syntax>
      <Description>This function is used to initialize the communication for a support session. This function must be called at the start of a session which can be used as a parallel processing support session. A session which acts as a parallel processing support session is used to handle questions from parallel processing servers. A parallel processing support session cannot at the same time be a parallel processing client session or a parallel processing server session. Usually a support session runs without a user interface. Therefore such a session must call function tc.ignore.process() during startup.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.support.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.support.running</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.support.running( )</Syntax>
      <Description>This function will return whether the current session is running in parallel processing support session mode. It will be true when function par.support.init() was called successfully. This function can be useful in DLL’s.</Description>
      <HelpID>/progguide/functions_parallel_processing/par.support.running</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>par.support.send.answer</Name>
      <ScriptType>3GL</ScriptType>
      <Syntax>boolean par.support.send.answer( string answer , long server.number )</Syntax>
      <Description>Send an answer message to a server session. This function will return as soon as the message has been sent. Note This function should only be used after a successful call of function: par.support.get.question()</Description>
      <HelpID>/progguide/functions_parallel_processing/par.support.send.answer</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>bind.image</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean bind.image( string fieldname , string guidField  [, string tablename] )</Syntax>
      <Description>This function is used bind an image form field to the (table) field which holds the application GUID value. This function must be called from the after.form.read: section in the application UI script.</Description>
      <HelpID>/progguide/functions_images/bind.image</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>check.image.present</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean check.image.present( string guid  [, string tablename] )</Syntax>
      <Description>This function will check if an image set is already present in the repository.</Description>
      <HelpID>/progguide/functions_images/check.image.present</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>save.image.field</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean save.image.field( string fieldname )</Syntax>
      <Description>This function is used to save an image, which is dropped onto the image control, into the repository or delete the image from the repository if deleted by the user. When an image with the bound guid already exists, it will be overwritten. This function should be called from the after.update.db.commit: section in a UI script and is only allowed when the image field is bound using bind.image()</Description>
      <HelpID>/progguide/functions_images/save.image.field</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>save.image.file</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean save.image.file( string guid , long sequence , string pathname  [, string tablename] )</Syntax>
      <Description>This function will save an image file into the image repository (put it at proper place in directory and update the image table). This function can be used by an image import application.</Description>
      <HelpID>/progguide/functions_images/save.image.file</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>copy.image</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>long copy.image( string source.guid , string source.tablename , string target.guid , string target.tablename  [, boolean overwrite] )</Syntax>
      <Description>This function will copy an image or set of images based on its guid into then image repository refered by the target guid. This function can be used when copying records.</Description>
      <HelpID>/progguide/functions_images/copy.image</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>discard.changed.image</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>void discard.changed.image( string fieldname )</Syntax>
      <Description>This function will discard an image which was possibly dropped on an image control and discard the saved backup image after a delete. This function is usually called from the after.choice section of choice: recover.set.</Description>
      <HelpID>/progguide/functions_images/discard.changed.image</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>is.image.dropped</Name>
      <ScriptType>4GL</ScriptType>
      <Syntax>boolean is.image.dropped( string fieldname )</Syntax>
      <Description>This function can be used to check if an image has been dropped onto the image field or the image is deleted which is not yet saved or discarded.</Description>
      <HelpID>/progguide/functions_images/is.image.changed</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.addMethod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void soap.addMethod( long soapMessage , long method )</Syntax>
      <Description>Adds the specified Method to the Body of the SOAP Envelope of the given SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.addMethod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.deleteMessage</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void soap.deleteMessage( ref long soapMessage )</Syntax>
      <Description>Deletes the specified SOAP Message from memory, including all contained data. When the SOAP Message contains a SOAP Envelope, the SOAP Envelope is deleted as well. The passed soapMessage handle is set to 0 on return.</Description>
      <HelpID>/progguide/functions_soap/soap.deleteMessage</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.getBody</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.getBody( long soapMessage )</Syntax>
      <Description>Returns the Body of the SOAP Envelope of the given SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.getBody</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.getEnvelope</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.getEnvelope( long soapMessage )</Syntax>
      <Description>Returns the SOAP Envelope of the given SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.getEnvelope</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.getFault</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.getFault( long soapMessage )</Syntax>
      <Description>Returns the Fault which is contained in the Body of the SOAP Envelope of the specified SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.getFault</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.getHeader</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.getHeader( long soapMessage )</Syntax>
      <Description>Returns the Header of the SOAP Envelope of the given SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.getHeader</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.getMethod</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.getMethod( long soapMessage )</Syntax>
      <Description>Returns the Method which is contained in the Body of the SOAP Envelope of the specified SOAP message.</Description>
      <HelpID>/progguide/functions_soap/soap.getMethod</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.init</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.init( )</Syntax>
      <Description>Initializes the SOAP client.   </Description>
      <HelpID>/progguide/functions_soap/soap.init</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.invoke</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.invoke( long soapMessage , const string url , ref long responseMessage )</Syntax>
      <Description>Invokes a SOAP request as specified by the given SOAP Message. The request is sent to a SOAP service which is identified by the specified url. On return the response SOAP Message is returned in the responseMessage argument.</Description>
      <HelpID>/progguide/functions_soap/soap.invoke</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.newMessage</Name>
      <ScriptType>all</ScriptType>
      <Syntax>long soap.newMessage( const string soapNsURI )</Syntax>
      <Description>Creates a new SOAP Message, including a new SOAP Envelope and returns a handle to the new SOAP Message. The new SOAP Envelope will be created based on the specified SOAP namespace URI. The newly created SOAP Envelope will have the following layout: &lt;?xml version="1.0"?&gt; &lt;soap:Envelope&gt; xmlns:soap="&lt;soapNsURI&gt;" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt; &lt;soap:Header/&gt; &lt;soap:Body/&gt; &lt;/soap:Envelope&gt; The specified soapNsURI will be used to fill in the xmlns:soap namespace declaration.</Description>
      <HelpID>/progguide/functions_soap/soap.newMessage</HelpID>
   </Function>
   <Function Deprecated="no">
      <Name>soap.setAction</Name>
      <ScriptType>all</ScriptType>
      <Syntax>void soap.setAction( long soapMessage , const string soapAction )</Syntax>
      <Description>Sets the SOAP Action of the specified SOAP Message. This action is sent together with the the SOAP Envelope to the SOAP service.</Description>
      <HelpID>/progguide/functions_soap/soap.setAction</HelpID>
   </Function>
</FunctionList>