tà~ödðõdjUSE_RCRD?N€ƒÙá#?S€ƒn}DCTUTOR1ˆ�Â}óaAºôd”}?Sdl.Q?Sø¾Pœ}‡?îAátödZ}?S‡?Ä}ÔrºôdrƒdƒtödÜ}Œ¯‡?Ë��ËEƒ÷”æ}&ìNAü}è)KŸ�ËE悹“~|ìN‘~è)K��ËEÊ‚>N &~4ìNª<~è)Ë��ËE„‚ëIF~PìN\~è)Kž�ËE>‚ðÊHf~ØìNx~Ùè)d“ËEKŸ/”~k§&ÞÊd/ ÞÊdÙ È‚¦~%§& ¸~™Ù ȸ~¢è)ËEÜ�Ì%Â~PìNØ~Ùè)Ë��~€¸6%â~ìNð~è)?Sg@ï@_APPMAIN «à-d8?S‚^(wyDBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö—1à—1` —1ì—1�—1„—1^ —1n —1–—1@—1&—1~ O)L O The tutor is a program which works interactively with the dCLIP dot prompt to actually parse out commands to the dot prompt to be executed. Tutor will remember where you left off at your last tutoring session when you return to the tutor with the TUTOR command. To locate a specific command or function press F then enter the command or function name. The tutor screens and command lists are all stored in the DCTUTOR.DBF database and are classified as General information, Commands, or Functions. Commands and Functions are indexed in the same order as the pages of the manual. The command/function name and reference manual page number will be displayed at the top of each screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ command, however, all Clipper commands and functions are supported exactly as they will function in your compiled and linked .EXEs. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö There are a number of assumptions made to insure that this tutorial functions properly and that all the commands will execute satisfactorily from the dot prompt. Several demo or example files are included in your dCLIP distribution and will be used in this tutorial. Make sure that you run the tutorial program with SET DEFAULT TO and that you currently have selected the dCLIP directory which contains the following files: BASEBALL.DBF, TEAM.NTX, PLAYER.NTX, SALES.DBF  PROCEDURE commands allow you to call procedures or complete expressions simply by typing a mapped alias. PROCEDURE commands are mapped to the dot prompt by SET PROCEDURE TO or PROC= in DCLIP.SYS. Let's create and run a new command which will invoke an expression for reading and editing a file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶ or BATCH= in DCLIP.SYS. Let's create and run a new command which will call run the DEMO.DCB batch file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G The ? command outputs an expression to the screen on a new line. The ?? command outputs an expression to the screen at the current cursor position. Let's say 'Hello World' DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~ This command prompts for entering a string from the keyboard into a specified memory variable. Let's enter a string variable into a memvar named STRING. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4 The CD command works exactly like the CD/CHDIR command at DOS for changing current DOS directory. Let's go back one directory with CD.., then select the \DCLIP25 directory. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG CLEAR TYPEAHEAD removes all pending keys from the keyboard buffer. Let's stuff the keyboard buffer with 'this is a test' and then clear it before entering a WAIT state. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP� COMMIT flushes the database and index buffers to DOS. Let's create a new file named JUNK.DBF from BASEBALL.DBF and append 1 record. Then let's have dos report the file size before and after using the COMMIT command. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3 CONTINUE resumes the pending LOCATE in the current database. Let's locate and display the PLAYER, TEAM, and POSITION in BASEBALL.DBF for all first basemen using the LOCATE and CONTINUE commands. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ Use this command to copy all or part of the current database to a new database. Let's create a new file named JUNK.DBF from the first basemen records in BASEBALL.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG This command will create an empty database file with the same structure as the currently selected database file. Let's create a file name JUNK.DBF with the same structure as BASEBALL.DBF and display the new structure of JUNK.DBF DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ This command is used to create a new database file. Let's create a database named JUNK.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4 CREATE FROM is used to create a new database file from a structure extended file. Let's create a structure extended file name JUNK.DBF from the structure of BASEBALL.DBF, then let's create a new database named JUNK2.DBF from the JUNK.DBF structure-extended file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶]/ lists all files in which match the wildcard. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ DISPLAY MEMORY will display the contents of all memvars in the current procedure and all memvars which are PUBLIC to the current procedure. Let's create some memvars and display them. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf EDIT FILE is used to edit any ASCII file. This command can be used with the following syntax options: EDIT FILE [] EDIT [] Let's edit the READ.ME file using different syntax options. If you included EDIT= in DCLIP.SYS then your editor will be used, otherwise the dCLIP editor will be used. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶ is used to edit any .DBT memo field in the currently selected database. If a is not entered then EDIT MEMO will search the database for the first field of type "M" or "memo". Let's create a new database named JUNK.DBF from BASEBALL.DBF, modify the structure to add a new memo field named MEMO1, append a record to the new database and edit the MEMO1 memo field. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö—1à ERASE/DELETE file will remove any dos file from the disk. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 FIND will search an index file for the first key which matches the specified character expression and position the record pointer to the corresponding record. Let's Find "Foster" in BASEBALL.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î GOTO moves the record pointer in the currently selected database to a specified number. Let's goto record number 10 of BASEBALL.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ INDEX will create a file that contains an index to records in the current database file. Let's create an index for BASEBALL.DBF on the field POSITION then display the records of BASEBALL.DBF in the new indexed order. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´ INKEY is used to display the INKEY() value and LASTKEY() value of any key pressed. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,» INSERT will insert blank records into the current database starting from the current record pointer. Let's create JUNK.DBF from BASEBALL.DBF and insert 3 blank records starting at record number 5. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î INPUT is used to enter an expression from the keyboard and place the result in a specified memory variable. Let's input a number to the memvar NUMBER. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Î KEYBOARD stuffs the keyboard buffer with a string of characters. Let's create a GET on the screen and stuff the characters: 'Hello from the tutor' into the GET. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶ LIST is used to sequentially access records in the current work area, listing the result of one or more expressions for each record processed. Let's list the records from BASEBALL.DBF using different field lists and conditions. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G LOCATE will search for the first record in the current database that matches the specified condition. Let's locate the first record with a PRES_VALUE greater than 1.50 in the National League. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3 MODIFY STRUCTURE is used to change the structure of the currently selected database and restore all the data in the file. Let's copy BASEBALL.DBF to JUNK.DBF and then modify the structure of JUNK.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê PACK will physically remove from the current database file all records which have been marked for deletion. Let's create JUNK.DBF from BASEBALL.DBF, mark for deletion all first basemen, then PACK the file. Note the record count before and after the PACK. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶ is used to load the names of procedures into an EXCLUSION table to skip by (turn debug off) on specified procedures when source-level debugging or trace debugging. Let's run the DEMO.OBJ program with the source-level debugger on, but first put DEMO in the PROC table so the source code for the main menu will not display. Next, let's add CALC to the PROC table and run the demo program again. Notice this time that when you select the calculator, the source code will not display. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö—1à—1` —1ì—1�—1„—1^ —1n —1–—1@— PROC CLEAR is used to remove procedure names from the PROC table. Let's add four procedures to the PROC table, remove the 3rd procedure with PROC CLEAR 3 and next remove all procedures with PROC CLEAR. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3 QUERY is used to build a complex filter condition from popup tables of data fields, relational fields, and mathematical operators and places the condition string in for later use or saves the queries to the DCQUERY.DBF data file. Let's create a query string named MY_QUERY from the query builder and locate a record based on the MY_QUERY condition. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ RENAME is used to rename a file to a new name. Let's create a file named JUNK.PRG then rename it to NEWJUNK.PRG. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG REPLACE is used to change the contents of fields to the results of the specified expressions. Let's copy BASEBALL.DBF to JUNK.DBF, replace the team in record 10 to MARINERS, then let's transfer all players from the DODGERS to the MARINERS. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3& SAVE is used to save memory variables to a memory (.MEM) file. Let's create some memvars, save them to JUNK.MEM, release the memvars from memory, then restore them back to memory from JUNK.MEM. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶< SELECT is used to change the current work area. SELECT will select work area number . SELECT 0 will select the first unused work area. SELECT will select the work area in which is open. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Î RESTORE SCREEN is used to redisplay a previously save screen. Let's paint a box on the screen, save the screen to a memvar named OLDSCREEN, then restore the screen from OLDSCREEN. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ is used to display the current setting of any SET value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà SET ALTERNATE is used to direct output from commands to a text file or to read the current SET ALTERNATE setting. Let's rout the printed output to JUNK.ALT. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ SET COLOR is used to define the color for the next screen painting. Let's change some colors on the screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP SET COMMAND is used to create a command to run another program from the dot prompt. Let's create a command alias named DW so every time we type DW at the dot prompt we will display the current dos directory in wide format. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶ SET CONSOLE is used to toggle the output of commands to the screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V SET CURSOR is used to toggle the screen cursor on and off. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 SET DATE is used to set the format of the date type for display, date function arguments, and date function return values. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G SET DECIMALS is used to set the number of decimal places displayed for the reults of numeric function and calculations. SET DECIMALS is enabled only when SET FIXED is ON. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶< SET DELIMETERS is used to define the characters to delimit GETS. SET DELIMETERS TO set the value of the delimeters. SET DELIMETERS ON/OFF toggles delimeters on and off. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(Gˆ SET ESCAPE toggles the ability to terminate a READ with the ESCAPE key. Let's look at the action of a get with ESCAPE ON, then with ESCAPE OFF. ** When ESCAPE is OFF, you may still terminate the get with ** ** the ENTER key ** DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶ SET FUNCTION is used to assign a character string to a function key. Let's stuff key F2 with a string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(Gˆ SET INDEX is used to open the specified index file(s) in the current work area. Let's list BASEBALL.DBF first with no index, then with the TEAM.NTX index active, followed by the PLAYER.NTX active. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶< SET INTENSITY is used to toggle the display of GETS and menu PROMPTS between enhanced and standard color settings. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG SET KEY is used to allow a procedure to be executed from any wait state when a designated key is pressed. Let's load DEMO1.OBJ into memory and set key F2 to call the procedure CALC which is located in DEMO1.OBJ. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶< SET MARGIN is used to set the left margin for all printed output. Let's send the output of the printer to a file named JUNK.PRN, write some stuff to the printer with different margins, then type the contents of JUNK.PRN. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Î SET MESSAGE defines the screen row where the @...PROMPT...MESSAGES are displayed. Let's paint a 3-item menu and set the message line to center the messages on line 15. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê, SET PRINTER TO is use to set the destination of printed output. The default is LPT1. Let's send the printed output to a file named JUNK.PRN and then type the contents of JUNK.PRN DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü SET RELATION is used to relate two work areas using a key expression, record number or numeric expression. Let's set a relation from the COMMAND field in DCHELP.DBF to the COMMAND field in DCTUTOR.DBF. When we locate a record in DCHELP.DBF, the relation set to DCTUTOR should automatically move the record pointer to the field which matches the key expression. When you come back into the tutor the SET PROMPT screen should be displayed. Press the down arrow key to get back to this screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö—1à—1` —1ì—1�—1„—1^ —1n —1–—1@—1&—1~ O)L O SET SCOREBOARD is used to toggle the display of messages within the READ and MEMOEDIT() on and off. The scoreboard is displayed on line 0 of the display. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 SET UNIQUE is used ot toggle the inclusion of non-unique keys when creating a new index file. Let's list the records in BASEBALL.DBF using the index TEAM.NTX which was create with SET UNIQUE OFF. Next, let's create a new index named JUNK.NTX with SET UNIQUE ON and list BASEBALL.DBF again. Notice how each team appears only one time in the index. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶ SKIP is used to move the record pointer to a new position relative to the current pointer position. Let's skip through the BASEBALL.DBF database. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b SUM will sum a series of numeric expressions to memory variables for a range of records in the current work area. Let's sum the original price and the present value of our American League baseball cards and display the results. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶ TYPE is used to display the contents of a text file to the screen, optionally echoing the display to the printer or another text file. Let's TYPE the READ.ME file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ will bypass the main menu and go right to the menu selection. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(G ZAP will empty out all the records from the current database, memo and any associated index files which are open in the current work area. Let's create JUNK.DBF from BASEBALL.DBF and then ZAP IT!! DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+ DC_LOG() is used to log the current status of your application to a log file. The default log file is DCLIP.LOG. DC_LOG() allows up to 5 parameters for passing information. See the READ.ME file for more information about how to use DC_LOG() if your manual does not include the DC_LOG() function or at the dot prompt type: HELP DC_LOG(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG Third-party functions are supported in the following manner: 1. If the third-party function is written in C or ASSEMBLY, then it must be "linked" into a custom dCLIP engine which you will build from the dCLIP libraries and the RTLINK or PLINK86 linker. 2. If the third-party function is written in Clipper-code, then it may be loaded into memory with the OBJ command or you can place all your third-party clipper compiled objects into a special dynamic library. 3. See the dCLIP LIBRARIES section for more information about using third-party products with dCLIP. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞ DC_ADDREC() appends a record to the current databse and locks the new record. Use DC_ADDREC() instead of APPEND BLANK if you are using the file in shared mode on a network (set exclusive off). Example: IF DC_ADDREC() REPL id with RECNO() UNLOCK ENDIF DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶) will paint the lookup table starting at row . DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, DC_CURPATH() will return a full drive letter and path specification fro the specified drive or for the current drive if no drive is specified. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1Ö—1à—1` —1ì—1�—1„—1^ —1n —1–—1@—1&—1~ O)L DC_DBINDEX() is a friendly way of opening an index file without the possibility of a DOS ERROR 2 in the event that the file can't be found. Optional parameters will create the index from the "key" passed to DC_DBINDEX() if it cannot be found. Let's use BASEBALL.DBF then open TEAM.NTX using DC_DBINDEX(). Next let's create a new index named JUNKFILE.NTX using DC_DBINDEX(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶) is used to search all work areas for the passed and exit with the alias selected. If the alias is found, then the work area is changed to the work area of the alias and a .true. is returned. If the alias cannot be found, then the work area remains unchanged and a .false. is returned. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶) will display the contents of an array on the console. DC_DISPARR(,) will output the contents of an array to text file . DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶) will display the contents of .MEM. DC_DISPMEM('',) will write the current memvar status to text file . DC_DISPMEM('','PRN') will write the current memvar status to the printer. DC_DISPMEM(,) will write the contents of .MEM to the text file . DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶ DC_DISPTM() will display the time (including AM/PM) at the location of passed parameters and wait for a key pressed. Any procedures which have been loaded by the DC_KEYLOAD() function will be called if the appropriate key has been pressed. DC_DISPTM() returns both the INKEY() value and CHR() value of the key pressed in two memvars which must be pre-initialized before calling DC_DISPTM(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ DC_FIELDS() will pop-up a list of primary and relational fields for selecting a field and will return the name of the selected field preceded by the ALIAS if the field selected is a relational field. DC_FIELDS(10,'ND') will pop-up the list starting at column 10 and will allow only Numeric or Date fields to be selected. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Î DC_INKEY() is a replacement for INKEY() when it is desirable to call specified procedures when certain keys are hit or just return the INKEY() value of the key hit if the key hit is not one of the specified keys. DC_INKEY() works with DC_KEYLOAD(). First, the list of desired procedure calls must be loaded into memory with the DC_KEYLOAD() function. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Š DC_MEMO() is used to explode a memo window anywhere on the screen with defined borders, colors, titles, and options for editing, viewing, word-wrap, or printing. The below commands use DC_MEMO() to edit and save the READ.ME file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3 DC_MPRINT() is used to output a memo field or text file to the printer. The below commands copy the contents of the DEMO1.PRG file to with special margins and page formatting to a new file named JUNK.TXT. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3& DC_PACK() is used to pack database files with memo (.DBT) files. DC_PACK() removes the dead space from .DBT files which is created by constant editing of memo fields and reduces the .DBT size to the smallest possible size. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Î DC_PREADY() is used to allow the user to abort a print routine with the escape key and checks for printer ready condition during printout routines. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶, then use the DC_PRTSC() function. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶< DC_SETSTEP() is used to turn on or off STEP mode. DC_SETSTEP(.t.) turns on the source code window on the next line of code. DC_SETSTEP(.f.) turns off the source code window. Let's create, compile, and execute a program named DC_CLIP.OBJ using the dCLIP / command. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V— ACHOICE() executes a pop-up menu to select an array element from a set of menu items. Let's create an array from a list of database fields and then use ACHOICE() to select a field. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶y ARRAY() is used to create an array of specified length. Let's use ARRAY() to create a 2-dimensional array for holding the field name and field type of each field in BASEBALL.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶ DBCREATE() is used to create a database file from a database structure array. First let's create a database structure array named F by using the AADD() function to add elements to the array, then let's create a new file named JUNK.DBF from the F array using the DBCREATE() function. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà ASORT() is used to sort an array. Let's create an array from BASEBALL.DBF and sort the fields. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü CURDIR() is used to display the current selected directory of any specified drive. Let's return the current directory on the currently selected drive, then on drive D: DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Š ALLTRIM() is used to remove all leading and trailing spaces from a character string. Let's ALLTRIM() the spaces from " this is a test ". DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b BIN2L() is used to convert a 32-bit signed integer to a numeric value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b BIN2W() is used to convert a 16-bit unsigned integer to a numeric value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À BOF() is used to determine when beginning-of-file is encountered. Let's use BASEBALL.DBF then skip to the beginning of file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf CDOW() is used to convert a date value to a character day of the week. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b CHR() is used to convert an ASCII code to a character code. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 CMONTH() is used to convert a date to a character month name. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 COL() is used to return the current screen cursor column position. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 CTOD() is used to convert a date string to a date value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 DATE() is used to return the current system date as a date value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 DAY() is used to convert a date variable to a day of the month as a numeric value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,» DBF() is used to return the alias of the currently selected data file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b DBFILTER() is used to return the current filter expression for any selected database. Let's set a filter on BASEBALL.DBF to TEAM='NL' then use DBFILTER to report the current filter setting. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 DIRECTORY() is used to create an array of directory and file information. Let's create an array named MYARRAY with the file information of all the *.DBF files in the current directory. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12—1 DOW() is used to convert a date value to a numeric day of the week. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V DTOC() is used to convert a date value to a character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 DTOS() is used to convert a date value to a character string formatted as yyyymmdd. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, EMPTY() is used to determine if the result of an expression is empty. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà, EOF() is used to determine when end-of-file is encountered. Let's skip to the end-of-file in BASEBALL.DBF and report EOF(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G ERRORBLOCK() is used to post a code block to execute when a runtime error occurs. Let's save the current dCLIP errorhandler to a memvar named DCLIPERROR, create a new error handler which simply uses the BREAK() function to break back to the dot prompt, then restore the original handler from DCLIPERROR. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) EXP() is used to calculate a numeric value that is equivalent to the value e (epsilon) raised to specified power - natural logarithm calculation: e**x. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶y FCREATE() is used to create a new binary file and/or truncate a binary file to zero length. Let's use FCREATE() to create a file named JUNK.TXT, fill it with some junk, then use FCREATE() to truncate the file to zero length. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶ FERASE() is used to delete a file from disk. Let's create a file named JUNK.DBF then use FERASE() to delete it. Next, let's try to delete a file that does not exist. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, FKLABEL() is used to return the function key name of a numeric function key argument. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, FKMAX() is used to return the number of function keys on the current machine. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ. FLOCK() is used to lock an open and shared database file. Let's open BASEBALL.DBF in shared mode and then try to delete some records first without a lock and then with a lock. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP FOUND() isused to determine if the previous search operation succeeded. Let's open BASEBALL.DBF and TEAM.NTX then perform an invalid seek and a valid seek. FOUND() will be used to report the validity of the seeks. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶ FREAD() is used to fill a buffer variable with characters read from a binary file. Let's use FREAD() to read the index key of DCTUTOR2.NTX into a variable named BUFFER. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ FSEEK() is used to set a binary file pointer to a new position. Let's use FSEEK() to go to the 22nd position of DCTUTOR1.NTX where the index key string is stored, then read the key. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´ IF() / IIF() is used to return the result of an expression based on a condition. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,», INDEXEXT() is used to return the default() index extension based on the database index driver currently linked into the application. If the NDX.OBJ module is linked into the application, INDEXEXT() will return '.NDX' otherwise it will return '.NTX'. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶ INDEXORD() is used to return the order position of the controlling index. Let's open BASEBALL.DBF with the TEAM.NTX and PLAYER.NTX index files and use INDEXORD() to display the controlling index key. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê, INKEY() is used to extract a character from the keyboard buffer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë INT() is used to convert a numeric value to an integer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð ISALPHA() is used to determine if the left-most character in a string is alphabetic. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, ISCOLOR() / ISCOLOUR() is used to determine if the current computer has color compatability. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) ISDIGIT() is used to determine if the leftmost character in a character string is a digit. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~ ISLOWER() is used to determine if the left-most character is a lower case letter. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø ISPRINTER() is used to determine if LPT1 is ready. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1 ISUPPER() is used to determine if the left-most character in a string is upper case. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, I2BIN() is used to convert a Clipper numeric variable to a 16-bit binary integer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø LASTKEY() is used to return the INKEY() value of the last key extracted from the keyboard buffer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â& LASTREC() is used to determine the number of records in the currently selected database. Let's count the number of records in BASEBALL.DBF and SALES.DBF. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A, LEN() is used to return the length of a character string or the number of elements in an array. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) LOG() is used to calculate the natural logarithm of a numeric value. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V— LOWER() is used to convert upper case characters to lower case. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 LTRIM() is used to remove leading spaces from a character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 LUPDATE() is used to return the last modification date of a .DBF file. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V MAX() is used to return the larger of two numeric or date values. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 MAXCOL() is used to determine the maximum visible screen column. Let's check MAXCOL(), then change the screen size and check MAXCOL() again. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 MLCOUNT() is used to count the number of lines in a character string or memo field. Let's create a memo string with 5 lines then use MLCOUNT() to count the number of lines. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î MOD() is used to return the modulus of two numbers. MOD() returns a number representing the remainder of the dividend divided by the divisor. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 NETERR() is used to determine if a network command has failed. Let's try using BASEBALL.DBF in shared mode, then use NETERR() to see if the USE succeeded. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3& NEXTKEY() is used to read the next pending key in the keyboard buffer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà OS() is used to return the operating system name. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—1 PADC() is used to pad the leftmost AND rightmost positions of a character, date, or numeric value with a fill character. PADL() is used to pad the leftmost position only. PADR() is used to pad the rightmost position only. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP PROCNAME() is used to return the name of the current or previously activated procedure or user-defined function. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GG PROW() is used to return the current row position of the printhead. Let's report the current printer row position, then let's send some output to a printer device re-routed to JUNK.PRN and check the printer row position again. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶) is the same as ? QQOUT() is the same as ?? DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~ READEXIT() is used to toggle the use of UPARROW and DNARROW as READ exit keys. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø READINSERT() is used to toggle the current insert mode for READ and MEMOEDIT(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø READKEY() is used to determine waht key was used to terminate a READ. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà, READMODAL() activates a full-screen editing mode for a GetList array. Let's create an array of two GETS using the default "GetList" get array, then use READMODAL() to edit the GET table. Next, let's copy the "GetList" array to a new array named "SaveGets" then clear the "GetList" array and use READMODAL() again, first to edit the empty "GetList" array (this should do nothing) then the "SaveGets" array which is the same as the original get list. DBF.¶<œ3&.¶<¶<  RECCOUNT() is used to determine the number of records in the currently selected database (.DBF) file. Let's check the RECCOUNT() of BASEBALL.DBF, then append a blank record and check it again. Next, let's delete the blank record, pack the file and chekc the RECCOUNT() again. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà, REPLICATE() / REPL() is used to return a string a specified number of times. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À RESTSCREEN() is used to display a saved screen region to a specified location. Let's display a box on the screen, then used SAVESCREEN() and RESTSCREEN() to move the box around on the screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø RLOCK() is used to lock the current record in the active work area. Let's use BASEBALL.DBF in SHARED mode then attempt to update a record first without locking the record, then again after locking the record using RLOCK(). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶ ROUND() returns a numeric value rounded to a specified number of digits. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-b ROW() is used to report the current screen row position of the cursor. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà RTRIM() is used to remove trailing spaces from a character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 SAVESCREEN() is used to save a screen region for later display. Let's display a box on the screen, then use SAVESCREEN() to save the screen to a memvar and RESTSCREEN() to move the box around on the screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3 SCROLL() is used to scroll a screen region up or down. Let's fill the screen with some characters, then use SCROLL() to scroll portions of the screen. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ. SETCURSOR() is used to set the shape of the cursor. SETCURSOR ( 0 ) - turn off cursor. SETCURSOR ( 1 ) - turn on underline cursor. SETCURSOR ( 2 ) - turn on lower half-block cursor. SETCURSOR ( 3 ) - turn on full block cursor. SETCURSOR ( 4 ) - turn on upper half-block cursor. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶< SETPOS() is used to move the cursor to a new position. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð SETPRC() is use to set the PROW() and PCOL() values for the printer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V SQRT() is used to return the square root of a positive number. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 STR() is used to convert a numeric expression to a character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V STRTRAN() is used to search and replace characters within a character string or memo field. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) STUFF() is used to delete and insert characters in a string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 SUBSTR() is used to extract a substring from a character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë TIME() is used to return the system time in character string format (hh:mm:ss). DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø TONE() is used to sound a speaker tone for a specified frequency and duration. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ TRANSFORM() is used to convert any value except code blocks and arrays into a formatted character string. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(Gˆ TYPE() is used to determine the type of an expression. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 UPDATED() is used to determine if any GET changed during a READ operation. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À UPPER() is used to convert lower case characters to upper case. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 USED() will determine if a database file is in USE. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð— VAL() is used to convert a character number to a numeric type. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4 VALTYPE() is used to determine the data type returned by an expression. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà, VERSION() is used to report the Clipper version. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,øœ.À-bà,V—1 Ë4ð—1À—12 WORD() is used to convert CALL command numeric parameters from double to integer. DBF.¶<œ3&.¶<¶<  ¶<ò ¶<¶<(¶<š ¶<œ3Vœ3V¶¶<Μ3´¶<¶<Šœ3&œ3Ê,¶<î+¶yf G+ GGP�(GˆÞn!Â&4ü) *~A,»,ø YEAR() is used to convert a date value to the year as a numeric value. DBF.<è2&.<<  <ò <<(<š <è2Vè2V<Îè2´<<Šè2&è2Ê,<î+yf G+ GGP�(GˆÞn!Â& O)~�+,øè-Àh,b,,Vã0 Arrays can be created by using the array {} designator curly brackets. Each parameter within the curly brackets will create an element in the array in which the contents of each element is the result of each parameter expression. Even multi-dimensional arrays can be created in this manner by using sub-sets of curly brackets. DBF.<è2&.<<  <ò <<(<š <è2Vè2V