Mercurial > public > html2wiki
changeset 2:5da2e67620f9
Upgrade to Ivy configuration and begin clean up of tests. Added FreeBSD license.
author | smith@nwoca.org |
---|---|
date | Tue, 25 Jan 2011 17:06:57 -0500 |
parents | b6e94d49a9a9 |
children | 4417b025157e |
files | LICENSE build.xml ivy.xml ivysettings.xml nbproject/build-impl.xml nbproject/genfiles.properties nbproject/ivy-impl.xml nbproject/project.properties nbproject/project.xml src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java test/resources/sysman_handbook.html |
diffstat | 12 files changed, 8179 insertions(+), 728 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE Tue Jan 25 17:06:57 2011 -0500 @@ -0,0 +1,26 @@ +Copyright 2010 Northwest Ohio Computer Association/SSDT. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY NORTHWEST OHIO COMPUTER ASSOCIATION ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL NORTHWEST OHIO COMPUTER ASSOCATION OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of NORTHWEST OHIO COMPUTER ASSOCIATION.
--- a/build.xml Thu Jun 08 18:11:12 2006 -0400 +++ b/build.xml Tue Jan 25 17:06:57 2011 -0500 @@ -1,88 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- You may freely edit this file. See commented blocks below for --> -<!-- some examples of how to customize the build. --> -<!-- (If you delete it and reopen the project it will be recreated.) --> -<project name="html2wiki" default="default" basedir="."> +<project name="html2wiki" default="default" basedir="." + xmlns:ivy="antlib:fr.jayasoft.ivy.ant" + xmlns:ssdt="http://www.ssdt-ohio.org/ant/common"> <description>Builds, tests, and runs the project html2wiki.</description> <import file="nbproject/build-impl.xml"/> - <property name="project.name" value="html2wiki" /> - <property name="project.version" value="0.1-0" /> - - <property file="../../build.global"/> - <property name="ssdt.home.dir" value="../../"/> - <property name="tools.dir" value="${ssdt.home.dir}/Tools"/> - <import file="${tools.dir}/jalopy/ant/jalopy-ant.xml" optional="true"/> - <import file="${tools.dir}/checkstyle/ant/checkstyle-ant.xml"/> - - <import file="${tools.dir}/findbugs/ant/findbugs-ant.xml"/> - <!-- - - There exist several targets which are by default empty and which can be - used for execution of your tasks. These targets are usually executed - before and after some main targets. They are: - - -pre-init: called before initialization of project properties - -post-init: called after initialization of project properties - -pre-compile: called before javac compilation - -post-compile: called after javac compilation - -pre-compile-single: called before javac compilation of single file - -post-compile-single: called after javac compilation of single file - -pre-compile-test: called before javac compilation of JUnit tests - -post-compile-test: called after javac compilation of JUnit tests - -pre-compile-test-single: called before javac compilation of single JUnit test - -post-compile-test-single: called after javac compilation of single JUunit test - -pre-jar: called before JAR building - -post-jar: called after JAR building - -post-clean: called after cleaning build products - - (Targets beginning with '-' are not intended to be called on their own.) - - Example of inserting an obfuscator after compilation could look like this: + <property file="../build.global"/> + <property file="../../build.global"/> - <target name="-post-compile"> - <obfuscate> - <fileset dir="${build.classes.dir}"/> - </obfuscate> - </target> - - For list of available properties check the imported - nbproject/build-impl.xml file. - - - Another way to customize the build is by overriding existing main targets. - The targets of interest are: + <property name="ssdt.devel.kit" value="${user.home}/.ssdt"/> + <property name="ssdt.devel.kit.src" value="http://hg.ssdt-ohio.org/browse/public/develkit"/> + <mkdir dir="${ssdt.devel.kit}"/> + <get dest="${ssdt.devel.kit}/bootstrap.xml" + src="${ssdt.devel.kit.src}/bootstrap.xml" usetimestamp="true" ignoreerrors="true"/> + <import file="${ssdt.devel.kit}/bootstrap.xml"/> - -init-macrodef-javac: defines macro for javac compilation - -init-macrodef-junit: defines macro for junit execution - -init-macrodef-debug: defines macro for class debugging - -init-macrodef-java: defines macro for class execution - -do-jar-with-manifest: JAR building (if you are using a manifest) - -do-jar-without-manifest: JAR building (if you are not using a manifest) - run: execution of project - -javadoc-build: Javadoc generation - test-report: JUnit report generation - - An example of overriding the target for project execution could look like this: + <ssdt:require-ant file="ivy-ant.xml"/> + <import file="${ssdt.devel.kit}/ivy-ant.xml"/> - <target name="run" depends="html2wiki-impl.jar"> - <exec dir="bin" executable="launcher.exe"> - <arg file="${dist.jar}"/> - </exec> - </target> - - Notice that the overridden target depends on the jar target and not only on - the compile target as the regular run target does. Again, for a list of available - properties which you can use, check the target you are overriding in the - nbproject/build-impl.xml file. - - --> - <target name="-pre-compile-single"> - <antcall target="jalopy-single"/> - </target> - - <target name="checkstyle" depends="compile,do-checkstyle"/> - <target name="findbugs" depends="compile,-do-findbugs"/> - <target name="findbugs-view" depends="compile,-do-findbugsViewer"/> + <target name="-ivy-retrieve" depends="-ivy-define, -ant-contrib-define, -lib-path-init, -ivy-retrieve-custom"/> </project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ivy.xml Tue Jan 25 17:06:57 2011 -0500 @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ivy-module version="2.0"> + <info module="html2wiki" organisation="org.ssdt-ohio" revision="0.2.0" status="integration"/> + <configurations> + <conf name="compile"/> + <conf name="runtime"/> + <conf name="compile-test"/> + <conf name="runtime-test"/> + </configurations> + <dependencies > + <dependency org="org.apache.commons" name="com.springsource.org.apache.commons.io" rev="1.4.0" /> + <dependency org="org.junit" name="com.springsource.org.junit" rev="4.8.1" /> + </dependencies> +</ivy-module>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ivysettings.xml Tue Jan 25 17:06:57 2011 -0500 @@ -0,0 +1,4 @@ +<ivysettings> + <property name="ssdt.devel.kit" value="${user.home}/.ssdt" override="false"/> + <include file="${ssdt.devel.kit}/ssdt.default.ivy.settings.xml"/> +</ivysettings> \ No newline at end of file
--- a/nbproject/build-impl.xml Thu Jun 08 18:11:12 2006 -0400 +++ b/nbproject/build-impl.xml Tue Jan 25 17:06:57 2011 -0500 @@ -1,541 +1,806 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -*** GENERATED FROM project.xml - DO NOT EDIT *** -*** EDIT ../build.xml INSTEAD *** - -For the purpose of easier reading the script -is divided into following sections: - - - initialization - - compilation - - jar - - execution - - debugging - - javadoc - - junit compilation - - junit execution - - junit debugging - - applet - - cleanup - ---> -<project name="html2wiki-impl" default="default" basedir=".." xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1"> - <target name="default" depends="test,jar,javadoc" description="Build and test whole project."/> - <!-- - ====================== - INITIALIZATION SECTION - ====================== - --> - <target name="-pre-init"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-init-private" depends="-pre-init"> - <property file="nbproject/private/private.properties"/> - </target> - <target name="-init-user" depends="-pre-init,-init-private"> - <property file="${user.properties.file}"/> - <!-- The two properties below are usually overridden --> - <!-- by the active platform. Just a fallback. --> - <property name="default.javac.source" value="1.4"/> - <property name="default.javac.target" value="1.4"/> - </target> - <target name="-init-project" depends="-pre-init,-init-private,-init-user"> - <property file="nbproject/project.properties"/> - </target> - <target name="-do-init" depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property"> - <available file="${manifest.file}" property="manifest.available"/> - <condition property="manifest.available+main.class"> - <and> - <isset property="manifest.available"/> - <isset property="main.class"/> - <not> - <equals arg1="${main.class}" arg2="" trim="true"/> - </not> - </and> - </condition> - <condition property="manifest.available+main.class+mkdist.available"> - <and> - <istrue value="${manifest.available+main.class}"/> - <isset property="libs.CopyLibs.classpath"/> - </and> - </condition> - <condition property="have.tests"> - <or> - <available file="${test.src.dir}"/> - </or> - </condition> - <condition property="have.sources"> - <or> - <available file="${src.dir}"/> - </or> - </condition> - <condition property="netbeans.home+have.tests"> - <and> - <isset property="netbeans.home"/> - <isset property="have.tests"/> - </and> - </condition> - <condition property="no.javadoc.preview"> - <isfalse value="${javadoc.preview}"/> - </condition> - <property name="run.jvmargs" value=""/> - <property name="javac.compilerargs" value=""/> - <property name="work.dir" value="${basedir}"/> - <condition property="no.deps"> - <and> - <istrue value="${no.dependencies}"/> - </and> - </condition> - <property name="javac.debug" value="true"/> - <property name="javadoc.preview" value="true"/> - </target> - <target name="-post-init"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-init-check" depends="-pre-init,-init-private,-init-user,-init-project,-do-init"> - <fail unless="src.dir">Must set src.dir</fail> - <fail unless="test.src.dir">Must set test.src.dir</fail> - <fail unless="build.dir">Must set build.dir</fail> - <fail unless="dist.dir">Must set dist.dir</fail> - <fail unless="build.classes.dir">Must set build.classes.dir</fail> - <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail> - <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail> - <fail unless="build.test.results.dir">Must set build.test.results.dir</fail> - <fail unless="build.classes.excludes">Must set build.classes.excludes</fail> - <fail unless="dist.jar">Must set dist.jar</fail> - </target> - <target name="-init-macrodef-property"> - <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="name"/> - <attribute name="value"/> - <sequential> - <property name="@{name}" value="${@{value}}"/> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-javac"> - <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="srcdir" default="${src.dir}"/> - <attribute name="destdir" default="${build.classes.dir}"/> - <attribute name="classpath" default="${javac.classpath}"/> - <attribute name="debug" default="${javac.debug}"/> - <element name="customize" optional="true"/> - <sequential> - <javac srcdir="@{srcdir}" destdir="@{destdir}" debug="@{debug}" deprecation="${javac.deprecation}" source="${javac.source}" target="${javac.target}" includeantruntime="false"> - <classpath> - <path path="@{classpath}"/> - </classpath> - <compilerarg line="${javac.compilerargs}"/> - <customize/> - </javac> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-junit"> - <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="includes" default="**/*Test.java"/> - <sequential> - <junit showoutput="true" fork="true" dir="${basedir}" failureproperty="tests.failed" errorproperty="tests.failed"> - <batchtest todir="${build.test.results.dir}"> - <fileset dir="${test.src.dir}" includes="@{includes}"/> - </batchtest> - <classpath> - <path path="${run.test.classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="test-sys-prop."/> - <mapper type="glob" from="test-sys-prop.*" to="*"/> - </syspropertyset> - <formatter type="brief" usefile="false"/> - <formatter type="xml"/> - <jvmarg line="${run.jvmargs}"/> - </junit> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-nbjpda"> - <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="name" default="${main.class}"/> - <attribute name="classpath" default="${debug.classpath}"/> - <attribute name="stopclassname" default=""/> - <sequential> - <nbjpdastart transport="dt_socket" addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}"> - <classpath> - <path path="@{classpath}"/> - </classpath> - </nbjpdastart> - </sequential> - </macrodef> - <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="dir" default="${build.classes.dir}"/> - <sequential> - <nbjpdareload> - <fileset includes="${fix.includes}*.class" dir="@{dir}"/> - </nbjpdareload> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-debug"> - <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="classname" default="${main.class}"/> - <attribute name="classpath" default="${debug.classpath}"/> - <element name="customize" optional="true"/> - <sequential> - <java fork="true" classname="@{classname}" dir="${work.dir}"> - <jvmarg value="-Xdebug"/> - <jvmarg value="-Xnoagent"/> - <jvmarg value="-Djava.compiler=none"/> - <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/> - <jvmarg line="${run.jvmargs}"/> - <classpath> - <path path="@{classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="run-sys-prop."/> - <mapper type="glob" from="run-sys-prop.*" to="*"/> - </syspropertyset> - <customize/> - </java> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-java"> - <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="classname" default="${main.class}"/> - <element name="customize" optional="true"/> - <sequential> - <java fork="true" classname="@{classname}" dir="${work.dir}"> - <jvmarg line="${run.jvmargs}"/> - <classpath> - <path path="${run.classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="run-sys-prop."/> - <mapper type="glob" from="run-sys-prop.*" to="*"/> - </syspropertyset> - <customize/> - </java> - </sequential> - </macrodef> - </target> - <target name="-init-presetdef-jar"> - <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1"> - <jar jarfile="${dist.jar}" compress="${jar.compress}"> - <j2seproject1:fileset dir="${build.classes.dir}"/> - </jar> - </presetdef> - </target> - <target name="init" depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar"/> - <!-- - =================== - COMPILATION SECTION - =================== - --> - <target name="deps-jar" depends="init" unless="no.deps"/> - <target name="-pre-pre-compile" depends="init,deps-jar"> - <mkdir dir="${build.classes.dir}"/> - </target> - <target name="-pre-compile"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile" if="have.sources"> - <j2seproject3:javac/> - <copy todir="${build.classes.dir}"> - <fileset dir="${src.dir}" excludes="${build.classes.excludes}"/> - </copy> - </target> - <target name="-post-compile"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project."/> - <target name="-pre-compile-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-single" depends="init,deps-jar,-pre-pre-compile"> - <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> - <j2seproject3:javac> - <customize> - <patternset includes="${javac.includes}"/> - </customize> - </j2seproject3:javac> - </target> - <target name="-post-compile-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-single" depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single"/> - <!-- - ==================== - JAR BUILDING SECTION - ==================== - --> - <target name="-pre-pre-jar" depends="init"> - <dirname property="dist.jar.dir" file="${dist.jar}"/> - <mkdir dir="${dist.jar.dir}"/> - </target> - <target name="-pre-jar"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-jar-without-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" unless="manifest.available"> - <j2seproject1:jar/> - </target> - <target name="-do-jar-with-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" unless="manifest.available+main.class"> - <j2seproject1:jar manifest="${manifest.file}"/> - </target> - <target name="-do-jar-with-mainclass" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" unless="manifest.available+main.class+mkdist.available"> - <j2seproject1:jar manifest="${manifest.file}"> - <j2seproject1:manifest> - <j2seproject1:attribute name="Main-Class" value="${main.class}"/> - </j2seproject1:manifest> - </j2seproject1:jar> - <echo>To run this application from the command line without Ant, try:</echo> - <property name="build.classes.dir.resolved" location="${build.classes.dir}"/> - <property name="dist.jar.resolved" location="${dist.jar}"/> - <pathconvert property="run.classpath.with.dist.jar"> - <path path="${run.classpath}"/> - <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/> - </pathconvert> - <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo> - </target> - <target name="-do-jar-with-libraries" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available"> - <property name="build.classes.dir.resolved" location="${build.classes.dir}"/> - <pathconvert property="run.classpath.without.build.classes.dir"> - <path path="${run.classpath}"/> - <map from="${build.classes.dir.resolved}" to=""/> - </pathconvert> - <pathconvert property="jar.classpath" pathsep=" "> - <path path="${run.classpath.without.build.classes.dir}"/> - <chainedmapper> - <flattenmapper/> - <globmapper from="*" to="lib/*"/> - </chainedmapper> - </pathconvert> - <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" name="copylibs" classpath="${libs.CopyLibs.classpath}"/> - <copylibs manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}" jarfile="${dist.jar}" compress="${jar.compress}"> - <fileset dir="${build.classes.dir}"/> - <manifest> - <attribute name="Main-Class" value="${main.class}"/> - <attribute name="Class-Path" value="${jar.classpath}"/> - </manifest> - </copylibs> - <echo>To run this application from the command line without Ant, try:</echo> - <property name="dist.jar.resolved" location="${dist.jar}"/> - <echo>java -jar "${dist.jar.resolved}"</echo> - </target> - <target name="-post-jar"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="jar" depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR."/> - <!-- - ================= - EXECUTION SECTION - ================= - --> - <target name="run" depends="init,compile" description="Run a main class."> - <j2seproject1:java> - <customize> - <arg line="${application.args}"/> - </customize> - </j2seproject1:java> - </target> - <target name="run-single" depends="init,compile-single"> - <fail unless="run.class">Must select one file in the IDE or set run.class</fail> - <j2seproject1:java classname="${run.class}"/> - </target> - <!-- - ================= - DEBUGGING SECTION - ================= - --> - <target name="-debug-start-debugger" if="netbeans.home" depends="init"> - <j2seproject1:nbjpdastart name="${debug.class}"/> - </target> - <target name="-debug-start-debuggee" depends="init,compile"> - <j2seproject3:debug> - <customize> - <arg line="${application.args}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="debug" if="netbeans.home" depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE."/> - <target name="-debug-start-debugger-stepinto" if="netbeans.home" depends="init"> - <j2seproject1:nbjpdastart stopclassname="${main.class}"/> - </target> - <target name="debug-stepinto" if="netbeans.home" depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee"/> - <target name="-debug-start-debuggee-single" if="netbeans.home" depends="init,compile-single"> - <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> - <j2seproject3:debug classname="${debug.class}"/> - </target> - <target name="debug-single" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single"/> - <target name="-pre-debug-fix" depends="init"> - <fail unless="fix.includes">Must set fix.includes</fail> - <property name="javac.includes" value="${fix.includes}.java"/> - </target> - <target name="-do-debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,compile-single"> - <j2seproject1:nbjpdareload/> - </target> - <target name="debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix"/> - <!-- - =============== - JAVADOC SECTION - =============== - --> - <target name="-javadoc-build" depends="init"> - <mkdir dir="${dist.javadoc.dir}"/> - <javadoc destdir="${dist.javadoc.dir}" source="${javac.source}" notree="${javadoc.notree}" use="${javadoc.use}" nonavbar="${javadoc.nonavbar}" noindex="${javadoc.noindex}" splitindex="${javadoc.splitindex}" author="${javadoc.author}" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}" private="${javadoc.private}" additionalparam="${javadoc.additionalparam}" failonerror="true" useexternalfile="true"> - <classpath> - <path path="${javac.classpath}"/> - </classpath> - <sourcepath> - <pathelement location="${src.dir}"/> - </sourcepath> - <packageset dir="${src.dir}" includes="*/**"/> - <fileset dir="${src.dir}" includes="*.java"/> - </javadoc> - </target> - <target name="-javadoc-browse" if="netbeans.home" unless="no.javadoc.preview" depends="init,-javadoc-build"> - <nbbrowse file="${dist.javadoc.dir}/index.html"/> - </target> - <target name="javadoc" depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc."/> - <!-- - ========================= - JUNIT COMPILATION SECTION - ========================= - --> - <target name="-pre-pre-compile-test" if="have.tests" depends="init,compile"> - <mkdir dir="${build.test.classes.dir}"/> - </target> - <target name="-pre-compile-test"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-test" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test"> - <j2seproject3:javac srcdir="${test.src.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}"/> - <copy todir="${build.test.classes.dir}"> - <fileset dir="${test.src.dir}" excludes="**/*.java"/> - </copy> - </target> - <target name="-post-compile-test"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-test" depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test"/> - <target name="-pre-compile-test-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-test-single" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single"> - <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> - <j2seproject3:javac srcdir="${test.src.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}"> - <customize> - <patternset includes="${javac.includes}"/> - </customize> - </j2seproject3:javac> - <copy todir="${build.test.classes.dir}"> - <fileset dir="${test.src.dir}" excludes="**/*.java"/> - </copy> - </target> - <target name="-post-compile-test-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-test-single" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single"/> - <!-- - ======================= - JUNIT EXECUTION SECTION - ======================= - --> - <target name="-pre-test-run" if="have.tests" depends="init"> - <mkdir dir="${build.test.results.dir}"/> - </target> - <target name="-do-test-run" if="have.tests" depends="init,compile-test,-pre-test-run"> - <j2seproject3:junit/> - </target> - <target name="-post-test-run" if="have.tests" depends="init,compile-test,-pre-test-run,-do-test-run"> - <fail if="tests.failed">Some tests failed; see details above.</fail> - </target> - <target name="test-report" if="have.tests" depends="init"/> - <target name="-test-browse" if="netbeans.home+have.tests" depends="init"/> - <target name="test" depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests."/> - <target name="-pre-test-run-single" if="have.tests" depends="init"> - <mkdir dir="${build.test.results.dir}"/> - </target> - <target name="-do-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single"> - <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail> - <j2seproject3:junit includes="${test.includes}"/> - </target> - <target name="-post-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single"> - <fail if="tests.failed">Some tests failed; see details above.</fail> - </target> - <target name="test-single" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test."/> - <!-- - ======================= - JUNIT DEBUGGING SECTION - ======================= - --> - <target name="-debug-start-debuggee-test" if="have.tests" depends="init,compile-test"> - <fail unless="test.class">Must select one file in the IDE or set test.class</fail> - <j2seproject3:debug classname="junit.textui.TestRunner" classpath="${debug.test.classpath}"> - <customize> - <arg line="${test.class}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="-debug-start-debugger-test" if="netbeans.home+have.tests" depends="init,compile-test"> - <j2seproject1:nbjpdastart name="${test.class}" classpath="${debug.test.classpath}"/> - </target> - <target name="debug-test" depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test"/> - <target name="-do-debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,compile-test-single"> - <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> - </target> - <target name="debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix-test"/> - <!-- - ========================= - APPLET EXECUTION SECTION - ========================= - --> - <target name="run-applet" depends="init,compile-single"> - <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> - <j2seproject1:java classname="sun.applet.AppletViewer"> - <customize> - <arg value="${applet.url}"/> - </customize> - </j2seproject1:java> - </target> - <!-- - ========================= - APPLET DEBUGGING SECTION - ========================= - --> - <target name="-debug-start-debuggee-applet" if="netbeans.home" depends="init,compile-single"> - <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> - <j2seproject3:debug classname="sun.applet.AppletViewer"> - <customize> - <arg value="${applet.url}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="debug-applet" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet"/> - <!-- - =============== - CLEANUP SECTION - =============== - --> - <target name="deps-clean" depends="init" unless="no.deps"/> - <target name="-do-clean" depends="init"> - <delete dir="${build.dir}"/> - <delete dir="${dist.dir}"/> - </target> - <target name="-post-clean"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="clean" depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products."/> -</project> +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** + +For the purpose of easier reading the script +is divided into following sections: + + - initialization + - compilation + - jar + - execution + - debugging + - javadoc + - junit compilation + - junit execution + - junit debugging + - applet + - cleanup + + --> +<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="html2wiki-impl"> + <import file="ivy-impl.xml"/> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/> + <!-- + ====================== + INITIALIZATION SECTION + ====================== + --> + <target name="-pre-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init" name="-init-private"> + <property file="nbproject/private/config.properties"/> + <property file="nbproject/private/configs/${config}.properties"/> + <property file="nbproject/private/private.properties"/> + </target> + <target depends="-pre-init,-init-private" name="-init-user"> + <property file="${user.properties.file}"/> + <!-- The two properties below are usually overridden --> + <!-- by the active platform. Just a fallback. --> + <property name="default.javac.source" value="1.4"/> + <property name="default.javac.target" value="1.4"/> + </target> + <target depends="-pre-init,-init-private,-init-user" name="-init-project"> + <property file="nbproject/configs/${config}.properties"/> + <property file="nbproject/project.properties"/> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-ivy-retrieve" name="-do-init"> + <available file="${manifest.file}" property="manifest.available"/> + <condition property="main.class.available"> + <and> + <isset property="main.class"/> + <not> + <equals arg1="${main.class}" arg2="" trim="true"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class"> + <and> + <isset property="manifest.available"/> + <isset property="main.class.available"/> + </and> + </condition> + <condition property="do.mkdist"> + <and> + <isset property="libs.CopyLibs.classpath"/> + <not> + <istrue value="${mkdist.disabled}"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class+mkdist.available"> + <and> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available+mkdist.available"> + <and> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available-mkdist.available"> + <or> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="manifest.available+main.class-mkdist.available"> + <or> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="have.tests"> + <or> + <available file="${test.src.dir}"/> + </or> + </condition> + <condition property="have.sources"> + <or> + <available file="${src.dir}"/> + </or> + </condition> + <condition property="netbeans.home+have.tests"> + <and> + <isset property="netbeans.home"/> + <isset property="have.tests"/> + </and> + </condition> + <condition property="no.javadoc.preview"> + <and> + <isset property="javadoc.preview"/> + <isfalse value="${javadoc.preview}"/> + </and> + </condition> + <property name="run.jvmargs" value=""/> + <property name="javac.compilerargs" value=""/> + <property name="work.dir" value="${basedir}"/> + <condition property="no.deps"> + <and> + <istrue value="${no.dependencies}"/> + </and> + </condition> + <property name="javac.debug" value="true"/> + <property name="javadoc.preview" value="true"/> + <property name="application.args" value=""/> + <property name="source.encoding" value="${file.encoding}"/> + <property name="runtime.encoding" value="${source.encoding}"/> + <condition property="javadoc.encoding.used" value="${javadoc.encoding}"> + <and> + <isset property="javadoc.encoding"/> + <not> + <equals arg1="${javadoc.encoding}" arg2=""/> + </not> + </and> + </condition> + <property name="javadoc.encoding.used" value="${source.encoding}"/> + <property name="includes" value="**"/> + <property name="excludes" value=""/> + <property name="do.depend" value="false"/> + <condition property="do.depend.true"> + <istrue value="${do.depend}"/> + </condition> + <path id="endorsed.classpath.path" path="${endorsed.classpath}"/> + <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'"> + <length length="0" string="${endorsed.classpath}" when="greater"/> + </condition> + <property name="javac.fork" value="false"/> + </target> + <target name="-post-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check"> + <fail unless="src.dir">Must set src.dir</fail> + <fail unless="test.src.dir">Must set test.src.dir</fail> + <fail unless="build.dir">Must set build.dir</fail> + <fail unless="dist.dir">Must set dist.dir</fail> + <fail unless="build.classes.dir">Must set build.classes.dir</fail> + <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail> + <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail> + <fail unless="build.test.results.dir">Must set build.test.results.dir</fail> + <fail unless="build.classes.excludes">Must set build.classes.excludes</fail> + <fail unless="dist.jar">Must set dist.jar</fail> + </target> + <target name="-init-macrodef-property"> + <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-javac"> + <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="${javac.debug}" name="debug"/> + <attribute default="${empty.dir}" name="sourcepath"/> + <attribute default="${empty.dir}" name="gensrcdir"/> + <element name="customize" optional="true"/> + <sequential> + <property location="${build.dir}/empty" name="empty.dir"/> + <mkdir dir="${empty.dir}"/> + <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}"> + <src> + <dirset dir="@{gensrcdir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </src> + <classpath> + <path path="@{classpath}"/> + </classpath> + <compilerarg line="${endorsed.classpath.cmd.line.arg}"/> + <compilerarg line="${javac.compilerargs}"/> + <customize/> + </javac> + </sequential> + </macrodef> + <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <sequential> + <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </depend> + </sequential> + </macrodef> + <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${build.classes.dir}" name="destdir"/> + <sequential> + <fail unless="javac.includes">Must set javac.includes</fail> + <pathconvert pathsep="," property="javac.includes.binary"> + <path> + <filelist dir="@{destdir}" files="${javac.includes}"/> + </path> + <globmapper from="*.java" to="*.class"/> + </pathconvert> + <delete> + <files includes="${javac.includes.binary}"/> + </delete> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-junit"> + <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="**" name="testincludes"/> + <sequential> + <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}"> + <batchtest todir="${build.test.results.dir}"> + <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}"> + <filename name="@{testincludes}"/> + </fileset> + </batchtest> + <classpath> + <path path="${run.test.classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <formatter type="brief" usefile="false"/> + <formatter type="xml"/> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${run.jvmargs}"/> + </junit> + </sequential> + </macrodef> + </target> + <target depends="-init-debug-args" name="-init-macrodef-nbjpda"> + <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="name"/> + <attribute default="${debug.classpath}" name="classpath"/> + <attribute default="" name="stopclassname"/> + <sequential> + <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </nbjpdastart> + </sequential> + </macrodef> + <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${build.classes.dir}" name="dir"/> + <sequential> + <nbjpdareload> + <fileset dir="@{dir}" includes="${fix.classes}"> + <include name="${fix.includes}*.class"/> + </fileset> + </nbjpdareload> + </sequential> + </macrodef> + </target> + <target name="-init-debug-args"> + <property name="version-output" value="java version "${ant.java.version}"/> + <condition property="have-jdk-older-than-1.4"> + <or> + <contains string="${version-output}" substring="java version "1.0"/> + <contains string="${version-output}" substring="java version "1.1"/> + <contains string="${version-output}" substring="java version "1.2"/> + <contains string="${version-output}" substring="java version "1.3"/> + </or> + </condition> + <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none"> + <istrue value="${have-jdk-older-than-1.4}"/> + </condition> + <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem"> + <os family="windows"/> + </condition> + <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}"> + <isset property="debug.transport"/> + </condition> + </target> + <target depends="-init-debug-args" name="-init-macrodef-debug"> + <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${debug.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${debug-args-line}"/> + <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-java"> + <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${run.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-presetdef-jar"> + <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1"> + <jar compress="${jar.compress}" jarfile="${dist.jar}"> + <j2seproject1:fileset dir="${build.classes.dir}"/> + </jar> + </presetdef> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/> + <!-- + =================== + COMPILATION SECTION + =================== + --> + <target name="-deps-jar-init" unless="built-jar.properties"> + <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/> + <delete file="${built-jar.properties}" quiet="true"/> + </target> + <target if="already.built.jar.${basedir}" name="-warn-already-built-jar"> + <echo level="warn" message="Cycle detected: html2wiki was already built"/> + </target> + <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-jar.properties}" verbose="false"/> + <property file="${built-jar.properties}" prefix="already.built.jar."/> + <antcall target="-warn-already-built-jar"/> + <propertyfile file="${built-jar.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> + <target depends="init" name="-check-automatic-build"> + <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/> + </target> + <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build"> + <antcall target="clean"/> + </target> + <target depends="init,deps-jar" name="-pre-pre-compile"> + <mkdir dir="${build.classes.dir}"/> + </target> + <target name="-pre-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-depend"> + <pathconvert property="build.generated.subdirs"> + <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </pathconvert> + <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/> + </target> + <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile"> + <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/> + <copy todir="${build.classes.dir}"> + <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/> + <target name="-pre-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile/> + <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/> + </target> + <target name="-post-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/> + <!-- + ==================== + JAR BUILDING SECTION + ==================== + --> + <target depends="init" name="-pre-pre-jar"> + <dirname file="${dist.jar}" property="dist.jar.dir"/> + <mkdir dir="${dist.jar.dir}"/> + </target> + <target name="-pre-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available"> + <j2seproject1:jar/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"> + <j2seproject1:manifest> + <j2seproject1:attribute name="Main-Class" value="${main.class}"/> + </j2seproject1:manifest> + </j2seproject1:jar> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <pathconvert property="run.classpath.with.dist.jar"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/> + </pathconvert> + <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Main-Class" value="${main.class}"/> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <echo>java -jar "${dist.jar.resolved}"</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+mkdist.available" name="-do-jar-with-libraries-without-mainclass" unless="main.class.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" name="-do-jar-with-libraries-without-manifest" unless="manifest.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target name="-post-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar,-ivy-publish" description="Build JAR." name="jar"/> + <!-- + ================= + EXECUTION SECTION + ================= + --> + <target depends="init,compile" description="Run a main class." name="run"> + <j2seproject1:java> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject1:java> + </target> + <target name="-do-not-recompile"> + <property name="javac.includes.binary" value=""/> + </target> + <target depends="init,compile-single" name="run-single"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}"/> + </target> + <target depends="init,compile-test-single" name="run-test-with-main"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/> + </target> + <!-- + ================= + DEBUGGING SECTION + ================= + --> + <target depends="init" if="netbeans.home" name="-debug-start-debugger"> + <j2seproject1:nbjpdastart name="${debug.class}"/> + </target> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/> + </target> + <target depends="init,compile" name="-debug-start-debuggee"> + <j2seproject3:debug> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto"> + <j2seproject1:nbjpdastart stopclassname="${main.class}"/> + </target> + <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}"/> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/> + <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/> + <target depends="init" name="-pre-debug-fix"> + <fail unless="fix.includes">Must set fix.includes</fail> + <property name="javac.includes" value="${fix.includes}.java"/> + </target> + <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix"> + <j2seproject1:nbjpdareload/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/> + <!-- + =============== + JAVADOC SECTION + =============== + --> + <target depends="init" name="-javadoc-build"> + <mkdir dir="${dist.javadoc.dir}"/> + <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}"> + <classpath> + <path path="${javac.classpath}"/> + </classpath> + <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}"> + <filename name="**/*.java"/> + </fileset> + <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="**/*.java"/> + </fileset> + </javadoc> + </target> + <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview"> + <nbbrowse file="${dist.javadoc.dir}/index.html"/> + </target> + <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/> + <!-- + ========================= + JUNIT COMPILATION SECTION + ========================= + --> + <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test"> + <mkdir dir="${build.test.classes.dir}"/> + </target> + <target name="-pre-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-test-depend"> + <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test"> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/> + <target name="-pre-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/> + <!-- + ======================= + JUNIT EXECUTION SECTION + ======================= + --> + <target depends="init" if="have.tests" name="-pre-test-run"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run"> + <j2seproject3:junit testincludes="**/*Test.java"/> + </target> + <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init" if="have.tests" name="test-report"/> + <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/> + <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/> + <target depends="init" if="have.tests" name="-pre-test-run-single"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single"> + <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail> + <j2seproject3:junit excludes="" includes="${test.includes}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/> + <!-- + ======================= + JUNIT DEBUGGING SECTION + ======================= + --> + <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test"> + <fail unless="test.class">Must select one file in the IDE or set test.class</fail> + <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/> + <delete file="${test.report.file}"/> + <mkdir dir="${build.test.results.dir}"/> + <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}"> + <customize> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <arg value="${test.class}"/> + <arg value="showoutput=true"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/> + <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test"> + <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/> + <!-- + ========================= + APPLET EXECUTION SECTION + ========================= + --> + <target depends="init,compile-single" name="run-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject1:java classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject1:java> + </target> + <!-- + ========================= + APPLET DEBUGGING SECTION + ========================= + --> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject3:debug classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/> + <!-- + =============== + CLEANUP SECTION + =============== + --> + <target name="-deps-clean-init" unless="built-clean.properties"> + <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/> + <delete file="${built-clean.properties}" quiet="true"/> + </target> + <target if="already.built.clean.${basedir}" name="-warn-already-built-clean"> + <echo level="warn" message="Cycle detected: html2wiki was already built"/> + </target> + <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-clean.properties}" verbose="false"/> + <property file="${built-clean.properties}" prefix="already.built.clean."/> + <antcall target="-warn-already-built-clean"/> + <propertyfile file="${built-clean.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init" name="-do-clean"> + <delete dir="${build.dir}"/> + <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/> + </target> + <target depends="-ivy-clean" name="-post-clean"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/> + <target name="-check-call-dep"> + <property file="${call.built.properties}" prefix="already.built."/> + <condition property="should.call.dep"> + <not> + <isset property="already.built.${call.subproject}"/> + </not> + </condition> + </target> + <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep"> + <ant antfile="${call.script}" inheritall="false" target="${call.target}"> + <propertyset> + <propertyref prefix="transfer."/> + <mapper from="transfer.*" to="*" type="glob"/> + </propertyset> + </ant> + </target> +</project>
--- a/nbproject/genfiles.properties Thu Jun 08 18:11:12 2006 -0400 +++ b/nbproject/genfiles.properties Tue Jan 25 17:06:57 2011 -0500 @@ -1,8 +1,8 @@ -build.xml.data.CRC32=9d118728 -build.xml.script.CRC32=867757ba -build.xml.stylesheet.CRC32=d5b6853a -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=9d118728 -nbproject/build-impl.xml.script.CRC32=22ed648d -nbproject/build-impl.xml.stylesheet.CRC32=99b91518 +build.xml.data.CRC32=9d118728 +build.xml.script.CRC32=867757ba +build.xml.stylesheet.CRC32=d5b6853a +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=4b98d2cf +nbproject/build-impl.xml.script.CRC32=4bfa927d +nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.32.1.45
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nbproject/ivy-impl.xml Tue Jan 25 17:06:57 2011 -0500 @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed 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. + * +--> +<project xmlns:ivy="antlib:fr.jayasoft.ivy.ant" basedir=".." default="default" name="ivy-impl"> + <target name="-check-ivy"> + <available property="have.ivy" resource="fr/jayasoft/ivy/ant/antlib.xml"/> + </target> + <target depends="-check-ivy" name="-ivy-define" unless="have.ivy"> + <echo level="debug" message="ivy.home : ${ivy.home}"/> + <taskdef resource="fr/jayasoft/ivy/ant/antlib.xml" uri="antlib:fr.jayasoft.ivy.ant"> + <classpath> + <fileset dir="${ivy.home}"> + <include name="*.jar"/> + </fileset> + </classpath> + </taskdef> + </target> + <target name="-ant-contrib-define"> + <echo level="debug" message="ant-contrib.lib: ${ant-contrib.lib}"/> + <taskdef resource="net/sf/antcontrib/antcontrib.properties"> + <classpath> + <pathelement location="${ant-contrib.lib}"/> + </classpath> + </taskdef> + </target> + <target name="-lib-path-init"> + <echo level="debug" message="$${lib.dir} : ${lib.dir}"/> + <if> + <equals arg1="${lib.dir}" arg2="$${lib.dir}"/> + <then> + <if> + <equals arg1="${build.classes.dir}" arg2="$${build.classes.dir}"/> + <then> + <property name="lib.dir" value="lib"/> + </then> + <else> + <property name="lib.dir" value="jar"/> + </else> + </if> + </then> + </if> + <echo level="debug" message="$${lib.dir} : ${lib.dir}"/> + <mkdir dir="${basedir}/${build.dir}/${lib.dir}"/> + </target> + <target depends="-ivy-define, -ant-contrib-define, -lib-path-init" name="-ivy-retrieve"> + <ivy:settings file="ivysettings.xml"/> + <ivy:resolve file="ivy.xml"/> + <ivy:retrieve pattern="${basedir}/${build.dir}/${lib.dir}/[artifact]-[revision].[ext]" type="jar"/> + <path id="ivy.path"> + <fileset dir="${basedir}/${build.dir}/${lib.dir}"> + <include name="**/*.jar"/> + </fileset> + </path> + <pathconvert dirsep="/" pathsep="${path.separator}" property="ivy.classpath.computed"> + <path refid="ivy.path"/> + <!--map from="${basedir}${file.separator}" to=""/--> + </pathconvert> + <property name="old.javac.classpath" value="${javac.classpath}"/> + <var name="javac.classpath" unset="true"/> + <if> + <equals arg1="${old.javac.classpath}" arg2=""/> + <then> + <property name="javac.classpath" value="${ivy.classpath.computed}"/> + </then> + <else> + <property name="javac.classpath" value="${old.javac.classpath}${path.separator}${ivy.classpath.computed}"/> + </else> + </if> + <echo level="debug" message="$${javac.classpath} : ${javac.classpath}"/> + <property name="old.javac.test.classpath" value="${javac.test.classpath}"/> + <var name="javac.test.classpath" unset="true"/> + <if> + <equals arg1="${old.javac.test.classpath}" arg2=""/> + <then> + <property name="javac.test.classpath" value="${ivy.classpath.computed}"/> + </then> + <else> + <property name="javac.test.classpath" value="${old.javac.test.classpath}${path.separator}${ivy.classpath.computed}"/> + </else> + </if> + <echo level="debug" message="$${javac.test.classpath} : ${javac.test.classpath}"/> + <property name="old.run.classpath" value="${run.classpath}"/> + <var name="run.classpath" unset="true"/> + <if> + <equals arg1="${old.run.classpath}" arg2="$${run.classpath}"/> + <then> + <property name="run.classpath" value="${ivy.classpath.computed}"/> + </then> + <else> + <property name="run.classpath" value="${old.run.classpath}${path.separator}${ivy.classpath.computed}"/> + </else> + </if> + <echo level="debug" message="$${run.classpath} : ${run.classpath}"/> + <property name="old.run.test.classpath" value="${run.test.classpath}"/> + <var name="run.test.classpath" unset="true"/> + <if> + <equals arg1="${old.run.test.classpath}" arg2="$${run.test.classpath}"/> + <then> + <property name="run.test.classpath" value="${ivy.classpath.computed}"/> + </then> + <else> + <property name="run.test.classpath" value="${old.run.test.classpath}${path.separator}${ivy.classpath.computed}"/> + </else> + </if> + <echo level="debug" message="$${run.test.classpath} : ${run.test.classpath}"/> + <property name="old.debug.classpath" value="${debug.classpath}"/> + <var name="debug.classpath" unset="true"/> + <if> + <equals arg1="${old.debug.classpath}" arg2="$${debug.classpath}"/> + <then> + <property name="debug.classpath" value="${ivy.classpath.computed}"/> + </then> + <else> + <property name="debug.classpath" value="${old.debug.classpath}${path.separator}${ivy.classpath.computed}"/> + </else> + </if> + <echo level="debug" message="$${debug.classpath} : ${debug.classpath}"/> + </target> + <target name="-ivy-publish"> + <ivy:settings file="ivysettings.xml"/> + <ivy:resolve file="ivy.xml"/> + <ivy:publish forcedeliver="true" overwrite="true" resolver="local"> + <artifacts pattern="${basedir}/${dist.dir}/[artifact].[ext]"/> + </ivy:publish> + </target> + <target name="-ivy-clean"> + <!--delete dir="lib"/--> + </target> +</project>
--- a/nbproject/project.properties Thu Jun 08 18:11:12 2006 -0400 +++ b/nbproject/project.properties Tue Jan 25 17:06:57 2011 -0500 @@ -1,60 +1,61 @@ -application.args= -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/html2wiki.jar -dist.javadoc.dir=${dist.dir}/javadoc -jar.compress=false -javac.classpath=\ - ${libs.commons-io-1.2.classpath} -# Space-separated list of extra javac options -javac.compilerargs=-Xlint:unchecked -javac.deprecation=false -javac.source=1.5 -javac.target=1.5 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir}:\ - ${libs.junit.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding= -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -# Property libs.commons-io-1.2.classpath is set here just to make sharing of project simpler. -# The library definition has always preference over this property. -libs.commons-io-1.2.classpath=../shared/commons-io-1.2/commons-io-1.2.jar -main.class=org.nwoca.ssdt.tools.html2wiki.Html2Wiki -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project -# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value -# or test-sys-prop.name=value to set system properties for unit tests): -run.jvmargs= -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -src.dir=src -test.src.dir=test +application.args= +application.title=html2wiki +application.vendor=SMITH +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/html2wiki.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs=-Xlint:unchecked +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=org.nwoca.ssdt.tools.html2wiki.Html2Wiki +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +src.dir=src +test.src.dir=test
--- a/nbproject/project.xml Thu Jun 08 18:11:12 2006 -0400 +++ b/nbproject/project.xml Tue Jan 25 17:06:57 2011 -0500 @@ -1,16 +1,33 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://www.netbeans.org/ns/project/1"> - <type>org.netbeans.modules.java.j2seproject</type> - <configuration> - <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> - <name>html2wiki</name> - <minimum-ant-version>1.6.5</minimum-ant-version> - <source-roots> - <root id="src.dir"/> - </source-roots> - <test-roots> - <root id="test.src.dir"/> - </test-roots> - </data> - </configuration> -</project> +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.java.j2seproject</type> + <configuration> + <buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1"> + <extension file="ivy-impl.xml" id="ivy"> + <dependency dependsOn="-ivy-retrieve" target="-do-init"/> + <dependency dependsOn="-ivy-clean" target="-post-clean"/> + <dependency dependsOn="-ivy-publish" target="jar"/> + </extension> + </buildExtensions> + <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> + <name>html2wiki</name> + <minimum-ant-version>1.6.5</minimum-ant-version> + <source-roots> + <root id="src.dir"/> + </source-roots> + <test-roots> + <root id="test.src.dir"/> + </test-roots> + </data> + <ivyConfiguration xmlns="http://code.google.com/p/ivybeans/ns/ivy-module/1"> + <descriptorFile>ivy.xml</descriptorFile> + <settingsFile>ivysettings.xml</settingsFile> + <configurationMapping> + <scope confs="compile" name="COMPILE"/> + <scope confs="compile,runtime" name="RUNTIME"/> + <scope confs="compile,compile-test" name="COMPILE_TEST"/> + <scope confs="compile,compile-test,runtime,runtime-test" name="RUNTIME_TEST"/> + </configurationMapping> + </ivyConfiguration> + </configuration> +</project>
--- a/src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java Thu Jun 08 18:11:12 2006 -0400 +++ b/src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java Tue Jan 25 17:06:57 2011 -0500 @@ -100,8 +100,7 @@ System.out.println(input.getAbsoluteFile()); Html2Wiki converter = new Html2Wiki(FileUtils.readFileToString(input,null)); - - + WikiChapter[] chapters = converter.getWikiChapters(); System.out.format("Writing %d wiki files...\n",chapters.length); @@ -181,7 +180,7 @@ } } - private static class WikiChapter { + protected static class WikiChapter { private String chapterName; private CharSequence contents; @@ -200,7 +199,7 @@ } public String toString() { - return "Chapter: " + chapterName + "\nContents: " + contents; + return "Chapter: " + chapterName + " Content length: " + contents.length(); } }
--- a/test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java Thu Jun 08 18:11:12 2006 -0400 +++ b/test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java Tue Jan 25 17:06:57 2011 -0500 @@ -4,24 +4,27 @@ * * Created on May 9, 2006, 4:16 PM */ - package org.nwoca.ssdt.tools.html2wiki; +import java.io.File; +import java.net.URL; import junit.framework.*; -import java.io.*; - +import org.apache.commons.io.FileUtils; /** * * @author SMITH */ public class Html2WikiTest extends TestCase { - + + File path; + public Html2WikiTest(String testName) { super(testName); } protected void setUp() throws Exception { + path = new File(Html2WikiTest.class.getResource("/resources").toURI()); } protected void tearDown() throws Exception { @@ -29,26 +32,33 @@ public static Test suite() { TestSuite suite = new TestSuite(Html2WikiTest.class); - + return suite; } + public void testChapterParsing() throws Exception { + + File f = new File(path, "sysman_handbook.html"); + + Html2Wiki converter = new Html2Wiki(FileUtils.readFileToString(f, null)); + + Html2Wiki.WikiChapter[] chapters = converter.getWikiChapters(); + + assertTrue( chapters.length > 0); + for (Html2Wiki.WikiChapter c : chapters) { + System.out.println(c); + } + } + /** * Test of main method, of class org.nwoca.ssdt.tools.html2wiki.Html2Wiki. - */ - public void testMain() throws Exception { - System.out.println("main"); - - - Html2Wiki.main(new String[] {"\\C:\\temp\\", "EMIS System Managers Manual"}); - - } - -// public void testHtml2Wiki() throws Exception { -// -// File testFile = new File("\\C:\\temp\\test.html"); -// Html2Wiki.process(testFile); -// +// */ +// public void testMain() throws Exception { +// System.out.println("main"); +// +// File path = new File(Html2WikiTest.class.getResource("/resources").toURI()); +// System.out.println(path); +// Html2Wiki.main(new String[]{path.toString(), "OECN System Managers Handbook"}); +// // } - }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/resources/sysman_handbook.html Tue Jan 25 17:06:57 2011 -0500 @@ -0,0 +1,7039 @@ +<html> +<a name="first_page"></a> + +<!-- This file created using DECdocument Version V3.3h on 25-JAN-2011 16:09:07.97 --> +<!-- TAG definitions version: V3.3h --> +<!-- The SDML doctype is: SOFTWARE.REFERENCE --> +<!-- The output destination was: HTML --> +<!-- SDML file is: NWB:[SMITH.DEV.SDML]OECN10_SYSMAN_HANDBOOK.SDML --> + +<body> +<head> +<title>Ohio Educational Computer Network System (OECN)</title> +<style> +A:hover {color: green} +A:active {color: red; background-color: white} +</style> +</head> +<h1 align="center">Ohio Educational Computer Network System (OECN)</h1> +<h1 align="center">System Manager Manual</h1> +As Developed by: Ohio Department of Education, State Software +Development Team +<p align=center> +<strong>Revision/Update Information: </strong> +May, 2001 + +<p> +<hr size=5> +<h4>Copyright ©1992, 1995 Ohio Department of Education</h4> + +<p> +Permission to reproduce this document is hereby granted, provided that +all such reproductions include all of this document (including this +copyright notice), and are not distributed for profit or resale. +<p> +<table border=5> + <tr> + <td width=120 align=center> +<a href="oecn10_sysman_handbook_full_contents.html"><font size=+2>Contents</font></a> + </td> + </tr> +</table> +<a name="post_contents"></a> + +<p> +<hr size=5> +<a name="menu_processor"><h1>Menu Processor Theory and Implementation</h1></a> +<br> +<br> + +<p> +This section contains 6 chapters which describe the OECN Menu Processor +for the system manager. It includes a complete description of the +theory and implementation of the menu processor on a VAX/VMS system. +The 6 chapters are: + +<p> + Introduction +<br> + Theory +<br> + Implementation +<br> + Invoking the Menu Processor +<br> + Modifying and Creating Menu Systems +<br> + Customizing Menus from the Distribution + +<p> +<hr size=5> +<a name="menu_intro"><h1>Chapter 1<br>Introduction</h1></a> + +<p> + The OECN Menu processor provides a flexible user menu interface to + State Software programs. It also can be used to create menus for DCL + commands, and other layered products. Menu definitions will be provided + for all state software programs. Individual A-sites will be able to add + customized menus to the default menu system provided. + +<a name="menu_features_head"><h1>1.1 Features</h1></a> + +<p> + The Menu processor provides the following features: + +<ul> + <li>User may access an item by its item number or label. + <li>Abbreviations are allowed on the current menu. + <li>Aliases are supplied for all items. The user may enter the label + name for any item on any menu in the current menu system. + <li>Help may be obtained for the current menu via the VMS Help utility. + <li>Users will only see the items on the menu that they are authorized + to access. +</ul> + +<p> + Features for the system manager: + +<ul> + <li>May be used for CAPTIVE user accounts. + <li>Menus or items may be easily added or removed. + <li>Access to items and menus may be controlled with the standard + OECN_xxxx VMS security identifiers. + <li>The OSA utility may be used to customize security. + <li>A menu system may consist of multiple menu files. This allows + individual A-sites to add custom menus without modifying the menus + included in the distribution. + <li>By default, does not spawn a subprocess when executing a command. + All commands execute in the current process. This prevents the + excessive overhead associated with repeatedly spawning subprocesses. + <li>Optionally, spawns most commands in a subprocess. Spawning commands + may increase response time for larger VAX processors. This may be + configured by the system manager. + <li>May be used from batch if the third parameter to the OECN_MENU + procedure is used. + <li>Optional timeout feature that automatically exits the menu system + if the user remains inactive for a specified period. +</ul> + +<p> +<hr size=5> +<a name="menu_theory"><h1>Chapter 2<br>Theory</h1></a> + +<p> + The basic theory behind the Menu processor is fairly simple. The menu + definitions are stored in an RMS indexed file. The menu definitions are + flexible enough to allow creation of menus containing any combination + of DCL commands, programs and information. + +<a name="menu_terms_head"><h1>2.1 Definition of Terms</h1></a> + +<p> + First, it will be helpful to define some terms that will be used + throughout the rest of this document. <p> + +<table border=3> + <caption><a name="menu_terms_tab"><strong>Table 2-1 Menu System Terms</strong></a></caption> + <tr> + <th align=center>Term </th> + <th align=center>Meaning </th> + </tr> + <tr> + <td> + Menu Processor + </td> + <td> + The program that the user runs to enter a menu system. + </td> + </tr> + <tr> + <td> + menu + </td> + <td> + A menu consists of the menu heading and the menu items on that menu. + </td> + </tr> + <tr> + <td> + menu name + </td> + <td> + The name of the menu as defined in the MENUEDT program. + </td> + </tr> + <tr> + <td> + menu item + </td> + <td> + An item on a menu. An item belongs to a specific menu and must have a + label that is unique throughout the menu system. + </td> + </tr> + <tr> + <td> + label + </td> + <td> + A label is the unique name for an item. It is defined in the MENUEDT + program and is the label the user will see on the actual menu. + </td> + </tr> + <tr> + <td> + menu file + </td> + <td> + A file created by MENUEDT that contains the menu definitions for one + for more menus. + </td> + </tr> + <tr> + <td> + menu system + </td> + <td> + A menu system is a collection of menus that the user has access to. + This is the + <strong>logical</strong> menu system as viewed by a specific user. A + system may consist of one or more physical menu files. + </td> + </tr> + <tr> + <td> + menu specification + </td> + <td> + A menu specification is the format for specifying a menu. The + specification may contain a file and/or a menu name. + </td> + </tr> + <tr> + <td> + alias + </td> + <td> + For each item in the menu system an alias is created. It has the same + name as the item's label. The alias is global to the entire menu + system, i.e., it crosses all menu file boundaries. The alias must be + unique within each menu system. + </td> + </tr> +</table> + +<a name="menu_files_theory"><h1>2.2 How Menu Files Create a Menu System</h1></a> + +<p> +<a href="oecn10_sysman_handbook_full.html#menu_system_fig">Figure 2-1</a> displays a graphical representation of a possible menu +system. +<a name="menu_system_fig"></a> +<p> +<strong>Figure 2-1 Conceptual View of a Menu system</strong> +<hr> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> ++-----------------------Menu-System-------------------+ +| +Menu-File+ | +| | | +-Alias-File-+| +| | +Menu+ | | || +| | | | | | || +| | +----+ | | || +| +----+----+ | || +| +-------+------------+ +------------+| +| +---Menu+File--+ +Menu+File-+ +-Secur-File-+| +| | +Menu+ | | | | || +| | | | | | +Menu+ | | || +| | +-+--+ | | | | | | || +| | +------+ | | +----+ | | || +| | +Menu+ +Menu+| +----+-----+ +------------+| +| | | | | || +----+------+ | +| | +----+ +-+--+| | | | +| | +------+ | +Menu+File+ +Menu+File+ | +| | +Menu+ +Menu+| | +Menu+ | | +Menu+ | | +| | | | | || | | | | | | | | | +| | +----+ +----+| | +----+ | | +----+ | | +| +--------------+ +---------+ +---------+ | ++-----------------------------------------------------+ +</pre> +</table> + +<p> + You can see from <a href="oecn10_sysman_handbook_full.html#menu_system_fig">Figure 2-1</a> that a menu system as seen by the user may + consist of multiple menu files, and a menu file may contain multiple + menus. This provides considerable flexibility for designing and + modifying a menu system. + +<p> + The menu system that is included with the distribution will have a + separate menu file for each OECN state software package. Additionally, + each major package will have a <strong>local</strong> menu. This local + menu will be in a separate menu file and left blank. You will be able + to customize this local menu without disturbing the other menus. + +<p> + A more detailed description of how to modify and create menus will + follow later in this document. The method used to customize local menus + will be discussed. + +<p> + Each menu system has one alias file. This file is used to find an + item's location if the user enters an alias. + +<p> +Also, the menu system may have one local security file. This file is +optional and created by the OSA utility. See the OECN Software Security +for VAX/VMS System Manager manual for more information about security +and the OSA utility. + +<a name="menu_specs_head"><h1>2.3 Menu Specifications</h1></a> + +<p> + Throughout this document there are references to <strong>menu + specifications</strong>. Wherever a menu specification is required the + following syntax is allowed: +<table border=0> + <tr> + <td> + <br> +<pre> +@menu_file\menu_name +</pre> + </td> + </tr> +</table> +<p> + +<table border=3> + <tr> + <th align=center>Parameter </th> + <th align=center>Meaning </th> + </tr> + <tr> + <td> + @menu_file + </td> + <td> + Name of a menu file that contains menu_name. If not specified then + menu_name is assumed to exist in the current menu file. + </td> + </tr> + <tr> + <td> + menu_name + </td> + <td> + A menu within either the specified menu file or the current menu file. + </td> + </tr> +</table> + +<p> + A valid menu specification contains one or both of these components. + +<p> + If a menu name is specified without a menu file then the menu is + assumed to exist in the current menu file. If there is no current menu + file then OECN$MENU is used. + +<p> + If a menu file is specified without a menu name then the default menu + of the menu file's header record is used. + +<p> + If both the menu file and menu name are specified they must be + separated by a backslash (\). + +<p> +Examples: + +<table border=3> + <tr> + <th align=center>Specification </th> + <th align=center>Result </th> + </tr> + <tr> + <td> + @BUD_MENU\USAS_PRC + </td> + <td> + Goes to the USAS_PRC menu of the BUD_MENU file. + </td> + </tr> + <tr> + <td> + @MAIN_MENU + </td> + <td> + Goes to the default menu of the MAIN_MENU file. + </td> + </tr> + <tr> + <td> + LOCAL + </td> + <td> + Goes to the LOCAL menu of the current file. + </td> + </tr> +</table> + +<a name="alias_file_head"><h1>2.4 The Alias File</h1></a> + +<p> + Each menu system may have exactly one <strong>alias file</strong>. An + alias file contains a record for each menu item in the menu system. + This alias record contains a pointer to the proper menu file that + contains the item. + +<p> + When the user enters a label name that is not on the current menu, the + alias file is checked for the label. If found then the item is located + in the appropriate menu file, and, assuming the user has access to the + item, it is executed. This allows the user to get to any item or menu + in the menu system without navigating through the intervening menus. + +<p> +The alias file is built automatically by the MENUUTL program. See +<a href="oecn10_sysman_handbook_full.html#build_alias_head">Section 5.2.1, Building the Alias File</a> for more information about creating the alias file. + +<a name="option_exec_sect"><h1>2.5 Option execution</h1></a> + +<p> +By default, the menu processor does <em>not</em> spawn subprocesses to +execute user options. All commands are executed in the user's current +process. This implies that menu processor image must exit and restart +(activate) after each option has completed. This is called +<strong>"terminate and execute"</strong> mode. This mode may provided +optimal response time for smaller VAX processors, particularly machines +with small memory configurations. + +<a name="heading_2.5.1"><h2>2.5.1 Spawning Options</h2></a> + +<p> +Another mode that may be chosen by the system manager is "spawn and +execute". In this mode, <em>most</em> commands are executed in a +subprocess. The menu processor remains running in the main process and +does not terminate. Spawning options may reduce response time for +larger VAX machines with excess physical memory. + +<p> +No firm guidelines can be provided to suggest which mode will provide +optimal response time and resource utilization for a given system. +Response time in both modes is determined by machine size, available +memory, tuning, typical load on the system, etc. Trial and error under +a typical work load is the only way to determine the best mode. If the +time required to spawn a process is less than the time required to +activate the menu image, then spawning is preferable. + +<p> +To implement menu option spawning the system manager must be aware of +the following: + +<ol start=1 > + <li>Users must have a PRCLM Authorize quota of at least 1. If the user + executes programs that also spawn processes (e.g., TPU/EVE, WPS) they + may need a higher PRCLM quota. + <li>Other user quotas also may need to be increased in order for the + main and subprocess to have access to sufficient resources. + <li>BALCSETCNT (balance set count) in SYSGEN must be large enough to + handle the addition processes. + <li>Some types of options must be executed in the main process (see + below). +</ol> + +<p> +Prior to implementing spawning you must carefully consider whether any +custom menu files contain any options that fall under #4 above. The +subprocess that is created by the menu processor is temporary (i.e., +the subprocess logs out as soon as the option has completed). This +means that any commands performed in the subprocess will not be +permanent. If you have options that change user logicals, create +processes, etc. or anything that must affect both the main process and +the subprocess, you must modify your custom menu files. + +<p> +The MENUEDT program will allow you to define an item type "DP" (DCL +command in Parent). These types of items will always be executed in the +main process using "terminate and execute". These means that any +commands executed in this way will affect both the main process and +subprocess. These types of items should be used sparingly and will +seldom be necessary. The only item in the menu files distributed by +SSDT that need the "DP" item type was the DETPRT option of the LOCAL +menu. All other SSDT menu items may be executed in a subprocess. + +<a name="heading_2.5.2"><h2>2.5.2 Selecting Execution Mode</h2></a> + +<p> +To select either "terminate and execute" or "spawn and execute" mode, +the system manager needs only define a single logical. The logical name +is OECN$MENU_BEHAVIOR and may be defined in the SYSTARTUP procedure. +The valid values are: TERMINATE or SPAWN. For example, if you want to +use "spawn and execute", add the following line the SYSTARTUP procedure: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_BEHAVIOR "SPAWN" +</pre> +</table> + +<p> +This logical also can be defined at the group or process level. If the +logical is not defined, the default is "TERMINATE". + +<a name="timeout_head"><h1>2.6 Inactivity Timeout</h1></a> + +<p> +The menu processor has an optional feature that will cause it to +automatically exit if the user does not enter a command after a +specified period of time. This might be a useful security feature for +user users who remain idle in the menu for long periods of time or +forget to logout. + +<p> +The system manager may add a command to the OECN$MENU_BEHAVIOR logical +that will enable the timeout feature. The following syntax may be used: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_BEHAVIOR "TIMEOUT=n" +</pre> +</table> + +<p> + Where <em>n</em> is the number minutes to wait with no activity. After + the timeout period expires without any options being entered, the menu + processor will exit automatically. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +The menu processor simply exits the menu and returns to DCL it does not +log the user off the system. It is up to the local captive login +procedure or other mechanism to log the user off. </td> + </tr> +</table> +</center> + +<p> +<hr size=5> +<a name="menu_implentation_chap"><h1>Chapter 3<br>Implementation</h1></a> + +<p> + Several steps are required in order to implement the Menu Processor on + your system. The steps are briefly outlined below, detailed + explanations follow: + +<ol start=1 > + <li> Install the OECN, MENU and HELP distribution packages with + OECN_INSTALL. + <li> Establish the necessary OECN logicals. + <li> Move the menu files and VMS Help libraries from the distribution + directories to the appropriate directories on your system. + <li> Create the OECN_MENU symbol. + <li> Use the VMS Install utility to make the Menu Processor a known, + shared image. +</ol> + +<a name="installation_head"><h1>3.1 Installation</h1></a> + +<p> + The Menu Processor uses files from the OECN, MENU and HELP packages. + Install these packages as usual using OECN_INSTALL. For further + information about OECN_INSTALL see OECN_INSTALL.DOC in the VAX manager + documentation directory. + +<a name="logicals_head"><h1>3.2 Establish OECN Logicals</h1></a> + +<p> + Several logicals are used by the Menu Processor to locate the menu + files and VMS Help libraries. <p> + +<table border=3> + <caption><a name="logicals_tab"><strong>Table 3-1 Menu Logicals</strong></a></caption> + <tr> + <th align=center>Logical </th> + <th align=center>Purpose </th> + </tr> + <tr> + <td> + OECN$MENU$FILES + <sup>1</sup> + </td> + <td> + Device and directory where the menu files are located. + </td> + </tr> + <tr> + <td> + OECN$MENU + <sup>2</sup> + </td> + <td> + Default menu file if none is specified by the user when the Menu + Processor is invoked. + </td> + </tr> + <tr> + <td> + OECN$ALIAS + <sup>2</sup> + </td> + <td> + Default alias file that is used if none is specified when the Menu + Processor is invoked. + </td> + </tr> + <tr> + <td> + OECN$SECUR + </td> + <td> + Local security file. Optional. Created by OSA utility to define local + security. + </td> + </tr> + <tr> + <td> + OECN$HELP + <sup>1</sup> + </td> + <td> + Device and directory where the VMS Help libraries are located. + </td> + </tr> + <tr> + <td> + OECN$MENU_HELP + <sup>2</sup> + </td> + <td> + Default menu help library. Used when the user presses + <kbd>[PF2]</kbd> or ?. + </td> + </tr> + <tr> + <td> + OECN_MENU_PROMPT + </td> + <td> + Default prompt to be used in the Menu Processor. Optional. May be + overridden by the user with a SET PROMPT command. + </td> + </tr> + <tr> + <td> + OECN_MENU_MODE + </td> + <td> + Default mode. Optional. May contain the "MENU" or "COMMAND". May be + overridden by the user with a SET MODE command. + </td> + </tr> + <tr> + <td> + OECN$MENU_BEHAVIOR + </td> + <td> + Optional logical that may contain commands to control how the menu + processor behaves at run-time. This logical is defined by the system + manager. See <a href="oecn10_sysman_handbook_full.html#behavior_logical">3.2.1</a>. + </td> + </tr> +</table> +<hr> +<sup>2</sup> Defined by the OECN_STARTUP procedure. +<br> +<sup>1</sup>May be defined as a search list. +<br> +<hr> + +<p> + OECN$MENU$FILES and OECN$HELP must be defined in either the SYSTARTUP + or individual LOGIN.COM files. These logicals may be defined at the + system, group or process level. For example, the OECN$MENU logical may + be defined for each user to provide a different default menu. + +<a name="behavior_logical"><h2>3.2.1 Specifying options with OECN$MENU_BEHAVIOR logical</h2></a> + +<p> + This section describes the commands that may be placed in the + OECN$BEHAVIOR logical. The syntax for the logical definition is: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_BEHAVIOR "command[,command]..." +</pre> +</table> + +<p> + Where <em>[command]</em> is one of the commands in the following table. + The command(s) must be enclosed in quotes and be in uppercase. When + multiple commands are specified they must be separated by commas (,). + This logical can be defined at the system, group, job or process level. + <p> + +<table border=3> + <caption><a name="Table_3-2"><strong>Table 3-2 Behavior Options</strong></a></caption> + <tr> + <th align=center>Command </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + TERMINATE + </td> + <td> + Causes the processor to use the " terminate and execute " + method for executing options. This is the default behavior. + </td> + </tr> + <tr> + <td> + SPAWN + </td> + <td> + Causes the processor to spawn all DCL and Program type action items in + a subprocess. + </td> + </tr> + <tr> + <td> + TIMEOUT=n + </td> + <td> + Sets the inactivity timeout interval to n minutes. + </td> + </tr> + <tr> + <td> + NOTIMEOUT + </td> + <td> + Disables inactivity timeout. This is the default behavior. + </td> + </tr> +</table> + +<p> + For example, to specify the spawn option and a timeout of 30 minutes + use the following command: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_BEHAVIOR "SPAWN,TIMEOUT=30" +</pre> +</table> + +<a name="move_files_head"><h1>3.3 Move Files to Appropriate Directories</h1></a> + +<p> + Move the menu files (OECN$ROOT:[MENU.DIST]*.DAT) to the directory + referenced by OECN$MENU$FILES. + +<p> + Move the VMS Help libraries from the HELP package distribution + directory to the directory referenced by OECN$HELP. + +<p> + The users of the Menu Processor must have read access to the above + files. + +<p> + Also move the following files to the OECN$ directory: + +<blockquote> + OECN$ROOT:[OECN.V1P0.DIST]MENU.EXE + <br>OECN$ROOT:[OECN.V1P0.DIST]OECN_MENU.COM +</blockquote> + +<p> + The users must have execute access to these files. + +<a name="add_symbol_head"><h1>3.4 Add Global Symbol</h1></a> + +<p> + Add the following symbol to either your SYLOGIN.COM or each user's + LOGIN.COM who will be using the system: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ OECN_MENU :== $OECN$:MENU +</pre> +</table> + +<p> + This creates a foreign command that the OECN_MENU.COM procedure uses to + invoke the Menu Processor. Other symbols may be necessary to make it + easier for your users to invoke a menu. These symbols will be discussed + in the <a href="oecn10_sysman_handbook_full.html#invoking_chap">Chapter 4, Invoking the Menu Processor</a>. The OECN_MENU symbol is the only required symbol. + +<a name="install_head"><h1>3.5 Install the Menu Processor</h1></a> + +<p> + Although it is not necessary for proper execution of the Menu + Processor, it is <strong>strongly</strong> recommended that you install + the Menu Processor as a known image. + +<p> + Because the Menu Processor does not spawn a subprocess it must be + reactivated after each time the user selects a menu item. If the image + is not installed, image activation will cause a noticeable delay in the + Menu Processor. + +<p> + The recommended method of installing the image is to add the following + commands to your SYSTARTUP.COM: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ INSTALL :== $INSTALL/COMMAND_MODE +$ INSTALL ADD OECN$:MENU.EXE/OPEN/SHARED/HEADER +</pre> +</table> + +<p> +<hr size=5> +<a name="invoking_chap"><h1>Chapter 4<br>Invoking the Menu Processor</h1></a> + +<p> + The Menu Processor must be invoked via a command procedure that is + provided as part of the OECN package. The Menu Processor depends on + this command procedure to perform several vital functions and to + actually execute any items selected by the user. Absolutely nothing + useful will happen if the Menu Processor is invoked directly. + +<p> + Additionally, the Menu Processor is invoked by the command procedure + with a foreign command. Therefore the following symbol definition is + required. See <a href="oecn10_sysman_handbook_full.html#add_symbol_head">Section 3.4, Add Global Symbol</a>. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ OECN_MENU == "$OECN:MENU" +</pre> +</table> + +<p> + To invoke the menu processor the following command must be used: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ @OECN$:OECN_MENU [menu spec] [alias file] [menu_option] +</pre> +</table> + +<p> + The OECN_MENU.COM command procedure is provided with the distribution + and must be used to invoke the menu processor. + +<p> + The first parameter is an optional menu specification that specifies + the default menu file and menu to be used. If the menu specification is + not supplied then OECN$MENU is used by default. See <a href="oecn10_sysman_handbook_full.html#menu_specs_head">Section 2.3, Menu Specifications</a> for + more information about menu specifications. + +<p> + The second optional parameter is the alias file for the menu system + being invoked. If not specified then OECN$ALIAS is used by default. + +<p> +The third optional parameter is a menu command, option or alias to be +executed. If this parameter is specified then the menu processor will +execute the option and return to DCL, the user will +<strong>not</strong> be left in the menus after the option has finished +executing. This could be used as a replacement for the DCL RUN command, +particularly for batch procedures. This would insure that batch +procedures do the same security checking as interactive processes. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +The menu processor will operate properly in batch only if the third +parameter is supplied. If the parameter is not specified the menu +processor will not function in batch. </td> + </tr> +</table> +</center> + +<p> + This command may be defined in a global symbol, invoked from a captive + login procedure or from inside another procedure. No restrictions are + placed on the method of invoking the Menu Processor. + +<a name="invoke_example_head"><h1>4.1 Examples</h1></a> + +<p> + For most users the following symbol definition is sufficient: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ MENU == "@OECN$:OECN_MENU" +</pre> +</table> + +<p> + This will invoke the Menu Processor with the default menu and alias + file. This will normally, unless changed by you, be the MAIN_MENU file, + which contains menu items for all state software packages. + +<p> +If users will be using the third parameter (or it will be used from +batch) then the following symbol might be used: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ MENU == "OECN$:OECN_MENU """" """" " +</pre> +</table> + +<p> +This will leave the first two parameters as null (accepting the default +menu and alias files) and allow the third parameter to be specified +after the MENU symbol. + +<p> + As another possibility, suppose that you have a payroll user that would + rather be started out in the USPS menu. In this case put this symbol in + that user's LOGIN procedure: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ MENU == "@OECN$:OECN_MENU @PAY_MENU" +</pre> +</table> + +<p> + This will put the user in the PAY_MENU directly. Note that this does + not restrict the user to the PAY_MENU, it just starts them out in that + menu. + +<p> +<hr size=5> +<a name="modifying_menus_chap"><h1>Chapter 5<br>Modifying and Creating Menu Systems</h1></a> + +<p> + The MENUEDT program is a fully functional maintenance program for + modifying and creating menu files. Another program, MENUUTL, provides + several necessary and useful utilities when manipulating the files, + such as building the alias file and reporting functions. <p> + +<table border=3> + <caption><a name="menu_type_tab"><strong>Table 5-1 Menu Record Types</strong></a></caption> + <tr> + <th align=center>Record Type </th> + <th align=center>Function </th> + </tr> + <tr> + <td> + File Header Record + </td> + <td> + Contains information about the entire menu file. There is only one file + header record per file. + </td> + </tr> + <tr> + <td> + Menu Header Record + </td> + <td> + Contains information specific to one menu. There is no structural or + logical limit to the number of menus that may exist in a menu file. + </td> + </tr> + <tr> + <td> + Item Record + </td> + <td> + Contains the actual item that appears on a menu. Each item record + belongs to one and only one menu. The number of items is limited by the + Menu Processor to 50 items (about 4 screens). + </td> + </tr> +</table> + +<p> + The menu files and records form a <em>loose</em> hierarchy. That is, + the hierarchy is created by the person developing the menu system. The + hierarchy is not enforced by the MENUEDT program or even the Menu + Processor. The menus can be connected in an almost limitless number of + combinations. It is impossible for the MENUEDT program to know exactly + what the runtime environment will be for the menu file. Thus, very + little error checking is performed or even attempted. This means that + menus that you modify or create should be tested thoroughly before + being made available to your users. + +<a name="using_edt_head"><h1>5.1 Using MENUEDT</h1></a> + +<p> + When you first run the MENUEDT program it will prompt you for the name + of the menu file to modify. If the file does not exist it will be + created. <p> + +<table border=3> + <caption><a name="edt_options_tab"><strong>Table 5-2 MENUEDT Main Menu Options</strong></a></caption> + <tr> + <th align=center>Option </th> + <th align=center>Function </th> + </tr> + <tr> + <td> + Add + </td> + <td> + Adds new records of any type. + </td> + </tr> + <tr> + <td> + Change + </td> + <td> + Enters change mode for the current record. + </td> + </tr> + <tr> + <td> + Delete + </td> + <td> + Deletes the current record. + </td> + </tr> + <tr> + <td> + Top + </td> + <td> + Goes to top of file (File header record). + </td> + </tr> + <tr> + <td> + Find + </td> + <td> + Finds a record by menu or item name. + </td> + </tr> + <tr> + <td> + Next + </td> + <td> + Goes to the next record. + </td> + </tr> + <tr> + <td> + Simulate + </td> + <td> + Simulates how the menu will look to the user. The simulation is + approximate since the MENUEDT upper window is smaller than in the Menu + Processor. + </td> + </tr> + <tr> + <td> + Open + </td> + <td> + Closes the current menu file and prompts for a new menu file to open. + </td> + </tr> + <tr> + <td> + Exit + </td> + <td> + Exits MENUEDT. + </td> + </tr> +</table> + +<a name="menu_type_head"><h2>5.1.1 Menu File Record Types</h2></a> + +<p> + This section and the following sections show sample screens that are + used by MENUEDT to modify the various record types. After each screen + is a detailed explanation of each field and its purpose. + +<a name="file_header_head"><h2>5.1.2 File Header Record</h2></a> + +<p> + The first record in each menu file must be a File Header record and + each file must contain exactly one Header record. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + Menu File Header Record: + + 1. Desc: + 2. Default menu: + 3. Modify default security identifiers + +</pre> +</table> + +<p> + +<table border=3> + <caption><a name="file_header_fld_tab"><strong>Table 5-3 File Header Record Fields</strong></a></caption> + <tr> + <th align=center>Field </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + Desc + </td> + <td> + This description is used in the heading for all menus in this file. + </td> + </tr> + <tr> + <td> + Default Menu + </td> + <td> + Is the default menu for this file if the user does not specify a menu + when the file is invoked. This menu will normally be the top-level menu + for this file. + </td> + </tr> + <tr> + <td> + Modify default security identifiers + </td> + <td> + Enters the + <em>Security Id Maintenance</em> screen to allow default security + identifiers to be placed on the menu file. See <a href="oecn10_sysman_handbook_full.html#secur_id_screen_head">Section 5.1.5</a> for more + information about security identifiers. + </td> + </tr> +</table> + +<a name="menu_header_head"><h2>5.1.3 Menu Header Record</h2></a> + +<p> + The Menu Header record contains information about each menu in the + file. There must be exactly one Header record for each menu contained + in the file. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + Menu header record: + + 1. Menu Name : + 2. Description : + 3. Heading Type: + 4. Help file : + 5. Help topic : + 6. Parent Menu : + 7. Modify Security Identifiers + +</pre> +</table> + +<p> + +<table border=3> + <caption><a name="menu_header_fld_tab"><strong>Table 5-4 Menu Header Fields</strong></a></caption> + <tr> + <th align=center>field </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + Menu Name + </td> + <td> + Name of the menu. This is the name that will be displayed in the menu + heading. + </td> + </tr> + <tr> + <td> + Description + </td> + <td> + This description is used in the heading for this menu. + </td> + </tr> + <tr> + <td> + Heading Type + </td> + <td> + Indicates what type of menu heading to use for this menu. + <table border=3> + <tr> + <td> + A + </td> + <td> + Heading contains both the file description and the menu description. + </td> + </tr> + <tr> + <td> + B + </td> + <td> + Heading contains only the menu heading description. + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td> + Help File + </td> + <td> + The VMS Help file that will be used if the user enters HELP at this + menu. + </td> + </tr> + <tr> + <td> + Help topic + </td> + <td> + The initial topic string used when the user enters HELP. + </td> + </tr> + <tr> + <td> + Parent Menu + </td> + <td> + Must contain the parent menu specification for this menu. This is the + menu that the user will return to when they enter /EXIT or ^. If this + field is blank then the menu is assumed to be the top level menu of the + menu system. + </td> + </tr> + <tr> + <td> + Modify security identifiers + </td> + <td> + Enters the + <em>Security Id Maintenance</em> screen to allow security identifiers + to be placed on the menu. See <a href="oecn10_sysman_handbook_full.html#secur_id_screen_head">Section 5.1.5</a> more information about + security identifiers. + </td> + </tr> +</table> + +<a name="menu_item_head"><h2>5.1.4 Menu Item Record</h2></a> + +<p> + One menu item record must be specified for each desired item on a menu. + A menu can contain a maximum of 50 item records. If there are less than + 8 items then the menu will be double spaced, otherwise the menu will be + single spaced. If there are more items than will fit on one screen then + the menu will be divided into multiple screens. + +<p> + An item may be of one of four types, the value and meaning of the + Action field is determined by the Item Type field. The four possible + types and the meaning of the Action field are defined in <a href="oecn10_sysman_handbook_full.html#item_types_tab">Table 5-5</a>. + <p> + +<table border=3> + <caption><a name="item_types_tab"><strong>Table 5-5 Menu Item Types</strong></a></caption> + <tr> + <th align=center>Item Type </th> + <th align=center>Interpretation of Action Field </th> + </tr> + <tr> + <td> + D + </td> + <td> + DCL command to execute + </td> + </tr> + <tr> + <td> + DP + </td> + <td> + DCL command to execute in Parent process + </td> + </tr> + <tr> + <td> + P + </td> + <td> + Program filespec to execute + </td> + </tr> + <tr> + <td> + M + </td> + <td> + Menu specification + </td> + </tr> + <tr> + <td> + T + </td> + <td> + Ignored + </td> + </tr> +</table> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + Menu Item record: + + 1. Menu Name: + 2. Label : + 3. Desc : + 4. Item Type: + 5. Action : + + 6. Item order#: + 7. Modify Security Identifiers + +</pre> +</table> + +<p> + +<table border=3> + <caption><a name="menu_item_tab"><strong>Table 5-6 Menu Item Fields</strong></a></caption> + <tr> + <th align=center>Field </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + Menu Name + <sup>1</sup> + </td> + <td> + Name of the menu that this item belongs to. + </td> + </tr> + <tr> + <td> + Label + <sup>1</sup> + </td> + <td> + Label of this item that the user will use to reference this item. + </td> + </tr> + <tr> + <td> + Desc + </td> + <td> + Description displayed for this item. + </td> + </tr> + <tr> + <td> + Item Type + </td> + <td> + Indicates what type of item this is: + <table border=3> + <tr> + <td> + D + </td> + <td> + DCL command + </td> + </tr> + <tr> + <td> + DP + </td> + <td> + DCL in Parent process + </td> + </tr> + <tr> + <td> + P + </td> + <td> + Program to be executed + </td> + </tr> + <tr> + <td> + M + </td> + <td> + Menu item + </td> + </tr> + <tr> + <td> + T + </td> + <td> + Text Item + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td> + Action + </td> + <td> + Contains the action to be performed when this item is selected. See + <a href="oecn10_sysman_handbook_full.html#action_values_head">Section 5.1.4.1</a> for more information. + </td> + </tr> + <tr> + <td> + Item order # + </td> + <td> + This field is used to order the items on the menu. By default the items + are in alphabetical order by Item Label. If you want to change the + order of the items then you may put a number in the Item Order# field. + This number does not affect the number that the user will use to invoke + the item, it only affects the physical order of the items on the menu. + </td> + </tr> + <tr> + <td> + Modify security identifiers + </td> + <td> + Enters the + <em>Security Id Maintenance</em> screen to allow security identifiers + to be placed on the item. See section <a href="oecn10_sysman_handbook_full.html#secur_id_screen_head">Section 5.1.5</a> for more information + about security identifiers. + </td> + </tr> +</table> +<hr> +<sup>1</sup>Key fields of the menu file. However the MENUEDT program +allows these fields to be changed. +<br> +<hr> + +<a name="action_values_head"><h3>5.1.4.1 Values for Action Field</h3></a> + +<p> + Much of the Menu Processor's flexibility is provided by the values that + may be placed in the Action field. The Action field and the Item Type + field together determine what will happen when the user chooses an item + from a menu. +<p> +<strong>Item Type D (DCL)</strong> +<br> + +<p> + If Type = "D" then Action must contain a valid DCL command. Any DCL + command may be specified, including command procedures. These commands + may be executed in subprocess depending on the setting of + OECN$MENU_BEHAVIOR (See <a href="oecn10_sysman_handbook_full.html#option_exec_sect">Section 2.5</a>). For example, the following are + valid for Action: + +<blockquote> + MAIL + <br>@PURGE_TEXT_FILES + <br>Write sys$output "Hello there." +</blockquote> + +<p> + If the DCL command requires or allows parameters to be specified you + may place a tilde (~) at the location where the parameters should be + placed. + +<p> + As a simple example, assume that you have a print procedure that allows + the filename and the number of copies as parameters. Item Label is + PRINT and the name of the command procedure is OECN$UTL:PRINT.COM. On + the PRINT item record you would put the following in the Action field: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +@OECN$UTL:PRINT ~ ~ +</pre> +</table> + +<p> + When the user enters the PRINT item from the Menu Processor they may + specify the parameters on one line. For example, the user could enter: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Menu> PRINT MYFILE.TXT 10 +</pre> +</table> + +<p> + The DCL command that would be executed by the Menu Processor would be: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ @OECN$UTL:PRINT MYFILE.TXT 10 +</pre> +</table> + +<p> + Up to 8 parameters may be specified. Parameters containing spaces must + be enclosed in quotes. (Parameters may not contain quotes.) Lowercase + characters are preserved inside of quotes. Parameters are replaced from + left to right. No other parsing of the parameters is done. Parameters + are always considered to be optional, if the user does not specify a + parameter then the tilde (~) will be replaced by a space. +<p> +<strong>Item Type DP (DCL in Parent)</strong> +<br> + +<p> + Type "DP" is identical to type "D" except that the Action line is + always executed in the parent process. This only has an effect if the + menu processor is in "spawn and execute" mode (See <a href="oecn10_sysman_handbook_full.html#option_exec_sect">Section 2.5</a>). + +<p> +This item type should be used sparingly and only when the command +<em>must</em> be executed in the parent process. This is only necessary +when the commands being executed must affect both the parent and +subprocess. Examples of such commands are: + +<ul> + <li>Commands that change security identifiers + <li>Commands that modify menu logicals or modes + <li>Commands that spawn subprocesses with the /NOWAIT qualifier +</ul> + +<p> +<strong>Item Type P (Program)</strong> +<br> + +<p> + If Type = "P" then the Action field contains the full VMS file + specification for an executable image to be executed by the DCL RUN + command. The distinction between programs and DCL commands is made + primarily for compatibility with the HP version of the Menu Processor. + However, future VAX releases may take advantage of this distinction. +<p> +<strong>Item Type M (Menu)</strong> +<br> + +<p> + If Type = "M" then the Action field must contain a valid menu + specification. This type of item allows the user to move from one menu + to another at a lower level. The menu specified may be in the current + menu file or may specify a completely different menu file. See + <a href="oecn10_sysman_handbook_full.html#menu_specs_head">Section 2.3</a> for more information about menu specifications. +<p> +<strong>Item Type T (Text)</strong> +<br> + +<p> + If Type = "T" then the action line is ignored. Text items are used to + put information or subheadings on a menu. For text items, the + Description field is simply displayed on the menu without a label or an + option number. + +<a name="secur_id_screen_head"><h2>5.1.5 Menu Security Screen</h2></a> + +<p> + The <strong>Modify Security Identifier</strong> screen allows you to + require that the user has specific VMS identifiers before they are + allowed access to certain menu elements. + +<p> + Security may be placed on any level: File, Menu or Item. If the user + does not have access to a menu item, it will not appear on the menu. + +<p> +Three levels of access can be specified for each identifier that +appears on the Security Identifier screen: Read-only, Standard or Group +Manager. See <a href="oecn10_sysman_handbook_full.html#security_ids">Section 5.1.5.1</a> for more information about how these +identifiers are derived. + +<p> + The following screen shows an example of a menu element that requires + the user to have read-only access to the OECN_PPS identifier or + standard access to the OECN_SALSIM identifier. Note that the user must + only have one of the selected identifiers. Of course, users with + OECN_SYSMAN access have access to all menu elements regardless of these + identifiers. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + 1) OECN_EDCIMS 9) OECN_SYSMAN + 2) OECN_EIS 10) OECN_USAS + 3) OECN_OECN 11) OECN_USPS + R 4) OECN_PPS 12) OECN_VIS + 5) OECN_PVS 13) OECN_USER1 + S 6) OECN_SALSIM 14) OECN_USER2 + 7) OECN_SECIMS 15) OECN_USER3 + 8) OECN_SECIMS_GRPMAN 16) OECN_USER4 + +(R = Read-Only, S = Standard, G = Group Manager) + +</pre> +</table> + +<p> + Security will be propagated through the menu structure. If security is + not specified for a menu element, then security will be inherited from + the level above it. The following list details the rules that are used + to determine how security is inherited. + +<ol start=1 > + <li>If a menu item has no security specified for it, then security will + be inherited from the menu header record to which the item belongs. + <li>If a menu header has no security, then it will inherit its security + from its parent's menu header record. This occurs until a parent record + is found that contains security information, or the top-level menu is + found within the current menu file. + <li>The top-level menu of each menu file, will inherit security from + the file header record. + <li>If no security is specified, after rule #3 above, then there is no + security required to access the menu element. +</ol> + +<p> + The identifiers OECN_USER1 through OECN_USER4 are for use locally at + the A-sites. You may assign these identifiers in any manner you wish. + For example, you may want to allow specific users to access VMS Mail. + You could use OECN_USER1 to restrict a MAIL menu item to those users. + These identifiers will not be used by SSDT in any State Software + programs. + +<p> + If four identifiers are not enough for your site, you may add new ones. + Up to 16 identifier positions have been reserved for use at the A-site + level. See OECN_IDS.LIB in OECN$LIB: for instructions. + +<a name="security_ids"><h3>5.1.5.1 Security Identifiers</h3></a> + +<p> + The security identifiers that appear on the Security Identifier screen + are the "standard" identifiers. Three possible identifiers + exist for each standard identifier, which are used to specify three + levels of access. These alternate identifiers are derived by adding a + suffix to the standard identifier. + +<p> + The following table lists the three access levels, in order of lowest + level access to the highest. <p> + +<table border=3> + <caption><a name="security_level_tbl"><strong>Table 5-7 Security Access Levels</strong></a></caption> + <tr> + <th align=center>Access Level </th> + <th align=center>Suffix </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + Read-Only + </td> + <td> + _RO + </td> + <td> + If a user holds the identifier then read-only access is granted. This + user may execute read-only programs or have access to read-only + functions within programs. + </td> + </tr> + <tr> + <td> + Standard + </td> + <td> + none + </td> + <td> + If a user holds this identifier then the user is granted + "standard" access to the identifier. This user is assumed to + be a standard read-write user of the corresponding package. + </td> + </tr> + <tr> + <td> + Group Manager + </td> + <td> + _GM + </td> + <td> + Users that hold this identifier are granted access to "group + manager" functions. This user is assumed to hold special + privileges within the corresponding package. + </td> + </tr> +</table> + +<p> +For example, for the OECN_USPS identifier there are really three +identifiers that may be granted to a user. These identifiers are: + +<blockquote> + OECN_USPS_RO + <br>OECN_USPS + <br>OECN_USPS_GM +</blockquote> + +<p> +All these access levels, and therefore all the identifiers, exist for +all packages, even if the package itself does not implement the +identifiers. In other words, the Menu Processor will test for all the +identifiers, even if the individual package does not. + +<p> +It also should be noted that the access levels will be applied to the +A-site specific identifiers. That is, there will also be OECN_USER1_RO +and OECN_USER1_GM identifiers available for use at the A-site level. + +<a name="menuutl_head"><h1>5.2 Using MENUUTL</h1></a> + +<p> + The MENUUTL program provides some necessary functions for building, + maintaining and documenting a menu system. The options provided are: + +<ol start=1 > + <li>Build the Alias File + <li>Simulated Menu Listing + <li>Detailed Menu Report + <li>Hierarchical Menu Listing +</ol> + +<a name="build_alias_head"><h2>5.2.1 Building the Alias File</h2></a> + +<p> + The first and the most important option of MENUUTL is the alias file + build option. The alias file contains a pointer for each menu item in + the system. Therefore, whenever you add or remove menu items from a + menu file you must rebuild the alias file. + +<p> + MENUUTL makes this process rather simple. All you have to do is run + MENUUTL and choose option 1. MENUUTL will ask the following questions: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Physical name of top level menu file:___________ +</pre> +</table> + +<p> + Enter the physical filespec of the top-level menu file. This is the + current physical location of the top-level menu file. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Logical name of top level menu file:_____________ +</pre> +</table> + +<p> + Enter the logical filespec of the top level menu file. This should be + the logical name of the file that will be used when the user accesses + the menu system. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + The physical and logical name should normally be the same. </td> + </tr> +</table> +</center> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Enter new alias filename: ___________________ +</pre> +</table> + +<p> + Enter the name of the new alias file to be built. The alias file is + always rebuilt from scratch and a new version is created. + +<p> + After prompting for these values, MENUUTL will begin reading through + the specified menu file and add an alias for each item found. It will + also search for references to other menu files. If such references are + found, MENUUTL will search those files for menu items and add aliases + for each one. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Important</strong></font></center><hr + size=1 noshade> + MENUUTL uses the OECN$MENU$FILES logical to search for the menu files + in the same manner as will be used by the Menu Processor. Therefore, + the runtime environment for MENUUTL must be the same as when the Menu + Processor will be invoked. </td> + </tr> +</table> +</center> + +<p> + As stated earlier, all aliases must be unique across the entire menu + system. If MENUUTL finds a duplicate alias name, an error message will + displayed and the duplicate will not be added. Processing will continue + and the alias file will be usable, but the alias for the duplicate item + will not exist. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + You may also use the OECN$:BUILD_ALIAS.COM command procedure to build + the alias file. This procedure will automatically build a new alias + file using the current values of OECN$MENU$FILES, OECN$MENU and + OECN$ALIAS. You can run this procedure after installing a new + distribution or customizing menu files. If you frequently modify menu + files, you could even run the procedure periodically in batch to ensure + that the alias file is always up-to-date. </td> + </tr> +</table> +</center> + +<a name="simulate_list_head"><h2>5.2.2 Simulated Menu Listing</h2></a> + +<p> + This option will read through the specified menu file and create a + simulated menu listing. The listing will display the menu in as close + an approximation as possible on a hardcopy printer. The option will + only report on one menu file at a time and will be sorted in + alphabetical order by menu name. + +<a name="detailed_list_head"><h2>5.2.3 Detailed Menu Listing</h2></a> + +<p> + The detailed menu report lists all available information about the + specified menu file. This report is particularly useful for double + checking the action fields and security. + +<a name="hier_list_head"><h2>5.2.4 Hierarchical Listing</h2></a> + +<p> + This report will display the structure of the menu system. The menus + are listed in the proper order as they appear on the menu. This option + will prompt for the top level menu file and menu where the listing is + to start. You need not necessarily start at the top of the entire menu + system. + +<a name="osa_head"><h1>5.3 OSA</h1></a> + +<p> +The OSA, OECN Security Authorization, Utility may be used in +conjunction with the OECN Menu Processor to fine tune security access. +OSA can be used to enable user's access to individual programs to be +granted or denied. This <em>local security</em> is defined by each +A-site and is maintained separately from the menu system included on +the OECN distribution. (See also VMS Manager's Guide) + +<p> +<hr size=5> +<a name="custom_chap"><h1>Chapter 6<br>Customizing Menus from the Distribution</h1></a> + +<p> + This chapter describes the recommended procedure for customizing the + menu files from the distribution. Following this procedure will ensure + that you can install future releases with minimum effort and maintain a + consistent user interface across the state. + +<p> + Each major package has its own menu file. The file name for the primary + menu file ends with _MENU and has an extension of .DAT. For example, + the USAS menu file is named BUD_MENU.DAT. On the main menu of each + package there is an item that links to a <em>local</em> menu file. This + local menu file is an empty menu file that you may customize as you + wish. The local menu filenames end with _LCL. Therefore, the USAS local + menu is named: BUD_LCL.DAT. + +<p> + It is recommended that you only modify the *_LCL menu files. If you + modify the other primary menu files, you will not be able to install + updated menu files in the future without making all of your + modifications over again. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +Security for all menu items may be customized, even if they are part of +the distribution, without modifying the menu files. This is +accomplished by using the OECN Security Authorization (OSA) utility. +See the <em>OECN Software Security for the VMS System Manager</em> +manual for information about the OSA utility and local security. </td> + </tr> +</table> +</center> + +<a name="local_head"><h1>6.1 Modifying a Local Menu File</h1></a> + +<p> + Following is the recommend procedure for modifying one or more menu + files. + +<ol start=1 > + <li>Redefine the OECN$MENU$FILES to be a search list. + <li>Modify the Menu Files + <li>Build a New Alias File + <li>Redefine OECN$MENU$FILES permanently +</ol> + +<a name="redefine_logical_head"><h2>6.1.1 Redefine the OECN$MENU$FILES logical</h2></a> + +<p> + The first step is to redefine OECN$MENU$FILES as a search list. For + consistency with other customized files, it is recommended that you use + OECN$CUSTOM. However, you may use any directory that you wish. The rest + of this chapter assumes that you are placing the customized menu files + in OECN$CUSTOM. For example: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU$FILES - +_$ OECN$CUSTOM,DUA0:[ODE.MENU.DIST] +</pre> +</table> + +<p> + This will cause the Menu Processor and MENUUTL to search first through + OECN$CUSTOM and then the distribution menu files. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + You may want to make this logical assignment in your current process, + instead of at the SYSTEM level, while changing the menu files. This + will prevent any users from getting into a half completed menu. </td> + </tr> +</table> +</center> + +<a name="heading_6.1.2"><h2>6.1.2 Modify the Menu Files</h2></a> + +<p> + Copy the *_LCL.DAT menu files that you want to modify from the + distribution into OECN$CUSTOM. Then use MENUEDT to make the desired + modifications. By making all modifications in OECN$CUSTOM: will insure + that installing future releases will not overlay your customized local + menus. + +<p> + Use the Menu Processor and MENUUTL to test the new menus as needed. If + you're creating new menus, be sure that the users have read access to + the new files. + +<a name="heading_6.1.3"><h2>6.1.3 Build a New Alias File</h2></a> + +<p> + After all desired changes have been made, use MENUUTL to rebuild the + alias file. You may put the alias file in OECN$CUSTOM or simply replace + the current alias file in OECN$ALIAS. If you change the location of the + alias file be sure to redefine the OECN$ALIAS logical. + +<p> + You may build the alias file manually by running MENUUTL, or you may + use the BUILD_ALIAS.COM procedure in the OECN$ directory. + +<a name="heading_6.1.4"><h2>6.1.4 Redefine OECN$MENU$FILES Permanently</h2></a> + +<p> + If you have not already done so, define the logical OECN$MENU$FILES to + be a search list as above at the SYSTEM level. + +<p> + At this point your users should have access to the customized menus. + +<a name="heading_6.2"><h1>6.2 After a Distribution</h1></a> + +<p> + If you modify the local menu files in this way, your changes will not + be affected by any future releases. Changes made by SSDT will + automatically be installed when you copy the distribution menu files to + the OECN$MENU$FILES directory. + +<p> +However, you will have to rebuild the alias file after installing each +distribution. After a package has been installed and the menu files +moved to thier proper location, you must rebuild the alias file. + +<p> + You may build the alias file manually by running MENUUTL, or you may + use the BUILD_ALIAS.COM procedure in the OECN$ directory. The + BUILD_ALIAS.COM procedure will automatically build a new alias file + using the files in OECN$MENU$FILES. You can run the procedure + interactvely by typing: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + $ @OECN$:BUILD_ALIAS +</pre> +</table> + +<p> +Or you can submit it for batch processing using DCL SUBMIT. By default, +BUILD_ALIAS will rebuild the default menu system based on the current +values of OECN$MENU$FILES, OECN$MENU and OECN$ALIAS logicals. If you +have other menu systems on your system, you can pass parameters to +BUILD_ALIAS to indicate the location and names of the menu and alias +files. See the comments in BUILD_ALIAS.COM for more information about +using this procedure. + +<a name="intercept_head"><h1>6.3 Intercepting Menu Actions</h1></a> + +<p> + Sometimes it is desirable, or necessary, to redefine the action + associated with a menu item. For instance, you may want to force + certain actions prior to running a particular program or force certain + options to run in batch. + +<p> + This may be done by intercepting the action line of specific options + <em>without</em> modifying the menu files supplied by SSDT. You must + write a DCL command procedure that will replace the action line you are + going to intercept. Then assign a special logical to point to this + command procedure. + +<p> + The logical must be defined as follows: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_ACTION_label filespec +</pre> +</table> + +<p> + Where <em>label</em> is the menu option label that you want to + intercept and <em>filespec</em> is the full filespec of the DCL command + procedure. The logical may be defined at the system, group or process + level, so you may intercept the action line for different classes of + users. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + If the logical is defined system-wide it will affect all menu systems + that you have active on your system. If you have multiple menu systems + that contain the same label then they will all be affected. If this is + not what you want you may need to define this logical at the group or + process level. </td> + </tr> +</table> +</center> + +<p> + After this logical is defined the command procedure will be executed + <em>instead of</em> the action line defined by the menu file. + +<p> + The following parameters will be passed to the command procedure : + +<table border=3> + <tr> + <td> + P1 + </td> + <td> + Menu label name that invoked the procedure + </td> + </tr> + <tr> + <td> + P2 + </td> + <td> + Original action line defined by the menu file + </td> + </tr> + <tr> + <td> + P3-P8 + </td> + <td> + Other parameters entered by the user + </td> + </tr> +</table> + +<p> + The procedure may use these parameters as it wishes or ignore them. + +<p> + For example, suppose that you want to automatically execute a backup of + the USPS files prior to the user running BUDDIS. The following + procedure, called PAY:BUDDIS_ACTION, might be used: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$! +$! PAY:BUDDIS_ACTION.COM -- Procedure used by the BUDDIS menu option +$! +$ on error then exit +$ +$ @PAY:SAVEPAY ! A-site procedure to perform disk backup set of +$ ! USPS files. +$ +$ DEFINE/USER SYS$INPUT SYS$COMMAND +$ RUN OECN$PAY:BUDDIS +$ +$ EXIT +</pre> +</table> + +<p> + The following logical definition would be made to intercept the BUDDIS + action for all users: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ DEFINE/SYSTEM OECN$MENU_ACTION_BUDDIS PAY:BUDDIS_ACTION +</pre> +</table> + +<p> +<hr size=5> +<a name="batch_mail_chap"><h1>Chapter 7<br>Batch Mail Message System Manager Guide</h1></a> + +<a name="heading_7.1"><h1>7.1 Overview</h1></a> + +<p> +The command procedure BATCH_MAIL_MESSAGE.COM can be used to send a VMS +mail message via a batch job. This is useful for messages with large +audiences where the user does not wish to tie up their terminal for an +extended period of time. + +<a name="heading_7.2"><h1>7.2 Sending a Mail Message via Batch</h1></a> + +<p> +To use the command procedure for generic mail messages: + +<p> +Create the desired mail message using a text file. + +<p> +Submit the procedure as follows supplying the necessary parameter +values: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ SUBMIT OECN$:BATCH_MAIL_MESSAGE/PARAMETER=("P1","P2","P3","P4") +</pre> +</table> + +<p> +Where: + +<ul> + <li>P1 - Name of the text file to be mailed. + <li>P2 - VMS mail address the text file will be sent to. + <li>P3 - Text that is to be displayed on the Subject Line of the + message. + <li>P4 - Y/N (yes/no) flag that indicates whether or not to delete the + text file containing the message after it is sent. +</ul> + +<p> + +<hr size=5> +<a name="oecn_view_chap"><h1>Chapter 8<br>OECN VIEW Utility</h1></a> + +<a name="heading_8.1"><h1>8.1 Overview</h1></a> + +<p> +The OECN_VIEW utility allows users to view text files on the screen. It +can be used for report files produced by OECN state software or other +text documents. OECN_VIEW is a TPU based product, layered on DEC/EVE. + +<p> +By default, OECN_VIEW will search for files in OECN$OUT which have the +following extensions: *.TXT, *.LIS, *.DOC, *.RPT, *.LPT, *.RPT. These +are the only files that OECN_VIEW will show to the user when they use +the "Go_File" function or invoke VIEW without a file name. + +<p> +However, A-sites may customize both the directory and/or the extension +if desired. Define the OECN_VIEW_DIRECTORY logical to define the +directory(ies) to be searched. It may be a search-list. The default for +OECN_VIEW_DIRECTORY is OECN$OUT. + +<p> +In order to change the file extensions, define the logical +OECN_VIEW_FILES to be a search list containing the filespecs to search. +Each entry in the search list must refer to OECN_VIEW_DIRECTORY. + +<p> +Examples of the logicals are given below: + +<a name="heading_8.2"><h1>8.2 OECN_VIEW.COM</h1></a> + +<p> +The OECN_VIEW.COM command procedure is found in OECN$. It is used to +define the two logicals, OECN_VIEW_DIRECTORY and OECN_VIEW_FILES. +Observe the following notes from this procedure. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +$!+ +$! Notes: +$! +$! This procedure is a shell for the OECN_VIEW utility. It provides +$! defaults for the file directory and file types that the user may view. +$! +$! A-sites can configure VIEW to behave differently if desired by defining +$! the following logicals: +$! +$! OECN_VIEW_DIRECTORY = Defines the directory OECN_VIEW will search +$! when user uses the 'Go File' command or invokes +$! VIEW without a file name. This logical may +$! be a search list. The default is OECN$OUT. +$! +$! OECN_VIEW_FILES = Filespecs which user can see when the use +$! 'Go file'. The logical should be a searchlist +$! containing wildcard specfications for the files +$! names or types the user can view. Each +$! equivalence string must refer to OECN_VIEW_DIRECTORY +$! for the device/directory. That is, OECN_VIEW_FILES +$! should specify just the wildcard filename and type. +$!- + + +</pre> +</table> + +<a name="heading_8.2.1"><h2>8.2.1 Customizing OECN VIEW</h2></a> + +<p> +The following sample command file shows how to customize the +directories and the file extensions to be viewed. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +$!+ +$! VIEW_EXAMPLES.com +$! +$! Example of using OECN_VIEW to view shared documents. This +$! command procedure may be added to a local menu to allow +$! users to view documents on-line. +$! +$! In this example, users are given the ability to view internet documents. +$! Allows users to view *.TXT and *.DOC files in the directory +$! PUB:[INTERNET_DOCS]. +$! +$! - +$ set noon +$ set noverify +$ +$ define/user OECN_VIEW_DIRECTORY PUB:[PUBDOM.NWOCA.INTERNET_DOCS] +$ +$ define/user OECN_VIEW_FILES OECN_VIEW_DIRECTORY:*.TXT,- + OECN_VIEW_DIRECTORY:*.DOC +$ +$ @oecn$:oecn_view +$ +$exit + + + +</pre> +</table> + +<a name="heading_8.2.2"><h2>8.2.2 Creating a DCL Command</h2></a> + +<p> +The VIEW utility works automatically from the MENU. However, you could +define a symbol to execute VIEW from DCL. + +<p> +For example, define: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +LOOK := = @OECN$:OECN_VIEW + +</pre> +</table> + +<p> +Then use the LOOK command from the $ prompt. + +<a name="heading_8.2.3"><h2>8.2.3 OECN_EDIT</h2></a> + +<p> +The OECN_VIEW utility uses a special editor called OECN_EDIT. Its +purpose is to provide I/O routines to allow TPU to automatically read +and translate VFC files into text. Please see <a href="oecn10_sysman_handbook_full.html#oecn_edit_chap">Chapter 9, OECN EDIT Utility</a>, for more +details. +<p> + +<hr size=5> +<a name="oecn_edit_chap"><h1>Chapter 9<br>OECN EDIT Utility</h1></a> + +<a name="heading_9.1"><h1>9.1 Overview</h1></a> + +<p> +OECN_EDIT is a foreign command replacement for the EDIT/TPU DCL +command. It is completely command line (qualifier and parameter) +compatible with EDIT/TPU. Its purpose is to provide I/O routines to +allow TPU to automatically read and translate VFC files into text. When +using OECN_EDIT, all VFC files read by TPU are converted into text with +form-feed and line-feed characters to preserve formatting. All other +file types are NOT affected by OECN_EDIT and are read normally by TPU. +This is different from the default TPU editor, which ignores VFC +formatting. OECN_EDIT is used by the OECN_VIEW.COM procedure to allow +VFC files to be viewed correctly. However, it may also be used with any +TPU section file as an editor. + +<a name="heading_9.2"><h1>9.2 Using OECN_EDIT</h1></a> + +<p> +In order to use OECN_EDIT as your interface to TPU, define the +following symbol: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +$ EDIT := = $OECN$:OECN_EDIT/TPU + +</pre> +</table> + +<p> +Note: The /TPU qualifier is required. + +<p> +You may also include other qualifiers which you would normally use with +EDIT/TPU, such as /SECTION, /UNIT, etc. OECN_EDIT will use the normal +EVE section and initialization files by default. +<p> + +<hr size=5> +<a name="oecn_keymap_chap"><h1>Chapter 10<br>OECN KEYMAP Utility</h1></a> + +<a name="heading_10.1"><h1>10.1 Overview</h1></a> + +<p> +The OECN_KEYMAP utility allows users to select a terminal emulator, +such as REFLECTIONS, EXCURSIONS, or PERSONA. Using this utility defines +the logical OECN$KEY_MAP to point to a .INI file containing the desired +keymapping. The mapping allows you to re-label the standard function +keys. You cannot actually reassign the program functions to different +keys. That is, from the programs point of view, the user is required to +press a VT200 F11 for the "Find" function. However, you can assign F11 +to any PC key you wish in the emulator and then relabel F11 on the +screen to match the PC keyboard. + +<a name="heading_10.2"><h1>10.2 Using KEYMAP</h1></a> + +<p> +Upon selecting the KEYMAP option from the OECN menu the user is given a +list of keymapping options to select from. This menu of options is +built by searching for all files named OECN$KEYMAP*.INI in either the +OECN$ or the OECN$CUSTOM directory. If the same filename is found in +both directories, only the one in OECN$CUSTOM will be used. The +description used in the menu will be determined by whether or not a +"DESCRIPTION=xxx" command is used. If the command is found in the .INI +file, the description will be used for the menu, otherwise the filename +will be used in the menu. + +<p> +When a user selects their option, the name of the .INI file selected is +recorded in a file called OECN$KEYMAP.DAT in their SYS$LOGIN directory. +If keymapping is turned off, the OECN$KEYMAP.DAT file is deleted from +the SYS$LOGIN directory. + +<p> +The OECN_LOGIN procedure has been modified to look for the existence of +this file and define the OECN$KEY_MAP logical to point to the .INI file +found in the .DAT file. After selecting their option in KEYMAP, +OECN_LOGIN will be immediately executed causing the logical to be +defined for that process. Then, each time the user logs in, OECN_LOGIN +will check for the OECN$KEYMAP.DAT file and set the OECN$KEY_MAP +logical appropriately for that process. + +<p> +The following standard .INI files have been created: + +<ul> + <li>OECN$KEYMAP_EXCURSIONS.INI + <li>OECN$KEYMAP_PERSONA.INI + <li>OECN$KEYMAP_REFLECTIONS_MAC.INI + <li>OECN$KEYMAP_REFLECTIONS_PC.INI +</ul> + +<p> +These files may be used as a starting point to create other .INI files +for other terminal emulators that may be in use by districts or to +support customized key mappings for districts. Instructions are +included at the top of the .INI files which explain how the files need +to be formatted and which keys are able to be mapped. It is recommended +that the new .INI file be placed in the OECN$CUSTOM directory and be +given a different name if it is to be an additional menu option. It is +also recommended that the description inside the .INI file be changed +to something meaningful to the user as this is what they will see in +the KEYMAP menu. +<p> + +<hr size=5> +<a name="oecn_setupenv_chap"><h1>Chapter 11<br>OECN SETUPENV Utility</h1></a> + +<a name="heading_11.1"><h1>11.1 Overview</h1></a> + +<p> +SETUPENV is a general purpose utility for establishing or switching to +user environments. The goal of the utility is to provide a single place +to configure the software environment (primarily logicals) for given +entities and allow user processes to configure based on these +environment settings. + +<p> +The concept for SETUPENV is similar to the BUNNY/FROG utilities +available from NOACSC. However, it is intended to be more flexible and +capable of configuring multiple environments. SETUPENV is not tailored +to any particular software product. It may be used in the configuration +of state software, McSIS, InfOhio, or any other software that requires +logicals in establishing a user's environment. + +<p> +The general goals of the utility are as follows: + +<ol start=1 > + <li>To provide a single location for all configuration information. + <li>To provide a means for processes to establish a default context + during login. + <li>To provide a means for users to change contexts using an + interactive (or DCL) interface. + <li>To allow DAS personnel the ability to switch to any context using + the same rules as a user's process. + <li>To provide compatibility with BUNNY, FROG, and USE to make the + transisition to the new utility easier. + <li>To provide DCL and API interfaces which allow other utilities the + ability to find and establish contexts. + <li>To provide support for common OpenVMS configuration methods in use + by DA Sites, including group tables and shared logical tables. +</ol> + +<a name="heading_11.2"><h1>11.2 Getting Started</h1></a> + +<p> +The SETUPENV utility is very flexible allowing the capability to deal +with the variety of possible setups in use at the OECN DA Sites. This +flexibility leads to a significant number of options in both the DCL +command interface and options available in the OECN$SETUP +initialization file. However, it is unlikely that any one DA Site will +need all of the features provided by SETUPENV. Most sites will only +need a limited set of options. + +<p> +To get started with SETUPENV it is recommended that a simple OECN$SETUP +file with a minimal set of options for just a few entities be created. +Starting small will give the opportunity to experiment with the utility +to see how, or if, it can fit into your environment. + +<a name="heading_11.2.1"><h2>11.2.1 Entity Types</h2></a> + +<p> +SETUPENV manages a user's context by assuming that any given process +will have one context in each of the four entity "types". The current +types of entities are: + +<ul> + <li>DISTRICT + <li>BUILDING + <li>LIBRARY + <li>OTHER +</ul> + +<p> +Therefore, a user may have one entity selected in each of these types +and change the context for one entity without affecting the others. For +example, a user might have a context in DISTRICT_A and BLG_B but be +eligible to switch into several different LIBRARY entities. SETUPENV +will allow the user to switch into different libraries without +affecting the current district and building. + +<p> +Entities can be linked together to form logical hierarchies. For +example, a district entity might define the context for USPS, USAS, and +EMIS. A building entity might define the context for McSIS. When a user +selects a building, it may be desirable for the user's process to also +select the corresponding district entity so that the EMIS logicals are +switched automatically. SETUPENV can handle these relationships using +the PARENT attribute in the OECN$SETUP file. Please refer to the PARENT +attribute for more information. +<p> + +<a name="heading_11.2.2"><h2>11.2.2 DCL Command Syntax</h2></a> +<br> + +<p> +SETUPENV must be defined as a foreign command: +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +$ SETUPENV :== $OECN$:SETUPENV + +</pre> +</table> + +<p> +Syntax: +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +$ SETUPENV [entry_code...] + [/MENU] + [/NEXT] + [/RESET] + [/LOGIN[=([SIS],[INFOHIO],[BY_ACCESS],[USERNAME[=n]])] + [/TYPE={DISTRICT,BUILDING,OTHER,ALL] + [/LOG] + [/[NO]PROMPT] + [/CATEGORIES={wildcard}] + [/APPLICATION={application}] + [/ARCHIVE=[archive_code]] + [/[NO]RESTRICT_IRNS] + [/PRINT] + [/USE] + [/BUNNY] + [/FROG] + + +</pre> +</table> + +<ul> + <li><strong>ENTRY_CODE</strong> indicates the entry(s) to be selected + from the OECN$SETUP.INI file. The INI file indicates the environment to + be established for each entry. Multiple entries may be set by enclosing + the entry codes in quotes separated by commas. When setting multiple + entries, the first entry is considered to be the primary entry. + <li><strong>/MENU</strong> indicates the user should be presented a + menu to select an entry based on their process security. /MENU is the + default for interactive processes when there are no other qualifiers + and no parameter specified. + <li><strong>/RESET</strong> attempts to reset the current process to + it's original state. Any "reset" entries existing on the INI file are + used to determine which logicals should be reset. If there are no reset + entries on the INI file, the LNM$FILE_DEV logical will be the only one + returned to it's original state. + <li><strong>/LOGIN</strong> instructs SETUPENV to attempt to determine + the user's default login context. If a specific entry code(s) is + specified with /LOGIN, the specified entry will override the defaults. + The following flags may be included to control how SETUPENV/LOGIN + determines the default entries: + + <ul> + <li><strong>SIS</strong> searches the process' rightslist for + identifiers in the format SIS_x. For the first such identifier "x" is + used as the default entry. + <li><strong>INFOHIO</strong> searches the process' rightslist for + identifiers in the format INFOHIO_x. For the first such identifier "x" + is used as the default entry. In order to avoid potential conflicts + with SIS entry codes, SETUPENV will first look for an entry named + "x_LIB". If and x_LIB entry is found, it will be used as the default + InfOhio entry, otherwise just "x" will be used. + <li><strong>BY_ACCESS</strong> indicates that SETUPENV should determine + the user's default entry by checking security access to the entries. + SETUPENV will scan OECN$SETUP file and find the first entry of each + type (DISTRICT, BUILDING, LIBRARY, OTHER) to which the user has access + making this the default. BY_ACCESS should only be used by DA Sites who + have carefully placed proper identifiers on entries to allow access to + appropriate users. + <li><strong>USERNAME=n</strong> uses the first "n" characters of the + username as the entry code. This is useful for sites who use a username + prefix to indicate districts and who have set up matching entry codes + in the OECN$SETUP file. + </ul> + <br>SETUPENV/LOGIN will also (unconditionally) search for an identifier + called "SETUPENV_xxx". If the user has such an identifier, then it is + always used as the default entry, superceding the default provided by + the above flags. This serves as a means to provide a specific default + for users who may have access to multiple entries. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +When /LOGIN is specified, SETUPENV will not issue errors if a default +entry can not be found. This allows SETUPENV/LOGIN to be used in +system-wide login procedures even for users who do not normally need a +specific software context. </td> + </tr> +</table> +</center> + <li><strong>/NEXT</strong> indicates that the next entry should be + selected based on the current or specified entry. If an entry is + specified as a parameter, then the entry selected will be the one + immediately following it. Otherwise, the values of the + OECN$SETUP_CURRENT_* logicals are used to determine the current entry. + The primary purpose of /NEXT is to allow DCL procedures to process all + or selected entries sequentially. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +If /TYPE is not specified to indicate the type of the next entry, then +the /TYPE defaults to the same type as the current entry +(OECN$SETUP_ENTRY). That is, by default, /NEXT moves to the same type +of entry as the current entry. If there is no current entry, then the +default is DISTRICT. </td> + </tr> +</table> +</center> + <li><strong>/TYPE</strong> may be used in conjunction with /NEXT or + /MENU to determine the type of entry that may be considered. For + example, if /TYPE=DISTRICT is specified with /NEXT, then only district + entries will be considered. The default for /NEXT is DISTRICT. The + default for /MENU is ALL. + <li><strong>/CATEGORIES</strong> may be used with /NEXT or /MENU to + select only entries where the CATEGORIES attribute matches the + specified wildcard. + <li><strong>/APPLICATION</strong> may be used with /NEXT to select only + entries containing the specified application. Only one application may + be specified and it must exactly match an application specified on the + entries APPLICATION attribute. + <li><strong>/[NO]PROMPT</strong> causes the user's DCL prompt and OECN + Menu prompt to be set to a value representing the entry(s) selected. + /NOPROMPT is the default. + <li><strong>/LOG</strong> indicates an informational message should be + displayed indicating the entry selected. If multiple entries are set as + a result of the command, only the primary entry is displayed. + <li><strong>/ARCHIVE[=archive_code]</strong> indicates which archive is + to be selected. If a specific archive is provided and it exists for the + entry, then the logical and table definitions for the archive will be + set. If no archive is specified, then the first archive for the + selected entry will be used. If /ARCHIVE is specifed with /MENU, the + archvives will be presented to the user as seperate choices on the menu. + <li><strong>/RESTRICT_IRNS</strong> determines if SETUPENV should + attempt to define the OECN$EMIS_RESTRICT_IRNS logical. This logical is + set by checking all the entries which have a relationship (parent, + child, or sibling) based on the PARENT attributes. For each such entry, + the users access to the entries is checked (based on the IDENTIFIER + attributes). If the user has access to the entry, then the IRN of the + entry is added to the OECN$EMIS_RESTRIC_IRNS logical. + <li><strong>/PRINT</strong> attempts to determine the user's default + printer using a convention from NOACSC. The "owner" field for the + current user is retrieved from SYSUAF. If the owner field contains a + slash (/) the characters after the slash are tested to see if it + contains a valid queue name. If not, "$PRINT" is appended to the string + from the owner field and is again tested as a queue. If either value + translates to a valid queue name (other than SYS$PRINT), then SYS$PRINT + is defined as a logical to point to the queue. The OECN_PRT symbol is + also defined to print to the queue. + <li><strong>/EMIS</strong> places SETUPENV in "EMIS" mode. In this + mode, SETUPENV simulates the behavior of EMIS_SELECT.COM. The + OECN$EMIS_DBS file is read and handled in the same manner as + EMIS_SELECT. In this mode, the meaning of the "entry code" parameter is + the DBS code of the EMIS database, instead of a SETUPENV entry code. + The following qualifiers are valid with /EMIS: + + <ul> + <li>/NEXT + <li>/RESET + <li>/MENU + <li>/CATEGORIES + <li>/LOG + </ul> + <br>See the "EMIS_SELECT Compatibility" section for more information. + <li><strong>/USE, /BUNNY, /FROG</strong> provide compatibility with the + corresponding NOACSC's utilities. When one of these qualifiers is + specified, the utility accepts the corresponding utilitie's qualifiers + and converts them to the nearest SETUPENV equivalent. See the "NOACSC + Compatibility" section for more information. +</ul> + +<h2>Usage Notes</h2> + +<p> +When /NEXT is used, if the specified or next entry cannot be found +SETUPENV exits with an error severity. + +<p> +After successfully selecting an entry, OECN_LOGIN.COM is executed to +ensure the users OECN$x logicals are set correctly. If the DAS has +established the OECN_LOGIN_EPILOGUE procedure, it will subsequently be +executed. This provides a means for the DAS to customize the behavior +and do any additional processing after an entry is selected. + +<p> +Likewise, when /EMIS is specified, EMIS_SELECT_EPILOGUE and +EMIS_SWITCH_FY will be invoked after successfully selecting a database. + +<a name="heading_11.3"><h1>11.3 Logicals Created By SETUPENV</h1></a> + +<p> +After successfully selecting an entry, SETUPENV establishes a series of +logicals (OECN$SETUP_*) to describe the current context and to maintain +it's own context for subsequent invocations of SETUPENV. These logicals +may be used by DCL procedures but should never be modified or +deassigned (use SETUPENV/RESET to deassign the logicals if necessary). + +<p> +The logical OECN$SETUP_ENTRY contains the current selected entry. This +is the primary entry that was specified as a parameter, selected via +the menu, or selected using /NEXT. + +<p> +The logical OECN$SETUP_ARCHIVE contains the archive code if one was +selected using /ARCHIVE or the menu. + +<p> +One logical is defined for each of the entry types that has been +selected. A user can have one context in up to four different "types" +of entries: DISTRICT, BUILDING, LIBRARY, OTHER. For each type that has +been selected, the corresponding logical will be defined: + +<ul> + <li>OECN$SETUP_CURRENT_DISTRICT + <li>OECN$SETUP_CURRENT_BUILDING + <li>OECN$SETUP_CURRENT_LIBRARY + <li>OECN$SETUP_CURRENT_OTHER +</ul> + +<p> +The logical will not exist for types that have not been selected. + +<p> +The value of the OECN$SETUP_CURRENT_* logicals is a string that +describes the selected entry. The format for the string entry is: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + "entry_code,irn,categories,applications" + + Where: entry_code the entry for this type + irn from IRN attribute + categories space delimited list of categories + from CATEGORIES attribute + applications space delimited list of applications + from APPLICATIONS attribute + +</pre> +</table> + +<p> +This string is formatted in a manner that is easily parsed using the +F$ELEMENT lexical function. + +<p> +The following logicals may also be defined depending on the selected +entries relationship with other entries: + +<ul> + <li><strong>OECN$SETUP_PARENT</strong>---Contains the PARENT entry for + the current entry + <li><strong>OECN$SETUP_CHILDREN</strong>---Contains a list, separated + by commas, of the children for the current entry. That is, a list of + entries which contain a PARENT pointing to the current entry. + <li><strong>OECN$SETUP_SIBLINGS</strong>---Contains a list, separated + by commas, of "siblings" (excluding the current entry). That is, a list + of entries that share the same parent entry. +</ul> + +<p> +Any of the logicals that do not apply to an entry will not be defined +(e.g. for a parent entry, the siblings logical will not be defined). + +<a name="heading_11.4"><h1>11.4 OECN$SETUP.INI</h1></a> + +<p> +The OECN$SETUP initialization file defines the environment for various +entities which use OECN (or other) software products. The default +filename is OECN$CUSTOM:OECN$SETUP.INI. OECN$SETUP may be defined as a +logical to override the location and filename. + +<p> +Each "section" in the INI file describes an "entity". An entity might +be a district, building, library or other entity where a specific +context needs to be established. When the SETUPENV utility is executed +to select an entity, the context is defined as specified in the rules +for that section. + +<p> +The parameters and formats for each section are as follows: + +<ul> + <li><strong>SECTION={entity_code}</strong> <br>The SECTION statement + begins a new entity definition. The entity code may be up to 12 + alphanumeric digits. This is the code used to select the entry and is + seen on the menu. This code must uniquely identify each entity + regardless of type (i.e. You must not specify a district and building + entity with the same code). + <li><strong>DESCRIPTION="text"</strong> <br>Text description for menu + <li><strong>TYPE={DISTRICT|BUILDING|LIBRARY|OTHER}</strong> + <br>Indicates the type of entity. If TYPE is not specified, the default + is DISTRICT. A user can have context in each of these types at one time. + <li><strong>CATEGORIES="string"</strong> <br>An unformatted string that + may further define the entry. Except where otherwise indicated, the + categories are site defined. It might be used as flags to indicate + processes that may be run against the entry. Entries may be selected by + category using the /CATEGORIES qualifer. The categories for each + selected type is also returned to DCL via the OECN$SETUP_CURRENT_* + logicals. + <li><strong>APPLICATIONS={app}[,...]</strong> <br>List of applications + used by the entry. Each application is a site defined code of up to 10 + characters. Five applications may be specified on each APPLICATIONS + line. Multiple APPLICATIONS lines may be specified if needed. + <br><strong>Note:</strong> Although the applications are site defined, + the SSDT and other software providers may require specific application + codes. It is recommended that you use these codes for established + applications: + + <blockquote> + USPS + <br> USAS + <br> EMIS + <br> EIS + <br> VIS + <br> SIS (McSIS) + <br> INFOHIO + </blockquote> + <li><strong>IRN={irn}</strong> <br>Optional IRN for the entry. Returned + to DCL via the OECN$SETUP_CURRENT logical and optionally used in the + OECN$EMIS_RESTRICT_IRNS logical. + <li><strong>PROMPT="prompt string"</strong> <br>Optionally specifies + the prompt string to be used if this entry is selected. This value + overrides the default prompt. The default prompt is the list of entry + codes currently selected. + <li><strong>ARCHIVE={archive_code},[description],[table]...</strong> + <br> Declares this entity to have an "archive". Archives can be + selected using the /ARCHIVE qualifier. If a code is specified on the + /ARCHIVE qualifier, then the corresponding archive items are also + processed when the entry is selected. When /ARCHIVE is used with /MENU, + then the archive definitions are listed on the menu as separate items + which the user can select. <br>The optional table parameter indicates + additional table(s) which should be placed in the LNM$FILE_DEV search + path. If specified, they will be placed on the path before the other + shared tables (TABLE and GROUP_TABLE). This permits definitions for + archive logicals to be placed in special shared logical tables for use + as an archive. <br>A multiple ARCHIVE attributes might be included for + each fiscal year, or it may be a generic archive setting which requires + an additional step (outside of SETUPENV) to complete establishing the + archive environment. The usefulness of this attribute depends largely + on how the DAS currently has archives defined and whether/how they are + user selectable. + <li><strong>LOGICAL={logical_name[@archive_code]}[,CONCEALED] + [,IF_EXISTS],[values]...</strong> <br> Specifies a process logical to + define. Multiple values may be included to define a search list. If a + logical name is specified without any values, then the logical will be + deassigned. <br> If the CONCEALED keyword is included, then the logical + will be concealed. <br><strong>Conditional Logicals</strong> <br>The + IF_EXISTS keyword causes the logical to be defined conditionally based + on the presence of the file specified in the value. The logical will + only be created if the file specified in the first value exists. In + this case, the value should contain a complete filespec. For example an + EMIS entry might specify: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + LOGICAL=OECN$EMIS_STU_SEARCH,IF_EXISTS,OECN$EMIS$DTA:EMSALT.IDX + LOGICAL=OECN$EMIS$DTA,CONCEALED,EMIS_ROOT:[LIVE] +</pre> +</table> + + <br> In this case, OECN$EMIS_STU_SEARCH will only be defined if the + OECN$EMIS$DTA:EMSALT.IDX file exists. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +SETUPENV defines logicals in the reverse order that they appear in the +section. Therefore, conditional logicals should be placed prior to any +logicals which they refer to. </td> + </tr> +</table> +</center> + <br><strong>Archive Logicals</strong> <br>If an optional archive code + is included after the logical name (by specifying the archive code + after an "@") then the logical will only be defined if the + corresponding ARCHIVE code is selected (via the /ARCHIVE qualifier or + the menu). Logicals which contain the archive code will be processed + after any normal logicals and therefore will supercede any previous + definition of the same logical. <br> The archive code on each logical + should match an archive code specified in an ARCHIVE attribute. The + ARCHIVE attribute will provide the description for the menu when the + archive is displayed. + <li><strong>SYMBOL={symbol_name}[,symbol_value]</strong> <br>Sets a + global symbol. If a value is not specified, then the symbol is deleted. + <strong>Note:</strong> The symbol and value must be made up of + printable characters. Non-printable values may not be included (in the + current version of SETUPENV). + <li><strong>PARENT={entry}</strong> <br>Indicates a parent entry of + this entry. Parent entries may be nested (i.e. parents of an entry may + themselves have a parent). This facility allows multiple entries to + share another entry as a parent. For example, if all buildings share + the district definition of EMIS_ROOT, then EMIS_ROOT can be defined in + the district entry and each building specify the district as PARENT. + <br>When the user selects an entry which contains the PARENT attribute, + then settings for the parent will be set prior to the logicals for the + selected entry. Therefore, selecting a building entry will also + automatically select the corresponding district (parent) entry. + <li><strong>GROUP_TABLE={octal_group_number}</strong> <br>Specifies + this entry uses a GROUP logical name table for some of it's logical + definitions. This setting only applies if someone outside the group + attempts to set this entry. If so, the entry's group table will be + added to the process' LNM$FILE_DEV path. Otherwise, if the user is in + the specified group, it's assumed that the default definition of + LNM$FILE_DEV already includes LNM$GROUP. + <li><strong>TABLE={logical_name_table},...</strong> <br>Indicates that + this entry uses a sharable logical name table(s) (other than a group + table) for some of its logicals. When this entry is selected, the + logical table will be added to the processes LNM$FILE_DEV logical path. + Up to four tables may be specified. + <li><strong>IDENTIFIER={ident_specification}</strong> <br>Indicates an + ACE entry used to control access to the entry. This is used when /MENU + is specified to control which entries the user is allowed to see. It is + also used when determining which entry to select as default when + /LOGIN=BY_ACCESS is specified. <br>The format of the identifier + specification is the same as the "IDENTIFIER=" portion of a standard + identifier ACE entry. If the specification includes a comma then the + specification must be enclosed in quotes. Multiple IDENTIFIER lines may + be included for an entry. If so, standard ACL processing applies for + determining access. Examples: + + <blockquote> + IDENTIFIER="[101,*]" + <br>IDENTIFIER=SIS_BLDA + <br>IDENTIFIER="OECN_USAS+ARCHBOLD_FISCAL" + </blockquote> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +IDENTIFIER does not necessarily restrict users from selecting a +specific entry. If a specific entry is specified on the command line +(manually or via a DCL procedure), SETUPENV will establish the context +regardless of the IDENTIFIER attributes. This is useful for sites who +do not need, or do not desire, to code specific identifiers into the +OECN$SETUP file. </td> + </tr> +</table> +</center> +</ul> + +<a name="heading_11.4.1"><h2>11.4.1 Special "Reset" Entries</h2></a> + +<p> +Prior to setting any given entry, SETUPENV will attempt to process +special sections named "$RESET_type". If a $RESET section of the +appropriate type exists in the INI file, it will be processed prior to +setting an entry. + +<p> +The following reset sections may be specified: + +<ul> + <li>$RESET_DISTRICT + <li>$RESET_BUILDING + <li>$RESET_LIBRARY + <li>$RESET_OTHER +</ul> + +<p> +When a user selects an entry of a specific type, the corresponding +reset section is invoked prior to setting the environment for the +selected entry. + +<p> +This is useful in cases where some entries specify a process logical +but others use a group logical. In order to switch from one entry to +another, it is necessary to deassign the common logical from the +process table prior to switching to the group logicals. + +<p> +For example, consider that DISTRICT_A has a process logical definition +of OECN$DTA. But DISTRICT_B has a group logical for OECN$DTA. Switching +from DISTRICT_A to DISTRICT_B requires that the OECN$DTA be deassigned +so the group logical is visable. SETUPENV does not attempt to keep +track of this, rather it permits you to create a $RESET entry for each +type to deassign logicals appropriate for your site. For example, +$RESET could be defined as: + +<blockquote> + SECTION=$RESET_DISTRICT + <br>LOGICAL=OECN$DTA + <br>LOGICAL=OECN$OUT,"SYS$DISK:[]" +</blockquote> + +<p> +The above entry would cause SETUPENV to deassign OECN$DTA and define +OECN$OUT to the default directory prior to setting any valid entry. In +general, you should explicitly deassign any logicals in the reset +section that are defined in any entry of the same type. + +<a name="heading_11.4.2"><h2>11.4.2 Sample OECN$SETUP File</h2></a> + +<p> +Below is a very simple OECN$SETUP.INI file which defines entries for +one district and two buildings. The setup file can contain many such +entries for as many districts and buildings provided that the entry +codes are unique. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + SECTION=SAMPLE + TYPE=DISTRICT + DESCRIPTION="Sample City Schools" + LOGICAL=EMIS_ROOT, FSA:[EMIS_SAMPLE.],CONCEALED + LOGICAL=OECN$DTA, FSA:[SAMPLE] + LOGICAL=OECN$FORM_DIRDEP, OECN$PAY:DIRPRT.FRM + + SECTION=SAME + TYPE=BUILDING + DESCRIPTION="Sample Elementary School" + PARENT=SAMPLE + TABLE=SIS_SAME + IDENTIFIER=SIS_SAME + + SECTION=SAMH + TYPE=BUILDING + DESCRIPTION="Sample High School" + PARENT=SAMPLE + TABLE=SIS_SAMH + IDENTIFIER=SIS_SAMH + + SECTION=$RESET_DISTRICT + LOGICAL=EMIS_ROOT + LOGICAL=OECN$DTA + LOGICAL=OECN$FORM_DIRDEP +</pre> +</table> + +<p> +In this example, the buildings point to the district using the PARENT +attribute. This creates the appropriate relationship. When the user +selects one of the buildings, the corresponding logicals from the +district entry will also be set. + +<p> +Also notice that the district entry uses LOGICAL's to define the +individual logicals. But the building entries use shared logical tables +created outside of SETUPENV. + +<p> +The special $RESET_DISTRICT section is provided to ensure that the +district logical get reset appropriately prior to setting an entry. + +<a name="heading_11.4.3"><h2>11.4.3 Special "APPLICATION" Entries</h2></a> + +<p> +If an entry is defined with one or more APPLICATION attributes, then +SETUPENV will search for an entry named "$APP_app", where "app" is the +application code. This allows logicals, symbols or tables that are +common for an application to be grouped into shared entries. Consider +the following example: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + SECTION=DISTRICT_A + TYPE=DISTRICT + APPLICATION=USAS + LOGICAL=DISTRICT_ROOT,CONCEAL,DISK1:[DISTRICT_A.] + + SECTION=DISTRICT_B + TYPE=DISTRICT + APPLICATION=USAS + LOGICAL=DISTRICT_ROOT,CONCEAL,DISK1:[DISTRICT_B.] + + SECTION=DISTRICT_C + TYPE=DISTRICT + LOGICAL=DISTRICT_ROOT,CONCEAL,DISK1:[DISTRICT_C.] + + SECTION=$APP_USAS + LOGICAL=OECN$DTA,DISTRICT_ROOT:[DATA] +</pre> +</table> + +<p> +In this example, the DISTRICT_ROOT logical would be defined for all +three districts. However, OECN$DTA would only be defined for DISTRICT_A +and DISTRICT_B because they have APPLICATION=USAS. DISTRICT_C does not +have the application attribute and so would not invoke the $APP_USAS +entry. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +Note: The above is for example only. In practice, OECN$DTA might be +more efficiently defined as a system logical. </td> + </tr> +</table> +</center> + +<p> +Application entries do not have a corresponding "reset" section. +Logicals defined in this manner may need to be included in the +appropriate "$RESET_type" section to ensure they are reset. + +<a name="heading_11.4.4"><h2>11.4.4 Special "INCLUDE" Section</h2></a> + +<p> +A special section may be specified in any INI file called $INCLUDE. +This section may specify other INI files to be included and processed +with the primary INI file. The $INCLUDE section may only contain "FILE" +attributes to indicate the file(s) to be included. + +<p> +The $INCLUDE section permits INI files to be split into manageable +segments or for INI files to be generated automatically. For example, +you might create one INI file for each district and it's associated +buildings. Or a separate utility may have information for creating +subsets of the INI file. For example, the primary OECN$SETUP.INI might +have: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + SECTION=$INCLUDE + FILE=OECN$CUSTOM:DISTRICT_A.INI + FILE=OECN$CUSTOM:DISTRICT_B.INI + FILE=OECN$CUSTOM:DISTRICT_C.INI +</pre> +</table> + +<p> +Each INI file may also have an $INCLUDE section to indicate other files +to be included. There is a maximum of 100 files that may be included +throughout all INI files. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +There is a performance penalty incurred for splitting INI files into +many parts. SETUPENV must read the primary and all included files each +time it is invoked. </td> + </tr> +</table> +</center> + +<p> +Duplicate entries are handled by merging the entries together. For +example, if two included files both contain an entry for DISTRICT_A, +then the attributes (e.g. LOGICAL attributes ) from both sections will +be combined into a single entry. If duplicate entries specify +attributes that only occur once per entry, then the last INI file to be +loaded supercedes the previous value. + +<p> +The INI files are NOT processed as they are encountered in the file. +Rather they represent a list of INI files that need to be processed. +SETUPENV will complete processing of the current file prior to begin +processing the next file. Therefore, included INI files will always be +processed after the file that included it (although perhaps not +immediately after). In general, you should not depend on files being +processed in any particular order. + +<a name="heading_11.4.5"><h2>11.4.5 Limits</h2></a> + +<p> +Certain limits which apply to the OECN$SETUP.INI file are shown in the +table below. Limits are 'per entry' unless otherwise noted. <p> + +<table border=3> + <caption><a name="Table_11-1"><strong>Table 11-1 wide</strong></a></caption> + <tr> + <th align=center>Attribute </th> + <th align=center>Maximum Length </th> + <th align=center>Limit </th> + </tr> + <tr> + <td> + FILE (in $INCLUDE section) + </td> + <td> + 50 + </td> + <td> + 100 total in all files + </td> + </tr> + <tr> + <td> + SECTION + </td> + <td> + 12 + </td> + <td> + 500 total in all files + </td> + </tr> + <tr> + <td> + DESC + </td> + <td> + 40 + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + TYPE + </td> + <td> + 12 + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + IRN + </td> + <td> + 6 + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + CATEGORIES + </td> + <td> + 40 + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + APPLICATIONS + </td> + <td> + 10 + </td> + <td> + 15 (five per line) + </td> + </tr> + <tr> + <td> + ARCHIVE + </td> + <td> + 6 + </td> + <td> + 20 + </td> + </tr> + <tr> + <td> + ARCHIVE (tables) + </td> + <td> + 32 + </td> + <td> + 3 per archive + </td> + </tr> + <tr> + <td> + PROMPT + </td> + <td> + 40 + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + IDENTIFIERS + </td> + <td> + 80 + </td> + <td> + unlimited * + </td> + </tr> + <tr> + <td> + LOGICAL (name) + </td> + <td> + 50 + </td> + <td> + unlimited * + </td> + </tr> + <tr> + <td> + LOGCIAL (value) + </td> + <td> + 80 + </td> + <td> + 4 per logical + </td> + </tr> + <tr> + <td> + SYMBOL (name) + </td> + <td> + 24 + </td> + <td> + unlimited * + </td> + </tr> + <tr> + <td> + SYMBOL (value) + </td> + <td> + 50 + </td> + <td> + 1 per symbol + </td> + </tr> + <tr> + <td> + TABLE + </td> + <td> + 50 + </td> + <td> + unlimited * + </td> + </tr> + <tr> + <td> + GROUP + </td> + <td> + Octal Value + </td> + <td> + 1 + </td> + </tr> + <tr> + <td> + PARENT + </td> + <td> + 12 + </td> + <td> + 1 + </td> + </tr> +</table> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +* = Attributes which are "unlimited" are limited by virtual memory +available to the user. Very large INI files with large numbers of +logicals or symbols may exhaust virtual memory. </td> + </tr> +</table> +</center> + +<a name="heading_11.5"><h1>11.5 EMIS_SELECT Compatibility</h1></a> + +<p> +The /EMIS qualifier provides functional compatibility with the +EMIS_SELECT.COM procedure. In this mode, SETUPENV will read the +existing OECN$EMIS_DBS file and convert it to equivalent setup entries. +The primary advantage of using SETUPENV over EMIS_SELECT is it's +ability to use the /NEXT qualifier to process databases sequentially. +SETUPENV also provides a slightly improved user interface over the DCL +version. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +SETUPENV/EMIS can be used even if the DAS has not created an +OECN$SETUP.INI file. </td> + </tr> +</table> +</center> + +<p> +When SETUPENV/EMIS reads the OECN$EMIS_DBS, it creates a special entry +which is equavalent to: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + SECTION=$EMIS_dbscode + DESCRIPTION=description from DBS + CATEGORIES=RP_x FY_fy flags ! See below + LOGICAL=OECN$EMIS$DTA,dev:[dir] ! From DBS line + IDENTIFIER=OECN_SYSMAN ! If the DBS line contained "HIDE" +</pre> +</table> + +<p> +The CATEGORIES is constructed based on the optional reporting period +and flags parameter from the DBS line. The CATAGORIES value will always +be in the format "RP_x FY_fy flags". Where x is the reporting period +and "fy" is the fiscal year from the EMIS configuration. If the DBS +included any additional flags (other than HIDE), they will also be +included in the categories. + +<p> +One implication of the above is that the /CATEGORIES qualifier can be +used to select specific reporting periods. For example: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + $ SETUPENV/EMIS/NEXT/CATEGORIES="*RP_N*" +</pre> +</table> + +<p> +Would select the next EMIS database for reporting period N. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + SETUPENV will invoke the DA Site's EMIS_SELECT_EPILOGUE procedure if it + exists. However, the EMIS_SELECT_PROLOGUE is not supported. DA Sites + that depend on the prologue procedure should contact the SSDT for a + work around. </td> + </tr> +</table> +</center> + +<a name="heading_11.5.1"><h2>11.5.1 Converting OECN$EMIS_DBS to OECN$SETUP</h2></a> + +<p> +It is possible to completely convert from using the OECN$EMIS_DBS file +to corresponding entries in OECN$SETUP.INI. To do so, simply create +sections in the OECN$SETUP file as shown in the previous section. The +entry code must be prefixed with "$EMIS_". The corresponding code +should be removed from OECN$EMIS_DBS, otherwise they will both be +processed. + +<p> +To retain compatibility with EMIS_SELECT, you should be certain to +define the CATEGORIES attribute in the same format as shown. When +entries are stored in the OECN$SETUP file, SETUPENV will not access the +EMIS database to retrieve the fiscal year, therefore you should +explicitly include FY_fy in the CATEGORIES attribute. + +<p> +One advantage of converting DBS entries into OECN$SETUP is that the +entry definitions are not limited to defining a single logical +(OECN$EMIS$DTA). The $EMIS_ entries can contain any other valid +attribute types, including TABLE, APPLICATION, SYMBOL, etc. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + At the time of this writing, the original EMIS_SELECT.COM procedure is + still invoked by the EMIS_SELECT menu option. Therefore, if you wish to + switch to SETUPENV immediately, you would have to modify the EMIS menu + or customize the EMIS_SELECT.COM procedure. In the future, + EMIS_SELECT.COM will be modified by the SSDT to use SETUPENV/EMIS + instead of the current DCL procedure. </td> + </tr> +</table> +</center> + +<a name="heading_11.6"><h1>11.6 NOACSC Compatiblity</h1></a> + +<p> +SETUPENV is similar to the USE, BUNNY, and FROG utilities provided by +NOACSC. In some respects SETUPENV is based on these utilities. While +SETUPENV is not 100% compatible with these utilities, it does attempt +to simulate most of the behaviors and should be able to co-exist with +them. + +<p> +To provide an easier transition for sites who are using NOACSC's +utilities, SETUPENV also provides command line compatibility with the +utilities. The following sections provide information regarding +compatibility with each of the utilities. + +<p> +Symbols may be established for each of the utilities to invoke SETUPENV +in the appropriate compatibility mode: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + USE :== $OECN$:SETUPENV/USE + BUNNY :== $OECN$:SETUPENV/BUNNY + FROG :== $OECN$:SETUPENV/FROG +</pre> +</table> + +<p> +This should allow SETUPENV to be used without modifying any existing +command procedures. + +<a name="heading_11.6.1"><h2>11.6.1 USE Compatibliity</h2></a> + +<p> +If /USE is specified as the first qualifier to SETUPENV, then the +original USE qualifiers are accepted. The table below lists the USE +qualifiers and the corresponding qualifier/behavor for SETUPENV. +/PROMPT is the default for /USE. + +<p> +The SETUPENV /PRINTER qualifier is the default. However, instead of +defining SYS$PRINT, LCL$PRINT is defined to point the queue from the +owner field. + +<table border=3> + <tr> + <th align=center>Qualifier </th> + <th align=center>SETUPENV Implementation </th> + </tr> + <tr> + <td> + /OUTPUT + </td> + <td> + Not implemented + </td> + </tr> + <tr> + <td> + /ARCHIVE=nnnn + </td> + <td> + /ARCHIVE=nnnn + </td> + </tr> + <tr> + <td> + /HOME + </td> + <td> + /RESET + </td> + </tr> + <tr> + <td> + /PRIMARY_RUN + </td> + <td> + /LOGIN=(SIS,INFOHIO,USERNAME=2)/NOPROMPT + </td> + </tr> +</table> + +<h2>Notable Differences:</h2> + +<ul> + <li>The USE default for /ARCHIVE is provided by the .CLD file (which is + changed annually to provide a new default). SETUPENV's default is the + first ARCHIVE for the entry. Therefore, to remain compatible with USE, + archives should be placed with the most recent year first in the + entry's section. + <li>USE determines which logicals to set based on the security + identfiers held by the user (e.g. OECN$EIS$DTA is only set if OECN_EIS + is held). SETUPENV sets all logicals specified for the entry regardless + of security identifiers. + <li>SETUPENV does not set PMDF_SIGNATURE. Sites depending on this + should add the following line to SYLOGIN: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + $ if f$search("SYS$LOGIN:PMDF_SIGNATURE.DOC").nes."" - + then define PMDF_SIGNATURE "@SYS$LOGIN:PMDF_SIGNATURE.DOC" + +</pre> +</table> + +</ul> + +<a name="heading_11.6.2"><h2>11.6.2 BUNNY Compatibility</h2></a> + +<p> +If /BUNNY is specified as the first qualifier to SETUPENV, then the +original BUNNY qualifiers are accepted. + +<p> +The SETUPENV defaults when /BUNNY is specified are: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + $ SETUPENV/BUNNY/PROMPT/EMIS=NORESTRICT_IRNS +</pre> +</table> + +<p> +These defaults are affected by the original BUNNY qualifiers per the +following table. +<p> + +<table border=3> + <tr> + <th align=center>Qualifier </th> + <th align=center>SETUPENV Implementation </th> + </tr> + <tr> + <td> + /ARCHIVE=nnnn + </td> + <td> + /ARCHIVE=nnnn + </td> + </tr> + <tr> + <td> + /CURRENT_BUILDING + </td> + <td> + not implemented + </td> + </tr> + <tr> + <td> + /EMIS + </td> + <td> + not implemented (logicals defined by entry) + </td> + </tr> + <tr> + <td> + /INFOHIO + </td> + <td> + /LOGIN=INFOHIO + </td> + </tr> + <tr> + <td> + /PRIMARY_RUN + </td> + <td> + /LOGIN=(SIS,INFOHIO)/NOPROMPT + </td> + </tr> + <tr> + <td> + /LOGICAL_ONLY + </td> + <td> + /NOPROMPT + </td> + </tr> + <tr> + <td> + /RESTRICT_IRNS + </td> + <td> + EMIS=RESTRICT_IRNS + </td> + </tr> + <tr> + <td> + /SCHEDULE_BUILDER + </td> + <td> + Chains to SIS$EXE:SISMENU_CMSB.EXE + </td> + </tr> +</table> + +<p> +For interactive processes, if neither /PRIMARY_RUN nor /LOGICALS_ONLY +is specified then SETUPENV/BUNNY chains to SISMENU.EXE, unless +overridden by /SCHEDULE_BUILDER. + +<h2>Notable Differences:</h2> + +<ul> + <li>SETUPENV does not define the ESC, PROFF or T80. These symbols + cannot be placed in the OECN$SETUP SYMBOL attributes because they + contain non-printable characters (not supported). Therefore, these + symbols must be placed in a SYLOGIN procedure. + <li>/CURRENT_BUILDING is not supported. SETUPENV does not have ability + to set an entry based on the value of an existing logical. + <li>If /ARCHIVE is specified without a value, the default is the first + ARCHIVE attribute for the selected entry. +</ul> + +<a name="heading_11.6.3"><h2>11.6.3 FROG Compatibility</h2></a> + +<p> +If /FROG is specified as the first qualifier to SETUPENV, then the +original FROG qualifiers are accepted. + +<p> +The SETUPENV defaults when /BUNNY is specified are: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + $ SETUPENV/FROG/PROMPT +</pre> +</table> + +<p> +These defaults are affected by the original BUNNY qualifiers per the +following table. + +<table border=3> + <tr> + <th align=center>Qualifier </th> + <th align=center>SETUPENV Implementation </th> + </tr> + <tr> + <td> + /CURRENT_BUILDING + </td> + <td> + Not implemeneted + </td> + </tr> + <tr> + <td> + /LOGICALS_ONLY + </td> + <td> + /NOPROMPT + </td> + </tr> + <tr> + <td> + /PRIMARY_RUN + </td> + <td> + LOGIN=INFOHIO + </td> + </tr> + <tr> + <td> + /PRINTER + </td> + <td> + /PRINTER (see below) + </td> + </tr> + <tr> + <td> + /OPAC=RESTRICTED + </td> + <td> + Chains to "@LIS_MGR:OPAC" + </td> + </tr> + <tr> + <td> + /OPAC=UNRESTRICTED + </td> + <td> + Chains to "@LIS_MGR:OPAC R" + </td> + </tr> +</table> + +<p> +For interactive processes, if neither /PRIMARY_RUN nor /LOGICALS_ONLY +is specified then SETUPENV/FROG chains to "@LIS_MGR:LISMENU SYSADM.M"., +unless overridden by /OPAC + +<h2>Notable Differences:</h2> + +<ul> + <li>/PRINTER behaves the same as SETUPENV's /PRINT qualifier, except + that /FROG/PRINTER attempts to find a queue named entry$PRINT where + "entry" is the selected entry. If found, entry$PRINT is assigned to + SYS$PRINT. If the user has a queue definition in their SYSUAF Owner + field, it overrides the entry$PRINT queue. + <li>For non-DAS staff, SYS$PRINT is unconditionally assigned to + LCL$PRINT as a job logical (which might be occluded). + <li>SETUPENV/FROG does not attempt to define the large number of + symbols created by FROG. These should either be placed in an + $APP_INFOHIO entry, or moved to a global login procedure. Symbols + containing non-printable characters (e.g. CLEAR) must be moved to a + global procedure. +</ul> + +<p> + +<a name="heading_11.7"><h1>11.7 OECN$SETUPENV API</h1></a> +SETUPENV provides a callable API which can be used by programs to +select entries. The API parallels the qualifier functions and syntax. + +<a name="heading_11.7.1"><h2>11.7.1 Working Storage Field(s)</h2></a> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + Picture for string field are maximum sizes that will be used by + OECN$SETUPENV. The string fields are based by descriptor, so the field + sizes are not required to be the exact size. </td> + </tr> +</table> +</center> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + 01 WS-FUNCTION PIC S9(4) COMP VALUE 0. + 88 SET-DB VALUE 0. + 88 NEXT-DB VALUE 1. + 88 RESET-DB VALUE 2. + 88 MENU-SELECTION VALUE 3. + 88 LOOKUP-DB VALUE 4. + 88 LOGIN-DEFAULTS VALUE 5. + 01 WS-FLAGS. + 03 WS-SIS-DEFAULT PIC X. + 03 WS-INFOHIO-DEFAULT PIC X. + 03 WS-BY-ACCESS PIC X. + 03 WS-BY-USERNAME PIC X. + 03 WS-EMIS-RESTRICT PIC X. + 03 WS-EMIS-SELECT PIC X. + 03 FILLER PIC X(26). + 01 WS-SELECTED-DB PIC X(40). + 01 WS-SEL-TYPE PIC X(25). + 01 WS-SEL-CATEGORIES PIC X(40). + 01 WS-SEL-APPLICATION PIC X(10). + 01 WS-SEL-ARCHIVE PIC X(6). + 01 WS-TYPE PIC X(25). + 01 WS-DESC PIC X(40). + 01 WS-IRN PIC X(6). + 01 WS-CATEGORIES PIC X(40). + 01 WS-APPLICATIONS PIC X(80). + 01 WS-PROMPT-STRING PIC X(40). + 01 WS-ARCHIVE PIC X(6). + 01 WS-STATUS PIC S9(9) COMP. + 88 OECN__NORMAL VALUE EXTERNAL OECN__NORMAL. + 88 OECN__NOMORE VALUE EXTERNAL OECN__NOMORE. + 88 OECN__NOTFOUND VALUE EXTERNAL OECN__NOTFOUND. + 01 WS-RELATIONSHIPS. + 03 WS-RELATION-COUNT PIC S9(4) COMP. + 03 WS-RELATIONSHIP + OCCURS 0 TO 40 TIMES DEPENDING + ON WS-RELATION-COUNT. + 05 WS-RELATION-TYPE PIC X. + 88 WS-RELATION-PARENT VALUE "P". + 88 WS-RELATION-SIBLING VALUE "S". + 88 WS-RELATION-CHILD VALUE "C". + 05 WS-RELATION-ENTRY PIC X(12). +</pre> +</table> + +<p> + +<a name="heading_11.7.2"><h2>11.7.2 COBOL Call Arguments</h2></a> + +<table border=0> + <tr> + <td> + <br> +<pre> + CALL "OECN$SETUPENV" + USING + WS-FUNCTION + BY DESCRIPTOR WS-FLAGS + BY DESCRIPTOR WS-SELECTED-DB + BY DESCRIPTOR WS-SEL-TYPE + BY DESCRIPTOR WS-SEL-CATEGORIES + BY DESCRIPTOR WS-SEL-APPLICATION + BY DESCRIPTOR WS-SEL-ARCHIVE + BY DESCRIPTOR WS-TYPE + BY DESCRIPTOR WS-DESC + BY DESCRIPTOR WS-IRN + BY DESCRIPTOR WS-CATEGORIES + BY DESCRIPTOR WS-APPLICATIONS + BY DESCRIPTOR WS-RELATIONSHIPS + BY DESCRIPTOR WS-PROMPT-STRING + BY DESCRIPTOR WS-ARCHIVE + GIVING WS-STATUS. +</pre> +</table> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + The arguments passed by descriptor may be OMITTED if the return value + is not desired. However, the argument list must not be shortened, that + is, the caller should explictly include the OMITTED keyword. </td> + </tr> +</table> +</center> + +<a name="heading_11.7.3"><h2>11.7.3 Argument Descriptions:</h2></a> + +<blockquote> +<strong>WS-FUNCTION (read)</strong> + + <blockquote> + Indicates the function to perform. Behavior matches the corresponding + DCL qualifiers. + <br>The LOOKUP-DB function is specific to the API and not implemented + via the DCL command. LOOKUP-DB returns the information about the + specified entry without actually setting the logicals. This allows a + program to retrieve information about an entry without switching + contexts. + </blockquote> +<br> + <br><strong>WS-FLAGS</strong> + + <blockquote> + List of one character flags which modify the behavior of the API. + Unless noted otherwise, the flags should either contain a spaces or a + "Y" if the flag is on. + <br>The following flags are applicable when the LOGIN-DEFAULTS function + is requested: + </blockquote> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + WS-SIS-DEFAULT Same as /LOGIN=SIS + WS-INFOHIO-DEFAULT Same as /LOGIN=INFOHIO + WS-BY-ACCESS Same as /LOGIN=BY_ACCESS + WS-BY-USERNAME If set, just contain + an ascii numeric value indicating + the number of characters to use + from the username as the entry + code. e.g. Placing "2" in + this flag, is the same as + /LOGIN=USERNAME=2 + WS-EMIS-RESTRICT Same as /RESTRICT_IRNS + WS-EMIS-SELECT is the same as /EMIS +</pre> +</table> + +<br> + <br><strong>WS-SELECT-DB (modify, by descriptor)</strong> + + <blockquote> + Entry(s) from INI file to select. Optional if MENU or NEXT functions + are being performed. The actual entry selected is also returned in this + parameter. + </blockquote> +<br> + <br><strong>WS-SEL-TYPE (read, by descriptor)</strong> +<br> + <br><strong>WS-SEL-CATEGORIES (read, by descriptor)</strong> + + <blockquote> + Values to restrict entries by type and/or categories. + <br>Same as /TYPE and /CATEGORIES qualifiers. + </blockquote> +<br> + <br><strong>WS-SEL-APPLICATION (read, by descriptor)</strong> + + <blockquote> + Value to select by application. Same as /APPLICATION qualifier. + </blockquote> +<br> + <br><strong>WS-TYPE (write, by descriptor)</strong> +<br> + <br><strong>WS-DESC (write, by descriptor)</strong> +<br> + <br><strong>WS-IRN (write, by descriptor)</strong> +<br> + <br><strong>WS-CATEGORIES (write, by descriptor)</strong> + + <blockquote> + Return values which describe the entry. Same values that are also + placed in the OECN$SETUP_CURRENT Logical. + </blockquote> +<br> + <br><strong>WS-APPLICATIONS (write, by descriptor)</strong> + + <blockquote> + Space delimited list of appliations associated with the current entry. + </blockquote> +<br> + <br><strong>WS-PROMPT-STRING (write, by descriptor)</strong> + + <blockquote> + The string SETUPENV would use to create the DCL and Menu prompt if + /PROMPT is specified. Note: The API never sets the prompt. The calling + routine may use this string to set the prompts, if desired. + </blockquote> +<br> + <br><strong>WS-RELATIONSHIPS (write, by descriptor)</strong> + + <blockquote> + A structure that describes the selected entries relationship to other + entries based on the PARENT attributes. Currently three types of + relationships are defined: Parent, sibling or children. The types of + entries returned in this table will vary depending on the entry + selected. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + Calling routines should not assume that only these three types of + relationships exist. Future versions of the API may return other + relationships. </td> + </tr> +</table> +</center> +<br> + <br><strong>WS-ARCHIVE</strong> + + <blockquote> + Contains code of archive if one was selected. + </blockquote> +</blockquote> + +<a name="heading_11.7.4"><h2>11.7.4 Return Status</h2></a> + +<p> +OECN$SETUP returns one of the following conditions: + +<table border=3> + <tr> + <td> + OECN__NORMAL + </td> + <td> + = + </td> + <td> + Function completed successfully (Item selected or reset) + </td> + </tr> + <tr> + <td> + OECN__NOMORE + </td> + <td> + = + </td> + <td> + When using "next" function, no more matching entries were found. + </td> + </tr> + <tr> + <td> + OECN__NOTFOUND + </td> + <td> + = + </td> + <td> + Specified entry was not found. + </td> + </tr> + <tr> + <td> + OECN__INVNEXT + </td> + <td> + = + </td> + <td> + Invalid combination of TYPE and current entry for NEXT function. Must + specify a starting entry or valid select type. + </td> + </tr> +</table> + +<a name="heading_11.7.5"><h2>11.7.5 Description</h2></a> + +<p> +The OECN$SETUPENV routine does basically everything that the SETUPENV +DCL interface does; however, there are some notable exceptions. Here is +a list that the callable interface does NOT provide: + +<ol start=1 > + <li>Does not simulate /USE, /BUNNY or /FROG behaviors. Those qualifiers + are handled by the SETUPENV utility and are not exposed to the callable + interface. + <li>Does not modify the Menu or DCL prompts (a string is returned for + setting the prompt if desired). + <li>Does not invoke OECN_LOGIN or EMIS_SWITCH_FY to ensure that the + correct state software logicals are defined based on the version of the + data files. If the calling program depends on files/programs in any of + the OECN$x logicals, it should take it's own action to ensure the + correct version is selected (or contact the SSDT if this is important). + <li>Does not implement the function of /PRINTER +</ol> + +<p> + +<hr size=5> +<a name="sysman_ump_chap"><h1>Chapter 12<br>Installing and Using UMP - User Mail Profile System</h1></a> + +<a name="heading_12.1"><h1>12.1 Overview</h1></a> + +<p> + The UMP package provides a means for DA-sites to maintain user e-mail + profiles in a standard way. This will provides an efficient means of + sending mail to a large variety of users across the state. It will also + allows for the creation of an electronic "white pages phone directory" + which permits an easy way to lookup an e-mail address for any user on + the OECN network. + +<a name="heading_12.1.1"><h2>12.1.1 Feature List</h2></a> + +<p> +UMP provides the following features: + +<ul> + <li>Ability to add/modify user profiles. + <li>Allows end-user to modify their own profile. + <li>Permits 'group managers' to manage other user profiles within their + group + <li>Imports an existing distribution list and creates a basic user + profile (NM or PMDF style distribution lists). + <li>Ability to provide complete 'centralized naming' facility for both + local and remote addresses, including ability to create user aliases + independent of username or mailbox address. + <li>Exports user profiles into the following formats: + + <blockquote> + - NM + <br>- PMDF style distribution lists + <br>- PMDF DIRECTORY DAEMON format + </blockquote> + <li>Handles OECN standard distribution lists and allows local + distribution lists to be added. + <li>Includes a utility to create distribution lists based on VMS + identifiers. + <li>Includes a utility to check UMP profiles against SYSUAF. + <li>Includes a utility to run during login to determine if user has + modified their own profile. + <li>Includes a utility to transmit UMP data into the CSO white pages + directory. + <li>Tracks whether the user has modified/updated their own profile. + Optionally, users who have not updated their own profile will be asked + if they wish to update their user mail profile during login. +</ul> + +<a name="heading_12.1.2"><h2>12.1.2 Web Attachments for OECN state-wide mail</h2></a> + +<p> +A special feature of the OECN state-wide lists is the ability to +"web-ify" attachments send to the OECN lists. As messages addressed to +the OECN lists pass through the central OECN mail server, they are +inspected for certain attachment types. If a suitable attachment type +is discovered, it is placed on a public web site and the original +attachment is replaced by a web link (URL) pointing to the documents +location. Thus, only a single copy of each attachment must be stored on +the OECN web server and will not be delivered to each user's mailbox. + +<p> + Each user subscribed to UMP has the option of receiving the original + message with the attachments or the version containing web links + instead of attachments. Most users will benefit from receiving web + links instead of attachments (reduced local storage, shorter download + times and reduce risk of viruses. However, some users may prefer the + original attachments, especially if they download their mail for + disconnected (off-line) reading. + +<p> + The benefit of web attachments to DA Sites can be signficant. Without + web attachments, any message containing a large attachment must be + delivered to each user's mailbox separately consuming considerable disk + space and computer resources to deliver. + +<p> + However, each DA Site may decide how, and if, to implement OECN web + attachments for their users. Converting existing users to web + attachments may cause confusion or concerns. Therefore, DA Sites are + encouraged not to switch existing users to web attachments without + training or notification. + +<a name="heading_12.1.2.1"><h3>12.1.2.1 Enabling Web Attachments</h3></a> + +<p> +Web attachments are only enabled for each DA Site upon request. If you +wish your users to have the ability to request web attachments, you +must set ENABLE_OECN_WEBATTACH to "YES" and send mail to +listmaster@oecn.k12.oh.us. The listmaster will verify the correct +configuration of your UMP configuration and enable web attachments if +appropriate. Your request may be denied if you have a non-standard UMP +configuration. In that case, the listmaster will explain the problem(s) +with your configuration. + +<p> + To see if web attachments are enabled for your site, look for the SITE + command in OECN$UMP_STANDARD.INI and see if the "webatt" parameter is + set for your domain. If this parameter is set, then web attachments are + already enabled. Note: You can not change OECN$UMP_STANDARD.INI + yourself. Only the OECN listmaster can make the change that affects the + OECN mail server. + +<a name="heading_12.1.3"><h2>12.1.3 Files</h2></a> + +<p> +The following sections describe the files used and produced by the UMP +system. +<p> +<strong>Files and Procedures Used</strong> +<br> + +<table border=3> + <tr> + <th align=center>File/Procedure </th> + <th align=center>Use </th> + </tr> + <tr> + <td> + OECN$UMP_LOCAL.INI + </td> + <td> + Contains A-site specific information and list codes. + </td> + </tr> + <tr> + <td> + OECN$UMP_STANDARD.INI + </td> + <td> + Contains OECN_wide list codes and definitions. + </td> + </tr> + <tr> + <td> + IMPORT_NM_LISTS.COM + </td> + <td> + Used to import data from NM style distribution lists into user profiles. + </td> + </tr> + <tr> + <td> + IMPORT_PMDF_LISTS.COM + </td> + <td> + Used to import data from PMDF style distribution lists into user + profiles. + </td> + </tr> + <tr> + <td> + EXPORT_LISTS.COM + </td> + <td> + Used to generate both NM and PMDF style distribution lists. + </td> + </tr> + <tr> + <td> + EXPORT_DD.COM + </td> + <td> + Used to generate a file suitable for loading into a PMDF DIRECTORY + DAEMON database. + </td> + </tr> + <tr> + <td> + UMP_SEND_CSO.COM + </td> + <td> + Used to transmit UMP data to the CSO white pages directory. + </td> + </tr> +</table> +<p> +<strong>Files Created</strong> +<br> + +<p> + The table below describes the files created by UMP. Unless otherwise + specified, the files are created in OECN$UMP:. + +<table border=3> + <tr> + <th align=center>File </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + MAIL_*_A.DIS + </td> + <td> + One file for each distribution list. This file contains addresses of + users who have requested to receive original attachments sent to an + OECN list.. + </td> + </tr> + <tr> + <td> + MAIL_*_W.DIR + </td> + <td> + One file for each distribution list. This file contains addresses of + user who have requested web links to attachments sent to the an OECN + lists. + </td> + </tr> + <tr> + <td> + MAIL_ALIASES.DAT + </td> + <td> + Alias file defining aliases for UMP generated lists. This file is + intended to be loaded into the PMDF alias database or included into the + PMDF alias file. + </td> + </tr> + <tr> + <td> + USER_ALIASES.TXT + </td> + <td> + Alias file defining aliases for UMP remote users to create centralized + naming. This file is intended to be loaded into the PMDF alias database. + </td> + </tr> + <tr> + <td> + USER_RESERVE.TXT + </td> + <td> + File containing reversing entries for users to create centralized + naming. This file is intended to be loaded into the PMDF reverse + database. + </td> + </tr> +</table> + +<a name="heading_12.2"><h1>12.2 UMP Menu and Profile Screen</h1></a> + +<p> +The program may be executed by typing: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$RUN OECN$:UMP +</pre> +</table> + +<p> +at the $ prompt or from the menu system, type: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Menu>UMP +</pre> +</table> + +<p> +<strong>The Main UMP Menu</strong> +<br> + +<p> +The following menu will appear: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +___________________________________________________________________ +| | +| UMP - User Mail Profile Maintenance | +| ------------------------------------------------------------- | +| 1. PERSONAL - Modify Personal Profile | +| 2. MAINTAIN - Maintain User Profiles | +| 3. EXIT - Exit program | +| | +| | +| | +| | +| | +| | +| | +| | +| Menu: UMP Option> | +| | +| XXX Accept XX Help XX Exit XXX Next | +|_________________________________________________________________| + + + +</pre> +</table> + +<p> +<strong>Profile Screen</strong> +<br> + +<p> +When you execute the UMP program and select the MAINTAIN option, a User +Mail Profile screen similar to the following will appear: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +___________________________________________________________________________ +| | +| Updated 12-DEC-1995 16:26 | +| | +| Username DOE Group Node NWOCAC User Type STAFF | +| Internet Host/Mailbox NWOCA.ORG | +| Name Doe, John Phone | +| Title NBEC/NWOCA SSDT Documentalist/Supp Fax | +| Position Code Cell/Pager | +| Alternate | +| District IRN | +| Building IRN | +| County Henry | +| District/Organization NBEC/NWOCA | +| Street Address | +| City, State, Zip | +| Comment | +| URL | +| Site information | +| Management Groups | +| | +| | +| UMP: User Mail Profile for OECN Users | +| XX Top XXX Find XXX Lockmode | +| XX Help XXX Add XXX Set Defaults | +| XX Exit XXX Delete XXX Email Lists | +| XXX Next XXX Modify | +|_________________________________________________________________________| + + +</pre> +</table> + +<p> +<strong>EMAIL Lists</strong> +<br> + +<p> +In order to view the Email lists you currently subscribe to, press the +<kbd>[Email Lists]</kbd> key. A screen similar to the following will +appear giving both OECN statewide and local distribution lists. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +___________________________________________________________________________ +| User DOE Name Doe, John | +| Subscribe by name _________________ | +| Receive OECN attachments as web links? Y | +|Subscribed? -- Subscribed Distribution Lists -- | +| -- OECN lists -- | +| Y MAIL_STAFF DAS Staff [Restricted] | +| Y MAIL_SUPT_PUB Superintendents-Pub [Restricted] | +| Y MAIL_TREAS Treasuere [Restricted] | +| -- NWOCA lists -- | +| Y MAIL_SSDT SSDT Staff | +| Y MAIL_STAFF_EMIS EMIS Staff | +| Y MAIL_STAFF_FIS Fiscal Staff | +| | +| | +| | +| | +| | +| Press <Show All Lists> to see all available lists | +| | +| UMP: E-mail Distribution Lists 1 of 1 | +| XXX Accept (Resort) XX Cancel XX Prev Screen | +| XX First Screen XXX Last Screen XX Next Screen | +| XX Help XXX Show All Lists | +| XX Exit Dist Lists XXX Exit Dist Lists | +| | +|_________________________________________________________________________| + +</pre> +</table> + +<p> + The field "Receive OECN attachments as web links?" indicates if the + user wishes to receive links, instead of attachments, for files sent to + the OECN state-wide lists. + +<p> +You may subscribe or unsubscribe to any unrestricted list by entering +the name of the list in the indicated field at the top of the screen +and pressing the <kbd>[Accept]</kbd> key. +<p> +<strong>Table of Email Distribution Lists</strong> +<br> + +<p> +In order to see the available distribution lists, press the <kbd>[Show +All Lists]</kbd> key. A set of screens such as the following will +appear: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +___________________________________________________________________________ +| | +| User DOE Name Doe, John | +| Subscribe by name _________________ | +| Receive OECN attachments as web links? Y | +| Subscribed? -- All Available Distribution Lists -- | +| -- OECN lists -- | +| MAIL_CSTAFF C-site staff (obsolete) | +| MAIL_EMIS EMIS Coordinators [Restricted] | +| _ MAIL_LIBRARIAN Librarian | +| MAIL_PRINC_NONPUB Principals-Nonpublic [Restricted] | +| MAIL_PRINC_PUB Principals-Public [Restricted] | +| MAIL_PRINC_ELEM Principals-Elementary [Restricted] | +| MAIL_PRINC_SEC Principals-Secondary [Restricted] | +| _ MAIL_SPECED Special Education | +| Y MAIL_STAFF DAS Staff [Restricted] | +| MAIL_SUPT_NONPUB Superintendents-Nonpublic [Restricted] | +| Y MAIL_SUPT_PUB Superintendents-Pub [Restricted] | +| MAIL_SUPT_CITY Superintendents-City [Restricted] | +| MAIL_SUPT_COUNTY Superintendents-County [Restricted] | +| This is the first screen | +| | +| UMP: E-mail Distribution Lists 1 of 6 | +| XXX Accept (Resort) XX Cancel XX Prev Screen | +| XX First Screen XXX Last Screen XX Next Screen | +| XX Help XXX Show Subscribed | +| XX Exit Dist Lists XXX Exit Dist Lists | +|_________________________________________________________________________| + + +</pre> +</table> + +<a name="heading_12.3"><h1>12.3 Startup Procedure</h1></a> + +<p> + Follow the steps below to install UMP on your system: + +<ol start=1 > + <li>Create the system logical OECN$UMP to point to the device and + directory where profile and distribution lists will be created. You + should NOT use the same directory as your NM: or OECN$MAIL directories. + You should create a new directory to contain these files. + <li>Use OECN_INSTALL and INSTALL PACKAGE as usual to install the OECN + package. + <li>If installing for the first time, copy OECN$UMP_LOCAL.INI to + OECN$UMP with world:read protection. +<br> + <br> Modify OECN$UMP_LOCAL.INI to contain A-site specific information. + You must specify A-site name, DECnet node, and internet host names, + etc. See the .INI file for more information. + <li>Run the UMP.EXE program and choose the MAINTAIN option. Then exit + the program. This will create empy .IDX files in OECN$UMP. Set the + protections on the *.IDX files to W:RW. +</ol> + +<p> + +<a name="heading_12.4"><h1>12.4 Loading Initial Data</h1></a> + Load existing distribution lists. If using NM style distribution lists, + then use: +<br> +$ @OECN$:IMPORT_NM_LISTS + +<p> + If using PMDF style lists created by SWOCA's PUBDOM OECNMAIL utilities, + then use: +<br> +$ @OECN$:IMPORT_PMDF_LISTS + +<p> + Then run OECN$:UMP/MAINTAIN to review the user profiles. It should have + set, at least, the username, DECnet node, and host/domain. If the NM + lists were loaded, it will also have the name, district and county from + the NM lists. If a user was on more than one list, the user profile + will have multiple list codes. + +<p> + After running the import, the protection on the UMP*.IDX files should + be set to W:RW. + +<p> + You may, if desired, import from both the NM and PMDF style lists. + Unique usernames will only be added once, and a user will not be + assigned to the same list more than once. Running both imports + essentially "merges" the NM and PMDF lists. This might be useful if you + are uncertain which of your lists is more correct. + +<a name="heading_12.5"><h1>12.5 Importing Other Lists</h1></a> + +<p> + The IMPORT_NM_LISTS.COM and IMPORT_PMDF_LISTS.COM only import the + standard NM lists or lists created by SWOCA's OECN$MAIL utilities. If + you have other local lists which contain users you want to assign to a + list (either a standard list or a local list), you can use the + UMPIMPORT.EXE utility directly. + +<p> + The UMPIMPORT utiltiy can read an existing list (either NM or PMDF + format) and assign the users to the distribution list code you specify. + The UMPIMPORT utility takes three parameters in the following form: +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ UMPIMPORT :== $OECN$:UMPIMPORT +$ UMPIMPORT {NM|PMDF} {code} {file} +</pre> +</table> + +<p> + The first parameter indicates if the list to be imported is a NM list + or a PMDF list. NM style lists must contain at least the DECnet + address. PMDF style lists must contain internet addresses. The second + parameter is the distribution list code to assign to the users. The + code must be defined in either OECN$UMP_STANDARD.INI or + OECN$UMP_LOCAL.INI. The final parameter is the file to import. See + either IMPORT_NM_LISTS.COM or IMPORT_PMDF_LISTS.COM for examples of + using UMPIMPORT.EXE. +<p> + +<a name="heading_12.6"><h1>12.6 INI File Commands</h1></a> +The following INI commands are used in either the OECN$UMP_LOCAL.INI or +the OECN$UMP_STANDARD.INI files. The following is a summary of these +commands. See either of these files for more examples of their use. <p> + +<table border=3> + <caption><a name="Table_12-1"><strong>Table 12-1 Table of INI File Commands</strong></a></caption> + <tr> + <th align=center> </th> + <th align=center>Command </th> + <th align=center> </th> + <th align=center>Fields </th> + <th align=center>Explanation </th> + </tr> + <tr> + <td> + * + </td> + <td> + SET_ASITE + </td> + <td> + = + </td> + <td> + "{Asite}" + </td> + <td> + A-site acronym. Required field. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + SET_NODE + </td> + <td> + = + </td> + <td> + "{Node}" + </td> + <td> + Default DECnet node, cluster prefered. Required field. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + SET_DOMAIN + </td> + <td> + = + </td> + <td> + "{Domain}" + </td> + <td> + Default domain. Used as default for user profile and PMDF aliases. For + example, SET_DOMAIN = "NWOCA.ORG". Required field. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + SET_USER_TYPE + </td> + <td> + = + </td> + <td> + "{Code}" + </td> + <td> + Default for "User Type" field. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + LOCAL_LIST_PREFIX + </td> + <td> + = + </td> + <td> + "{Prefix}" + </td> + <td> + Alias prefix for local distribution lists. Example, LOCAL_LIST_PREFIX = + "Local_". May be null if local lists are not to be prefixed. + </td> + </tr> + <tr> + <td> + + </td> + <td> + LOCAL_HOST + </td> + <td> + = + </td> + <td> + "{hostname}" + </td> + <td> + This parameter defines host name(s) which should be considered "local" + to the current system. You may include multiple LOCAL_HOST lines if + needed. If a users "internet mailbox/host" field contins a local + address, then a user alias will not be created for them. Use this + parameter if you change the domain specified by SET_DOMAIN but you + still have user profiles which refer to the old address. Without this + parameter, UMP will consider profiles with the old domain to be remote + users and will create aliases for them. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + PROCESS_CHANNEL + </td> + <td> + = + </td> + <td> + "{process_channel_name}" + </td> + <td> + This parameter may be used to set the name of the reprocess channel to + be used for processing UMP distribution lists. By default, UMPEXPORT + will assume the reprocess channel is named reprocess.domain_name where + domain_name is the domain from the SET_DOMAIN parameter. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + DIRECTORY_DOMAIN + </td> + <td> + = + </td> + <td> + "{directory_daemon_domain}" + </td> + <td> + This parameter may be used to specifically set the name of the + directory daemon domain, if any. If this parameter is not specified + then UMPEXPORT will assume that the directory daemon is named + PO.domain_name where domain_name is the deomain from the SET_DOMAIN + parameter. + </td> + </tr> + <tr> + <td> + + </td> + <td> + REWRITE + </td> + <td> + = + </td> + <td> + "{user@host}","{To_Domain}" + </td> + <td> + Used by the UMPEXPORT to rewrite a particular domain to a + "pseudo_domain" for public use in the CSO (White Pages) and for address + reverals. The pseudo_domain may be name of your directory channel or an + alias for the local host. For example, REWRITE = *,"po.nwoca.org". In + this example, the command would cause all of NWOCA's users to have an + email address of "username@po.nwoca.org" regardless of their real host + name. In this way, remote users will not learn the real host name + (which may change). REWRITE supports full wildcarding on the "From" + domain portion of the parameter. The user@host may be a wildcard + pattern which matches user email address from the UMP profiles. The + new_host is the domain that the address will be rewritten to. This + parameter allows you better control over how addresses are published in + the CSO database (OECN White Pages) and address reversal + </td> + </tr> + <tr> + <td> + + </td> + <td> + CSO_REWRITE + </td> + <td> + = + </td> + <td> + Synonym for REWRITE + </td> + <td> + + </td> + </tr> + <tr> + <td> + * + </td> + <td> + ERRORS_TO + </td> + <td> + = + </td> + <td> + "{Email_Address}" + </td> + <td> + Address for "errors-to" parameter on mailing lists. If not preset, the + "errors_to" address defaults to "postmaster". + </td> + </tr> + <tr> + <td> + * + </td> + <td> + EMPTY_ADDRESS + </td> + <td> + = + </td> + <td> + "{Email_Address}" + </td> + <td> + Email address to place in any empty distribution list to prevent + bounces to mail sent to an empty list. Defaults to "empty@bitbucket" + which is suitable if the default "bitbucket" channel is defined. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + ENABLE_OECN_WEBATTACH + </td> + <td> + = + </td> + <td> + {YES|NO} + </td> + <td> + Enables users to request and receive "web attachments" sent to the OECN + lists. Default is "YES". Set to "NO" to prevent users from requesting + web attachments. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + OECN_WEBATTACH_DEFAULT + </td> + <td> + = + </td> + <td> + {YES|NO} + </td> + <td> + Specifies the "web attachment" default for new users. By default, new + users will receive web links instead of attachments. Set this to NO if + you wish new users to recieve the original attachments. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + ALLOW_USER_ALIAS + </td> + <td> + = + </td> + <td> + {YES|NO} + </td> + <td> + Indicates whether the 'Alias' and 'From' fields should be activated. + When set to NO (the default), the alias and from fields will be + disabled. When set to YES, the fields will be active. Note: When set to + YES, the DAS must customize thier procedures to load the + USER_ALIASES.TXT and USER_REVERSE.TXT file into the appropriate PMDF + database. + </td> + </tr> + <tr> + <td> + + </td> + <td> + LISTPARMS + </td> + <td> + = + </td> + <td> + "{named parameter}" + </td> + <td> + Specifies named parameter(s) to added to the MAIL_ and local aliases + created by UMP. Multiple named parameters may be specified using + multiple LISTPARMS lines. The named parameters will be included on all + MAIL_* and local UMP aliases. See the PMDF Managers Guide for + information about named parameters. Note: Too many named parameters may + prevent the alias from fitting in the PMDF Alias database. In that + case, the MAIL_ALIASES.DAT file must be included into the PMDF alias + file and the configuration compiled nightly. + </td> + </tr> + <tr> + <td> + * + </td> + <td> + PROTECT_SITE_INFO + </td> + <td> + = + </td> + <td> + [YES|NO] + </td> + <td> + Protect "Site Info" field in UMP. The default is "YES". + </td> + </tr> + <tr> + <td> + + </td> + <td> + TYPE + </td> + <td> + = + </td> + <td> + {Type},"{Description}" + </td> + <td> + Defines a distribution list type. Types 01---0z are reserved for OECN + use. Types 10---zz are available for DAS use. Types must be defined + prior to using a DEFINE_CODE line. + </td> + </tr> + <tr> + <td> + + </td> + <td> + DEFINE_CODE + </td> + <td> + = + </td> + <td> + [Type-],{Code},"{Description}", {List_Name},[User_Modifiable], + [Master_Code] + </td> + <td> + Type is a two digit no., considered above. Code is a 1 to 8 character + code used in the UMP maintenance program. List_Name is the file name + suffix used to create the distribution list filename. User_Modifiable + (Y,N) allows the user to subscribe or unsubscribe to the list. The + default is "NO", which means that the list is restricted. Master_Code + contains the master list code to which a sublist refers. In the case of + a master list, this field also contains the master list code. See the + section, Defining Local Distribution Lists, for more details. + <p>The default list type for codes in the OECN - wide file is 01. e.g. + in the OECN$UMP_STANDARD.INI file, DEFINE_CODE=COUN,... is equivalent + to DEFINE_CODE=01-COUN,... + <p>If the first character of the distribution codes is a hyphen (--), + the distribution list is obsolete and should be phased out. This means + that the export routines will not force creation of an alias pointing + to empty distribution lists and will not assign these empty lists as a + sub-list of a master list. + </td> + </tr> + <tr> + <td> + + </td> + <td> + TYPE_RESTRICT + </td> + <td> + = + </td> + <td> + {Type},{Method},{Value} + </td> + <td> + For example, TYPE_RESTRICT= 02,SUBSCRIBED,01-STF, restricts type 02 + lists to users who are also subscribed to the list 01-STF. See the + section below on Restricting Types, for more information and kinds of + restrictions. + </td> + </tr> + <tr> + <td> + + </td> + <td> + CONVERT + </td> + <td> + = + </td> + <td> + {From_Code},{To_Code} + </td> + <td> + This command will automatically convert an "old" distribution list code + to a "new" one. For example, CONVERT = 01-PM,02-PM. The "From_Code" is + the old (original) distribution list code, and "To_Code" is the new + distribution list code. Note, that codes must specify both the type and + code (e.g. 01-PM). You should NOT rely on the default prefix when + specifying conversions. See the section below for more information on + conversions. + </td> + </tr> + <tr> + <td> + + </td> + <td> + NM_MAP + </td> + <td> + = + </td> + <td> + {From_Code},{To_Code} + </td> + <td> + The command causes codes to be mapped to produce a single old-style NM + distribution list for compatibility with NM_SEARCH. + </td> + </tr> + <tr> + <td> + + </td> + <td> + SITE + </td> + <td> + = + </td> + <td> + "{Domain}",{CSO_ID} + </td> + <td> + This command defines the OECN DAS host name. Each SITE in this section + will be included in the OECN_xxxx distribution lists. It also specifies + each site's CSO white pages identifiers. A range of CSO ids has been + allocated to each site. These fields should not be modified. This + command should not be placed in the OECN$UMP_LOCAL.INI file. + </td> + </tr> +</table> +<hr> +<blockquote> +* This command can appear at most one time in the Local INI file. +</blockquote> +<hr> +<p> + +<a name="heading_12.7"><h1>12.7 Export NM and PMDF Style Lists</h1></a> + A procedure called OECN$:EXPORT_LISTS.COM to is used to create the NM + and PMDF style distribution lists and associated aliases. It is + recommended that each DAS write a custom DCL procedure which invokes + EXPORT_LIST.COM which also contains any local commands to add aliases, + etc. This procedure should be scheduled to run nightly to keep the + aliases and distributions lists up to date. See <a href="oecn10_sysman_handbook_full.html#exam_build_proc">Section 12.18</a> for an + example procedure which takes advantage of most of UMP's features. + +<p> + To run the procedure: +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ @OECN$:EXPORT_LISTS "{options}" +</pre> +</table> + +<p> + The P1 parameter should specify one or more of the following options + separated by commas: + +<table border=3> + <tr> + <th align=center>Option </th> + <th align=center>Description </th> + </tr> + <tr> + <td> + REBUILD + </td> + <td> + Rebuild the PMDF alias database from scratch using the alias file(s) + from UMPEXPORT. Use REBUILD if you allow UMP to control all the aliases + in your database, or if you add additional aliases after + EXPORT_LISTS.COM is executed. + </td> + </tr> + <tr> + <td> + MERGE + </td> + <td> + (Default) Merge the UMP aliases with the existing PMDF_ALIAS_DATABASE. + Use this option if you control/rebuild the alias files prior to + executing EXPORT_LISTS.COM Note: If this option is used then UMP will + always add aliases and old UMP aliases will not be deleted unless you + are rebuilding the database yourself elsewhere. + </td> + </tr> + <tr> + <td> + + </td> + <td> + Note: REBUILD and MERGE are mutually exclusive. + </td> + </tr> + <tr> + <td> + USER + </td> + <td> + Indicates that the USER_ALIASES.TXT and USER_REVERSE.TXT should be + loaded into PMDF_ALIAS_DATABASE and PMDF_REVERSE_DATABASE, + respectively. This should option should be specified if the DAS is + using remote addresses or user alias features of UMP. + </td> + </tr> + <tr> + <td> + DEFER + </td> + <td> + Defers placing updated PMDF databases back into the PMDF production + directories. This permits the DAS procedure to add additional aliases + to the database before being used by PMDF. If this option is specified + then the DAS's procedures are responsible for moving the databases back + into the PMDF production directories. The PMDF database files created + are: OECN$UMP:ALIASES.DAT (Alias database) OECN$UMP:REVERSE.DAT + (reverse database). + </td> + </tr> +</table> + +<p> + If you are using UMP as your only source of PMDF database aliases, you + should specify REBUILD. This will ensure that any old or obsolete + aliases are not retained in your database. + +<p> + However, if you have other aliases which you are building into your + local PMDF alias database, you must take local action to periodically + rebuild the PMDF alias database using your own aliases. This is + necessary to ensure that old aliases are not retained in your PMDF + alias database. + +<p> + If you are unfamilar with how aliases work in PMDF and how the alias + database (PMDF_ALIAS_DATABASE) and the alias file (PMDF_ALIAS_FILE) + interact, we recommend that you do the following: + +<ul> + <li>Allow UMP's EXPORT_LISTS.COM to rebuild the alias database from + scratch (by specifying the REBUILD option). This will give UMP complete + control over the aliases and ensure that no obsolete aliases are + retained. + <li>Place any local aliases (those not created by UMP) in your + PMDF_ALIAS_FILE. This file is not used by UMP and will allow you to + create local aliases without them being wiped out by UMP. + Alternatively, you can specify the DEFER option in EXPORT_LIST and + write procedure which adds additional aliases prior to moving the + databases into PMDF_TABLE:. +</ul> + +<a name="heading_12.7.1"><h2>12.7.1 Centralized Naming</h2></a> + +<p> + This section describes several ways in which UMP can be used to provide + centrialized naming in a PMDF configuration. Centralized naming + provides means to provide stable user email addresses regardless of + where the users mail is actually being delivered. This section assumes + you are already familar with the basic concepts of centralized naming + in PMDF. + +<a name="heading_12.7.1.1"><h3>12.7.1.1 Remote Mail Boxes</h3></a> + +<p> + UMP can provide centralized naming for users who have "remote" + mailboxes. Using UMP's centralized naming, a user can have an address + such as USER@das.org even if thier mail is being delivered to a + different address (mailbox), regardless of where that mailbox resides. + The centralized naming may be used to deliver mail to remote systems on + behalf of the user, or simply as a means of forwarding mail without + resorting to VMS Mail forwarding. + +<p> + Examples of "remote" users include: + +<ul> + <li>Users who wish to have thier OECN mail delivered to a different + account (e.g. on the same system or on a third-party ISP) + <li>Users who's mailbox exists on a school district mail server or + another DAS mail server. + <li>Users who's mailbox is in PMDF popstore +</ul> + +<p> +The primary benefit of centralized naming is that it permits a user to +have a stable mailing address even if the actual mailbox changes in the +future. Everyone with an DAS can have the same host name in thier +address regardless of where the mailbox reside. + +<p> + UMP determines if a user requires an alias based on the "Internet + Host/Mailbox" field on the profile. If the "Internet Host/Mailbox" + field contains a different mailbox or a "remote" hostname, then the + user is considered "remote" and an alias is generated. The definition + of "remote" is if the host name portion of the address does not match + the value of SET_DOMAIN or any LOCAL_HOST in the OECN$UMP_LOCAL.INI. + For each user which UMP determines requires an alias, an line is + written to USER_ALIASES.TXT. A line is also written to + USER_REVERSE.TXT. USER_REVERSE.TXT contains the appropriate "address + reversal" entry which allows PMDF to adjust the user's "From:" address + for outgoing mail. + +<p> + Both USER_ALIASES.TXT and USER_REVERSE.TXT are suitable for loading + into the PMDF_ALIAS_DATABASE and PMDF_REVERSE_DATABASE, respectively. + The use of these files is optional and is up to each DAS to determine + if they are useful in their configuration. EXPORT_LIST will not load + the files into PMDF by default. You must either set the USER option in + EXPORT_LISTS or write a custom procedure to load these files after + EXPORT_LISTS is executed. + +<p> + Please note, the USER_REVERSE.TXT is only effective if mail sent by the + user is routed through your system. For remote systems running mailers + which send internet mail directly (such as a remote VMS system running + PMDF), you must use that system's mechanisms for rewriting "From" + address lines. For instance, on a remote PMDF system, adding a REVERSE + mapping to the PMDF_MAPPING_FILE may be appropriate. Alternatively, you + could take steps to ensure that all outgoing mail is routed through the + system containing the UMP reversing entries. + +<p> + When exporting CSO, the user's real mailbox will be exported by + default. You can control this by using the REWRITE line in the local + INI file to rewrite addresses to either the DAS domain, a host alias, + or the directory channel. If you do this, be sure that you are loading + the appropriate file into either PMDF_ALIAS_DATABASE or your directory + channel. An address rewritten in this manner will be rewritten back to + the username or alias on the UMP profile (not the username in the + mailbox field). + +<a name="heading_12.7.1.2"><h3>12.7.1.2 User Aliases</h3></a> + +<p> + UMP provides the ability to create a user-specific alias independent of + the username or actual mailbox. For example, a username of + "SMITH@nwoca.org" could have an alias of "dave.smith@nwoca.org". + Furthermore, the user alias may optionally be used as the user's + backward pointing (From:) address. This permits the user to have an + easier to remember address as well as obscuring the actual username for + security purposes. + +<p> + The user aliases in UMP are implemented as two fields on the UMP + profile called "Alias" and "From". The alias is a 32 character field + which may consist of letters, digits or dots (.). The alias is required + to have a least one dot to avoid duplicates with VMS usernames. The + 'From' field is a flag indicating if the alias should be used as the + profile's official "From:" address. If the "From" flag is set to 'N', + then the alias is merely an alternative address for the user and will + be published in the CSO (White Pages). If the flag is set to 'Y', then + an entry will be added into the USER_REVERSE.TXT to reverse the + backward pointing addresses for any mail sent by the user. + +<p> + The 'Alias' and 'From' fields may only be modified by a system or group + manager. That is, end-users cannot specify thier own alias or reversal. + This allows the appropriate manager to control the alias standards. It + also prevents users from changing thier alias or 'From:' address + frequently without understanding the implications or attempting to + forge mail messages. + +<p> +Group managers are required to specify an "alias prefix" which matches +one of the group codes they are responsible for. For example, if a +group manager is responsible for the groups "AA,AB", then they may only +specify aliases beginning with "aa." or "ab.". This helps ensure +uniqueness in the mailbox namespace when multiple group managers are +responsbile for different groups of profiles. + +<p> + Since the DAS must take additional configuration steps in PMDF to + implement aliases and address reversal, the 'Alias' and 'From' fields + are disabled by default. The DAS must take explicit action (see below) + to implement this feature. + +<a name="heading_12.7.1.2.1"><h4>12.7.1.2.1 Implementing User Aliases</h4></a> + +<p> + The following steps must be performed in order to activate the user + alias and address reversal using UMP: + +<ol start=1 > + <li>Configure PMDF to use the 'reverse database' on the appropriate + channels. This feature is enabled by default in a standard PMDF + configuration. See the PMDF documentation for more information. + <li>Set ALLOW_USER_ALIAS to YES in OECN$UMP_LOCAL.INI. This flag + enables the 'Alias' and 'From' fields in UMP. + <li>Invoke EXPORT_LISTS.COM using the USER option to cause the + USER_ALIASES.TXT and USER_REVERSE.TXT files to be loaded into the + appropriate database. See <a href="oecn10_sysman_handbook_full.html#exam_build_proc">Section 12.18, Example Procedure for Periodic Rebuilds</a> for an example procedure which + invokes EXPORT_LISTS.COM. +</ol> + +<a name="heading_12.8"><h1>12.8 Distribution List Codes</h1></a> + +<p> + Each distribution list code has a "type" prefix. The type value allows + distribution lists to be organized into subsets independent of the + list's name and allows restrictions to be placed on lists so users only + see lists that may apply to them. The type codes also ensure that lists + defined by the OECN do not conflict with those created by the DAS. + +<p> + This version uses an 8 character code in the following format: +<br> +TT-CCCCCC + +<p> + Where TT is the distribution list "type" (or category) and CCCCCC is + the distribution list code. The following types are predefined by UMP: + +<table border=3> + <tr> + <td> + + </td> + <td> + 01 + </td> + <td> + OECN-wide user distribution lists + </td> + </tr> + <tr> + <td> + + </td> + <td> + 02 + </td> + <td> + OECN DAS staff-only lists + </td> + </tr> + <tr> + <td> + + </td> + <td> + 10 + </td> + <td> + Default type for lists defined by DAS + </td> + </tr> +</table> + +<p> + Types beginning with "0" are reserved for OECN use. All other types + (any type not starting with "0) are available for use by the DAS. + Currently, a maximum of 100 types can be defined. + +<p> + Type 10 is predefined and available for DAS use. To add additional + types add a line to the local ini file, like: +<br> +TYPE=tt,"description" + +<p> + For example: +<br> +TYPE=11,"NWOCA Staff Lists" + +<p> + Once a type has been defined, you may use the type in subsequent + DEFINE_CODE lines, for example: +<br> +DEFINE_CODE = 11-STFRCP, "Staff Recipes", STAFF_RECIPIES +<br> +DEFINE_CODE = 11-STFJOK, "Staff Jokes", STAFF_JOKES + +<p> + This creates two lists called MAIL_STAFF_RECIPIES and MAIL_STAFF_JOKES. + When displayed in UMP, they will be sorted and displayed under a + subheading called "NWOCA Staff lists". +<p> +<strong>Restricting Types to Particular Users</strong> +<br> + +<p> + Using types allows you to organize your lists into categories for + presentation to the user. But it may also be useful to restrict + categories of lists to particular types of users. UMP allows you to + apply several types of restrictions based on the user's profile + information. + +<p> + Note that type restrictions do NOT affect whether or not a user can + subscribe or unsubscribe from a given list. Each DEFINE_CODE line + determines whether a list is user-subscribable. The type restrictions + only limit whether the user can see a list or not. + +<p> + Please note that the type restrictions are not intended as rigid + security. Since some of the criteria is based on user modifiable + fields, it is possible for a user to enter incorrect information and + get assigned to the wrong lists. For example, a user might enter + another district's IRN which allows them to subscribe to another + districts lists. However, if the user changes the IRN back to the + correct value, UMP will remove them from any incorrectly assigned lists. + +<p> + To apply a restriction to a type value, use one of the following + commands in the local ini file: +<br> + +<table border=3> + <tr> + <td> + TYPE_RESTRICT=tt,SUBSCRIBED,tt-cccccc + </td> + <td> + Restricts type tt to users who are also subscribed to list tt-ccccc. + </td> + </tr> + <tr> + <td> + TYPE_RESTRICT=tt,IRN,nnnnnn + </td> + <td> + Restrict type to users who have a district or building IRN matching + nnnnnn + </td> + </tr> + <tr> + <td> + TYPE_RESTRICT=tt,TYPE,xxxx + </td> + <td> + Restrict type to users with a 'user type' field matching xxxxx. + </td> + </tr> + <tr> + <td> + TYPE_RESTRICT=tt,COUNTY,xxxx + </td> + <td> + Restrict type to users with a 'county' field matching xxxx. + </td> + </tr> + <tr> + <td> + TYPE_RESTRICT=tt,USERNAME,wildcard + </td> + <td> + Restrict type to users with a 'username' field matching wildcard mask. + </td> + </tr> +</table> + +<p> + Multiple TYPE_RESTRICT lines may be added for a single list type. In + this case, the restrictions form a logical OR operation. That is, if + the user matches any one of the criteria, they will have access to the + type. + +<p> + For example, to restrict the type 11 lists (from the example in the + previous section) to DAS staff members, the following restriction could + be applied: +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +TYPE_RESTRICT=11, SUBSCRIBED, 01-STF +</pre> +</table> + +<p> + This will restrict all type 11 lists to users who are also subscribed + to the standard DAS staff list. + +<a name="heading_12.9"><h1>12.9 Auto Conversion of Distribution List Codes (Optional)</h1></a> + +<p> + Because of the features provided by the distribution list types, it may + be desirable for DAS's to change their existing distribution list + codes. By default, during the conversion, all distribution list codes + in the LOCAL INI file are prefixed with type 10. For instance, if a DAS + has defined several "staff" lists, you may wish to separate these into + a separate type and restrict them to staff members only. + +<p> + To help facilitate this, an optional command is available for the LOCAL + INI file called CONVERT. The CONVERT command takes the following form: +<br> +<em>CONVERT={old_code},{new_code}</em> + +<p> + For example, to convert an existing code of 10-SEM (Staff EMIS) to + 11-STFEMS, place the following line in the LOCAL.INI: +<br> +CONVERT=10-SEM, 11-STFEMS + +<p> + Note that the prefix is required even if you did not use the prefix + when defining the code originally. Remember that any codes defined by + the local ini file default to type 10, so if a code was defined without + a type, it's type is 10. + +<p> + When changing a existing code using a CONVERT line, you should change + the DEFINE_CODE line to reflect the new code at the time you add the + CONVERT line. You should not reuse old codes until you are certain they + no longer exist in the UMDDAT file. After you are certain the old code + no longer exists in the UMDDAT file, you may remove the CONVERT line + from your INI file. + +<p> + Adding the CONVERT line and revising the DEFINE_CODE line, is all that + must be done to convert an existing list. UMP and it's utilities will + automatically convert the code as needed "on-the-fly". If you look at + the UMDDAT.IDX file after making a conversion, you may notice that some + users have the new code and others still have the old code. This is the + expected behavior. The new code will not be physically written to the + file until the record is changed with UMP's Modify function. + +<p> + If you are creating locally written programs to update or report on + user's distribution list codes, it may be confusing to have both the + old and new codes on file. In this case, you may run the UMPUPDATE + program to force the conversion on all records. + +<a name="heading_12.10"><h1>12.10 Defining Local Distribution Lists</h1></a> + +<p> +To define a local distribution list, you need to add several additional +lines to the OECN$UMP_LOCAL.INI file. + +<p> +You will probally need to use the ini commands: +<br> +LOCAL_LIST_PREFIX, TYPE, TYPE_RESTRICT, DEFINE_CODE +<p> +<strong>Example 1</strong> +<br> + +<p> +The following example illustrates how to define a local distribution +list for payroll clerks. + +<p> +Add the following lines to the OECN$UMP_LOCAL.INI file: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +TYPE = 12,"Local Payroll Clerks" +DEFINE_CODE = 12-PAYCLK,"Payroll Clerks",PAYROLL_CLERK +</pre> +</table> + +<p> +In order to actually subscribe to this distribution list, a user or DAS +person, will have to access the user's UMP profile, bring up the list +of available distribution lists, and subscribe the person. +<p> +<strong>Example 2</strong> +<br> + +<p> +As another example, suppose you wish to set up a distribution list for +staff jokes, restrict the list to just those users who have access to +DAS staff lists, create sublists for fiscal, programming, and EMIS +jokes, and set a prefix for local lists. + +<p> +Add the following lines to the OECN$UMP_LOCAL.INI file: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +LOCAL_LIST_PREFIX = "local_" +TYPE = 11, "Local Staff Lists" +TYPE_RESTRICT = 11,SUBSCRIBED,01-STF +DEFINE_CODE = 11-STFJOK,"Staff Jokes",STAFF_JOKES,Y,11-STFJOK +DEFINE_CODE = 11-FISJOK,"Fiscal Jokes",FISCAL_JOKES,Y,11-STFJOK +DEFINE_CODE = 11-PRGJOK,"Programmer Jokes",PROGRAMMER_JOKES,Y,11-STFJOK +DEFINE_CODE = 11-EMSJOK,"EMIS Jokes",EMIS_JOKES,Y,11-STFJOK +</pre> +</table> + +<p> +Then those users who are subscribed to the 01-STF list will see the +following entry when they access the table of available lists in the +UMP program. +<br> +-- LOCAL STAFF LISTS -- +<br> +---LOCAL_STAFF_JOKES Staff Jokes +<br> +---LOCAL_FISCAL_JOKES Fiscal Jokes +<br> +---LOCAL_PROGRAMER_JOKES Programmer Jokes +<br> +---LOCAL_EMIS_JOKES EMIS Jokes +<br> + +<p> +Users who are not subscrbed to the list 01-STF would see not entries +for "Local Staff Lists" including the heading itself. + +<p> +Note that the three sublists point to the master list, 11-STFJOK in the +DEFINE_CODE lines. This makes these sublists, so that mail addressed to +one of these sublists will be delivered to anyone on this list and +anyone on the master list, but not to users on any of the other +sublists. Also, mail addressed to the master list will be delivered to +everyone on any of the sublists. + +<a name="heading_12.11"><h1>12.11 Profile Group Management</h1></a> + +<p> + UMP provides the ability to segregate profiles into <strong>management + groups</strong> and delegate responsibility for the groups to selected + individuals. Once delegated, the group manager has nearly complete + control over the content of the profiles in the groups they are + responsible for. They may add, change or delete profiles within their + group and assign profiles to unrestricted distribution lists. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + Group managers may not add or remove profiles from the restricted + distribution lists. These lists (MAIL_STAFF, MAIL_SUPT_PUB, etc.) are + the responsibility of the DA-site and may not be delegated. </td> + </tr> +</table> +</center> + +<p> + User profiles are assigned to groups simply by placing a value in the + 'Group' field on the UMP profile. If desired, the field may be massed + changed using Datatrieve by modifying the GRP field in the UMP_HEADER + domain or UMP view. This value is a protected field and may only be + changed by DAS personnel or a group manager associated with the group. + +<p> + A user may be granted management rights to one or more groups by + entering a comma separated list of groups in the 'Management Groups' + field. A limit of ten comma separated groups may be included. The + following standard wildcards are supported in the management groups + field: + +<table border=3> + <tr> + <td> + * + </td> + <td> + Any sequence of zero or more characters + </td> + </tr> + <tr> + <td> + % + </td> + <td> + Exactly one character + </td> + </tr> + <tr> + <td> + # + </td> + <td> + Exactly one numeric character + </td> + </tr> + <tr> + <td> + @ + </td> + <td> + Exactly one alphabetic character + </td> + </tr> +</table> + +<p> + The user with any value in the 'Management Groups' field will be + permitted access to the MAINTAIN option in UMP. No special security + identifiers are required. The user will be able to view any profile on + the system, but will only be permitted to modify or delete profiles + associated with one of their groups. If a group manager adds a profile, + they must enter a group which matches their group management field. + +<p> + The value of the group field is entirely arbitrary. The DAS may assign + the groups in any fashion desirable. Most likely, a group would be + created for all users in a district and one or more group managers + would be assigned to manage that district's profiles. However, groups + could be further defined by building, or perhaps by classes of users + (teachers, administrators, etc.). Since wildcards are supported, it is + possible to devise complex hierarchies of groups which permit different + users various levels of access. + +<p> + Group managers should be carefully instructed regarding local + conventions for the various UMP fields. In particular, if the DAS uses + the USER_ALIAS.TXT to route mail to remote mailboxes, then proper use + of the UMP 'Internet Host/Mailbox' field is critical to ensure proper + mail delivery. Likewise, if the DAS uses the 'User Type' field to + control which profiles are sent to the OECN White Pages, then the + correct values must be provided to the group manager. + +<a name="heading_12.12"><h1>12.12 Export DIRECTORY DAEMON File (optional)</h1></a> + +<p> + You have the option of exporting to a DIRECTORY DAEMON database. + Executing the EXPORT_DD.COM file will produce a file suitable for + loading into a PMDF DIRECTORY-DAEMON data file. The procedure only + produces a DIRECTORY-DAEMON.TXT file in the OECN$UMP directory. You + must execute the appropriate PMDF CRDB command to create the indexed + file database and place it in the PMDF_ROOT:[DIRECTORY] with the + appropriate filename for your pseudo-domain. + +<p> + EXPORT_DD creates several aliases for each user. For example, the + following aliases would be created for username "SMITH" and a profile + name "Dave Smith": + +<table border=3> + <tr> + <td> + SMITH + </td> + <td> + SMITH@nwoca.org + </td> + </tr> + <tr> + <td> + dave.smith + </td> + <td> + SMITH@po.NWOCA.ORG + </td> + </tr> + <tr> + <td> + smith.dave + </td> + <td> + SMITH@po.NWOCA.ORG + </td> + </tr> + <tr> + <td> + d.smith + </td> + <td> + SMITH@po.NWOCA.ORG + </td> + </tr> + <tr> + <td> + smith.d + </td> + <td> + SMITH@po.NWOCA.ORG + </td> + </tr> +</table> + +<p> + Notice that the first alias (the username alias) sends directly to the + user's "real" address. The other aliases (dotted names) send to the + username at the directory channel. Since the username should be unique, + the first alias should never cause a bounce. The other addresses may + cause a bounce if they are not unique (the sender is notified of the + duplicates and their addresses). Since only dotted names and their + addresses are returned to the sender, the sender never learns the + "real" address. This helps isolate remote users from knowning the real + host names of the recipient. + +<p> + The directory channel for the DAS is assumed to be "po." plus the value + of the SET_DOMAIN line from the OECN$UMP_LOCAL.INI file. For instance, + for nwoca.org, the directory channel is assumed to be po.nwoca.org. If + the DAS is using a different name for the directory channel, you may + place the following line in the OECN$UMP_LOCAL.INI file: +<br> +<em>DIRECTORY_DOMAIN=pseudo.domain</em> + +<p> + See the PMDF System Adminstrators Guide for more information about the + directory daemon, channels and pseudo-domains. + +<a name="heading_12.13"><h1>12.13 Submit UMP Data to OECN CSO Database</h1></a> + +<p> + The CSO nameserver is a public domain software system which allows a + single database to be built containing name and address information. + The CSO is much flexible and allows client/server access to the + database anywhere on the network. Users can use GOPHER, LYNX or other + web browsers to perform queries. A utility called PH is also available + to perform direct queries against the central database. + +<p> + To transmit UMP data for loading into the CSO database, each DAS should + run the UMP_SEND_CSO.COM command procedure once per week. This command + procedure will extract the UMP database into CSO format and send it to + NWOCA.ORG for loading into CSO. + +<p> + Unless instructed otherwise, please do not routinely run UMP_SEND_CSO + more than once per week. In general, a single weekly run is sufficient + to keep the OECN White Pages up to date. However, situations will arise + where an extra run of UMP_SEND_CSO is necessary or desirable. For + example, if you change domain names, or load a large number of new + users or make significant changes to the the profiles. In these cases, + feel free to make a special run of UMP_SEND_CSO. + +<p> + NWOCA's system will run an update routine at approximately midnight + each night to load any files submitted during the day. Therefore, the + CSO data on file at the server will be updated the day after you run + UMP_SEND_CSO. This schedule means that your CSO data will be at most + one week behind when compared to your current UMP database. + +<p> + If you are also using EXPORT_DD.COM to build a DIRECTORY-DAEMON + database, you may wish to have the email addresses in the CSO database + reflect your directory daemon address, rather than your user's real + addresses. In this case, you may add the following line to your + OECN$UMP_LOCAL.INI file: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + REWRITE=*,"pseudo_domain" +</pre> +</table> + +<p> + Where "pseudo_domain" is the domain name of your directory channel, for + example, NWOCA uses the following line: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + REWRITE=*,"po.nwoca.org" +</pre> +</table> + +<p> + This line would cause all of NWOCA's users to have an email address of + username@po.nwoca.org regardless of their real host. In this way, + remote users will not learn the real host name (which may change). + +<a name="heading_12.14"><h1>12.14 Master List/Sub-list Handling</h1></a> + +<p> + Starting with the 29-Aug-95 version of UMPEXPORT, the master lists are + handled differently than in the past. Previously, there were master + lists which pointed to the respective sub-lists. But this caused + duplicate messages if the user was on more than one sub-list. With this + version, the master lists will contain the actual email addresses of + the users who are on the master list or any of the sub-lists. + +<p> + There were also "compatibility" codes which were used for the original + NM distribution list codes. This proved too cumbersome and confusing. + Therefore, a new method of handling the master lists was implemented + which essentially combines the master lists with the NM-compatibilty + lists. + +<p> + The codes PRN, SPT and TRS were previously indicated as "Obsolete-NM" + codes. This is no longer the case. These codes are now "master list" + codes (and indicated as such on the UMP help screen). If a user is + coded as having a "master list" code, they will placed on the master + list _and_ will also be placed on _all_ of the sub-lists for that code. + +<p> + If a user is coded on one of the sub-lists, they will be placed on that + sub-list and the corresponding master list. + +<p> + These changes provides two advantages: + +<ol start=1 > + <li>It provides a simple way of placing a single user on all sub-lists + using a single code. For example, if a DAS staff member wishes to be + placed on all the MAIL_TREAS_xxx lists, they may simply be given the + TRS master code. This will cause them to be placed on the master list + and all of TRS's sub-lists. + <li>Users which have not yet been recoded to one of the more specific + lists will automatically be placed on the master and all sub-lists. + This ensures that users who have not been recoded to the appropriate + list will still receive mail sent to any of the lists. +</ol> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> +This change means that it is somewhat less important to get your users +migrated off of the old distribution list codes. However, if you leave +users on the master list codes, they may receive mail that was not +intended for them. For example, if mail is sent to mail_supt_jvsd, it +will be received by all users who are on the SPT or SJV lists. </td> + </tr> +</table> +</center> + +<a name="heading_12.15"><h1>12.15 UMPCHECK - Verifying UMP Profiles against SYSUAF (Optional)</h1></a> + +<p> + UMPCHECK is a utility which reads the UMP profiles and compares the + usernames to the SYSUAF file. It reports usernames which do not exist, + have been disusered or dismailed. Optionally, UMPCHECK can delete + profiles for such usernames. By default, UMPCHECK only checks profiles + when the user's DECnet node name matches the values of the SYS$NODE or + SYS$CLUSTER_NODE logicals. Other users are considered to be remote + users and are not verified against the current node's SYSUAF. UMPCHECK + must be run as a foreign command and accepts the following syntax: +<br> +<em>$ UMPCHECK {CHECK|DELETE|DELETE/CONFIRM} [nodes,...]</em> + +<p> + The first parameter is the function to perform: + +<table border=3> + <tr> + <td> + CHECK + </td> + <td> + -- + </td> + <td> + Verify the UMP profiles against the SYSUAF and report usernames which + are invalid, disusered or dismailed. + </td> + </tr> + <tr> + <td> + DELETE + </td> + <td> + -- + </td> + <td> + Unconditionally deletes local usernames which are invalid, disusered or + dismailed. + </td> + </tr> + <tr> + <td> + DELETE/ + <br> CONFIRM + </td> + <td> + -- + </td> + <td> + Same as DELETE but prompts whether each username should be deleted or + not. + </td> + </tr> +</table> + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + The function must be specified exactly as shown above without + abbreviation and there may not be spaces between DELETE and /CONFIRM. + </td> + </tr> +</table> +</center> + +<p> + The second parameter indicates the node names of the users to be + validated against the current SYSUAF. By default, the node names used + are the current values of the SYS$NODE and SYS$CLUSTER_NODE logicals. +<p> + +<a name="heading_12.16"><h1>12.16 UMP_LOGIN - To Prompt Users to Enter Profiles During Login (Optional)</h1></a> + UMP_LOGIN.COM may be run during login to determine if the user has ever + modified their own profile. If they have not entered their profile, + UMP_LOGIN will ask them if they would like to do so immediately and + place them in the UMP profile. + +<p> + You may invoke UMP_LOGIN.COM at any point during login when appropriate + for your users. For example, SYLOGIN or other procedure appropriate for + your system. If you want UMP_LOGIN to be invoked automatically by + OECN_LOGIN, you may create a file in OECN$CUSTOM called + OECN_LOGIN_EPILOGUE.COM and execute OECN$:UMP_LOGIN from there. + +<p> + If you use UMP_LOGIN.COM you may wish to use the VMS INSTALL utility to + install OECN$:UMPMODIFIED.EXE as a known image to speed up the login + process. + +<a name="heading_12.17"><h1>12.17 UMPID2DIS - Creating Distribution Lists from VMS Identifiers (Optional)</h1></a> + +<p> + UMPID2DIS.EXE is an optional utility which builds PMDF style + distribution lists containing all users who hold a specified + identifier. This may be used by sites who wish to build distribution + lists for all users of a given package. These distribution lists are + not standard OECN-wide lists. + +<p> + UMPID2DIS will only work correctly on your system if your UIC's are + unique. That is, each user (holder of an identifier) has their own + unique UIC. If two users hold the same UIC identifier, only one of them + will be output to the lists. + +<p> + To create a distribution list for users holding a given identifier, use + the following commands: +<br> +$ ID2DIS :== $OECN$:UMPID2DIS +<br> +$ ID2DIS {identifier},... {distribution_list_file} + +<blockquote> + where "identifier" is the identifier. If you specify an OECN_ + identifier, users who hold the standard identifier or the _RO and _GM + variants will be included in the list. You may specify multiple + identifiers separated by commas (no spaces). If a user holds more than + one of the identifiers, they will only be included on the list once. +<br> + <br> "distribution_list_file" is the filename to contain the + distribution list. If a device and extention are not included, the + default is OECN$UMP:.DIS. +</blockquote> + +<p> + Only users that meet the following criteria will be output to the list: + +<table border=3> + <tr> + <td> + + </td> + <td> + 1) + </td> + <td> + The user holds one or more of the specified identifiers. + </td> + </tr> + <tr> + <td> + + </td> + <td> + 2) + </td> + <td> + The UAF flags DISUSER and DISMAIL are not set. + </td> + </tr> + <tr> + <td> + + </td> + <td> + 3) + </td> + <td> + The username has a valid UMP profile. + </td> + </tr> +</table> + +<p> + Note that UMPID2DIS does NOT create the PMDF alias to point to the + distribution list. If aliases are desired for the list you must use + PMDF CRDB or PMDF DB to create the PMDF aliases. + +<p> + For example, NWOCA could use the following commands to create a + distribution list for all NWOCA USPS users: +<br> +$ ID2DIS := $OECN$:UMPID2DIS +<br> +$ +<br> +$ ID2DIS OECN_USPS NWOCA_USPS +<br> +$ +<br> +$ PMDF DB +<br> + open pmdf_alias_database +<br> + override on +<br> + add "nwoca_usps" "nwoca_usps-list@reprocess.nwoca.org" +<br> + add "nwoca_usps-list" "<oecn$ump:nwoca_usps.dis,*,*,postmaster,*, + USPS" +<br> +$ EXIT + +<a name="exam_build_proc"><h1>12.18 Example Procedure for Periodic Rebuilds</h1></a> + +<p> + Periodically, each site should run EXPORT_LISTS.COM to update the + distribution lists from the UMP data. Most likely you will want to run + EXPORT_LISTS nightly. You should also run it anytime that you recreate + your PMDF alias database from scratch or make significant modifications + to the UMP profiles. + +<p> + If you have PMDF's directory channel configured, you should run + EXPORT_DD.COM and build a new directory daemon database. You may also + to use UMPID2DIS to create distribution lists based on VMS identifiers. + +<p> + You will most likely want to write a DCL command procedure to execute + all of the appropriate steps in a single batch job, and then schedule + it with DECscheduler. Attached is a sample of such a procedure which is + currently in use at NWOCA. You may wish to use this as a starting point + for your own procedure. + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + +$!+ +$! NWOCA_EXPORT_UMP.COM +$! +$! This procedure run the UMP routines to export distribution list, build +$! aliases, etc. +$! +$! - +$! +$ SET PROC/PRIV=(BYPASS,SYSPRV,SYSNAM,SYSLCK) +$ SET VERIFY +$ SET DEFAULT OECN$UMP +$!+ +$! Temporarily suspend mail processing while lists are being +$! created and datbases rebuilt. +$!- +$ STOP/QUEUE/NEXT MAIL$BATCH +$!+ +$! Export distribution lists and rebuild PMDF databases. +$!- +$ @OECN$:EXPORT_LISTS "REBUILD,USER,DEFER" STAFFR +$ ! +$ ! Merge aliases for mail addressed to former MAVCA users. +$ ! May be removed after MAVCA.OHIO.GOV goes away. +$ ! +$ pmdf crdb /long/nofast/nodup/strip OECN$UMP:MAVCA_ALIASES.DAT oecn$ump:aliases.dat +$ +$!+ +$! Create directory daemon text file. +$!- +$ @OECN$:EXPORT_DD +$!+ +$! Build new directory daemon database. Build into a temp file in case +$! someone attempts to use database while in progress. +$!- +$ pmdf crdb/duplicate/stat oecn$ump:directory_daemon.txt - + oecn$ump:directory_daemon.tmp +$ copy oecn$ump:directory_daemon.tmp - + pmdf_root:[directories]PO$NWOCA$ORG.DAT +$ set prot=w:re pmdf_root:[directories]PO$NWOCA$ORG.DAT +$ purge pmdf_root:[directories]PO$NWOCA$ORG.DAT +$ delete/nolog oecn$ump:directory_daemon.tmp;* +$! +$! Build distribution list based on VMS identifiers +$! +$ ID2DIS := $OECN$:UMPID2DIS +$ +$ ID2DIS OECN_USPS,OECN_SYSMAN NWOCA_USPS NM_USPS.DIS +$ ID2DIS OECN_PPS,OECN_SYSMAN NWOCA_PPS NM_PPS.DIS +$ ID2DIS OECN_USAS,OECN_SYSMAN NWOCA_USAS NM_USAS.DIS +$ ID2DIS OECN_EMIS,OECN_EMIS_STU,OECN_EMIS_STF,OECN_EMIS_SFU,OECN_EMIS_GEN,OECN_EMIS_FIN,OECN_SYSMAN NWOCA_EMIS NM_EMIS_USERS.DIS +$ ID2DIS OECN_EIS,OECN_SYSMAN NWOCA_EIS NM_EIS.DIS +$ ID2DIS OECN_VIS,OECN_SYSMAN NWOCA_VIS NM_VIS.DIS +$ ID2DIS OECN_SECIMS,OECN_SYSMAN NWOCA_SECIMS NM_SECIMS.DIS +$ ID2DIS NWOCA_INFOHIO NWOCA_INFOHIO NM_INFOHIO.DIS +$ COPY OECN$UMP:nm_*.dis/sinc NM:/PROT=W:R +$ +$! Create aliases for NWOCA's identifier lists +$ PMDF DB +open oecn$ump:aliases.dat +override on +add "mail_hs_counselors" "mail_counselor_sec" + +add "nwoca_usps" "nwoca_usps-list@reprocess.nwoca.org" +add "nwoca_usps-list" "<oecn$ump:nwoca_usps.dis,*,*,postmaster,*, USPS" + +add "nwoca_PPS" "nwoca_PPS-list@reprocess.nwoca.org" +add "nwoca_PPS-list" "<oecn$ump:nwoca_PPS.dis,*,*,postmaster,*, PPS" + +add "nwoca_USAS" "nwoca_USAS-list@reprocess.nwoca.org" +add "nwoca_USAS-list" "<oecn$ump:nwoca_USAS.dis,*,*,postmaster,*, USAS" + +add "nwoca_EMIS" "nwoca_EMIS-list@reprocess.nwoca.org" +add "nwoca_EMIS-list" "<oecn$ump:nwoca_EMIS.dis,*,*,postmaster,*, EMIS" + +add "nwoca_EIS" "nwoca_EIS-list@reprocess.nwoca.org" +add "nwoca_EIS-list" "<oecn$ump:nwoca_EIS.dis,*,*,postmaster,*, EIS" + +add "nwoca_VIS" "nwoca_VIS-list@reprocess.nwoca.org" +add "nwoca_VIS-list" "<oecn$ump:nwoca_VIS.dis,*,*,postmaster,*, VIS" + +add "nwoca_SECIMS" "nwoca_SECIMS-list@reprocess.nwoca.org" +add "nwoca_SECIMS-list" "<oecn$ump:nwoca_SECIMS.dis,*,*,postmaster,*, SECIMS" + +add "nwoca_INFOHIO" "nwoca_INFOHIO-list@reprocess.nwoca.org" +add "nwoca_INFOHIO-list" "<oecn$ump:nwoca_INFOHIO.dis,*,*,postmaster,*, INFOhio" +$ +$!+ +$! Create VMS Mail forwarding addresses for same aliases +$!- +$ mail := mail +$ mail +set forward/user=nwoca_usps in%nwoca_usps +set forward/user=nwoca_pps in%nwoca_pps +set forward/user=nwoca_usas in%nwoca_usas +set forward/user=nwoca_emis in%nwoca_emis +set forward/user=nwoca_eis in%nwoca_eis +set forward/user=nwoca_vis in%nwoca_vis +set forward/user=nwoca_secims in%nwoca_secims +set forward/user=nwoca_infohio in%nwoca_infohio +$ +$ +$!+ +$! Create a MAIL_ALL distribution list. Will contain all user profiles +$! which are subscribed to one or more distribution list (non-duplicated +$! addresses). +$!- +$ delete /nolog/noconfirm mail_all.*;* +$ append mail_*.dis/sinc mail_all.tmp/new +$ sort/nodupli mail_all.tmp mail_all.dis +$ set prot=w:r mail_all.dis;* +$ +$ PMDF DB +open oecn$ump:aliases.dat +override on +add "mail_all" "mail_all-list@reprocess.nwoca.org" +add "mail_all-list" "<oecn$ump:mail_all.dis,*,*,postmaster,*, All NWOCA users" +$ mail := mail +$ mail +set forward/user=mail_all in%mail_all +$ +$ purge oecn$ump:*.* +$ +$!+ +$! All local aliases have been added to databases. +$! Place the new databases back into PMDF production +$! directory. +$!- +$ copy/nolog oecn$ump:aliases.dat PMDF_ALIAS_DATABASE +$ set file pmdf_alias_database/prot=w:re +$ purge/keep=3/nolog pmdf_alias_database +$ +$ copy/nolog oecn$ump:reverse.dat PMDF_REVERSE_DATABASE +$ set file pmdf_reverse_database/prot=w:re +$ purge/keep=3/nolog pmdf_reverse_database +$ +$!+ +$! All done. Restart dispatcher to ensure services open +$! the fresh databases. +$ PMDF RESTART DISPATCHER +$ START/QUEUE MAIL$BATCH +$ +$ EXIT + + +</pre> +</table> + +<p> + +<a name="heading_12.19"><h1>12.19 Multiple Non-Clustered Systems</h1></a> + DAS's with a single VMS system, or a single VMS cluster, need not be + concerned with this section. + +<p> + The UMP system is currently designed assuming that each A-site will + have a single set of UMP files regardless of how many independent + (non-VMSclustered) systems. This provides a single point of + adminstration for DAS personnel and makes building the PMDF + distribution lists and aliases easier. At present, there are no plans + to implement multiple UMP files on multiple systems while still being + able to produce a single set of distribution lists for the entire DAS. + This may be added in the future if a well defined need arises. + +<p> + However, it would be useful if remote users could modify their own user + profiles without having to log into the system which contains the UMP + files. This section describes a secure way of providing remote users + access to their own UMP profiles. + +<p> + Use the following procedure to establish remote access to the UMP + system. + +<ol start=1 > + <li>Choose a system to contain the UMP files. This would normally be + your cluster or the system primarily responsible for mail delivery. + This will be called the "server" system. + <li>Put UMP on the server normally as described in the "Setup" section. + Users on this system will use the UMP program directly from this system. + <li>Create a username on the server called UMP_SERVER. This should be + non-prived, network-only access. The login directory for this account + can be the OECN$UMP directory, or it can have a separate login + directory. + <li>On the server define the OECN$UMP logical as normal. + <li>On the server use AUTHORIZE to define network proxies into the + server for each remote system. For example: +<br> +UAF> ADD/PROXY node::* UMP_SERVER <br> Where "node" is the DECnet +node name of the remote node. <br> This will give any user on one of +your non-server nodes proxy access to the UMP_SERVER. + <li>On each node (client) that you want to have access to the server, + define OECN$UMP as follows (assuming MAIN:: is the server): +<br> +$ DEFINE OECN$UMP "MAIN""UMP_SERVER""::OECN$UMP:" <br> Also, copy the +UMP.EXE file to the OECN$: directory on the client node. Set up the +users to run the local copy of the .EXE. + <li>Copy the *.INI files from the server to the client system. and + define the following logicals: +<br> +$ DEFINE OECN$UMP_STANDARD dev:[dir]OECN$UMP_STANDARD.INI +<br> +$ DEFINE OECN$UMP_LOCAL dev:[dir]OECN$UMP_LOCAL.INI <br> Modify the +OECN$UMP_LOCAL.INI file to contain the local system's DECnet node name +and internet host. This will ensure that each user's profile is built +using the local system's node names. +</ol> + +<p> + If you do the above, each node will appear to have local access to the + UMP files, and you will end up with a central DAS-wide database to + build your distribution lists from. The server node will be the only + one that needs to run the EXPORT_LISTS.COM to produce the mail_ and + oecn_ for your DAS. + +<a name="heading_12.20"><h1>12.20 Programming Considerations</h1></a> + +<p> + DAS programmers may wish to use DTR, COBOL or other high level language + to query or manipulate the UMP data files. This section contains a + brief description of the UMP data files and special considerations. DTR + and COBOL definitions are provided with the software release for this + purpose. The COBOL definitions are contained in UMPDAT.LIB and + UMDDAT.LIB in OECN$LIB. The DTR definitions are in the domains + OECN$CDD_OECN.UMP_HEADER and OECN$CDD_OECN.UMP_DIST. OECN$CDD_UMP.UMPS + is a view which joins the header and distribution list code. + +<p> + The UMP data is stored in two files in OECN$UMP: + +<table border=3> + <tr> + <td> + UMPDAT.IDX + </td> + <td> + Contains profile information. Keys: + <ul> + <li>Primary: Group + Username + <li>Secondary: Username (no duplicates) + <li>Secondary: Alias (no duplicates) + </ul> + </td> + </tr> + <tr> + <td> + UMDDAT.IDX + </td> + <td> + Contains the distribution lists the user is subscribed to. Each record + represents a single distribution list assignment. The distribution + lists are stored as a code value defined by the OECN$UMP_STANDARD.INI + or OECN$UMP_LOCAL.INI files. Primary key: Username + + Distribution_list_code + </td> + </tr> +</table> + +<a name="heading_12.20.1"><h2>12.20.1 Field Requirements</h2></a> + +<p> +Some fields in UMP may display to the user differently than is +physically stored in the file. Other fields have specific requirements. +Please note the following: + +<ul> + <li>The ALIAS field must always contain a value. If the user does not + have a specific alias, then the ALIAS must be set equal to the USERNAME + field. + <li>A number of fields are calculated by UMP as needed and may or may + not be stored physically in the field. For example, if the ORGANIZATION + field is blank, but the DISTRICT_IRN is not, then UMP will calculate + the ORGANIZATION name using the OEDS file. However, UMP will not + necessarily store the calculated value. If you are developing programs + which depend on these values being stored on the file, you may run + UMPUPDATE.EXE prior to your program. UMPUPDATE will calculate the files + and store them on the file. + <li>Distribution list codes are always stored in internal format + (ttxxxx) as defined by the INI files. In order to manipulate + distribution codes, you must know the lists internal value. + <li>The LAST_UPDATE field is a VMS quadword date. + <li>MODIFIED_FLAG contains "Y" if the user has modified their own + profile. Any other value indicates the profile is new and has not been + modified by the user. +</ul> + +<p> + +<hr size=5> +<a name="vfc2pdf_chap"><h1>Chapter 13<br>VFC2PDF - Converting Text Files to PDF Format</h1></a> + +<p> +VFC2PDF converts VFC or plain text files into PDF (Portable Document +Format) files. After a report is converted to PDF format, it can be +transferred to a PC or a MAC. It can also be viewed or printed using +the Adobe Acrobat viewer. By using this utility, it becomes much easier +to publish documents on public Internet web sites, CDrom, etc. +<h3>accessing the program</h3> +<blockquote> +<br> +<br> + +<p> +The program may be executed by typing: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +Menu>VFC2PDF + +</pre> +</table> + +<p> +at the Menu or from the $ prompt by typing: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> +$ VFC2PDF/[qual 1]/.../[qual n] {input_file} [output_file]) + +</pre> +</table> + +</blockquote> + +<p> +By executing from the Menu, you have no control over the default +formatting options. + +<p> +By executing from the $ prompt, you can control the output, including +the use of wildcards. By default, VFC2PDF will attempt to choose +appropriate orientation, font sizes and margins based on the record +length of the input file. However, these values may be controlled by +using qualifiers as given below. + +<p> +<center> +<table border=0 width=75%> +<tr> + <td><center><font size=+2><strong>Note</strong></font></center><hr + size=1 noshade> + A foreign command must be defined for VFC2PDF, such as: +<br> + ($ VFC2PDF :== $OECN$:VFC2PDF). </td> + </tr> +</table> +</center> +<p> +<strong>Syntax</strong> +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + + VFC2PDF {input_file} [output_file] + + /ORIENTATION={PORTAIT|LANDSCAPE} + /FONT_SIZE={points} + /FONT_STYLE=([NORMAL],[BOLD],[ITALIC]) + /VERTICAL_SPACING={points} + /TOP_MARGIN={points} + /LEFT_MARGIN={points} + /LOG + /PAGE_LENGTH={max_lines_per_page} + /LINE_WIDTH={characters_per_line} (defaults to record size) + /INFORMATION=([AUTHOR="author"], + [CREATOR="creator (defaults to username)"], + [TITLE="title (defaults to filename)"], + [SUBJECT="subject"]) + /[NO]COMPRESS + + +</pre> +</table> + +<p> +<strong>Defaults</strong> +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + + PORTRAIT: /FONT_SIZE=11 /VERTICAL_SPACING=11 /LEFT_MARGIN=45 + /PAGE_LENGTH=66 + LANDSCAPE: /FONT_SIZE=9 /VERTICAL_SPACING=9 /LEFT_MARGIN=30 + /PAGE_LENGTH=66 + If /LINE_WIDTH is greater than 132: + /FONT_SIZE=7 /VERTICAL_SPACING=9 /LEFT_MARGIN=30 + + +</pre> +</table> + +<p> +<strong>Notes</strong> +<br> + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + + - Wildcards are supported in the input specification. If wildcards + are used, the output_file may be omitted or must not include a file + name. Output files will be written to the default directory unless + the second parameter contains an output directory. + + - All qualifiers are optional. If /ORIENTATION is omitted, then + it will be selected automatically based on the record length of the + input file. Line lengths over 80 characters will be printed in LANDSCAPE, + otherwise PORTRAIT will be used. + + Note: Record size determination is based on the MRS (Maximum Record + Size) in the RMS header. For formats where MRS is not set, + VFC2PDF will assume 80 characters. + + +</pre> +</table> + +<h3>transfer options</h3> +<blockquote> +<br> + +<p> +There are several methods available to transfer the PDF formated file +to a PC or MAC. + +<p> +One method is to use some FTP utility. + +<p> +Another procedure, which seems to work well in Netscape, is to specify +an FTP URL as: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + + ftp://username@host.org/ + + +</pre> +</table> + +<p> +Netscape will prompt you for a password and connect with an +authenticated FTP. + +<p> +A second simple method is to mail the file(s) to yourself as follows: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +EMAIL>send/file/noedit/nocc/subj="PDF Files" filename.pdf + + +</pre> +</table> + +<p> +or for multiple PDF files: + +<p> +<table border=0> + <tr> + <td> + <br> +<pre> + +EMAIL>send/file/noedit/nocc/subj="PDF Files" *.pdf + + +</pre> +</table> + +<p> +For the above, "noedit" means No Edit feature, and "nocc" means No +Carbon Copy desired. + +<p> +Once the files are sent, the user can open the message with their +browser, or WEB-Mail, or some other client, and then save it to their +desktop or print from there. +</blockquote> +<p> +<table border=2> + <tr> + <td width=150 align=center><a href="oecn10_sysman_handbook_full_contents.html">Contents</a></td> + </tr> +</table> +</body> +</html>