LPARAMETERS tcFileName, llWPList, tcSaveName LOCAL lnDDEChan, lcFormFile, lcDataFile, lcImportFile, LnLen, ; lcTextFile, lcMacroName, lni, llChannelClosed, lcNewFile lcNewFile = "" lnDDEChan = THISFORM.OpenDDEChannel("WPWin") IF lnDDEChan = -1 =MESSAGEBOX('Cannot Link with Word Perfect', 16) RETURN ENDIF lcFormFile = ALLTRIM(THISFORM.cWpDocsLoc) + tcFileName + ".FRM" lcImportFile = ALLTRIM(THISFORM.cDataLoc) + tcFileName + ".DBF" lcDataFile = STRTRAN(lcFormFile, ".FRM", ".DAT") lcTextFile = ALLTRIM(THISFORM.cWpDocsLoc) + tcSaveName + ".WPD" lcMacroName = STRTRAN(lcFormFile,".FRM",".WCM") IF FILE(lcDataFile) ERASE (lcDataFile) ENDIF IF FILE(lcTextFile) ERASE (lcTextFile) ENDIF * * Run the Merge in WordPerfect * IF ALLTRIM(THISFORM.cWordPerfectVersion) = "8" lcCmd = "Application (WordPerfect; "+CHR(34)+"WordPerfect"+CHR(34)+"; Default!;" + ; CHR(34) + "EN" + CHR(34) + ")" ELSE lcCmd = "Application (WordPerfect; "+CHR(34)+"WordPerfect"+CHR(34)+"; Default; " + ; CHR(34) + "US" +CHR(34) + ")" ENDIF DDEEXECUTE(lnDDEChan, lcCmd) IF THISFORM.cWordPerfectVersion = "6.0" DDEEXECUTE(lnDDEChan, "AppRestore ()") && restore wordperfect to display ENDIF IF ALLTRIM(THISFORM.cWordPerfectVersion) <> "8" DDEEXECUTE(lnDDEChan, "ViewDraft ()") ENDIF * set the import file name lcCmd = "ImportSetFileName (Filename: " + CHR(34) + lcImportFile + CHR(34) + ")" DDEEXECUTE(lnDDEChan, lcCmd) * run the macro to create the appropriate .DAT file lcCmd = "MacroFilePlay (Filename: " + CHR(34) + lcMacroName + CHR(34) + ")" DDEEXECUTE(lnDDEChan, lcCmd) =INKEY(THISFORM.nMacroDelay) IF ALLTRIM(THISFORM.cWordPerfectVersion) = "8" lcCmd = "FileSave (Filename: " + CHR(34) + lcDataFile + CHR(34) + ; "; ExportType: WordPerfect_6_7_8!)" ELSE lcCmd = "FileSave (Filename: " + CHR(34) + lcDataFile + CHR(34) + ; "; ExportType: WordPerfect_60!)" ENDIF * Since we erased the datafile at the beginning of this routine, just send the save command * until the file exists. We counld have also chacked for DDELastError() <> 0 (Service busy), but * sometimes the commands fall thru and DDELastError returns 0. This should work. * save the imported .DAT file DO WHILE !FILE(lcDataFile) DDEEXECUTE(lnDDEChan, lcCmd) =INKEY(THISFORM.nFileSaveDelay) && give it a chance to save the file ENDDO DDEEXECUTE(lnDDEChan, "Close (Save: No!)") && close the open file =INKEY(.2) DO WHILE DDELastError() <> 0 DDEEXECUTE(lnDDEChan, "Close (Save: No!)") && close the opened .Dat file =INKEY(.2) ENDDO * open the appropriate .FRM file lcCmd = "FileOpen (Filename: " + CHR(34) + lcFormFile + CHR(34) + ")" DDEEXECUTE(lnDDEChan, lcCmd) * set up for the merge DDEEXECUTE(lnDDEChan, "MergeSelect (SelectType: All!)") IF llWPList lcCmd = "MergePageBreak (State: Off!)" ELSE lcCmd = "MergePageBreak (State: ON!)" ENDIF DDEEXECUTE(lnDDEChan, lcCmd) =INKEY(THISFORM.nFileSaveDelay) DO WHILE DDELastError() <> 0 DDEEXECUTE(lnDDEChan, lcCmd) =INKEY(THISFORM.nFileSaveDelay) ENDDO * run the merge lcCmd = "MergeRun (FormFileType: Current!; DataFileType: DataFile!; DataFile: " lcCmd = lcCmd + CHR(34) + lcDataFile + CHR(34) + "; OutputFileType: ToFile!; OutputFile: " lcCmd = lcCmd + CHR(34) + lcTextFile + CHR(34) + ")" DDEEXECUTE(lnDDEChan, lcCmd) * WE CAN PROBABLY JUST CHECK FOR THE EXISTENCE OF THE .WPD SINCE WE DELETED IT AT THE START OF * THIS ROUTINE DO WHILE !FILE(lcTextFile) =INKEY(THISFORM.nFileSaveDelay) && make the wait loop a bit less tight ENDDO DDEEXECUTE(lnDDEChan, "Close (Save: No!)") && close the opened .FRM file =INKEY(.2) DO WHILE DDELastError() <> 0 DDEEXECUTE(lnDDEChan, "Close (Save: No!)") && close the opened .FRM file =INKEY(.2) ENDDO IF THISFORM.cWordPerfectVersion = "6.0" DDEEXECUTE(lnDDEChan, "AppMinimize ()") && minimize wordperfect ENDIF =INKEY(.2) llChannelClosed = DDETERMINATE(lnDDEChan) && terminate the DDE connection DO WHILE !llChannelClosed llChannelClosed = DDETERMINATE(lnDDEChan) ENDDO RETURNMarcia