>>>>* Program: SEGMENT.H >>>>* Description: VFP Language Extension - Segment Blocks >>>>* Created: 05/19/2019 08:07:03 EST >>>>* Developer: Gregory Lynn Reichert (GregReichert70@GMail.com) - UT #046387 >>>>* Compiler: Visual FoxPro 09.00.0000.7423 for Windows >>>>* Abstract: >>>>* Copyright: Copyright (c) 2019 GLR Software >>>>*============================================================ >>>>*--- Description -------------------------------------------- >>>>* FOR BETTER CODE READABILITY ONLY. >>>>* Creates a looping structures using a plain DO WHILE .T. / ENDDO. >>>>* >>>>*--- Maintenance -------------------------------------------- >>>>* Id Date By Description >>>>* 1 05/19/2019 GLR Initial Creation >>>>* 2 11/20/2019 GLR Added Tokens to fdkeywrd.dbf, and distibuted to all folder locations. >>>>* 3 07/07/2021 GLR Corrected the updating the Beautify utility use indent the SEGMENT blocks. >>>>* >>>>*--- Rules -------------------------------------------------- >>>>* - Follows the basic rules that apply to the DO WHILE / ENDDO commands. >>>>* - BEGIN_SEGMENT must have a END_SEGMENT. >>>>* - Any text following a SEGMENT command are ignored. The only exception is the BEGIN_SEGMENT; An .AND.<condition> can be added to extend the loop condition. >>>>* ( I use quote a string to help identify the Segment block. ) >>>>* >>>>*--- History ------------------------------------------------ >>>>*--- ToDo --------------------------------------------------- >>>>*------------------------------------------------------------ >>>>* Granting permission to write to the VFP folder. >>>>* 1. I selected the "C:\Program Files (x86)\Microsoft Visual FoxPro 9\" folder in the File Manager. >>>>* 2. Right-clicked the folder, and selected the "Properties". >>>>* 3. Selected the "Security" tab at the top. >>>>* 4. Clicked the "Edit..." button to open the "Security" dialog. >>>>* 5. In the "Group or user names:" listbox, selected the "users (SNOOPY\Users)" item. (computer name may vary on your machine.) >>>>* 6. In the "Permission for Users" listbox, checked the "Full Control" checkbox. >>>>* 7. Clicked the "Apply" button. A moment later... >>>>* 8. Clicked the "Ok" button to exit the "Security" dialog. >>>>* 9. Clicked the "Ok" button to close the "Properties" dialog. >>>>* 10. Now the VFP folder has the permission to be writen to. >>>>* >>>>*------------------------------------------------------------ >>>>*** Update the tables used by the Beautify.app and Documentation Wizard. >>>>* >>>>* Original Copies of the DBF are located in: >>>>* HOME() >>>>* HOME()\Tools\Analyzer >>>>* HOME()\Tools\xsource\VFPSource\Wizards\wzfoxdoc >>>>* HOME()\Wizards >>>>#IF .F. >>>> * After establishing write permission to the VFP folder. Run this code. >>>> CLOSE ALL >>>> SELECT * FROM (HOME()+"tools\analyzer\fdKeywrd.dbf") WHERE Token="Begin_Segment" INTO ARRAY aSegement >>>> IF _TALLY=0 >>>> INSERT INTO (HOME()+"tools\analyzer\fdKeywrd.dbf") (Token, CODE) VALUES ("Begin_Segment","I") >>>> INSERT INTO (HOME()+"tools\analyzer\fdKeywrd.dbf") (Token, CODE) VALUES ("End_Segment","U") >>>> ENDIF >>>> SELECT * FROM (HOME()+"wizards\fdKeywrd.dbf") WHERE Token="Begin_Segment" INTO ARRAY aSegement >>>> IF _TALLY=0 >>>> INSERT INTO (HOME()+"wizards\fdKeywrd.dbf") (Token, CODE) VALUES ("Begin_Segment","I") >>>> INSERT INTO (HOME()+"wizards\fdKeywrd.dbf") (Token, CODE) VALUES ("End_Segment","U") >>>> ENDIF >>>> >>>> SELECT * FROM (HOME()+"Tools\xsource\VFPSource\Wizards\wzfoxdoc\fdindent.dbf") WHERE Token="Begin_Segment" INTO ARRAY aSegement >>>> IF _TALLY=0 >>>> INSERT INTO (HOME()+"Tools\xsource\VFPSource\Wizards\wzfoxdoc\fdindent.dbf") (Token, CODE) VALUES ("BEGIN_SEGMENT","I") >>>> INSERT INTO (HOME()+"Tools\xsource\VFPSource\Wizards\wzfoxdoc\fdindent.dbf") (Token, CODE) VALUES ("END_SEGMENT","U") >>>> ENDIF >>>> CLOSE ALL >>>>#ENDIF >>>> >>>>*--- Examples ----------------------------------------------- >>>>#IF .F. >>>> ASSERT .F. >>>> opt = 1 >>>> BEGIN_SEGMENT "Test" >>>> DO CASE >>>> CASE opt=1 >>>> opt = 3 >>>> CONTINUE_SEGMENT "Test" && jump to '* do something' line. >>>> CASE opt=2 >>>> EXIT_SEGMENT "Test" && exit segment block >>>> CASE opt=3 >>>> opt = 2 >>>> REPEAT_SEGMENT "Test" && jump to start of segment >>>> ENDCASE >>>> * do something >>>> BEGIN_SEGMENT "something" >>>> * do more >>>> EXIT_SEGMENT "something" >>>> END_SEGMENT "something" >>>> END_SEGMENT "Test" >>>>#ENDIF >>>>*------------------------------------------------------------ >>>>* Directives Code Keywords. >>>> >>>>#DEFINE BEGIN_SEGMENT DO WHILE .T. >>>>#DEFINE CONTINUE_SEGMENT * CONTINUE Segment >>>>#DEFINE EXIT_SEGMENT EXIT >>>>#DEFINE REPEAT_SEGMENT LOOP >>>>#DEFINE END_SEGMENT ENDDO >>>> >>>>* >>>>* EOF SEGMENT.H >>>>* >>>>>>>>
>>>BEGIN_SEGMENT "Test" >>>#define Test AND >>>BEGIN_SEGMENT Test >>>>>>
>>>Do While .T. && Loop1 >>> ... >>>ENDDO &&.T. Loop1 >>>>>>Where the enddo is created by intelliscript, but this is a matter of taste.
>>> BEGIN_SEGMENT "something" >>> * do more >>> EXIT_SEGMENT "something" >>> END_SEGMENT "something" >>>>>>A bit superfluous code. Needless slowdown.
>>>#DEFINE Start_SEGMENT * >>>#DEFINE Stop_SEGMENT * >>> >>>Start_SEGMENT "something" >>> * do more >>>Stop_SEGMENT "something" >>>>>>might do
>>>? 2; >>> Start_SEGMENT 3 >>>>>>
>>>*SEGMENT "something" >>>?"do more" >>>*/SEGMENT "something" >>>>>>or short
>>>*something
>>>?"do more"
>>>*/something
>>>
>>>