MESSAGE "Writing forms procedures to library..." PROC Select_Forms() ; read list of form files on disk, match with descriptions in form table ; and place info in dialog box for user to select forms PRIVATE Form_Table, Main_Drv, New_Form_Dir, File_1, File_2, Form_Array, Form_Description, Button, Element PROC Get_Form_Info(Key) PRIVATE Form_Array GETRECORD Form_Table UPPER(Key) TO Form_Array if RetVal then Key = Form_Array["Memo"] else Key = "This file not listed in table of form names!" endif RETURN Key ENDPROC; Get_Form_Info PROC Process_Save_As_Dialog(TriggerType, TagValue, EventValue, ElementValue) PRIVATE FileInfo if (TriggerType = "SELECT") AND (TagValue = "Pick_Tag") then PARSEFILENAME Pick_File TO FileInfo File_Name = UPPER(FileInfo["FILE"]) REFRESHCONTROL "Accept_Tag" RETURN TRUE endif; SELECT if (TriggerType = "ACCEPT") then if (File_Name = "") then MESSAGE "Error! File name cannot be blank!" RETURN FALSE else Text_File = PRIVDIR() + File_Name + ".MRG" if ISFILE(Text_File) then if Response_Is_Yes("Warning: Duplicate File Name!", "File exists, replace?") then RETURN TRUE ; replace file else RETURN FALSE ; do not replace file endif else RETURN TRUE ; file does not already exist endif endif endif RETURN TRUE ENDPROC; Process_Save_As_Dialog PROC Save_As_Dialog(File_Name) PRIVATE Pick_File, Button_Val SHOWDIALOG "Save Merge Configuration" PROC "Process_Save_As_Dialog" TRIGGER "SELECT", "ACCEPT" @4,20 HEIGHT 16 WIDTH 40 @1,3 ?? "Save File As:" ACCEPT @1,20 WIDTH 11 "A8" PICTURE "*!" TAG "Accept_Tag" TO File_Name PICKFILE @3,3 HEIGHT 8 WIDTH 32 COLUMNS 2 PRIVDIR() + "*.MRG" TAG "Pick_Tag" TO Pick_File PUSHBUTTON @12,5 WIDTH 12 "~Y~es" OK DEFAULT VALUE "OK" TAG "OK_Button" TO Button_Val PUSHBUTTON @12,22 WIDTH 12 "~N~o" CANCEL VALUE "Cancel" TAG "Cancel_Button" TO Button_Val ENDDIALOG RETURN RetVal ENDPROC; Save_As_Dialog PROC Process_Dialog(TriggerType, TagValue, EventValue, ElementValue) PRIVATE New_Dir, Text_File, Ch, L, Continue if (TriggerType = "OPEN") then SELECTCONTROL "Available_Tag" Form_Description = Get_Form_Info(File_1) REFRESHCONTROL "Description_Tag" RETURN TRUE endif; OPEN if (TriggerType = "ARRIVE") then RESYNCDIALOG if (TagValue = "Available_Tag") then Form_Description = Get_Form_Info(File_1) else if (TagValue = "Selected_Tag") then Form_Description = Get_Form_Info(File_2) endif endif REFRESHCONTROL "Description_Tag" RETURN TRUE endif; ARRIVE if (TriggerType = "UPDATE") then if (TagValue = "Available_Tag") OR (TagValue = "Selected_Tag") then Form_Description = Get_Form_Info(EventValue) REFRESHCONTROL "Description_Tag" RETURN TRUE endif ; if user selects new subdirectory, verify then load file list if (TagValue = "Directory_Tag") then New_Dir = EventValue if NOT MATCH(New_Dir, "..\\") then New_Dir = New_Dir + "\\" endif if (New_Dir = Form_Dir) then RETURN TRUE endif if (DIREXISTS(New_Dir) = 1) then ; change directory string Form_Dir = New_Dir New_Form_Dir = Form_Dir File_1 = "" File_2 = "" FOREACH Element IN Form_Array RELEASE VARS Form_Array[Element] ENDFOREACH REFRESHCONTROL "Available_Tag" REFRESHCONTROL "Selected_Tag" REFRESHCONTROL "Description_Tag" RETURN TRUE else BEEP MESSAGE "Invalid subdirectory. Press any key to continue." Ch = GETCHAR() RETURN FALSE endif endif; Directory_Tag endif; UPDATE if (TriggerType = "SELECT") then if (TagValue = "Available_Tag") then if NOT ISFILE(Form_Dir + File_1) then Form_Dir = SUBSTR(Main_Drv,1,2) + RELATIVEFILENAME(Form_Dir + File_1) New_Form_Dir = Form_Dir File_1 = "" File_2 = "" FOREACH Element IN Form_Array RELEASE VARS Form_Array[Element] ENDFOREACH REFRESHCONTROL "Available_Tag" REFRESHCONTROL "Selected_Tag" REFRESHCONTROL "Description_Tag" REFRESHCONTROL "Directory_Tag" RETURN TRUE else Form_Array[File_1] = File_1 REFRESHCONTROL "Selected_Tag" endif else if (TagValue = "Selected_Tag") then RELEASE VARS Form_Array[File_2] REFRESHCONTROL "Selected_Tag" Form_Description = Get_Form_Info(File_2) REFRESHCONTROL "Description_Tag" endif endif RETURN TRUE endif; SELECT if (TriggerType = "ACCEPT") then if (TagValue = "Save") OR (TagValue = "Run") then if (DYNARRAYSIZE(Form_Array) <= 0) then BEEP SELECTCONTROL "Available_Tag" MESSAGE("No form(s) selected. Press any key to continue.") Ch = GETCHAR() RETURN FALSE endif ; if (TagValue = "Save") then ; if (USERNAME() <> "") then ; L = LEN(USERNAME()) ; if (L > 8) then ; L = 8 ; endif ; Text_File = SUBSTR(USERNAME(), 1, L) ; else Text_File = "ASSEMBLE" ; endif ; if ISFILE(PRIVDIR() + Text_File + ".MRG") then ; Text_File = "" ; if file exists, set name to blank ; endif ; Continue = Save_As_Dialog(Text_File) ; else Continue = True ; Text_File = PRIVDIR() + "$$$$$$$$.MRG" ; endif Text_File = "R:\\PRIVATE\\$$$$$$$$.MRG" Continue = True if Continue then FILEWRITE Text_File FROM Main_Dir + "\n" ; data subdirectory PRINT FILE Text_File Main_Drv, "DOCUMENT\\WPDOCS\\DOCS\\", "\n" ; target subdirectory PRINT FILE Text_File UPPER(Main_Table), "\n" ; rolodex, files, etc. MOVETO Subset_Table FORMKEY ; show table form view CTRLHOME TAB SCAN PRINT FILE Text_File FIELDSTR(), "\n" ENDSCAN FORMKEY ; return to form view PRINT FILE Text_File "FORMS\n" ; print full file name for each selected form if NOT MATCH(Form_Dir, "..\\") then Form_Dir = Form_Dir + "\\" endif FOREACH Element IN Form_Array PRINT FILE Text_File Form_Dir, Form_Array[Element], "\n" ENDFOREACH if (TagValue = "Run") then MESSAGE "Executing document assembly program..." RUN BIG "R:\\PRIVATE\\GO.BAT" ; run external dos merge program MESSAGE "" else MESSAGE "Configuration file saved successfully." endif endif; RETURN FALSE ; return to dialog box endif; Save Or Run if (TagValue = "Tag_All") then ; method to select all available form files RETURN FALSE else if (TagValue = "UnTag_All") then FOREACH Element IN Form_Array RELEASE VARS Form_Array[Element] ENDFOREACH REFRESHCONTROL "Selected_Tag" REFRESHCONTROL "Description_Tag" RETURN FALSE else RETURN TRUE endif endif; Tag_All endif; ACCEPT RETURN TRUE ENDPROC; Process_Dialog ; Main procedure begins here MOUSE SHOW if (DIREXISTS(Form_Dir) <> 1) then ; does initial subdir exist Form_Dir = Main_Dir endif New_Form_Dir = Form_Dir Main_Drv = SUBSTR(Main_Dir, 1, 3) Form_Table = Main_Dir + "FORMS\\FORM_LST" File_1 = "" File_2 = "" DYNARRAY Form_Array[] ECHO OFF SHOWDIALOG "Select Forms To Merge With Data" PROC "Process_Dialog" TRIGGER "UPDATE", "ARRIVE", "SELECT", "OPEN", "ACCEPT" @2, 4 HEIGHT 21 WIDTH 71 LABEL @1,1 "~C~urrent Directory:" FOR "Directory_Tag" ACCEPT @2,2 WIDTH 65 "A80" PICTURE "*!" TAG "Directory_Tag" TO Form_Dir LABEL @4,1 "~A~vailable Forms: (Space = Tag)" FOR "Available_Tag" PICKFILE @5,2 HEIGHT 10 WIDTH 32 COLUMNS 2 Form_Dir SHOWDIRS TAG "Available_Tag" TO File_1 LABEL @16,1 "~F~orm Description:" FOR "Description_Tag" ACCEPT @17,2 WIDTH 65 "A150" TAG "Description_Tag" TO Form_Description LABEL @4,36 "~S~elected Forms: (Space = Untag)" FOR "Selected_Tag" PICKDYNARRAY @5,37 HEIGHT 10 WIDTH 15 Form_Array TAG "Selected_Tag" TO File_2 PUSHBUTTON @6,55 WIDTH 12 "~R~un" OK DEFAULT VALUE "" TAG "Run" TO Button PUSHBUTTON @8,55 WIDTH 12 "~S~ave" OK VALUE "" TAG "Save" TO Button PUSHBUTTON @10,55 WIDTH 12 "~T~ag All" OK VALUE "ACCEPT" TAG "Tag_All" TO Button PUSHBUTTON @12,55 WIDTH 12 "~U~nTag All" OK VALUE "ACCEPT" TAG "UnTag_All" TO Button PUSHBUTTON @14,55 WIDTH 12 "~Q~uit" CANCEL VALUE "" TAG "Cancel" TO Button ENDDIALOG Form_Dir = New_Form_Dir ; use current subdir as default next time MOUSE HIDE MOVETO Subset_Table ENDPROC WRITELIB Off_Lib Select_Forms ;============================================================================= PROC Form_Wait() PRIVATE Fld_Prompt, Answer_Menu PROC Process_Dialog(TriggerType, TagValue, EventValue, ElementValue) if (TriggerType = "SELECT") then if (TagValue = "IndexArrayTag") then Search_Words[I_Word] = I_Word else if (TagValue = "SearchArrayTag") then RELEASE VARS Search_Words[S_Word] endif endif REFRESHCONTROL "SearchArrayTag" endif RETURN TRUE ENDPROC; Process_Dialog PROC Ask_Form() ; user selects a subset of forms table based on search criteria PRIVATE Index_Words, Search_Words, I_Word, S_Word, Name, Description, Status, Element FORMKEY ; switch to table view SHOWPULLDOWN ; hide main menu ENDMENU CLEARSPEEDBAR ; clear form speedbar PROMPT "Press Search to find matching forms; ESC or Cancel to quit." MOUSE SHOW DYNARRAY Index_Words[] DYNARRAY Search_Words[] Name = "" Description = "" Status = "" ECHO OFF ; load all index words into a dynamic array VIEW "Inx_Lkup" SCAN Index_Words[STRVAL([Keyword])] = [Keyword] ENDSCAN CLEARIMAGE SHOWDIALOG "Form Selection Criteria" PROC "Process_Dialog" TRIGGER "SELECT", "ARRIVE" @2, 6 HEIGHT 21 WIDTH 68 @1, 2 ?? "Name" ACCEPT @1,15 WIDTH 48 "A80" PICTURE "*!" TAG "Name_Tag" TO Name @2, 2 ?? "Description" ACCEPT @2,15 WIDTH 48 "A80" TAG "Desc_Tag" TO Description @3, 2 ?? "Status" ACCEPT @3,15 WIDTH 15 "A40" TAG "Status_Tag" TO Status LABEL @5,2 "~I~ndex List: (Space = Add)" FOR "IndexArrayTag" PICKDYNARRAY @6,2 HEIGHT 10 WIDTH 28 Index_Words TAG "IndexArrayTag" TO I_Word LABEL @5,35 "~S~earch For: (Space = Delete)" FOR "SearchArrayTag" PICKDYNARRAY @6,35 HEIGHT 10 WIDTH 28 Search_Words TAG "SearchArrayTag" TO S_Word PUSHBUTTON @17,20 WIDTH 10 "~S~earch" OK DEFAULT VALUE "" TAG "OK" TO Button PUSHBUTTON @17,40 WIDTH 10 "~C~ancel" CANCEL VALUE "" TAG "Cancel" TO Button ENDDIALOG PROMPT "" if (RetVal = True) then MESSAGE "Searching..." ECHO OFF {Ask} {Form_lst} Check Tab Example "link" if NOT ISBLANK(Name) then TYPEIN (", " + Name) endif TAB if NOT ISBLANK(Description) then TYPEIN Description endif TAB if NOT ISBLANK(Status) then TYPEIN Status endif {Ask} {Form_inx} FOREACH Element IN Search_Words if NOT ISBLANK(Search_Words[Element]) then TAB EXAMPLE "link" TAB TYPEIN Search_Words[Element] RIGHT endif ENDFOREACH DO_IT! Subset_Table = PRIVDIR() + "SUBSET" RENAME TABLE() Subset_Table MOVETO "Form_lst(Q)" CLEARIMAGE MOVETO "Form_inx(Q)" CLEARIMAGE MOVETO Subset_Table if ISEMPTY(Subset_Table) then CLEARIMAGE No_Matches_Found() else ; copy form and display on screen {Tools} {Copy} {JustFamily} {Form_lst} TYPEIN Subset_Table ENTER {Replace} View_Answer_Table(Subset_Table, 1, 3) DOWNIMAGE IMAGERIGHTS READONLY UPIMAGE Form_Answer_Wait() endif endif FORMKEY ; return to form view MOUSE HIDE ENDPROC; Ask_Form PROC Form_Answer_Menu() SHOWPULLDOWN "Modify" : "Toggle between edit and main mode" : "Modify" SUBMENU "Edit Mode - F9" : "Allow data to be edited, deleted, etc." : "Edit\Mode", "Main Mode - F2" : "Discontinue editing" : "Main\Mode" ENDSUBMENU, "Reports" : "Choose report to generate" : "Reports" SUBMENU "Form List" : "Print list of matching forms" : "Form_List" ENDSUBMENU, "Return" : "Return to previous menu" : "" SUBMENU "No " : "Continue working with selected data" : "Return\No", "Yes - F8" : "Return to complete data set" : "Return\Yes" ENDSUBMENU ENDMENU if (SYSMODE() = "Main") then MENUDISABLE "Main\Mode" else MENUDISABLE "Edit\Mode" MENUDISABLE "Reports" endif Form_Speedbar() ENDPROC; Form_Answer_Menu PROC Form_Answer_Wait_Proc(TriggerType, EventInfo, CycleNumber) if (EventInfo["TYPE"] = "MESSAGE") And (EventInfo["MESSAGE"] = "MENUSELECT") And (EventInfo["MENUTAG"] = "Form_List") then SHOWPULLDOWN ENDMENU CLEARSPEEDBAR MESSAGE "One moment please..." ECHO OFF Print_Report(Subset_Table, "1", "") EXECPROC Answer_Menu RETURN 1 else RETURN Answer_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) endif ENDPROC; Form_Answer_Wait_Proc PROC Form_Answer_Wait() Form_Answer_Menu() Sound_Off() ECHO NORMAL Message_Box("Search Completed", "Matching Form Entries: " + STRVAL(NRECORDS(Subset_Table))) WAIT WORKSPACE PROC "Form_Answer_Wait_Proc" MESSAGE "MENUSELECT" TRIGGER "ARRIVEFIELD" KEY -60, -66, -67, -83, -50 ; DO_IT Clear Edit Delete Memo ; F2 F8 F9 DEL Alt-M ENDWAIT CLEARSPEEDBAR MESSAGE "" ENDPROC; Form_Answer_Wait PROC Form_Wait_Proc(TriggerType, EventInfo, CycleNumber) PRIVATE Key_Code, Menu_Pick if (TriggerType = "ARRIVEFIELD") then PROMPT Fld_Prompt[FIELD()] RETURN 1 endif if (EventInfo["TYPE"] = "KEY") then Key_Code = EventInfo["KEYCODE"] SWITCH ; F9 - COEDIT CASE (Key_Code = -67) : RETURN Main_Table_Edit() ; F2 - DO_IT! CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then RETURN Main_Table_Clear() else RETURN Main_Table_End_Edit() endif ; F8 - CLEAR CASE (Key_Code = -66) : RETURN Main_Table_Clear() ; Alt-M - Memo CASE (Key_Code = -50) : Display_Memo(Main_Table) Main_Table_Menu() Form_Speedbar() RETURN 1 ; DELETE CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then RETURN Display_Delete_Box() else RETURN 1 endif OTHERWISE : SOUND 400 100 RETURN 1 ENDSWITCH endif if (EventInfo["MESSAGE"] = "MENUSELECT") then Menu_Pick = EventInfo["MENUTAG"] SWITCH CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then RETURN Main_Table_Clear() else RETURN Main_Table_End_Edit() endif CASE (Menu_Pick = "Ask") : Ask_Form() Main_Table_Menu() Form_Speedbar() RETURN 1 CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() CASE (Menu_Pick = "Close\No") : RETURN 1 OTHERWISE : SOUND 400 100 RETURN 1 ENDSWITCH endif SOUND 400 100 RETURN 1 ; safety valve ENDPROC; Form_Wait_Proc PROC Form_Speedbar() CLEARSPEEDBAR SPEEDBAR "~F10~ Menu":-68, "~Alt-M~ Memo":-50 PROMPT Fld_Prompt[FIELD()] ENDPROC; Form_Speedbar ; MAIN PROCEDURE BEGINS HERE ECHO OFF SETDIR "FORMS" Answer_Menu = "Form_Answer_Menu" DYNARRAY Fld_Prompt[] Fld_Prompt["Name"] = "Unique form name (required)." Fld_Prompt["Memo"] = "Description of form and its usage." Fld_Prompt["Status"] = "Status code indicating merge availability." Fld_Prompt["Keyword"] = "Indexed keywords for form. F1 for lookup help." Main_Table_View(Main_Table, 1, 3) Form_Speedbar() ECHO NORMAL WAIT WORKSPACE PROC "Form_Wait_Proc" MESSAGE "MENUSELECT" TRIGGER "ARRIVEFIELD" KEY -60, -66, -67, -83, -50 ; DO_IT Clear Edit Delete Alt-M ; F2 F8 F9 DEL Memo ENDWAIT CLEARSPEEDBAR PROMPT "" MESSAGE "" ECHO OFF if ISTABLE(Subset_Table) then DELETE Subset_Table endif SETDIR Main_Dir ENDPROC WRITELIB Off_Lib Form_Wait RELEASE PROCS ALL