<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--***********************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 ***********************************************************-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="DicOOo" script:language="StarBasic">Option Explicit

Sub StartDicOOo

Dim ThePath as string
Dim DefPath as string
Dim aService as object
Dim MyDicOOo as string
dim TheDoc as object
dim args(1) as new com.sun.star.beans.PropertyValue

on error resume next

&apos; Find path
aService = CreateUnoService(&quot;com.sun.star.util.PathSubstitution&quot;)
ThePath =ConvertToURL(aService.substituteVariables(&quot;$(user)&quot;, true))
ThePath=ThePath &amp; &quot;/wordbook&quot;
DefPath =ConvertToURL(aService.substituteVariables(&quot;$(prog)&quot;, true))
DefPath=DefPath &amp; &quot;/../share/dict/ooo&quot;

MyDicOOo=&quot;&quot;

if  fileExists(ThePath &amp; &quot;/DicOOo.lst&quot;) then
	&apos;read DicOOo.lst file in user directory
        Open ThePath &amp; &quot;/DicOOo.lst&quot; for input as #1
                line input #1, MyDicOOo
        close #1
else
	if fileExists(DefPath &amp; &quot;/DicOOo.lst&quot;) then
	&apos;read DicOOo.lst file in share directory
	    Open DefPath &amp; &quot;/DicOOo.lst&quot; for input as #1
                line input #1, MyDicOOo
        close #1
    else
    	&apos;creates default file in user directory
    	Open ThePath &amp; &quot;/DicOOo.lst&quot; for output as #1
    		print #1,convertFromURL(DefPath &amp; &quot;/DicOOo.sxw&quot;)
    	close #1
    endif
endif

&apos;security
if Not fileExists(MyDicOOo) then
        MyDicOOo= DefPath &amp; &quot;/DicOOo.sxw&quot;
endif

MyDicOOo=ConvertToURL(MyDicOOo)

&apos;Opens DicOOo main file
args(0).name=&quot;InteractionHandler&quot;
args(0).value=&quot;&quot;
args(1).name=&quot;MacroExecutionMode&quot;
args(1).value=com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN &apos;4
TheDoc=StarDesktop.loadComponentFromURL(MyDicOOo,&quot;_blank&quot;,0,args())

End Sub
</script:module>
