Initial import. RepDevLatest2
authorjake
Fri, 01 Jun 2007 18:46:53 +0000
branchRepDevLatest2
changeset 1f45e4595d59f
parent 0 f5777e1bb2ac
child 2 5c4f2e7fd024
Initial import.
.classpath
.project
.settings/org.eclipse.jdt.core.prefs
build.xml
com/repdev/Config.java
com/repdev/DatabaseLayout.java
com/repdev/DirectSymitarSession.java
com/repdev/EditorComposite.java
com/repdev/ErrorCheckResult.java
com/repdev/FileDialog.java
com/repdev/FileType.java
com/repdev/MainShell.java
com/repdev/NewFileShell.java
com/repdev/NewProjShell.java
com/repdev/OptionsShell.java
com/repdev/Project.java
com/repdev/ProjectManager.java
com/repdev/QueueInfo.java
com/repdev/RemFileShell.java
com/repdev/RemProjShell.java
com/repdev/RepDevMain.java
com/repdev/RepgenParser.java
com/repdev/RunReportShell.java
com/repdev/ScriptHandler.java
com/repdev/SessionError.java
com/repdev/SuggestShell.java
com/repdev/SymLoginShell.java
com/repdev/SymitarFile.java
com/repdev/SymitarSession.java
com/repdev/SyntaxHighlighter.java
com/repdev/TelnetProtocolHandler.java
com/repdev/TelnetSymitarSession.java
com/repdev/TelnetWrapper.java
com/repdev/TestingSymitarSession.java
com/repdev/Wrapper.java
db.txt
dist/.classpath
dist/.project
dist/.settings/org.eclipse.jdt.core.prefs
dist/build.xml
dist/com/repdev/Config.class
dist/com/repdev/DatabaseLayout$DataType.class
dist/com/repdev/DatabaseLayout$Field.class
dist/com/repdev/DatabaseLayout$Record.class
dist/com/repdev/DatabaseLayout$SingletonHolder.class
dist/com/repdev/DatabaseLayout.class
dist/com/repdev/DirectSymitarSession$Command.class
dist/com/repdev/DirectSymitarSession.class
dist/com/repdev/EditorComposite$1.class
dist/com/repdev/EditorComposite$10.class
dist/com/repdev/EditorComposite$11.class
dist/com/repdev/EditorComposite$12.class
dist/com/repdev/EditorComposite$13.class
dist/com/repdev/EditorComposite$14.class
dist/com/repdev/EditorComposite$15.class
dist/com/repdev/EditorComposite$2.class
dist/com/repdev/EditorComposite$3.class
dist/com/repdev/EditorComposite$4.class
dist/com/repdev/EditorComposite$5.class
dist/com/repdev/EditorComposite$6.class
dist/com/repdev/EditorComposite$7.class
dist/com/repdev/EditorComposite$8.class
dist/com/repdev/EditorComposite$9.class
dist/com/repdev/EditorComposite$Edit.class
dist/com/repdev/EditorComposite$TextChange.class
dist/com/repdev/EditorComposite.class
dist/com/repdev/ErrorCheckResult$Type.class
dist/com/repdev/ErrorCheckResult.class
dist/com/repdev/FTPManager.class
dist/com/repdev/FileDialog$1.class
dist/com/repdev/FileDialog$2.class
dist/com/repdev/FileDialog$3.class
dist/com/repdev/FileDialog$4.class
dist/com/repdev/FileDialog$5.class
dist/com/repdev/FileDialog$Mode.class
dist/com/repdev/FileDialog.class
dist/com/repdev/FileType.class
dist/com/repdev/MainShell$1.class
dist/com/repdev/MainShell$10.class
dist/com/repdev/MainShell$11.class
dist/com/repdev/MainShell$12.class
dist/com/repdev/MainShell$13.class
dist/com/repdev/MainShell$14$1.class
dist/com/repdev/MainShell$14.class
dist/com/repdev/MainShell$15.class
dist/com/repdev/MainShell$16.class
dist/com/repdev/MainShell$17.class
dist/com/repdev/MainShell$18.class
dist/com/repdev/MainShell$19.class
dist/com/repdev/MainShell$2.class
dist/com/repdev/MainShell$20.class
dist/com/repdev/MainShell$21.class
dist/com/repdev/MainShell$22.class
dist/com/repdev/MainShell$23.class
dist/com/repdev/MainShell$24.class
dist/com/repdev/MainShell$25.class
dist/com/repdev/MainShell$26.class
dist/com/repdev/MainShell$27.class
dist/com/repdev/MainShell$28.class
dist/com/repdev/MainShell$29.class
dist/com/repdev/MainShell$3.class
dist/com/repdev/MainShell$30.class
dist/com/repdev/MainShell$31.class
dist/com/repdev/MainShell$32.class
dist/com/repdev/MainShell$33.class
dist/com/repdev/MainShell$34.class
dist/com/repdev/MainShell$35.class
dist/com/repdev/MainShell$36.class
dist/com/repdev/MainShell$37.class
dist/com/repdev/MainShell$4.class
dist/com/repdev/MainShell$5$1.class
dist/com/repdev/MainShell$5.class
dist/com/repdev/MainShell$6.class
dist/com/repdev/MainShell$7.class
dist/com/repdev/MainShell$8.class
dist/com/repdev/MainShell$9.class
dist/com/repdev/MainShell.class
dist/com/repdev/NewFileShell$1.class
dist/com/repdev/NewFileShell$2.class
dist/com/repdev/NewFileShell$3.class
dist/com/repdev/NewFileShell$4.class
dist/com/repdev/NewFileShell$5.class
dist/com/repdev/NewFileShell$6.class
dist/com/repdev/NewFileShell$7.class
dist/com/repdev/NewFileShell$Mode.class
dist/com/repdev/NewFileShell.class
dist/com/repdev/NewProjShell$1.class
dist/com/repdev/NewProjShell$2.class
dist/com/repdev/NewProjShell.class
dist/com/repdev/OptionsShell$1.class
dist/com/repdev/OptionsShell$2.class
dist/com/repdev/OptionsShell$3.class
dist/com/repdev/OptionsShell$4.class
dist/com/repdev/OptionsShell.class
dist/com/repdev/Project.class
dist/com/repdev/ProjectManager.class
dist/com/repdev/QueueInfo.class
dist/com/repdev/RemFileShell$1.class
dist/com/repdev/RemFileShell$2.class
dist/com/repdev/RemFileShell$Result.class
dist/com/repdev/RemFileShell.class
dist/com/repdev/RemProjShell$1.class
dist/com/repdev/RemProjShell$2.class
dist/com/repdev/RemProjShell$Result.class
dist/com/repdev/RemProjShell.class
dist/com/repdev/RepDevMain.class
dist/com/repdev/RepgenParser$BackgroundIncludeParser.class
dist/com/repdev/RepgenParser$BackgroundSymitarErrorChecker.class
dist/com/repdev/RepgenParser$Division.class
dist/com/repdev/RepgenParser$Error.class
dist/com/repdev/RepgenParser$Include.class
dist/com/repdev/RepgenParser$Task.class
dist/com/repdev/RepgenParser$Token.class
dist/com/repdev/RepgenParser$Variable.class
dist/com/repdev/RepgenParser.class
dist/com/repdev/RunReportShell$1.class
dist/com/repdev/RunReportShell$2.class
dist/com/repdev/RunReportShell.class
dist/com/repdev/ScriptHandler.class
dist/com/repdev/SessionError.class
dist/com/repdev/SuggestShell$1.class
dist/com/repdev/SuggestShell$2.class
dist/com/repdev/SuggestShell$3.class
dist/com/repdev/SuggestShell$4.class
dist/com/repdev/SuggestShell$5.class
dist/com/repdev/SuggestShell.class
dist/com/repdev/SymLoginShell$1.class
dist/com/repdev/SymLoginShell$2.class
dist/com/repdev/SymLoginShell.class
dist/com/repdev/SymitarFile.class
dist/com/repdev/SymitarFileInfo.class
dist/com/repdev/SymitarSession.class
dist/com/repdev/SyntaxHighlighter$EStyle.class
dist/com/repdev/SyntaxHighlighter$Token.class
dist/com/repdev/SyntaxHighlighter$Variable.class
dist/com/repdev/SyntaxHighlighter.class
dist/com/repdev/TelnetProtocolHandler.class
dist/com/repdev/TelnetSymitarSession$State.class
dist/com/repdev/TelnetSymitarSession.class
dist/com/repdev/TelnetWrapper$1.class
dist/com/repdev/TelnetWrapper.class
dist/com/repdev/TestingSymitarSession$SymitarWildcardFilter.class
dist/com/repdev/TestingSymitarSession.class
dist/com/repdev/Wrapper.class
dist/db.txt
dist/functions.txt
dist/keywords.txt
dist/org/apache/commons/logging/Log.class
dist/org/apache/commons/logging/LogConfigurationException.class
dist/org/apache/commons/logging/LogFactory$1.class
dist/org/apache/commons/logging/LogFactory$2.class
dist/org/apache/commons/logging/LogFactory$3.class
dist/org/apache/commons/logging/LogFactory$4.class
dist/org/apache/commons/logging/LogFactory$5.class
dist/org/apache/commons/logging/LogFactory.class
dist/org/apache/commons/logging/LogSource.class
dist/org/apache/commons/logging/impl/Jdk13LumberjackLogger.class
dist/org/apache/commons/logging/impl/Jdk14Logger.class
dist/org/apache/commons/logging/impl/LogFactoryImpl.class
dist/org/apache/commons/logging/impl/NoOpLog.class
dist/org/apache/commons/logging/impl/SimpleLog$1.class
dist/org/apache/commons/logging/impl/SimpleLog.class
dist/org/apache/commons/logging/impl/WeakHashtable$1.class
dist/org/apache/commons/logging/impl/WeakHashtable$Entry.class
dist/org/apache/commons/logging/impl/WeakHashtable$Referenced.class
dist/org/apache/commons/logging/impl/WeakHashtable$WeakKey.class
dist/org/apache/commons/logging/impl/WeakHashtable.class
dist/org/apache/commons/logging/impl/package.html
dist/org/apache/commons/logging/package.html
dist/org/apache/ftpserver/CommandFactory.class
dist/org/apache/ftpserver/ConnectionManagerImpl$1.class
dist/org/apache/ftpserver/ConnectionManagerImpl.class
dist/org/apache/ftpserver/DataConnectionConfig.class
dist/org/apache/ftpserver/DirectoryLister.class
dist/org/apache/ftpserver/FtpConfigImpl.class
dist/org/apache/ftpserver/FtpDataConnection.class
dist/org/apache/ftpserver/FtpLogFactory$1.class
dist/org/apache/ftpserver/FtpLogFactory.class
dist/org/apache/ftpserver/FtpRequestImpl.class
dist/org/apache/ftpserver/FtpServer.class
dist/org/apache/ftpserver/FtpStatisticsImpl.class
dist/org/apache/ftpserver/FtpWriter.class
dist/org/apache/ftpserver/FtpletContainer$FtpletEntry.class
dist/org/apache/ftpserver/FtpletContainer.class
dist/org/apache/ftpserver/RequestHandler.class
dist/org/apache/ftpserver/command/ABOR.class
dist/org/apache/ftpserver/command/ACCT.class
dist/org/apache/ftpserver/command/APPE.class
dist/org/apache/ftpserver/command/AUTH.class
dist/org/apache/ftpserver/command/CDUP.class
dist/org/apache/ftpserver/command/CWD.class
dist/org/apache/ftpserver/command/DELE.class
dist/org/apache/ftpserver/command/EPRT.class
dist/org/apache/ftpserver/command/EPSV.class
dist/org/apache/ftpserver/command/FEAT.class
dist/org/apache/ftpserver/command/HELP.class
dist/org/apache/ftpserver/command/LANG.class
dist/org/apache/ftpserver/command/LIST.class
dist/org/apache/ftpserver/command/MDTM.class
dist/org/apache/ftpserver/command/MKD.class
dist/org/apache/ftpserver/command/MLSD.class
dist/org/apache/ftpserver/command/MLST.class
dist/org/apache/ftpserver/command/MODE.class
dist/org/apache/ftpserver/command/NLST.class
dist/org/apache/ftpserver/command/NOOP.class
dist/org/apache/ftpserver/command/OPTS.class
dist/org/apache/ftpserver/command/OPTS_MLST.class
dist/org/apache/ftpserver/command/OPTS_UTF8.class
dist/org/apache/ftpserver/command/PASS.class
dist/org/apache/ftpserver/command/PASV.class
dist/org/apache/ftpserver/command/PBSZ.class
dist/org/apache/ftpserver/command/PORT.class
dist/org/apache/ftpserver/command/PROT.class
dist/org/apache/ftpserver/command/PWD.class
dist/org/apache/ftpserver/command/QUIT.class
dist/org/apache/ftpserver/command/REIN.class
dist/org/apache/ftpserver/command/REST.class
dist/org/apache/ftpserver/command/RETR.class
dist/org/apache/ftpserver/command/RMD.class
dist/org/apache/ftpserver/command/RNFR.class
dist/org/apache/ftpserver/command/RNTO.class
dist/org/apache/ftpserver/command/SITE.class
dist/org/apache/ftpserver/command/SITE_DESCUSER.class
dist/org/apache/ftpserver/command/SITE_HELP.class
dist/org/apache/ftpserver/command/SITE_STAT.class
dist/org/apache/ftpserver/command/SITE_WHO.class
dist/org/apache/ftpserver/command/SITE_ZONE.class
dist/org/apache/ftpserver/command/SIZE.class
dist/org/apache/ftpserver/command/STAT.class
dist/org/apache/ftpserver/command/STOR.class
dist/org/apache/ftpserver/command/STOU.class
dist/org/apache/ftpserver/command/STRU.class
dist/org/apache/ftpserver/command/SYST.class
dist/org/apache/ftpserver/command/TYPE.class
dist/org/apache/ftpserver/command/USER.class
dist/org/apache/ftpserver/commandline/CommandLine$1.class
dist/org/apache/ftpserver/commandline/CommandLine.class
dist/org/apache/ftpserver/config/PropertiesConfiguration.class
dist/org/apache/ftpserver/config/XmlConfiguration.class
dist/org/apache/ftpserver/config/XmlConfigurationHandler.class
dist/org/apache/ftpserver/filesystem/NativeFileObject.class
dist/org/apache/ftpserver/filesystem/NativeFileSystemManager.class
dist/org/apache/ftpserver/filesystem/NativeFileSystemView.class
dist/org/apache/ftpserver/filesystem/OSVirtualFileObject.class
dist/org/apache/ftpserver/filesystem/OSVirualFileSystemManager.class
dist/org/apache/ftpserver/filesystem/OSVirualFileSystemView.class
dist/org/apache/ftpserver/ftplet/Component.class
dist/org/apache/ftpserver/ftplet/Configuration.class
dist/org/apache/ftpserver/ftplet/DataType.class
dist/org/apache/ftpserver/ftplet/DefaultFtplet.class
dist/org/apache/ftpserver/ftplet/EmptyConfiguration.class
dist/org/apache/ftpserver/ftplet/FileObject.class
dist/org/apache/ftpserver/ftplet/FileSystemManager.class
dist/org/apache/ftpserver/ftplet/FileSystemView.class
dist/org/apache/ftpserver/ftplet/FtpConfig.class
dist/org/apache/ftpserver/ftplet/FtpException.class
dist/org/apache/ftpserver/ftplet/FtpRequest.class
dist/org/apache/ftpserver/ftplet/FtpResponse.class
dist/org/apache/ftpserver/ftplet/FtpStatistics.class
dist/org/apache/ftpserver/ftplet/Ftplet.class
dist/org/apache/ftpserver/ftplet/FtpletEnum.class
dist/org/apache/ftpserver/ftplet/Structure.class
dist/org/apache/ftpserver/ftplet/User.class
dist/org/apache/ftpserver/ftplet/UserManager.class
dist/org/apache/ftpserver/gui/ConnectionPanel$1.class
dist/org/apache/ftpserver/gui/ConnectionPanel$2.class
dist/org/apache/ftpserver/gui/ConnectionPanel$3.class
dist/org/apache/ftpserver/gui/ConnectionPanel.class
dist/org/apache/ftpserver/gui/DirChooser$1.class
dist/org/apache/ftpserver/gui/DirChooser$2.class
dist/org/apache/ftpserver/gui/DirChooser$DirTreeCellRenderer.class
dist/org/apache/ftpserver/gui/DirChooser.class
dist/org/apache/ftpserver/gui/DirectoryPanel$1.class
dist/org/apache/ftpserver/gui/DirectoryPanel.class
dist/org/apache/ftpserver/gui/FilePanel$1.class
dist/org/apache/ftpserver/gui/FilePanel.class
dist/org/apache/ftpserver/gui/FtpConnectionTableModel$1.class
dist/org/apache/ftpserver/gui/FtpConnectionTableModel$2.class
dist/org/apache/ftpserver/gui/FtpConnectionTableModel$3.class
dist/org/apache/ftpserver/gui/FtpConnectionTableModel.class
dist/org/apache/ftpserver/gui/FtpDirectoryTableModel$TableEntry.class
dist/org/apache/ftpserver/gui/FtpDirectoryTableModel.class
dist/org/apache/ftpserver/gui/FtpFileTableModel$TableEntry.class
dist/org/apache/ftpserver/gui/FtpFileTableModel.class
dist/org/apache/ftpserver/gui/GuiUtils.class
dist/org/apache/ftpserver/gui/IPRestrictorPanel$1.class
dist/org/apache/ftpserver/gui/IPRestrictorPanel$2.class
dist/org/apache/ftpserver/gui/IPRestrictorPanel.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$1.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$2.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$3.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$4.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$5.class
dist/org/apache/ftpserver/gui/IPRestrictorTable$Entry.class
dist/org/apache/ftpserver/gui/IPRestrictorTable.class
dist/org/apache/ftpserver/gui/LICENSE.txt
dist/org/apache/ftpserver/gui/LoggerPanel$1.class
dist/org/apache/ftpserver/gui/LoggerPanel$2.class
dist/org/apache/ftpserver/gui/LoggerPanel$3.class
dist/org/apache/ftpserver/gui/LoggerPanel.class
dist/org/apache/ftpserver/gui/MessagePanel$1.class
dist/org/apache/ftpserver/gui/MessagePanel$2.class
dist/org/apache/ftpserver/gui/MessagePanel$3.class
dist/org/apache/ftpserver/gui/MessagePanel$4.class
dist/org/apache/ftpserver/gui/MessagePanel.class
dist/org/apache/ftpserver/gui/PluginPanel.class
dist/org/apache/ftpserver/gui/PluginPanelContainer.class
dist/org/apache/ftpserver/gui/RootPanel$1.class
dist/org/apache/ftpserver/gui/RootPanel$2.class
dist/org/apache/ftpserver/gui/RootPanel$3.class
dist/org/apache/ftpserver/gui/RootPanel$4.class
dist/org/apache/ftpserver/gui/RootPanel$5.class
dist/org/apache/ftpserver/gui/RootPanel$6.class
dist/org/apache/ftpserver/gui/RootPanel.class
dist/org/apache/ftpserver/gui/ServerFrame.class
dist/org/apache/ftpserver/gui/SpyPanel$1.class
dist/org/apache/ftpserver/gui/SpyPanel$2.class
dist/org/apache/ftpserver/gui/SpyPanel$3.class
dist/org/apache/ftpserver/gui/SpyPanel$4.class
dist/org/apache/ftpserver/gui/SpyPanel$5.class
dist/org/apache/ftpserver/gui/SpyPanel.class
dist/org/apache/ftpserver/gui/SpyPanelContainer.class
dist/org/apache/ftpserver/gui/StatisticsPanel$1.class
dist/org/apache/ftpserver/gui/StatisticsPanel$10.class
dist/org/apache/ftpserver/gui/StatisticsPanel$11.class
dist/org/apache/ftpserver/gui/StatisticsPanel$12.class
dist/org/apache/ftpserver/gui/StatisticsPanel$13.class
dist/org/apache/ftpserver/gui/StatisticsPanel$2.class
dist/org/apache/ftpserver/gui/StatisticsPanel$3.class
dist/org/apache/ftpserver/gui/StatisticsPanel$4.class
dist/org/apache/ftpserver/gui/StatisticsPanel$5.class
dist/org/apache/ftpserver/gui/StatisticsPanel$6.class
dist/org/apache/ftpserver/gui/StatisticsPanel$7.class
dist/org/apache/ftpserver/gui/StatisticsPanel$8.class
dist/org/apache/ftpserver/gui/StatisticsPanel$9.class
dist/org/apache/ftpserver/gui/StatisticsPanel.class
dist/org/apache/ftpserver/gui/TreePluginPanelContainer.class
dist/org/apache/ftpserver/gui/UserManagerPanel$1.class
dist/org/apache/ftpserver/gui/UserManagerPanel$2.class
dist/org/apache/ftpserver/gui/UserManagerPanel$3.class
dist/org/apache/ftpserver/gui/UserManagerPanel$4.class
dist/org/apache/ftpserver/gui/UserManagerPanel$5.class
dist/org/apache/ftpserver/gui/UserManagerPanel.class
dist/org/apache/ftpserver/gui/logo.gif
dist/org/apache/ftpserver/interfaces/ConnectionManagerObserver.class
dist/org/apache/ftpserver/interfaces/ConnectionObserver.class
dist/org/apache/ftpserver/interfaces/FileObserver.class
dist/org/apache/ftpserver/interfaces/ICommand.class
dist/org/apache/ftpserver/interfaces/ICommandFactory.class
dist/org/apache/ftpserver/interfaces/IConnection.class
dist/org/apache/ftpserver/interfaces/IConnectionManager.class
dist/org/apache/ftpserver/interfaces/IDataConnectionConfig.class
dist/org/apache/ftpserver/interfaces/IFtpConfig.class
dist/org/apache/ftpserver/interfaces/IFtpStatistics.class
dist/org/apache/ftpserver/interfaces/IIpRestrictor.class
dist/org/apache/ftpserver/interfaces/IMessageResource.class
dist/org/apache/ftpserver/interfaces/ISocketFactory.class
dist/org/apache/ftpserver/interfaces/ISsl.class
dist/org/apache/ftpserver/interfaces/StatisticsObserver.class
dist/org/apache/ftpserver/iprestrictor/FileIpRestrictor.class
dist/org/apache/ftpserver/message/FtpStatus.properties
dist/org/apache/ftpserver/message/FtpStatus_en.properties
dist/org/apache/ftpserver/message/FtpStatus_zh-tw.properties
dist/org/apache/ftpserver/message/MessageResourceImpl$PropertiesPair.class
dist/org/apache/ftpserver/message/MessageResourceImpl.class
dist/org/apache/ftpserver/socketfactory/FtpSocketFactory.class
dist/org/apache/ftpserver/socketfactory/SSLFtpSocketFactory.class
dist/org/apache/ftpserver/ssl/Ssl.class
dist/org/apache/ftpserver/usermanager/BaseUser.class
dist/org/apache/ftpserver/usermanager/DbUserManager.class
dist/org/apache/ftpserver/usermanager/LdapUserManager.class
dist/org/apache/ftpserver/usermanager/PropertiesUserManager.class
dist/org/apache/ftpserver/util/BaseProperties.class
dist/org/apache/ftpserver/util/DateUtils.class
dist/org/apache/ftpserver/util/EncryptUtils.class
dist/org/apache/ftpserver/util/FileRegularFilter.class
dist/org/apache/ftpserver/util/IoUtils.class
dist/org/apache/ftpserver/util/RegularExpr.class
dist/org/apache/ftpserver/util/StringUtils.class
dist/repdev-icons/Layered/large-file-add.pdn
dist/repdev-icons/Layered/large-file-remove.pdn
dist/repdev-icons/Layered/large-print-lpt.pdn
dist/repdev-icons/Layered/large-print-tpt.pdn
dist/repdev-icons/Layered/large-project-add.pdn
dist/repdev-icons/Layered/large-project-remove.pdn
dist/repdev-icons/Layered/large-sym-add.pdn
dist/repdev-icons/Layered/large-sym-remove.pdn
dist/repdev-icons/Layered/small-file-add.pdn
dist/repdev-icons/Layered/small-file-remove.pdn
dist/repdev-icons/Layered/small-project-add.pdn
dist/repdev-icons/Layered/small-project-remove.pdn
dist/repdev-icons/Layered/small-sym-add.pdn
dist/repdev-icons/Layered/small-sym-remove.pdn
dist/repdev-icons/large-action-save.png
dist/repdev-icons/large-add.png
dist/repdev-icons/large-file-add.png
dist/repdev-icons/large-file-remove.png
dist/repdev-icons/large-print-local.png
dist/repdev-icons/large-print-lpt.png
dist/repdev-icons/large-print-tpt.png
dist/repdev-icons/large-project-add.png
dist/repdev-icons/large-project-remove.png
dist/repdev-icons/large-remove.png
dist/repdev-icons/large-run.png
dist/repdev-icons/large-sym-add.png
dist/repdev-icons/large-sym-remove.png
dist/repdev-icons/small-action-save.png
dist/repdev-icons/small-add.png
dist/repdev-icons/small-copy.png
dist/repdev-icons/small-cut.png
dist/repdev-icons/small-db-field.png
dist/repdev-icons/small-db-record.png
dist/repdev-icons/small-delete.png
dist/repdev-icons/small-errors.png
dist/repdev-icons/small-exit.png
dist/repdev-icons/small-file-add.png
dist/repdev-icons/small-file-new.png
dist/repdev-icons/small-file-open.png
dist/repdev-icons/small-file-remove.png
dist/repdev-icons/small-file.png
dist/repdev-icons/small-find-replace.png
dist/repdev-icons/small-find.png
dist/repdev-icons/small-import.png
dist/repdev-icons/small-indent-less.png
dist/repdev-icons/small-indent-more.png
dist/repdev-icons/small-options.png
dist/repdev-icons/small-paste.png
dist/repdev-icons/small-project-add.png
dist/repdev-icons/small-project-remove.png
dist/repdev-icons/small-project.png
dist/repdev-icons/small-project.remove.png
dist/repdev-icons/small-redo.png
dist/repdev-icons/small-remove.png
dist/repdev-icons/small-repgen.png
dist/repdev-icons/small-run-fm.png
dist/repdev-icons/small-run.png
dist/repdev-icons/small-select-all.png
dist/repdev-icons/small-sym-add.png
dist/repdev-icons/small-sym-remove.png
dist/repdev-icons/small-sym.png
dist/repdev-icons/small-tasks.png
dist/repdev-icons/small-undo.png
dist/repdev-icons/small-variable.png
dist/res/user.gen
dist/start.bat
dist/swt-lin/libcairo-swt.so
dist/swt-lin/libswt-atk-gtk-3232.so
dist/swt-lin/libswt-awt-gtk-3232.so
dist/swt-lin/libswt-cairo-gtk-3232.so
dist/swt-lin/libswt-glx-gtk-3232.so
dist/swt-lin/libswt-gnome-gtk-3232.so
dist/swt-lin/libswt-gtk-3232.so
dist/swt-lin/libswt-mozilla-gcc3-gtk-3232.so
dist/swt-lin/libswt-mozilla-gtk-3232.so
dist/swt-lin/libswt-pi-gtk-3232.so
dist/swt-lin/src.zip
dist/swt-lin/swt.jar
dist/swt-win/src.zip
dist/swt-win/swt-awt-win32-3236.dll
dist/swt-win/swt-gdip-win32-3236.dll
dist/swt-win/swt-wgl-win32-3236.dll
dist/swt-win/swt-win32-3236.dll
dist/swt-win/swt.jar
dist/vars.txt
functions.txt
keywords.txt
repdev-icons/Layered/large-file-add.pdn
repdev-icons/Layered/large-file-remove.pdn
repdev-icons/Layered/large-print-lpt.pdn
repdev-icons/Layered/large-print-tpt.pdn
repdev-icons/Layered/large-project-add.pdn
repdev-icons/Layered/large-project-remove.pdn
repdev-icons/Layered/large-sym-add.pdn
repdev-icons/Layered/large-sym-remove.pdn
repdev-icons/Layered/small-file-add.pdn
repdev-icons/Layered/small-file-remove.pdn
repdev-icons/Layered/small-project-add.pdn
repdev-icons/Layered/small-project-remove.pdn
repdev-icons/Layered/small-sym-add.pdn
repdev-icons/Layered/small-sym-remove.pdn
repdev-icons/large-action-save.png
repdev-icons/large-add.png
repdev-icons/large-file-add.png
repdev-icons/large-file-remove.png
repdev-icons/large-print-local.png
repdev-icons/large-print-lpt.png
repdev-icons/large-print-tpt.png
repdev-icons/large-project-add.png
repdev-icons/large-project-remove.png
repdev-icons/large-remove.png
repdev-icons/large-run.png
repdev-icons/large-sym-add.png
repdev-icons/large-sym-remove.png
repdev-icons/small-action-save.png
repdev-icons/small-add.png
repdev-icons/small-copy.png
repdev-icons/small-cut.png
repdev-icons/small-db-field.png
repdev-icons/small-db-record.png
repdev-icons/small-delete.png
repdev-icons/small-errors.png
repdev-icons/small-exit.png
repdev-icons/small-file-add.png
repdev-icons/small-file-new.png
repdev-icons/small-file-open.png
repdev-icons/small-file-remove.png
repdev-icons/small-file.png
repdev-icons/small-find-replace.png
repdev-icons/small-find.png
repdev-icons/small-import.png
repdev-icons/small-indent-less.png
repdev-icons/small-indent-more.png
repdev-icons/small-options.png
repdev-icons/small-paste.png
repdev-icons/small-project-add.png
repdev-icons/small-project-remove.png
repdev-icons/small-project.png
repdev-icons/small-project.remove.png
repdev-icons/small-redo.png
repdev-icons/small-remove.png
repdev-icons/small-repgen.png
repdev-icons/small-run-fm.png
repdev-icons/small-run.png
repdev-icons/small-select-all.png
repdev-icons/small-sym-add.png
repdev-icons/small-sym-remove.png
repdev-icons/small-sym.png
repdev-icons/small-tasks.png
repdev-icons/small-undo.png
repdev-icons/small-variable.png
start.bat
swt-lin/libcairo-swt.so
swt-lin/libswt-atk-gtk-3232.so
swt-lin/libswt-awt-gtk-3232.so
swt-lin/libswt-cairo-gtk-3232.so
swt-lin/libswt-glx-gtk-3232.so
swt-lin/libswt-gnome-gtk-3232.so
swt-lin/libswt-gtk-3232.so
swt-lin/libswt-mozilla-gcc3-gtk-3232.so
swt-lin/libswt-mozilla-gtk-3232.so
swt-lin/libswt-pi-gtk-3232.so
swt-lin/src.zip
swt-lin/swt.jar
swt-win/src.zip
swt-win/swt-awt-win32-3236.dll
swt-win/swt-gdip-win32-3236.dll
swt-win/swt-wgl-win32-3236.dll
swt-win/swt-win32-3236.dll
swt-win/swt.jar
vars.txt
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/.classpath	Fri Jun 01 18:46:53 2007 +0000
     1.3 @@ -0,0 +1,11 @@
     1.4 +<?xml version="1.0" encoding="UTF-8"?>
     1.5 +<classpath>
     1.6 +	<classpathentry excluding="bin/|dist/|ftptemp/|res/|testdata/" path="" kind="src"/>
     1.7 +	<classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"/>
     1.8 +	<classpathentry sourcepath="swt-win/src.zip" path="swt-win/swt.jar" kind="lib">
     1.9 +		<attributes>
    1.10 +			<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="RepDev/swt-win"/>
    1.11 +		</attributes>
    1.12 +	</classpathentry>
    1.13 +	<classpathentry path="" kind="output"/>
    1.14 +</classpath>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/.project	Fri Jun 01 18:46:53 2007 +0000
     2.3 @@ -0,0 +1,19 @@
     2.4 +<?xml version="1.0" encoding="UTF-8"?>
     2.5 +<projectDescription>
     2.6 +	<name>RepDev</name>
     2.7 +	<comment></comment>
     2.8 +	<projects>
     2.9 +	</projects>
    2.10 +	<buildSpec>
    2.11 +		<buildCommand>
    2.12 +			<name>org.eclipse.jdt.core.javabuilder</name>
    2.13 +			<arguments>
    2.14 +			</arguments>
    2.15 +		</buildCommand>
    2.16 +	</buildSpec>
    2.17 +	<natures>
    2.18 +		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    2.19 +		<nature>org.eclipse.jdt.core.javanature</nature>
    2.20 +		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
    2.21 +	</natures>
    2.22 +</projectDescription>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/.settings/org.eclipse.jdt.core.prefs	Fri Jun 01 18:46:53 2007 +0000
     3.3 @@ -0,0 +1,7 @@
     3.4 +#Sat Jul 29 16:22:50 EDT 2006
     3.5 +eclipse.preferences.version=1
     3.6 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
     3.7 +org.eclipse.jdt.core.compiler.compliance=1.5
     3.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
     3.9 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
    3.10 +org.eclipse.jdt.core.compiler.source=1.5
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/build.xml	Fri Jun 01 18:46:53 2007 +0000
     4.3 @@ -0,0 +1,49 @@
     4.4 +<project name="RepDev" default="dist" basedir=".">
     4.5 +	<description>
     4.6 +        Creates a /bin directory that other people can checkout just for testing purposes
     4.7 +    </description>
     4.8 +	<!-- set global properties for this build -->
     4.9 +	<property name="src" location="./" />
    4.10 +	<property name="build" location="bin" />
    4.11 +	<property name="dist" location="dist" />
    4.12 +
    4.13 +	<target name="init">
    4.14 +		<!-- Create the time stamp -->
    4.15 +		<tstamp />
    4.16 +		<!-- Create the build directory structure used by compile -->
    4.17 +		<mkdir dir="${build}" />
    4.18 +	</target>
    4.19 +
    4.20 +
    4.21 +	<target name="compile" depends="init" description="compile the source ">
    4.22 +		<!-- Compile the java code from ${src} into ${build} -->
    4.23 +		<javac srcdir="${src}" destdir="${build}" />
    4.24 +	</target>
    4.25 +	
    4.26 +	<target name="dist" description="generate the distribution">
    4.27 +		<!-- Create the distribution directory -->
    4.28 +		<mkdir dir="${dist}" />
    4.29 +
    4.30 +		<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
    4.31 +		<!-- <jar jarfile="${dist}/RepDev-${DSTAMP}.jar" basedir="${build}"/> -->
    4.32 +
    4.33 +		<copy todir="${dist}" overwrite="true">
    4.34 +			<fileset dir="${src}">
    4.35 +				<exclude name="**/*.java" />
    4.36 +				<exclude name="**/bin/**" />
    4.37 +				<exclude name="**/dist/**" />
    4.38 +			</fileset>
    4.39 +		</copy>
    4.40 +		
    4.41 +		<delete dir="${build}" />
    4.42 +		<delete dir="${dist}/bin" />
    4.43 +		<delete dir="${dist}/dist" />
    4.44 +				
    4.45 +	</target>
    4.46 +
    4.47 +	<target name="clean" description="clean up">
    4.48 +		<!-- Delete the ${build} and ${dist} directory trees -->
    4.49 +		<delete dir="${build}" />
    4.50 +		<delete dir="${dist}" />
    4.51 +	</target>
    4.52 +</project>
    4.53 \ No newline at end of file
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/com/repdev/Config.java	Fri Jun 01 18:46:53 2007 +0000
     5.3 @@ -0,0 +1,65 @@
     5.4 +package com.repdev;
     5.5 +
     5.6 +import java.io.*;
     5.7 +import java.util.*;
     5.8 +
     5.9 +public class Config implements Serializable {
    5.10 +	private static Config me = new Config();
    5.11 +	private static final long serialVersionUID = 1L;
    5.12 +	private ArrayList<Integer> syms = new ArrayList<Integer>();
    5.13 +	private String server = "127.0.0.1";
    5.14 +	private int tabSize = 0; // 0 = Regular tab
    5.15 +	private String lastUsername = "", lastPassword = "";
    5.16 +
    5.17 +	private Config() {
    5.18 +	}
    5.19 +
    5.20 +	public static void setSyms(ArrayList<Integer> syms) {
    5.21 +		me.syms = syms;
    5.22 +	}
    5.23 +
    5.24 +	public static ArrayList<Integer> getSyms() {
    5.25 +		return me.syms;
    5.26 +	}
    5.27 +
    5.28 +	public static Config getConfig() {
    5.29 +		return me;
    5.30 +	}
    5.31 +
    5.32 +	public static String getLastPassword() {
    5.33 +		return me.lastPassword;
    5.34 +	}
    5.35 +
    5.36 +	public static void setLastPassword(String lastPassword) {
    5.37 +		me.lastPassword = lastPassword;
    5.38 +	}
    5.39 +
    5.40 +	public static String getLastUsername(){
    5.41 +		return me.lastUsername;
    5.42 +	}
    5.43 +
    5.44 +	public static void setLastUsername(String lastUsername) {
    5.45 +		me.lastUsername = lastUsername;
    5.46 +	}
    5.47 +
    5.48 +	public static void setConfig(Config config) {
    5.49 +		me = config;
    5.50 +	}
    5.51 +
    5.52 +	public static void setServer(String server) {
    5.53 +		me.server = server;
    5.54 +	}
    5.55 +
    5.56 +	public static String getServer() {
    5.57 +		return me.server;
    5.58 +	}
    5.59 +
    5.60 +	public static void setTabSize(int tabSize) {
    5.61 +		me.tabSize = tabSize;
    5.62 +	}
    5.63 +
    5.64 +	public static int getTabSize() {
    5.65 +		return me.tabSize;
    5.66 +	}
    5.67 +
    5.68 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/com/repdev/DatabaseLayout.java	Fri Jun 01 18:46:53 2007 +0000
     6.3 @@ -0,0 +1,290 @@
     6.4 +package com.repdev;
     6.5 +
     6.6 +import java.io.BufferedReader;
     6.7 +import java.io.FileReader;
     6.8 +import java.io.IOException;
     6.9 +import java.util.*;
    6.10 +import java.util.regex.*;
    6.11 +
    6.12 +public class DatabaseLayout {
    6.13 +
    6.14 +	private ArrayList<Record> tree = new ArrayList<Record>(); // Main DB from
    6.15 +																// file
    6.16 +	private ArrayList<Record> flat = new ArrayList<Record>(); // Cached after
    6.17 +																// loading from
    6.18 +																// file
    6.19 +
    6.20 +	// Cached after loading to compare easily to tokens in the syntax
    6.21 +	private HashSet<String> lowerCaseRecordNames = new HashSet<String>();
    6.22 +	private HashSet<String> lowerCaseFieldNames = new HashSet<String>();
    6.23 +
    6.24 +	public enum DataType {
    6.25 +		CHARACTER(0), DATE(3), NUMBER(4), MONEY(7), RATE(2), CODE(5);
    6.26 +
    6.27 +		public int code;
    6.28 +
    6.29 +		DataType(int myCode) {
    6.30 +			code = myCode;
    6.31 +		}
    6.32 +
    6.33 +	}
    6.34 +
    6.35 +	public class Record {
    6.36 +		private ArrayList<Record> subRecords = new ArrayList<Record>();
    6.37 +		private ArrayList<Field> fields = new ArrayList<Field>();
    6.38 +		private String description = "";
    6.39 +		private String name = "";
    6.40 +		private Record root;
    6.41 +
    6.42 +		public Record(String name, String desc, Record root) {
    6.43 +			this.description = desc;
    6.44 +			this.name = name;
    6.45 +			this.root = root;
    6.46 +		}
    6.47 +
    6.48 +		public void setSubRecords(ArrayList<Record> subRecords) {
    6.49 +			this.subRecords = subRecords;
    6.50 +		}
    6.51 +
    6.52 +		public ArrayList<Record> getSubRecords() {
    6.53 +			return subRecords;
    6.54 +		}
    6.55 +
    6.56 +		public void setFields(ArrayList<Field> fields) {
    6.57 +			this.fields = fields;
    6.58 +		}
    6.59 +
    6.60 +		public ArrayList<Field> getFields() {
    6.61 +			return fields;
    6.62 +		}
    6.63 +
    6.64 +		public void setDescription(String description) {
    6.65 +			this.description = description;
    6.66 +		}
    6.67 +
    6.68 +		public String getDescription() {
    6.69 +			return description;
    6.70 +		}
    6.71 +
    6.72 +		public void setName(String name) {
    6.73 +			this.name = name;
    6.74 +		}
    6.75 +
    6.76 +		public String getName() {
    6.77 +			return name;
    6.78 +		}
    6.79 +
    6.80 +		public String toString() {
    6.81 +			return "Record: " + name;
    6.82 +		}
    6.83 +
    6.84 +		public void setRoot(Record root) {
    6.85 +			this.root = root;
    6.86 +		}
    6.87 +
    6.88 +		public Record getRoot() {
    6.89 +			return root;
    6.90 +		}
    6.91 +
    6.92 +	}
    6.93 +
    6.94 +	public class Field implements Comparable {
    6.95 +		private String name = "", description = "";
    6.96 +		private int fieldNumber;
    6.97 +		private DataType dataType;
    6.98 +		private int len;
    6.99 +
   6.100 +		public Field(String name, String description, int fieldNumber, DataType dataType, int len) {
   6.101 +			super();
   6.102 +			this.name = name;
   6.103 +			this.description = description;
   6.104 +			this.fieldNumber = fieldNumber;
   6.105 +			this.dataType = dataType;
   6.106 +			this.len = len;
   6.107 +		}
   6.108 +
   6.109 +		public int compareTo(Object o) {
   6.110 +			if (o instanceof Field)
   6.111 +				return name.compareToIgnoreCase(((Field) o).getName());
   6.112 +			else
   6.113 +				return -1;
   6.114 +		}
   6.115 +
   6.116 +		public void setName(String name) {
   6.117 +			this.name = name;
   6.118 +		}
   6.119 +
   6.120 +		public String getName() {
   6.121 +			return name;
   6.122 +		}
   6.123 +
   6.124 +		public void setDescription(String description) {
   6.125 +			this.description = description;
   6.126 +		}
   6.127 +
   6.128 +		public String getDescription() {
   6.129 +			return description;
   6.130 +		}
   6.131 +
   6.132 +		public DataType getDataType() {
   6.133 +			return dataType;
   6.134 +		}
   6.135 +
   6.136 +		public void setDataType(DataType dataType) {
   6.137 +			this.dataType = dataType;
   6.138 +		}
   6.139 +
   6.140 +		public int getFieldNumber() {
   6.141 +			return fieldNumber;
   6.142 +		}
   6.143 +
   6.144 +		public void setFieldNumber(int fieldNumber) {
   6.145 +			this.fieldNumber = fieldNumber;
   6.146 +		}
   6.147 +
   6.148 +		public String toString() {
   6.149 +			return "Field: " + name;
   6.150 +		}
   6.151 +
   6.152 +		public void setLen(int len) {
   6.153 +			this.len = len;
   6.154 +		}
   6.155 +
   6.156 +		public int getLen() {
   6.157 +			return len;
   6.158 +		}
   6.159 +	}
   6.160 +
   6.161 +	private DatabaseLayout() {
   6.162 +		Pattern recPattern, fieldPattern;
   6.163 +		Matcher recMatcher, fieldMatcher;
   6.164 +		Record currentRecord = null, rootRecord = null;
   6.165 +		int depth = 0, lastDepth = 0;
   6.166 +
   6.167 +		recPattern = Pattern.compile("(.*)\\*\\*\\*\\|(.*)\\|(.*)");
   6.168 +		fieldPattern = Pattern.compile("([\\s]*)([a-zA-Z0-9:]*)\\|(.*)\\|(.*)\\|(.*)\\|(.*)");
   6.169 +
   6.170 +		try {
   6.171 +			BufferedReader br = new BufferedReader(new FileReader("db.txt"));
   6.172 +			String line;
   6.173 +
   6.174 +			while ((line = br.readLine()) != null) {
   6.175 +
   6.176 +				if (line.contains("***")) {
   6.177 +					recMatcher = recPattern.matcher(line);
   6.178 +					recMatcher.matches();
   6.179 +
   6.180 +					depth = recMatcher.group(1).length();
   6.181 +
   6.182 +					if (depth > lastDepth)
   6.183 +						rootRecord = currentRecord;
   6.184 +					else if (depth < lastDepth) {
   6.185 +						for (int i = depth; i < lastDepth; i++) {
   6.186 +							rootRecord = rootRecord.getRoot();
   6.187 +						}
   6.188 +					}
   6.189 +
   6.190 +					// System.out.println("On Record: " + recMatcher.group(2) +
   6.191 +					// " Root: " + rootRecord + " depth: " + depth + " last
   6.192 +					// Depth: " + lastDepth);
   6.193 +
   6.194 +					currentRecord = new Record(recMatcher.group(2), recMatcher.group(3), rootRecord);
   6.195 +
   6.196 +					if (depth == 0)
   6.197 +						tree.add(currentRecord);
   6.198 +					else
   6.199 +						rootRecord.getSubRecords().add(currentRecord);
   6.200 +
   6.201 +					lastDepth = depth;
   6.202 +				} else {
   6.203 +					fieldMatcher = fieldPattern.matcher(line);
   6.204 +					fieldMatcher.matches();
   6.205 +
   6.206 +					DataType curType = null;
   6.207 +					int len, type;
   6.208 +
   6.209 +					type = Integer.parseInt(fieldMatcher.group(5));
   6.210 +
   6.211 +					for (DataType cur : DataType.values())
   6.212 +						if (cur.code == type) {
   6.213 +							curType = cur;
   6.214 +							break;
   6.215 +						}
   6.216 +
   6.217 +					if (!fieldMatcher.group(6).equals("null"))
   6.218 +						len = Integer.parseInt(fieldMatcher.group(6));
   6.219 +					else
   6.220 +						len = -1;
   6.221 +
   6.222 +					currentRecord.getFields().add(new Field(fieldMatcher.group(2), fieldMatcher.group(3), Integer.parseInt(fieldMatcher.group(4)), curType, len));
   6.223 +				}
   6.224 +			}
   6.225 +
   6.226 +			// Build caches, this speeds things up a whole ton
   6.227 +			flat = getFlatRecordsWorker(tree);
   6.228 +
   6.229 +			for (Record cur : flat) {
   6.230 +				lowerCaseRecordNames.add(cur.getName().toLowerCase());
   6.231 +
   6.232 +				for (Field fCur : cur.getFields())
   6.233 +					lowerCaseFieldNames.add(fCur.getName().toLowerCase());
   6.234 +			}
   6.235 +
   6.236 +			System.out.println("Loaded DB Layout");
   6.237 +
   6.238 +			br.close();
   6.239 +		} catch (IOException e) {
   6.240 +		}
   6.241 +	}
   6.242 +
   6.243 +	private ArrayList<Record> getFlatRecordsWorker(ArrayList<Record> list) {
   6.244 +		ArrayList<Record> toRet = new ArrayList<Record>();
   6.245 +
   6.246 +		for (Record rec : list) {
   6.247 +			toRet.add(rec);
   6.248 +			toRet.addAll(getFlatRecordsWorker(rec.getSubRecords()));
   6.249 +		}
   6.250 +
   6.251 +		return toRet;
   6.252 +	}
   6.253 +
   6.254 +	public ArrayList<Record> getFlatRecords() {
   6.255 +		return flat;
   6.256 +	}
   6.257 +
   6.258 +	/**
   6.259 +	 * Case insensitive search for any record name
   6.260 +	 * 
   6.261 +	 * @param name
   6.262 +	 * @return
   6.263 +	 */
   6.264 +	public boolean containsRecordName(String name) {
   6.265 +		name = name.toLowerCase();
   6.266 +
   6.267 +		return lowerCaseRecordNames.contains(name);
   6.268 +	}
   6.269 +
   6.270 +	/**
   6.271 +	 * Case insensitve search for any record name
   6.272 +	 * 
   6.273 +	 * @param name
   6.274 +	 * @return
   6.275 +	 */
   6.276 +	public boolean containsFieldName(String name) {
   6.277 +		name = name.toLowerCase();
   6.278 +
   6.279 +		return lowerCaseFieldNames.contains(name);
   6.280 +	}
   6.281 +
   6.282 +	private static class SingletonHolder {
   6.283 +		private static DatabaseLayout instance = new DatabaseLayout();
   6.284 +	}
   6.285 +
   6.286 +	public static DatabaseLayout getInstance() {
   6.287 +		return SingletonHolder.instance;
   6.288 +	}
   6.289 +
   6.290 +	public ArrayList<Record> getTreeRecords() {
   6.291 +		return tree;
   6.292 +	}
   6.293 +}
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/com/repdev/DirectSymitarSession.java	Fri Jun 01 18:46:53 2007 +0000
     7.3 @@ -0,0 +1,598 @@
     7.4 +package com.repdev;
     7.5 +
     7.6 +import java.text.DecimalFormat;
     7.7 +import java.util.ArrayList;
     7.8 +import java.util.HashMap;
     7.9 +import java.util.regex.Matcher;
    7.10 +import java.util.regex.Pattern;
    7.11 +import java.io.BufferedReader;
    7.12 +import java.io.IOException;
    7.13 +import java.io.InputStreamReader;
    7.14 +import java.io.PrintWriter;
    7.15 +import java.net.*;
    7.16 +
    7.17 +public class DirectSymitarSession extends SymitarSession {
    7.18 +	Socket socket;
    7.19 +	BufferedReader in;
    7.20 +	PrintWriter out;
    7.21 +	boolean connected = false;
    7.22 +
    7.23 +	@Override
    7.24 +	public int acceptRepGenQuery(String value) {
    7.25 +		// TODO Auto-generated method stub
    7.26 +		return 0;
    7.27 +	}
    7.28 +
    7.29 +	private String log(String str) {
    7.30 +		System.out.println(str);
    7.31 +		return str;
    7.32 +	}
    7.33 +
    7.34 +	@Override
    7.35 +	public SessionError connect(String server, String aixUsername, String aixPassword, int sym, String userID) {
    7.36 +		String line = "";
    7.37 +
    7.38 +		this.server = server;
    7.39 +		this.aixUsername = aixUsername;
    7.40 +		this.aixPassword = aixPassword;
    7.41 +		this.userID = userID;
    7.42 +
    7.43 +		try {
    7.44 +			socket = new Socket(server, 23);
    7.45 +			socket.setKeepAlive(true);
    7.46 +
    7.47 +			// Constant commands, these are the basic telnet establishment
    7.48 +			// stuffs, which really don't change, so I just send them directly
    7.49 +			char init1[] = { 0xff, 0xfb, 0x18 };
    7.50 +			char init2[] = { 0xff, 0xfa, 0x18, 0x00, 0x61, 0x69, 0x78, 0x74, 0x65, 0x72, 0x6d, 0xff, 0xf0 };
    7.51 +			char init3[] = { 0xff, 0xfd, 0x01 };
    7.52 +			char init4[] = { 0xff, 0xfd, 0x03, 0xff, 0xfc, 0x1f, 0xff, 0xfc, 0x01 };
    7.53 +
    7.54 +			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    7.55 +			out = new PrintWriter(socket.getOutputStream());
    7.56 +
    7.57 +			out.print(init1);
    7.58 +			out.print(init2);
    7.59 +			out.print(init3);
    7.60 +			out.print(init4);
    7.61 +			out.print(aixUsername + "\r");
    7.62 +			out.flush();
    7.63 +
    7.64 +			log(readUntil("Password:"));
    7.65 +
    7.66 +			line = writeLog(aixPassword + "\r", "[c", ":");
    7.67 +
    7.68 +			if (line.indexOf("invalid login") != -1)
    7.69 +				return SessionError.AIX_LOGIN_WRONG;
    7.70 +
    7.71 +			writeLog("WINDOWSLEVEL=3\n", "$ ");
    7.72 +			write("sym " + sym + "\r");
    7.73 +
    7.74 +			Command current;
    7.75 +
    7.76 +			while (!(current = readNextCommand()).getCommand().equals("Input"))
    7.77 +				;
    7.78 +
    7.79 +			log(current.toString());
    7.80 +
    7.81 +			write(userID + "\r");
    7.82 +
    7.83 +			current = readNextCommand();
    7.84 +			log(current.getCommand());
    7.85 +
    7.86 +			if (current.getCommand().equals("SymLogonInvalidUser"))
    7.87 +				return SessionError.USERID_INVALID;
    7.88 +			
    7.89 +			write("\r");
    7.90 +			log(readNextCommand().toString());
    7.91 +			
    7.92 +			write("\r");
    7.93 +			log(readNextCommand().toString());
    7.94 +			
    7.95 +			connected = true;
    7.96 +			log("Connected to Symitar!");
    7.97 +		} catch (UnknownHostException e) {
    7.98 +			e.printStackTrace();
    7.99 +			return SessionError.SERVER_NOT_FOUND;
   7.100 +		} catch (IOException e) {
   7.101 +			e.printStackTrace();
   7.102 +			return SessionError.IO_ERROR;
   7.103 +		}
   7.104 +
   7.105 +		return SessionError.NONE;
   7.106 +	}
   7.107 +
   7.108 +	private static class Command {
   7.109 +		String command = "";
   7.110 +		HashMap<String, String> parameters = new HashMap<String, String>();
   7.111 +		String data = "";
   7.112 +		static Pattern commandPattern = Pattern.compile("(.*?)~.*");
   7.113 +		static int currentMessageId = 10000;
   7.114 +
   7.115 +		public Command(String command) {
   7.116 +			parameters.put("MsgId", String.valueOf(currentMessageId));
   7.117 +			currentMessageId++;
   7.118 +
   7.119 +			this.command = command;
   7.120 +		}
   7.121 +
   7.122 +		public Command(String command, HashMap<String, String> parameters, String data) {
   7.123 +			super();
   7.124 +			this.command = command;
   7.125 +			this.parameters = parameters;
   7.126 +			this.data = data;
   7.127 +
   7.128 +			parameters.put("MsgId", String.valueOf(currentMessageId));
   7.129 +			currentMessageId++;
   7.130 +		}
   7.131 +
   7.132 +		public Command() {
   7.133 +			parameters.put("MsgId", String.valueOf(currentMessageId));
   7.134 +			currentMessageId++;
   7.135 +		}
   7.136 +
   7.137 +		// Returns string containing any file data sent in this message
   7.138 +		public String getFileData() {
   7.139 +			return data.substring(data.indexOf(Character.toString((char) 253)) + 1, data.indexOf(Character.toString((char) 254)));
   7.140 +		}
   7.141 +
   7.142 +		public String sendStr() {
   7.143 +			String data = "";
   7.144 +			data += command + "~";
   7.145 +
   7.146 +			for (String key : parameters.keySet())
   7.147 +				if (parameters.get(key).equals(""))
   7.148 +					data += key + "~";
   7.149 +				else
   7.150 +					data += key + "=" + parameters.get(key) + "~";
   7.151 +
   7.152 +			data = data.substring(0, data.length() - 1);
   7.153 +
   7.154 +			return Character.toString((char) 0x07) + data.length() + "\r" + data;
   7.155 +		}
   7.156 +
   7.157 +		public static Command parse(String data) {
   7.158 +			String[] sep;
   7.159 +
   7.160 +			Command command = new Command();
   7.161 +			command.setData(data);
   7.162 +
   7.163 +			if (data.indexOf("~") != -1 && data.indexOf(253) == -1) {
   7.164 +				Matcher match;
   7.165 +				match = commandPattern.matcher(data);
   7.166 +				match.matches();
   7.167 +
   7.168 +				command.setCommand(match.group(1));
   7.169 +				sep = data.substring(match.group(1).length() + 1).split("~");
   7.170 +
   7.171 +				for (String cur : sep) {
   7.172 +					if (cur.indexOf("=") == -1)
   7.173 +						command.getParameters().put(cur, "");
   7.174 +					else
   7.175 +						command.getParameters().put(cur.substring(0, cur.indexOf("=")), cur.substring(cur.indexOf("=") + 1));
   7.176 +				}
   7.177 +			} else
   7.178 +				command.setCommand(data);
   7.179 +
   7.180 +			return command;
   7.181 +		}
   7.182 +
   7.183 +		public String toString() {
   7.184 +			return data;
   7.185 +		}
   7.186 +
   7.187 +		public String getCommand() {
   7.188 +			return command;
   7.189 +		}
   7.190 +
   7.191 +		public void setCommand(String command) {
   7.192 +			this.command = command;
   7.193 +		}
   7.194 +
   7.195 +		public String getData() {
   7.196 +			return data;
   7.197 +		}
   7.198 +
   7.199 +		public void setData(String data) {
   7.200 +			this.data = data;
   7.201 +		}
   7.202 +
   7.203 +		public HashMap<String, String> getParameters() {
   7.204 +			return parameters;
   7.205 +		}
   7.206 +
   7.207 +		public void setParameters(HashMap<String, String> parameters) {
   7.208 +			this.parameters = parameters;
   7.209 +		}
   7.210 +	}
   7.211 +
   7.212 +	private void write(String str) {
   7.213 +		out.write(str);
   7.214 +		out.flush();
   7.215 +	}
   7.216 +
   7.217 +	private void write(Command cmd) {
   7.218 +		write(cmd.sendStr());
   7.219 +	}
   7.220 +
   7.221 +	private String writeLog(String command, String... waitFor) throws IOException {
   7.222 +		write(command);
   7.223 +		return log(readUntil(waitFor));
   7.224 +	}
   7.225 +
   7.226 +	private Command readNextCommand() throws IOException {
   7.227 +		readUntil(Character.toString((char) 0x1b) + Character.toString((char) 0xfe));
   7.228 +		String data = readUntil(Character.toString((char) 0xfc));
   7.229 +
   7.230 +		return Command.parse(data.substring(0, data.length() - 1));
   7.231 +	}
   7.232 +
   7.233 +	private String readUntil(String... strs) throws IOException {
   7.234 +		String buf = "";
   7.235 +
   7.236 +		while (true) {
   7.237 +			int cur = in.read();
   7.238 +			buf += (char) cur;
   7.239 +			for (String str : strs)
   7.240 +				if (buf.indexOf(str) != -1)
   7.241 +					return buf;
   7.242 +		}
   7.243 +	}
   7.244 +
   7.245 +	@Override
   7.246 +	public SessionError disconnect() {
   7.247 +		if (!connected)
   7.248 +			return SessionError.NOT_CONNECTED;
   7.249 +
   7.250 +		try {
   7.251 +			in.close();
   7.252 +			out.close();
   7.253 +			socket.close();
   7.254 +		} catch (Exception e) {
   7.255 +			return SessionError.IO_ERROR;
   7.256 +		}
   7.257 +
   7.258 +		return null;
   7.259 +	}
   7.260 +
   7.261 +	@Override
   7.262 +	public synchronized ErrorCheckResult errorCheckRepGen(String filename) {
   7.263 +		Command cur;
   7.264 +		String error = "";
   7.265 +		int line = -1, column = -1;
   7.266 +		
   7.267 +		try{
   7.268 +
   7.269 +			write("mm3" + (char)27); //Managment menu #3- repgen, of course!!
   7.270 +			
   7.271 +			log(readNextCommand().toString());
   7.272 +
   7.273 +			write("7\r");
   7.274 +			log(readNextCommand().toString());
   7.275 +			log(readNextCommand().toString());
   7.276 +			
   7.277 +			write(filename+"\r");
   7.278 +			
   7.279 +			cur = readNextCommand();
   7.280 +			log(cur.toString());
   7.281 +			
   7.282 +			if( cur.getParameters().get("Warning") != null || cur.getParameters().get("Error") != null){
   7.283 +				readNextCommand();
   7.284 +				return new ErrorCheckResult("File does not exist on server!",-1,-1,ErrorCheckResult.Type.ERROR);
   7.285 +			}
   7.286 +			
   7.287 +			if( cur.getParameters().get("Action").equals("NoError") ){
   7.288 +				readNextCommand();
   7.289 +				return new ErrorCheckResult("",-1,-1,ErrorCheckResult.Type.NO_ERROR);
   7.290 +			}
   7.291 +			
   7.292 +			if( cur.getParameters().get("Action").equals("Init")){
   7.293 +			  	while( !(cur=readNextCommand()).getParameters().get("Action").equals("DisplayEdit")){
   7.294 +			  		if( cur.getParameters().get("Action").equals("FileInfo") )
   7.295 +			  		{
   7.296 +			  			line = Integer.parseInt(cur.getParameters().get("Line").replace(",", ""));
   7.297 +			  			column = Integer.parseInt(cur.getParameters().get("Col").replace(",", ""));
   7.298 +			  		}
   7.299 +			  		else if( cur.getParameters().get("Action").equals("ErrText") )
   7.300 +			  			error += cur.getParameters().get("Line") + "\n";
   7.301 +			  		
   7.302 +			  		log(cur.toString());
   7.303 +			  	}
   7.304 +			  	
   7.305 +			  	readNextCommand();
   7.306 +			  	
   7.307 +			  	return new ErrorCheckResult(error.trim(),line,column,ErrorCheckResult.Type.ERROR);  		  	
   7.308 +			}
   7.309 +		
   7.310 +		}
   7.311 +		catch(IOException e)
   7.312 +		{
   7.313 +			return null;
   7.314 +		}
   7.315 +		
   7.316 +		return null;
   7.317 +	}
   7.318 +
   7.319 +	@Override
   7.320 +	public int getBatchOutputSequenceNumber() {
   7.321 +		// TODO Auto-generated method stub
   7.322 +		return 0;
   7.323 +	}
   7.324 +
   7.325 +	@Override
   7.326 +	public synchronized String getFile(SymitarFile file) {
   7.327 +		StringBuilder data = new StringBuilder();
   7.328 +
   7.329 +		Command current;
   7.330 +		Command retrieve = new Command();
   7.331 +		retrieve.setCommand("File");
   7.332 +		retrieve.getParameters().put("Action", "Retrieve");
   7.333 +
   7.334 +		if (file.getType() == FileType.REPGEN)
   7.335 +			retrieve.getParameters().put("Type", "RepWriter");
   7.336 +		else if (file.getType() == FileType.HELP)
   7.337 +			retrieve.getParameters().put("Type", "Help");
   7.338 +		else if (file.getType() == FileType.LETTER)
   7.339 +			retrieve.getParameters().put("Type", "Letter");
   7.340 +
   7.341 +		retrieve.getParameters().put("Name", file.getName());
   7.342 +
   7.343 +		write(retrieve);
   7.344 +
   7.345 +		try {
   7.346 +			while (true) {
   7.347 +				current = readNextCommand();
   7.348 +
   7.349 +				if (current.getParameters().get("Status") != null)
   7.350 +					return null;
   7.351 +
   7.352 +				if (current.getParameters().get("Done") != null)
   7.353 +					return data.toString();
   7.354 +
   7.355 +				data.append(current.getFileData());
   7.356 +			}
   7.357 +		} catch (IOException e) {
   7.358 +			return null;
   7.359 +		}
   7.360 +
   7.361 +	}
   7.362 +
   7.363 +	@Override
   7.364 +	public synchronized ArrayList<SymitarFile> getFileList(FileType type, String search) {
   7.365 +		ArrayList<SymitarFile> toRet = new ArrayList<SymitarFile>();
   7.366 +		Command current;
   7.367 +
   7.368 +		Command list = new Command("File");
   7.369 +
   7.370 +		if (type == FileType.REPGEN)
   7.371 +			list.getParameters().put("Type", "RepWriter");
   7.372 +		else if (type == FileType.HELP)
   7.373 +			list.getParameters().put("Type", "Help");
   7.374 +		else if (type == FileType.LETTER)
   7.375 +			list.getParameters().put("Type", "Letter");
   7.376 +
   7.377 +		list.getParameters().put("Name", search);
   7.378 +		list.getParameters().put("Action", "List");
   7.379 +
   7.380 +		write(list);
   7.381 +
   7.382 +		while (true) {
   7.383 +			try {
   7.384 +				current = readNextCommand();
   7.385 +			} catch (IOException e) {
   7.386 +				e.printStackTrace();
   7.387 +				return null;
   7.388 +			}
   7.389 +
   7.390 +			log(current.toString());
   7.391 +
   7.392 +			if (current.getParameters().get("Status") != null)
   7.393 +				break;
   7.394 +
   7.395 +			if( current.getParameters().get("Name") != null)
   7.396 +				toRet.add(new SymitarFile(current.getParameters().get("Name"), type));
   7.397 +			
   7.398 +			if(current.getParameters().get("Done") != null)
   7.399 +				break;
   7.400 +		}
   7.401 +
   7.402 +		return toRet;
   7.403 +	}
   7.404 +
   7.405 +	@Override
   7.406 +	public String getRepGenQuery() {
   7.407 +		// TODO Auto-generated method stub
   7.408 +		return null;
   7.409 +	}
   7.410 +
   7.411 +	@Override
   7.412 +	public int getRepgenQueue() {
   7.413 +		// TODO Auto-generated method stub
   7.414 +		return 0;
   7.415 +	}
   7.416 +
   7.417 +	@Override
   7.418 +	public ArrayList<Integer> getSequenceNumbers() {
   7.419 +		// TODO Auto-generated method stub
   7.420 +		return null;
   7.421 +	}
   7.422 +
   7.423 +	@Override
   7.424 +	public boolean isConnected() {
   7.425 +		return connected;
   7.426 +	}
   7.427 +
   7.428 +	@Override
   7.429 +	public SessionError printFileLPT(SymitarFile file, boolean formsOverride, int formLength, int startPage, int endPage, int copies, boolean landscape, boolean duplex, int queuePriority) {
   7.430 +		// TODO Auto-generated method stub
   7.431 +		return null;
   7.432 +	}
   7.433 +
   7.434 +	@Override
   7.435 +	public SessionError printFileTPT(SymitarFile file, int queue) {
   7.436 +		// TODO Auto-generated method stub
   7.437 +		return null;
   7.438 +	}
   7.439 +
   7.440 +	@Override
   7.441 +	public SessionError removeFile(SymitarFile file) {
   7.442 +		// TODO Auto-generated method stub
   7.443 +		return null;
   7.444 +	}
   7.445 +
   7.446 +	@Override
   7.447 +	public SessionError runBatchFM(String title) {
   7.448 +		// TODO Auto-generated method stub
   7.449 +		return null;
   7.450 +	}
   7.451 +
   7.452 +	@Override
   7.453 +	public void runRepGen(String name) {
   7.454 +		// TODO Auto-generated method stub
   7.455 +
   7.456 +	}
   7.457 +
   7.458 +	@Override
   7.459 +	public void runRepGen(String name, int queue) {
   7.460 +		// TODO Auto-generated method stub
   7.461 +
   7.462 +	}
   7.463 +
   7.464 +	@Override
   7.465 +	public synchronized SessionError saveFile(SymitarFile file, String text) {
   7.466 +		int partSize = 3996;
   7.467 +		int curPart = 0;
   7.468 +		DecimalFormat f3 = new DecimalFormat("000");
   7.469 +		DecimalFormat f5 = new DecimalFormat("00000");
   7.470 +		char[] buf = new char[16];
   7.471 +		String pad20 = "";
   7.472 +
   7.473 +		if (!connected)
   7.474 +			return SessionError.NOT_CONNECTED;
   7.475 +
   7.476 +		for (int i = 0; i < 6; i++)
   7.477 +			pad20 += Character.toString((char) 0x20);
   7.478 +
   7.479 +		Command store = new Command();
   7.480 +		store.setCommand("File");
   7.481 +		store.getParameters().put("Action", "Store");
   7.482 +
   7.483 +		Command unpause = new Command();
   7.484 +		unpause.setCommand("WakeUp");
   7.485 +
   7.486 +		Command current;
   7.487 +
   7.488 +		if (file.getType() == FileType.REPGEN)
   7.489 +			store.getParameters().put("Type", "RepWriter");
   7.490 +		else if (file.getType() == FileType.HELP)
   7.491 +			store.getParameters().put("Type", "Help");
   7.492 +		else if (file.getType() == FileType.LETTER)
   7.493 +			store.getParameters().put("Type", "Letter");
   7.494 +
   7.495 +		store.getParameters().put("Name", file.getName());
   7.496 +
   7.497 +		write(store);
   7.498 +
   7.499 +		try {
   7.500 +			current = readNextCommand();
   7.501 +
   7.502 +			String[] badList = current.getParameters().get("BadCharList").split(",");
   7.503 +
   7.504 +			for (String cur : badList) {
   7.505 +				text = text.replaceAll(Character.toString((char) Integer.parseInt(cur)), "");
   7.506 +			}
   7.507 +
   7.508 +			String toSend = "";
   7.509 +			do {
   7.510 +				do {
   7.511 +					toSend = text.substring(0, Math.min(text.length(), partSize));
   7.512 +					write("PROT" + f3.format(curPart) + "DATA" + f5.format(toSend.length()));
   7.513 +					write(toSend);
   7.514 +					in.read(buf, 0, 16);
   7.515 +				} while (buf[7] == 'N'); // Resend if we get a NAK message
   7.516 +
   7.517 +				curPart++;
   7.518 +				text = text.substring(toSend.length());
   7.519 +			} while (text.length() > 0);
   7.520 +
   7.521 +			write("PROT" + f3.format(curPart) + "EOF" + pad20);
   7.522 +			in.read(buf, 0, 16);
   7.523 +
   7.524 +			current = readNextCommand();
   7.525 +			write(unpause);
   7.526 +		} catch (IOException e) {
   7.527 +			return SessionError.IO_ERROR;
   7.528 +		}
   7.529 +		return SessionError.NONE;
   7.530 +	}
   7.531 +
   7.532 +	@Override
   7.533 +	public void waitOnChange() {
   7.534 +		// TODO Auto-generated method stub
   7.535 +
   7.536 +	}
   7.537 +
   7.538 +	@Override
   7.539 +	public synchronized ErrorCheckResult installRepgen(String filename) {
   7.540 +		Command cur;
   7.541 +		String error = "";
   7.542 +		int line = -1, column = -1;
   7.543 +		
   7.544 +		try{
   7.545 +
   7.546 +			write("mm3" + (char)27); //Managment menu #3- repgen, of course!!
   7.547 +			
   7.548 +			log(readNextCommand().toString());
   7.549 +
   7.550 +			write("8\r");
   7.551 +			log(readNextCommand().toString());
   7.552 +			log(readNextCommand().toString());
   7.553 +			
   7.554 +			write(filename+"\r");
   7.555 +			
   7.556 +			cur = readNextCommand();
   7.557 +			log(cur.toString());
   7.558 +			
   7.559 +			if( cur.getParameters().get("Warning") != null || cur.getParameters().get("Error") != null){
   7.560 +				readNextCommand();
   7.561 +				return new ErrorCheckResult("File does not exist on server!",-1,-1,ErrorCheckResult.Type.ERROR);
   7.562 +			}
   7.563 +			
   7.564 +			if( cur.getCommand().equals("SpecfileData") ){
   7.565 +				readNextCommand();
   7.566 +				write("1\r");
   7.567 +				
   7.568 +				readNextCommand();
   7.569 +				readNextCommand();
   7.570 +				return new ErrorCheckResult("",Integer.parseInt(cur.getParameters().get("Size").replace(",", "")),ErrorCheckResult.Type.INSTALLED_SUCCESSFULLY);
   7.571 +				
   7.572 +			}
   7.573 +			
   7.574 +			if( cur.getParameters().get("Action").equals("Init")){
   7.575 +			  	while( !(cur=readNextCommand()).getParameters().get("Action").equals("DisplayEdit")){
   7.576 +			  		if( cur.getParameters().get("Action").equals("FileInfo") )
   7.577 +			  		{
   7.578 +			  			line = Integer.parseInt(cur.getParameters().get("Line").replace(",", ""));
   7.579 +			  			column = Integer.parseInt(cur.getParameters().get("Col").replace(",", ""));
   7.580 +			  		}
   7.581 +			  		else if( cur.getParameters().get("Action").equals("ErrText") )
   7.582 +			  			error += cur.getParameters().get("Line") + "\n";
   7.583 +			  		
   7.584 +			  		log(cur.toString());
   7.585 +			  	}
   7.586 +			  	
   7.587 +			  	readNextCommand();
   7.588 +			  	
   7.589 +			  	return new ErrorCheckResult(error.trim(),line,column,ErrorCheckResult.Type.ERROR);  		  	
   7.590 +			}
   7.591 +		
   7.592 +		}
   7.593 +		catch(IOException e)
   7.594 +		{
   7.595 +			return null;
   7.596 +		}
   7.597 +		
   7.598 +		return null;
   7.599 +	}
   7.600 +
   7.601 +}
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/com/repdev/EditorComposite.java	Fri Jun 01 18:46:53 2007 +0000
     8.3 @@ -0,0 +1,653 @@
     8.4 +package com.repdev;
     8.5 +
     8.6 +import java.util.LinkedList;
     8.7 +import java.util.Stack;
     8.8 +
     8.9 +import org.eclipse.swt.*;
    8.10 +import org.eclipse.swt.custom.*;
    8.11 +import org.eclipse.swt.events.*;
    8.12 +import org.eclipse.swt.graphics.Color;
    8.13 +import org.eclipse.swt.graphics.Point;
    8.14 +import org.eclipse.swt.layout.*;
    8.15 +import org.eclipse.swt.widgets.*;
    8.16 +
    8.17 +public class EditorComposite extends Composite {
    8.18 +	private SymitarFile file;
    8.19 +	private int sym;
    8.20 +	private Color lineBackgroundColor = new Color(Display.getCurrent(), 232, 242, 254);
    8.21 +	private ToolBar bar;
    8.22 +	private ToolItem save;
    8.23 +	private ToolItem install;
    8.24 +	private StyledText txt;
    8.25 +
    8.26 +	private static final int UNDO_LIMIT = 500;
    8.27 +	private Stack<TextChange> undos = new Stack<TextChange>();
    8.28 +	private Stack<TextChange> redos = new Stack<TextChange>();
    8.29 +
    8.30 +	// 1 = Regular
    8.31 +	// 2 = Undoing, so save as redos
    8.32 +	// 0 = Ignore all
    8.33 +	private int undoMode = 0;
    8.34 +
    8.35 +	private int lastLine = 0;
    8.36 +	private SyntaxHighlighter highlighter;
    8.37 +	private RepgenParser parser;
    8.38 +	private boolean modified = false;
    8.39 +	
    8.40 +	static SuggestShell suggest = new SuggestShell();
    8.41 +
    8.42 +	class TextChange {
    8.43 +		private int start, length, topIndex;
    8.44 +		private String replacedText;
    8.45 +		private boolean commit;
    8.46 +
    8.47 +		public TextChange(boolean commit) {
    8.48 +			this.commit = true;
    8.49 +		}
    8.50 +
    8.51 +		public TextChange(int start, int length, String replacedText, int topIndex) {
    8.52 +			this.start = start;
    8.53 +			this.length = length;
    8.54 +			this.replacedText = replacedText;
    8.55 +			this.topIndex = topIndex;
    8.56 +			this.commit = false;
    8.57 +		}
    8.58 +
    8.59 +		public int getTopIndex(){
    8.60 +			return topIndex;
    8.61 +		}
    8.62 +		
    8.63 +		public boolean isCommit() {
    8.64 +			return commit;
    8.65 +		}
    8.66 +
    8.67 +		public int getStart() {
    8.68 +			return start;
    8.69 +		}
    8.70 +
    8.71 +		public int getLength() {
    8.72 +			return length;
    8.73 +		}
    8.74 +
    8.75 +		public String getReplacedText() {
    8.76 +			return replacedText;
    8.77 +		}
    8.78 +	}
    8.79 +
    8.80 +	public EditorComposite(Composite parent, SymitarFile file, int sym) {
    8.81 +		super(parent, SWT.NONE);
    8.82 +		this.file = file;
    8.83 +		this.sym = sym;
    8.84 +
    8.85 +		buildGUI();
    8.86 +	}
    8.87 +	
    8.88 +	public boolean canUndo(){
    8.89 +		return undos.size() > 0;
    8.90 +	}
    8.91 +	
    8.92 +	public boolean canRedo(){
    8.93 +		return redos.size() > 0;	
    8.94 +	}
    8.95 +
    8.96 +	public void undo() {
    8.97 +		try {
    8.98 +			TextChange change;
    8.99 +
   8.100 +			if (!undos.empty()) {
   8.101 +				if (undos.peek().isCommit() == true)
   8.102 +					undos.pop();
   8.103 +
   8.104 +				undoMode = 2;
   8.105 +				txt.setRedraw(false);
   8.106 +				if( parser != null)
   8.107 +					parser.setReparse(false);
   8.108 +				
   8.109 +				while (!(undos.size() == 0 || (change = undos.pop()).isCommit())) {
   8.110 +					txt.replaceTextRange(change.getStart(), change.getLength(), change.getReplacedText());
   8.111 +					txt.setCaretOffset(change.getStart());
   8.112 +					txt.setTopIndex(change.getTopIndex());
   8.113 +				
   8.114 +				}
   8.115 +
   8.116 +				redos.push(new TextChange(true));
   8.117 +
   8.118 +			}
   8.119 +		} catch (Exception e) {
   8.120 +			MessageBox dialog = new MessageBox(this.getShell(), SWT.ICON_ERROR | SWT.OK);
   8.121 +			dialog.setMessage("The Undo Manager has failed! Email Jake!");
   8.122 +			dialog.setText("ERROR!");
   8.123 +			dialog.open();
   8.124 +
   8.125 +			e.printStackTrace();
   8.126 +		}
   8.127 +		finally{
   8.128 +			undoMode = 1;
   8.129 +			txt.setRedraw(true);
   8.130 +			if( parser != null){
   8.131 +				parser.setReparse(true);
   8.132 +				parser.reparseAll();
   8.133 +			}
   8.134 +			
   8.135 +			lineHighlight();
   8.136 +		}
   8.137 +	}
   8.138 +
   8.139 +	public void redo() {
   8.140 +		try {
   8.141 +			TextChange change;
   8.142 +
   8.143 +			if (!redos.empty()) {
   8.144 +				if (redos.peek().isCommit() == true)
   8.145 +					redos.pop();
   8.146 +
   8.147 +				undoMode = 1;
   8.148 +				txt.setRedraw(false);
   8.149 +				
   8.150 +				if( parser != null)
   8.151 +					parser.setReparse(false);
   8.152 +
   8.153 +				while (!(redos.size() == 0 || (change = redos.pop()).isCommit())) {
   8.154 +					txt.replaceTextRange(change.getStart(), change.getLength(), change.getReplacedText());
   8.155 +					txt.setCaretOffset(change.getStart());
   8.156 +					txt.setTopIndex(change.getTopIndex());
   8.157 +				}
   8.158 +
   8.159 +			}
   8.160 +		} catch (Exception e) {
   8.161 +			MessageBox dialog = new MessageBox(this.getShell(), SWT.ICON_ERROR | SWT.OK);
   8.162 +			dialog.setMessage("The Undo Manager has failed! Email Jake!");
   8.163 +			dialog.setText("ERROR!");
   8.164 +			dialog.open();
   8.165 +
   8.166 +			e.printStackTrace();
   8.167 +		}
   8.168 +		finally{
   8.169 +			undoMode = 1;
   8.170 +			txt.setRedraw(true);
   8.171 +			if( parser != null){
   8.172 +				parser.setReparse(true);
   8.173 +				parser.reparseAll();
   8.174 +			}
   8.175 +			
   8.176 +			lineHighlight();
   8.177 +		}
   8.178 +	}
   8.179 +
   8.180 +	public void commitUndo() {
   8.181 +		if (undos.size() == 0 || !undos.peek().isCommit())
   8.182 +			undos.add(new TextChange(true));
   8.183 +	}
   8.184 +
   8.185 +	private void lineHighlight() {
   8.186 +		try {
   8.187 +			int start, end, currentLine;
   8.188 +
   8.189 +			txt.setLineBackground(0, txt.getLineCount(), txt.getBackground());
   8.190 +
   8.191 +			currentLine = txt.getLineAtOffset(txt.getCaretOffset());
   8.192 +
   8.193 +			if (txt.getSelectionText().indexOf("\n") == -1)
   8.194 +				txt.setLineBackground(currentLine, 1, lineBackgroundColor);
   8.195 +
   8.196 +			if( lastLine <= txt.getLineCount() -1 )
   8.197 +				start = txt.getOffsetAtLine(lastLine);
   8.198 +			else
   8.199 +				start = txt.getOffsetAtLine(txt.getLineCount()-1);
   8.200 +			
   8.201 +			end = txt.getOffsetAtLine(Math.min(txt.getLineCount() - 1, lastLine + 1));
   8.202 +
   8.203 +			if (lastLine + 1 == txt.getLineCount())
   8.204 +				txt.redraw();
   8.205 +			else
   8.206 +				txt.redrawRange(start, end - start, true);
   8.207 +
   8.208 +			start = txt.getOffsetAtLine(currentLine);
   8.209 +			end = txt.getOffsetAtLine(Math.min(txt.getLineCount() - 1, currentLine + 1));
   8.210 +
   8.211 +			if (currentLine + 1 == txt.getLineCount())
   8.212 +				txt.redraw();
   8.213 +			else
   8.214 +				txt.redrawRange(start, end - start, true);
   8.215 +
   8.216 +		} catch (Exception e) {
   8.217 +			System.err.println("Line Highlighter failed!!");
   8.218 +			e.printStackTrace();
   8.219 +		} finally {
   8.220 +			lastLine = txt.getLineAtOffset(txt.getCaretOffset());
   8.221 +		}
   8.222 +	}
   8.223 +
   8.224 +	private void groupIndent(int direction, int startLine, int endLine) {
   8.225 +		String tabStr = getTabStr();
   8.226 +
   8.227 +		if (endLine >= txt.getLineCount() - 1)
   8.228 +			endLine = Math.max(txt.getLineCount() - 2, startLine + 1);
   8.229 +
   8.230 +		try {
   8.231 +			Point oldSelection = txt.getSelection();
   8.232 +			int offset = 0;
   8.233 +
   8.234 +			if( parser != null)
   8.235 +				parser.setReparse(false);
   8.236 +
   8.237 +			if (direction < 0) {
   8.238 +				for (int i = startLine; i <= endLine; i++) {
   8.239 +					int startOffset = txt.getOffsetAtLine(i);
   8.240 +					int endOffset = txt.getOffsetAtLine(i + 1);
   8.241 +
   8.242 +					String line = txt.getText(startOffset, endOffset - 1);
   8.243 +
   8.244 +					for (int x = 0; x < Math.min(tabStr.length(), line.length()); x++)
   8.245 +						if (line.charAt(x) > 32)
   8.246 +							return;
   8.247 +				}
   8.248 +			}
   8.249 +			txt.setRedraw(false);
   8.250 +
   8.251 +			for (int i = startLine; i <= endLine; i++) {
   8.252 +				int startOffset = txt.getOffsetAtLine(i);
   8.253 +				int endOffset = txt.getOffsetAtLine(i + 1);
   8.254 +
   8.255 +				String line = txt.getText(startOffset, endOffset - 1);
   8.256 +
   8.257 +				if (direction > 0)
   8.258 +					txt.replaceTextRange(startOffset, endOffset - startOffset, tabStr + line);
   8.259 +				else {
   8.260 +					txt.replaceTextRange(startOffset, endOffset - startOffset, line.substring(Math.min(tabStr.length(), line.length())));
   8.261 +				}
   8.262 +
   8.263 +				offset += tabStr.length() * direction;
   8.264 +
   8.265 +			}
   8.266 +
   8.267 +			if( parser != null)
   8.268 +				parser.setReparse(true);
   8.269 +
   8.270 +			oldSelection.y += offset;
   8.271 +			oldSelection.x += tabStr.length() * direction;
   8.272 +
   8.273 +			// TODO: This fails if you are right inbetween a /r
   8.274 +			// and /n, better fix it ;)
   8.275 +			
   8.276 +			txt.setSelection(oldSelection);
   8.277 +
   8.278 +		} catch (Exception ex) {
   8.279 +			ex.printStackTrace();
   8.280 +		} finally {
   8.281 +			txt.setRedraw(true);
   8.282 +			if( parser != null){
   8.283 +				parser.setReparse(true);
   8.284 +				parser.reparseAll();
   8.285 +			}
   8.286 +		}
   8.287 +
   8.288 +	}
   8.289 +
   8.290 +	private String getTabStr() {
   8.291 +		String tabStr = "";
   8.292 +
   8.293 +		if (Config.getTabSize() == 0)
   8.294 +			tabStr = "\t";
   8.295 +		else
   8.296 +			for (int i = 0; i < Config.getTabSize(); i++)
   8.297 +				tabStr += " ";
   8.298 +
   8.299 +		return tabStr;
   8.300 +	}
   8.301 +	
   8.302 +	public StyledText getStyledText(){
   8.303 +		return txt;
   8.304 +	}
   8.305 +
   8.306 +	private void buildGUI() {
   8.307 +		setLayout(new FormLayout());
   8.308 +
   8.309 +		bar = new ToolBar(this, SWT.HORIZONTAL | SWT.WRAP);
   8.310 +		save = new ToolItem(bar, SWT.NONE);
   8.311 +		save.setImage(RepDevMain.smallActionSaveImage);
   8.312 +		save.setToolTipText("Saves the current file.");
   8.313 +
   8.314 +		install = new ToolItem(bar, SWT.NONE);
   8.315 +		install.setImage(RepDevMain.smallSymAddImage);
   8.316 +		install.setToolTipText("Installs current file for onDemand use.");
   8.317 +
   8.318 +		txt = new StyledText(this, SWT.H_SCROLL | SWT.V_SCROLL);
   8.319 +
   8.320 +		if (file.getType() == FileType.REPGEN){
   8.321 +			parser = new RepgenParser(txt, file, sym);
   8.322 +			highlighter = new SyntaxHighlighter(parser);
   8.323 +		}
   8.324 +		
   8.325 +		txt.addFocusListener(new FocusListener(){
   8.326 +
   8.327 +			public void focusGained(FocusEvent e) {
   8.328 +				suggest.attach(txt, parser);
   8.329 +			}
   8.330 +
   8.331 +			public void focusLost(FocusEvent e) {
   8.332 +				// TODO Auto-generated method stub
   8.333 +				
   8.334 +			}
   8.335 +			
   8.336 +		});
   8.337 +
   8.338 +		suggest.attach(txt, parser);
   8.339 +
   8.340 +		txt.addTraverseListener(new TraverseListener() {
   8.341 +
   8.342 +			public void keyTraversed(TraverseEvent e) {
   8.343 +				if (e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
   8.344 +					Event ev = new Event();
   8.345 +					ev.stateMask = SWT.SHIFT;
   8.346 +					ev.text = "\t";
   8.347 +					ev.start = txt.getSelection().x;
   8.348 +					ev.end = txt.getSelection().y;
   8.349 +
   8.350 +					txt.notifyListeners(SWT.Verify, ev);
   8.351 +
   8.352 +					e.detail = SWT.TRANSPARENCY_NONE;
   8.353 +				}
   8.354 +			}
   8.355 +
   8.356 +		});
   8.357 +
   8.358 +		txt.addVerifyListener(new VerifyListener() {
   8.359 +			public void verifyText(VerifyEvent e) {
   8.360 +				if (e.text.equals("\t")) {
   8.361 +
   8.362 +					int direction = (e.stateMask == SWT.SHIFT) ? -1 : 1;
   8.363 +
   8.364 +					if (txt.getSelectionCount() > 1) {
   8.365 +						e.doit = false;
   8.366 +
   8.367 +						int startLine = txt.getLineAtOffset(e.start);
   8.368 +						int endLine = txt.getLineAtOffset(e.end);
   8.369 +
   8.370 +						if (startLine == endLine) {
   8.371 +							e.doit = true;
   8.372 +							e.text = getTabStr();
   8.373 +							return;
   8.374 +						}
   8.375 +
   8.376 +						groupIndent(direction, startLine, endLine);
   8.377 +
   8.378 +					} else {
   8.379 +						e.doit = true;
   8.380 +						e.text = getTabStr();
   8.381 +
   8.382 +						return;
   8.383 +					}
   8.384 +				}
   8.385 +
   8.386 +				if (e.text.equals("\r\n")) {
   8.387 +					String indent = "";
   8.388 +					int posStart = txt.getOffsetAtLine(txt.getLineAtOffset(e.start));
   8.389 +					int posEnd = e.start;
   8.390 +					String lastLine = txt.getTextRange(posStart, posEnd - posStart);
   8.391 +
   8.392 +					for (int i = 0; i < lastLine.length(); i++)
   8.393 +						if (lastLine.charAt(i) != ' ' && lastLine.charAt(i) != '\t')
   8.394 +							break;
   8.395 +						else
   8.396 +							indent += lastLine.charAt(i);
   8.397 +
   8.398 +					e.text += indent;
   8.399 +
   8.400 +					lineHighlight();
   8.401 +					commitUndo();
   8.402 +				}
   8.403 +			}
   8.404 +		});
   8.405 +
   8.406 +		txt.addExtendedModifyListener(new ExtendedModifyListener() {
   8.407 +
   8.408 +			public void modifyText(ExtendedModifyEvent event) {
   8.409 +				lineHighlight();
   8.410 +				
   8.411 +				modified = true;
   8.412 +				updateModified();
   8.413 +
   8.414 +				Stack<TextChange> stack = null;
   8.415 +
   8.416 +				if (undoMode == 1)
   8.417 +					stack = undos;
   8.418 +				else if (undoMode == 2)
   8.419 +					stack = redos;
   8.420 +
   8.421 +				if (undoMode != 0) {
   8.422 +					stack.push(new TextChange(event.start, event.length, event.replacedText, txt.getTopIndex()));
   8.423 +
   8.424 +					if (stack.size() > UNDO_LIMIT)
   8.425 +						stack.remove(0);
   8.426 +				}
   8.427 +			}
   8.428 +
   8.429 +		});
   8.430 +
   8.431 +		txt.addKeyListener(new KeyAdapter() {
   8.432 +			public void keyPressed(KeyEvent e) {
   8.433 +				lineHighlight();
   8.434 +
   8.435 +				if (e.stateMask == SWT.CTRL) {
   8.436 +					switch (e.keyCode) {
   8.437 +					case 's':
   8.438 +					case 'S':
   8.439 +						save.notifyListeners(SWT.Selection, null);
   8.440 +						break;
   8.441 +					case 'z':
   8.442 +					case 'Z':
   8.443 +						undo();
   8.444 +						break;
   8.445 +					case 'y':
   8.446 +					case 'Y':
   8.447 +						redo();
   8.448 +						break;
   8.449 +					case 'a':
   8.450 +					case 'A':
   8.451 +						txt.selectAll();
   8.452 +						break;
   8.453 +					}
   8.454 +				}
   8.455 +
   8.456 +				if (e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT || e.keyCode == SWT.ARROW_UP)
   8.457 +					commitUndo();
   8.458 +
   8.459 +			}
   8.460 +
   8.461 +			public void keyReleased(KeyEvent e) {
   8.462 +
   8.463 +			}
   8.464 +		});
   8.465 +
   8.466 +		txt.addMouseListener(new MouseAdapter() {
   8.467 +			public void mouseDown(MouseEvent e) {
   8.468 +				lineHighlight();
   8.469 +
   8.470 +				commitUndo();
   8.471 +			}
   8.472 +
   8.473 +			public void mouseUp(MouseEvent e) {
   8.474 +				lineHighlight();
   8.475 +			}
   8.476 +
   8.477 +		});
   8.478 +
   8.479 +		txt.addSelectionListener(new SelectionAdapter() {
   8.480 +			public void widgetSelected(SelectionEvent e) {
   8.481 +				lineHighlight();
   8.482 +			}
   8.483 +		});
   8.484 +
   8.485 +		Menu contextMenu = new Menu(txt);
   8.486 +
   8.487 +		final MenuItem indentMore = new MenuItem(contextMenu, SWT.NONE);
   8.488 +		indentMore.setText("Increase Indentation");
   8.489 +		indentMore.setImage(RepDevMain.smallIndentMoreImage);
   8.490 +		indentMore.addSelectionListener(new SelectionAdapter() {
   8.491 +			public void widgetSelected(SelectionEvent e) {
   8.492 +				int startLine = txt.getLineAtOffset(txt.getSelection().x);
   8.493 +				int endLine = txt.getLineAtOffset(txt.getSelection().y);
   8.494 +
   8.495 +				groupIndent(1, startLine, endLine);
   8.496 +			}
   8.497 +		});
   8.498 +
   8.499 +		final MenuItem indentLess = new MenuItem(contextMenu, SWT.NONE);
   8.500 +		indentLess.setText("Decrease Indentation");
   8.501 +		indentLess.setImage(RepDevMain.smallIndentLessImage);
   8.502 +		indentLess.addSelectionListener(new SelectionAdapter() {
   8.503 +			public void widgetSelected(SelectionEvent e) {
   8.504 +				int startLine = txt.getLineAtOffset(txt.getSelection().x);
   8.505 +				int endLine = txt.getLineAtOffset(txt.getSelection().y);
   8.506 +
   8.507 +				groupIndent(-1, startLine, endLine);
   8.508 +			}
   8.509 +		});
   8.510 +		
   8.511 +		new MenuItem(contextMenu,SWT.SEPARATOR);
   8.512 +		
   8.513 +		final MenuItem editCut = new MenuItem(contextMenu,SWT.PUSH);
   8.514 +		editCut.setImage(RepDevMain.smallCutImage);
   8.515 +		editCut.setText("Cut\tCTRL+X");
   8.516 +		editCut.addSelectionListener(new SelectionAdapter() {
   8.517 +			public void widgetSelected(SelectionEvent arg0) {
   8.518 +				txt.cut();
   8.519 +			}
   8.520 +		});
   8.521 +		
   8.522 +		final MenuItem editCopy = new MenuItem(contextMenu,SWT.PUSH);
   8.523 +		editCopy.setImage(RepDevMain.smallCopyImage);
   8.524 +		editCopy.setText("Copy\tCTRL+C");
   8.525 +		editCopy.addSelectionListener(new SelectionAdapter() {
   8.526 +			public void widgetSelected(SelectionEvent arg0) {
   8.527 +				txt.copy();
   8.528 +			}
   8.529 +		});
   8.530 +		
   8.531 +		final MenuItem editPaste = new MenuItem(contextMenu,SWT.PUSH);
   8.532 +		editPaste.setImage(RepDevMain.smallPasteImage);
   8.533 +		editPaste.setText("Paste\tCTRL+V");
   8.534 +		editPaste.addSelectionListener(new SelectionAdapter() {
   8.535 +			public void widgetSelected(SelectionEvent arg0) {
   8.536 +				txt.paste();
   8.537 +			}
   8.538 +		});
   8.539 +		
   8.540 +
   8.541 +		contextMenu.addMenuListener(new MenuListener() {
   8.542 +
   8.543 +			public void menuHidden(MenuEvent e) {
   8.544 +				// TODO Auto-generated method stub
   8.545 +
   8.546 +			}
   8.547 +
   8.548 +			public void menuShown(MenuEvent e) {
   8.549 +				int startLine = txt.getLineAtOffset(txt.getSelection().x);
   8.550 +				int endLine = txt.getLineAtOffset(txt.getSelection().y);
   8.551 +
   8.552 +				if (startLine == endLine) {
   8.553 +					indentMore.setEnabled(false);
   8.554 +					indentLess.setEnabled(false);
   8.555 +				} else {
   8.556 +					indentMore.setEnabled(true);
   8.557 +					indentLess.setEnabled(true);
   8.558 +				}
   8.559 +			}
   8.560 +
   8.561 +		});
   8.562 +
   8.563 +		txt.setMenu(contextMenu);
   8.564 +
   8.565 +		String str = RepDevMain.SYMITAR_SESSIONS.get(sym).getFile(file);
   8.566 +		if (str == null)
   8.567 +			str = "";
   8.568 +		txt.setText(str);
   8.569 +
   8.570 +		suggest.close();
   8.571 +
   8.572 +		save.addSelectionListener(new SelectionAdapter() {
   8.573 +			public void widgetSelected(SelectionEvent e) {
   8.574 +				saveFile();
   8.575 +			}
   8.576 +		});
   8.577 +
   8.578 +		install.addSelectionListener(new SelectionAdapter() {
   8.579 +			public void widgetSelected(SelectionEvent e) {
   8.580 +				MessageBox dialog = new MessageBox(Display.getCurrent().getActiveShell(),SWT.YES | SWT.NO | SWT.ICON_QUESTION);
   8.581 +				MessageBox dialog2 = null;
   8.582 +				
   8.583 +				dialog.setText("Confirm Repgen Installation");
   8.584 +				dialog.setMessage("Are you sure you want to save this file and install this repgen?");
   8.585 +				
   8.586 +				if( dialog.open() == SWT.YES ){
   8.587 +					saveFile();
   8.588 +					ErrorCheckResult result = RepDevMain.SYMITAR_SESSIONS.get(sym).installRepgen(file.getName());
   8.589 +							
   8.590 +					dialog2 = new MessageBox(Display.getCurrent().getActiveShell(),SWT.OK | ( result.getType() == ErrorCheckResult.Type.INSTALLED_SUCCESSFULLY ? SWT.ICON_INFORMATION : SWT.ICON_ERROR ));
   8.591 +					dialog2.setText("Installation Result");
   8.592 +					
   8.593 +					if( result.getType() != ErrorCheckResult.Type.INSTALLED_SUCCESSFULLY )
   8.594 +						dialog2.setMessage("Error Installing Repgen: \n" + result.getErrorMessage());
   8.595 +					else
   8.596 +						dialog2.setMessage("Repgen Installed, Size: " + result.getInstallSize());
   8.597 +					
   8.598 +					dialog2.open();
   8.599 +				}
   8.600 +				
   8.601 +			}
   8.602 +		});
   8.603 +
   8.604 +		FormData frmBar = new FormData();
   8.605 +		frmBar.top = new FormAttachment(0);
   8.606 +		frmBar.left = new FormAttachment(0);
   8.607 +		frmBar.right = new FormAttachment(100);
   8.608 +		bar.setLayoutData(frmBar);
   8.609 +
   8.610 +		FormData frmTxt = new FormData();
   8.611 +		frmTxt.top = new FormAttachment(bar);
   8.612 +		frmTxt.left = new FormAttachment(0);
   8.613 +		frmTxt.right = new FormAttachment(100);
   8.614 +		frmTxt.bottom = new FormAttachment(100);
   8.615 +		txt.setLayoutData(frmTxt);
   8.616 +
   8.617 +		undoMode = 1;
   8.618 +		modified = false;
   8.619 +		updateModified();
   8.620 +	}
   8.621 +	
   8.622 +	public void saveFile(){
   8.623 +		RepDevMain.SYMITAR_SESSIONS.get(sym).saveFile(file, txt.getText());
   8.624 +		commitUndo();
   8.625 +		modified = false;
   8.626 +		updateModified();
   8.627 +		
   8.628 +		if( parser != null)
   8.629 +			parser.errorCheck();
   8.630 +		
   8.631 +		RepDevMain.mainShell.updateErrorList();
   8.632 +	}
   8.633 +	
   8.634 +	public void updateModified(){
   8.635 +		CTabFolder folder = (CTabFolder)getParent();
   8.636 +		
   8.637 +		for( CTabItem cur : folder.getItems())
   8.638 +			if( ((SymitarFile)cur.getData("file")).equals(file) && ((Integer)cur.getData("sym")) == sym  )
   8.639 +				if( modified && ( cur.getData("modified") == null || !((Boolean)cur.getData("modified")))){
   8.640 +					cur.setData("modified", true);
   8.641 +					cur.setText(cur.getText() + " *");
   8.642 +				}
   8.643 +				else if( !modified && ( cur.getData("modified") == null || ((Boolean)cur.getData("modified")))){
   8.644 +					cur.setData("modified", false);
   8.645 +					cur.setText(cur.getText().substring(0,cur.getText().length() - 2));
   8.646 +				}
   8.647 +	}
   8.648 +
   8.649 +	public RepgenParser getParser() {
   8.650 +		return parser;
   8.651 +	}
   8.652 +
   8.653 +	public void setParser(RepgenParser parser) {
   8.654 +		this.parser = parser;
   8.655 +	}
   8.656 +}
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/com/repdev/ErrorCheckResult.java	Fri Jun 01 18:46:53 2007 +0000
     9.3 @@ -0,0 +1,83 @@
     9.4 +package com.repdev;
     9.5 +
     9.6 +/**
     9.7 + * Result returned by SymitarSession after the server has error checked a spec
     9.8 + * file.
     9.9 + * 
    9.10 + * @author Administrator
    9.11 + * 
    9.12 + */
    9.13 +public class ErrorCheckResult {
    9.14 +	private String errorMessage;
    9.15 +	private int lineNumber;
    9.16 +	private int column;
    9.17 +	private Type type;
    9.18 +	private int installSize;
    9.19 +	
    9.20 +	public enum Type{
    9.21 +		ERROR,
    9.22 +		WARNING,
    9.23 +		NO_ERROR,
    9.24 +		INSTALLED_SUCCESSFULLY,
    9.25 +	}
    9.26 +
    9.27 +	public ErrorCheckResult() {
    9.28 +
    9.29 +	}
    9.30 +
    9.31 +	public ErrorCheckResult(String errorMessage, int lineNumber, int column, Type type) {
    9.32 +		this.errorMessage = errorMessage;
    9.33 +		this.lineNumber = lineNumber;
    9.34 +		this.column = column;
    9.35 +		this.type = type;
    9.36 +	}
    9.37 +	
    9.38 +	public ErrorCheckResult(String errorMessage, int installSize, Type type) {
    9.39 +		this.errorMessage = errorMessage;
    9.40 +		this.lineNumber = -1;
    9.41 +		this.column = -1;
    9.42 +		this.installSize = installSize;
    9.43 +		this.type = type;
    9.44 +	}
    9.45 +
    9.46 +
    9.47 +	public String getErrorMessage() {
    9.48 +		return errorMessage;
    9.49 +	}
    9.50 +
    9.51 +	public void setErrorMessage(String errorMessage) {
    9.52 +		this.errorMessage = errorMessage;
    9.53 +	}
    9.54 +
    9.55 +	public int getLineNumber() {
    9.56 +		return lineNumber;
    9.57 +	}
    9.58 +	
    9.59 +	public Type getType(){
    9.60 +		return type;
    9.61 +	}
    9.62 +	
    9.63 +	public void setType(Type newType){
    9.64 +		type=newType;
    9.65 +	}
    9.66 +
    9.67 +	public void setLineNumber(int lineNumber) {
    9.68 +		this.lineNumber = lineNumber;
    9.69 +	}
    9.70 +
    9.71 +	public void setColumn(int column) {
    9.72 +		this.column = column;
    9.73 +	}
    9.74 +
    9.75 +	public int getColumn() {
    9.76 +		return column;
    9.77 +	}
    9.78 +
    9.79 +	public void setInstallSize(int installSize) {
    9.80 +		this.installSize = installSize;
    9.81 +	}
    9.82 +
    9.83 +	public int getInstallSize() {
    9.84 +		return installSize;
    9.85 +	}
    9.86 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/com/repdev/FileDialog.java	Fri Jun 01 18:46:53 2007 +0000
    10.3 @@ -0,0 +1,279 @@
    10.4 +package com.repdev;
    10.5 +
    10.6 +import java.util.ArrayList;
    10.7 +
    10.8 +import org.eclipse.swt.SWT;
    10.9 +import org.eclipse.swt.events.ModifyEvent;
   10.10 +import org.eclipse.swt.events.ModifyListener;
   10.11 +import org.eclipse.swt.events.SelectionAdapter;
   10.12 +import org.eclipse.swt.events.SelectionEvent;
   10.13 +import org.eclipse.swt.layout.FormAttachment;
   10.14 +import org.eclipse.swt.layout.FormData;
   10.15 +import org.eclipse.swt.layout.FormLayout;
   10.16 +import org.eclipse.swt.widgets.Button;
   10.17 +import org.eclipse.swt.widgets.Combo;
   10.18 +import org.eclipse.swt.widgets.Control;
   10.19 +import org.eclipse.swt.widgets.Display;
   10.20 +import org.eclipse.swt.widgets.Label;
   10.21 +import org.eclipse.swt.widgets.MessageBox;
   10.22 +import org.eclipse.swt.widgets.Shell;
   10.23 +import org.eclipse.swt.widgets.Table;
   10.24 +import org.eclipse.swt.widgets.TableColumn;
   10.25 +import org.eclipse.swt.widgets.TableItem;
   10.26 +import org.eclipse.swt.widgets.Text;
   10.27 +
   10.28 +public class FileDialog {
   10.29 +	Shell shell, parent;
   10.30 +	Display display;
   10.31 +	Mode mode;
   10.32 +	int sym;
   10.33 +	ArrayList<SymitarFile> files = new ArrayList<SymitarFile>();
   10.34 +	Table table;
   10.35 +	Combo typeCombo;
   10.36 +	Text nameText;
   10.37 +	boolean listLoaded = false;
   10.38 +
   10.39 +	public enum Mode {
   10.40 +		SAVE, OPEN,
   10.41 +	}
   10.42 +
   10.43 +	public FileDialog(Shell parent, Mode mode, int sym) {
   10.44 +		this.parent = parent;
   10.45 +		this.mode = mode;
   10.46 +		this.sym = sym;
   10.47 +		this.display = parent.getDisplay();
   10.48 +	}
   10.49 +
   10.50 +	private void create() {
   10.51 +		FormLayout layout = new FormLayout();
   10.52 +		layout.marginTop = 5;
   10.53 +		layout.marginBottom = 5;
   10.54 +		layout.marginLeft = 5;
   10.55 +		layout.marginRight = 5;
   10.56 +		layout.spacing = 5;
   10.57 +
   10.58 +		FormData data;
   10.59 +
   10.60 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
   10.61 +		shell.setText((mode == Mode.OPEN ? "Open" : "Save") + " Symitar File" + (mode == Mode.OPEN ? "(s)" : ""));
   10.62 +		shell.setLayout(layout);
   10.63 +		shell.setMinimumSize(600, 350);
   10.64 +
   10.65 +		Label nameLabel = new Label(shell, SWT.NONE);
   10.66 +		nameLabel.setText("Filename:");
   10.67 +
   10.68 +		Label typeLabel = new Label(shell, SWT.NONE);
   10.69 +		typeLabel.setText("Type:");
   10.70 +
   10.71 +		typeCombo = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
   10.72 +
   10.73 +		for (FileType type : FileType.values())
   10.74 +			typeCombo.add(type.toString());
   10.75 +
   10.76 +		typeCombo.select(FileType.REPGEN.ordinal());
   10.77 +
   10.78 +		table = new Table(shell, (mode == Mode.OPEN ? SWT.MULTI : SWT.SINGLE) | SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION);
   10.79 +		table.setLinesVisible(false);
   10.80 +		table.setHeaderVisible(true);
   10.81 +
   10.82 +		table.addSelectionListener(new SelectionAdapter() {
   10.83 +			public void widgetDefaultSelected(SelectionEvent e) {
   10.84 +				if (table.getSelectionIndex() != -1) {
   10.85 +					if (mode == Mode.SAVE) {
   10.86 +						MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
   10.87 +						dialog.setText("Confirm Overwrite");
   10.88 +						dialog.setMessage("This file already exists, are you sure you want to overwrite it?");
   10.89 +
   10.90 +						if (dialog.open() == SWT.CANCEL)
   10.91 +							return;
   10.92 +					}
   10.93 +
   10.94 +					files.add((SymitarFile) (table.getSelection())[0].getData());
   10.95 +					shell.close();
   10.96 +				} else if (mode == Mode.SAVE) {
   10.97 +					files.add(new SymitarFile(nameText.getText().trim(), FileType.valueOf(typeCombo.getText())));
   10.98 +					shell.close();
   10.99 +				}
  10.100 +			}
  10.101 +		});
  10.102 +
  10.103 +		TableColumn nameCol = new TableColumn(table, SWT.NONE);
  10.104 +		nameCol.setText("Name");
  10.105 +		nameCol.setWidth(300);
  10.106 +
  10.107 +		TableColumn sizeCol = new TableColumn(table, SWT.NONE);
  10.108 +		sizeCol.setText("Size");
  10.109 +		sizeCol.setWidth(120);
  10.110 +
  10.111 +		TableColumn dateCol = new TableColumn(table, SWT.NONE);
  10.112 +		dateCol.setText("Date");
  10.113 +		dateCol.setWidth(150);
  10.114 +
  10.115 +		nameText = new Text(shell, SWT.SINGLE | SWT.BORDER);
  10.116 +
  10.117 +		nameText.addSelectionListener(new SelectionAdapter() {
  10.118 +			public void widgetDefaultSelected(SelectionEvent e) {
  10.119 +				createList();
  10.120 +
  10.121 +				if (table.getItemCount() == 1 && !isTemplate()) {
  10.122 +					if (mode == Mode.SAVE) {
  10.123 +						MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
  10.124 +						dialog.setText("Confirm Overwrite");
  10.125 +						dialog.setMessage("This file already exists, are you sure you want to overwrite it?");
  10.126 +
  10.127 +						if (dialog.open() == SWT.CANCEL)
  10.128 +							return;
  10.129 +					}
  10.130 +
  10.131 +					files.add((SymitarFile) (table.getItems()[0].getData()));
  10.132 +					shell.close();
  10.133 +				} else if (mode == Mode.SAVE && nameText.getText().trim().length() > 0 && !isTemplate()) {
  10.134 +					files.add(new SymitarFile(nameText.getText().trim(), FileType.valueOf(typeCombo.getText())));
  10.135 +					shell.close();
  10.136 +				}
  10.137 +
  10.138 +			}
  10.139 +		});
  10.140 +
  10.141 +		nameText.addModifyListener(new ModifyListener() {
  10.142 +
  10.143 +			public void modifyText(ModifyEvent e) {
  10.144 +				listLoaded = false;
  10.145 +			}
  10.146 +
  10.147 +		});
  10.148 +
  10.149 +		final Button ok = new Button(shell, SWT.PUSH);
  10.150 +
  10.151 +		if (mode == Mode.OPEN)
  10.152 +			ok.setText("Open File(s)");
  10.153 +		else
  10.154 +			ok.setText("Save File");
  10.155 +
  10.156 +		ok.addSelectionListener(new SelectionAdapter() {
  10.157 +			public void widgetSelected(SelectionEvent e) {
  10.158 +				if (!listLoaded)
  10.159 +					createList();
  10.160 +
  10.161 +				if (mode == Mode.OPEN && table.getSelectionIndex() != -1 ) {
  10.162 +					for (TableItem cur : table.getSelection())
  10.163 +						files.add((SymitarFile) cur.getData());
  10.164 +
  10.165 +					shell.close();
  10.166 +				}
  10.167 +				
  10.168 +				if( mode == Mode.SAVE){
  10.169 +					if( table.getSelectionIndex() != -1 ){
  10.170 +						MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
  10.171 +						dialog.setText("Confirm Overwrite");
  10.172 +						dialog.setMessage("This file already exists, are you sure you want to overwrite it?");
  10.173 +
  10.174 +						if (dialog.open() == SWT.CANCEL)
  10.175 +							return;
  10.176 +						
  10.177 +						files.add((SymitarFile)table.getSelection()[0].getData());
  10.178 +						shell.close();
  10.179 +					}
  10.180 +					else
  10.181 +					{
  10.182 +						files.add(new SymitarFile(nameText.getText().trim(), FileType.valueOf(typeCombo.getText())));
  10.183 +						shell.close();
  10.184 +					}
  10.185 +				}
  10.186 +			}
  10.187 +		});
  10.188 +
  10.189 +		Button cancel = new Button(shell, SWT.PUSH);
  10.190 +		cancel.setText("Cancel");
  10.191 +		cancel.addSelectionListener(new SelectionAdapter() {
  10.192 +			public void widgetSelected(SelectionEvent e) {
  10.193 +				shell.close();
  10.194 +			}
  10.195 +		});
  10.196 +
  10.197 +		data = new FormData();
  10.198 +		data.left = new FormAttachment(0);
  10.199 +		data.top = new FormAttachment(0);
  10.200 +		nameLabel.setLayoutData(data);
  10.201 +
  10.202 +		data = new FormData();
  10.203 +		data.left = new FormAttachment(nameLabel);
  10.204 +		data.right = new FormAttachment(typeLabel);
  10.205 +		data.top = new FormAttachment(0);
  10.206 +		nameText.setLayoutData(data);
  10.207 +
  10.208 +		data = new FormData();
  10.209 +		data.right = new FormAttachment(typeCombo);
  10.210 +		data.top = new FormAttachment(0);
  10.211 +		typeLabel.setLayoutData(data);
  10.212 +
  10.213 +		data = new FormData();
  10.214 +		// data.left = new FormAttachment(typeLabel);
  10.215 +		data.top = new FormAttachment(0);
  10.216 +		data.right = new FormAttachment(100);
  10.217 +		typeCombo.setLayoutData(data);
  10.218 +
  10.219 +		data = new FormData();
  10.220 +		data.left = new FormAttachment(0);
  10.221 +		data.top = new FormAttachment(typeCombo);
  10.222 +		data.bottom = new FormAttachment(cancel);
  10.223 +		data.right = new FormAttachment(100);
  10.224 +		table.setLayoutData(data);
  10.225 +
  10.226 +		data = new FormData();
  10.227 +		data.right = new FormAttachment(100);
  10.228 +		data.bottom = new FormAttachment(100);
  10.229 +		cancel.setLayoutData(data);
  10.230 +
  10.231 +		data = new FormData();
  10.232 +		data.right = new FormAttachment(cancel);
  10.233 +		data.bottom = new FormAttachment(100);
  10.234 +		ok.setLayoutData(data);
  10.235 +
  10.236 +		nameText.setFocus();
  10.237 +
  10.238 +		shell.pack();
  10.239 +		shell.open();
  10.240 +	}
  10.241 +
  10.242 +	// TODO: Finish up with other template forms
  10.243 +	private boolean isTemplate() {
  10.244 +		return nameText.getText().contains("+");
  10.245 +	}
  10.246 +
  10.247 +	private void createList() {
  10.248 +		table.removeAll();
  10.249 +
  10.250 +		SymitarSession session = RepDevMain.SYMITAR_SESSIONS.get(sym);
  10.251 +
  10.252 +		for (SymitarFile cur : session.getFileList(FileType.valueOf(typeCombo.getText()), nameText.getText())) {
  10.253 +			TableItem item = new TableItem(table, SWT.NONE);
  10.254 +			item.setText(0, cur.getName());
  10.255 +			
  10.256 +			if( cur.getType() == FileType.REPGEN )
  10.257 +				item.setImage(0, RepDevMain.smallRepGenImage);
  10.258 +			else
  10.259 +				item.setImage(0, RepDevMain.smallFileImage);
  10.260 +			
  10.261 +			item.setText(1, String.valueOf(cur.getSize()));
  10.262 +			item.setText(2, cur.getModified().toString());
  10.263 +			item.setData(cur);
  10.264 +		}
  10.265 +
  10.266 +		if (table.getItemCount() > 0)
  10.267 +			table.select(0);
  10.268 +
  10.269 +		listLoaded = true;
  10.270 +	}
  10.271 +
  10.272 +	public ArrayList<SymitarFile> open() {
  10.273 +		create();
  10.274 +
  10.275 +		while (!shell.isDisposed()) {
  10.276 +			if (!display.readAndDispatch())
  10.277 +				display.sleep();
  10.278 +		}
  10.279 +
  10.280 +		return files;
  10.281 +	}
  10.282 +}
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/com/repdev/FileType.java	Fri Jun 01 18:46:53 2007 +0000
    11.3 @@ -0,0 +1,5 @@
    11.4 +package com.repdev;
    11.5 +
    11.6 +public enum FileType {
    11.7 +	LETTER, REPGEN, HELP,
    11.8 +};
    11.9 \ No newline at end of file
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/com/repdev/MainShell.java	Fri Jun 01 18:46:53 2007 +0000
    12.3 @@ -0,0 +1,1150 @@
    12.4 +package com.repdev;
    12.5 +
    12.6 +import java.awt.FlowLayout;
    12.7 +import java.util.ArrayList;
    12.8 +
    12.9 +import org.eclipse.swt.*;
   12.10 +import org.eclipse.swt.custom.*;
   12.11 +import org.eclipse.swt.layout.*;
   12.12 +import org.eclipse.swt.events.*;
   12.13 +import org.eclipse.swt.graphics.Image;
   12.14 +import org.eclipse.swt.widgets.*;
   12.15 +
   12.16 +public class MainShell {
   12.17 +	private static final int MIN_COL_WIDTH = 75, MIN_COMP_SIZE = 125;
   12.18 +	private CTabFolder mainfolder;
   12.19 +	private Display display;
   12.20 +	private Shell shell;
   12.21 +	private Tree tree;
   12.22 +	private Table tblErrors, tblTasks; 
   12.23 +
   12.24 +	public MainShell(Display display) {
   12.25 +		this.display = display;
   12.26 +		createShell();
   12.27 +	}
   12.28 +
   12.29 +	public void open() {
   12.30 +		shell.open();
   12.31 +	}
   12.32 +
   12.33 +	public boolean isDisposed() {
   12.34 +		return shell.isDisposed();
   12.35 +	}
   12.36 +
   12.37 +	private void createShell() {
   12.38 +		int leftPercent = 20, bottomPercent = 15;
   12.39 +
   12.40 +		shell = new Shell(display);
   12.41 +		shell.setText(RepDevMain.NAMESTR);
   12.42 +		createMenuDefault();
   12.43 +
   12.44 +		shell.setLayout(new FormLayout());
   12.45 +		
   12.46 +		shell.addShellListener(new ShellAdapter(){
   12.47 +			
   12.48 +			public void shellClosed(ShellEvent e){
   12.49 +				boolean close = true;
   12.50 +				
   12.51 +				for(CTabItem tab : mainfolder.getItems())
   12.52 +					if( !confirmClose(tab) )
   12.53 +						close = false;
   12.54 +				
   12.55 +				e.doit = close;
   12.56 +			}
   12.57 +			
   12.58 +
   12.59 +		});
   12.60 +
   12.61 +		final Composite left = new Composite(shell, SWT.NONE);
   12.62 +		createExplorer(left);
   12.63 +		final Sash sashVert = new Sash(shell, SWT.VERTICAL | SWT.SMOOTH);
   12.64 +		final Composite right = new Composite(shell, SWT.NONE);
   12.65 +		right.setLayout(new FormLayout());
   12.66 +
   12.67 +		Composite main = new Composite(right, SWT.NONE);
   12.68 +		createEditorPane(main);
   12.69 +		final Sash sashHoriz = new Sash(right, SWT.HORIZONTAL | SWT.SMOOTH);
   12.70 +		final Composite bottom = new Composite(right, SWT.NONE);
   12.71 +		createBottom(bottom);
   12.72 +
   12.73 +		FormData frmLeft = new FormData();
   12.74 +		frmLeft.top = new FormAttachment(0);
   12.75 +		frmLeft.left = new FormAttachment(0);
   12.76 +		frmLeft.right = new FormAttachment(sashVert);
   12.77 +		frmLeft.bottom = new FormAttachment(100);
   12.78 +		left.setLayoutData(frmLeft);
   12.79 +
   12.80 +		final FormData frmSashVert = new FormData();
   12.81 +		frmSashVert.top = new FormAttachment(0);
   12.82 +		frmSashVert.left = new FormAttachment(leftPercent);
   12.83 +		frmSashVert.bottom = new FormAttachment(100);
   12.84 +		sashVert.setLayoutData(frmSashVert);
   12.85 +
   12.86 +		FormData frmRight = new FormData();
   12.87 +		frmRight.top = new FormAttachment(0);
   12.88 +		frmRight.left = new FormAttachment(sashVert);
   12.89 +		frmRight.right = new FormAttachment(100);
   12.90 +		frmRight.bottom = new FormAttachment(100);
   12.91 +		right.setLayoutData(frmRight);
   12.92 +
   12.93 +		FormData frmMain = new FormData();
   12.94 +		frmMain.top = new FormAttachment(0);
   12.95 +		frmMain.left = new FormAttachment(0);
   12.96 +		frmMain.right = new FormAttachment(100);
   12.97 +		frmMain.bottom = new FormAttachment(sashHoriz);
   12.98 +		main.setLayoutData(frmMain);
   12.99 +
  12.100 +		final FormData frmSashHoriz = new FormData();
  12.101 +		frmSashHoriz.top = new FormAttachment(100 - bottomPercent);
  12.102 +		frmSashHoriz.left = new FormAttachment(0);
  12.103 +		frmSashHoriz.right = new FormAttachment(100);
  12.104 +		sashHoriz.setLayoutData(frmSashHoriz);
  12.105 +
  12.106 +		FormData frmBottom = new FormData();
  12.107 +		frmBottom.top = new FormAttachment(sashHoriz);
  12.108 +		frmBottom.left = new FormAttachment(0);
  12.109 +		frmBottom.right = new FormAttachment(100);
  12.110 +		frmBottom.bottom = new FormAttachment(100);
  12.111 +		bottom.setLayoutData(frmBottom);
  12.112 +
  12.113 +		left.addControlListener(new ControlAdapter() {
  12.114 +			public void controlResized(ControlEvent e) {
  12.115 +				if (left.getSize().x < MIN_COMP_SIZE) {
  12.116 +					frmSashVert.left = new FormAttachment(0, MIN_COMP_SIZE);
  12.117 +					shell.layout();
  12.118 +				}
  12.119 +			}
  12.120 +		});
  12.121 +
  12.122 +		bottom.addControlListener(new ControlAdapter() {
  12.123 +			public void controlResized(ControlEvent e) {
  12.124 +				if (bottom.getSize().y < MIN_COMP_SIZE) {
  12.125 +					frmSashHoriz.top = new FormAttachment(right.getSize().y - MIN_COMP_SIZE, right.getSize().y, 0);
  12.126 +					right.layout();
  12.127 +				}
  12.128 +			}
  12.129 +		});
  12.130 +
  12.131 +		sashVert.addListener(SWT.Selection, new Listener() {
  12.132 +			public void handleEvent(Event e) {
  12.133 +
  12.134 +				if (e.x < MIN_COMP_SIZE)
  12.135 +					e.x = MIN_COMP_SIZE;
  12.136 +
  12.137 +				if (shell.getClientArea().width - e.x < MIN_COMP_SIZE)
  12.138 +					e.x = shell.getClientArea().width - MIN_COMP_SIZE;
  12.139 +
  12.140 +				if (e.x != sashVert.getBounds().x) {
  12.141 +					frmSashVert.left = new FormAttachment(0, e.x);
  12.142 +					shell.layout();
  12.143 +				}
  12.144 +			}
  12.145 +		});
  12.146 +
  12.147 +		sashHoriz.addListener(SWT.Selection, new Listener() {
  12.148 +			public void handleEvent(Event e) {
  12.149 +				if (e.y < MIN_COMP_SIZE)
  12.150 +					e.y = MIN_COMP_SIZE;
  12.151 +
  12.152 +				if (right.getSize().y - e.y < MIN_COMP_SIZE)
  12.153 +					e.y = right.getSize().y - MIN_COMP_SIZE;
  12.154 +
  12.155 +				if (e.y != sashHoriz.getBounds().y) {
  12.156 +					frmSashHoriz.top = new FormAttachment(e.y, right.getSize().y, 0);
  12.157 +					right.layout();
  12.158 +				}
  12.159 +			}
  12.160 +		});
  12.161 +
  12.162 +		shell.setMinimumSize(3 * MIN_COMP_SIZE, 3 * MIN_COMP_SIZE);
  12.163 +	}
  12.164 +
  12.165 +	private void openFile(SymitarFile file, int sym) {
  12.166 +		boolean found = false;
  12.167 +
  12.168 +		for (CTabItem c : mainfolder.getItems()) {
  12.169 +			if (c.getData("file") != null && c.getData("file").equals(file) && c.getData("sym") != null && ((Integer) c.getData("sym")) == sym) {
  12.170 +				mainfolder.setSelection(c);
  12.171 +				found = true;
  12.172 +				break;
  12.173 +			}
  12.174 +		}
  12.175 +
  12.176 +		if (!found) {
  12.177 +			CTabItem item = new CTabItem(mainfolder, SWT.CLOSE);
  12.178 +
  12.179 +			item.setText(file.getName());
  12.180 +			item.setImage(getFileImage(file, sym));
  12.181 +			item.setData("file", file);
  12.182 +			item.setData("sym", sym);
  12.183 +
  12.184 +			EditorComposite editor = new EditorComposite(mainfolder, file, sym);
  12.185 +			item.setControl(editor);
  12.186 +
  12.187 +			mainfolder.setSelection(item);
  12.188 +		}
  12.189 +	}
  12.190 +
  12.191 +	private void doubleClickTreeItem() {
  12.192 +		TreeItem[] selection = tree.getSelection();
  12.193 +		if (selection.length != 1)
  12.194 +			return;
  12.195 +
  12.196 +		TreeItem cur = selection[0];
  12.197 +
  12.198 +		if ((cur.getData() instanceof SymitarFile)) {
  12.199 +			SymitarFile file = (SymitarFile) cur.getData();
  12.200 +			int sym = ((Project) cur.getParentItem().getData()).getSym();
  12.201 +
  12.202 +			openFile(file, sym);
  12.203 +		} else {
  12.204 +			doTree(cur);
  12.205 +		}
  12.206 +	}
  12.207 +
  12.208 +	/**
  12.209 +	 * Expands or Collapses the item passed to it on the tree
  12.210 +	 * 
  12.211 +	 * @param item
  12.212 +	 */
  12.213 +	private void doTree(TreeItem item) {
  12.214 +		item.setExpanded(!item.getExpanded());
  12.215 +
  12.216 +		if (item.getExpanded()) {
  12.217 +			Event e = new Event();
  12.218 +			e.item = item;
  12.219 +			tree.notifyListeners(SWT.Expand, e);
  12.220 +		}
  12.221 +	}
  12.222 +
  12.223 +	private void addSym() {
  12.224 +		int sym = SymLoginShell.symLogin(display, shell, -1);
  12.225 +
  12.226 +		if (sym != -1) {
  12.227 +			boolean exists = false;
  12.228 +
  12.229 +			for (TreeItem current : tree.getItems()) {
  12.230 +				if (current.getData() instanceof Integer && ((Integer) current.getData()) == sym)
  12.231 +					exists = true;
  12.232 +			}
  12.233 +
  12.234 +			if (!exists) {
  12.235 +				TreeItem item = new TreeItem(tree, SWT.NONE);
  12.236 +				item.setText("Sym " + sym);
  12.237 +				item.setImage(RepDevMain.smallSymImage);
  12.238 +				item.setData(sym);
  12.239 +				new TreeItem(item, SWT.NONE).setText("Loading...");
  12.240 +			}
  12.241 +		} else {
  12.242 +			MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
  12.243 +			dialog.setMessage("Could not connect to symitar server, please set a correct server in the options menu");
  12.244 +			dialog.setText("Error connecting");
  12.245 +			dialog.open();
  12.246 +		}
  12.247 +	}
  12.248 +
  12.249 +	private void removeSym() {
  12.250 +		TreeItem[] selection = tree.getSelection();
  12.251 +		TreeItem currentItem;
  12.252 +		int sym;
  12.253 +
  12.254 +		if (selection.length != 1)
  12.255 +			return;
  12.256 +		currentItem = selection[0];
  12.257 +
  12.258 +		while (!(currentItem.getData() instanceof Integer)) {
  12.259 +			currentItem = currentItem.getParentItem();
  12.260 +
  12.261 +			if (currentItem == null)
  12.262 +				return;
  12.263 +		}
  12.264 +
  12.265 +		sym = (Integer) currentItem.getData();
  12.266 +
  12.267 +		MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
  12.268 +		dialog.setText("Confirm Sym Close");
  12.269 +		dialog.setMessage("Are you sure you want to close this Sym?");
  12.270 +
  12.271 +		if (dialog.open() == SWT.OK) {
  12.272 +			ProjectManager.saveProjects(sym);
  12.273 +			RepDevMain.SYMITAR_SESSIONS.get(sym).disconnect();
  12.274 +			RepDevMain.SYMITAR_SESSIONS.remove(sym);
  12.275 +
  12.276 +			currentItem.dispose();
  12.277 +		}
  12.278 +
  12.279 +		tree.notifyListeners(SWT.Selection, null);
  12.280 +	}
  12.281 +
  12.282 +	private void addProject() {
  12.283 +		TreeItem[] selection = tree.getSelection();
  12.284 +		if (selection.length != 1)
  12.285 +			return;
  12.286 +
  12.287 +		TreeItem cur = selection[0];
  12.288 +		while (cur.getParentItem() != null)
  12.289 +			cur = cur.getParentItem();
  12.290 +
  12.291 +		int sym = (Integer) cur.getData();
  12.292 +		String str = NewProjShell.askForName(display, shell, sym);
  12.293 +		if (str != null) {
  12.294 +			Project proj = ProjectManager.createProject(str, sym);
  12.295 +
  12.296 +			if (proj != null) {
  12.297 +				TreeItem item = new TreeItem(cur, SWT.NONE);
  12.298 +				item.setText(proj.getName());
  12.299 +				item.setData(proj);
  12.300 +				item.setImage(RepDevMain.smallProjectImage);
  12.301 +				new TreeItem(item, SWT.NONE).setText("Loading...");
  12.302 +			}
  12.303 +		}
  12.304 +	}
  12.305 +
  12.306 +	private void removeProject() {
  12.307 +		TreeItem[] selection = tree.getSelection();
  12.308 +		if (selection.length != 1)
  12.309 +			return;
  12.310 +
  12.311 +		TreeItem cur = selection[0];
  12.312 +		while (cur != null && !(cur.getData() instanceof Project))
  12.313 +			cur = cur.getParentItem();
  12.314 +
  12.315 +		if (cur == null)
  12.316 +			return;
  12.317 +
  12.318 +		Project proj = (Project) cur.getData();
  12.319 +		RemProjShell.Result result = RemProjShell.confirm(display, shell, proj);
  12.320 +
  12.321 +		if (result == RemProjShell.Result.OK_KEEP) {
  12.322 +			cur.dispose();
  12.323 +			ProjectManager.removeProject(proj, false);
  12.324 +		} else if (result == RemProjShell.Result.OK_DELETE) {
  12.325 +			cur.dispose();
  12.326 +			ProjectManager.removeProject(proj, true);
  12.327 +		}
  12.328 +
  12.329 +		tree.notifyListeners(SWT.Selection, null);
  12.330 +	}
  12.331 +
  12.332 +	private void importFiles() {
  12.333 +		TreeItem[] selection = tree.getSelection();
  12.334 +		if (selection.length != 1)
  12.335 +			return;
  12.336 +
  12.337 +		TreeItem cur = selection[0];
  12.338 +		while (cur != null && !(cur.getData() instanceof Project))
  12.339 +			cur = cur.getParentItem();
  12.340 +
  12.341 +		if (cur == null)
  12.342 +			return;
  12.343 +
  12.344 +		Project proj = (Project) cur.getData();
  12.345 +
  12.346 +		FileDialog dialog = new FileDialog(shell, FileDialog.Mode.OPEN, proj.getSym());
  12.347 +		ArrayList<SymitarFile> files = dialog.open();
  12.348 +
  12.349 +		if (files != null) {
  12.350 +			for (SymitarFile file : files) {
  12.351 +				if (!proj.hasFile(file)) {
  12.352 +					proj.addFile(file);
  12.353 +					TreeItem item = new TreeItem(cur, SWT.NONE);
  12.354 +					item.setText(file.getName());
  12.355 +					item.setData(file);
  12.356 +					item.setImage(getFileImage(file));
  12.357 +				}
  12.358 +			}
  12.359 +		}
  12.360 +	}
  12.361 +
  12.362 +	private void newFileInProject() {
  12.363 +		FileDialog dialog = new FileDialog(shell, FileDialog.Mode.SAVE, getCurrentTreeSym());
  12.364 +		ArrayList<SymitarFile> files = dialog.open();
  12.365 +
  12.366 +		if (files.size() > 0) {
  12.367 +			SymitarFile file = files.get(0);
  12.368 +
  12.369 +			TreeItem[] selection = tree.getSelection();
  12.370 +			if (selection.length != 1)
  12.371 +				return;
  12.372 +
  12.373 +			TreeItem cur = selection[0];
  12.374 +			while (cur != null && !(cur.getData() instanceof Project))
  12.375 +				cur = cur.getParentItem();
  12.376 +
  12.377 +			if (cur == null)
  12.378 +				return;
  12.379 +
  12.380 +			Project proj = (Project) cur.getData();
  12.381 +
  12.382 +			if (!proj.hasFile(file)) {
  12.383 +				proj.addFile(file);
  12.384 +				TreeItem item = new TreeItem(cur, SWT.NONE);
  12.385 +				item.setText(file.getName());
  12.386 +				item.setData(file);
  12.387 +				item.setImage(getFileImage(file));
  12.388 +			}
  12.389 +
  12.390 +			RepDevMain.SYMITAR_SESSIONS.get(getCurrentTreeSym()).saveFile(file, "");
  12.391 +			openFile(file, getCurrentTreeSym());
  12.392 +			tree.notifyListeners(SWT.Selection, null);
  12.393 +		}
  12.394 +	}
  12.395 +
  12.396 +	private void removeFile() {
  12.397 +		TreeItem[] selection = tree.getSelection();
  12.398 +		if (selection.length != 1)
  12.399 +			return;
  12.400 +
  12.401 +		if (!(selection[0].getData() instanceof SymitarFile))
  12.402 +			return;
  12.403 +
  12.404 +		SymitarFile file = (SymitarFile) selection[0].getData();
  12.405 +		Project proj = (Project) selection[0].getParentItem().getData();
  12.406 +
  12.407 +		RemFileShell.Result result = RemFileShell.confirm(display, shell, proj, file);
  12.408 +
  12.409 +		if (result == RemFileShell.Result.OK_KEEP) {
  12.410 +			proj.removeFile(file, false);
  12.411 +			selection[0].dispose();
  12.412 +		} else if (result == RemFileShell.Result.OK_DELETE) {
  12.413 +			proj.removeFile(file, true);
  12.414 +			selection[0].dispose();
  12.415 +		}
  12.416 +
  12.417 +		tree.notifyListeners(SWT.Selection, null);
  12.418 +	}
  12.419 +
  12.420 +	private void createExplorer(Composite self) {
  12.421 +		self.setLayout(new FillLayout());
  12.422 +		Group group = new Group(self, SWT.NONE);
  12.423 +		group.setText("Project Explorer");
  12.424 +		group.setLayout(new FormLayout());
  12.425 +
  12.426 +		ToolBar toolbar = new ToolBar(group, SWT.HORIZONTAL | SWT.WRAP);
  12.427 +
  12.428 +		ToolItem addSym = new ToolItem(toolbar, SWT.PUSH);
  12.429 +		addSym.setImage(RepDevMain.smallSymAddImage);
  12.430 +		addSym.setToolTipText("Add a new Sym to this list.");
  12.431 +
  12.432 +		final ToolItem remSym = new ToolItem(toolbar, SWT.PUSH);
  12.433 +		remSym.setImage(RepDevMain.smallSymRemoveImage);
  12.434 +		remSym.setToolTipText("Remove the selected Sym from this list.");
  12.435 +		remSym.setEnabled(false);
  12.436 +
  12.437 +		final ToolItem addProj = new ToolItem(toolbar, SWT.PUSH);
  12.438 +		addProj.setImage(RepDevMain.smallProjectAddImage);
  12.439 +		addProj.setToolTipText("Create a new project in the selected Sym.");
  12.440 +		addProj.setEnabled(false);
  12.441 +
  12.442 +		final ToolItem remProj = new ToolItem(toolbar, SWT.PUSH);
  12.443 +		remProj.setImage(RepDevMain.smallProjectRemoveImage);
  12.444 +		remProj.setToolTipText("Delete the selected project.");
  12.445 +		remProj.setEnabled(false);
  12.446 +
  12.447 +		final ToolItem newFile = new ToolItem(toolbar, SWT.PUSH);
  12.448 +		newFile.setImage(RepDevMain.smallFileAddImage);
  12.449 +		newFile.setToolTipText("Create a new file in your current project.");
  12.450 +		newFile.setEnabled(false);
  12.451 +
  12.452 +		final ToolItem importFile = new ToolItem(toolbar, SWT.PUSH);
  12.453 +		importFile.setImage(RepDevMain.smallImportImage);
  12.454 +		importFile.setToolTipText("Import Existing Files to your current project.");
  12.455 +		importFile.setEnabled(false);
  12.456 +
  12.457 +		final ToolItem remFile = new ToolItem(toolbar, SWT.PUSH);
  12.458 +		remFile.setImage(RepDevMain.smallFileRemoveImage);
  12.459 +		remFile.setToolTipText("Disassociate the selected file from its project, and optionally delete the file from the server.");
  12.460 +		remFile.setEnabled(false);
  12.461 +
  12.462 +		toolbar.pack();
  12.463 +
  12.464 +		tree = new Tree(group, SWT.NONE | SWT.BORDER );
  12.465 +		for (int sym : Config.getSyms()) {
  12.466 +			TreeItem item = new TreeItem(tree, SWT.NONE);
  12.467 +			item.setText("Sym " + sym);
  12.468 +			item.setImage(RepDevMain.smallSymImage);
  12.469 +			item.setData(sym);
  12.470 +			new TreeItem(item, SWT.NONE).setText("Loading...");
  12.471 +		}
  12.472 +
  12.473 +		Menu treeMenu = new Menu(tree);
  12.474 +
  12.475 +		Menu newMenu = new Menu(treeMenu);
  12.476 +		MenuItem newItem = new MenuItem(treeMenu, SWT.CASCADE);
  12.477 +		newItem.setMenu(newMenu);
  12.478 +		newItem.setText("New...");
  12.479 +
  12.480 +		MenuItem newFreeFile = new MenuItem(newMenu, SWT.NONE);
  12.481 +		newFreeFile.setImage(RepDevMain.smallFileNewImage);
  12.482 +		newFreeFile.setText("New File");
  12.483 +		newFreeFile.addSelectionListener(new SelectionAdapter() {
  12.484 +			public void widgetSelected(SelectionEvent e) {
  12.485 +				FileDialog dialog = new FileDialog(shell, FileDialog.Mode.SAVE, getCurrentTreeSym());
  12.486 +				ArrayList<SymitarFile> files = dialog.open();
  12.487 +
  12.488 +				if (files.size() > 0) {
  12.489 +					SymitarFile file = files.get(0);
  12.490 +
  12.491 +					RepDevMain.SYMITAR_SESSIONS.get(getCurrentTreeSym()).saveFile(file, "");
  12.492 +					openFile(file, getCurrentTreeSym());
  12.493 +				}
  12.494 +			}
  12.495 +		});
  12.496 +
  12.497 +		final MenuItem newProjectFile = new MenuItem(newMenu, SWT.NONE);
  12.498 +		newProjectFile.setImage(RepDevMain.smallFileAddImage);
  12.499 +		newProjectFile.setText("New File in Project");
  12.500 +		newProjectFile.addSelectionListener(new SelectionAdapter() {
  12.501 +			public void widgetSelected(SelectionEvent e) {
  12.502 +				newFileInProject();
  12.503 +			}
  12.504 +		});
  12.505 +
  12.506 +		new MenuItem(newMenu, SWT.SEPARATOR);
  12.507 +
  12.508 +		MenuItem newProject = new MenuItem(newMenu, SWT.NONE);
  12.509 +		newProject.setText("Project");
  12.510 +		newProject.setImage(RepDevMain.smallProjectAddImage);
  12.511 +		newProject.addSelectionListener(new SelectionAdapter() {
  12.512 +			public void widgetSelected(SelectionEvent e) {
  12.513 +				addProject();
  12.514 +			}
  12.515 +		});
  12.516 +		
  12.517 +		new MenuItem(treeMenu, SWT.SEPARATOR);
  12.518 +		
  12.519 +		final Menu runMenu = new Menu(treeMenu);
  12.520 +		final MenuItem runMenuItem = new MenuItem(treeMenu,SWT.CASCADE);
  12.521 +		runMenuItem.setMenu(runMenu);
  12.522 +		runMenuItem.setText("Run");
  12.523 +		runMenuItem.setImage(RepDevMain.smallRunImage);
  12.524 +		
  12.525 +		MenuItem runReport = new MenuItem(runMenu,SWT.NONE);
  12.526 +		runReport.setText("Run Report");
  12.527 +		runReport.setImage(RepDevMain.smallRunImage);
  12.528 +		runReport.addSelectionListener(new SelectionAdapter() {
  12.529 +			public void widgetSelected(SelectionEvent e) {
  12.530 +				runReport();
  12.531 +			}
  12.532 +		});
  12.533 +		
  12.534 +		MenuItem runFMReport = new MenuItem(runMenu,SWT.NONE);
  12.535 +		runFMReport.setText("Run Report with FM");
  12.536 +		runFMReport.setImage(RepDevMain.smallRunFMImage);
  12.537 +		
  12.538 +		MenuItem openLastReport = new MenuItem(runMenu,SWT.NONE);
  12.539 +		openLastReport.setText("Open Last Report Run");
  12.540 +		openLastReport.setImage(RepDevMain.smallFileOpenImage);
  12.541 +		
  12.542 +		MenuItem findReport = new MenuItem(runMenu,SWT.NONE);
  12.543 +		findReport.setText("Find runs in Print History");
  12.544 +		findReport.setImage(RepDevMain.smallFindImage);
  12.545 +		
  12.546 +
  12.547 +		new MenuItem(treeMenu, SWT.SEPARATOR);
  12.548 +
  12.549 +		MenuItem deleteFile = new MenuItem(treeMenu, SWT.NONE);
  12.550 +		deleteFile.setText("Remove");
  12.551 +		deleteFile.setImage(RepDevMain.smallDeleteImage);
  12.552 +		deleteFile.addSelectionListener(new SelectionAdapter() {
  12.553 +			public void widgetSelected(SelectionEvent e) {
  12.554 +				TreeItem[] selection = tree.getSelection();
  12.555 +				if (selection.length != 1)
  12.556 +					return;
  12.557 +
  12.558 +				TreeItem cur = selection[0];
  12.559 +				Object data = cur.getData();
  12.560 +
  12.561 +				if (data instanceof Integer)
  12.562 +					removeSym();
  12.563 +				else if (data instanceof Project)
  12.564 +					removeProject();
  12.565 +				else
  12.566 +					removeFile();
  12.567 +
  12.568 +			}
  12.569 +		});
  12.570 +		
  12.571 +		new MenuItem(treeMenu, SWT.SEPARATOR);
  12.572 +
  12.573 +		final MenuItem openFile = new MenuItem(treeMenu, SWT.NONE);
  12.574 +		openFile.setText("Open Existing...");
  12.575 +		openFile.setImage(RepDevMain.smallFileOpenImage);
  12.576 +		openFile.addSelectionListener(new SelectionAdapter() {
  12.577 +
  12.578 +			public void widgetSelected(SelectionEvent e) {
  12.579 +
  12.580 +				FileDialog dialog = new FileDialog(shell, FileDialog.Mode.OPEN, getCurrentTreeSym());
  12.581 +
  12.582 +				for (SymitarFile file : dialog.open())
  12.583 +					openFile(file, getCurrentTreeSym());
  12.584 +			}
  12.585 +
  12.586 +		});
  12.587 +
  12.588 +		final MenuItem importFilem = new MenuItem(treeMenu, SWT.NONE);
  12.589 +		importFilem.setText("Import Files to Project");
  12.590 +		importFilem.setImage(RepDevMain.smallImportImage);
  12.591 +		importFilem.addSelectionListener(new SelectionAdapter() {
  12.592 +
  12.593 +			public void widgetSelected(SelectionEvent e) {
  12.594 +				importFiles();
  12.595 +			}
  12.596 +
  12.597 +		});
  12.598 +
  12.599 +		treeMenu.addMenuListener(new MenuListener() {
  12.600 +
  12.601 +			public void menuHidden(MenuEvent e) {
  12.602 +			}
  12.603 +
  12.604 +			public void menuShown(MenuEvent e) {
  12.605 +				if (tree.getSelection()[0].getData() instanceof Integer) {
  12.606 +					importFilem.setEnabled(false);
  12.607 +					newProjectFile.setEnabled(false);
  12.608 +				} else {
  12.609 +					importFilem.setEnabled(true);
  12.610 +					newProjectFile.setEnabled(true);
  12.611 +				}
  12.612 +				
  12.613 +				if( tree.getSelectionCount() == 1 && tree.getSelection()[0].getData() instanceof SymitarFile && ((SymitarFile)tree.getSelection()[0].getData()).getType() == FileType.REPGEN){
  12.614 +					runMenuItem.setEnabled(true);
  12.615 +				}
  12.616 +				else
  12.617 +					runMenuItem.setEnabled(false);
  12.618 +			}
  12.619 +
  12.620 +		});
  12.621 +
  12.622 +		tree.setMenu(treeMenu);
  12.623 +
  12.624 +		tree.addListener(SWT.Expand, new Listener() {
  12.625 +			public void handleEvent(Event e) {
  12.626 +				final TreeItem root = (TreeItem) e.item;
  12.627 +
  12.628 +				for (TreeItem child : root.getItems())
  12.629 +					child.dispose();
  12.630 +
  12.631 +				if (root.getData() instanceof Integer) {
  12.632 +					SymitarSession session = RepDevMain.SYMITAR_SESSIONS.get(root.getData());
  12.633 +
  12.634 +					if (session == null || !session.isConnected()) {
  12.635 +						if (SymLoginShell.symLogin(display, shell, (Integer) root.getData()) == -1) {
  12.636 +							display.asyncExec(new Runnable() {
  12.637 +
  12.638 +								public void run() {
  12.639 +									TreeItem newItem = new TreeItem(root, SWT.NONE);
  12.640 +									newItem.setText("Loading...");
  12.641 +									newItem.setExpanded(false);
  12.642 +									root.setExpanded(false);
  12.643 +								}
  12.644 +
  12.645 +							});
  12.646 +
  12.647 +							return;
  12.648 +						}
  12.649 +					}
  12.650 +
  12.651 +					for (Project proj : ProjectManager.getProjects((Integer) root.getData())) {
  12.652 +						TreeItem item = new TreeItem(root, SWT.NONE);
  12.653 +						item.setText(proj.getName());
  12.654 +						item.setData(proj);
  12.655 +						item.setImage(RepDevMain.smallProjectImage);
  12.656 +						new TreeItem(item, SWT.NONE).setText("Loading...");
  12.657 +					}
  12.658 +				} else if (root.getData() instanceof Project) {
  12.659 +					for (SymitarFile file : ((Project) root.getData()).getFiles()) {
  12.660 +						TreeItem item = new TreeItem(root, SWT.NONE);
  12.661 +						item.setText(file.getName());
  12.662 +
  12.663 +						item.setImage(getFileImage(file));
  12.664 +
  12.665 +						item.setData(file);
  12.666 +					}
  12.667 +				}
  12.668 +			}
  12.669 +		});
  12.670 +
  12.671 +		tree.addListener(SWT.Selection, new Listener() {
  12.672 +			public void handleEvent(Event e) {
  12.673 +				TreeItem[] selection = tree.getSelection();
  12.674 +
  12.675 +				if (selection.length != 1) {
  12.676 +					remSym.setEnabled(false);
  12.677 +					addProj.setEnabled(false);
  12.678 +					remProj.setEnabled(false);
  12.679 +					importFile.setEnabled(false);
  12.680 +					newFile.setEnabled(false);
  12.681 +					remFile.setEnabled(false);
  12.682 +					return;
  12.683 +				}
  12.684 +
  12.685 +				Object data = ((TreeItem) selection[0]).getData();
  12.686 +				if (data instanceof Integer) {
  12.687 +					remSym.setEnabled(true);
  12.688 +					addProj.setEnabled(true);
  12.689 +					remProj.setEnabled(false);
  12.690 +					importFile.setEnabled(false);
  12.691 +					newFile.setEnabled(false);
  12.692 +					remFile.setEnabled(false);
  12.693 +				} else if (data instanceof Project) {
  12.694 +					remSym.setEnabled(true);
  12.695 +					addProj.setEnabled(true);
  12.696 +					remProj.setEnabled(true);
  12.697 +					importFile.setEnabled(true);
  12.698 +					newFile.setEnabled(true);
  12.699 +					remFile.setEnabled(false);
  12.700 +				} else if (data instanceof SymitarFile) {
  12.701 +					remSym.setEnabled(true);
  12.702 +					addProj.setEnabled(true);
  12.703 +					remProj.setEnabled(true);
  12.704 +					importFile.setEnabled(true);
  12.705 +					newFile.setEnabled(true);
  12.706 +					remFile.setEnabled(true);
  12.707 +				}
  12.708 +			}
  12.709 +		});
  12.710 +
  12.711 +		tree.addSelectionListener(new SelectionAdapter() {
  12.712 +			public void widgetDefaultSelected(SelectionEvent e) {
  12.713 +				doubleClickTreeItem();
  12.714 +			}
  12.715 +		});
  12.716 +
  12.717 +		addSym.addSelectionListener(new SelectionAdapter() {
  12.718 +			public void widgetSelected(SelectionEvent e) {
  12.719 +				addSym();
  12.720 +			}
  12.721 +		});
  12.722 +		remSym.addSelectionListener(new SelectionAdapter() {
  12.723 +			public void widgetSelected(SelectionEvent e) {
  12.724 +				removeSym();
  12.725 +			}
  12.726 +		});
  12.727 +		addProj.addSelectionListener(new SelectionAdapter() {
  12.728 +			public void widgetSelected(SelectionEvent e) {
  12.729 +				addProject();
  12.730 +			}
  12.731 +		});
  12.732 +		remProj.addSelectionListener(new SelectionAdapter() {
  12.733 +			public void widgetSelected(SelectionEvent e) {
  12.734 +				removeProject();
  12.735 +			}
  12.736 +		});
  12.737 +		importFile.addSelectionListener(new SelectionAdapter() {
  12.738 +			public void widgetSelected(SelectionEvent e) {
  12.739 +				importFiles();
  12.740 +			}
  12.741 +		});
  12.742 +		remFile.addSelectionListener(new SelectionAdapter() {
  12.743 +			public void widgetSelected(SelectionEvent e) {
  12.744 +				removeFile();
  12.745 +			}
  12.746 +		});
  12.747 +		newFile.addSelectionListener(new SelectionAdapter() {
  12.748 +			public void widgetSelected(SelectionEvent e) {
  12.749 +				newFileInProject();
  12.750 +			}
  12.751 +		});
  12.752 +
  12.753 +		FormData frmToolbar = new FormData();
  12.754 +		frmToolbar.top = new FormAttachment(0);
  12.755 +		frmToolbar.left = new FormAttachment(0);
  12.756 +		frmToolbar.right = new FormAttachment(100);
  12.757 +		toolbar.setLayoutData(frmToolbar);
  12.758 +
  12.759 +		FormData frmTree = new FormData();
  12.760 +		frmTree.top = new FormAttachment(toolbar);
  12.761 +		frmTree.left = new FormAttachment(0);
  12.762 +		frmTree.right = new FormAttachment(100);
  12.763 +		frmTree.bottom = new FormAttachment(100);
  12.764 +		tree.setLayoutData(frmTree);
  12.765 +	}
  12.766 +
  12.767 +	protected void runReport() {
  12.768 +		Object data = tree.getSelection()[0].getData();
  12.769 +		
  12.770 +		if( !(data instanceof SymitarFile) )
  12.771 +			return;
  12.772 +		
  12.773 +		RunReportShell dialog = new RunReportShell(shell,(SymitarFile)data,getCurrentTreeSym());
  12.774 +		dialog.open();
  12.775 +	}
  12.776 +
  12.777 +	/**
  12.778 +	 * 
  12.779 +	 * @return Sym of currently selected tree item
  12.780 +	 */
  12.781 +	private int getCurrentTreeSym() {
  12.782 +		int sym = -1;
  12.783 +		Object data = tree.getSelection()[0].getData();
  12.784 +
  12.785 +		if (data instanceof Integer)
  12.786 +			sym = (Integer) data;
  12.787 +		else if (data instanceof Project)
  12.788 +			sym = ((Project) data).getSym();
  12.789 +		else
  12.790 +			sym = ((Project) tree.getSelection()[0].getParentItem().getData()).getSym();
  12.791 +
  12.792 +		return sym;
  12.793 +	}
  12.794 +
  12.795 +	private Image getFileImage(SymitarFile file) {
  12.796 +		return getFileImage(file, -1);
  12.797 +	}
  12.798 +
  12.799 +	private Image getFileImage(SymitarFile file, int sym) {
  12.800 +		Image img;
  12.801 +
  12.802 +		switch (file.getType()) {
  12.803 +		case REPGEN:
  12.804 +			img = RepDevMain.smallRepGenImage;
  12.805 +			break;
  12.806 +		default:
  12.807 +			img = RepDevMain.smallFileImage;
  12.808 +		}
  12.809 +
  12.810 +		return img;
  12.811 +
  12.812 +	}
  12.813 +
  12.814 +	private void createEditorPane(Composite self) {
  12.815 +		self.setLayout(new FillLayout());
  12.816 +		mainfolder = new CTabFolder(self, SWT.TOP | SWT.BORDER);
  12.817 +		mainfolder.setLayout(new FillLayout());
  12.818 +		mainfolder.setSimple(false);
  12.819 +		
  12.820 +		mainfolder.addCTabFolder2Listener(new CTabFolder2Listener(){
  12.821 +
  12.822 +			public void close(CTabFolderEvent event) {
  12.823 +				event.doit = confirmClose( mainfolder.getSelection() );	
  12.824 +			}
  12.825 +
  12.826 +			public void maximize(CTabFolderEvent event) {
  12.827 +				// TODO Auto-generated method stub
  12.828 +				
  12.829 +			}
  12.830 +
  12.831 +			public void minimize(CTabFolderEvent event) {
  12.832 +				// TODO Auto-generated method stub
  12.833 +				
  12.834 +			}
  12.835 +
  12.836 +			public void restore(CTabFolderEvent event) {
  12.837 +				// TODO Auto-generated method stub
  12.838 +				
  12.839 +			}
  12.840 +
  12.841 +			public void showList(CTabFolderEvent event) {
  12.842 +				// TODO Auto-generated method stub
  12.843 +				
  12.844 +			}
  12.845 +			
  12.846 +		});
  12.847 +	}
  12.848 +
  12.849 +	private boolean confirmClose(CTabItem item) {
  12.850 +		if (item != null && item.getData("modified") != null && ((Boolean) item.getData("modified"))) {
  12.851 +			MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO | SWT.CANCEL);
  12.852 +			dialog.setText("Confirm File Close");
  12.853 +			dialog.setMessage("The file '" + item.getData("file") + "' on Sym " + item.getData("sym") + " has been modified, do you want to save it before closing it?");
  12.854 +
  12.855 +			int result = dialog.open();
  12.856 +
  12.857 +			if (result == SWT.CANCEL)
  12.858 +				return false;
  12.859 +			else if (result == SWT.YES) {
  12.860 +				((EditorComposite) item.getControl()).saveFile();
  12.861 +			}
  12.862 +		}
  12.863 +
  12.864 +		return true;
  12.865 +	}
  12.866 +
  12.867 +	private void createBottom(Composite self) {
  12.868 +		self.setLayout(new FillLayout());
  12.869 +		CTabFolder folder = new CTabFolder(self, SWT.TOP | SWT.BORDER);
  12.870 +		folder.setLayout(new FillLayout());
  12.871 +		folder.setSimple(false);
  12.872 +
  12.873 +		CTabItem errors = new CTabItem(folder, SWT.NONE);
  12.874 +		errors.setText("&Errors");
  12.875 +		errors.setImage(RepDevMain.smallErrorsImage);
  12.876 +		tblErrors = new Table(folder, SWT.NONE);
  12.877 +		createTable(tblErrors);
  12.878 +		errors.setControl(tblErrors);
  12.879 +
  12.880 +		CTabItem tasks = new CTabItem(folder, SWT.NONE);
  12.881 +		tasks.setText("&Tasks");
  12.882 +		tasks.setImage(RepDevMain.smallTasksImage);
  12.883 +		tblTasks = new Table(folder, SWT.NONE);
  12.884 +		createTable(tblTasks);
  12.885 +		tasks.setControl(tblTasks);
  12.886 +
  12.887 +		folder.setSelection(errors);
  12.888 +	}
  12.889 +
  12.890 +	private void createTable(Table tbl) {
  12.891 +		tbl.setHeaderVisible(true);
  12.892 +		tbl.setLinesVisible(true);
  12.893 +
  12.894 +		String[] names = { "Description", "RepGen", "Line" };
  12.895 +		int[] widths = {400,100,50};
  12.896 +		int i = 0;
  12.897 +		
  12.898 +		for (String name : names) {
  12.899 +			TableColumn col = new TableColumn(tbl, SWT.NONE);
  12.900 +			col.setText(name);
  12.901 +			col.setMoveable(false);
  12.902 +			col.pack();
  12.903 +
  12.904 +			col.setWidth(widths[i]);
  12.905 +			
  12.906 +			if (col.getWidth() < MIN_COL_WIDTH)
  12.907 +				col.setWidth(MIN_COL_WIDTH);
  12.908 +			
  12.909 +			
  12.910 +
  12.911 +			col.addControlListener(new ControlAdapter() {
  12.912 +				public void controlResized(ControlEvent e) {
  12.913 +					TableColumn col = (TableColumn) e.widget;
  12.914 +
  12.915 +					if (col.getWidth() < MIN_COL_WIDTH)
  12.916 +						col.setWidth(MIN_COL_WIDTH);
  12.917 +				}
  12.918 +			});
  12.919 +			
  12.920 +			i++;
  12.921 +		}
  12.922 +	}
  12.923 +
  12.924 +	private void createMenuDefault() {
  12.925 +		Menu bar = new Menu(shell, SWT.BAR);
  12.926 +
  12.927 +		MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
  12.928 +		fileItem.setText("&File");
  12.929 +		MenuItem editItem = new MenuItem(bar, SWT.CASCADE);
  12.930 +		editItem.setText("&Edit");
  12.931 +		MenuItem toolsItem = new MenuItem(bar, SWT.CASCADE);
  12.932 +		toolsItem.setText("&Tools");
  12.933 +		MenuItem helpItem = new MenuItem(bar, SWT.CASCADE);
  12.934 +		helpItem.setText("&Help");
  12.935 +
  12.936 +		Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
  12.937 +		fileItem.setMenu(fileMenu);
  12.938 +		Menu toolsMenu = new Menu(shell, SWT.DROP_DOWN);
  12.939 +		toolsItem.setMenu(toolsMenu);
  12.940 +		Menu helpMenu = new Menu(shell, SWT.DROP_DOWN);
  12.941 +		helpItem.setMenu(helpMenu);
  12.942 +		Menu editMenu = new Menu(shell, SWT.DROP_DOWN);
  12.943 +		editItem.setMenu(editMenu);
  12.944 +
  12.945 +		MenuItem fileExit = new MenuItem(fileMenu, SWT.PUSH);
  12.946 +		fileExit.setText("E&xit");
  12.947 +		fileExit.setImage(RepDevMain.smallExitImage);
  12.948 +		fileExit.addSelectionListener(new SelectionAdapter() {
  12.949 +			public void widgetSelected(SelectionEvent arg0) {
  12.950 +				close();
  12.951 +			}
  12.952 +		});
  12.953 +		
  12.954 +		final MenuItem editUndo = new MenuItem(editMenu,SWT.PUSH);
  12.955 +		editUndo.setImage(RepDevMain.smallUndoImage);
  12.956 +		editUndo.setText("Undo Typing\tCTRL+Z");
  12.957 +		editUndo.addSelectionListener(new SelectionAdapter() {
  12.958 +			public void widgetSelected(SelectionEvent arg0) {
  12.959 +				if( mainfolder.getSelectionIndex() == -1)
  12.960 +					return;
  12.961 +				
  12.962 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).undo();
  12.963 +			}
  12.964 +		});
  12.965 +
  12.966 +		final MenuItem editRedo = new MenuItem(editMenu,SWT.PUSH);
  12.967 +		editRedo.setImage(RepDevMain.smallRedoImage);
  12.968 +		editRedo.setText("Redo Typing\tCTRL+Y");
  12.969 +		editRedo.addSelectionListener(new SelectionAdapter() {
  12.970 +			public void widgetSelected(SelectionEvent arg0) {
  12.971 +				if( mainfolder.getSelectionIndex() == -1)
  12.972 +					return;
  12.973 +				
  12.974 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).redo();
  12.975 +			}
  12.976 +		});
  12.977 +		
  12.978 +		new MenuItem(editMenu,SWT.SEPARATOR);
  12.979 +		
  12.980 +		final MenuItem editCut = new MenuItem(editMenu,SWT.PUSH);
  12.981 +		editCut.setImage(RepDevMain.smallCutImage);
  12.982 +		editCut.setText("Cut\tCTRL+X");
  12.983 +		editCut.addSelectionListener(new SelectionAdapter() {
  12.984 +			public void widgetSelected(SelectionEvent arg0) {
  12.985 +				if( mainfolder.getSelectionIndex() == -1)
  12.986 +					return;
  12.987 +				
  12.988 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).getStyledText().cut();
  12.989 +			}
  12.990 +		});
  12.991 +		
  12.992 +		final MenuItem editCopy = new MenuItem(editMenu,SWT.PUSH);
  12.993 +		editCopy.setImage(RepDevMain.smallCopyImage);
  12.994 +		editCopy.setText("Copy\tCTRL+C");
  12.995 +		editCopy.addSelectionListener(new SelectionAdapter() {
  12.996 +			public void widgetSelected(SelectionEvent arg0) {
  12.997 +				if( mainfolder.getSelectionIndex() == -1)
  12.998 +					return;
  12.999 +				
 12.1000 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).getStyledText().copy();
 12.1001 +			}
 12.1002 +		});
 12.1003 +		
 12.1004 +		final MenuItem editPaste = new MenuItem(editMenu,SWT.PUSH);
 12.1005 +		editPaste.setImage(RepDevMain.smallPasteImage);
 12.1006 +		editPaste.setText("Paste\tCTRL+V");
 12.1007 +		editPaste.addSelectionListener(new SelectionAdapter() {
 12.1008 +			public void widgetSelected(SelectionEvent arg0) {
 12.1009 +				if( mainfolder.getSelectionIndex() == -1)
 12.1010 +					return;
 12.1011 +				
 12.1012 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).getStyledText().paste();
 12.1013 +			}
 12.1014 +		});
 12.1015 +		
 12.1016 +		new MenuItem(editMenu,SWT.SEPARATOR);
 12.1017 +		
 12.1018 +		final MenuItem editSelectAll = new MenuItem(editMenu,SWT.PUSH);
 12.1019 +		editSelectAll.setImage(RepDevMain.smallSelectAllImage);
 12.1020 +		editSelectAll.setText("Select All\tCTRL+A");
 12.1021 +		editSelectAll.addSelectionListener(new SelectionAdapter() {
 12.1022 +			public void widgetSelected(SelectionEvent arg0) {
 12.1023 +				if( mainfolder.getSelectionIndex() == -1)
 12.1024 +					return;
 12.1025 +				
 12.1026 +				((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).getStyledText().selectAll();
 12.1027 +			}
 12.1028 +		});
 12.1029 +		
 12.1030 +		new MenuItem(editMenu,SWT.SEPARATOR);
 12.1031 +		
 12.1032 +		final MenuItem editFind = new MenuItem(editMenu,SWT.PUSH);
 12.1033 +		editFind.setImage(RepDevMain.smallFindReplaceImage);
 12.1034 +		editFind.setText("Find/Replace\tCTRL+F");
 12.1035 +		editFind.addSelectionListener(new SelectionAdapter() {
 12.1036 +			public void widgetSelected(SelectionEvent arg0) {
 12.1037 +				if( mainfolder.getSelectionIndex() == -1)
 12.1038 +					return;
 12.1039 +				
 12.1040 +				
 12.1041 +			}
 12.1042 +		});
 12.1043 +		
 12.1044 +		final MenuItem editFindNext = new MenuItem(editMenu,SWT.PUSH);
 12.1045 +		editFindNext.setImage(RepDevMain.smallFindImage);
 12.1046 +		editFindNext.setText("Find Next\tF3");
 12.1047 +		editFindNext.addSelectionListener(new SelectionAdapter() {
 12.1048 +			public void widgetSelected(SelectionEvent arg0) {
 12.1049 +				if( mainfolder.getSelectionIndex() == -1)
 12.1050 +					return;
 12.1051 +				
 12.1052 +				
 12.1053 +			}
 12.1054 +		});
 12.1055 +		
 12.1056 +		
 12.1057 +		editMenu.addMenuListener(new MenuListener(){
 12.1058 +
 12.1059 +			public void menuHidden(MenuEvent e) {
 12.1060 +				// TODO Auto-generated method stub
 12.1061 +				
 12.1062 +			}
 12.1063 +
 12.1064 +			public void menuShown(MenuEvent e) {
 12.1065 +				if(mainfolder.getSelectionIndex() == -1){
 12.1066 +					editRedo.setEnabled(false);
 12.1067 +					editUndo.setEnabled(false);
 12.1068 +					
 12.1069 +					editCut.setEnabled(false);
 12.1070 +					editCopy.setEnabled(false);
 12.1071 +					editPaste.setEnabled(false);
 12.1072 +					
 12.1073 +					editSelectAll.setEnabled(false);
 12.1074 +					editFind.setEnabled(false);
 12.1075 +					editFindNext.setEnabled(false);
 12.1076 +				}
 12.1077 +				else{
 12.1078 +					editCut.setEnabled(true);
 12.1079 +					editCopy.setEnabled(true);
 12.1080 +					editPaste.setEnabled(true);
 12.1081 +					editSelectAll.setEnabled(true);
 12.1082 +					editFind.setEnabled(true);
 12.1083 +					editFindNext.setEnabled(true);
 12.1084 +					
 12.1085 +					if( ((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).canRedo() )
 12.1086 +						editRedo.setEnabled(true);
 12.1087 +					else
 12.1088 +						editRedo.setEnabled(false);
 12.1089 +					
 12.1090 +					if( ((EditorComposite)mainfolder.getItem(mainfolder.getSelectionIndex()).getControl()).canUndo() )
 12.1091 +						editUndo.setEnabled(true);
 12.1092 +					else
 12.1093 +						editUndo.setEnabled(false);
 12.1094 +					
 12.1095 +				}
 12.1096 +			}
 12.1097 +			
 12.1098 +		});
 12.1099 +		
 12.1100 +		MenuItem toolsOptions = new MenuItem(toolsMenu, SWT.PUSH);
 12.1101 +		toolsOptions.setText("&Options");
 12.1102 +		toolsOptions.setImage(RepDevMain.smallOptionsImage);
 12.1103 +		toolsOptions.addSelectionListener(new SelectionAdapter() {
 12.1104 +			public void widgetSelected(SelectionEvent arg0) {
 12.1105 +				showOptions();
 12.1106 +			}
 12.1107 +		});
 12.1108 +
 12.1109 +		MenuItem helpAbout = new MenuItem(helpMenu, SWT.PUSH);
 12.1110 +		helpAbout.setText("&About " + RepDevMain.NAMESTR);
 12.1111 +		helpAbout.addSelectionListener(new SelectionAdapter() {
 12.1112 +			public void widgetSelected(SelectionEvent arg0) {
 12.1113 +				showAboutBox();
 12.1114 +			}
 12.1115 +		});
 12.1116 +
 12.1117 +		shell.setMenuBar(bar);
 12.1118 +	}
 12.1119 +	
 12.1120 +	public void updateErrorList(){
 12.1121 +		tblErrors.clearAll();
 12.1122 +		
 12.1123 +		for( CTabItem item : mainfolder.getItems()){
 12.1124 +			if( item.getControl() != null && ((SymitarFile)item.getData("file")).getType() == FileType.REPGEN )
 12.1125 +			{
 12.1126 +				synchronized(((EditorComposite)item.getControl()).getParser()){
 12.1127 +					for( RepgenParser.Error error : ((EditorComposite)item.getControl()).getParser().getErrorList()){
 12.1128 +						TableItem row = new TableItem(tblErrors,SWT.NONE);
 12.1129 +						row.setText(0, error.getDescription());
 12.1130 +						row.setText(1, error.getFile());
 12.1131 +						row.setText(2, String.valueOf(error.getLine()));
 12.1132 +					}
 12.1133 +				}
 12.1134 +			}
 12.1135 +		}
 12.1136 +	}
 12.1137 +
 12.1138 +	private void showOptions() {
 12.1139 +		OptionsShell.showOptions(shell.getDisplay(), shell);
 12.1140 +	}
 12.1141 +
 12.1142 +	private void showAboutBox() {
 12.1143 +		MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION);
 12.1144 +		dialog.setMessage(RepDevMain.NAMESTR);
 12.1145 +		dialog.setText("About");
 12.1146 +
 12.1147 +		dialog.open();
 12.1148 +	}
 12.1149 +
 12.1150 +	private void close() {
 12.1151 +		shell.dispose();
 12.1152 +	}
 12.1153 +}
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/com/repdev/NewFileShell.java	Fri Jun 01 18:46:53 2007 +0000
    13.3 @@ -0,0 +1,293 @@
    13.4 +package com.repdev;
    13.5 +
    13.6 +import org.eclipse.swt.*;
    13.7 +import java.util.ArrayList;
    13.8 +import org.eclipse.swt.events.*;
    13.9 +import org.eclipse.swt.layout.*;
   13.10 +import org.eclipse.swt.widgets.*;
   13.11 +
   13.12 +public class NewFileShell {
   13.13 +	private static NewFileShell me = new NewFileShell();
   13.14 +	private Shell shell;
   13.15 +	private ArrayList<SymitarFile> result = null;
   13.16 +
   13.17 +	private NewFileShell() {
   13.18 +	}
   13.19 +
   13.20 +	public enum Mode {
   13.21 +		NEW, OPEN, BOTH
   13.22 +	};
   13.23 +
   13.24 +	private void create(Shell parent, final Project project, Mode mode) {
   13.25 +		FormLayout layout = new FormLayout();
   13.26 +		layout.marginTop = 5;
   13.27 +		layout.marginBottom = 5;
   13.28 +		layout.marginLeft = 5;
   13.29 +		layout.marginRight = 5;
   13.30 +		layout.spacing = 5;
   13.31 +
   13.32 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
   13.33 +		shell.setText("Save/Open Symitar File");
   13.34 +		shell.setLayout(layout);
   13.35 +		shell.setMinimumSize(300, 450);
   13.36 +
   13.37 +		final Button createNew = new Button(shell, SWT.RADIO);
   13.38 +		createNew.setText("Create New");
   13.39 +
   13.40 +		final Label nameLabelNew = new Label(shell, SWT.NONE);
   13.41 +		nameLabelNew.setText("Name: ");
   13.42 +
   13.43 +		final Label typeLabelNew = new Label(shell, SWT.NONE);
   13.44 +		typeLabelNew.setText("Type: ");
   13.45 +
   13.46 +		final Text nameTextNew = new Text(shell, SWT.BORDER);
   13.47 +
   13.48 +		final Combo typeComboNew = new Combo(shell, SWT.READ_ONLY);
   13.49 +
   13.50 +		for (FileType type : FileType.values()) {
   13.51 +			typeComboNew.add(type.toString());
   13.52 +		}
   13.53 +
   13.54 +		typeComboNew.select(FileType.REPGEN.ordinal());
   13.55 +
   13.56 +		final Button importExisting = new Button(shell, SWT.RADIO);
   13.57 +		importExisting.setText("Import Existing");
   13.58 +
   13.59 +		final List fileList = new List(shell, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER);
   13.60 +		fileList.setToolTipText("Select the files you want to import into your project. Hold CTRL to select more than one");
   13.61 +
   13.62 +		final Label nameLabelImport = new Label(shell, SWT.NONE);
   13.63 +		nameLabelImport.setText("Name: ");
   13.64 +
   13.65 +		final Label typeLabelImport = new Label(shell, SWT.NONE);
   13.66 +		typeLabelImport.setText("Type: ");
   13.67 +
   13.68 +		final Text nameTextImport = new Text(shell, SWT.BORDER);
   13.69 +		nameTextImport.setToolTipText("Enter the pattern for files to load, standard Symitar wildcards apply ('+')");
   13.70 +
   13.71 +		final Combo typeComboImport = new Combo(shell, SWT.READ_ONLY);
   13.72 +
   13.73 +		// Only letter/help/repgen available here
   13.74 +		typeComboImport.add("REPGEN");
   13.75 +		typeComboImport.add("HELP");
   13.76 +		typeComboImport.add("LETTER");
   13.77 +
   13.78 +		typeComboImport.select(0);
   13.79 +
   13.80 +		final Button search = new Button(shell, SWT.PUSH);
   13.81 +		search.setText("Search");
   13.82 +		search.addSelectionListener(new SelectionAdapter() {
   13.83 +
   13.84 +			public void widgetSelected(SelectionEvent e) {
   13.85 +				fileList.removeAll();
   13.86 +				fileList.select(-1);
   13.87 +				SymitarSession session = RepDevMain.SYMITAR_SESSIONS.get(project.getSym());
   13.88 +
   13.89 +				for (SymitarFile file : session.getFileList(FileType.valueOf(typeComboImport.getText()), nameTextImport.getText())) {
   13.90 +					fileList.add(file.getName());
   13.91 +				}
   13.92 +			}
   13.93 +
   13.94 +		});
   13.95 +
   13.96 +		final Button add = new Button(shell, SWT.PUSH);
   13.97 +		add.setText("Create &File");
   13.98 +		add.addSelectionListener(new SelectionAdapter() {
   13.99 +			public void widgetSelected(SelectionEvent e) {
  13.100 +				result = new ArrayList<SymitarFile>();
  13.101 +
  13.102 +				if (createNew.getSelection()) {
  13.103 +					if (nameTextNew.getText().trim().equals("")) {
  13.104 +						MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
  13.105 +						dialog.setText("Input Error");
  13.106 +						dialog.setMessage("You must enter a valid name for your file.");
  13.107 +						dialog.open();
  13.108 +						return;
  13.109 +					}
  13.110 +
  13.111 +					result.add(new SymitarFile(nameTextNew.getText().trim(), FileType.valueOf(typeComboNew.getText())));
  13.112 +				}
  13.113 +				if (importExisting.getSelection()) {
  13.114 +					for (String line : fileList.getSelection()) {
  13.115 +						result.add(new SymitarFile(line, FileType.valueOf(typeComboImport.getText())));
  13.116 +					}
  13.117 +				}
  13.118 +
  13.119 +				shell.dispose();
  13.120 +			}
  13.121 +		});
  13.122 +
  13.123 +		fileList.addSelectionListener(new SelectionAdapter() {
  13.124 +			public void widgetDefaultSelected(SelectionEvent e) {
  13.125 +				if (fileList.getSelectionCount() == 1) {
  13.126 +					add.notifyListeners(SWT.Selection, null);
  13.127 +				}
  13.128 +			}
  13.129 +		});
  13.130 +
  13.131 +		final Button cancel = new Button(shell, SWT.PUSH);
  13.132 +		cancel.setText("&Cancel");
  13.133 +		cancel.addSelectionListener(new SelectionAdapter() {
  13.134 +			public void widgetSelected(SelectionEvent e) {
  13.135 +				result = null;
  13.136 +				shell.dispose();
  13.137 +			}
  13.138 +		});
  13.139 +
  13.140 +		// These three listeners are down here so that everything is defined UI
  13.141 +		// wises
  13.142 +		createNew.addSelectionListener(new SelectionAdapter() {
  13.143 +			public void widgetSelected(SelectionEvent e) {
  13.144 +				for (Control control : shell.getChildren())
  13.145 +					control.setEnabled(false);
  13.146 +
  13.147 +				nameLabelNew.setEnabled(true);
  13.148 +				nameTextNew.setEnabled(true);
  13.149 +				typeLabelNew.setEnabled(true);
  13.150 +				typeComboNew.setEnabled(true);
  13.151 +
  13.152 +				createNew.setEnabled(true);
  13.153 +				importExisting.setEnabled(true);
  13.154 +				add.setEnabled(true);
  13.155 +				cancel.setEnabled(true);
  13.156 +
  13.157 +				add.setText("Create File");
  13.158 +				shell.layout();
  13.159 +				add.pack();
  13.160 +				shell.setDefaultButton(add);
  13.161 +			}
  13.162 +		});
  13.163 +
  13.164 +		importExisting.addSelectionListener(new SelectionAdapter() {
  13.165 +			public void widgetSelected(SelectionEvent e) {
  13.166 +				for (Control control : shell.getChildren())
  13.167 +					control.setEnabled(false);
  13.168 +
  13.169 +				fileList.setEnabled(true);
  13.170 +				nameLabelImport.setEnabled(true);
  13.171 +				nameTextImport.setEnabled(true);
  13.172 +				typeLabelImport.setEnabled(true);
  13.173 +				typeComboImport.setEnabled(true);
  13.174 +				search.setEnabled(true);
  13.175 +
  13.176 +				createNew.setEnabled(true);
  13.177 +				importExisting.setEnabled(true);
  13.178 +				add.setEnabled(true);
  13.179 +				cancel.setEnabled(true);
  13.180 +
  13.181 +				add.setText("Import File(s)");
  13.182 +				shell.layout();
  13.183 +
  13.184 +				shell.setDefaultButton(search);
  13.185 +			}
  13.186 +		});
  13.187 +
  13.188 +		typeComboImport.addSelectionListener(new SelectionAdapter() {
  13.189 +			public void widgetSelected(SelectionEvent e) {
  13.190 +				fileList.removeAll();
  13.191 +			}
  13.192 +		});
  13.193 +
  13.194 +		createNew.setSelection(true);
  13.195 +		importExisting.setSelection(false);
  13.196 +
  13.197 +		createNew.notifyListeners(SWT.Selection, new Event());
  13.198 +
  13.199 +		FormData data = new FormData();
  13.200 +
  13.201 +		data.left = new FormAttachment(0);
  13.202 +		data.right = new FormAttachment(100);
  13.203 +		data.top = new FormAttachment(0);
  13.204 +		createNew.setLayoutData(data);
  13.205 +
  13.206 +		data = new FormData();
  13.207 +		data.left = new FormAttachment(createNew, 5, SWT.LEFT);
  13.208 +		data.top = new FormAttachment(createNew);
  13.209 +		nameLabelNew.setLayoutData(data);
  13.210 +
  13.211 +		data = new FormData();
  13.212 +		data.left = new FormAttachment(nameLabelNew);
  13.213 +		data.top = new FormAttachment(createNew);
  13.214 +		data.right = new FormAttachment(100);
  13.215 +		nameTextNew.setLayoutData(data);
  13.216 +
  13.217 +		data = new FormData();
  13.218 +		data.left = new FormAttachment(nameLabelNew, 0, SWT.LEFT);
  13.219 +		data.top = new FormAttachment(nameTextNew);
  13.220 +		typeLabelNew.setLayoutData(data);
  13.221 +
  13.222 +		data = new FormData();
  13.223 +		data.left = new FormAttachment(typeLabelNew);
  13.224 +		data.top = new FormAttachment(nameTextNew);
  13.225 +		data.right = new FormAttachment(100);
  13.226 +		typeComboNew.setLayoutData(data);
  13.227 +
  13.228 +		data = new FormData();
  13.229 +		data.left = new FormAttachment(0);
  13.230 +		data.top = new FormAttachment(typeComboNew);
  13.231 +		data.right = new FormAttachment(100);
  13.232 +		importExisting.setLayoutData(data);
  13.233 +
  13.234 +		data = new FormData();
  13.235 +		data.left = new FormAttachment(importExisting, 5, SWT.LEFT);
  13.236 +		data.top = new FormAttachment(importExisting);
  13.237 +		typeLabelImport.setLayoutData(data);
  13.238 +
  13.239 +		data = new FormData();
  13.240 +		data.top = new FormAttachment(importExisting);
  13.241 +		data.left = new FormAttachment(typeLabelImport);
  13.242 +		data.right = new FormAttachment(100);
  13.243 +		typeComboImport.setLayoutData(data);
  13.244 +
  13.245 +		data = new FormData();
  13.246 +		data.left = new FormAttachment(typeLabelImport, 0, SWT.LEFT);
  13.247 +		data.top = new FormAttachment(typeComboImport);
  13.248 +		data.bottom = new FormAttachment(search);
  13.249 +		data.right = new FormAttachment(100);
  13.250 +		fileList.setLayoutData(data);
  13.251 +
  13.252 +		data = new FormData();
  13.253 +		data.left = new FormAttachment(fileList, 0, SWT.LEFT);
  13.254 +		data.bottom = new FormAttachment(cancel);
  13.255 +		nameLabelImport.setLayoutData(data);
  13.256 +
  13.257 +		data = new FormData();
  13.258 +		data.left = new FormAttachment(nameLabelImport);
  13.259 +		data.bottom = new FormAttachment(cancel);
  13.260 +		data.right = new FormAttachment(search);
  13.261 +		nameTextImport.setLayoutData(data);
  13.262 +
  13.263 +		data = new FormData();
  13.264 +		data.bottom = new FormAttachment(cancel);
  13.265 +		data.right = new FormAttachment(100);
  13.266 +		search.setLayoutData(data);
  13.267 +
  13.268 +		data = new FormData();
  13.269 +		data.right = new FormAttachment(100);
  13.270 +		data.bottom = new FormAttachment(100);
  13.271 +		cancel.setLayoutData(data);
  13.272 +
  13.273 +		data = new FormData();
  13.274 +		data.right = new FormAttachment(cancel);
  13.275 +		data.bottom = new FormAttachment(100);
  13.276 +		add.setLayoutData(data);
  13.277 +
  13.278 +		result = null;
  13.279 +		shell.pack();
  13.280 +		shell.open();
  13.281 +	}
  13.282 +
  13.283 +	// returns -1 on cancel
  13.284 +
  13.285 +	public static ArrayList<SymitarFile> getNewFile(Display display, Shell parent, Project project, Mode mode) {
  13.286 +
  13.287 +		me.create(parent, project, mode);
  13.288 +
  13.289 +		while (!me.shell.isDisposed()) {
  13.290 +			if (!display.readAndDispatch())
  13.291 +				display.sleep();
  13.292 +		}
  13.293 +
  13.294 +		return me.result;
  13.295 +	}
  13.296 +}
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/com/repdev/NewProjShell.java	Fri Jun 01 18:46:53 2007 +0000
    14.3 @@ -0,0 +1,99 @@
    14.4 +package com.repdev;
    14.5 +
    14.6 +import org.eclipse.swt.*;
    14.7 +import org.eclipse.swt.events.*;
    14.8 +import org.eclipse.swt.layout.*;
    14.9 +import org.eclipse.swt.widgets.*;
   14.10 +
   14.11 +public class NewProjShell {
   14.12 +	private static NewProjShell me = new NewProjShell();
   14.13 +	private Shell shell;
   14.14 +	private String result;
   14.15 +
   14.16 +	private NewProjShell() {
   14.17 +	}
   14.18 +
   14.19 +	private void create(Shell parent, int sym) {
   14.20 +		FormLayout layout = new FormLayout();
   14.21 +		layout.marginTop = 5;
   14.22 +		layout.marginBottom = 5;
   14.23 +		layout.marginLeft = 5;
   14.24 +		layout.marginRight = 5;
   14.25 +		layout.spacing = 5;
   14.26 +
   14.27 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
   14.28 +		shell.setText("Create new project");
   14.29 +		shell.setLayout(layout);
   14.30 +
   14.31 +		Label questionImage = new Label(shell, SWT.NONE);
   14.32 +		questionImage.setImage(shell.getDisplay().getSystemImage(SWT.ICON_QUESTION));
   14.33 +
   14.34 +		Label lbl = new Label(shell, SWT.NONE);
   14.35 +		lbl.setText("What is the name of the project that you want to create in Sym " + sym + "?");
   14.36 +
   14.37 +		final Text txt = new Text(shell, SWT.BORDER);
   14.38 +
   14.39 +		Button add = new Button(shell, SWT.PUSH);
   14.40 +		add.setText("Create &Project");
   14.41 +		add.addSelectionListener(new SelectionAdapter() {
   14.42 +			public void widgetSelected(SelectionEvent e) {
   14.43 +				result = txt.getText();
   14.44 +				shell.dispose();
   14.45 +			}
   14.46 +		});
   14.47 +		shell.setDefaultButton(add);
   14.48 +
   14.49 +		Button cancel = new Button(shell, SWT.PUSH);
   14.50 +		cancel.setText("&Cancel");
   14.51 +		cancel.addSelectionListener(new SelectionAdapter() {
   14.52 +			public void widgetSelected(SelectionEvent e) {
   14.53 +				shell.dispose();
   14.54 +			}
   14.55 +		});
   14.56 +
   14.57 +		FormData frmImg = new FormData();
   14.58 +		frmImg.left = new FormAttachment(0);
   14.59 +		frmImg.top = new FormAttachment(0);
   14.60 +		questionImage.setLayoutData(frmImg);
   14.61 +
   14.62 +		FormData frmLbl = new FormData();
   14.63 +		frmLbl.top = new FormAttachment(0);
   14.64 +		frmLbl.left = new FormAttachment(questionImage);
   14.65 +		frmLbl.right = new FormAttachment(100);
   14.66 +		lbl.setLayoutData(frmLbl);
   14.67 +
   14.68 +		FormData frmTxt = new FormData();
   14.69 +		frmTxt.top = new FormAttachment(lbl);
   14.70 +		frmTxt.left = new FormAttachment(lbl, 5, SWT.LEFT);
   14.71 +		frmTxt.right = new FormAttachment(100);
   14.72 +		txt.setLayoutData(frmTxt);
   14.73 +
   14.74 +		FormData frmOK = new FormData();
   14.75 +		frmOK.top = new FormAttachment(txt);
   14.76 +		frmOK.right = new FormAttachment(cancel);
   14.77 +		frmOK.bottom = new FormAttachment(100);
   14.78 +		add.setLayoutData(frmOK);
   14.79 +
   14.80 +		FormData frmCancel = new FormData();
   14.81 +		frmCancel.top = new FormAttachment(txt);
   14.82 +		frmCancel.right = new FormAttachment(100);
   14.83 +		frmCancel.bottom = new FormAttachment(100);
   14.84 +		cancel.setLayoutData(frmCancel);
   14.85 +
   14.86 +		result = null;
   14.87 +		shell.pack();
   14.88 +		shell.open();
   14.89 +	}
   14.90 +
   14.91 +	// returns -1 on cancel
   14.92 +	public static String askForName(Display display, Shell parent, int sym) {
   14.93 +		me.create(parent, sym);
   14.94 +
   14.95 +		while (!me.shell.isDisposed()) {
   14.96 +			if (!display.readAndDispatch())
   14.97 +				display.sleep();
   14.98 +		}
   14.99 +
  14.100 +		return me.result;
  14.101 +	}
  14.102 +}
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/com/repdev/OptionsShell.java	Fri Jun 01 18:46:53 2007 +0000
    15.3 @@ -0,0 +1,200 @@
    15.4 +package com.repdev;
    15.5 +
    15.6 +import org.eclipse.swt.*;
    15.7 +import org.eclipse.swt.events.*;
    15.8 +import org.eclipse.swt.layout.FormAttachment;
    15.9 +import org.eclipse.swt.layout.FormData;
   15.10 +import org.eclipse.swt.layout.FormLayout;
   15.11 +import org.eclipse.swt.widgets.*;
   15.12 +
   15.13 +public class OptionsShell {
   15.14 +	Shell shell;
   15.15 +	private static OptionsShell me = new OptionsShell();
   15.16 +	private Button telnetRadio, testRadio;
   15.17 +	private Text serverText, tabText;
   15.18 +	private Label serverLabel;
   15.19 +
   15.20 +	private void create(Shell parent) {
   15.21 +		FormLayout layout = new FormLayout();
   15.22 +		layout.marginTop = 5;
   15.23 +		layout.marginBottom = 5;
   15.24 +		layout.marginLeft = 5;
   15.25 +		layout.marginRight = 5;
   15.26 +		layout.spacing = 5;
   15.27 +
   15.28 +		FormData data = new FormData();
   15.29 +
   15.30 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.CLOSE | SWT.TITLE | SWT.RESIZE);
   15.31 +		shell.setText("Global Options");
   15.32 +		shell.setLayout(layout);
   15.33 +
   15.34 +		Group serverGroup = new Group(shell, SWT.NONE);
   15.35 +		serverGroup.setText("Symitar Connection Options");
   15.36 +		layout = new FormLayout();
   15.37 +		layout.marginTop = 5;
   15.38 +		layout.marginBottom = 5;
   15.39 +		layout.marginLeft = 5;
   15.40 +		layout.marginRight = 5;
   15.41 +		layout.spacing = 5;
   15.42 +		serverGroup.setLayout(layout);
   15.43 +
   15.44 +		telnetRadio = new Button(serverGroup, SWT.RADIO);
   15.45 +		telnetRadio.setText("Direct Symitar Session");
   15.46 +		telnetRadio.addSelectionListener(new SelectionAdapter() {
   15.47 +			public void widgetSelected(SelectionEvent e) {
   15.48 +				redraw();
   15.49 +			}
   15.50 +		});
   15.51 +
   15.52 +		testRadio = new Button(serverGroup, SWT.RADIO);
   15.53 +		testRadio.setText("Local Symitar Emulation");
   15.54 +		testRadio.addSelectionListener(new SelectionAdapter() {
   15.55 +			public void widgetSelected(SelectionEvent e) {
   15.56 +				redraw();
   15.57 +			}
   15.58 +		});
   15.59 +
   15.60 +		if (Config.getServer().equals("test")) {
   15.61 +			testRadio.setSelection(true);
   15.62 +		} else
   15.63 +			telnetRadio.setSelection(true);
   15.64 +
   15.65 +		serverLabel = new Label(serverGroup, SWT.NONE);
   15.66 +		serverLabel.setText("Symitar Server IP Address:");
   15.67 +
   15.68 +		serverText = new Text(serverGroup, SWT.SINGLE | SWT.BORDER);
   15.69 +		serverText.setText(Config.getServer());
   15.70 +
   15.71 +		Button cancel = new Button(shell, SWT.PUSH);
   15.72 +		cancel.setText("Cancel");
   15.73 +		cancel.addSelectionListener(new SelectionAdapter() {
   15.74 +			public void widgetSelected(SelectionEvent e) {
   15.75 +				shell.close();
   15.76 +			}
   15.77 +		});
   15.78 +
   15.79 +		Button ok = new Button(shell, SWT.PUSH);
   15.80 +		ok.setText("Save Settings");
   15.81 +		ok.addSelectionListener(new SelectionAdapter() {
   15.82 +			public void widgetSelected(SelectionEvent e) {
   15.83 +				try {
   15.84 +					Config.setTabSize(Integer.valueOf(tabText.getText()));
   15.85 +				} catch (Exception ex) {
   15.86 +					MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
   15.87 +					dialog.setText("Input Error");
   15.88 +					dialog.setMessage("Tab Size is incorrect!");
   15.89 +					dialog.open();
   15.90 +
   15.91 +					return;
   15.92 +				}
   15.93 +
   15.94 +				if (testRadio.getSelection())
   15.95 +					Config.setServer("test");
   15.96 +				else
   15.97 +					Config.setServer(serverText.getText());
   15.98 +
   15.99 +				shell.close();
  15.100 +			}
  15.101 +		});
  15.102 +
  15.103 +		Group editorGroup = new Group(shell, SWT.NONE);
  15.104 +		editorGroup.setText("Editor Options");
  15.105 +		layout = new FormLayout();
  15.106 +		layout.marginTop = 5;
  15.107 +		layout.marginBottom = 5;
  15.108 +		layout.marginLeft = 5;
  15.109 +		layout.marginRight = 5;
  15.110 +		layout.spacing = 5;
  15.111 +		editorGroup.setLayout(layout);
  15.112 +
  15.113 +		Label tabLabel = new Label(editorGroup, SWT.NONE);
  15.114 +		tabLabel.setText("Tab Width (0 for Regular Tabs):");
  15.115 +
  15.116 +		tabText = new Text(editorGroup, SWT.BORDER);
  15.117 +		tabText.setText(String.valueOf(Config.getTabSize()));
  15.118 +
  15.119 +		data = new FormData();
  15.120 +		data.left = new FormAttachment(0);
  15.121 +		data.right = new FormAttachment(100);
  15.122 +		data.top = new FormAttachment(0);
  15.123 +		data.bottom = new FormAttachment(editorGroup);
  15.124 +		serverGroup.setLayoutData(data);
  15.125 +
  15.126 +		data = new FormData();
  15.127 +		data.left = new FormAttachment(0);
  15.128 +		data.right = new FormAttachment(100);
  15.129 +		data.top = new FormAttachment(serverGroup);
  15.130 +		data.bottom = new FormAttachment(cancel);
  15.131 +		editorGroup.setLayoutData(data);
  15.132 +
  15.133 +		data = new FormData();
  15.134 +		data.left = new FormAttachment(0);
  15.135 +		data.top = new FormAttachment(0);
  15.136 +		telnetRadio.setLayoutData(data);
  15.137 +
  15.138 +		data = new FormData();
  15.139 +		data.left = new FormAttachment(telnetRadio);
  15.140 +		data.top = new FormAttachment(0);
  15.141 +		testRadio.setLayoutData(data);
  15.142 +
  15.143 +		data = new FormData();
  15.144 +		data.left = new FormAttachment(0);
  15.145 +		data.top = new FormAttachment(telnetRadio);
  15.146 +		serverLabel.setLayoutData(data);
  15.147 +
  15.148 +		data = new FormData();
  15.149 +		data.left = new FormAttachment(serverLabel);
  15.150 +		data.top = new FormAttachment(telnetRadio);
  15.151 +		data.right = new FormAttachment(100);
  15.152 +		serverText.setLayoutData(data);
  15.153 +
  15.154 +		data = new FormData();
  15.155 +		data.left = new FormAttachment(0);
  15.156 +		data.top = new FormAttachment(0);
  15.157 +		tabLabel.setLayoutData(data);
  15.158 +
  15.159 +		data = new FormData();
  15.160 +		data.left = new FormAttachment(tabLabel);
  15.161 +		data.right = new FormAttachment(100);
  15.162 +		data.top = new FormAttachment(0);
  15.163 +		tabText.setLayoutData(data);
  15.164 +
  15.165 +		data = new FormData();
  15.166 +		data.right = new FormAttachment(100);
  15.167 +		data.bottom = new FormAttachment(100);
  15.168 +		cancel.setLayoutData(data);
  15.169 +
  15.170 +		data = new FormData();
  15.171 +		data.bottom = new FormAttachment(100);
  15.172 +		data.right = new FormAttachment(cancel);
  15.173 +		ok.setLayoutData(data);
  15.174 +
  15.175 +		redraw();
  15.176 +
  15.177 +		shell.setDefaultButton(ok);
  15.178 +		shell.pack();
  15.179 +		shell.open();
  15.180 +	}
  15.181 +
  15.182 +	private void redraw() {
  15.183 +		if (telnetRadio.getSelection()) {
  15.184 +			serverText.setEnabled(true);
  15.185 +			serverLabel.setEnabled(true);
  15.186 +		} else if (testRadio.getSelection()) {
  15.187 +			serverText.setEnabled(false);
  15.188 +			serverLabel.setEnabled(false);
  15.189 +			serverText.setText("");
  15.190 +		}
  15.191 +
  15.192 +	}
  15.193 +
  15.194 +	public static void showOptions(Display display, Shell parent) {
  15.195 +		me.create(parent);
  15.196 +
  15.197 +		while (!me.shell.isDisposed()) {
  15.198 +			if (!display.readAndDispatch())
  15.199 +				display.sleep();
  15.200 +		}
  15.201 +
  15.202 +	}
  15.203 +}
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/com/repdev/Project.java	Fri Jun 01 18:46:53 2007 +0000
    16.3 @@ -0,0 +1,59 @@
    16.4 +package com.repdev;
    16.5 +
    16.6 +import java.util.ArrayList;
    16.7 +
    16.8 +public class Project {
    16.9 +
   16.10 +	private ArrayList<SymitarFile> files = new ArrayList<SymitarFile>();
   16.11 +	private String name;
   16.12 +	private int sym;
   16.13 +
   16.14 +	public Project(String name, int sym) {
   16.15 +		this.name = name;
   16.16 +		this.sym = sym;
   16.17 +	}
   16.18 +
   16.19 +	public int getSym() {
   16.20 +		return sym;
   16.21 +	}
   16.22 +
   16.23 +	public String getName() {
   16.24 +		return name;
   16.25 +	}
   16.26 +
   16.27 +	public void setName(String name) {
   16.28 +		this.name = name;
   16.29 +	}
   16.30 +
   16.31 +	public ArrayList<SymitarFile> getFiles() {
   16.32 +		return files;
   16.33 +	}
   16.34 +
   16.35 +	public boolean hasFile(SymitarFile file) {
   16.36 +		for (SymitarFile cFile : files)
   16.37 +			if (cFile.getName().equals(file.getName()) && cFile.getType().equals(file.getType()))
   16.38 +				return true;
   16.39 +
   16.40 +		return false;
   16.41 +	}
   16.42 +
   16.43 +	public void addFile(SymitarFile file) {
   16.44 +		if (!hasFile(file))
   16.45 +			files.add(file);
   16.46 +	}
   16.47 +
   16.48 +	public void removeFile(SymitarFile file, boolean delete) {
   16.49 +		if (!hasFile(file))
   16.50 +			return;
   16.51 +
   16.52 +		files.remove(file);
   16.53 +
   16.54 +		if (delete)
   16.55 +			RepDevMain.SYMITAR_SESSIONS.get(sym).removeFile(file);
   16.56 +	}
   16.57 +
   16.58 +	public String toString() {
   16.59 +		return name;
   16.60 +	}
   16.61 +
   16.62 +}
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/com/repdev/ProjectManager.java	Fri Jun 01 18:46:53 2007 +0000
    17.3 @@ -0,0 +1,124 @@
    17.4 +package com.repdev;
    17.5 +
    17.6 +import java.util.ArrayList;
    17.7 +import java.util.*;
    17.8 +
    17.9 +public class ProjectManager {
   17.10 +	private static HashMap<Integer, ArrayList<Project>> symProjects = new HashMap<Integer, ArrayList<Project>>();
   17.11 +
   17.12 +	public static void saveAllProjects() {
   17.13 +		for (Integer sym : symProjects.keySet())
   17.14 +			saveProjects(sym);
   17.15 +	}
   17.16 +
   17.17 +	public static void removeProject(Project project, boolean delete) {
   17.18 +		int sym = project.getSym();
   17.19 +		ArrayList<Project> projects = getProjects(sym);
   17.20 +		int i = 0;
   17.21 +
   17.22 +		for (Project cur : projects) {
   17.23 +			if (cur.getName().equals(project.getName()))
   17.24 +				break;
   17.25 +
   17.26 +			i++;
   17.27 +		}
   17.28 +
   17.29 +		projects.remove(i);
   17.30 +
   17.31 +		if (delete)
   17.32 +			for (SymitarFile file : project.getFiles())
   17.33 +				RepDevMain.SYMITAR_SESSIONS.get(sym).removeFile(file);
   17.34 +
   17.35 +	}
   17.36 +
   17.37 +	public static void saveProjects(int sym) {
   17.38 +		StringBuilder sb = new StringBuilder();
   17.39 +		ArrayList<Project> myProjects = symProjects.get(sym);
   17.40 +
   17.41 +		if (myProjects == null)
   17.42 +			return;
   17.43 +
   17.44 +		for (Project proj : myProjects) {
   17.45 +			sb.append("PROJECT");
   17.46 +			sb.append("\t");
   17.47 +			sb.append(proj.getName());
   17.48 +			sb.append("\r\n");
   17.49 +
   17.50 +			for (SymitarFile file : proj.getFiles()) {
   17.51 +				sb.append("FILE");
   17.52 +				sb.append("\t");
   17.53 +				sb.append(file.getType());
   17.54 +				sb.append("\t");
   17.55 +				sb.append(file.getName());
   17.56 +				sb.append("\r\n");
   17.57 +			}
   17.58 +
   17.59 +			sb.append("\r\n");
   17.60 +		}
   17.61 +
   17.62 +		RepDevMain.SYMITAR_SESSIONS.get(sym).saveFile(getProjectFile(sym), sb.toString());
   17.63 +	}
   17.64 +
   17.65 +	public static Project createProject(String name, int sym) {
   17.66 +		Project project = new Project(name, sym);
   17.67 +		getProjects(sym).add(project);
   17.68 +
   17.69 +		return project;
   17.70 +	}
   17.71 +
   17.72 +	/**
   17.73 +	 * Creates a file name from an open symitar session based on user id
   17.74 +	 * 
   17.75 +	 * @param session
   17.76 +	 * @return
   17.77 +	 */
   17.78 +	private static SymitarFile getProjectFile(int sym) {
   17.79 +		SymitarSession session = RepDevMain.SYMITAR_SESSIONS.get(sym);
   17.80 +		String prefix = "tester";
   17.81 +
   17.82 +		if (session.getUserID() == null || session.getUserID().length() >= 3)
   17.83 +			prefix = session.userID.substring(0, 3);
   17.84 +
   17.85 +		return new SymitarFile("repdev." + prefix + "projects", FileType.REPGEN);
   17.86 +	}
   17.87 +
   17.88 +	private static void loadProjects(int sym) {
   17.89 +		ArrayList<Project> myProjs = new ArrayList<Project>();
   17.90 +		String dataTemp = RepDevMain.SYMITAR_SESSIONS.get(sym).getFile(getProjectFile(sym));
   17.91 +		Project curProject = null;
   17.92 +
   17.93 +		if (dataTemp == null) {
   17.94 +			symProjects.put(sym, myProjs);
   17.95 +			return;
   17.96 +		}
   17.97 +
   17.98 +		String[] data = dataTemp.trim().split("\n");
   17.99 +
  17.100 +		for (String line : data) {
  17.101 +			String[] parts = line.split("\t");
  17.102 +
  17.103 +			if (parts[0].equals("PROJECT")) {
  17.104 +				if (curProject != null)
  17.105 +					myProjs.add(curProject);
  17.106 +
  17.107 +				curProject = new Project(parts[1], sym);
  17.108 +			} else if (parts[0].equals("FILE")) {
  17.109 +				curProject.addFile(new SymitarFile(parts[2].trim(), FileType.valueOf(parts[1])));
  17.110 +			}
  17.111 +		}
  17.112 +
  17.113 +		if (curProject != null)
  17.114 +			myProjs.add(curProject);
  17.115 +
  17.116 +		symProjects.put(sym, myProjs);
  17.117 +	}
  17.118 +
  17.119 +	public static ArrayList<Project> getProjects(int sym) {
  17.120 +		if (symProjects.get(sym) == null) {
  17.121 +			loadProjects(sym);
  17.122 +		}
  17.123 +
  17.124 +		return symProjects.get(sym);
  17.125 +	}
  17.126 +
  17.127 +}
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/com/repdev/QueueInfo.java	Fri Jun 01 18:46:53 2007 +0000
    18.3 @@ -0,0 +1,25 @@
    18.4 +package com.repdev;
    18.5 +
    18.6 +import java.util.ArrayList;
    18.7 +
    18.8 +public class QueueInfo {
    18.9 +	private int num;
   18.10 +	private ArrayList<String> queue;
   18.11 +
   18.12 +	public int getNum() {
   18.13 +		return num;
   18.14 +	}
   18.15 +
   18.16 +	public void setNum(int num) {
   18.17 +		this.num = num;
   18.18 +	}
   18.19 +
   18.20 +	public ArrayList<String> getQueue() {
   18.21 +		return queue;
   18.22 +	}
   18.23 +
   18.24 +	public void setQueue(ArrayList<String> queue) {
   18.25 +		this.queue = queue;
   18.26 +	}
   18.27 +
   18.28 +}
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/com/repdev/RemFileShell.java	Fri Jun 01 18:46:53 2007 +0000
    19.3 @@ -0,0 +1,118 @@
    19.4 +package com.repdev;
    19.5 +
    19.6 +import org.eclipse.swt.*;
    19.7 +import org.eclipse.swt.events.*;
    19.8 +import org.eclipse.swt.layout.*;
    19.9 +import org.eclipse.swt.widgets.*;
   19.10 +
   19.11 +public class RemFileShell {
   19.12 +	private static RemFileShell me = new RemFileShell();
   19.13 +	private Shell shell;
   19.14 +	private Result result = Result.CANCEL;
   19.15 +
   19.16 +	private RemFileShell() {
   19.17 +	}
   19.18 +
   19.19 +	public enum Result {
   19.20 +		OK_DELETE, OK_KEEP, CANCEL
   19.21 +	};
   19.22 +
   19.23 +	private void create(Shell parent, Project proj, SymitarFile file) {
   19.24 +		FormLayout layout = new FormLayout();
   19.25 +		layout.marginTop = 5;
   19.26 +		layout.marginBottom = 5;
   19.27 +		layout.marginLeft = 5;
   19.28 +		layout.marginRight = 5;
   19.29 +		layout.spacing = 5;
   19.30 +
   19.31 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
   19.32 +		shell.setText("Remove File");
   19.33 +		shell.setLayout(layout);
   19.34 +
   19.35 +		Label questionImage = new Label(shell, SWT.NONE);
   19.36 +		questionImage.setImage(shell.getDisplay().getSystemImage(SWT.ICON_QUESTION));
   19.37 +
   19.38 +		Label lbl = new Label(shell, SWT.NONE);
   19.39 +		lbl.setText("Are you sure you want to remove file '" + file.getName() + "' from project '" + proj.getName() + "'?");
   19.40 +
   19.41 +		final Button radioDelete = new Button(shell, SWT.RADIO);
   19.42 +		radioDelete.setText("Also delete file from server");
   19.43 +
   19.44 +		final Button radioKeep = new Button(shell, SWT.RADIO);
   19.45 +		radioKeep.setText("Do not delete file");
   19.46 +		radioKeep.setSelection(true);
   19.47 +
   19.48 +		Button add = new Button(shell, SWT.PUSH);
   19.49 +		add.setText("Remove &File from Project");
   19.50 +		add.addSelectionListener(new SelectionAdapter() {
   19.51 +			public void widgetSelected(SelectionEvent e) {
   19.52 +				if (radioKeep.getSelection())
   19.53 +					result = Result.OK_KEEP;
   19.54 +				else if (radioDelete.getSelection())
   19.55 +					result = Result.OK_DELETE;
   19.56 +
   19.57 +				shell.dispose();
   19.58 +			}
   19.59 +		});
   19.60 +
   19.61 +		Button cancel = new Button(shell, SWT.PUSH);
   19.62 +		cancel.setText("&Cancel");
   19.63 +		cancel.addSelectionListener(new SelectionAdapter() {
   19.64 +			public void widgetSelected(SelectionEvent e) {
   19.65 +				result = Result.CANCEL;
   19.66 +				shell.dispose();
   19.67 +			}
   19.68 +		});
   19.69 +
   19.70 +		FormData frmImg = new FormData();
   19.71 +		frmImg.left = new FormAttachment(0);
   19.72 +		frmImg.top = new FormAttachment(0);
   19.73 +		questionImage.setLayoutData(frmImg);
   19.74 +
   19.75 +		FormData frmLbl = new FormData();
   19.76 +		frmLbl.top = new FormAttachment(0, 10);
   19.77 +		frmLbl.left = new FormAttachment(questionImage);
   19.78 +		frmLbl.right = new FormAttachment(100);
   19.79 +		lbl.setLayoutData(frmLbl);
   19.80 +
   19.81 +		FormData frmRadioK = new FormData();
   19.82 +		frmRadioK.left = new FormAttachment(0);
   19.83 +		frmRadioK.right = new FormAttachment(100);
   19.84 +		frmRadioK.top = new FormAttachment(radioDelete);
   19.85 +		radioKeep.setLayoutData(frmRadioK);
   19.86 +
   19.87 +		FormData frmRadioD = new FormData();
   19.88 +		frmRadioD.left = new FormAttachment(0);
   19.89 +		frmRadioD.right = new FormAttachment(100);
   19.90 +		frmRadioD.top = new FormAttachment(questionImage, 15);
   19.91 +		radioDelete.setLayoutData(frmRadioD);
   19.92 +
   19.93 +		FormData frmOK = new FormData();
   19.94 +		frmOK.top = new FormAttachment(radioKeep);
   19.95 +		frmOK.right = new FormAttachment(cancel);
   19.96 +		frmOK.bottom = new FormAttachment(100);
   19.97 +		add.setLayoutData(frmOK);
   19.98 +
   19.99 +		FormData frmCancel = new FormData();
  19.100 +		frmCancel.top = new FormAttachment(radioKeep);
  19.101 +		frmCancel.right = new FormAttachment(100);
  19.102 +		frmCancel.bottom = new FormAttachment(100);
  19.103 +		cancel.setLayoutData(frmCancel);
  19.104 +
  19.105 +		result = null;
  19.106 +		shell.pack();
  19.107 +		shell.open();
  19.108 +	}
  19.109 +
  19.110 +	// returns -1 on cancel
  19.111 +	public static Result confirm(Display display, Shell parent, Project proj, SymitarFile file) {
  19.112 +		me.create(parent, proj, file);
  19.113 +
  19.114 +		while (!me.shell.isDisposed()) {
  19.115 +			if (!display.readAndDispatch())
  19.116 +				display.sleep();
  19.117 +		}
  19.118 +
  19.119 +		return me.result;
  19.120 +	}
  19.121 +}
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/com/repdev/RemProjShell.java	Fri Jun 01 18:46:53 2007 +0000
    20.3 @@ -0,0 +1,118 @@
    20.4 +package com.repdev;
    20.5 +
    20.6 +import org.eclipse.swt.*;
    20.7 +import org.eclipse.swt.events.*;
    20.8 +import org.eclipse.swt.layout.*;
    20.9 +import org.eclipse.swt.widgets.*;
   20.10 +
   20.11 +public class RemProjShell {
   20.12 +	private static RemProjShell me = new RemProjShell();
   20.13 +	private Shell shell;
   20.14 +	private Result result = Result.CANCEL;
   20.15 +
   20.16 +	private RemProjShell() {
   20.17 +	}
   20.18 +
   20.19 +	public enum Result {
   20.20 +		OK_DELETE, OK_KEEP, CANCEL
   20.21 +	};
   20.22 +
   20.23 +	private void create(Shell parent, int sym, Project project) {
   20.24 +		FormLayout layout = new FormLayout();
   20.25 +		layout.marginTop = 5;
   20.26 +		layout.marginBottom = 5;
   20.27 +		layout.marginLeft = 5;
   20.28 +		layout.marginRight = 5;
   20.29 +		layout.spacing = 5;
   20.30 +
   20.31 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
   20.32 +		shell.setText("Remove Project");
   20.33 +		shell.setLayout(layout);
   20.34 +
   20.35 +		Label questionImage = new Label(shell, SWT.NONE);
   20.36 +		questionImage.setImage(shell.getDisplay().getSystemImage(SWT.ICON_QUESTION));
   20.37 +
   20.38 +		Label lbl = new Label(shell, SWT.NONE);
   20.39 +		lbl.setText("Are you sure you want to delete project '" + project.getName() + "' from Sym " + sym + "?");
   20.40 +
   20.41 +		final Button radioDelete = new Button(shell, SWT.RADIO);
   20.42 +		radioDelete.setText("Also delete the files in the project from the server");
   20.43 +
   20.44 +		final Button radioKeep = new Button(shell, SWT.RADIO);
   20.45 +		radioKeep.setText("Do not delete the files");
   20.46 +		radioKeep.setSelection(true);
   20.47 +
   20.48 +		Button add = new Button(shell, SWT.PUSH);
   20.49 +		add.setText("Delete &Project");
   20.50 +		add.addSelectionListener(new SelectionAdapter() {
   20.51 +			public void widgetSelected(SelectionEvent e) {
   20.52 +				if (radioKeep.getSelection())
   20.53 +					result = Result.OK_KEEP;
   20.54 +				else if (radioDelete.getSelection())
   20.55 +					result = Result.OK_DELETE;
   20.56 +
   20.57 +				shell.dispose();
   20.58 +			}
   20.59 +		});
   20.60 +
   20.61 +		Button cancel = new Button(shell, SWT.PUSH);
   20.62 +		cancel.setText("&Cancel");
   20.63 +		cancel.addSelectionListener(new SelectionAdapter() {
   20.64 +			public void widgetSelected(SelectionEvent e) {
   20.65 +				result = Result.CANCEL;
   20.66 +				shell.dispose();
   20.67 +			}
   20.68 +		});
   20.69 +
   20.70 +		FormData frmImg = new FormData();
   20.71 +		frmImg.left = new FormAttachment(0);
   20.72 +		frmImg.top = new FormAttachment(0, 10);
   20.73 +		questionImage.setLayoutData(frmImg);
   20.74 +
   20.75 +		FormData frmLbl = new FormData();
   20.76 +		frmLbl.top = new FormAttachment(0, 10);
   20.77 +		frmLbl.left = new FormAttachment(questionImage);
   20.78 +		frmLbl.right = new FormAttachment(100);
   20.79 +		lbl.setLayoutData(frmLbl);
   20.80 +
   20.81 +		FormData frmRadioK = new FormData();
   20.82 +		frmRadioK.left = new FormAttachment(0);
   20.83 +		frmRadioK.right = new FormAttachment(100);
   20.84 +		frmRadioK.top = new FormAttachment(radioDelete);
   20.85 +		radioKeep.setLayoutData(frmRadioK);
   20.86 +
   20.87 +		FormData frmRadioD = new FormData();
   20.88 +		frmRadioD.left = new FormAttachment(0);
   20.89 +		frmRadioD.right = new FormAttachment(100);
   20.90 +		frmRadioD.top = new FormAttachment(questionImage, 15);
   20.91 +		radioDelete.setLayoutData(frmRadioD);
   20.92 +
   20.93 +		FormData frmOK = new FormData();
   20.94 +		frmOK.top = new FormAttachment(radioKeep);
   20.95 +		frmOK.right = new FormAttachment(cancel);
   20.96 +		frmOK.bottom = new FormAttachment(100);
   20.97 +		add.setLayoutData(frmOK);
   20.98 +
   20.99 +		FormData frmCancel = new FormData();
  20.100 +		frmCancel.top = new FormAttachment(radioKeep);
  20.101 +		frmCancel.right = new FormAttachment(100);
  20.102 +		frmCancel.bottom = new FormAttachment(100);
  20.103 +		cancel.setLayoutData(frmCancel);
  20.104 +
  20.105 +		result = null;
  20.106 +		shell.pack();
  20.107 +		shell.open();
  20.108 +	}
  20.109 +
  20.110 +	// returns -1 on cancel
  20.111 +	public static Result confirm(Display display, Shell parent, Project project) {
  20.112 +		me.create(parent, project.getSym(), project);
  20.113 +
  20.114 +		while (!me.shell.isDisposed()) {
  20.115 +			if (!display.readAndDispatch())
  20.116 +				display.sleep();
  20.117 +		}
  20.118 +
  20.119 +		return me.result;
  20.120 +	}
  20.121 +}
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/com/repdev/RepDevMain.java	Fri Jun 01 18:46:53 2007 +0000
    21.3 @@ -0,0 +1,149 @@
    21.4 +package com.repdev;
    21.5 +
    21.6 +import java.io.*;
    21.7 +import java.util.ArrayList;
    21.8 +import java.util.HashMap;
    21.9 +
   21.10 +import org.eclipse.swt.graphics.Image;
   21.11 +import org.eclipse.swt.widgets.*;
   21.12 +
   21.13 +public class RepDevMain {
   21.14 +	public static final HashMap<Integer, SymitarSession> SYMITAR_SESSIONS = new HashMap<Integer, SymitarSession>();
   21.15 +	public static final String VERSION = "v .01";
   21.16 +	public static final String NAMESTR = "RepDev - " + VERSION;
   21.17 +	public static MainShell mainShell;
   21.18 +	private static Display display;
   21.19 +	public static Image largeActionSaveImage, largeAddImage, largeFileAddImage, largeFileRemoveImage, largePrintLocalImage, largePrintLPTImage, largePrintTPTImage, largeProjectAddImage, largeProjectRemoveImage, largeRemoveImage, largeRunImage,
   21.20 +			largeSymAddImage, largeSymRemoveImage, smallAddImage, smallErrorsImage, smallFileImage, smallProjectImage, smallRemoveImage, smallRepGenImage, smallSymImage, smallTasksImage, smallActionSaveImage, smallFileAddImage, smallFileRemoveImage,
   21.21 +			smallProjectAddImage, smallProjectRemoveImage, smallRunImage, smallSymAddImage, smallSymRemoveImage, smallDBFieldImage, smallDBRecordImage, smallVariableImage, smallImportImage, smallFileNewImage, smallFileOpenImage, smallDeleteImage,
   21.22 +			smallOptionsImage, smallIndentLessImage, smallIndentMoreImage, smallCutImage, smallCopyImage, smallPasteImage, smallSelectAllImage, smallRedoImage, smallUndoImage, smallFindImage, smallFindReplaceImage, smallExitImage, smallRunFMImage;
   21.23 +	public static final String IMAGE_DIR = "repdev-icons/";
   21.24 +
   21.25 +	public static void main(String[] args) {
   21.26 +		display = new Display();
   21.27 +
   21.28 +		loadSettings();
   21.29 +		createImages();
   21.30 +		createGUI();
   21.31 +
   21.32 +		while (!mainShell.isDisposed()) {
   21.33 +			if (!display.readAndDispatch())
   21.34 +				display.sleep();
   21.35 +		}
   21.36 +
   21.37 +		// Save off projects
   21.38 +		ProjectManager.saveAllProjects();
   21.39 +		saveSettings();
   21.40 +		display.dispose();
   21.41 +	}
   21.42 +
   21.43 +	private static void createImages() {
   21.44 +		largeActionSaveImage = new Image(display, IMAGE_DIR + "large-action-save.png");
   21.45 +		largeAddImage = new Image(display, IMAGE_DIR + "large-add.png");
   21.46 +		largeFileAddImage = new Image(display, IMAGE_DIR + "large-file-add.png");
   21.47 +		largeFileRemoveImage = new Image(display, IMAGE_DIR + "large-file-remove.png");
   21.48 +		largePrintLocalImage = new Image(display, IMAGE_DIR + "large-print-local.png");
   21.49 +		largePrintLPTImage = new Image(display, IMAGE_DIR + "large-print-lpt.png");
   21.50 +		largePrintTPTImage = new Image(display, IMAGE_DIR + "large-print-tpt.png");
   21.51 +		largeProjectAddImage = new Image(display, IMAGE_DIR + "large-project-add.png");
   21.52 +		largeProjectRemoveImage = new Image(display, IMAGE_DIR + "large-project-remove.png");
   21.53 +		largeRemoveImage = new Image(display, IMAGE_DIR + "large-remove.png");
   21.54 +		largeRunImage = new Image(display, IMAGE_DIR + "large-run.png");
   21.55 +		largeSymAddImage = new Image(display, IMAGE_DIR + "large-sym-add.png");
   21.56 +		largeSymRemoveImage = new Image(display, IMAGE_DIR + "large-sym-remove.png");
   21.57 +
   21.58 +		smallActionSaveImage = new Image(display, IMAGE_DIR + "small-action-save.png");
   21.59 +		smallAddImage = new Image(display, IMAGE_DIR + "small-add.png");
   21.60 +		smallErrorsImage = new Image(display, IMAGE_DIR + "small-errors.png");
   21.61 +		smallFileAddImage = new Image(display, IMAGE_DIR + "small-file-add.png");
   21.62 +		smallFileRemoveImage = new Image(display, IMAGE_DIR + "small-file-remove.png");
   21.63 +		smallFileImage = new Image(display, IMAGE_DIR + "small-file.png");
   21.64 +		smallErrorsImage = new Image(display, IMAGE_DIR + "small-errors.png");
   21.65 +		smallProjectAddImage = new Image(display, IMAGE_DIR + "small-project-add.png");
   21.66 +		smallProjectRemoveImage = new Image(display, IMAGE_DIR + "small-project-remove.png");
   21.67 +		smallProjectImage = new Image(display, IMAGE_DIR + "small-project.png");
   21.68 +		smallRemoveImage = new Image(display, IMAGE_DIR + "small-remove.png");
   21.69 +		smallRepGenImage = new Image(display, IMAGE_DIR + "small-repgen.png");
   21.70 +		smallRunImage = new Image(display, IMAGE_DIR + "small-run.png");
   21.71 +		smallSymImage = new Image(display, IMAGE_DIR + "small-sym.png");
   21.72 +		smallTasksImage = new Image(display, IMAGE_DIR + "small-tasks.png");
   21.73 +		smallSymAddImage = new Image(display, IMAGE_DIR + "small-sym-add.png");
   21.74 +		smallSymRemoveImage = new Image(display, IMAGE_DIR + "small-sym-remove.png");
   21.75 +		smallDBRecordImage = new Image(display, IMAGE_DIR + "small-db-record.png");
   21.76 +		smallDBFieldImage = new Image(display, IMAGE_DIR + "small-db-field.png");
   21.77 +		smallVariableImage = new Image(display, IMAGE_DIR + "small-variable.png");
   21.78 +		smallImportImage = new Image(display, IMAGE_DIR + "small-import.png");
   21.79 +		smallFileNewImage = new Image(display, IMAGE_DIR + "small-file-new.png");
   21.80 +		smallFileOpenImage = new Image(display, IMAGE_DIR + "small-file-open.png");
   21.81 +		smallDeleteImage = new Image(display, IMAGE_DIR + "small-delete.png");
   21.82 +		smallOptionsImage = new Image(display, IMAGE_DIR + "small-options.png");
   21.83 +		smallIndentLessImage = new Image(display, IMAGE_DIR + "small-indent-less.png");
   21.84 +		smallIndentMoreImage = new Image(display, IMAGE_DIR + "small-indent-more.png");
   21.85 +		smallCutImage = new Image(display, IMAGE_DIR + "small-cut.png");
   21.86 +		smallCopyImage = new Image(display, IMAGE_DIR + "small-copy.png");
   21.87 +		smallPasteImage = new Image(display, IMAGE_DIR + "small-paste.png");
   21.88 +		smallRedoImage = new Image(display, IMAGE_DIR + "small-redo.png");
   21.89 +		smallUndoImage = new Image(display, IMAGE_DIR + "small-undo.png");
   21.90 +		smallSelectAllImage = new Image(display, IMAGE_DIR + "small-select-all.png");
   21.91 +		smallFindImage = new Image(display, IMAGE_DIR + "small-find.png");
   21.92 +		smallFindReplaceImage = new Image(display, IMAGE_DIR + "small-find-replace.png");
   21.93 +		smallExitImage = new Image(display, IMAGE_DIR + "small-exit.png");
   21.94 +		smallRunFMImage = new Image(display, IMAGE_DIR + "small-run-fm.png");
   21.95 +	}
   21.96 +
   21.97 +	/**
   21.98 +	 * Loads Config object and settings from a serialized file Also connects to
   21.99 +	 * all syms in the config file
  21.100 +	 * 
  21.101 +	 */
  21.102 +	public static void loadSettings() {
  21.103 +		try {
  21.104 +			ObjectInputStream in = new ObjectInputStream(new FileInputStream(System.getProperty("user.home") + System.getProperty("file.separator") + "repdev.conf"));
  21.105 +			Config configObject = (Config) in.readObject();
  21.106 +			Config.setConfig(configObject);
  21.107 +
  21.108 +		} catch (ClassCastException e) {
  21.109 +			System.out.println("FILE OUT OF DATE!");
  21.110 +		} catch (IOException e) {
  21.111 +			System.out.println("Could not load data file.");
  21.112 +		} catch (ClassNotFoundException e) {
  21.113 +			e.printStackTrace();
  21.114 +		}
  21.115 +		SymitarSession session;
  21.116 +
  21.117 +		// Start up data
  21.118 +		for (int sym : Config.getSyms()) {
  21.119 +			if (Config.getServer().equals("test"))
  21.120 +				session = new TestingSymitarSession();
  21.121 +			else
  21.122 +				session = new DirectSymitarSession();
  21.123 +
  21.124 +			SYMITAR_SESSIONS.put(sym, session);
  21.125 +		}
  21.126 +	}
  21.127 +
  21.128 +	public static void saveSettings() {
  21.129 +		try {
  21.130 +			// Write the current syms to the Config file
  21.131 +			ArrayList<Integer> newSyms = new ArrayList<Integer>();
  21.132 +
  21.133 +			for (int sym : SYMITAR_SESSIONS.keySet()) {
  21.134 +				newSyms.add(sym);
  21.135 +			}
  21.136 +
  21.137 +			Config.setSyms(newSyms);
  21.138 +
  21.139 +			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.home") + System.getProperty("file.separator") + "repdev.conf"));
  21.140 +			out.writeObject(Config.getConfig());
  21.141 +		} catch (Exception e) {
  21.142 +			System.err.println("Error saving Config data");
  21.143 +			e.printStackTrace();
  21.144 +		}
  21.145 +	}
  21.146 +
  21.147 +	private static void createGUI() {
  21.148 +		mainShell = new MainShell(display);
  21.149 +		mainShell.open();
  21.150 +	}
  21.151 +
  21.152 +}
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/com/repdev/RepgenParser.java	Fri Jun 01 18:46:53 2007 +0000
    22.3 @@ -0,0 +1,1066 @@
    22.4 +package com.repdev;
    22.5 +
    22.6 +import java.io.BufferedReader;
    22.7 +import java.io.File;
    22.8 +import java.io.FileReader;
    22.9 +import java.io.IOException;
   22.10 +import java.util.ArrayList;
   22.11 +import java.util.HashSet;
   22.12 +
   22.13 +import org.eclipse.swt.SWT;
   22.14 +import org.eclipse.swt.custom.StyleRange;
   22.15 +import org.eclipse.swt.custom.StyledText;
   22.16 +import org.eclipse.swt.graphics.Font;
   22.17 +import org.eclipse.swt.widgets.Display;
   22.18 +
   22.19 +import com.repdev.DatabaseLayout.Field;
   22.20 +import com.repdev.DatabaseLayout.Record;
   22.21 +
   22.22 +public class RepgenParser {
   22.23 +	private StyledText txt;
   22.24 +	private SymitarFile file;
   22.25 +	private int sym;
   22.26 +	private boolean reparse = true;
   22.27 +	
   22.28 +	private static HashSet<String> functions, keywords, specialvars;
   22.29 +	private static DatabaseLayout db;
   22.30 +
   22.31 +	private ArrayList<Token> ltokens = new ArrayList<Token>();
   22.32 +	private ArrayList<Variable> lvars = new ArrayList<Variable>();
   22.33 +	private ArrayList<Token> lasttokens = new ArrayList<Token>();
   22.34 +	private ArrayList<Include> includes = new ArrayList<Include>();
   22.35 +	
   22.36 +	private ArrayList<Error> errorList = new ArrayList<Error>();
   22.37 +	private ArrayList<Task> taskList = new ArrayList<Task>();
   22.38 +	
   22.39 +	boolean refreshIncludes = true;
   22.40 +	
   22.41 +	static {
   22.42 +		functions = build(new File("functions.txt"));
   22.43 +		keywords = build(new File("keywords.txt"));
   22.44 +		specialvars = build(new File("vars.txt"));
   22.45 +		db = DatabaseLayout.getInstance();
   22.46 +	}
   22.47 +	
   22.48 +	
   22.49 +
   22.50 +	public RepgenParser(StyledText txt, SymitarFile file, int sym) {
   22.51 +		this.txt = txt;
   22.52 +		this.file = file;
   22.53 +		this.sym = sym;
   22.54 +	}
   22.55 +	
   22.56 +	public class Error{
   22.57 +		private String fileName = "", description = "";
   22.58 +		private int line = 0, col = 0;
   22.59 +		
   22.60 +		public Error(ErrorCheckResult result){
   22.61 +			fileName = file.getName();
   22.62 +			line = result.getLineNumber();
   22.63 +			col = result.getColumn();
   22.64 +			description = result.getErrorMessage();
   22.65 +		}
   22.66 +		
   22.67 +		public Error( String description, int line, int col) {
   22.68 +			fileName = file.getName();
   22.69 +			this.description = description;
   22.70 +			this.line = line;
   22.71 +			this.col = col;
   22.72 +		}
   22.73 +		
   22.74 +		public Error(String file, String description, int line, int col) {
   22.75 +			fileName = file;
   22.76 +			this.description = description;
   22.77 +			this.line = line;
   22.78 +			this.col = col;
   22.79 +		}
   22.80 +		
   22.81 +		public int getCol() {
   22.82 +			return col;
   22.83 +		}
   22.84 +		public void setCol(int col) {
   22.85 +			this.col = col;
   22.86 +		}
   22.87 +		public String getDescription() {
   22.88 +			return description;
   22.89 +		}
   22.90 +		public void setDescription(String description) {
   22.91 +			this.description = description;
   22.92 +		}
   22.93 +		public String getFile() {
   22.94 +			return fileName;
   22.95 +		}
   22.96 +		public void setFile(String file) {
   22.97 +			this.fileName = file;
   22.98 +		}
   22.99 +		public int getLine() {
  22.100 +			return line;
  22.101 +		}
  22.102 +		public void setLine(int line) {
  22.103 +			this.line = line;
  22.104 +		}
  22.105 +		
  22.106 +		
  22.107 +	}
  22.108 +	
  22.109 +	public class Task{
  22.110 +		
  22.111 +	}
  22.112 +	
  22.113 +	public class Include{
  22.114 +		private String fileName;
  22.115 +		public Division division;
  22.116 +		
  22.117 +		public Include(String fileName, Division division) {
  22.118 +			super();
  22.119 +			this.fileName = fileName;
  22.120 +			this.division = division;
  22.121 +		}
  22.122 +		
  22.123 +		public Division getDivision() {
  22.124 +			return division;
  22.125 +		}
  22.126 +		
  22.127 +		public void setDivision(Division division) {
  22.128 +			this.division = division;
  22.129 +		}
  22.130 +		
  22.131 +		public String getFileName() {
  22.132 +			return fileName;
  22.133 +		}
  22.134 +		
  22.135 +		public void setFileName(String fileName) {
  22.136 +			this.fileName = fileName;
  22.137 +		}	
  22.138 +	}
  22.139 +	
  22.140 +	public enum Division{
  22.141 +		DEFINE, SETUP, SELECT, SORT, PRINT, TOTAL, NONE //Procedure
  22.142 +	}
  22.143 +	
  22.144 +	public class Token {
  22.145 +		private String str;
  22.146 +		private Token after = null, before = null;
  22.147 +		private int pos, commentDepth, afterDepth;
  22.148 +		private boolean inString, afterString, inDate, afterDate, inDefs;
  22.149 +
  22.150 +		public Token(String str, int pos, int commentDepth, int afterDepth, boolean inString, boolean afterString, boolean inDefs, boolean inDate, boolean afterDate) {
  22.151 +			this.str = str;
  22.152 +			this.pos = pos;
  22.153 +			this.commentDepth = commentDepth;
  22.154 +			this.afterDepth = afterDepth;
  22.155 +			this.inString = inString;
  22.156 +			this.afterString = afterString;
  22.157 +			this.inDate = inDate;
  22.158 +			this.afterDate = afterDate;
  22.159 +			this.inDefs = inDefs;
  22.160 +		}
  22.161 +
  22.162 +		public void setNearTokens(ArrayList<Token> tokens, int mypos) {
  22.163 +			after = null;
  22.164 +			before = null;
  22.165 +
  22.166 +			// if(inString || commentDepth!=0)
  22.167 +			// return;
  22.168 +
  22.169 +			for (int i = mypos - 1; i >= 0; i--) {
  22.170 +				// if(!tokens.get(i).getInString() &&
  22.171 +				// tokens.get(i).getCDepth()==0) {
  22.172 +				before = tokens.get(i);
  22.173 +				break;
  22.174 +				// }
  22.175 +			}
  22.176 +
  22.177 +			for (int i = mypos + 1; i < tokens.size(); i++) {
  22.178 +				// if(!tokens.get(i).getInString() &&
  22.179 +				// tokens.get(i).getCDepth()==0) {
  22.180 +				after = tokens.get(i);
  22.181 +				break;
  22.182 +			}
  22.183 +			// }
  22.184 +		}
  22.185 +
  22.186 +		public Token getNextNCToken() {
  22.187 +			return after;
  22.188 +		}
  22.189 +
  22.190 +		public int getStart() {
  22.191 +			return pos;
  22.192 +		}
  22.193 +
  22.194 +		public int getEnd() {
  22.195 +			return pos + str.length();
  22.196 +		}
  22.197 +
  22.198 +		public String getStr() {
  22.199 +			return str;
  22.200 +		}
  22.201 +
  22.202 +		public int length() {
  22.203 +			return str.length();
  22.204 +		}
  22.205 +
  22.206 +		public int getCDepth() {
  22.207 +			return commentDepth;
  22.208 +		}
  22.209 +
  22.210 +		public int getEndCDepth() {
  22.211 +			return afterDepth;
  22.212 +		}
  22.213 +
  22.214 +		public boolean getInString() {
  22.215 +			return inString;
  22.216 +		}
  22.217 +
  22.218 +		public boolean getEndInString() {
  22.219 +			return afterString;
  22.220 +		}
  22.221 +
  22.222 +		public boolean getInDate() {
  22.223 +			return inDate;
  22.224 +		}
  22.225 +
  22.226 +		public boolean getEndInDate() {
  22.227 +			return afterDate;
  22.228 +		}
  22.229 +
  22.230 +		public boolean inDefs() {
  22.231 +			return inDefs;
  22.232 +		}
  22.233 +
  22.234 +		public void incStart(int amount) {
  22.235 +			pos += amount;
  22.236 +		}
  22.237 +
  22.238 +		public void setInDefs(boolean b) {
  22.239 +			inDefs = b;
  22.240 +		}
  22.241 +
  22.242 +		public void setCDepth(int before, int after) {
  22.243 +			commentDepth = before;
  22.244 +			afterDepth = after;
  22.245 +		}
  22.246 +
  22.247 +		public void setInString(boolean before, boolean after) {
  22.248 +			inString = before;
  22.249 +			afterString = after;
  22.250 +		}
  22.251 +
  22.252 +		public void setInDate(boolean before, boolean after) {
  22.253 +			inDate = before;
  22.254 +			afterDate = after;
  22.255 +		}
  22.256 +
  22.257 +		public boolean dbFieldValid(ArrayList<Record> records) {
  22.258 +			Token record = before.before;
  22.259 +
  22.260 +			if (record == null)
  22.261 +				return false;
  22.262 +
  22.263 +			if (!record.dbRecordValid())
  22.264 +				return false;
  22.265 +
  22.266 +			String recordName = record.getStr();
  22.267 +
  22.268 +			for (Record rec : db.getFlatRecords()) {
  22.269 +				if (rec.getName().toLowerCase().equals(recordName)) {
  22.270 +					for (Field field : rec.getFields()) {
  22.271 +						if (field.getName().toLowerCase().equals(str))
  22.272 +							return true;
  22.273 +					}
  22.274 +				}
  22.275 +			}
  22.276 +
  22.277 +			return false;
  22.278 +		}
  22.279 +
  22.280 +		public boolean dbRecordValid() {
  22.281 +			return db.containsRecordName(str);
  22.282 +		}
  22.283 +
  22.284 +		public String toString() {
  22.285 +			return pos + ":" + str + "(" + commentDepth + "," + inString + "," + inDefs + ")";
  22.286 +		}
  22.287 +
  22.288 +		public Token getAfter() {
  22.289 +			return after;
  22.290 +		}
  22.291 +
  22.292 +		public Token getBefore() {
  22.293 +			return before;
  22.294 +		}
  22.295 +	}
  22.296 +
  22.297 +	public static class Variable implements Comparable {
  22.298 +		private String name, filename, type;
  22.299 +		boolean constant;
  22.300 +		private int pos;
  22.301 +
  22.302 +		public Variable(String name, String filename, int pos, String type) {
  22.303 +			this.name = name;
  22.304 +			this.filename = filename;
  22.305 +			this.pos = pos;
  22.306 +			this.type = type;
  22.307 +		}
  22.308 +
  22.309 +		public String getName() {
  22.310 +			return name;
  22.311 +		}
  22.312 +
  22.313 +		public String getFilename() {
  22.314 +			return filename;
  22.315 +		}
  22.316 +
  22.317 +		public int getPos() {
  22.318 +			return pos;
  22.319 +		}
  22.320 +
  22.321 +		public void incPos(int amount) {
  22.322 +			pos += amount;
  22.323 +		}
  22.324 +
  22.325 +		public String toString() {
  22.326 +			return pos + ":" + name;
  22.327 +		}
  22.328 +
  22.329 +		public boolean equals(Object o) {
  22.330 +			if (!(o instanceof Variable))
  22.331 +				return false;
  22.332 +
  22.333 +			Variable v = (Variable) o;
  22.334 +
  22.335 +			return v.name.equals(name);
  22.336 +		}
  22.337 +
  22.338 +		public int compareTo(Object o) {
  22.339 +			if (o instanceof Variable)
  22.340 +				return name.compareToIgnoreCase(((Variable) o).getName());
  22.341 +			else
  22.342 +				return -1;
  22.343 +		}
  22.344 +
  22.345 +		public void setType(String type) {
  22.346 +			this.type = type;
  22.347 +		}
  22.348 +
  22.349 +		public String getType() {
  22.350 +			return type;
  22.351 +		}
  22.352 +
  22.353 +		public boolean isConstant() {
  22.354 +			return constant;
  22.355 +		}
  22.356 +
  22.357 +		public void setConstant(boolean constant) {
  22.358 +			this.constant = constant;
  22.359 +		}
  22.360 +	}
  22.361 +	
  22.362 +	/**
  22.363 +	 * Worker class for loading any included files and parsing out their contents
  22.364 +	 * Currently runs once at opening of the report
  22.365 +	 * @author poznanja
  22.366 +	 *
  22.367 +	 */
  22.368 +	public class BackgroundIncludeParser extends Thread{
  22.369 +		String text;
  22.370 +		
  22.371 +		public BackgroundIncludeParser(String text){
  22.372 +			super("Background Include Parser");
  22.373 +			this.text = text;
  22.374 +		}
  22.375 +		
  22.376 +		public void run(){
  22.377 +			for( Token tok : ltokens ){
  22.378 +				if( tok.str.equals("#include") && tok.after != null){
  22.379 +					String fileName = getFullString(tok.after,text);
  22.380 +					
  22.381 +					if( tok.inDefs ){
  22.382 +						includes.add(new Include(fileName,Division.DEFINE));
  22.383 +						rebuildVars(fileName);
  22.384 +					}
  22.385 +				}
  22.386 +			}
  22.387 +		}
  22.388 +	}
  22.389 +	
  22.390 +	/**
  22.391 +	 * Warning: Doesn't save symitar file
  22.392 +	 * 
  22.393 +	 * Can be called to validate
  22.394 +	 * @author poznanja
  22.395 +	 *
  22.396 +	 */
  22.397 +	public class BackgroundSymitarErrorChecker extends Thread{
  22.398 +		RepgenParser me;
  22.399 +		
  22.400 +		public BackgroundSymitarErrorChecker(RepgenParser instance){
  22.401 +			me = instance;
  22.402 +		}
  22.403 +		
  22.404 +		public void run(){
  22.405 +			synchronized(me){
  22.406 +				errorList.clear();
  22.407 +				errorList.add(new Error(RepDevMain.SYMITAR_SESSIONS.get(sym).errorCheckRepGen(file.getName())));
  22.408 +			}
  22.409 +		}
  22.410 +	}
  22.411 +
  22.412 +	
  22.413 +	/**
  22.414 +	 * Adds tokens to ltokens, but also keeps track of it in the new tokens list for determining what to process later
  22.415 +	 * @param spot
  22.416 +	 * @param tok
  22.417 +	 */
  22.418 +	private void addToken(ArrayList<Token> tokens, int spot, Token tok){
  22.419 +		tokens.add(spot,tok);
  22.420 +		lasttokens.add(tok);
  22.421 +	}
  22.422 +
  22.423 +	private boolean parse(String filename, String str, int start, int end, int oldend, ArrayList<Token> tokens, ArrayList<Variable> vars, StyledText txt) {
  22.424 +		Token modToken = null;
  22.425 +
  22.426 +		lasttokens.clear();
  22.427 +		
  22.428 +		boolean allDefs = true;
  22.429 +
  22.430 +		if (str.length() == 0)
  22.431 +			return false;
  22.432 +
  22.433 +		int ftoken;
  22.434 +		for (ftoken = 0; ftoken < tokens.size(); ftoken++)
  22.435 +			if (tokens.get(ftoken).getEnd() >= start)
  22.436 +				break;
  22.437 +
  22.438 +		int ltoken;
  22.439 +		for (ltoken = ftoken; ltoken < tokens.size(); ltoken++)
  22.440 +			if (tokens.get(ltoken).getStart() > oldend)
  22.441 +				break;
  22.442 +
  22.443 +		if (tokens.size() > 0) {
  22.444 +			// Must scan several more ahead for records with spaces
  22.445 +			ltoken = Math.min(tokens.size() - 1, ltoken + 3);
  22.446 +
  22.447 +			// And two back for editing the second "word" in a record, and for
  22.448 +			// fields with colons
  22.449 +			ftoken = Math.max(0, ftoken - 2);
  22.450 +
  22.451 +			boolean inStr;
  22.452 +
  22.453 +			inStr = tokens.get(ltoken).inString;
  22.454 +
  22.455 +			while (tokens.get(ltoken).inString == inStr) {
  22.456 +				ltoken++;
  22.457 +
  22.458 +				if (ltoken > tokens.size() - 1) {
  22.459 +					ltoken = tokens.size() - 1;
  22.460 +					break;
  22.461 +				}
  22.462 +			}
  22.463 +
  22.464 +		}
  22.465 +
  22.466 +		int charStart, charEnd;
  22.467 +
  22.468 +		if (ftoken < tokens.size())
  22.469 +			charStart = Math.min(start, tokens.get(ftoken).getStart());
  22.470 +		else
  22.471 +			charStart = start;
  22.472 +
  22.473 +		if (ltoken < tokens.size())
  22.474 +			charEnd = Math.min(str.length(), Math.max(end, tokens.get(ltoken).getStart() + end - oldend + tokens.get(ltoken).getStr().length()));
  22.475 +		else
  22.476 +			charEnd = str.length();
  22.477 +
  22.478 +		char[] chars = str.substring(charStart, charEnd).toLowerCase().toCharArray();
  22.479 +
  22.480 +		boolean inString = false, inDate = false, inDefine = false;
  22.481 +		int commentDepth = 0;
  22.482 +		if (ftoken > 0) {
  22.483 +			inString = tokens.get(ftoken - 1).getEndInString();
  22.484 +			inDate = tokens.get(ftoken - 1).getEndInDate();
  22.485 +			commentDepth = tokens.get(ftoken - 1).getEndCDepth();
  22.486 +			inDefine = tokens.get(ftoken - 1).inDefs();
  22.487 +		}
  22.488 +
  22.489 +		boolean oldInString = false, oldInDefine = false, oldInDate = false;
  22.490 +		int oldCommentDepth = 0;
  22.491 +		if (ltoken < tokens.size()) {
  22.492 +			oldInString = tokens.get(ltoken).getInString();
  22.493 +			oldInDate = tokens.get(ltoken).getInDate();
  22.494 +			oldCommentDepth = tokens.get(ltoken).getCDepth();
  22.495 +			oldInDefine = tokens.get(ltoken).inDefs();
  22.496 +		}
  22.497 +
  22.498 +		if (inDefine || oldInDefine) {
  22.499 +			reparseAll();
  22.500 +			return false;
  22.501 +		}
  22.502 +
  22.503 +		if (tokens.size() > 0)
  22.504 +			for (int i = 0; i <= ltoken - ftoken; i++)
  22.505 +				tokens.remove(ftoken);
  22.506 +
  22.507 +		int curspot = ftoken, cstart = charStart;
  22.508 +		StringBuilder sb = new StringBuilder();
  22.509 +		for (int i = 0; i < chars.length; i++) {
  22.510 +			char cur = chars[i];
  22.511 +
  22.512 +			if ((cur >= 'a' && cur <= 'z') || (cur >= '0' && cur <= '9') || cur == '#' || cur == '@') {
  22.513 +				sb.append(cur);
  22.514 +			} else {
  22.515 +				String scur = null;
  22.516 +
  22.517 +				// Look ahead one name to see if a record exists with this name
  22.518 +				// and make it all one token
  22.519 +				if (cur == ' ') {
  22.520 +					String tempRecord = sb.toString() + " ";
  22.521 +					int x;
  22.522 +
  22.523 +					for (x = Math.min(i + 1,chars.length-1); x < chars.length; x++) {
  22.524 +						tempRecord += chars[x];
  22.525 +
  22.526 +						if (!((chars[x] >= 'a' && chars[x] <= 'z') || (chars[x] >= '0' && chars[x] <= '9') || chars[x] == '#' || chars[x] == '@')) {
  22.527 +							tempRecord = tempRecord.substring(0, tempRecord.length() - 1);
  22.528 +							break;
  22.529 +						}
  22.530 +					}
  22.531 +
  22.532 +					if (db.containsRecordName(tempRecord)) {
  22.533 +						scur = tempRecord;
  22.534 +						i = x;
  22.535 +						
  22.536 +						if( i == chars.length )
  22.537 +							i--;
  22.538 +						
  22.539 +						cur = chars[i];
  22.540 +					}
  22.541 +
  22.542 +				}
  22.543 +
  22.544 +				// Look ahead again for field names with colons
  22.545 +				if (cur == ':') {
  22.546 +					String tempRecord = sb.toString() + ":";
  22.547 +					int x;
  22.548 +
  22.549 +					for (x = i + 1; x < chars.length; x++) {
  22.550 +						tempRecord += chars[x];
  22.551 +
  22.552 +						if (!((chars[x] >= 'a' && chars[x] <= 'z') || (chars[x] >= '0' && chars[x] <= '9') || chars[x] == '#' || chars[x] == '@')) {
  22.553 +							tempRecord = tempRecord.substring(0, tempRecord.length() - 1);
  22.554 +							break;
  22.555 +						}
  22.556 +					}
  22.557 +
  22.558 +					if (db.containsFieldName(tempRecord)) {
  22.559 +						scur = tempRecord;
  22.560 +						i = x;
  22.561 +						cur = chars[i];
  22.562 +					}
  22.563 +
  22.564 +				}
  22.565 +
  22.566 +				if (scur == null)
  22.567 +					scur = sb.toString().trim();
  22.568 +
  22.569 +				if (scur.length() > 0) {
  22.570 +					if (commentDepth == 0 && !inString) {
  22.571 +						if (scur.equals("define")) {
  22.572 +							inDefine = true;
  22.573 +						} else if (scur.equals("end")) {
  22.574 +							inDefine = false;
  22.575 +							allDefs = false;
  22.576 +						}
  22.577 +					}
  22.578 +
  22.579 +					Token nToken = new Token(scur, cstart, commentDepth, commentDepth, inString, inString, inDefine, inDate, inDate);
  22.580 +					addToken(tokens, curspot, nToken);
  22.581 +					
  22.582 +					curspot++;
  22.583 +				}
  22.584 +
  22.585 +				sb = new StringBuilder();
  22.586 +				cstart = i + charStart;
  22.587 +
  22.588 +				scur = "" + cur;
  22.589 +				if (commentDepth == 0 && cur == '"') {
  22.590 +					if (inString)
  22.591 +						addToken(tokens, curspot, new Token(scur, cstart, 0, 0, true, false, inDefine, inDate, inDate));
  22.592 +					else
  22.593 +						addToken(tokens, curspot, new Token(scur, cstart, 0, 0, true, true, inDefine, inDate, inDate));
  22.594 +
  22.595 +					curspot++;
  22.596 +					inString = !inString;
  22.597 +				} else if (!inString && cur == '[') {
  22.598 +					commentDepth++;
  22.599 +					addToken(tokens, curspot, new Token(scur, cstart, commentDepth, commentDepth, false, false, inDefine, inDate, inDate));
  22.600 +					curspot++;
  22.601 +				} else if (!inString && cur == ']') {
  22.602 +					commentDepth--;
  22.603 +					if (commentDepth < 0)
  22.604 +						commentDepth = 0;
  22.605 +
  22.606 +					addToken(tokens, curspot, new Token(scur, cstart, commentDepth + 1, commentDepth, false, false, inDefine, inDate, inDate));
  22.607 +					curspot++;
  22.608 +				} else if (commentDepth == 0 && !inString && cur == '\'') {
  22.609 +					if (inDate)
  22.610 +						addToken(tokens, curspot, new Token(scur, cstart, 0, 0, inString, inString, inDefine, true, false));
  22.611 +					else
  22.612 +						addToken(tokens, curspot, new Token(scur, cstart, 0, 0, inString, inString, inDefine, true, true));
  22.613 +
  22.614 +					curspot++;
  22.615 +					inDate = !inDate;
  22.616 +				} else if (scur.trim().length() != 0) {
  22.617 +					addToken(tokens, curspot, new Token(scur, cstart, commentDepth, commentDepth, inString, inString, inDefine, inDate, inDate));
  22.618 +					curspot++;
  22.619 +				}
  22.620 +
  22.621 +				cstart++;
  22.622 +			}
  22.623 +		}
  22.624 +
  22.625 +		String scur = sb.toString().trim();
  22.626 +		if (scur.length() > 0) {
  22.627 +			if (commentDepth == 0 && !inString) {
  22.628 +				if (scur.equals("define")) {
  22.629 +					inDefine = true;
  22.630 +				} else if (scur.equals("end")) {
  22.631 +					inDefine = false;
  22.632 +					allDefs = false;
  22.633 +				}
  22.634 +			}
  22.635 +			modToken = new Token(scur, cstart, commentDepth, commentDepth, inString, inString, inDefine, inDate, inDate);
  22.636 +			modToken.setNearTokens(tokens, curspot);
  22.637 +
  22.638 +			addToken(tokens, curspot, modToken);
  22.639 +			curspot++;
  22.640 +		}
  22.641 +
  22.642 +		if (end != oldend)
  22.643 +			for (int i = curspot; i < tokens.size(); i++)
  22.644 +				tokens.get(i).incStart(end - oldend);
  22.645 +
  22.646 +		int fixspot = curspot;
  22.647 +
  22.648 +		if (inString != oldInString || commentDepth != oldCommentDepth || inDefine != oldInDefine || inDate != oldInDate) {
  22.649 +			for (fixspot = curspot; fixspot < tokens.size(); fixspot++) {
  22.650 +				Token tcur = tokens.get(fixspot);
  22.651 +				String cur = tcur.getStr();
  22.652 +
  22.653 +				oldInString = tcur.getInString();
  22.654 +				oldInDate = tcur.getInDate();
  22.655 +				oldCommentDepth = tcur.getCDepth();
  22.656 +				oldInDefine = tcur.inDefs();
  22.657 +
  22.658 +				tcur.setInString(inString, inString);
  22.659 +				tcur.setInDate(inDate, inDate);
  22.660 +				tcur.setCDepth(commentDepth, commentDepth);
  22.661 +				tcur.setInDefs(inDefine);
  22.662 +
  22.663 +				if (commentDepth == 0 && cur.equals("\"")) {
  22.664 +					if (inString)
  22.665 +						tcur.setInString(true, false);
  22.666 +					else
  22.667 +						tcur.setInString(true, true);
  22.668 +
  22.669 +					inString = !inString;
  22.670 +				} else if (!inString && cur.equals("[")) {
  22.671 +					commentDepth++;
  22.672 +
  22.673 +					tcur.setCDepth(commentDepth, commentDepth);
  22.674 +				} else if (!inString && cur.equals("]")) {
  22.675 +					commentDepth--;
  22.676 +					if (commentDepth < 0)
  22.677 +						commentDepth = 0;
  22.678 +
  22.679 +					tcur.setCDepth(commentDepth + 1, commentDepth);
  22.680 +				} else if (!inString && commentDepth == 0 && cur.equals("define")) {
  22.681 +					inDefine = true;
  22.682 +					tcur.setInDefs(true);
  22.683 +				} else if (!inString && commentDepth == 0 && cur.equals("end")) {
  22.684 +					inDefine = false;
  22.685 +					tcur.setInDefs(false);
  22.686 +				} else if (!inString && commentDepth == 0 && cur.equals("'")) {
  22.687 +					if (inDate)
  22.688 +						tcur.setInDate(true, false);
  22.689 +					else
  22.690 +						tcur.setInDate(true, true);
  22.691 +
  22.692 +					inDate = !inDate;
  22.693 +				} else if (inDefine == oldInDefine && commentDepth == oldCommentDepth && inString == oldInString && inDate == oldInDate) {
  22.694 +					break;
  22.695 +				}
  22.696 +			}
  22.697 +		}
  22.698 +
  22.699 +		// Go forward 2 tokens to redraw field, if this is a record
  22.700 +		if (modToken != null && !modToken.inDate && !modToken.inString && modToken.commentDepth == 0 && modToken.after != null && modToken.after.before != null && modToken.after.before.getStr().equals(":")) {
  22.701 +			fixspot = Math.min(Math.max(fixspot, curspot + 2), tokens.size());
  22.702 +		}
  22.703 +
  22.704 +		for (int i = curspot - 1; i >= 0; i--)
  22.705 +			if (!tokens.get(i).getInString() && tokens.get(i).getCDepth() != 0) {
  22.706 +				tokens.get(i).setNearTokens(tokens, i);
  22.707 +				break;
  22.708 +			}
  22.709 +
  22.710 +		for (int i = ftoken; i < fixspot; i++)
  22.711 +			tokens.get(i).setNearTokens(tokens, i);
  22.712 +
  22.713 +		if (tokens.size() > 1) {
  22.714 +			if (ftoken < tokens.size())
  22.715 +				charStart = tokens.get(ftoken).getStart();
  22.716 +			else
  22.717 +				charStart = tokens.get(ftoken - 1).getEnd();
  22.718 +
  22.719 +			if (fixspot < tokens.size())
  22.720 +				charEnd = tokens.get(fixspot).getStart();
  22.721 +			else
  22.722 +				charEnd = str.length() - 1;
  22.723 +
  22.724 +			if( txt != null)
  22.725 +				txt.redrawRange(charStart, charEnd - charStart, false);
  22.726 +		}
  22.727 +
  22.728 +		return allDefs;
  22.729 +	}
  22.730 +	
  22.731 +	private static HashSet<String> build(File in) {
  22.732 +		HashSet<String> result = new HashSet<String>();
  22.733 +
  22.734 +		try {
  22.735 +			BufferedReader br = new BufferedReader(new FileReader(in));
  22.736 +			String line;
  22.737 +
  22.738 +			while ((line = br.readLine()) != null) {
  22.739 +				line = line.trim().toLowerCase();
  22.740 +
  22.741 +				if (line.length() != 0)
  22.742 +					result.add(line);
  22.743 +			}
  22.744 +
  22.745 +			br.close();
  22.746 +		} catch (IOException e) {
  22.747 +		}
  22.748 +
  22.749 +		return result;
  22.750 +	}
  22.751 +	
  22.752 +	private static String getFullString(Token cur, String fileData){
  22.753 +		if( !cur.inString )
  22.754 +			return "";
  22.755 +		
  22.756 +		String type = "";
  22.757 +		Token fToken, lToken = null;
  22.758 +		
  22.759 +		if( cur.after == null)
  22.760 +			return "";
  22.761 +		
  22.762 +		fToken = cur.after;
  22.763 +		
  22.764 +		
  22.765 +		while( (cur=cur.after) != null )
  22.766 +		{
  22.767 +			if(!cur.inString || cur.str.equals("\""))
  22.768 +				break;
  22.769 +			
  22.770 +			lToken =cur;
  22.771 +		}
  22.772 +		
  22.773 +		type += fileData.substring(fToken.getStart(),Math.min(lToken == null ? fileData.length() -1 : lToken.getEnd(),fileData.length()-1));		
  22.774 +	
  22.775 +		return type;
  22.776 +	}
  22.777 +	
  22.778 +	private static boolean isNumber(String str){
  22.779 +		try{
  22.780 +			Integer.parseInt(str);
  22.781 +			return true;
  22.782 +		}
  22.783 +		catch(Exception e){
  22.784 +			return false;
  22.785 +		}
  22.786 +	}
  22.787 +	
  22.788 +	private void rebuildVars(String fileName) {
  22.789 +		ArrayList<Variable> newvars = new ArrayList<Variable>();
  22.790 +		ArrayList<Variable> oldvars = new ArrayList<Variable>();
  22.791 +		ArrayList<Token> tokens = new ArrayList<Token>();
  22.792 +		String data;
  22.793 +		
  22.794 +		boolean changed = false, exists = false;
  22.795 +		
  22.796 +		int c = 0;
  22.797 +		while( c < lvars.size() ){
  22.798 +			if( lvars.get(c).getFilename().equals(fileName))
  22.799 +				oldvars.add(lvars.remove(c));
  22.800 +			else
  22.801 +				c++;
  22.802 +		}
  22.803 +		
  22.804 +		if( fileName.equals(file.getName())){
  22.805 +			tokens = ltokens;
  22.806 +			data = txt.getText();
  22.807 +		}
  22.808 +		else{
  22.809 +
  22.810 +			data = RepDevMain.SYMITAR_SESSIONS.get(sym).getFile(new SymitarFile(fileName,FileType.REPGEN));				
  22.811 +	
  22.812 +			if( data == null )
  22.813 +				return;
  22.814 +			
  22.815 +			parse(fileName, data, 0, data.length(), 0, tokens, new ArrayList<Variable>(),null);
  22.816 +			
  22.817 +			//Set to be in defs, since we are assuming only working with Include files already in the define division
  22.818 +			for( Token cur : tokens)
  22.819 +				cur.setInDefs(true);
  22.820 +		}
  22.821 +		
  22.822 +		System.out.println("Parsing vars for " + fileName);
  22.823 +
  22.824 +		for (Token tcur : tokens) {
  22.825 +			Variable newVar;
  22.826 +
  22.827 +			if (tcur.after != null && tcur.inDefs && tcur.commentDepth == 0 && !tcur.inString && !tcur.inDate && tcur.after.getStr().equals("=") && tcur.after.after != null) {
  22.828 +				Token typeToken = tcur.after.after;
  22.829 +				boolean isConstant = true;
  22.830 +				
  22.831 +				if( typeToken == null )
  22.832 +					continue;
  22.833 +				
  22.834 +				String type = typeToken.getStr();
  22.835 +
  22.836 +				//Strings
  22.837 +				if (typeToken.inString){
  22.838 +					type = "\"" + getFullString(typeToken,data) + "\"";
  22.839 +				}
  22.840 +				
  22.841 +				//Date
  22.842 +				if( typeToken != null && typeToken.inDate ){
  22.843 +					for(int i = 0; i<=5;i++)
  22.844 +					{		
  22.845 +						typeToken = typeToken.after;
  22.846 +						
  22.847 +						if( typeToken == null)
  22.848 +							break;
  22.849 +						
  22.850 +						type += typeToken.str;
  22.851 +					}					
  22.852 +				}
  22.853 +				
  22.854 +				//Rate
  22.855 +				if( typeToken != null && isNumber(typeToken.str) && typeToken.after != null && typeToken.after.str.equals(".") && typeToken.after.after != null && isNumber(typeToken.after.after.str)){
  22.856 +					for(int i = 0; i<=2;i++)
  22.857 +					{		
  22.858 +						typeToken = typeToken.after;
  22.859 +						
  22.860 +						if( typeToken == null)
  22.861 +							break;
  22.862 +						
  22.863 +						type += typeToken.str;
  22.864 +					}	
  22.865 +				}
  22.866 +				
  22.867 +				//Money
  22.868 +				if( typeToken != null && typeToken.str.equals("$")){
  22.869 +					while( (typeToken = typeToken.after) != null )
  22.870 +					{
  22.871 +						if( !isNumber(typeToken.str) && !typeToken.getStr().equals(",") && !typeToken.getStr().equals(".") )
  22.872 +							break;
  22.873 +									
  22.874 +						type += typeToken.str;
  22.875 +					}
  22.876 +				}
  22.877 +				
  22.878 +				for( DatabaseLayout.DataType cur : DatabaseLayout.DataType.values())
  22.879 +					if( cur.toString().equalsIgnoreCase(type))
  22.880 +						isConstant = false;
  22.881 +				
  22.882 +				//Array support
  22.883 +				if( typeToken != null && typeToken.after != null && typeToken.after.getStr().equals("array")){
  22.884 +
  22.885 +					while( (typeToken = typeToken.after) != null )
  22.886 +					{					
  22.887 +						if( !isNumber(typeToken.str) && !typeToken.getStr().equals(")") && !typeToken.getStr().equals("(") && !typeToken.getStr().equals("array"))
  22.888 +							break;
  22.889 +									
  22.890 +						type += (isNumber(typeToken.str) || typeToken.str.equals(")") ? "" : " ") + typeToken.str;
  22.891 +					}
  22.892 +				}
  22.893 +				
  22.894 +				newVar = new Variable(tcur.getStr(), fileName, tcur.pos, type);
  22.895 +				newVar.setConstant(isConstant);
  22.896 +				newvars.add(newVar);
  22.897 +			}
  22.898 +		}
  22.899 +
  22.900 +		changed = !(oldvars.size() == newvars.size());
  22.901 +		
  22.902 +		if( !changed ){
  22.903 +			for (Variable var : newvars) {
  22.904 +				exists = false;
  22.905 +	
  22.906 +				for (Variable lvar : oldvars)
  22.907 +					if (lvar.equals(var))
  22.908 +						exists = true;
  22.909 +	
  22.910 +				if (!exists) {
  22.911 +					changed = true;
  22.912 +					break;
  22.913 +				}
  22.914 +			}
  22.915 +		}
  22.916 +
  22.917 +		lvars.addAll(newvars);
  22.918 +
  22.919 +		if (changed && fileName.equals(file.getName()))
  22.920 +			txt.redrawRange(0, txt.getText().length(), false);
  22.921 +
  22.922 +	}
  22.923 +	
  22.924 +	public void textModified(int start, int length, String replacedText){
  22.925 +		if (reparse) {
  22.926 +			int st = start;
  22.927 +			int end = st + length;
  22.928 +			int oldend = st + replacedText.length();
  22.929 +			boolean rebuildVars = false;
  22.930 +	
  22.931 +			long time = System.currentTimeMillis();
  22.932 +	
  22.933 +			try {
  22.934 +				parse(file.getName(), txt.getText(), st, end, oldend, ltokens, lvars, txt);
  22.935 +				
  22.936 +				for( Token cur : lasttokens)
  22.937 +					if( cur.inDefs )
  22.938 +						rebuildVars = true;
  22.939 +					
  22.940 +				if( rebuildVars )
  22.941 +					rebuildVars(file.getName());
  22.942 +				
  22.943 +				if( refreshIncludes ){
  22.944 +					parseIncludes();
  22.945 +					refreshIncludes = false;
  22.946 +				}
  22.947 +			} catch (Exception e) {
  22.948 +				System.err.println("Syntax Highlighter error!");
  22.949 +				e.printStackTrace();
  22.950 +			}
  22.951 +			// parse(file.getName(),txt.getText(),txt.,end,end,ltokens,lvars);
  22.952 +			System.out.println("Parse time: " + (System.currentTimeMillis() - time));
  22.953 +		}
  22.954 +	}
  22.955 +	
  22.956 +	public synchronized void parseIncludes(){
  22.957 +		includes.clear();
  22.958 +		
  22.959 +		BackgroundIncludeParser parser = new BackgroundIncludeParser(txt.getText());
  22.960 +		parser.start();
  22.961 +	}
  22.962 +	
  22.963 +	public synchronized void errorCheck(){
  22.964 +		BackgroundSymitarErrorChecker checker = new BackgroundSymitarErrorChecker(this);
  22.965 +		checker.start();
  22.966 +	}
  22.967 +
  22.968 +	public void reparseAll() {
  22.969 +		try {
  22.970 +			ltokens = new ArrayList<Token>();
  22.971 +			parse(file.getName(), txt.getText(), 0, txt.getCharCount() - 1, 0, ltokens, lvars, txt);
  22.972 +			rebuildVars(file.getName());
  22.973 +
  22.974 +			System.out.println("Reparsed");
  22.975 +		} catch (Exception e) {
  22.976 +			System.err.println("Syntax Highlighter error!");
  22.977 +			e.printStackTrace();
  22.978 +		}
  22.979 +	}
  22.980 +
  22.981 +
  22.982 +	public ArrayList<Token> getLtokens() {
  22.983 +		return ltokens;
  22.984 +	}
  22.985 +
  22.986 +	public ArrayList<Variable> getLvars() {
  22.987 +		return lvars;
  22.988 +	}
  22.989 +
  22.990 +	public void setReparse(boolean reparse) {
  22.991 +		this.reparse = reparse;
  22.992 +	}
  22.993 +
  22.994 +	public boolean isReparse() {
  22.995 +		return reparse;
  22.996 +	}
  22.997 +
  22.998 +	public SymitarFile getFile() {
  22.999 +		return file;
 22.1000 +	}
 22.1001 +
 22.1002 +	public void setFile(SymitarFile file) {
 22.1003 +		this.file = file;
 22.1004 +	}
 22.1005 +
 22.1006 +	public int getSym() {
 22.1007 +		return sym;
 22.1008 +	}
 22.1009 +
 22.1010 +	public void setSym(int sym) {
 22.1011 +		this.sym = sym;
 22.1012 +	}
 22.1013 +
 22.1014 +	public StyledText getTxt() {
 22.1015 +		return txt;
 22.1016 +	}
 22.1017 +
 22.1018 +	public void setTxt(StyledText txt) {
 22.1019 +		this.txt = txt;
 22.1020 +	}
 22.1021 +
 22.1022 +	public static HashSet<String> getFunctions() {
 22.1023 +		return functions;
 22.1024 +	}
 22.1025 +
 22.1026 +	public static void setFunctions(HashSet<String> functions) {
 22.1027 +		RepgenParser.functions = functions;
 22.1028 +	}
 22.1029 +
 22.1030 +	public static HashSet<String> getKeywords() {
 22.1031 +		return keywords;
 22.1032 +	}
 22.1033 +
 22.1034 +	public static void setKeywords(HashSet<String> keywords) {
 22.1035 +		RepgenParser.keywords = keywords;
 22.1036 +	}
 22.1037 +
 22.1038 +	public static HashSet<String> getSpecialvars() {
 22.1039 +		return specialvars;
 22.1040 +	}
 22.1041 +
 22.1042 +	public static void setSpecialvars(HashSet<String> specialvars) {
 22.1043 +		RepgenParser.specialvars = specialvars;
 22.1044 +	}
 22.1045 +
 22.1046 +	public static DatabaseLayout getDb() {
 22.1047 +		return db;
 22.1048 +	}
 22.1049 +
 22.1050 +	public static void setDb(DatabaseLayout db) {
 22.1051 +		RepgenParser.db = db;
 22.1052 +	}
 22.1053 +
 22.1054 +	public void setErrorList(ArrayList<Error> errorList) {
 22.1055 +		this.errorList = errorList;
 22.1056 +	}
 22.1057 +
 22.1058 +	public ArrayList<Error> getErrorList() {
 22.1059 +		return errorList;
 22.1060 +	}
 22.1061 +
 22.1062 +	public void setTaskList(ArrayList<Task> taskList) {
 22.1063 +		this.taskList = taskList;
 22.1064 +	}
 22.1065 +
 22.1066 +	public ArrayList<Task> getTaskList() {
 22.1067 +		return taskList;
 22.1068 +	}
 22.1069 +}
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/com/repdev/RunReportShell.java	Fri Jun 01 18:46:53 2007 +0000
    23.3 @@ -0,0 +1,302 @@
    23.4 +package com.repdev;
    23.5 +
    23.6 +import java.awt.TextArea;
    23.7 +
    23.8 +import org.eclipse.swt.SWT;
    23.9 +import org.eclipse.swt.events.SelectionAdapter;
   23.10 +import org.eclipse.swt.events.SelectionEvent;
   23.11 +import org.eclipse.swt.layout.FormAttachment;
   23.12 +import org.eclipse.swt.layout.FormData;
   23.13 +import org.eclipse.swt.layout.FormLayout;
   23.14 +import org.eclipse.swt.widgets.*;
   23.15 +
   23.16 +public class RunReportShell {
   23.17 +	private Shell shell, parent;
   23.18 +	private Display display;
   23.19 +	private SymitarFile file;
   23.20 +	int sym;
   23.21 +	
   23.22 +	public RunReportShell(Shell parent, SymitarFile file, int sym) {
   23.23 +		this.parent = parent;
   23.24 +		display = parent.getDisplay();
   23.25 +		this.file = file;
   23.26 +		this.sym = sym;
   23.27 +	}
   23.28 +	
   23.29 +	private void create(){
   23.30 +		shell = new Shell(parent,SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
   23.31 +		shell.setText("Run Report");
   23.32 +		shell.setImage(RepDevMain.smallRunImage);
   23.33 +		
   23.34 +		FormLayout layout = new FormLayout();
   23.35 +		layout.marginTop = 5;
   23.36 +		layout.marginBottom = 5;
   23.37 +		layout.marginLeft = 5;
   23.38 +		layout.marginRight = 5;
   23.39 +		layout.spacing = 5;
   23.40 +		shell.setLayout(layout);
   23.41 +		
   23.42 +		FormData data;
   23.43 +
   23.44 +		Label fileLabel = new Label(shell,SWT.NONE);
   23.45 +		fileLabel.setText("File name:");
   23.46 +		
   23.47 +		Label symLabel = new Label(shell,SWT.NONE);
   23.48 +		symLabel.setText("Sym: ");
   23.49 +		
   23.50 +		Text fileText = new Text(shell,SWT.READ_ONLY | SWT.BORDER);
   23.51 +		fileText.setText(file.getName());
   23.52 +		
   23.53 +		Text symText = new Text(shell,SWT.READ_ONLY | SWT.BORDER);
   23.54 +		symText.setText(String.valueOf(sym));
   23.55 +		
   23.56 +		Group promptGroup = new Group(shell,SWT.NONE);
   23.57 +		promptGroup.setText("User Prompt Options");
   23.58 +		layout = new FormLayout();
   23.59 +		layout.marginTop = 5;
   23.60 +		layout.marginBottom = 5;
   23.61 +		layout.marginLeft = 5;
   23.62 +		layout.marginRight = 5;
   23.63 +		layout.spacing = 5;
   23.64 +		promptGroup.setLayout(layout);
   23.65 +		
   23.66 +		Group fmGroup = new Group(shell,SWT.NONE);
   23.67 +		fmGroup.setText("File Maintenance Options");
   23.68 +		layout = new FormLayout();
   23.69 +		layout.marginTop = 5;
   23.70 +		layout.marginBottom = 5;
   23.71 +		layout.marginLeft = 5;
   23.72 +		layout.marginRight = 5;
   23.73 +		layout.spacing = 5;
   23.74 +		fmGroup.setLayout(layout);
   23.75 +		
   23.76 +		Button defaultsButton = new Button(promptGroup,SWT.RADIO);
   23.77 +		defaultsButton.setText("Answer default to all prompt");
   23.78 +		defaultsButton.setSelection(true);
   23.79 +		
   23.80 +		Button promptButton = new Button(promptGroup,SWT.RADIO);
   23.81 +		promptButton.setText("Prompt user at run time");
   23.82 +		
   23.83 +		final Label titleLabel = new Label(fmGroup,SWT.NONE);
   23.84 +		titleLabel.setText("Report Title: ");
   23.85 +		
   23.86 +		final Label typeLabel = new Label(fmGroup,SWT.NONE);
   23.87 +		typeLabel.setText("Root File Type: ");
   23.88 +		
   23.89 +		final Text titleText = new Text(fmGroup, SWT.BORDER);
   23.90 +		final Combo typeCombo = new Combo(fmGroup,SWT.READ_ONLY | SWT.DROP_DOWN);
   23.91 +		
   23.92 +		Button noFMButton = new Button(fmGroup,SWT.RADIO);
   23.93 +		noFMButton.setText("Do not run File Maintenance");
   23.94 +		noFMButton.addSelectionListener( new SelectionAdapter(){
   23.95 +			public void widgetSelected(SelectionEvent e){
   23.96 +				titleLabel.setEnabled(false);
   23.97 +				typeLabel.setEnabled(false);
   23.98 +				titleText.setEnabled(false);
   23.99 +				typeCombo.setEnabled(false);
  23.100 +			}
  23.101 +		});
  23.102 +		noFMButton.setSelection(true);
  23.103 +		
  23.104 +		Button yesFMButton = new Button(fmGroup,SWT.RADIO);
  23.105 +		yesFMButton.setText("Execute File Maintenance after running report");
  23.106 +		yesFMButton.addSelectionListener( new SelectionAdapter(){
  23.107 +			public void widgetSelected(SelectionEvent e){
  23.108 +				titleLabel.setEnabled(true);
  23.109 +				typeLabel.setEnabled(true);
  23.110 +				titleText.setEnabled(true);
  23.111 +				typeCombo.setEnabled(true);
  23.112 +			}
  23.113 +		});
  23.114 +		
  23.115 +		Button runButton = new Button(shell,SWT.NONE);
  23.116 +		runButton.setText("Run Report");
  23.117 +		
  23.118 +		Button cancelButton = new Button(shell,SWT.NONE);
  23.119 +		cancelButton.setText("Cancel");
  23.120 +		
  23.121 +		Button closeButton = new Button(shell,SWT.NONE);
  23.122 +		closeButton.setText("Close Window");
  23.123 +		
  23.124 +		Group ioGroup = new Group(shell,SWT.NONE);
  23.125 +		ioGroup.setText("Report Run I/O");
  23.126 +		layout = new FormLayout();
  23.127 +		layout.marginTop = 5;
  23.128 +		layout.marginBottom = 5;
  23.129 +		layout.marginLeft = 5;
  23.130 +		layout.marginRight = 5;
  23.131 +		layout.spacing = 5;
  23.132 +		ioGroup.setLayout(layout);
  23.133 +		
  23.134 +		ProgressBar progressBar = new ProgressBar(ioGroup,SWT.NONE);
  23.135 +		
  23.136 +		Label messageLabel = new Label(ioGroup,SWT.NONE);
  23.137 +		messageLabel.setText("Messages:");
  23.138 +		
  23.139 +		Text ioText = new Text(ioGroup,SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
  23.140 +		
  23.141 +		Label promptLabel = new Label(ioGroup,SWT.NONE);
  23.142 +		promptLabel.setText("Prompt:");
  23.143 +		
  23.144 +		Text promptText = new Text(ioGroup,SWT.BORDER);
  23.145 +		
  23.146 +		Button nextPromptButton = new Button(ioGroup,SWT.NONE);
  23.147 +		nextPromptButton.setText("Next");
  23.148 +		
  23.149 +		Button prevPromptButton = new Button(ioGroup,SWT.NONE);
  23.150 +		prevPromptButton.setText("Prev");
  23.151 +		
  23.152 +		data = new FormData();
  23.153 +		data.left = new FormAttachment(0);
  23.154 +		data.top = new FormAttachment(0);
  23.155 +		fileLabel.setLayoutData(data);
  23.156 +		
  23.157 +		data = new FormData();
  23.158 +		data.left = new FormAttachment(fileLabel);
  23.159 +		data.right = new FormAttachment(symLabel);
  23.160 +		data.top = new FormAttachment(0);
  23.161 +		fileText.setLayoutData(data);
  23.162 +		
  23.163 +		data = new FormData();
  23.164 +		data.right = new FormAttachment(symText);
  23.165 +		data.top = new FormAttachment(0);
  23.166 +		symLabel.setLayoutData(data);
  23.167 +		
  23.168 +		data = new FormData();
  23.169 +		//data.left = new FormAttachment(symLabel);
  23.170 +		data.right = new FormAttachment(100);
  23.171 +		data.top = new FormAttachment(0);
  23.172 +		symText.setLayoutData(data);
  23.173 +		
  23.174 +		data = new FormData();
  23.175 +		data.left = new FormAttachment(0);
  23.176 +		data.top = new FormAttachment(fileText,0,SWT.BOTTOM);
  23.177 +		data.right = new FormAttachment(ioGroup);
  23.178 +		//data.bottom = new FormAttachment(fmGroup);
  23.179 +		promptGroup.setLayoutData(data);
  23.180 +		
  23.181 +		data = new FormData();
  23.182 +		data.left = new FormAttachment(0);
  23.183 +		data.top = new FormAttachment(promptGroup);
  23.184 +		data.right = new FormAttachment(ioGroup);
  23.185 +		fmGroup.setLayoutData(data);
  23.186 +		
  23.187 +		data = new FormData();
  23.188 +		data.left = new FormAttachment(promptGroup);
  23.189 +		data.right = new FormAttachment(100);
  23.190 +		data.top = new FormAttachment(symText);
  23.191 +		data.bottom = new FormAttachment(cancelButton);
  23.192 +		ioGroup.setLayoutData(data);
  23.193 +		
  23.194 +		data = new FormData();
  23.195 +		data.right = new FormAttachment(100);
  23.196 +		data.bottom = new FormAttachment(100);
  23.197 +		closeButton.setLayoutData(data);
  23.198 +		
  23.199 +		data = new FormData();
  23.200 +		data.bottom = new FormAttachment(100);
  23.201 +		data.right = new FormAttachment(closeButton);
  23.202 +		cancelButton.setLayoutData(data);
  23.203 +		
  23.204 +		data = new FormData();
  23.205 +		data.bottom = new FormAttachment(100);
  23.206 +		data.right = new FormAttachment(cancelButton);
  23.207 +		runButton.setLayoutData(data);
  23.208 +		
  23.209 +		data = new FormData();
  23.210 +		data.left = new FormAttachment(0);
  23.211 +		data.top = new FormAttachment(0);
  23.212 +		defaultsButton.setLayoutData(data);
  23.213 +		
  23.214 +		data = new FormData();
  23.215 +		data.left = new FormAttachment(0);
  23.216 +		data.top = new FormAttachment(defaultsButton);
  23.217 +		promptButton.setLayoutData(data);
  23.218 +		
  23.219 +		data = new FormData();
  23.220 +		data.left = new FormAttachment(0);
  23.221 +		data.top = new FormAttachment(0);
  23.222 +		noFMButton.setLayoutData(data);
  23.223 +		
  23.224 +		data = new FormData();
  23.225 +		data.left = new FormAttachment(0);
  23.226 +		data.right = new FormAttachment(100);
  23.227 +		data.top = new FormAttachment(noFMButton);
  23.228 +		yesFMButton.setLayoutData(data);
  23.229 +		
  23.230 +		data = new FormData();
  23.231 +		data.right = new FormAttachment(100);
  23.232 +		data.top = new FormAttachment(yesFMButton);
  23.233 +		titleText.setLayoutData(data);
  23.234 +		
  23.235 +		data = new FormData();
  23.236 +		data.right = new FormAttachment(titleText);
  23.237 +		data.top = new FormAttachment(yesFMButton);
  23.238 +		titleLabel.setLayoutData(data);
  23.239 +		
  23.240 +		data = new FormData();
  23.241 +		data.right = new FormAttachment(100);
  23.242 +		data.top = new FormAttachment(titleText);
  23.243 +		typeCombo.setLayoutData(data);
  23.244 +		
  23.245 +		data = new FormData();
  23.246 +		data.right = new FormAttachment(typeCombo);
  23.247 +		data.top = new FormAttachment(titleText);
  23.248 +		typeLabel.setLayoutData(data);
  23.249 +		
  23.250 +		data = new FormData();
  23.251 +		data.left = new FormAttachment(0);
  23.252 +		data.top = new FormAttachment(0);
  23.253 +		data.right = new FormAttachment(100);
  23.254 +		progressBar.setLayoutData(data);
  23.255 +		
  23.256 +		data = new FormData();
  23.257 +		data.left = new FormAttachment(0);
  23.258 +		data.top = new FormAttachment(progressBar);
  23.259 +		messageLabel.setLayoutData(data);
  23.260 +		
  23.261 +		data = new FormData();
  23.262 +		data.left = new FormAttachment(0);
  23.263 +		data.right = new FormAttachment(100);
  23.264 +		data.top = new FormAttachment(messageLabel);
  23.265 +		data.bottom = new FormAttachment(prevPromptButton);
  23.266 +		ioText.setLayoutData(data);
  23.267 +		
  23.268 +		data = new FormData();
  23.269 +		data.left = new FormAttachment(0);
  23.270 +		data.bottom = new FormAttachment(100);
  23.271 +		promptLabel.setLayoutData(data);
  23.272 +		
  23.273 +		data = new FormData();
  23.274 +		data.left = new FormAttachment(promptLabel);
  23.275 +		data.right = new FormAttachment(nextPromptButton);
  23.276 +		data.bottom = new FormAttachment(100);
  23.277 +		promptText.setLayoutData(data);
  23.278 +		
  23.279 +		data = new FormData();
  23.280 +		data.right = new FormAttachment(100);
  23.281 +		data.bottom = new FormAttachment(100);
  23.282 +		prevPromptButton.setLayoutData(data);
  23.283 +		
  23.284 +		data = new FormData();
  23.285 +		data.right = new FormAttachment(prevPromptButton);
  23.286 +		data.bottom = new FormAttachment(100);
  23.287 +		nextPromptButton.setLayoutData(data);
  23.288 +		
  23.289 +		shell.pack();
  23.290 +		shell.open();
  23.291 +		shell.setMinimumSize(shell.getSize().x + 100, shell.getSize().y + 50);
  23.292 +	}
  23.293 +	
  23.294 +	
  23.295 +	public void open(){
  23.296 +		create();
  23.297 +
  23.298 +		while (!shell.isDisposed()) {
  23.299 +			if (!display.readAndDispatch())
  23.300 +				display.sleep();
  23.301 +		}
  23.302 +	}
  23.303 +	
  23.304 +	
  23.305 +}
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/com/repdev/ScriptHandler.java	Fri Jun 01 18:46:53 2007 +0000
    24.3 @@ -0,0 +1,62 @@
    24.4 +package com.repdev;
    24.5 +
    24.6 +import java.util.Vector;
    24.7 +
    24.8 +/**
    24.9 + * A script handler, that tries to match strings and returns true when it found
   24.10 + * the string it searched for.
   24.11 + * <P>
   24.12 + * <B>Maintainer:</B> Matthias L. Jugel
   24.13 + * 
   24.14 + * @version $Id: ScriptHandler.java 499 2005-09-29 08:24:54Z leo $
   24.15 + * @author Matthias L. Jugel, Marcus Mei�ner
   24.16 + */
   24.17 +public class ScriptHandler {
   24.18 +
   24.19 +	/** debugging level */
   24.20 +	private final static int debug = 0;
   24.21 +
   24.22 +	private int matchPos; // current position in the match
   24.23 +	private byte[] match; // the current bytes to look for
   24.24 +	private boolean done = true; // nothing to look for!
   24.25 +
   24.26 +	/**
   24.27 +	 * Setup the parser using the passed string.
   24.28 +	 * 
   24.29 +	 * @param match
   24.30 +	 *            the string to look for
   24.31 +	 */
   24.32 +	public void setup(String match) {
   24.33 +		if (match == null)
   24.34 +			return;
   24.35 +		this.match = match.getBytes();
   24.36 +		matchPos = 0;
   24.37 +		done = false;
   24.38 +	}
   24.39 +
   24.40 +	/**
   24.41 +	 * Try to match the byte array s against the match string.
   24.42 +	 * 
   24.43 +	 * @param s
   24.44 +	 *            the array of bytes to match against
   24.45 +	 * @param length
   24.46 +	 *            the amount of bytes in the array
   24.47 +	 * @return true if the string was found, else false
   24.48 +	 */
   24.49 +	public boolean match(byte[] s, int length) {
   24.50 +		if (done)
   24.51 +			return true;
   24.52 +		for (int i = 0; !done && i < length; i++) {
   24.53 +			if (s[i] == match[matchPos]) {
   24.54 +				// the whole thing matched so, return the match answer
   24.55 +				// and reset to use the next match
   24.56 +				if (++matchPos >= match.length) {
   24.57 +					done = true;
   24.58 +					return true;
   24.59 +				}
   24.60 +			} else
   24.61 +				matchPos = 0; // get back to the beginning
   24.62 +		}
   24.63 +		return false;
   24.64 +	}
   24.65 +}
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/com/repdev/SessionError.java	Fri Jun 01 18:46:53 2007 +0000
    25.3 @@ -0,0 +1,5 @@
    25.4 +package com.repdev;
    25.5 +
    25.6 +public enum SessionError {
    25.7 +	NONE, SERVER_NOT_FOUND, AIX_LOGIN_WRONG, SYM_INVALID, USERID_INVALID, ALREADY_CONNECTED, NOT_CONNECTED, IO_ERROR, CONSOLE_BLOCKED,
    25.8 +};
    25.9 \ No newline at end of file
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/com/repdev/SuggestShell.java	Fri Jun 01 18:46:53 2007 +0000
    26.3 @@ -0,0 +1,361 @@
    26.4 +package com.repdev;
    26.5 +
    26.6 +import java.util.ArrayList;
    26.7 +import java.util.Collections;
    26.8 +
    26.9 +import org.eclipse.swt.SWT;
   26.10 +import org.eclipse.swt.custom.CLabel;
   26.11 +import org.eclipse.swt.custom.StyleRange;
   26.12 +import org.eclipse.swt.custom.StyledText;
   26.13 +import org.eclipse.swt.custom.VerifyKeyListener;
   26.14 +import org.eclipse.swt.events.FocusAdapter;
   26.15 +import org.eclipse.swt.events.FocusEvent;
   26.16 +import org.eclipse.swt.events.FocusListener;
   26.17 +import org.eclipse.swt.events.KeyEvent;
   26.18 +import org.eclipse.swt.events.KeyListener;
   26.19 +import org.eclipse.swt.events.MouseAdapter;
   26.20 +import org.eclipse.swt.events.MouseEvent;
   26.21 +import org.eclipse.swt.events.MouseListener;
   26.22 +import org.eclipse.swt.events.SelectionAdapter;
   26.23 +import org.eclipse.swt.events.SelectionEvent;
   26.24 +import org.eclipse.swt.events.SelectionListener;
   26.25 +import org.eclipse.swt.events.TraverseEvent;
   26.26 +import org.eclipse.swt.events.TraverseListener;
   26.27 +import org.eclipse.swt.events.VerifyEvent;
   26.28 +import org.eclipse.swt.graphics.Color;
   26.29 +import org.eclipse.swt.graphics.Point;
   26.30 +import org.eclipse.swt.graphics.RGB;
   26.31 +import org.eclipse.swt.layout.FillLayout;
   26.32 +import org.eclipse.swt.widgets.Control;
   26.33 +import org.eclipse.swt.widgets.Event;
   26.34 +import org.eclipse.swt.widgets.Layout;
   26.35 +import org.eclipse.swt.widgets.Shell;
   26.36 +import org.eclipse.swt.widgets.Table;
   26.37 +import org.eclipse.swt.widgets.TableItem;
   26.38 +import com.repdev.SyntaxHighlighter.*;
   26.39 +import com.repdev.RepgenParser.*;
   26.40 +import com.repdev.DatabaseLayout.*;
   26.41 +
   26.42 +public class SuggestShell {
   26.43 +	private Shell shell,tooltip;
   26.44 +	private StyledText toolText;
   26.45 +	private Table table;
   26.46 +	private StyledText txt;
   26.47 +	private RepgenParser parser;
   26.48 +	private boolean open = false;
   26.49 +	private Token current;
   26.50 +
   26.51 +	public void open() {
   26.52 +		open = true;
   26.53 +		update();
   26.54 +
   26.55 +		shell.setVisible(true);
   26.56 +		tooltip.setVisible(true);
   26.57 +		shell.moveAbove(txt);
   26.58 +		txt.setFocus();
   26.59 +	}
   26.60 +
   26.61 +	private void update() {
   26.62 +		String tokenStr = "";
   26.63 +		Point loc = shell.getDisplay().map(txt, null, txt.getLocationAtOffset(txt.getCaretOffset()));
   26.64 +		loc.x += 5;
   26.65 +		loc.y += 20;
   26.66 +		shell.setLocation(loc);
   26.67 +		tooltip.setLocation(shell.getLocation().x+shell.getSize().x, shell.getLocation().y);
   26.68 +
   26.69 +		if (parser == null || parser.getLtokens() == null)
   26.70 +			return;
   26.71 +
   26.72 +		current = null;
   26.73 +
   26.74 +		for (Token t : parser.getLtokens()) {
   26.75 +			if (t.getEnd() == txt.getCaretOffset()) {
   26.76 +				current = t;
   26.77 +				break;
   26.78 +			}
   26.79 +		}
   26.80 +
   26.81 +		table.removeAll();
   26.82 +
   26.83 +		if (current == null)
   26.84 +			tokenStr = "";
   26.85 +		else
   26.86 +			tokenStr = current.getStr();
   26.87 +
   26.88 +		table.setRedraw(false);
   26.89 +
   26.90 +		// add DB subfields, if we are on that
   26.91 +		if (current != null && (tokenStr.equals(":") || (current.getBefore() != null && current.getBefore().getStr().equals(":")))) {
   26.92 +			Token record = current.getBefore();
   26.93 +
   26.94 +			if ((current.getBefore() != null && current.getBefore().getStr().equals(":")))
   26.95 +				record = record.getBefore();
   26.96 +
   26.97 +			if (record == null)
   26.98 +				return;
   26.99 +
  26.100 +			DatabaseLayout.Record dRecord = null;
  26.101 +
  26.102 +			if (DatabaseLayout.getInstance().containsRecordName(record.getStr())) {
  26.103 +				for (DatabaseLayout.Record cur : DatabaseLayout.getInstance().getFlatRecords()) {
  26.104 +					if (cur.getName().toLowerCase().equals(record.getStr())) {
  26.105 +						dRecord = cur;
  26.106 +						break;
  26.107 +					}
  26.108 +				}
  26.109 +
  26.110 +				ArrayList<Field> sortedFields = dRecord.getFields();
  26.111 +
  26.112 +				Collections.sort(sortedFields);
  26.113 +
  26.114 +				for (DatabaseLayout.Field field : dRecord.getFields()) {
  26.115 +					if (tokenStr.equals(":") || field.getName().toLowerCase().startsWith(tokenStr)) {
  26.116 +						TableItem item = new TableItem(table, SWT.NONE);
  26.117 +						item.setText(field.getName().toUpperCase() + "   " + field.getDataType());
  26.118 +						item.setImage(RepDevMain.smallDBFieldImage);
  26.119 +						item.setData("value", field.getName().toUpperCase());
  26.120 +						String tooltip = field.getName().toUpperCase() + "\nType: " + field.getDataType() + (field.getLen() != -1 ? "(" + field.getLen() + ")" : "" ) + "\nField Number: " + field.getFieldNumber() + "\n\n" + field.getDescription();
  26.121 +						
  26.122 +						item.setData("tooltip", tooltip) ;
  26.123 +						StyleRange[] styles = {
  26.124 +								new StyleRange(0,field.getName().length(),null,null,SWT.BOLD),
  26.125 +								new StyleRange(field.getName().length()+1,tooltip.indexOf("\n\n") - field.getName().length(),null,null,SWT.ITALIC),
  26.126 +						};
  26.127 +						item.setData("tooltipstyles", styles);
  26.128 +					}
  26.129 +				}
  26.130 +			}
  26.131 +		} else {
  26.132 +			// Otherwise, let's populate with variable names, db records, etc.
  26.133 +			if (tokenStr.equals("=") || tokenStr.equals(":"))
  26.134 +				tokenStr = "";
  26.135 +			
  26.136 +			ArrayList<Variable> vars = new ArrayList<Variable>(parser.getLvars());
  26.137 +			
  26.138 +			if(tokenStr.startsWith("@"))
  26.139 +				for( Object cur :RepgenParser.getSpecialvars().toArray())
  26.140 +					if( cur instanceof String)
  26.141 +						vars.add(new Variable((String)cur,"Special Variable",-1,""));
  26.142 +				
  26.143 +			Collections.sort(vars);
  26.144 +			
  26.145 +			
  26.146 +
  26.147 +			for (Variable var : vars) {
  26.148 +				if (var.getName().toLowerCase().startsWith(tokenStr)) {
  26.149 +					TableItem item = new TableItem(table, SWT.NONE);
  26.150 +					item.setText(var.getName().toUpperCase() + "   " + (var.isConstant() ? var.getType() : var.getType().toUpperCase()));
  26.151 +					item.setImage(RepDevMain.smallVariableImage);
  26.152 +					item.setData("value", var.getName().toUpperCase());
  26.153 +					
  26.154 +					String tooltip = var.getName().toUpperCase();
  26.155 +					
  26.156 +					if( var.isConstant())
  26.157 +						tooltip += "\nConstant Value: " + var.getType();
  26.158 +					else
  26.159 +						tooltip += "\nType: " + var.getType().toUpperCase();
  26.160 +					
  26.161 +					tooltip += "\nFile: " + var.getFilename();
  26.162 +					
  26.163 +					item.setData("tooltip", tooltip);
  26.164 +					
  26.165 +					StyleRange[] styles = {
  26.166 +							new StyleRange(0,var.getName().length(),null,null,SWT.BOLD),
  26.167 +							
  26.168 +					};
  26.169 +					item.setData("tooltipstyles", styles);
  26.170 +				}
  26.171 +			}
  26.172 +
  26.173 +			ArrayList<Record> records = DatabaseLayout.getInstance().getFlatRecords();
  26.174 +			for (Record record : records) {
  26.175 +				if (record.getName().toLowerCase().startsWith(tokenStr)) {
  26.176 +					TableItem item = new TableItem(table, SWT.NONE);
  26.177 +					item.setText(record.getName().toUpperCase());
  26.178 +					item.setImage(RepDevMain.smallDBRecordImage);
  26.179 +					item.setData("value", record.getName().toUpperCase());
  26.180 +					
  26.181 +					String tooltip = record.getName().toUpperCase() + "\nParent: " + ( record.getRoot() == null ? "None" : record.getRoot().getName() ) + "\n\n" + record.getDescription();
  26.182 +					
  26.183 +					item.setData("tooltip", tooltip) ;
  26.184 +					
  26.185 +					StyleRange[] styles = {
  26.186 +							new StyleRange(0,record.getName().length(),null,null,SWT.BOLD),
  26.187 +							new StyleRange(record.getName().length()+1,tooltip.indexOf("\n\n") - record.getName().length(),null,null,SWT.ITALIC),
  26.188 +					};
  26.189 +					item.setData("tooltipstyles", styles);
  26.190 +				}
  26.191 +			}
  26.192 +
  26.193 +		}
  26.194 +
  26.195 +
  26.196 +		table.setRedraw(true);
  26.197 +		table.setSelection(0);
  26.198 +		refreshTooltip();
  26.199 +
  26.200 +	}
  26.201 +
  26.202 +	public void attach(StyledText txt, RepgenParser parser) {
  26.203 +		if (txt == null || parser== null || shell == null || this.txt != txt || this.parser != parser|| shell.isDisposed()) {
  26.204 +			this.txt = txt;
  26.205 +			this.parser = parser;
  26.206 +			createNewShell();
  26.207 +		}
  26.208 +	}
  26.209 +
  26.210 +	public void close() {
  26.211 +		open = false;
  26.212 +		shell.setVisible(false);
  26.213 +		tooltip.setVisible(false);
  26.214 +	}
  26.215 +
  26.216 +	private void createNewShell() {
  26.217 +		if (shell != null && !shell.isDisposed()){
  26.218 +			shell.dispose();
  26.219 +			tooltip.dispose();
  26.220 +		}
  26.221 +
  26.222 +		shell = new Shell(txt.getDisplay(), SWT.BORDER | SWT.ON_TOP);
  26.223 +		shell.setVisible(false);
  26.224 +		shell.setLayout(new FillLayout());
  26.225 +		
  26.226 +		tooltip = new Shell(txt.getDisplay(),SWT.BORDER | SWT.ON_TOP  );
  26.227 +		tooltip.setVisible(false);
  26.228 +		tooltip.setLayout(new FillLayout());
  26.229 +		
  26.230 +		toolText = new StyledText(tooltip,SWT.READ_ONLY);
  26.231 +		toolText.setText("Testing Tooltip");
  26.232 +		toolText.setBackground(new Color(shell.getDisplay(),new RGB(255,255,225)));
  26.233 +
  26.234 +		if( txt.getData("suggestlistenersloaded") == null){
  26.235 +			txt.setData("suggestlistenersloaded", true);
  26.236 +			
  26.237 +			txt.addKeyListener(new KeyListener() {
  26.238 +	
  26.239 +				public void keyPressed(KeyEvent e) {
  26.240 +	
  26.241 +					if (open && e.keyCode != SWT.ARROW_DOWN && e.keyCode != SWT.ARROW_UP && e.keyCode != SWT.SHIFT)
  26.242 +						update();
  26.243 +	
  26.244 +					if ((e.character == ' ' && e.stateMask == SWT.CTRL) || e.character == ':') {
  26.245 +						open();
  26.246 +					}
  26.247 +	
  26.248 +					if (open && (e.keyCode == SWT.ESC || e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT))
  26.249 +						close();
  26.250 +				}
  26.251 +	
  26.252 +				public void keyReleased(KeyEvent e) {
  26.253 +					// TODO Auto-generated method stub
  26.254 +	
  26.255 +				}
  26.256 +	
  26.257 +			});
  26.258 +	
  26.259 +			txt.addMouseListener(new MouseAdapter() {
  26.260 +				public void mouseDown(MouseEvent e) {
  26.261 +					if (open)
  26.262 +						close();
  26.263 +				}
  26.264 +			});
  26.265 +	
  26.266 +			txt.addFocusListener(new FocusAdapter() {
  26.267 +				public void focusGained(FocusEvent e){
  26.268 +					
  26.269 +				}
  26.270 +	
  26.271 +				public void focusLost(FocusEvent e) {
  26.272 +	
  26.273 +					if (open && !(shell.isFocusControl() || table.isFocusControl())) {
  26.274 +						close();
  26.275 +						txt.setFocus();
  26.276 +					}
  26.277 +				}
  26.278 +	
  26.279 +			});
  26.280 +	
  26.281 +			txt.addVerifyKeyListener(new VerifyKeyListener() {
  26.282 +				public void verifyKey(VerifyEvent e) {
  26.283 +	
  26.284 +					if (open) {
  26.285 +	
  26.286 +						if (e.keyCode == SWT.ARROW_DOWN) {
  26.287 +							table.setSelection(Math.min(table.getSelectionIndex() + 1, table.getItemCount() - 1));
  26.288 +							refreshTooltip();
  26.289 +							e.doit = false;
  26.290 +						} else if (e.keyCode == SWT.ARROW_UP) {
  26.291 +							table.setSelection(Math.max(table.getSelectionIndex() - 1, 0));
  26.292 +							refreshTooltip();
  26.293 +							e.doit = false;
  26.294 +						} else if ((e.keyCode == '\r' || e.character == ':') && table.getSelectionIndex() != -1 && table.getItemCount() > 0) {
  26.295 +							String value = (String) table.getSelection()[0].getData("value");
  26.296 +	
  26.297 +							if (e.character == ':')
  26.298 +								value += ":";
  26.299 +	
  26.300 +							if (current != null && current.getStr().equals(":")) {
  26.301 +								txt.replaceTextRange(txt.getCaretOffset(), 0, value);
  26.302 +								txt.setCaretOffset(txt.getCaretOffset() + value.length());
  26.303 +							} else {
  26.304 +								int len = 0;
  26.305 +								if (current != null && !current.getStr().equals(":") && !current.getStr().equals("="))
  26.306 +									len = current.getStr().length();
  26.307 +	
  26.308 +								txt.replaceTextRange(txt.getCaretOffset() - len, len, value);
  26.309 +	
  26.310 +								if (len == 0)
  26.311 +									txt.setCaretOffset(txt.getCaretOffset() + value.length());
  26.312 +							}
  26.313 +	
  26.314 +							e.doit = false;
  26.315 +	
  26.316 +							if (e.keyCode == '\r')
  26.317 +								close();
  26.318 +						}
  26.319 +	
  26.320 +					}
  26.321 +				}
  26.322 +	
  26.323 +			});
  26.324 +		}
  26.325 +
  26.326 +		table = new Table(shell, SWT.SINGLE);
  26.327 +
  26.328 +		table.addSelectionListener(new SelectionAdapter() {
  26.329 +			public void widgetSelected(SelectionEvent e){
  26.330 +				refreshTooltip();
  26.331 +			}
  26.332 +			
  26.333 +			public void widgetDefaultSelected(SelectionEvent e) {
  26.334 +				if (open && e.item != null) {
  26.335 +					Event event = new Event();
  26.336 +					event.keyCode = '\r';
  26.337 +					txt.notifyListeners(SWT.KeyDown, event);
  26.338 +					
  26.339 +				}
  26.340 +			}
  26.341 +		});
  26.342 +
  26.343 +		shell.setSize(280, 180);
  26.344 +		tooltip.setSize(200,120);
  26.345 +
  26.346 +		// shell.open();
  26.347 +		txt.setFocus();
  26.348 +	}
  26.349 +	
  26.350 +	public void refreshTooltip(){
  26.351 +		if( table.getSelectionIndex() == -1){
  26.352 +			toolText.setText("");
  26.353 +			return;
  26.354 +		}
  26.355 +		
  26.356 +		if( table.getSelection()[0].getData("tooltip") != null ){
  26.357 +			toolText.setText((String)table.getSelection()[0].getData("tooltip"));
  26.358 +			toolText.setStyleRanges((StyleRange[])table.getSelection()[0].getData("tooltipstyles"));
  26.359 +		}
  26.360 +		else
  26.361 +			toolText.setText("");
  26.362 +	}
  26.363 +
  26.364 +}
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/com/repdev/SymLoginShell.java	Fri Jun 01 18:46:53 2007 +0000
    27.3 @@ -0,0 +1,214 @@
    27.4 +package com.repdev;
    27.5 +
    27.6 +import org.eclipse.swt.*;
    27.7 +import org.eclipse.swt.events.SelectionAdapter;
    27.8 +import org.eclipse.swt.events.SelectionEvent;
    27.9 +import org.eclipse.swt.layout.*;
   27.10 +import org.eclipse.swt.widgets.*;
   27.11 +
   27.12 +public class SymLoginShell {
   27.13 +	private static SymLoginShell me = new SymLoginShell();
   27.14 +	private Shell shell;
   27.15 +
   27.16 +	private SymLoginShell() {
   27.17 +	}
   27.18 +
   27.19 +	private int LABEL_WIDTH = 80;
   27.20 +	private int result = -1;
   27.21 +	private int sym;
   27.22 +	private String aixUsername, aixPassword, userID;
   27.23 +	public static String lastUsername = Config.getLastUsername() == null ? "" : Config.getLastUsername(), lastPassword = "";
   27.24 +
   27.25 +	private void create(Shell parent, int inSym) {
   27.26 +		result = -1;
   27.27 +
   27.28 +		FormLayout layout = new FormLayout();
   27.29 +		layout.marginTop = 5;
   27.30 +		layout.marginBottom = 5;
   27.31 +		layout.marginLeft = 5;
   27.32 +		layout.marginRight = 5;
   27.33 +		layout.spacing = 5;
   27.34 +
   27.35 +		shell = new Shell(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
   27.36 +		shell.setText("Sym Login");
   27.37 +		shell.setLayout(layout);
   27.38 +
   27.39 +		Label symLabel = new Label(shell, SWT.NONE);
   27.40 +		symLabel.setText("Sym:");
   27.41 +
   27.42 +		Label aixUserLabel = new Label(shell, SWT.NONE);
   27.43 +		aixUserLabel.setText("AIX Username:");
   27.44 +
   27.45 +		Label aixPasswordLabel = new Label(shell, SWT.NONE);
   27.46 +		aixPasswordLabel.setText("AIX Password:");
   27.47 +
   27.48 +		Label userIDLabel = new Label(shell, SWT.NONE);
   27.49 +		userIDLabel.setText("UserID:");
   27.50 +
   27.51 +		final Text symText = new Text(shell, SWT.BORDER | (inSym != -1 ? SWT.READ_ONLY : SWT.NONE));
   27.52 +
   27.53 +		if (inSym != -1)
   27.54 +			symText.setText(String.valueOf(inSym));
   27.55 +
   27.56 +		final Text aixUserText = new Text(shell, SWT.BORDER);
   27.57 +		aixUserText.setText(lastUsername);
   27.58 +
   27.59 +		final Text aixPasswordText = new Text(shell, SWT.BORDER | SWT.PASSWORD);
   27.60 +		aixPasswordText.setText(lastPassword);
   27.61 +
   27.62 +		final Text userIDText = new Text(shell, SWT.BORDER | SWT.PASSWORD);
   27.63 +
   27.64 +		if (inSym != -1)
   27.65 +			aixUserText.setFocus();
   27.66 +		
   27.67 +		if( !aixUserText.getText().trim().equals("") )
   27.68 +			aixPasswordText.setFocus();
   27.69 +
   27.70 +		Button ok = new Button(shell, SWT.PUSH);
   27.71 +		ok.setText("Login");
   27.72 +		ok.addSelectionListener(new SelectionAdapter() {
   27.73 +			public void widgetSelected(SelectionEvent e) {
   27.74 +
   27.75 +				try {
   27.76 +					sym = Integer.parseInt(symText.getText().trim());
   27.77 +				} catch (Exception ex) {
   27.78 +					MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
   27.79 +					dialog.setMessage("The Sym number you entered was invalid");
   27.80 +					dialog.setText("Input Error");
   27.81 +					dialog.open();
   27.82 +					symText.setFocus();
   27.83 +					return;
   27.84 +				}
   27.85 +
   27.86 +				aixUsername = aixUserText.getText().trim();
   27.87 +				aixPassword = aixPasswordText.getText().trim();
   27.88 +				userID = userIDText.getText().trim();
   27.89 +
   27.90 +				lastUsername = aixUsername;
   27.91 +				lastPassword = aixPassword;
   27.92 +				
   27.93 +				//Config.setLastPassword(lastPassword);
   27.94 +				Config.setLastUsername(lastUsername);
   27.95 +
   27.96 +				result = 1000;
   27.97 +
   27.98 +				shell.dispose();
   27.99 +			}
  27.100 +		});
  27.101 +
  27.102 +		Button cancel = new Button(shell, SWT.PUSH);
  27.103 +		cancel.setText("Cancel");
  27.104 +		cancel.addSelectionListener(new SelectionAdapter() {
  27.105 +			public void widgetSelected(SelectionEvent e) {
  27.106 +				result = -1;
  27.107 +				shell.dispose();
  27.108 +			}
  27.109 +		});
  27.110 +
  27.111 +		FormData data;
  27.112 +
  27.113 +		data = new FormData();
  27.114 +		data.left = new FormAttachment(0);
  27.115 +		data.top = new FormAttachment(0);
  27.116 +		data.width = LABEL_WIDTH;
  27.117 +		symLabel.setLayoutData(data);
  27.118 +
  27.119 +		data = new FormData();
  27.120 +		data.left = new FormAttachment(symLabel);
  27.121 +		data.top = new FormAttachment(0);
  27.122 +		data.right = new FormAttachment(100);
  27.123 +		data.width = 160;
  27.124 +		symText.setLayoutData(data);
  27.125 +
  27.126 +		data = new FormData();
  27.127 +		data.left = new FormAttachment(0);
  27.128 +		data.top = new FormAttachment(symText);
  27.129 +		data.width = LABEL_WIDTH;
  27.130 +		aixUserLabel.setLayoutData(data);
  27.131 +
  27.132 +		data = new FormData();
  27.133 +		data.left = new FormAttachment(aixUserLabel);
  27.134 +		data.top = new FormAttachment(symText);
  27.135 +		data.right = new FormAttachment(100);
  27.136 +		aixUserText.setLayoutData(data);
  27.137 +
  27.138 +		data = new FormData();
  27.139 +		data.left = new FormAttachment(0);
  27.140 +		data.top = new FormAttachment(aixUserText);
  27.141 +		data.width = LABEL_WIDTH;
  27.142 +		aixPasswordLabel.setLayoutData(data);
  27.143 +
  27.144 +		data = new FormData();
  27.145 +		data.left = new FormAttachment(aixPasswordLabel);
  27.146 +		data.top = new FormAttachment(aixUserText);
  27.147 +		data.right = new FormAttachment(100);
  27.148 +		aixPasswordText.setLayoutData(data);
  27.149 +
  27.150 +		data = new FormData();
  27.151 +		data.left = new FormAttachment(0);
  27.152 +		data.top = new FormAttachment(aixPasswordText);
  27.153 +		data.width = LABEL_WIDTH;
  27.154 +		userIDLabel.setLayoutData(data);
  27.155 +
  27.156 +		data = new FormData();
  27.157 +		data.left = new FormAttachment(userIDLabel);
  27.158 +		data.top = new FormAttachment(aixPasswordText);
  27.159 +		data.right = new FormAttachment(100);
  27.160 +		userIDText.setLayoutData(data);
  27.161 +
  27.162 +		data = new FormData();
  27.163 +		data.top = new FormAttachment(userIDText);
  27.164 +		data.right = new FormAttachment(100);
  27.165 +		cancel.setLayoutData(data);
  27.166 +
  27.167 +		data = new FormData();
  27.168 +		data.top = new FormAttachment(userIDText);
  27.169 +		data.right = new FormAttachment(cancel);
  27.170 +		ok.setLayoutData(data);
  27.171 +
  27.172 +		shell.setDefaultButton(ok);
  27.173 +		shell.pack();
  27.174 +		shell.open();
  27.175 +	}
  27.176 +
  27.177 +	private void symLogin() {
  27.178 +		SymitarSession session = RepDevMain.SYMITAR_SESSIONS.get(sym);
  27.179 +
  27.180 +		if (session == null) {
  27.181 +			if (Config.getServer().equals("test"))
  27.182 +				session = new TestingSymitarSession();
  27.183 +			else
  27.184 +				session = new DirectSymitarSession();
  27.185 +
  27.186 +			RepDevMain.SYMITAR_SESSIONS.put(sym, session);
  27.187 +		}
  27.188 +
  27.189 +		if (session.isConnected()) {
  27.190 +			me.result = -1;
  27.191 +			return;
  27.192 +		}
  27.193 +
  27.194 +		SessionError error = session.connect(Config.getServer(), aixUsername, aixPassword, sym, userID);
  27.195 +
  27.196 +		if (error == SessionError.NONE)
  27.197 +			me.result = sym;
  27.198 +		else
  27.199 +			me.result = -1;
  27.200 +	}
  27.201 +
  27.202 +	// returns -1 on cancel
  27.203 +	// Pass -1 to sym to hide sym field
  27.204 +	public static int symLogin(Display display, Shell parent, int sym) {
  27.205 +		me.create(parent, sym);
  27.206 +
  27.207 +		while (!me.shell.isDisposed()) {
  27.208 +			if (!display.readAndDispatch())
  27.209 +				display.sleep();
  27.210 +		}
  27.211 +
  27.212 +		if (me.result != -1)
  27.213 +			me.symLogin();
  27.214 +
  27.215 +		return me.result;
  27.216 +	}
  27.217 +}
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/com/repdev/SymitarFile.java	Fri Jun 01 18:46:53 2007 +0000
    28.3 @@ -0,0 +1,66 @@
    28.4 +package com.repdev;
    28.5 +
    28.6 +import java.util.Date;
    28.7 +
    28.8 +public class SymitarFile {
    28.9 +	private String name;
   28.10 +	private FileType type;
   28.11 +	private Date modified = new Date(0), installed = new Date(0);
   28.12 +	private long size = -1;
   28.13 +
   28.14 +	public SymitarFile(String name, FileType type) {
   28.15 +		this.name = name;
   28.16 +		this.type = type;
   28.17 +	}
   28.18 +
   28.19 +	public SymitarFile(String name, FileType type, Date modified, long size) {
   28.20 +		this.name = name;
   28.21 +		this.type = type;
   28.22 +		this.modified = modified;
   28.23 +		this.size = size;
   28.24 +	}
   28.25 +
   28.26 +	public String getName() {
   28.27 +		return name;
   28.28 +	}
   28.29 +
   28.30 +	public FileType getType() {
   28.31 +		return type;
   28.32 +	}
   28.33 +
   28.34 +	public String toString() {
   28.35 +		return name;
   28.36 +	}
   28.37 +
   28.38 +	public Date getModified() {
   28.39 +		return modified;
   28.40 +	}
   28.41 +
   28.42 +	public void setModified(Date modified) {
   28.43 +		this.modified = modified;
   28.44 +	}
   28.45 +
   28.46 +	public long getSize() {
   28.47 +		return size;
   28.48 +	}
   28.49 +
   28.50 +	public void setSize(long size) {
   28.51 +		this.size = size;
   28.52 +	}
   28.53 +
   28.54 +	public boolean equals(Object o) {
   28.55 +		if (!(o instanceof SymitarFile))
   28.56 +			return false;
   28.57 +
   28.58 +		SymitarFile file = (SymitarFile) o;
   28.59 +		return name.equals(file.name) && type.equals(file.type);
   28.60 +	}
   28.61 +
   28.62 +	public void setInstalled(Date installed) {
   28.63 +		this.installed = installed;
   28.64 +	}
   28.65 +
   28.66 +	public Date getInstalled() {
   28.67 +		return installed;
   28.68 +	}
   28.69 +}
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/com/repdev/SymitarSession.java	Fri Jun 01 18:46:53 2007 +0000
    29.3 @@ -0,0 +1,166 @@
    29.4 +package com.repdev;
    29.5 +
    29.6 +import java.util.ArrayList;
    29.7 +
    29.8 +public abstract class SymitarSession {
    29.9 +	protected String server, aixUsername, aixPassword, userID;
   29.10 +	protected int sym;
   29.11 +	protected ArrayList<QueueInfo> queueInfoList;
   29.12 +
   29.13 +	/**
   29.14 +	 * Initiates a connection to the server, if we are not already connected
   29.15 +	 * 
   29.16 +	 * @param server
   29.17 +	 * @param aixUsername
   29.18 +	 * @param aixPassword
   29.19 +	 * @param sym
   29.20 +	 * @param userID
   29.21 +	 * @return SessionError
   29.22 +	 */
   29.23 +	public abstract SessionError connect(String server, String aixUsername, String aixPassword, int sym, String userID);
   29.24 +
   29.25 +	/**
   29.26 +	 * 
   29.27 +	 * @return SessionError
   29.28 +	 */
   29.29 +	public abstract SessionError disconnect();
   29.30 +
   29.31 +	/**
   29.32 +	 * 
   29.33 +	 * @return boolean
   29.34 +	 */
   29.35 +	public abstract boolean isConnected();
   29.36 +
   29.37 +	/**
   29.38 +	 * Gets file of given type from server
   29.39 +	 * 
   29.40 +	 * @param type
   29.41 +	 * @param name
   29.42 +	 * @return String containing contents, null if not connected or if can't
   29.43 +	 *         find file
   29.44 +	 */
   29.45 +	public abstract String getFile(SymitarFile file);
   29.46 +
   29.47 +	public abstract SessionError removeFile(SymitarFile file);
   29.48 +
   29.49 +	/**
   29.50 +	 * 
   29.51 +	 * @param type
   29.52 +	 * @param name
   29.53 +	 * @param text
   29.54 +	 * @return SessionError
   29.55 +	 */
   29.56 +	public abstract SessionError saveFile(SymitarFile file, String text);
   29.57 +
   29.58 +	public abstract void runRepGen(String name);
   29.59 +
   29.60 +	public abstract void runRepGen(String name, int queue);
   29.61 +
   29.62 +	/**
   29.63 +	 * Returns an arraylist of QueueInfo objects
   29.64 +	 * 
   29.65 +	 * @return
   29.66 +	 */
   29.67 +	public ArrayList<QueueInfo> getQueueInfo() {
   29.68 +		return queueInfoList;
   29.69 +	}
   29.70 +
   29.71 +	/**
   29.72 +	 * Blocks until a change is available from the session, telnet or otherwise
   29.73 +	 * For example, if we had asked for a repgen to be run, entered its prompts,
   29.74 +	 * then we would call this method and it would block.
   29.75 +	 * 
   29.76 +	 * Then, when new data was available, ex. the repgen finished, or the queue
   29.77 +	 * listing got updated. It would unblock. The caller would then have to
   29.78 +	 * determine what changed, (ex. update the UI) and if required, call this
   29.79 +	 * method again
   29.80 +	 * 
   29.81 +	 * Current Changes Possible: 1. Repgen Completion 2. Repgen Prompt 3. Queue
   29.82 +	 * Info Chane
   29.83 +	 * 
   29.84 +	 * @return
   29.85 +	 */
   29.86 +	public abstract void waitOnChange();
   29.87 +
   29.88 +	/**
   29.89 +	 * Returns a query that the user must respond to in this repgen, null if
   29.90 +	 * there are no more queries
   29.91 +	 * 
   29.92 +	 * @return
   29.93 +	 */
   29.94 +	public abstract String getRepGenQuery();
   29.95 +
   29.96 +	/**
   29.97 +	 * Sends an answer to the next waiting query
   29.98 +	 * 
   29.99 +	 * @param value
  29.100 +	 * @return
  29.101 +	 */
  29.102 +	public abstract int acceptRepGenQuery(String value);
  29.103 +
  29.104 +	/**
  29.105 +	 * 
  29.106 +	 * @return Queue number of currently running repgen
  29.107 +	 */
  29.108 +	public abstract int getRepgenQueue();
  29.109 +
  29.110 +	/**
  29.111 +	 * Sequence numbers for the last batch process to run, not including BATCH
  29.112 +	 * OUTPUT file
  29.113 +	 * 
  29.114 +	 * @return
  29.115 +	 */
  29.116 +	public abstract ArrayList<Integer> getSequenceNumbers();
  29.117 +
  29.118 +	/**
  29.119 +	 * Batch ouput sequence number for the last batch process to run
  29.120 +	 * 
  29.121 +	 * @return
  29.122 +	 */
  29.123 +	public abstract int getBatchOutputSequenceNumber();
  29.124 +
  29.125 +	public abstract SessionError runBatchFM(String title);
  29.126 +
  29.127 +	/**
  29.128 +	 * Supports default "+" as a wildcard
  29.129 +	 * 
  29.130 +	 * @param search
  29.131 +	 * @return
  29.132 +	 */
  29.133 +	public abstract ArrayList<SymitarFile> getFileList(FileType type, String search);
  29.134 +
  29.135 +	public abstract SessionError printFileLPT(SymitarFile file, boolean formsOverride, int formLength, int startPage, int endPage, int copies, boolean landscape, boolean duplex, int queuePriority);
  29.136 +
  29.137 +	/**
  29.138 +	 * Calls the regular print command with default options
  29.139 +	 */
  29.140 +	public SessionError printFileLPT(SymitarFile file) {
  29.141 +		return printFileLPT(file, false, 0, 0, 0, 1, false, false, 4);
  29.142 +	}
  29.143 +
  29.144 +	public abstract SessionError printFileTPT(SymitarFile file, int queue);
  29.145 +
  29.146 +	public abstract ErrorCheckResult errorCheckRepGen(String filename);
  29.147 +
  29.148 +	public String getAixUsername() {
  29.149 +		return aixUsername;
  29.150 +	}
  29.151 +
  29.152 +	public String getAixPassword() {
  29.153 +		return aixPassword;
  29.154 +	}
  29.155 +
  29.156 +	public int getSym() {
  29.157 +		return sym;
  29.158 +	}
  29.159 +
  29.160 +	public String getServer() {
  29.161 +		return server;
  29.162 +	}
  29.163 +
  29.164 +	public String getUserID() {
  29.165 +		return userID;
  29.166 +	}
  29.167 +
  29.168 +	public abstract ErrorCheckResult installRepgen(String f);
  29.169 +}
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/com/repdev/SyntaxHighlighter.java	Fri Jun 01 18:46:53 2007 +0000
    30.3 @@ -0,0 +1,154 @@
    30.4 +package com.repdev;
    30.5 +
    30.6 +import org.eclipse.swt.*;
    30.7 +import org.eclipse.swt.custom.*;
    30.8 +import org.eclipse.swt.graphics.*;
    30.9 +import org.eclipse.swt.widgets.*;
   30.10 +
   30.11 +import java.io.File;
   30.12 +import java.io.FileReader;
   30.13 +import java.io.BufferedReader;
   30.14 +import java.io.IOException;
   30.15 +import java.util.ArrayList;
   30.16 +import java.util.HashSet;
   30.17 +
   30.18 +import com.repdev.DatabaseLayout.Record;
   30.19 +import com.repdev.DatabaseLayout.Field;
   30.20 +import com.repdev.RepgenParser.Variable;
   30.21 +import com.repdev.RepgenParser.Token;
   30.22 +
   30.23 +public class SyntaxHighlighter implements ExtendedModifyListener, LineStyleListener {
   30.24 +	private static final String FONT_NAME = "Courier New";
   30.25 +	private static final int FONT_SIZE = 11;
   30.26 +
   30.27 +	private static final RGB BACKGROUND = new RGB(255, 255, 255), FOREGROUND = new RGB(0, 0, 0);
   30.28 +	private static final EStyle NORMAL = new EStyle(null, null), COMMENTS = new EStyle(new RGB(127, 127, 127), null), VARIABLES = new EStyle(new RGB(0, 0, 0), null, SWT.BOLD), FUNCTIONS = new EStyle(new RGB(0, 0, 255), null, SWT.BOLD),
   30.29 +			KEYWORDS = new EStyle(new RGB(0, 0, 255), null), TYPE_CHAR = new EStyle(new RGB(255, 0, 0), null), TYPE_DATE = new EStyle(new RGB(255, 0, 0), null, SWT.BOLD), STRUCT1 = new EStyle(new RGB(255, 0, 255), null), STRUCT2 = new EStyle(
   30.30 +					new RGB(255, 128, 255), null), STRUCT1_INVALID = new EStyle(new RGB(255, 0, 255), new RGB(128, 0, 0), SWT.NONE), STRUCT2_INVALID = new EStyle(new RGB(255, 128, 255), new RGB(128, 0, 0), SWT.NONE);
   30.31 +
   30.32 +	private static final Color FORECOLOR = new Color(Display.getCurrent(), FOREGROUND), BACKCOLOR = new Color(Display.getCurrent(), BACKGROUND);
   30.33 +	private static final Font FONT;
   30.34 +
   30.35 +	private RepgenParser parser;
   30.36 +	private StyledText txt;
   30.37 +	private SymitarFile file;
   30.38 +	private int sym;
   30.39 +
   30.40 +	static {
   30.41 +		Font cur = null;
   30.42 +
   30.43 +		try {
   30.44 +			cur = new Font(Display.getCurrent(), FONT_NAME, FONT_SIZE, SWT.NORMAL);
   30.45 +		} catch (Exception e) {
   30.46 +		}
   30.47 +
   30.48 +		FONT = cur;
   30.49 +	}
   30.50 +
   30.51 +	public SyntaxHighlighter(RepgenParser parser) {
   30.52 +		this.parser = parser;
   30.53 +		this.txt = parser.getTxt();
   30.54 +		this.file = parser.getFile();
   30.55 +		this.sym = parser.getSym();
   30.56 +		
   30.57 +	
   30.58 +		txt.setForeground(FORECOLOR);
   30.59 +		txt.setBackground(BACKCOLOR);
   30.60 +		txt.addExtendedModifyListener(this);
   30.61 +		txt.addLineStyleListener(this);
   30.62 +		if (FONT != null)
   30.63 +			txt.setFont(FONT);
   30.64 +	}
   30.65 +
   30.66 +	private static class EStyle {
   30.67 +		private Color fcolor = null, bgcolor = null;
   30.68 +		private int style;
   30.69 +
   30.70 +		public EStyle(RGB frgb, RGB bgrgb, int style) {
   30.71 +			if (frgb != null)
   30.72 +				fcolor = new Color(Display.getCurrent(), frgb);
   30.73 +			if (bgrgb != null)
   30.74 +				bgcolor = new Color(Display.getCurrent(), bgrgb);
   30.75 +			this.style = style;
   30.76 +		}
   30.77 +
   30.78 +		public EStyle(RGB frgb, RGB bgrgb) {
   30.79 +			this(frgb, bgrgb, SWT.NORMAL);
   30.80 +		}
   30.81 +
   30.82 +		public StyleRange getRange(int start, int len) {
   30.83 +			return new StyleRange(start, len, fcolor, bgcolor, style);
   30.84 +		}
   30.85 +	}
   30.86 +
   30.87 +	public void modifyText(ExtendedModifyEvent e) {
   30.88 +		parser.textModified(e.start, e.length, e.replacedText);
   30.89 +	}
   30.90 +	
   30.91 +	public StyleRange getStyle(Token tok) {
   30.92 +		boolean isVar = false;
   30.93 +
   30.94 +		if (tok.getCDepth() != 0)
   30.95 +			return COMMENTS.getRange(tok.getStart(), tok.length());
   30.96 +		else if (tok.getInString())
   30.97 +			return TYPE_CHAR.getRange(tok.getStart(), tok.length());
   30.98 +		else if (tok.getInDate())
   30.99 +			return TYPE_DATE.getRange(tok.getStart(), tok.length());
  30.100 +		else if (tok.getAfter() != null && tok.getAfter().getStr().equals(":")) {
  30.101 +			if (tok.dbRecordValid())
  30.102 +				return STRUCT1.getRange(tok.getStart(), tok.length());
  30.103 +			else
  30.104 +				return STRUCT1_INVALID.getRange(tok.getStart(), tok.length());
  30.105 +		} else if (tok.getBefore() != null && tok.getBefore().getStr().equals(":")) {
  30.106 +			if (tok.dbFieldValid(RepgenParser.getDb().getTreeRecords()))
  30.107 +				return STRUCT2.getRange(tok.getStart(), tok.length());
  30.108 +			else
  30.109 +				return STRUCT2_INVALID.getRange(tok.getStart(), tok.length());
  30.110 +		} else if (RepgenParser.getFunctions().contains(tok.getStr()) && tok.getAfter() != null && tok.getAfter().getStr().equals("("))
  30.111 +			return FUNCTIONS.getRange(tok.getStart(), tok.length());
  30.112 +		else if (RepgenParser.getKeywords().contains(tok.getStr()))
  30.113 +			return KEYWORDS.getRange(tok.getStart(), tok.length());
  30.114 +		else if (RepgenParser.getSpecialvars().contains(tok.getStr()))
  30.115 +			return VARIABLES.getRange(tok.getStart(), tok.length());
  30.116 +
  30.117 +		for (Variable var : parser.getLvars()) {
  30.118 +			if (var.getName().equals(tok.getStr()))
  30.119 +				isVar = true;
  30.120 +		}
  30.121 +
  30.122 +		if (isVar)
  30.123 +			return VARIABLES.getRange(tok.getStart(), tok.length());
  30.124 +		else
  30.125 +			return NORMAL.getRange(tok.getStart(), tok.length());
  30.126 +		
  30.127 +	}
  30.128 +
  30.129 +
  30.130 +	public void lineGetStyle(LineStyleEvent event) {
  30.131 +		ArrayList<Token> ltokens = parser.getLtokens();
  30.132 +		
  30.133 +		int line = txt.getLineAtOffset(event.lineOffset);
  30.134 +
  30.135 +		int ftoken;
  30.136 +		for (ftoken = 0; ftoken < ltokens.size(); ftoken++)
  30.137 +			if (ltokens.get(ftoken).getEnd() >= event.lineOffset)
  30.138 +				break;
  30.139 +
  30.140 +		int ltoken = ltokens.size();
  30.141 +		if (line + 1 < txt.getLineCount()) {
  30.142 +			int pos = txt.getOffsetAtLine(line + 1);
  30.143 +
  30.144 +			for (ltoken = ftoken; ltoken < ltokens.size(); ltoken++)
  30.145 +				if (ltokens.get(ltoken).getStart() > pos)
  30.146 +					break;
  30.147 +		}
  30.148 +
  30.149 +		StyleRange[] result = new StyleRange[ltoken - ftoken];
  30.150 +		for (int i = ftoken; i < ltoken; i++)
  30.151 +			result[i - ftoken] = getStyle(ltokens.get(i));
  30.152 +
  30.153 +		event.styles = result;
  30.154 +
  30.155 +	}
  30.156 +
  30.157 +}
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/com/repdev/TelnetProtocolHandler.java	Fri Jun 01 18:46:53 2007 +0000
    31.3 @@ -0,0 +1,689 @@
    31.4 +package com.repdev;
    31.5 +
    31.6 +import java.io.IOException;
    31.7 +import java.awt.Dimension;
    31.8 +
    31.9 +import java.lang.Byte;
   31.10 +
   31.11 +/**
   31.12 + * This is a telnet protocol handler. The handler needs implementations for
   31.13 + * several methods to handle the telnet options and to be able to read and write
   31.14 + * the buffer.
   31.15 + * <P>
   31.16 + * <B>Maintainer:</B> Marcus Meissner
   31.17 + * 
   31.18 + * @version $Id: TelnetProtocolHandler.java 503 2005-10-24 07:34:13Z marcus $
   31.19 + * @author Matthias L. Jugel, Marcus Meissner
   31.20 + */
   31.21 +public abstract class TelnetProtocolHandler {
   31.22 +	/** contains the current revision id */
   31.23 +	public final static String ID = "$Id: TelnetProtocolHandler.java 503 2005-10-24 07:34:13Z marcus $";
   31.24 +
   31.25 +	/** debug level */
   31.26 +	private final static int debug = 0;
   31.27 +
   31.28 +	/** temporary buffer for data-telnetstuff-data transformation */
   31.29 +	private byte[] tempbuf = new byte[0];
   31.30 +
   31.31 +	/** the data sent on pressing <RETURN> \n */
   31.32 +	private byte[] crlf = new byte[2];
   31.33 +	/** the data sent on pressing <LineFeed> \r */
   31.34 +	private byte[] cr = new byte[2];
   31.35 +
   31.36 +	/**
   31.37 +	 * Create a new telnet protocol handler.
   31.38 +	 */
   31.39 +	public TelnetProtocolHandler() {
   31.40 +		reset();
   31.41 +
   31.42 +		crlf[0] = 13;
   31.43 +		crlf[1] = 10;
   31.44 +		cr[0] = 13;
   31.45 +		cr[1] = 0;
   31.46 +	}
   31.47 +
   31.48 +	/**
   31.49 +	 * Get the current terminal type for TTYPE telnet option.
   31.50 +	 * 
   31.51 +	 * @return the string id of the terminal
   31.52 +	 */
   31.53 +	protected abstract String getTerminalType();
   31.54 +
   31.55 +	/**
   31.56 +	 * Get the current window size of the terminal for the NAWS telnet option.
   31.57 +	 * 
   31.58 +	 * @return the size of the terminal as Dimension
   31.59 +	 */
   31.60 +	protected abstract Dimension getWindowSize();
   31.61 +
   31.62 +	/**
   31.63 +	 * Set the local echo option of telnet.
   31.64 +	 * 
   31.65 +	 * @param echo
   31.66 +	 *            true for local echo, false for no local echo
   31.67 +	 */
   31.68 +	protected abstract void setLocalEcho(boolean echo);
   31.69 +
   31.70 +	/**
   31.71 +	 * Generate an EOR (end of record) request. For use by prompt displaying.
   31.72 +	 */
   31.73 +	protected abstract void notifyEndOfRecord();
   31.74 +
   31.75 +	/**
   31.76 +	 * Send data to the remote host.
   31.77 +	 * 
   31.78 +	 * @param b
   31.79 +	 *            array of bytes to send
   31.80 +	 */
   31.81 +	protected abstract void write(byte[] b) throws IOException;
   31.82 +
   31.83 +	/**
   31.84 +	 * Send one byte to the remote host.
   31.85 +	 * 
   31.86 +	 * @param b
   31.87 +	 *            the byte to be sent
   31.88 +	 * @see #write(byte[] b)
   31.89 +	 */
   31.90 +	private static byte[] one = new byte[1];
   31.91 +
   31.92 +	private void write(byte b) throws IOException {
   31.93 +		one[0] = b;
   31.94 +		write(one);
   31.95 +	}
   31.96 +
   31.97 +	/**
   31.98 +	 * Reset the protocol handler. This may be necessary after the connection
   31.99 +	 * was closed or some other problem occured.
  31.100 +	 */
  31.101 +	public void reset() {
  31.102 +		neg_state = 0;
  31.103 +		receivedDX = new byte[256];
  31.104 +		sentDX = new byte[256];
  31.105 +		receivedWX = new byte[256];
  31.106 +		sentWX = new byte[256];
  31.107 +	}
  31.108 +
  31.109 +	// ===================================================================
  31.110 +	// the actual negotiation handling for the telnet protocol follows:
  31.111 +	// ===================================================================
  31.112 +
  31.113 +	/** state variable for telnet negotiation reader */
  31.114 +	private byte neg_state = 0;
  31.115 +
  31.116 +	/** constants for the negotiation state */
  31.117 +	private final static byte STATE_DATA = 0;
  31.118 +	private final static byte STATE_IAC = 1;
  31.119 +	private final static byte STATE_IACSB = 2;
  31.120 +	private final static byte STATE_IACWILL = 3;
  31.121 +	private final static byte STATE_IACDO = 4;
  31.122 +	private final static byte STATE_IACWONT = 5;
  31.123 +	private final static byte STATE_IACDONT = 6;
  31.124 +	private final static byte STATE_IACSBIAC = 7;
  31.125 +	private final static byte STATE_IACSBDATA = 8;
  31.126 +	private final static byte STATE_IACSBDATAIAC = 9;
  31.127 +
  31.128 +	/** What IAC SB <xx> we are handling right now */
  31.129 +	private byte current_sb;
  31.130 +
  31.131 +	/** current SB negotiation buffer */
  31.132 +	private byte[] sbbuf;
  31.133 +
  31.134 +	/** IAC - init sequence for telnet negotiation. */
  31.135 +	private final static byte IAC = (byte) 255;
  31.136 +	/** [IAC] End Of Record */
  31.137 +	private final static byte EOR = (byte) 239;
  31.138 +	/** [IAC] WILL */
  31.139 +	private final static byte WILL = (byte) 251;
  31.140 +	/** [IAC] WONT */
  31.141 +	private final static byte WONT = (byte) 252;
  31.142 +	/** [IAC] DO */
  31.143 +	private final static byte DO = (byte) 253;
  31.144 +	/** [IAC] DONT */
  31.145 +	private final static byte DONT = (byte) 254;
  31.146 +	/** [IAC] Sub Begin */
  31.147 +	private final static byte SB = (byte) 250;
  31.148 +	/** [IAC] Sub End */
  31.149 +	private final static byte SE = (byte) 240;
  31.150 +	/** Telnet option: binary mode */
  31.151 +	private final static byte TELOPT_BINARY = (byte) 0; /* binary mode */
  31.152 +	/** Telnet option: echo text */
  31.153 +	private final static byte TELOPT_ECHO = (byte) 1; /* echo on/off */
  31.154 +	/** Telnet option: sga */
  31.155 +	private final static byte TELOPT_SGA = (byte) 3; /* supress go ahead */
  31.156 +	/** Telnet option: End Of Record */
  31.157 +	private final static byte TELOPT_EOR = (byte) 25; /* end of record */
  31.158 +	/** Telnet option: Negotiate About Window Size */
  31.159 +	private final static byte TELOPT_NAWS = (byte) 31; /* NA-WindowSize */
  31.160 +	/** Telnet option: Terminal Type */
  31.161 +	private final static byte TELOPT_TTYPE = (byte) 24; /* terminal type */
  31.162 +
  31.163 +	private final static byte[] IACWILL = { IAC, WILL };
  31.164 +	private final static byte[] IACWONT = { IAC, WONT };
  31.165 +	private final static byte[] IACDO = { IAC, DO };
  31.166 +	private final static byte[] IACDONT = { IAC, DONT };
  31.167 +	private final static byte[] IACSB = { IAC, SB };
  31.168 +	private final static byte[] IACSE = { IAC, SE };
  31.169 +
  31.170 +	/** Telnet option qualifier 'IS' */
  31.171 +	private final static byte TELQUAL_IS = (byte) 0;
  31.172 +	/** Telnet option qualifier 'SEND' */
  31.173 +	private final static byte TELQUAL_SEND = (byte) 1;
  31.174 +
  31.175 +	/** What IAC DO(NT) request do we have received already ? */
  31.176 +	private byte[] receivedDX;
  31.177 +	/** What IAC WILL/WONT request do we have received already ? */
  31.178 +	private byte[] receivedWX;
  31.179 +	/** What IAC DO/DONT request do we have sent already ? */
  31.180 +	private byte[] sentDX;
  31.181 +	/** What IAC WILL/WONT request do we have sent already ? */
  31.182 +	private byte[] sentWX;
  31.183 +
  31.184 +	/**
  31.185 +	 * Send a Telnet Escape character (IAC <code>)
  31.186 +	 */
  31.187 +	public void sendTelnetControl(byte code) throws IOException {
  31.188 +		byte[] b = new byte[2];
  31.189 +
  31.190 +		b[0] = IAC;
  31.191 +		b[1] = code;
  31.192 +		write(b);
  31.193 +	}
  31.194 +
  31.195 +	/**
  31.196 +	 * Send the new Window Size (via NAWS)
  31.197 +	 */
  31.198 +	public void setWindowSize(int columns, int rows) throws IOException {
  31.199 +		if (debug > 2)
  31.200 +			System.err.println("sending NAWS");
  31.201 +
  31.202 +		if (receivedDX[TELOPT_NAWS] != DO) {
  31.203 +			System.err.println("not allowed to send NAWS? (DONT NAWS)");
  31.204 +			return;
  31.205 +		}
  31.206 +		write(IAC);
  31.207 +		write(SB);
  31.208 +		write(TELOPT_NAWS);
  31.209 +		write((byte) (columns >> 8));
  31.210 +		write((byte) (columns & 0xff));
  31.211 +		write((byte) (rows >> 8));
  31.212 +		write((byte) (rows & 0xff));
  31.213 +		write(IAC);
  31.214 +		write(SE);
  31.215 +	}
  31.216 +
  31.217 +	/**
  31.218 +	 * Handle an incoming IAC SB &lt;type&gt; &lt;bytes&gt; IAC SE
  31.219 +	 * 
  31.220 +	 * @param type
  31.221 +	 *            type of SB
  31.222 +	 * @param sbata
  31.223 +	 *            byte array as &lt;bytes&gt;
  31.224 +	 */
  31.225 +	private void handle_sb(byte type, byte[] sbdata) throws IOException {
  31.226 +		if (debug > 1)
  31.227 +			System.err.println("TelnetIO.handle_sb(" + type + ")");
  31.228 +		switch (type) {
  31.229 +		case TELOPT_TTYPE:
  31.230 +			if (sbdata.length > 0 && sbdata[0] == TELQUAL_SEND) {
  31.231 +				write(IACSB);
  31.232 +				write(TELOPT_TTYPE);
  31.233 +				write(TELQUAL_IS);
  31.234 +				/*
  31.235 +				 * FIXME: need more logic here if we use more than one terminal
  31.236 +				 * type
  31.237 +				 */
  31.238 +				String ttype = getTerminalType();
  31.239 +				if (ttype == null)
  31.240 +					ttype = "dumb";
  31.241 +				write(ttype.getBytes());
  31.242 +				write(IACSE);
  31.243 +			}
  31.244 +
  31.245 +		}
  31.246 +	}
  31.247 +
  31.248 +	/**
  31.249 +	 * Do not send any notifications at startup. We do not know, whether the
  31.250 +	 * remote client understands telnet protocol handling, so we are silent.
  31.251 +	 * (This used to send IAC WILL SGA, but this is false for a compliant
  31.252 +	 * client.)
  31.253 +	 */
  31.254 +	public void startup() throws IOException {
  31.255 +	}
  31.256 +
  31.257 +	/**
  31.258 +	 * Transpose special telnet codes like 0xff or newlines to values that are
  31.259 +	 * compliant to the protocol. This method will also send the buffer
  31.260 +	 * immediately after transposing the data.
  31.261 +	 * 
  31.262 +	 * @param buf
  31.263 +	 *            the data buffer to be sent
  31.264 +	 */
  31.265 +	public void transpose(byte[] buf) throws IOException {
  31.266 +		int i;
  31.267 +
  31.268 +		byte[] nbuf, xbuf;
  31.269 +		int nbufptr = 0;
  31.270 +		nbuf = new byte[buf.length * 2]; // FIXME: buffer overflows possible
  31.271 +
  31.272 +		for (i = 0; i < buf.length; i++) {
  31.273 +			switch (buf[i]) {
  31.274 +			// Escape IAC twice in stream ... to be telnet protocol compliant
  31.275 +			// this is there in binary and non-binary mode.
  31.276 +			case IAC:
  31.277 +				nbuf[nbufptr++] = IAC;
  31.278 +				nbuf[nbufptr++] = IAC;
  31.279 +				break;
  31.280 +			// We need to heed RFC 854. LF (\n) is 10, CR (\r) is 13
  31.281 +			// we assume that the Terminal sends \n for lf+cr and \r for just cr
  31.282 +			// linefeed+carriage return is CR LF */
  31.283 +			case 10: // \n
  31.284 +				if (receivedDX[TELOPT_BINARY + 128] != DO) {
  31.285 +					while (nbuf.length - nbufptr < crlf.length) {
  31.286 +						xbuf = new byte[nbuf.length * 2];
  31.287 +						System.arraycopy(nbuf, 0, xbuf, 0, nbufptr);
  31.288 +						nbuf = xbuf;
  31.289 +					}
  31.290 +					for (int j = 0; j < crlf.length; j++)
  31.291 +						nbuf[nbufptr++] = crlf[j];
  31.292 +					break;
  31.293 +				} else {
  31.294 +					// copy verbatim in binary mode.
  31.295 +					nbuf[nbufptr++] = buf[i];
  31.296 +				}
  31.297 +				break;
  31.298 +			// carriage return is CR NUL */
  31.299 +			case 13: // \r
  31.300 +				if (receivedDX[TELOPT_BINARY + 128] != DO) {
  31.301 +					while (nbuf.length - nbufptr < cr.length) {
  31.302 +						xbuf = new byte[nbuf.length * 2];
  31.303 +						System.arraycopy(nbuf, 0, xbuf, 0, nbufptr);
  31.304 +						nbuf = xbuf;
  31.305 +					}
  31.306 +					for (int j = 0; j < cr.length; j++)
  31.307 +						nbuf[nbufptr++] = cr[j];
  31.308 +				} else {
  31.309 +					// copy verbatim in binary mode.
  31.310 +					nbuf[nbufptr++] = buf[i];
  31.311 +				}
  31.312 +				break;
  31.313 +			// all other characters are just copied
  31.314 +			default:
  31.315 +				nbuf[nbufptr++] = buf[i];
  31.316 +				break;
  31.317 +			}
  31.318 +		}
  31.319 +		xbuf = new byte[nbufptr];
  31.320 +		System.arraycopy(nbuf, 0, xbuf, 0, nbufptr);
  31.321 +		write(xbuf);
  31.322 +	}
  31.323 +
  31.324 +	public void setCRLF(String xcrlf) {
  31.325 +		crlf = xcrlf.getBytes();
  31.326 +	}
  31.327 +
  31.328 +	public void setCR(String xcr) {
  31.329 +		cr = xcr.getBytes();
  31.330 +	}
  31.331 +
  31.332 +	/**
  31.333 +	 * Handle telnet protocol negotiation. The buffer will be parsed and
  31.334 +	 * necessary actions are taken according to the telnet protocol. See <A
  31.335 +	 * HREF="RFC-Telnet-URL">RFC-Telnet</A>
  31.336 +	 * 
  31.337 +	 * @param nbuf
  31.338 +	 *            the byte buffer put out after negotiation
  31.339 +	 * @return number of bytes processed, 0 for none, and -1 for end of buffer.
  31.340 +	 */
  31.341 +	public int negotiate(byte nbuf[]) throws IOException {
  31.342 +		int count = tempbuf.length;
  31.343 +		byte[] buf = tempbuf;
  31.344 +		byte sendbuf[] = new byte[3];
  31.345 +		byte b, reply;
  31.346 +		int boffset = 0, noffset = 0;
  31.347 +		boolean dobreak = false;
  31.348 +
  31.349 +		if (count == 0) // buffer is empty.
  31.350 +			return -1;
  31.351 +
  31.352 +		while (!dobreak && (boffset < count) && (noffset < nbuf.length)) {
  31.353 +			b = buf[boffset++];
  31.354 +			// of course, byte is a signed entity (-128 -> 127)
  31.355 +			// but apparently the SGI Netscape 3.0 doesn't seem
  31.356 +			// to care and provides happily values up to 255
  31.357 +			if (b >= 128)
  31.358 +				b = (byte) ((int) b - 256);
  31.359 +			if (debug > 2) {
  31.360 +				Byte B = new Byte(b);
  31.361 +				System.err.print("byte: " + B.intValue() + " ");
  31.362 +			}
  31.363 +			switch (neg_state) {
  31.364 +			case STATE_DATA:
  31.365 +				if (b == IAC) {
  31.366 +					neg_state = STATE_IAC;
  31.367 +					dobreak = true; // leave the loop so we can sync.
  31.368 +				} else
  31.369 +					nbuf[noffset++] = b;
  31.370 +				break;
  31.371 +			case STATE_IAC:
  31.372 +				switch (b) {
  31.373 +				case IAC:
  31.374 +					if (debug > 2)
  31.375 +						System.err.print("IAC ");
  31.376 +					neg_state = STATE_DATA;
  31.377 +					nbuf[noffset++] = IAC;
  31.378 +					break;
  31.379 +				case WILL:
  31.380 +					if (debug > 2)
  31.381 +						System.err.print("WILL ");
  31.382 +					neg_state = STATE_IACWILL;
  31.383 +					break;
  31.384 +				case WONT:
  31.385 +					if (debug > 2)
  31.386 +						System.err.print("WONT ");
  31.387 +					neg_state = STATE_IACWONT;
  31.388 +					break;
  31.389 +				case DONT:
  31.390 +					if (debug > 2)
  31.391 +						System.err.print("DONT ");
  31.392 +					neg_state = STATE_IACDONT;
  31.393 +					break;
  31.394 +				case DO:
  31.395 +					if (debug > 2)
  31.396 +						System.err.print("DO ");
  31.397 +					neg_state = STATE_IACDO;
  31.398 +					break;
  31.399 +				case EOR:
  31.400 +					if (debug > 1)
  31.401 +						System.err.print("EOR ");
  31.402 +					notifyEndOfRecord();
  31.403 +					dobreak = true; // leave the loop so we can sync.
  31.404 +					neg_state = STATE_DATA;
  31.405 +					break;
  31.406 +				case SB:
  31.407 +					if (debug > 2)
  31.408 +						System.err.print("SB ");
  31.409 +					neg_state = STATE_IACSB;
  31.410 +					break;
  31.411 +				default:
  31.412 +					if (debug > 2)
  31.413 +						System.err.print("<UNKNOWN " + b + " > ");
  31.414 +					neg_state = STATE_DATA;
  31.415 +					break;
  31.416 +				}
  31.417 +				break;
  31.418 +			case STATE_IACWILL:
  31.419 +				switch (b) {
  31.420 +				case TELOPT_ECHO:
  31.421 +					if (debug > 2)
  31.422 +						System.err.println("ECHO");
  31.423 +					reply = DO;
  31.424 +					setLocalEcho(false);
  31.425 +					break;
  31.426 +				case TELOPT_SGA:
  31.427 +					if (debug > 2)
  31.428 +						System.err.println("SGA");
  31.429 +					reply = DO;
  31.430 +					break;
  31.431 +				case TELOPT_EOR:
  31.432 +					if (debug > 2)
  31.433 +						System.err.println("EOR");
  31.434 +					reply = DO;
  31.435 +					break;
  31.436 +				case TELOPT_BINARY:
  31.437 +					if (debug > 2)
  31.438 +						System.err.println("BINARY");
  31.439 +					reply = DO;
  31.440 +					break;
  31.441 +				default:
  31.442 +					if (debug > 2)
  31.443 +						System.err.println("<UNKNOWN," + b + ">");
  31.444 +					reply = DONT;
  31.445 +					break;
  31.446 +				}
  31.447 +				if (debug > 1)
  31.448 +					System.err.println("<" + b + ", WILL =" + WILL + ">");
  31.449 +				if (reply != sentDX[b + 128] || WILL != receivedWX[b + 128]) {
  31.450 +					sendbuf[0] = IAC;
  31.451 +					sendbuf[1] = reply;
  31.452 +					sendbuf[2] = b;
  31.453 +					write(sendbuf);
  31.454 +					sentDX[b + 128] = reply;
  31.455 +					receivedWX[b + 128] = WILL;
  31.456 +				}
  31.457 +				neg_state = STATE_DATA;
  31.458 +				break;
  31.459 +			case STATE_IACWONT:
  31.460 +				switch (b) {
  31.461 +				case TELOPT_ECHO:
  31.462 +					if (debug > 2)
  31.463 +						System.err.println("ECHO");
  31.464 +					setLocalEcho(true);
  31.465 +					reply = DONT;
  31.466 +					break;
  31.467 +				case TELOPT_SGA:
  31.468 +					if (debug > 2)
  31.469 +						System.err.println("SGA");
  31.470 +					reply = DONT;
  31.471 +					break;
  31.472 +				case TELOPT_EOR:
  31.473 +					if (debug > 2)
  31.474 +						System.err.println("EOR");
  31.475 +					reply = DONT;
  31.476 +					break;
  31.477 +				case TELOPT_BINARY:
  31.478 +					if (debug > 2)
  31.479 +						System.err.println("BINARY");
  31.480 +					reply = DONT;
  31.481 +					break;
  31.482 +				default:
  31.483 +					if (debug > 2)
  31.484 +						System.err.println("<UNKNOWN," + b + ">");
  31.485 +					reply = DONT;
  31.486 +					break;
  31.487 +				}
  31.488 +				if (reply != sentDX[b + 128] || WONT != receivedWX[b + 128]) {
  31.489 +					sendbuf[0] = IAC;
  31.490 +					sendbuf[1] = reply;
  31.491 +					sendbuf[2] = b;
  31.492 +					write(sendbuf);
  31.493 +					sentDX[b + 128] = reply;
  31.494 +					receivedWX[b + 128] = WILL;
  31.495 +				}
  31.496 +				neg_state = STATE_DATA;
  31.497 +				break;
  31.498 +			case STATE_IACDO:
  31.499 +				switch (b) {
  31.500 +				case TELOPT_ECHO:
  31.501 +					if (debug > 2)
  31.502 +						System.err.println("ECHO");
  31.503 +					reply = WILL;
  31.504 +					setLocalEcho(true);
  31.505 +					break;
  31.506 +				case TELOPT_SGA:
  31.507 +					if (debug > 2)
  31.508 +						System.err.println("SGA");
  31.509 +					reply = WILL;
  31.510 +					break;
  31.511 +				case TELOPT_TTYPE:
  31.512 +					if (debug > 2)
  31.513 +						System.err.println("TTYPE");
  31.514 +					reply = WILL;
  31.515 +					break;
  31.516 +				case TELOPT_BINARY:
  31.517 +					if (debug > 2)
  31.518 +						System.err.println("BINARY");
  31.519 +					reply = WILL;
  31.520 +					break;
  31.521 +				case TELOPT_NAWS:
  31.522 +					if (debug > 2)
  31.523 +						System.err.println("NAWS");
  31.524 +					Dimension size = getWindowSize();
  31.525 +					receivedDX[b] = DO;
  31.526 +					if (size == null) {
  31.527 +						// this shouldn't happen
  31.528 +						write(IAC);
  31.529 +						write(WONT);
  31.530 +						write(TELOPT_NAWS);
  31.531 +						reply = WONT;
  31.532 +						sentWX[b] = WONT;
  31.533 +						break;
  31.534 +					}
  31.535 +					reply = WILL;
  31.536 +					sentWX[b] = WILL;
  31.537 +					sendbuf[0] = IAC;
  31.538 +					sendbuf[1] = WILL;
  31.539 +					sendbuf[2] = TELOPT_NAWS;
  31.540 +					write(sendbuf);
  31.541 +					write(IAC);
  31.542 +					write(SB);
  31.543 +					write(TELOPT_NAWS);
  31.544 +					write((byte) (size.width >> 8));
  31.545 +					write((byte) (size.width & 0xff));
  31.546 +					write((byte) (size.height >> 8));
  31.547 +					write((byte) (size.height & 0xff));
  31.548 +					write(IAC);
  31.549 +					write(SE);
  31.550 +					break;
  31.551 +				default:
  31.552 +					if (debug > 2)
  31.553 +						System.err.println("<UNKNOWN," + b + ">");
  31.554 +					reply = WONT;
  31.555 +					break;
  31.556 +				}
  31.557 +				if (reply != sentWX[128 + b] || DO != receivedDX[128 + b]) {
  31.558 +					sendbuf[0] = IAC;
  31.559 +					sendbuf[1] = reply;
  31.560 +					sendbuf[2] = b;
  31.561 +					write(sendbuf);
  31.562 +					sentWX[b + 128] = reply;
  31.563 +					receivedDX[b + 128] = DO;
  31.564 +				}
  31.565 +				neg_state = STATE_DATA;
  31.566 +				break;
  31.567 +			case STATE_IACDONT:
  31.568 +				switch (b) {
  31.569 +				case TELOPT_ECHO:
  31.570 +					if (debug > 2)
  31.571 +						System.err.println("ECHO");
  31.572 +					reply = WONT;
  31.573 +					setLocalEcho(false);
  31.574 +					break;
  31.575 +				case TELOPT_SGA:
  31.576 +					if (debug > 2)
  31.577 +						System.err.println("SGA");
  31.578 +					reply = WONT;
  31.579 +					break;
  31.580 +				case TELOPT_NAWS:
  31.581 +					if (debug > 2)
  31.582 +						System.err.println("NAWS");
  31.583 +					reply = WONT;
  31.584 +					break;
  31.585 +				case TELOPT_BINARY:
  31.586 +					if (debug > 2)
  31.587 +						System.err.println("BINARY");
  31.588 +					reply = WONT;
  31.589 +					break;
  31.590 +				default:
  31.591 +					if (debug > 2)
  31.592 +						System.err.println("<UNKNOWN," + b + ">");
  31.593 +					reply = WONT;
  31.594 +					break;
  31.595 +				}
  31.596 +				if (reply != sentWX[b + 128] || DONT != receivedDX[b + 128]) {
  31.597 +					write(IAC);
  31.598 +					write(reply);
  31.599 +					write(b);
  31.600 +					sentWX[b + 128] = reply;
  31.601 +					receivedDX[b + 128] = DONT;
  31.602 +				}
  31.603 +				neg_state = STATE_DATA;
  31.604 +				break;
  31.605 +			case STATE_IACSBIAC:
  31.606 +				if (debug > 2)
  31.607 +					System.err.println("" + b + " ");
  31.608 +				if (b == IAC) {
  31.609 +					sbbuf = new byte[0];
  31.610 +					current_sb = b;
  31.611 +					neg_state = STATE_IACSBDATA;
  31.612 +				} else {
  31.613 +					System.err.println("(bad) " + b + " ");
  31.614 +					neg_state = STATE_DATA;
  31.615 +				}
  31.616 +				break;
  31.617 +			case STATE_IACSB:
  31.618 +				if (debug > 2)
  31.619 +					System.err.println("" + b + " ");
  31.620 +				switch (b) {
  31.621 +				case IAC:
  31.622 +					neg_state = STATE_IACSBIAC;
  31.623 +					break;
  31.624 +				default:
  31.625 +					current_sb = b;
  31.626 +					sbbuf = new byte[0];
  31.627 +					neg_state = STATE_IACSBDATA;
  31.628 +					break;
  31.629 +				}
  31.630 +				break;
  31.631 +			case STATE_IACSBDATA:
  31.632 +				if (debug > 2)
  31.633 +					System.err.println("" + b + " ");
  31.634 +				switch (b) {
  31.635 +				case IAC:
  31.636 +					neg_state = STATE_IACSBDATAIAC;
  31.637 +					break;
  31.638 +				default:
  31.639 +					byte[] xsb = new byte[sbbuf.length + 1];
  31.640 +					System.arraycopy(sbbuf, 0, xsb, 0, sbbuf.length);
  31.641 +					sbbuf = xsb;
  31.642 +					sbbuf[sbbuf.length - 1] = b;
  31.643 +					break;
  31.644 +				}
  31.645 +				break;
  31.646 +			case STATE_IACSBDATAIAC:
  31.647 +				if (debug > 2)
  31.648 +					System.err.println("" + b + " ");
  31.649 +				switch (b) {
  31.650 +				case IAC:
  31.651 +					neg_state = STATE_IACSBDATA;
  31.652 +					byte[] xsb = new byte[sbbuf.length + 1];
  31.653 +					System.arraycopy(sbbuf, 0, xsb, 0, sbbuf.length);
  31.654 +					sbbuf = xsb;
  31.655 +					sbbuf[sbbuf.length - 1] = IAC;
  31.656 +					break;
  31.657 +				case SE:
  31.658 +					handle_sb(current_sb, sbbuf);
  31.659 +					current_sb = 0;
  31.660 +					neg_state = STATE_DATA;
  31.661 +					break;
  31.662 +				case SB:
  31.663 +					handle_sb(current_sb, sbbuf);
  31.664 +					neg_state = STATE_IACSB;
  31.665 +					break;
  31.666 +				default:
  31.667 +					neg_state = STATE_DATA;
  31.668 +					break;
  31.669 +				}
  31.670 +				break;
  31.671 +			default:
  31.672 +				if (debug > 1)
  31.673 +					System.err.println("This should not happen: " + neg_state + " ");
  31.674 +				neg_state = STATE_DATA;
  31.675 +				break;
  31.676 +			}
  31.677 +		}
  31.678 +		// shrink tempbuf to new processed size.
  31.679 +		byte[] xb = new byte[count - boffset];
  31.680 +		System.arraycopy(tempbuf, boffset, xb, 0, count - boffset);
  31.681 +		tempbuf = xb;
  31.682 +		return noffset;
  31.683 +	}
  31.684 +
  31.685 +	public void inputfeed(byte[] b, int len) {
  31.686 +		byte[] xb = new byte[tempbuf.length + len];
  31.687 +
  31.688 +		System.arraycopy(tempbuf, 0, xb, 0, tempbuf.length);
  31.689 +		System.arraycopy(b, 0, xb, tempbuf.length, len);
  31.690 +		tempbuf = xb;
  31.691 +	}
  31.692 +}
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/com/repdev/TelnetSymitarSession.java	Fri Jun 01 18:46:53 2007 +0000
    32.3 @@ -0,0 +1,492 @@
    32.4 +package com.repdev;
    32.5 +
    32.6 +import java.io.*;
    32.7 +import java.util.ArrayList;
    32.8 +
    32.9 +public class TelnetSymitarSession extends SymitarSession {
   32.10 +	TelnetWrapper telnet = new TelnetWrapper();
   32.11 +
   32.12 +	private enum State {
   32.13 +		MAIN_MENU, MANAGEMENT_MENU, PC_TRANSFER_MENU,
   32.14 +	}
   32.15 +
   32.16 +	private State state = null;
   32.17 +	boolean connected = false;
   32.18 +
   32.19 +	@Override
   32.20 +	public int acceptRepGenQuery(String value) {
   32.21 +		// TODO Auto-generated method stub
   32.22 +		return 0;
   32.23 +	}
   32.24 +
   32.25 +	private void log(String data) {
   32.26 +		System.out.println(data);
   32.27 +	}
   32.28 +
   32.29 +	@Override
   32.30 +	public SessionError connect(String server, String aixUsername, String aixPassword, int sym, String userID) {
   32.31 +		String temp;
   32.32 +
   32.33 +		this.server = server;
   32.34 +		this.sym = sym;
   32.35 +		this.aixUsername = aixUsername;
   32.36 +		this.aixPassword = aixPassword;
   32.37 +		this.userID = userID;
   32.38 +
   32.39 +		connected = true;
   32.40 +
   32.41 +		try {
   32.42 +
   32.43 +			telnet.connect(server, 23);
   32.44 +			telnet.login(aixUsername, aixPassword);
   32.45 +			temp = telnet.waitfor("$", "invalid login");
   32.46 +
   32.47 +			log(temp);
   32.48 +
   32.49 +			if (temp.indexOf("invalid login") != -1) {
   32.50 +				return SessionError.AIX_LOGIN_WRONG;
   32.51 +			}
   32.52 +
   32.53 +			log(telnet.sendLine("sym " + sym));
   32.54 +
   32.55 +			// Wait for the user ID prompt
   32.56 +			temp = telnet.waitfor("UserId :", ")");
   32.57 +			if (temp.indexOf(")") != -1) {
   32.58 +				return SessionError.CONSOLE_BLOCKED;
   32.59 +			}
   32.60 +
   32.61 +			log(telnet.sendLine(userID));
   32.62 +
   32.63 +			// Get through Console Dedication, and application prompt and to the
   32.64 +			// main menu
   32.65 +			temp = telnet.waitfor(":");
   32.66 +			log(temp);
   32.67 +
   32.68 +			if (temp.toLowerCase().indexOf("userid") != -1) {
   32.69 +				return SessionError.USERID_INVALID;
   32.70 +			}
   32.71 +
   32.72 +			log(telnet.sendLine("Y"));
   32.73 +
   32.74 +			temp = telnet.waitfor(":");
   32.75 +
   32.76 +			log(temp);
   32.77 +
   32.78 +			if (temp.indexOf("Application") != -1) {
   32.79 +				telnet.sendLine("");
   32.80 +				telnet.waitfor(":");
   32.81 +			}
   32.82 +
   32.83 +			state = State.MAIN_MENU;
   32.84 +
   32.85 +		} catch (Exception e) {
   32.86 +			return SessionError.IO_ERROR;
   32.87 +		}
   32.88 +
   32.89 +		return SessionError.NONE;
   32.90 +	}
   32.91 +
   32.92 +	@Override
   32.93 +	public SessionError disconnect() {
   32.94 +		try {
   32.95 +			telnet.disconnect();
   32.96 +		} catch (Exception e) {
   32.97 +		}
   32.98 +
   32.99 +		connected = false;
  32.100 +
  32.101 +		return null;
  32.102 +	}
  32.103 +
  32.104 +	@Override
  32.105 +	public int getBatchOutputSequenceNumber() {
  32.106 +		// TODO Auto-generated method stub
  32.107 +		return 0;
  32.108 +	}
  32.109 +
  32.110 +	private void getToState(State newState) throws IOException {
  32.111 +		if (state == State.MAIN_MENU) {
  32.112 +			if (newState == State.PC_TRANSFER_MENU) {
  32.113 +				// Management
  32.114 +				log(telnet.sendLine("8"));
  32.115 +				log(telnet.waitfor(":"));
  32.116 +
  32.117 +				// PC Transfer
  32.118 +				log(telnet.sendLine("2"));
  32.119 +				log(telnet.waitfor(":"));
  32.120 +				state = State.PC_TRANSFER_MENU;
  32.121 +			}
  32.122 +
  32.123 +			if (newState == State.MANAGEMENT_MENU) {
  32.124 +				log(telnet.sendLine("8"));
  32.125 +				log(telnet.waitfor(":"));
  32.126 +				state = State.MANAGEMENT_MENU;
  32.127 +			}
  32.128 +		}
  32.129 +
  32.130 +		if (state == State.PC_TRANSFER_MENU) {
  32.131 +			if (newState == State.MAIN_MENU) {
  32.132 +				log(telnet.send(Character.toString((char) 27)));
  32.133 +				log(telnet.waitfor(":"));
  32.134 +
  32.135 +				log(telnet.send(Character.toString((char) 27)));
  32.136 +				log(telnet.waitfor(":"));
  32.137 +
  32.138 +				state = State.MAIN_MENU;
  32.139 +			}
  32.140 +
  32.141 +			if (newState == State.MANAGEMENT_MENU) {
  32.142 +				getToState(State.MAIN_MENU);
  32.143 +				getToState(State.MANAGEMENT_MENU);
  32.144 +			}
  32.145 +		}
  32.146 +
  32.147 +		if (state == State.MANAGEMENT_MENU) {
  32.148 +			if (newState == State.PC_TRANSFER_MENU) {
  32.149 +				// PC Transfer
  32.150 +				log(telnet.sendLine("2"));
  32.151 +				log(telnet.waitfor(":"));
  32.152 +				state = State.PC_TRANSFER_MENU;
  32.153 +			}
  32.154 +
  32.155 +			if (newState == State.MAIN_MENU) {
  32.156 +				log(telnet.send(Character.toString((char) 27)));
  32.157 +				log(telnet.waitfor(":"));
  32.158 +				state = State.MAIN_MENU;
  32.159 +			}
  32.160 +		}
  32.161 +	}
  32.162 +
  32.163 +	@Override
  32.164 +	public String getFile(SymitarFile file) {
  32.165 +		String data = "", temp = "";
  32.166 +		StringBuilder stringBuilder = new StringBuilder();
  32.167 +
  32.168 +		if (!connected || file == null || file.getName() == null || file.getName().trim().equals(""))
  32.169 +			return null;
  32.170 +
  32.171 +		System.out.println("Requesting File: " + file.getName() + " from Sym " + sym);
  32.172 +
  32.173 +		try {
  32.174 +			getToState(State.PC_TRANSFER_MENU);
  32.175 +
  32.176 +			// Select which type of upload
  32.177 +			if (file.getType() == FileType.REPGEN) {
  32.178 +				log(telnet.sendLine("3"));
  32.179 +				log(telnet.waitfor(":"));
  32.180 +			} else if (file.getType() == FileType.LETTER) {
  32.181 +				log(telnet.sendLine("1"));
  32.182 +				log(telnet.waitfor(":"));
  32.183 +			} else if (file.getType() == FileType.HELP) {
  32.184 +				log(telnet.sendLine("5"));
  32.185 +				log(telnet.waitfor(":"));
  32.186 +			}
  32.187 +
  32.188 +			log(telnet.sendLine(file.getName()));
  32.189 +			temp = telnet.waitfor(":");
  32.190 +
  32.191 +			log(temp);
  32.192 +
  32.193 +			if (temp.indexOf("No such file") != -1) {
  32.194 +				log(telnet.send(Character.toString((char) 27)));
  32.195 +				log(telnet.waitfor(":"));
  32.196 +
  32.197 +				return null;
  32.198 +			}
  32.199 +
  32.200 +			log(telnet.sendLine("2"));
  32.201 +			log(telnet.waitfor(":"));
  32.202 +
  32.203 +			log(telnet.sendLine(""));
  32.204 +			log(telnet.waitfor(":"));
  32.205 +
  32.206 +			log(telnet.sendLine(""));
  32.207 +			log(telnet.waitfor(":"));
  32.208 +
  32.209 +			// log(telnet.sendLine(FTPManager.UPLOADUSER));
  32.210 +			log(telnet.waitfor(":"));
  32.211 +
  32.212 +			// log(telnet.sendLine(FTPManager.UPLOADPASS));
  32.213 +			log(telnet.waitfor(":"));
  32.214 +
  32.215 +			log(telnet.sendLine("1"));
  32.216 +			log(telnet.waitfor(":"));
  32.217 +
  32.218 +			log(telnet.sendLine(sym + ".REPGEN." + file.getName()));
  32.219 +			log(telnet.waitfor(":"));
  32.220 +
  32.221 +			log(telnet.sendLine(""));
  32.222 +			log(telnet.waitfor("221 Goodbye."));
  32.223 +			log(telnet.waitfor(":"));
  32.224 +
  32.225 +			log(telnet.sendLine(""));
  32.226 +			log(telnet.waitfor(":"));
  32.227 +
  32.228 +			// Read in the file now
  32.229 +			// BufferedReader in = new BufferedReader(new
  32.230 +			// FileReader(FTPManager.UPLOADDIR + "/" + sym + ".REPGEN." +
  32.231 +			// file.getName()));
  32.232 +
  32.233 +			// while((temp=in.readLine())!= null)
  32.234 +			// stringBuilder.append(temp + "\n");
  32.235 +
  32.236 +			return stringBuilder.toString();
  32.237 +
  32.238 +		} catch (IOException e) {
  32.239 +			return null;
  32.240 +		}
  32.241 +
  32.242 +	}
  32.243 +
  32.244 +	@Override
  32.245 +	public ArrayList<SymitarFile> getFileList(FileType type, String search) {
  32.246 +		ArrayList<SymitarFile> files = new ArrayList<SymitarFile>();
  32.247 +		String temp = "";
  32.248 +
  32.249 +		try {
  32.250 +			getToState(State.MANAGEMENT_MENU);
  32.251 +
  32.252 +			if (type == FileType.REPGEN) {
  32.253 +				log(telnet.sendLine("3"));
  32.254 +				log(telnet.waitfor(":"));
  32.255 +			} else if (type == FileType.LETTER) {
  32.256 +				log(telnet.sendLine("4"));
  32.257 +				log(telnet.waitfor(":"));
  32.258 +			} else if (type == FileType.HELP) {
  32.259 +				log(telnet.sendLine("5"));
  32.260 +				log(telnet.waitfor(":"));
  32.261 +			}
  32.262 +
  32.263 +			log(telnet.sendLine("1"));
  32.264 +			log(telnet.waitfor(":"));
  32.265 +
  32.266 +			log(telnet.sendLine(search));
  32.267 +			log(telnet.waitfor(":"));
  32.268 +
  32.269 +			log(telnet.sendLine(""));
  32.270 +			log(telnet.waitfor(":"));
  32.271 +
  32.272 +			log(telnet.sendLine("1"));
  32.273 +			log(telnet.waitfor(":"));
  32.274 +
  32.275 +			do {
  32.276 +				log(telnet.sendLine(""));
  32.277 +				temp = telnet.waitfor(":").trim();
  32.278 +				log(temp);
  32.279 +
  32.280 +				files.addAll(parseFileListPage(temp));
  32.281 +			} while (temp.indexOf("End of File List") == -1);
  32.282 +
  32.283 +			log(telnet.sendLine(""));
  32.284 +			log(telnet.waitfor(":"));
  32.285 +
  32.286 +			log(telnet.send(Character.toString((char) 27)));
  32.287 +			temp = telnet.waitfor(":");
  32.288 +			log(temp);
  32.289 +
  32.290 +			// Bizzarre bug here, when requesting a lot of list files
  32.291 +			if (temp.indexOf("File Name") != -1) {
  32.292 +				// log(telnet.send(Character.toString((char)27)));
  32.293 +				byte[] bytes = { (byte) 27 };
  32.294 +				telnet.write(bytes);
  32.295 +				log(telnet.waitfor(":"));
  32.296 +
  32.297 +				log(telnet.send(Character.toString((char) 27)));
  32.298 +				temp = telnet.waitfor(":");
  32.299 +				log(temp);
  32.300 +
  32.301 +				state = State.MAIN_MENU;
  32.302 +			}
  32.303 +		} catch (IOException e) {
  32.304 +			e.printStackTrace();
  32.305 +			return files;
  32.306 +		}
  32.307 +
  32.308 +		return files;
  32.309 +	}
  32.310 +
  32.311 +	/**
  32.312 +	 * Parses one page of file listing
  32.313 +	 * 
  32.314 +	 * @param data
  32.315 +	 * @return
  32.316 +	 */
  32.317 +	private ArrayList<SymitarFile> parseFileListPage(String data) {
  32.318 +		ArrayList<SymitarFile> files = new ArrayList<SymitarFile>();
  32.319 +		String[] lines = data.split("\n");
  32.320 +
  32.321 +		for (String currentLine : lines) {
  32.322 +			if (currentLine.length() > 3 && currentLine.substring(1, 4).equals("[1m"))
  32.323 +				files.add(new SymitarFile(currentLine.substring(4, currentLine.length() - 1), FileType.REPGEN));
  32.324 +		}
  32.325 +
  32.326 +		return files;
  32.327 +	}
  32.328 +
  32.329 +	@Override
  32.330 +	public String getRepGenQuery() {
  32.331 +		// TODO Auto-generated method stub
  32.332 +		return null;
  32.333 +	}
  32.334 +
  32.335 +	@Override
  32.336 +	public int getRepgenQueue() {
  32.337 +		// TODO Auto-generated method stub
  32.338 +		return 0;
  32.339 +	}
  32.340 +
  32.341 +	@Override
  32.342 +	public ArrayList<Integer> getSequenceNumbers() {
  32.343 +		// TODO Auto-generated method stub
  32.344 +		return null;
  32.345 +	}
  32.346 +
  32.347 +	@Override
  32.348 +	public boolean isConnected() {
  32.349 +		return connected;
  32.350 +	}
  32.351 +
  32.352 +	@Override
  32.353 +	public SessionError removeFile(SymitarFile file) {
  32.354 +		// TODO Auto-generated method stub
  32.355 +		return null;
  32.356 +	}
  32.357 +
  32.358 +	@Override
  32.359 +	public SessionError runBatchFM(String title) {
  32.360 +		// TODO Auto-generated method stub
  32.361 +		return null;
  32.362 +	}
  32.363 +
  32.364 +	@Override
  32.365 +	public void runRepGen(String name) {
  32.366 +		// TODO Auto-generated method stub
  32.367 +
  32.368 +	}
  32.369 +
  32.370 +	@Override
  32.371 +	public void runRepGen(String name, int queue) {
  32.372 +		// TODO Auto-generated method stub
  32.373 +
  32.374 +	}
  32.375 +
  32.376 +	@Override
  32.377 +	public SessionError saveFile(SymitarFile file, String text) {
  32.378 +		String temp = "";
  32.379 +		PrintWriter out;
  32.380 +
  32.381 +		if (!connected || file == null || file.getName() == null || file.getName().trim().equals(""))
  32.382 +			return null;
  32.383 +
  32.384 +		System.out.println("Saving File: " + file.getName() + " from Sym " + sym);
  32.385 +
  32.386 +		try {
  32.387 +			// out = new PrintWriter(new FileWriter(FTPManager.UPLOADDIR + "/" +
  32.388 +			// sym + ".REPGEN." + file.getName()));
  32.389 +			// out.print(text.replaceAll("\r\n", "\n"));
  32.390 +			// out.close();
  32.391 +		} catch (Exception e) {
  32.392 +			e.printStackTrace();
  32.393 +		}
  32.394 +
  32.395 +		try {
  32.396 +			getToState(State.PC_TRANSFER_MENU);
  32.397 +
  32.398 +			// Select which type of upload
  32.399 +			if (file.getType() == FileType.REPGEN) {
  32.400 +				log(telnet.sendLine("9"));
  32.401 +				log(telnet.waitfor(":"));
  32.402 +			} else if (file.getType() == FileType.LETTER) {
  32.403 +				log(telnet.sendLine("7"));
  32.404 +				log(telnet.waitfor(":"));
  32.405 +			} else if (file.getType() == FileType.HELP) {
  32.406 +				log(telnet.sendLine("10"));
  32.407 +				log(telnet.waitfor(":"));
  32.408 +			}
  32.409 +
  32.410 +			log(telnet.sendLine("2"));
  32.411 +			log(telnet.waitfor(":"));
  32.412 +
  32.413 +			log(telnet.sendLine(""));
  32.414 +			log(telnet.waitfor(":"));
  32.415 +
  32.416 +			// log(telnet.sendLine(FTPManager.UPLOADUSER));
  32.417 +			// log(telnet.waitfor(":"));
  32.418 +
  32.419 +			// log(telnet.sendLine(FTPManager.UPLOADPASS));
  32.420 +			// log(telnet.waitfor(":"));
  32.421 +
  32.422 +			log(telnet.sendLine("1"));
  32.423 +			log(telnet.waitfor(":"));
  32.424 +
  32.425 +			log(telnet.sendLine(sym + ".REPGEN." + file.getName()));
  32.426 +			log(telnet.waitfor(":"));
  32.427 +
  32.428 +			log(telnet.sendLine(file.getName()));
  32.429 +			log(telnet.waitfor(":"));
  32.430 +
  32.431 +			log(telnet.sendLine(""));
  32.432 +			log(telnet.waitfor("221 Goodbye."));
  32.433 +			log(telnet.waitfor(":"));
  32.434 +
  32.435 +			log(telnet.sendLine(""));
  32.436 +			log(telnet.waitfor(":"));
  32.437 +
  32.438 +		} catch (IOException e) {
  32.439 +			return SessionError.IO_ERROR;
  32.440 +		}
  32.441 +
  32.442 +		return SessionError.NONE;
  32.443 +	}
  32.444 +
  32.445 +	@Override
  32.446 +	public void waitOnChange() {
  32.447 +		// TODO Auto-generated method stub
  32.448 +
  32.449 +	}
  32.450 +
  32.451 +	@Override
  32.452 +	public SessionError printFileLPT(SymitarFile file, boolean formsOverride, int formLength, int startPage, int endPage, int copies, boolean landscape, boolean duplex, int queuePriority) {
  32.453 +		// TODO Auto-generated method stub
  32.454 +		return null;
  32.455 +	}
  32.456 +
  32.457 +	@Override
  32.458 +	public SessionError printFileTPT(SymitarFile file, int queue) {
  32.459 +		// TODO Auto-generated method stub
  32.460 +		return null;
  32.461 +	}
  32.462 +
  32.463 +	@Override
  32.464 +	public ErrorCheckResult errorCheckRepGen(String filename) {
  32.465 +		// TODO Auto-generated method stub
  32.466 +		return null;
  32.467 +	}
  32.468 +
  32.469 +	public ErrorCheckResult installRepgen(String file) {
  32.470 +		try {
  32.471 +			getToState(State.MANAGEMENT_MENU);
  32.472 +
  32.473 +			log(telnet.sendLine("3"));
  32.474 +			log(telnet.waitfor(":"));
  32.475 +
  32.476 +			log(telnet.sendLine("8")); // get to the install repgen section
  32.477 +			log(telnet.waitfor(":"));
  32.478 +
  32.479 +			log(telnet.sendLine(file));
  32.480 +			log(telnet.waitfor(":"));
  32.481 +			log(telnet.sendLine("Y"));
  32.482 +
  32.483 +			log(telnet.waitfor(":"));
  32.484 +			log(telnet.send(Character.toString((char) 27)));
  32.485 +			log(telnet.waitfor(":"));
  32.486 +			log(telnet.send(Character.toString((char) 27)));
  32.487 +			log(telnet.waitfor(":"));
  32.488 +
  32.489 +			getToState(State.MANAGEMENT_MENU);
  32.490 +		} catch (IOException e) {
  32.491 +			// ut oh!
  32.492 +		}
  32.493 +		return null;
  32.494 +	}
  32.495 +}
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/com/repdev/TelnetWrapper.java	Fri Jun 01 18:46:53 2007 +0000
    33.3 @@ -0,0 +1,149 @@
    33.4 +package com.repdev;
    33.5 +
    33.6 +import java.io.InputStream;
    33.7 +import java.io.OutputStream;
    33.8 +import java.io.IOException;
    33.9 +import java.net.Socket;
   33.10 +
   33.11 +import java.util.Vector;
   33.12 +import java.util.Properties;
   33.13 +
   33.14 +import java.awt.Dimension;
   33.15 +
   33.16 +/**
   33.17 + * The telnet wrapper is a sample class for how to use the telnet protocol
   33.18 + * handler of the JTA source package. To write a program using the wrapper you
   33.19 + * may use the following piece of code as an example:
   33.20 + * 
   33.21 + * <PRE>
   33.22 + * 
   33.23 + * TelnetWrapper telnet = new TelnetWrapper(); try { telnet.connect(args[0],
   33.24 + * 23); telnet.login("user", "password"); telnet.setPrompt("user@host");
   33.25 + * telnet.waitfor("Terminal type?"); telnet.send("dumb");
   33.26 + * System.out.println(telnet.send("ls -l")); } catch(java.io.IOException e) {
   33.27 + * e.printStackTrace(); }
   33.28 + * 
   33.29 + * </PRE>
   33.30 + * 
   33.31 + * Please keep in mind that the password is visible for anyone who can download
   33.32 + * the class file. So use this only for public accounts or if you are absolutely
   33.33 + * sure nobody can see the file.
   33.34 + * <P>
   33.35 + * <B>Maintainer:</B> Matthias L. Jugel
   33.36 + * 
   33.37 + * @version $Id: TelnetWrapper.java 499 2005-09-29 08:24:54Z leo $
   33.38 + * @author Matthias L. Jugel, Marcus Mei�ner
   33.39 + */
   33.40 +public class TelnetWrapper extends Wrapper {
   33.41 +	protected TelnetProtocolHandler handler;
   33.42 +
   33.43 +	/** debugging level */
   33.44 +	private final static int debug = 0;
   33.45 +
   33.46 +	public TelnetWrapper() {
   33.47 +		handler = new TelnetProtocolHandler() {
   33.48 +			/** get the current terminal type */
   33.49 +			public String getTerminalType() {
   33.50 +				return "vt320";
   33.51 +			}
   33.52 +
   33.53 +			/** get the current window size */
   33.54 +			public Dimension getWindowSize() {
   33.55 +				return new Dimension(80, 25);
   33.56 +			}
   33.57 +
   33.58 +			/** notify about local echo */
   33.59 +			public void setLocalEcho(boolean echo) {
   33.60 +				/* EMPTY */
   33.61 +			}
   33.62 +
   33.63 +			/** write data to our back end */
   33.64 +			public void write(byte[] b) throws IOException {
   33.65 +				out.write(b);
   33.66 +				out.flush();
   33.67 +			}
   33.68 +
   33.69 +			/** sent on IAC EOR (prompt terminator for remote access systems). */
   33.70 +			public void notifyEndOfRecord() {
   33.71 +			}
   33.72 +		};
   33.73 +	}
   33.74 +
   33.75 +	public TelnetProtocolHandler getHandler() {
   33.76 +		return handler;
   33.77 +	}
   33.78 +
   33.79 +	public void connect(String host, int port) throws IOException {
   33.80 +		super.connect(host, port);
   33.81 +		handler.reset();
   33.82 +	}
   33.83 +
   33.84 +	/**
   33.85 +	 * Send a command to the remote host. A newline is appended and if a prompt
   33.86 +	 * is set it will return the resulting data until the prompt is encountered.
   33.87 +	 * 
   33.88 +	 * @param cmd
   33.89 +	 *            the command
   33.90 +	 * @return output of the command or null if no prompt is set
   33.91 +	 */
   33.92 +	public String sendLine(String cmd) throws IOException {
   33.93 +		byte arr[];
   33.94 +		arr = (cmd + "\n").getBytes();
   33.95 +		handler.transpose(arr);
   33.96 +		if (getPrompt() != null)
   33.97 +			return waitfor(getPrompt());
   33.98 +		return null;
   33.99 +	}
  33.100 +
  33.101 +	/**
  33.102 +	 * Send a command to the remote host. NO newline is appended and if a prompt
  33.103 +	 * is set it will return the resulting data until the prompt is encountered.
  33.104 +	 * 
  33.105 +	 * @param cmd
  33.106 +	 *            the command
  33.107 +	 * @return output of the command or null if no prompt is set
  33.108 +	 * 
  33.109 +	 * This method created by Jake Poznanski
  33.110 +	 */
  33.111 +	public String send(String cmd) throws IOException {
  33.112 +		byte arr[];
  33.113 +		arr = (cmd).getBytes();
  33.114 +		handler.transpose(arr);
  33.115 +		if (getPrompt() != null)
  33.116 +			return waitfor(getPrompt());
  33.117 +		return null;
  33.118 +	}
  33.119 +
  33.120 +	/**
  33.121 +	 * Read data from the socket and use telnet negotiation before returning the
  33.122 +	 * data read.
  33.123 +	 * 
  33.124 +	 * @param b
  33.125 +	 *            the input buffer to read in
  33.126 +	 * @return the amount of bytes read
  33.127 +	 */
  33.128 +	public int read(byte[] b) throws IOException {
  33.129 +		/* process all already read bytes */
  33.130 +		int n;
  33.131 +
  33.132 +		do {
  33.133 +			n = handler.negotiate(b);
  33.134 +			if (n > 0)
  33.135 +				return n;
  33.136 +		} while (n == 0);
  33.137 +
  33.138 +		while (n <= 0) {
  33.139 +			do {
  33.140 +				n = handler.negotiate(b);
  33.141 +				if (n > 0)
  33.142 +					return n;
  33.143 +			} while (n == 0);
  33.144 +			n = in.read(b);
  33.145 +			if (n < 0)
  33.146 +				return n;
  33.147 +			handler.inputfeed(b, n);
  33.148 +			n = handler.negotiate(b);
  33.149 +		}
  33.150 +		return n;
  33.151 +	}
  33.152 +}
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/com/repdev/TestingSymitarSession.java	Fri Jun 01 18:46:53 2007 +0000
    34.3 @@ -0,0 +1,246 @@
    34.4 +package com.repdev;
    34.5 +
    34.6 +import java.util.ArrayList;
    34.7 +import java.util.Date;
    34.8 +import java.io.*;
    34.9 +import java.util.regex.*;
   34.10 +
   34.11 +public class TestingSymitarSession extends SymitarSession {
   34.12 +	boolean isConnected;
   34.13 +	int repGenRun = -1;
   34.14 +
   34.15 +	@Override
   34.16 +	public SessionError connect(String server, String aixUsername, String aixPassword, int sym, String userID) {
   34.17 +		this.sym = sym;
   34.18 +		this.aixUsername = aixUsername;
   34.19 +		this.aixPassword = aixPassword;
   34.20 +		this.userID = userID;
   34.21 +		isConnected = true;
   34.22 +		return SessionError.NONE;
   34.23 +	}
   34.24 +
   34.25 +	@Override
   34.26 +	public SessionError disconnect() {
   34.27 +		if (isConnected) {
   34.28 +			isConnected = false;
   34.29 +			return SessionError.NONE;
   34.30 +		} else
   34.31 +			return SessionError.NOT_CONNECTED;
   34.32 +	}
   34.33 +
   34.34 +	@Override
   34.35 +	public int acceptRepGenQuery(String value) {
   34.36 +		// TODO Auto-generated method stub
   34.37 +		return 0;
   34.38 +	}
   34.39 +
   34.40 +	@Override
   34.41 +	public int getBatchOutputSequenceNumber() {
   34.42 +		if (repGenRun == 1)
   34.43 +			return 133;
   34.44 +		else
   34.45 +			return -1;
   34.46 +	}
   34.47 +
   34.48 +	@Override
   34.49 +	public String getFile(SymitarFile file) {
   34.50 +		StringBuilder data = new StringBuilder();
   34.51 +		String line;
   34.52 +		BufferedReader in;
   34.53 +
   34.54 +		System.out.println("Requesting File: " + file.getName() + " from Sym " + sym);
   34.55 +
   34.56 +		try {
   34.57 +			in = new BufferedReader(new FileReader("testdata" + System.getProperty("file.separator") + getSym() + "." + file.getType().toString() + "." + file.getName() + ".txt"));
   34.58 +
   34.59 +			while ((line = in.readLine()) != null) {
   34.60 +				data.append(line);
   34.61 +				data.append("\r\n");
   34.62 +			}
   34.63 +
   34.64 +			if (in != null)
   34.65 +				in.close();
   34.66 +
   34.67 +			return data.toString();
   34.68 +		} catch (Exception e) {
   34.69 +			return null;
   34.70 +		}
   34.71 +
   34.72 +	}
   34.73 +
   34.74 +	// A silly class to make file system files work with wildcards like on
   34.75 +	// Symitar
   34.76 +	private class SymitarWildcardFilter implements FilenameFilter {
   34.77 +		String matcher;
   34.78 +		FileType type;
   34.79 +
   34.80 +		public SymitarWildcardFilter(String matcher, FileType type) {
   34.81 +			this.matcher = matcher;
   34.82 +			this.type = type;
   34.83 +		}
   34.84 +
   34.85 +		public boolean accept(File dir, String name) {
   34.86 +			// Strip out other things to get just the name we want
   34.87 +			try {
   34.88 +				if (!name.startsWith(String.valueOf(getSym())))
   34.89 +					return false;
   34.90 +
   34.91 +				name = name.substring(name.indexOf(".") + 1);
   34.92 +
   34.93 +				if (!name.startsWith(type.toString()))
   34.94 +					return false;
   34.95 +
   34.96 +				name = name.substring(name.indexOf(".") + 1);
   34.97 +
   34.98 +				name = name.substring(0, name.lastIndexOf("."));
   34.99 +
  34.100 +				Pattern p = Pattern.compile(matcher.replaceAll("\\+", ".*"));
  34.101 +				Matcher m = p.matcher(name);
  34.102 +
  34.103 +				return m.matches();
  34.104 +
  34.105 +			} catch (Exception e) {
  34.106 +			}
  34.107 +
  34.108 +			return true;
  34.109 +		}
  34.110 +	}
  34.111 +
  34.112 +	@Override
  34.113 +	public ArrayList<SymitarFile> getFileList(FileType type, String search) {
  34.114 +		ArrayList<SymitarFile> data = new ArrayList<SymitarFile>();
  34.115 +
  34.116 +		File file = new File("testdata");
  34.117 +		File[] fileListData;
  34.118 +
  34.119 +		search = search.trim();
  34.120 +
  34.121 +		if (search.equals(""))
  34.122 +			search = "+";
  34.123 +
  34.124 +		fileListData = file.listFiles(new SymitarWildcardFilter(search, type));
  34.125 +
  34.126 +		if (fileListData != null)
  34.127 +			for (File current : fileListData) {
  34.128 +				String name = current.getName();
  34.129 +				name = name.substring(name.indexOf(".") + 1);
  34.130 +				name = name.substring(name.indexOf(".") + 1);
  34.131 +				name = name.substring(0, name.lastIndexOf("."));
  34.132 +
  34.133 +				data.add(new SymitarFile(name, type, new Date(current.lastModified()), current.length()));
  34.134 +			}
  34.135 +
  34.136 +		return data;
  34.137 +	}
  34.138 +
  34.139 +	@Override
  34.140 +	public String getRepGenQuery() {
  34.141 +		switch (repGenRun) {
  34.142 +		case 0:
  34.143 +			repGenRun = 1;
  34.144 +			return "Enter the date to run report on";
  34.145 +		}
  34.146 +
  34.147 +		return null;
  34.148 +	}
  34.149 +
  34.150 +	@Override
  34.151 +	public int getRepgenQueue() {
  34.152 +		return 0;
  34.153 +	}
  34.154 +
  34.155 +	@Override
  34.156 +	public ArrayList<Integer> getSequenceNumbers() {
  34.157 +		if (repGenRun == 1) {
  34.158 +			ArrayList<Integer> temp = new ArrayList<Integer>();
  34.159 +			temp.add(134);
  34.160 +			temp.add(135);
  34.161 +		}
  34.162 +
  34.163 +		return null;
  34.164 +	}
  34.165 +
  34.166 +	@Override
  34.167 +	public boolean isConnected() {
  34.168 +		return isConnected;
  34.169 +	}
  34.170 +
  34.171 +	@Override
  34.172 +	public SessionError runBatchFM(String title) {
  34.173 +		// TODO Auto-generated method stub
  34.174 +		return null;
  34.175 +	}
  34.176 +
  34.177 +	@Override
  34.178 +	public void runRepGen(String name) {
  34.179 +		runRepGen(name, 0);
  34.180 +	}
  34.181 +
  34.182 +	@Override
  34.183 +	public void runRepGen(String name, int queue) {
  34.184 +		repGenRun = 0;
  34.185 +	}
  34.186 +
  34.187 +	@Override
  34.188 +	public SessionError saveFile(SymitarFile file, String text) {
  34.189 +		PrintWriter out = null;
  34.190 +
  34.191 +		System.out.println("Saving File: " + file.getName() + " from Sym " + sym);
  34.192 +
  34.193 +		try {
  34.194 +			out = new PrintWriter(new FileWriter("testdata" + System.getProperty("file.separator") + getSym() + "." + file.getType().toString() + "." + file.getName() + ".txt"));
  34.195 +
  34.196 +			out.print(text);
  34.197 +
  34.198 +			if (out != null)
  34.199 +				out.close();
  34.200 +
  34.201 +			return SessionError.NONE;
  34.202 +
  34.203 +		} catch (Exception e) {
  34.204 +			return SessionError.IO_ERROR;
  34.205 +		}
  34.206 +
  34.207 +	}
  34.208 +
  34.209 +	@Override
  34.210 +	public void waitOnChange() {
  34.211 +		return;
  34.212 +	}
  34.213 +
  34.214 +	@Override
  34.215 +	public SessionError removeFile(SymitarFile file) {
  34.216 +		File localFile = new File("testdata" + System.getProperty("file.separator") + getSym() + "." + file.getType().toString() + "." + file.getName() + ".txt");
  34.217 +
  34.218 +		if (!localFile.exists())
  34.219 +			return SessionError.IO_ERROR;
  34.220 +
  34.221 +		localFile.delete();
  34.222 +
  34.223 +		return SessionError.NONE;
  34.224 +	}
  34.225 +
  34.226 +	@Override
  34.227 +	public SessionError printFileLPT(SymitarFile file, boolean formsOverride, int formLength, int startPage, int endPage, int copies, boolean landscape, boolean duplex, int queuePriority) {
  34.228 +		// TODO Auto-generated method stub
  34.229 +		return null;
  34.230 +	}
  34.231 +
  34.232 +	@Override
  34.233 +	public SessionError printFileTPT(SymitarFile file, int queue) {
  34.234 +		// TODO Auto-generated method stub
  34.235 +		return null;
  34.236 +	}
  34.237 +
  34.238 +	@Override
  34.239 +	public ErrorCheckResult errorCheckRepGen(String filename) {
  34.240 +		// TODO Auto-generated method stub
  34.241 +		return null;
  34.242 +	}
  34.243 +
  34.244 +	@Override
  34.245 +	public ErrorCheckResult installRepgen(String f) {
  34.246 +		return null;
  34.247 +	}
  34.248 +
  34.249 +}
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/com/repdev/Wrapper.java	Fri Jun 01 18:46:53 2007 +0000
    35.3 @@ -0,0 +1,197 @@
    35.4 +package com.repdev;
    35.5 +
    35.6 +import java.io.InputStream;
    35.7 +import java.io.OutputStream;
    35.8 +import java.io.IOException;
    35.9 +import java.net.Socket;
   35.10 +
   35.11 +import java.util.Vector;
   35.12 +import java.util.Properties;
   35.13 +
   35.14 +import java.awt.Dimension;
   35.15 +
   35.16 +/**
   35.17 + * To write a program using the wrapper you may use the following piece of code
   35.18 + * as an example:
   35.19 + * 
   35.20 + * <PRE>
   35.21 + * 
   35.22 + * TelnetWrapper telnet = new TelnetWrapper(); try { telnet.connect(args[0],
   35.23 + * 23); telnet.login("user", "password"); telnet.setPrompt("user@host");
   35.24 + * telnet.waitfor("Terminal type?"); telnet.send("dumb");
   35.25 + * System.out.println(telnet.send("ls -l")); } catch(java.io.IOException e) {
   35.26 + * e.printStackTrace(); }
   35.27 + * 
   35.28 + * </PRE>
   35.29 + * 
   35.30 + * Please keep in mind that the password is visible for anyone who can download
   35.31 + * the class file. So use this only for public accounts or if you are absolutely
   35.32 + * sure nobody can see the file.
   35.33 + * <P>
   35.34 + * <B>Maintainer:</B> Matthias L. Jugel
   35.35 + * 
   35.36 + * @version $Id: Wrapper.java 499 2005-09-29 08:24:54Z leo $
   35.37 + * @author Matthias L. Jugel, Marcus Mei\u00dfner
   35.38 + */
   35.39 +
   35.40 +public class Wrapper {
   35.41 +
   35.42 +	/** debugging level */
   35.43 +	private final static int debug = 0;
   35.44 +
   35.45 +	protected ScriptHandler scriptHandler = new ScriptHandler();
   35.46 +	private Thread reader;
   35.47 +
   35.48 +	protected InputStream in;
   35.49 +	protected OutputStream out;
   35.50 +	protected Socket socket;
   35.51 +	protected String host;
   35.52 +	protected int port = 23;
   35.53 +	protected Vector script = new Vector();
   35.54 +
   35.55 +	/** Connect the socket and open the connection. */
   35.56 +	public void connect(String host, int port) throws IOException {
   35.57 +		if (debug > 0)
   35.58 +			System.err.println("Wrapper: connect(" + host + "," + port + ")");
   35.59 +		try {
   35.60 +			socket = new java.net.Socket(host, port);
   35.61 +			in = socket.getInputStream();
   35.62 +			out = socket.getOutputStream();
   35.63 +		} catch (Exception e) {
   35.64 +			System.err.println("Wrapper: " + e);
   35.65 +			disconnect();
   35.66 +			throw ((IOException) e);
   35.67 +		}
   35.68 +	}
   35.69 +
   35.70 +	/** Disconnect the socket and close the connection. */
   35.71 +	public void disconnect() throws IOException {
   35.72 +		if (debug > 0)
   35.73 +			System.err.println("Wrapper: disconnect()");
   35.74 +		if (socket != null)
   35.75 +			socket.close();
   35.76 +	}
   35.77 +
   35.78 +	/**
   35.79 +	 * Login into remote host. This is a convenience method and only works if
   35.80 +	 * the prompts are "login:" and "Password:".
   35.81 +	 * 
   35.82 +	 * @param user
   35.83 +	 *            the user name
   35.84 +	 * @param pwd
   35.85 +	 *            the password
   35.86 +	 */
   35.87 +	public void login(String user, String pwd) throws IOException {
   35.88 +		waitfor("login:"); // throw output away
   35.89 +		sendLine(user);
   35.90 +		waitfor("Password:"); // throw output away
   35.91 +		sendLine(pwd);
   35.92 +	}
   35.93 +
   35.94 +	/**
   35.95 +	 * Set the prompt for the send() method.
   35.96 +	 */
   35.97 +	private String prompt = null;
   35.98 +
   35.99 +	public void setPrompt(String prompt) {
  35.100 +		this.prompt = prompt;
  35.101 +	}
  35.102 +
  35.103 +	public String getPrompt() {
  35.104 +		return prompt;
  35.105 +	}
  35.106 +
  35.107 +	/**
  35.108 +	 * Send a command to the remote host. A newline is appended and if a prompt
  35.109 +	 * is set it will return the resulting data until the prompt is encountered.
  35.110 +	 * 
  35.111 +	 * @param cmd
  35.112 +	 *            the command
  35.113 +	 * @return output of the command or null if no prompt is set
  35.114 +	 */
  35.115 +	public String sendLine(String cmd) throws IOException {
  35.116 +		return null;
  35.117 +	}
  35.118 +
  35.119 +	/**
  35.120 +	 * Wait for a string to come from the remote host and return all that
  35.121 +	 * characters that are received until that happens (including the string
  35.122 +	 * being waited for).
  35.123 +	 * 
  35.124 +	 * @param match
  35.125 +	 *            the string to look for
  35.126 +	 * @return skipped characters
  35.127 +	 */
  35.128 +
  35.129 +	public String waitfor(String... searchElements) throws IOException {
  35.130 +		ScriptHandler[] handlers = new ScriptHandler[searchElements.length];
  35.131 +		for (int i = 0; i < searchElements.length; i++) {
  35.132 +			// initialize the handlers
  35.133 +			handlers[i] = new ScriptHandler();
  35.134 +			handlers[i].setup(searchElements[i]);
  35.135 +		}
  35.136 +
  35.137 +		byte[] b1 = new byte[1];
  35.138 +		int n = 0;
  35.139 +		StringBuffer ret = new StringBuffer();
  35.140 +		String current;
  35.141 +
  35.142 +		while (n >= 0) {
  35.143 +			n = read(b1);
  35.144 +			if (n > 0) {
  35.145 +				current = new String(b1, 0, n);
  35.146 +				if (debug > 0)
  35.147 +					System.err.print(current);
  35.148 +				ret.append(current);
  35.149 +				for (int i = 0; i < handlers.length; i++) {
  35.150 +					if (handlers[i].match(ret.toString().getBytes(), ret.length())) {
  35.151 +						return ret.toString();
  35.152 +					} // if
  35.153 +				} // for
  35.154 +			} // if
  35.155 +		} // while
  35.156 +		return null; // should never happen
  35.157 +	}
  35.158 +
  35.159 +	public String waitfor(String match) throws IOException {
  35.160 +		String[] matches = new String[1];
  35.161 +
  35.162 +		matches[0] = match;
  35.163 +		return waitfor(matches);
  35.164 +	}
  35.165 +
  35.166 +	/**
  35.167 +	 * Read data from the socket and use telnet negotiation before returning the
  35.168 +	 * data read.
  35.169 +	 * 
  35.170 +	 * @param b
  35.171 +	 *            the input buffer to read in
  35.172 +	 * @return the amount of bytes read
  35.173 +	 */
  35.174 +	public int read(byte[] b) throws IOException {
  35.175 +		return -1;
  35.176 +	};
  35.177 +
  35.178 +	/**
  35.179 +	 * Write data to the socket.
  35.180 +	 * 
  35.181 +	 * @param b
  35.182 +	 *            the buffer to be written
  35.183 +	 */
  35.184 +	public void write(byte[] b) throws IOException {
  35.185 +		out.write(b);
  35.186 +	}
  35.187 +
  35.188 +	public String getTerminalType() {
  35.189 +		return "dumb";
  35.190 +	}
  35.191 +
  35.192 +	public Dimension getWindowSize() {
  35.193 +		return new Dimension(80, 24);
  35.194 +	}
  35.195 +
  35.196 +	public void setLocalEcho(boolean echo) {
  35.197 +		if (debug > 0)
  35.198 +			System.err.println("local echo " + (echo ? "on" : "off"));
  35.199 +	}
  35.200 +}
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/db.txt	Fri Jun 01 18:46:53 2007 +0000
    36.3 @@ -0,0 +1,7508 @@
    36.4 +***|Account|Account
    36.5 +	Number|Account Number|1|0|10
    36.6 +	Type|Account Type|2|5|9999
    36.7 +	LastFMDate|Last FM Date|3|3|null
    36.8 +	OpenDate|Open Date|5|3|null
    36.9 +	CloseDate|Close Date|6|3|null
   36.10 +	Branch|Branch|7|5|9999
   36.11 +	Restrict|Restricted Access|8|5|6
   36.12 +	Reference|Reference|9|0|20
   36.13 +	WarningCode:1|Warning 1 Code|10|5|99
   36.14 +	WarningCode:2|Warning 2 Code|10|5|99
   36.15 +	WarningCode:3|Warning 3 Code|10|5|99
   36.16 +	WarningCode:4|Warning 4 Code|10|5|99
   36.17 +	WarningCode:5|Warning 5 Code|10|5|99
   36.18 +	WarningCode:6|Warning 6 Code|10|5|99
   36.19 +	WarningCode:7|Warning 7 Code|10|5|99
   36.20 +	WarningCode:8|Warning 8 Code|10|5|99
   36.21 +	PaymentHistory:1|Payments Made|11|5|9999
   36.22 +	PaymentHistory:2|31- 60 Days DQ|11|5|9999
   36.23 +	PaymentHistory:3|61- 90 Days DQ|11|5|9999
   36.24 +	PaymentHistory:4|91-120 Days DQ|11|5|9999
   36.25 +	PaymentHistory:5|121-180 Days DQ|11|5|9999
   36.26 +	PaymentHistory:6|181 and up Days DQ|11|5|9999
   36.27 +	MemberStatus|Membership Status|13|5|1
   36.28 +	CorrespondDate|Correspondence Date|14|3|null
   36.29 +	ProxyDate|Proxy Date|15|3|null
   36.30 +	HeadOfHousehold|Head of Household|16|5|1
   36.31 +	WarningExpiration:1|Warning 1 Expiration|17|3|null
   36.32 +	WarningExpiration:2|Warning 2 Expiration|17|3|null
   36.33 +	WarningExpiration:3|Warning 3 Expiration|17|3|null
   36.34 +	WarningExpiration:4|Warning 4 Expiration|17|3|null
   36.35 +	WarningExpiration:5|Warning 5 Expiration|17|3|null
   36.36 +	WarningExpiration:6|Warning 6 Expiration|17|3|null
   36.37 +	WarningExpiration:7|Warning 7 Expiration|17|3|null
   36.38 +	WarningExpiration:8|Warning 8 Expiration|17|3|null
   36.39 +	NSFMonthlyCount:1|NSF Month 01 Day Count|18|5|9999
   36.40 +	NSFMonthlyCount:2|NSF Month 02 Day Count|18|5|9999
   36.41 +	NSFMonthlyCount:3|NSF Month 03 Day Count|18|5|9999
   36.42 +	NSFMonthlyCount:4|NSF Month 04 Day Count|18|5|9999
   36.43 +	NSFMonthlyCount:5|NSF Month 05 Day Count|18|5|9999
   36.44 +	NSFMonthlyCount:6|NSF Month 06 Day Count|18|5|9999
   36.45 +	NSFMonthlyCount:7|NSF Month 07 Day Count|18|5|9999
   36.46 +	NSFMonthlyCount:8|NSF Month 08 Day Count|18|5|9999
   36.47 +	NSFMonthlyCount:9|NSF Month 09 Day Count|18|5|9999
   36.48 +	NSFMonthlyCount:10|NSF Month 10 Day Count|18|5|9999
   36.49 +	NSFMonthlyCount:11|NSF Month 11 Day Count|18|5|9999
   36.50 +	NSFMonthlyCount:12|NSF Month 12 Day Count|18|5|9999
   36.51 +	NSFMonthlyCount:13|NSF Month 13 Day Count|18|5|9999
   36.52 +	NSFMonthlyCount:14|NSF Month 14 Day Count|18|5|9999
   36.53 +	NSFMonthlyCount:15|NSF Month 15 Day Count|18|5|9999
   36.54 +	NSFMonthlyCount:16|NSF Month 16 Day Count|18|5|9999
   36.55 +	NSFMonthlyCount:17|NSF Month 17 Day Count|18|5|9999
   36.56 +	NSFMonthlyCount:18|NSF Month 18 Day Count|18|5|9999
   36.57 +	NSFMonthlyCount:19|NSF Month 19 Day Count|18|5|9999
   36.58 +	NSFMonthlyCount:20|NSF Month 20 Day Count|18|5|9999
   36.59 +	NSFMonthlyCount:21|NSF Month 21 Day Count|18|5|9999
   36.60 +	NSFMonthlyCount:22|NSF Month 22 Day Count|18|5|9999
   36.61 +	NSFMonthlyCount:23|NSF Month 23 Day Count|18|5|9999
   36.62 +	NSFMonthlyCount:24|NSF Month 24 Day Count|18|5|9999
   36.63 +	NSFToday|NSF Today Count|19|5|9999
   36.64 +	MemberGroup|Member Group|20|5|9999
   36.65 +	CommercialCode|Commercial Code|21|5|2
   36.66 +	FMLastPurgeDate|FM History Purge Date|22|3|null
   36.67 +	StateReporting|State Reporting|24|0|2
   36.68 +	HouseholdAccount|Household Account|25|0|10
   36.69 +	HouseholdStatement|Household Statement|26|5|1
   36.70 +	FrozenMode|Audio/HB Frozen Mode|27|5|1
   36.71 +	InvalidAttemptCount|Invalid Attempt Count|28|5|9999
   36.72 +	InvalidAttemptDate|Last Inv Attempt Date|29|3|null
   36.73 +	InvalidAttemptTime|Last Inv Attempt Time|30|5|2359
   36.74 +	StatementMailCode|Statement Mail Code|31|5|99
   36.75 +	RelationshipCode|Relationship Code|32|5|99
   36.76 +	RelationshipOverride|Relationship Override|33|5|99
   36.77 +	RelationshipOverrideEffDate|Rel Override Eff Date|34|3|null
   36.78 +	RelationshipOverrideExpDate|Rel Override Exp Date|35|3|null
   36.79 +	KRHoldBaseAmount|Check Hold Base Amount|36|7|null
   36.80 +	KRTotalAmount|Check Dep Total Amount|37|7|null
   36.81 +	KRTotalDate|Check Dep Total Date|38|3|null
   36.82 +	EstmtNotify|E-Statement Email Notify|39|5|1
   36.83 +	EstmtEnable|E-Statement Enable|40|5|2
   36.84 +	CRTotalAmount|US Cash Rcvd Amount|41|7|null
   36.85 +	CDTotalAmount|US Cash Disb Amount|42|7|null
   36.86 +	FRCRTotalAmount|Frgn Cash Rcvd Amt|43|7|null
   36.87 +	FRCDTotalAmount|Frgn Cash Disb Amt|44|7|null
   36.88 +	UserChar1|Seller|45|0|40
   36.89 +	UserChar2|Initial Employer|46|0|40
   36.90 +	UserChar3|Student CU school name|47|0|40
   36.91 +	UserChar4|User Char   04|48|0|40
   36.92 +	UserAmount1|User Amount 01|49|7|null
   36.93 +	UserAmount2|User Amount 02|50|7|null
   36.94 +	UserDate1|Date account went below $5 min|51|3|null
   36.95 +	UserDate2|Bill Payer Enrollment Date|52|3|null
   36.96 +	EnableFloat|Enable Floats|53|5|1
   36.97 +	DivYTDTax|Dividend This Year Taxable|80|7|null
   36.98 +	DivYTDNonTax|Dividend This Year Non-Tax|81|7|null
   36.99 +	DivLastYearTax|Dividend Last Year Taxable|82|7|null
  36.100 +	DivLastYearNonTax|Dividend Last Year Non-Tax|83|7|null
  36.101 +	InterestYTD|Interest This Year|84|7|null
  36.102 +	InterestLastYear|Interest Last Year|85|7|null
  36.103 +	BondIntYTD|Bond Interest This Year|86|7|null
  36.104 +	BondIntLastYear|Bond Interest Last Year|87|7|null
  36.105 +	CurrentRelationshipCode|Current Relationship Code|88|5|99
  36.106 +	PayeeLine:1|Payee Line 1|89|0|40
  36.107 +	PayeeLine:2|Payee Line 2|89|0|40
  36.108 +	PayeeLine:3|Payee Line 3|89|0|40
  36.109 +	PayeeLine:4|Payee Line 4|89|0|40
  36.110 +	PayeeLine:5|Payee Line 5|89|0|40
  36.111 +	PayeeLine:6|Payee Line 6|89|0|40
  36.112 +	ActivityDate|Activity Date|90|3|null
  36.113 +	***|FMHistory|FM History
  36.114 +		AccountNumber|Account Number|0|0|10
  36.115 +		IDType|ID Type|0|5|4
  36.116 +		ID|ID|0|0|2
  36.117 +		SequenceNumber|Sequence Number|0|4|null
  36.118 +		PostDate|Post Date|0|3|null
  36.119 +		PostTime|Post Time|0|5|9999
  36.120 +		UserNumber|User Number|0|5|4999
  36.121 +		UserOverride|User Override|0|5|4999
  36.122 +		SecurityLevels|Security Levels|0|5|9999
  36.123 +		Branch|Branch|0|5|9999
  36.124 +		FMType|FM Type|0|5|2
  36.125 +		LastFMDate|FM Last Date|0|3|null
  36.126 +		RecordType|Record Type|0|4|null
  36.127 +		FieldNumber|Field Number|0|4|null
  36.128 +		SubfieldNumber|Sub Field Number|0|5|9999
  36.129 +		DataType|Data Type|0|5|8
  36.130 +		OldNumber|Old Number|0|4|null
  36.131 +		NewNumber|New Number|0|4|null
  36.132 +		OldCharacter|Old Character|0|1|40
  36.133 +		NewCharacter|New Character|0|1|40
  36.134 +		OldMoney|Old Money|0|7|null
  36.135 +		NewMoney|New Money|0|7|null
  36.136 +		OldDate|Old Date|0|3|null
  36.137 +		NewDate|New Date|0|3|null
  36.138 +		OldRate|Old Rate|0|2|null
  36.139 +		NewRate|New Rate|0|2|null
  36.140 +		ConsoleNumber|Console Number|0|5|9999
  36.141 +		BatchSequence|Batch Sequence|0|4|null
  36.142 +		ProcessorUser|Processor User|0|5|32767
  36.143 +		RecordName|Record Name|2480|1|40
  36.144 +		FieldName|Field Name|2481|1|40
  36.145 +	***|Name|Name
  36.146 +		Type|Name Type|101|5|53
  36.147 +		SubType|Name SubType|102|5|99
  36.148 +		MailOverride|Mail Override|103|5|1
  36.149 +		SSNOverride|SSN/TIN Override|104|5|3
  36.150 +		SSNCertification|SSN/TIN Certification|105|5|2
  36.151 +		SSNType|SSN/TIN Type|106|5|9
  36.152 +		EffectiveDate|Effective  Date|107|3|null
  36.153 +		ExpirationDate|Expiration Date|108|3|null
  36.154 +		BirthDate|Birth Date|109|3|null
  36.155 +		Title|Title|110|0|8
  36.156 +		First|First Name|111|0|20
  36.157 +		Middle|Middle Name|112|0|10
  36.158 +		Last|Last Name|113|0|40
  36.159 +		Suffix|Suffix|114|0|4
  36.160 +		ExtraAddress|Extra Address|115|0|40
  36.161 +		Street|Street|116|0|40
  36.162 +		City|City|117|0|40
  36.163 +		State|State|118|0|10
  36.164 +		ZipCode|Zip Code|119|0|10
  36.165 +		HomePhone|Home Phone|120|0|16
  36.166 +		SSN|SSN/TIN|121|0|9
  36.167 +		WorkPhone|Work Phone|122|0|16
  36.168 +		LastFMDate|Last FM Date|123|3|null
  36.169 +		CarrierRoute|Carrier Route|124|0|4
  36.170 +		AddressType|Address Type|125|5|2
  36.171 +		BeneficiaryPercent|Beneficiary Percent|126|2|null
  36.172 +		IRSCorrection|IRS Correction|127|5|1
  36.173 +		WorkPhoneExtension|Work Phone Ext|128|0|6
  36.174 +		DeathDate|Death Date|130|3|null
  36.175 +		ECOACode|ECOA Code|131|5|11
  36.176 +		Country|Country|132|0|20
  36.177 +		CountryCode|Country Code|133|0|2
  36.178 +		Email|E-Mail Address|134|0|40
  36.179 +		MothersMaidenName|Mother's Maiden Name|135|0|20
  36.180 +		EmployerName|Current Employer|136|0|40
  36.181 +		AltEmail|Alt E-Mail Address|137|0|40
  36.182 +		Locator|Locator|138|4|null
  36.183 +		MobilePhone|Mobile Phone|139|0|16
  36.184 +		PagerNumber|Pager Number|140|0|16
  36.185 +		USPersonFlag|U.S. Person Flag|141|5|1
  36.186 +		IdentDocFlag:1|Documentary Flag 1|142|5|1
  36.187 +		IdentDocFlag:2|Documentary Flag 2|142|5|1
  36.188 +		IdentDocFlag:3|Documentary Flag 3|142|5|1
  36.189 +		IdentIDType:1|ID Type 1|143|5|999
  36.190 +		IdentIDType:2|ID Type 2|143|5|999
  36.191 +		IdentIDType:3|ID Type 3|143|5|999
  36.192 +		IdentIDDescription:1|ID Description 1|144|0|40
  36.193 +		IdentIDDescription:2|ID Description 2|144|0|40
  36.194 +		IdentIDDescription:3|ID Description 3|144|0|40
  36.195 +		IdentIDNumber:1|ID Number 1|145|0|40
  36.196 +		IdentIDNumber:2|ID Number 2|145|0|40
  36.197 +		IdentIDNumber:3|ID Number 3|145|0|40
  36.198 +		IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
  36.199 +		IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
  36.200 +		IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
  36.201 +		IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
  36.202 +		IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
  36.203 +		IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
  36.204 +		IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
  36.205 +		IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
  36.206 +		IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
  36.207 +		Occupation|Occupation|149|0|20
  36.208 +		UserChar1|User Char   01|150|0|40
  36.209 +		UserChar2|User Char   02|151|0|40
  36.210 +		UserChar3|User Char   03|152|0|40
  36.211 +		UserChar4|User Char   04|153|0|40
  36.212 +		UserAmount1|User Amount 01|154|7|null
  36.213 +		UserAmount2|User Amount 02|155|7|null
  36.214 +		UserDate1|User Date   01|156|3|null
  36.215 +		UserDate2|User Date   02|157|3|null
  36.216 +		LastAddrChgDate|Address Change Date|158|3|null
  36.217 +		LastAddrVerifDate|Address Verify Date|159|3|null
  36.218 +		CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
  36.219 +		ShortName|Short Name|180|0|16
  36.220 +		LongName|Long Name|181|1|40
  36.221 +		License|License|129|0|20
  36.222 +	***|Lookup|Lookup
  36.223 +		Type|Lookup Type|201|5|99
  36.224 +		Number|Lookup|202|0|20
  36.225 +		IDType|Reference ID Type|203|5|2
  36.226 +		ID|Reference ID|204|0|2
  36.227 +		Locator|Locator|205|4|null
  36.228 +	***|Comment|Comment
  36.229 +		Type|Comment Type|301|5|3
  36.230 +		EffectiveDate|Effective Date|302|3|null
  36.231 +		ExpirationDate|Expiration Date|303|3|null
  36.232 +		Comment|Comment|304|0|40
  36.233 +		Locator|Locator|305|4|null
  36.234 +	***|Household|Household
  36.235 +		Type|Household Type|2301|5|99
  36.236 +		AccountNumber|Household Account|2302|0|10
  36.237 +		Locator|Locator|2303|4|null
  36.238 +	***|Preference|Preference
  36.239 +		InteractMode|Interaction Mode|6601|5|1
  36.240 +		Language|Language|6602|5|9
  36.241 +		HomeFax|Home Fax|6603|0|12
  36.242 +		BusinessFax|Business Fax|6604|0|12
  36.243 +		TranCodes|Tran Codes|6605|0|18
  36.244 +		AudioAccess|Audio Access Code|6606|0|16
  36.245 +		AudioEnable|Audio Enable Code|6607|5|2
  36.246 +		AudioCallCount|Audio Call Count|6608|5|9999
  36.247 +		AudioCallMinutes|Audio Call Minutes|6609|5|9999
  36.248 +		ListTransactions|List Transactions|6610|5|99
  36.249 +		Type|Type|6611|5|99
  36.250 +		HBMode|HB Mode|6612|5|1
  36.251 +		HBEnable|HB Enable Code|6613|5|2
  36.252 +		HBCallCount|HB Call Count|6614|5|9999
  36.253 +		HBCallMinutes|HB Call Minutes|6615|5|9999
  36.254 +		LastAccessChangeDate|Last Access Code Change|6616|3|null
  36.255 +		LastLogonDate|Last Logon Date|6617|3|null
  36.256 +		LastLogonTime|Last Logon Time|6618|5|2359
  36.257 +		Reference|Reference|6619|0|40
  36.258 +		UserCode|User Code|6620|5|999
  36.259 +		HBPassword|HB Password|6621|0|20
  36.260 +		LastHBPWChangeDate|Last HB Password Change|6622|3|null
  36.261 +		LastTranDate|Last Transaction Date|6623|3|null
  36.262 +		WDCashMax|Maximum Cash W/D|6624|7|null
  36.263 +		WDCashLimit|Cash W/D Limit|6625|7|null
  36.264 +		WDCashAmount|Cash W/D Amount|6626|7|null
  36.265 +		WDCashCountLimit|Cash W/D Count Limit|6627|5|9999
  36.266 +		WDCashCount|Cash W/D Count|6628|5|9999
  36.267 +		WDCheckMax|Maximum Check W/D|6629|7|null
  36.268 +		WDCheckLimit|Check W/D Limit|6630|7|null
  36.269 +		WDCheckAmount|Check W/D Amount|6631|7|null
  36.270 +		WDCheckCountLimit|Check W/D Count Limit|6632|5|9999
  36.271 +		WDCheckCount|Check W/D Count|6633|5|9999
  36.272 +		XferMax|Maximum Transfer|6634|7|null
  36.273 +		XferLimit|Transfer Limit|6635|7|null
  36.274 +		XferAmount|Transfer Amount|6636|7|null
  36.275 +		XferCountLimit|Transfer Count Limit|6637|5|9999
  36.276 +		XferCount|Transfer Count|6638|5|9999
  36.277 +		BillPayMax|Maximum Bill Pmt|6639|7|null
  36.278 +		BillPayLimit|Bill Pmt Limit|6640|7|null
  36.279 +		BillPayAmount|Bill Pmt Amount|6641|7|null
  36.280 +		BillPayCountLimit|Bill Pmt Count Limit|6642|5|9999
  36.281 +		BillPayCount|Bill Pmt Count|6643|5|9999
  36.282 +		DepMax|Maximum Deposit|6644|7|null
  36.283 +		DepLimit|Deposit Limit|6645|7|null
  36.284 +		DepAmount|Deposit Amount|6646|7|null
  36.285 +		DepCountLimit|Deposit Count Limit|6647|5|9999
  36.286 +		DepCount|Deposit Count|6648|5|9999
  36.287 +		Locator|Locator|6649|4|null
  36.288 +		HBLastLogonDate|Last HB Logon Date|6650|3|null
  36.289 +		HBLastLogonTime|Last HB Logon Time|6651|5|2359
  36.290 +		AudLastLogonDate|Last Audio Logon Date|6652|3|null
  36.291 +		AudLastLogonTime|Last Audio Logon Time|6653|5|2359
  36.292 +		EmailAddress|Email-Address|56|0|40
  36.293 +		***|Preference Access|Preference Access
  36.294 +			AccessType|Access Type|6701|5|3
  36.295 +			AccountNumber|Account Number|6702|0|10
  36.296 +			IDType|ID Type|6703|5|2
  36.297 +			ID|ID|6704|0|2
  36.298 +			EnableWithdrawal|Enable Withdrawals|6705|5|1
  36.299 +			EnableDeposit|Enable Deposits|6706|5|1
  36.300 +			EnableInquiry|Enable Inquiries|6707|5|1
  36.301 +			Locator|Locator|6708|4|null
  36.302 +			EnableFM|Enable FM|6709|5|1
  36.303 +			Qualifier|Qualifier|6710|0|3
  36.304 +	***|Tracking|Tracking
  36.305 +		Type|Tracking Type|6801|5|99
  36.306 +		ID|ID|6802|0|2
  36.307 +		IDType|ID Type|6803|5|4
  36.308 +		UserID|User ID|6804|5|4999
  36.309 +		FMLastDate|Last FM Date|6805|3|null
  36.310 +		CreationDate|Creation Date|6806|3|null
  36.311 +		CreationTime|Creation Time|6807|5|2359
  36.312 +		ExpireDate|Expiration Date|6808|3|null
  36.313 +		TrackingCode|Tracking Code|6809|5|99
  36.314 +		UserNumber1|User Number 01|6810|4|null
  36.315 +		UserNumber2|User Number 02|6811|4|null
  36.316 +		UserNumber3|User Number 03|6812|4|null
  36.317 +		UserNumber4|User Number 04|6813|4|null
  36.318 +		UserNumber5|User Number 05|6814|4|null
  36.319 +		UserNumber6|User Number 06|6815|4|null
  36.320 +		UserNumber7|User Number 07|6816|4|null
  36.321 +		UserNumber8|User Number 08|6817|4|null
  36.322 +		UserNumber9|User Number 09|6818|4|null
  36.323 +		UserNumber10|User Number 10|6819|4|null
  36.324 +		UserChar1|User Char   01|6820|0|40
  36.325 +		UserChar2|User Char   02|6821|0|40
  36.326 +		UserChar3|User Char   03|6822|0|40
  36.327 +		UserChar4|User Char   04|6823|0|40
  36.328 +		UserChar5|User Char   05|6824|0|40
  36.329 +		UserChar6|User Char   06|6825|0|40
  36.330 +		UserChar7|User Char   07|6826|0|40
  36.331 +		UserChar8|User Char   08|6827|0|40
  36.332 +		UserChar9|User Char   09|6828|0|40
  36.333 +		UserChar10|User Char   10|6829|0|40
  36.334 +		UserAmount1|User Amount 01|6830|7|null
  36.335 +		UserAmount2|User Amount 02|6831|7|null
  36.336 +		UserAmount3|User Amount 03|6832|7|null
  36.337 +		UserAmount4|User Amount 04|6833|7|null
  36.338 +		UserAmount5|User Amount 05|6834|7|null
  36.339 +		UserAmount6|User Amount 06|6835|7|null
  36.340 +		UserAmount7|User Amount 07|6836|7|null
  36.341 +		UserAmount8|User Amount 08|6837|7|null
  36.342 +		UserAmount9|User Amount 09|6838|7|null
  36.343 +		UserAmount10|User Amount 10|6839|7|null
  36.344 +		UserCode1|User Code   01|6840|5|9999
  36.345 +		UserCode2|User Code   02|6841|5|9999
  36.346 +		UserCode3|User Code   03|6842|5|9999
  36.347 +		UserCode4|User Code   04|6843|5|9999
  36.348 +		UserCode5|User Code   05|6844|5|9999
  36.349 +		UserCode6|User Code   06|6845|5|9999
  36.350 +		UserCode7|User Code   07|6846|5|9999
  36.351 +		UserCode8|User Code   08|6847|5|9999
  36.352 +		UserCode9|User Code   09|6848|5|9999
  36.353 +		UserCode10|User Code   10|6849|5|9999
  36.354 +		UserDate1|User Date   01|6850|3|null
  36.355 +		UserDate2|User Date   02|6851|3|null
  36.356 +		UserDate3|User Date   03|6852|3|null
  36.357 +		UserDate4|User Date   04|6853|3|null
  36.358 +		UserDate5|User Date   05|6854|3|null
  36.359 +		UserDate6|User Date   06|6855|3|null
  36.360 +		UserDate7|User Date   07|6856|3|null
  36.361 +		UserDate8|User Date   08|6857|3|null
  36.362 +		UserDate9|User Date   09|6858|3|null
  36.363 +		UserDate10|User Date   10|6859|3|null
  36.364 +		UserRate1|User Rate   01|6860|2|null
  36.365 +		UserRate2|User Rate   02|6861|2|null
  36.366 +		UserRate3|User Rate   03|6862|2|null
  36.367 +		UserRate4|User Rate   04|6863|2|null
  36.368 +		UserRate5|User Rate   05|6864|2|null
  36.369 +		UserRate6|User Rate   06|6865|2|null
  36.370 +		UserRate7|User Rate   07|6866|2|null
  36.371 +		UserRate8|User Rate   08|6867|2|null
  36.372 +		UserRate9|User Rate   09|6868|2|null
  36.373 +		UserRate10|User Rate   10|6869|2|null
  36.374 +		Locator|Locator|6870|4|null
  36.375 +		UserNumber11|User Number 11|6871|4|null
  36.376 +		UserNumber12|User Number 12|6872|4|null
  36.377 +		UserNumber13|User Number 13|6873|4|null
  36.378 +		UserNumber14|User Number 14|6874|4|null
  36.379 +		UserNumber15|User Number 15|6875|4|null
  36.380 +		UserNumber16|User Number 16|6876|4|null
  36.381 +		UserNumber17|User Number 17|6877|4|null
  36.382 +		UserNumber18|User Number 18|6878|4|null
  36.383 +		UserNumber19|User Number 19|6879|4|null
  36.384 +		UserNumber20|User Number 20|6880|4|null
  36.385 +		UserChar11|User Char   11|6881|0|40
  36.386 +		UserChar12|User Char   12|6882|0|40
  36.387 +		UserChar13|User Char   13|6883|0|40
  36.388 +		UserChar14|User Char   14|6884|0|40
  36.389 +		UserChar15|User Char   15|6885|0|40
  36.390 +		UserChar16|User Char   16|6886|0|40
  36.391 +		UserChar17|User Char   17|6887|0|40
  36.392 +		UserChar18|User Char   18|6888|0|40
  36.393 +		UserChar19|User Char   19|6889|0|40
  36.394 +		UserChar20|User Char   20|9400|0|40
  36.395 +		UserAmount11|User Amount 11|9401|7|null
  36.396 +		UserAmount12|User Amount 12|9402|7|null
  36.397 +		UserAmount13|User Amount 13|9403|7|null
  36.398 +		UserAmount14|User Amount 14|9404|7|null
  36.399 +		UserAmount15|User Amount 15|9405|7|null
  36.400 +		UserAmount16|User Amount 16|9406|7|null
  36.401 +		UserAmount17|User Amount 17|9407|7|null
  36.402 +		UserAmount18|User Amount 18|9408|7|null
  36.403 +		UserAmount19|User Amount 19|9409|7|null
  36.404 +		UserAmount20|User Amount 20|9410|7|null
  36.405 +		UserCode11|User Code   11|9411|5|9999
  36.406 +		UserCode12|User Code   12|9412|5|9999
  36.407 +		UserCode13|User Code   13|9413|5|9999
  36.408 +		UserCode14|User Code   14|9414|5|9999
  36.409 +		UserCode15|User Code   15|9415|5|9999
  36.410 +		UserCode16|User Code   16|9416|5|9999
  36.411 +		UserCode17|User Code   17|9417|5|9999
  36.412 +		UserCode18|User Code   18|9418|5|9999
  36.413 +		UserCode19|User Code   19|9419|5|9999
  36.414 +		UserCode20|User Code   20|9420|5|9999
  36.415 +		UserDate11|User Date   11|9421|3|null
  36.416 +		UserDate12|User Date   12|9422|3|null
  36.417 +		UserDate13|User Date   13|9423|3|null
  36.418 +		UserDate14|User Date   14|9424|3|null
  36.419 +		UserDate15|User Date   15|9425|3|null
  36.420 +		UserDate16|User Date   16|9426|3|null
  36.421 +		UserDate17|User Date   17|9427|3|null
  36.422 +		UserDate18|User Date   18|9428|3|null
  36.423 +		UserDate19|User Date   19|9429|3|null
  36.424 +		UserDate20|User Date   20|9430|3|null
  36.425 +		UserRate11|User Rate   11|9431|2|null
  36.426 +		UserRate12|User Rate   12|9432|2|null
  36.427 +		UserRate13|User Rate   13|9433|2|null
  36.428 +		UserRate14|User Rate   14|9434|2|null
  36.429 +		UserRate15|User Rate   15|9435|2|null
  36.430 +		UserRate16|User Rate   16|9436|2|null
  36.431 +		UserRate17|User Rate   17|9437|2|null
  36.432 +		UserRate18|User Rate   18|9438|2|null
  36.433 +		UserRate19|User Rate   19|9439|2|null
  36.434 +		UserRate20|User Rate   20|9440|2|null
  36.435 +	***|Note|Note
  36.436 +		ID|ID|2701|0|2
  36.437 +		IDType|ID Type|2702|5|4
  36.438 +		Code|Note Code|2703|5|199
  36.439 +		Text:1|Text Line 01|2704|0|40
  36.440 +		Text:2|Text Line 02|2704|0|40
  36.441 +		Text:3|Text Line 03|2704|0|40
  36.442 +		Text:4|Text Line 04|2704|0|40
  36.443 +		Text:5|Text Line 05|2704|0|40
  36.444 +		Text:6|Text Line 06|2704|0|40
  36.445 +		Text:7|Text Line 07|2704|0|40
  36.446 +		Text:8|Text Line 08|2704|0|40
  36.447 +		Text:9|Text Line 09|2704|0|40
  36.448 +		Text:10|Text Line 10|2704|0|40
  36.449 +		Text:11|Text Line 11|2704|0|40
  36.450 +		Text:12|Text Line 12|2704|0|40
  36.451 +		UserID|User ID|2705|5|4999
  36.452 +		EnterDate|Enter Date|2706|3|null
  36.453 +		EnterTime|Enter Time|2707|5|2359
  36.454 +		VoidFlag|Voided|2709|5|1
  36.455 +		VoidedBy|Voided By|2710|5|4999
  36.456 +		ExpirationDate|Expiration Date|2711|3|null
  36.457 +		Locator|Locator|2719|4|null
  36.458 +		TextLineCount|Text Line Count|2712|4|null
  36.459 +	***|Share|Share
  36.460 +		ID|Share ID|1001|0|2
  36.461 +		CheckDigits|Check Digits|1002|0|2
  36.462 +		Type|Share Type|1003|5|9999
  36.463 +		LastFMDate|Last FM Date|1004|3|null
  36.464 +		LastTranDate|Last Transaction Date|1005|3|null
  36.465 +		OpenDate|Open Date|1006|3|null
  36.466 +		CloseDate|Close Date|1007|3|null
  36.467 +		Reference|Reference|1008|0|20
  36.468 +		WarningCode:1|Warning 1 Code|1009|5|99
  36.469 +		WarningCode:2|Warning 2 Code|1009|5|99
  36.470 +		WarningCode:3|Warning 3 Code|1009|5|99
  36.471 +		WarningCode:4|Warning 4 Code|1009|5|99
  36.472 +		WarningCode:5|Warning 5 Code|1009|5|99
  36.473 +		WarningCode:6|Warning 6 Code|1009|5|99
  36.474 +		WarningCode:7|Warning 7 Code|1009|5|99
  36.475 +		WarningCode:8|Warning 8 Code|1009|5|99
  36.476 +		Service:1|Service 1|1010|5|99
  36.477 +		Service:2|Service 2|1010|5|99
  36.478 +		Service:3|Service 3|1010|5|99
  36.479 +		Service:4|Service 4|1010|5|99
  36.480 +		Service:5|Service 5|1010|5|99
  36.481 +		Service:6|Service 6|1010|5|99
  36.482 +		Service:7|Service 7|1010|5|99
  36.483 +		Service:8|Service 8|1010|5|99
  36.484 +		ShareCode|Share Code|1011|5|3
  36.485 +		IRSCode|IRS Code|1012|5|15
  36.486 +		DivPostCode|Dividend Post Code|1013|5|3
  36.487 +		LastDivDate|Last Dividend Date|1014|3|null
  36.488 +		LastDivAmount|Last Dividend Amt|1015|7|null
  36.489 +		DivYTD|Dividend YTD|1016|7|null
  36.490 +		DivLastYear|Dividend Last Yr|1017|7|null
  36.491 +		DivFromOpen|Dividend From Open|1018|7|null
  36.492 +		DivType|Dividend Type|1019|5|9999
  36.493 +		DivRate|Dividend Rate|1020|2|null
  36.494 +		DivAccrualdate|Dividend Accrual Date|1021|3|null
  36.495 +		DivAccrual|Dividend Accrual|1022|7|null
  36.496 +		WithholdingCode|Fed Withholding Code|1023|5|1
  36.497 +		WithholdingYTD|Fed Withheld YTD|1024|7|null
  36.498 +		WithholdingLastYear|Fed Withheld Lst Yr|1025|7|null
  36.499 +		PenaltyType|Penalty Type|1026|5|9
  36.500 +		PenaltyYTD|Penalty YTD|1027|7|null
  36.501 +		PenaltyLastYear|Penalty Last Year|1028|7|null
  36.502 +		Balance|Balance|1029|7|null
  36.503 +		OriginalBalance|Original Balance|1030|7|null
  36.504 +		MinimumBalance|Minimum Balance|1031|7|null
  36.505 +		InsuranceType|Insurance Type|1032|5|99
  36.506 +		InsuranceMaximum|Insurance Maximum|1033|7|null
  36.507 +		InsuranceBalanceAge:1|Ins Balance Age 55|1034|7|null
  36.508 +		InsuranceBalanceAge:2|Ins Balance Age 60|1034|7|null
  36.509 +		InsuranceBalanceAge:3|Ins Balance Age 65|1034|7|null
  36.510 +		InsuranceBalanceAge:4|Ins Balance Age 70|1034|7|null
  36.511 +		MinimumDeposit|Minimum Deposit|1035|7|null
  36.512 +		MinimumWithdrawal|Minimum Withdraw|1036|7|null
  36.513 +		WithdrawalLimit|Withdrawal Limit|1037|5|9999
  36.514 +		WithdrawalCount|Withdrawal Count|1038|5|9999
  36.515 +		WithdrawnFromOpen|Withdraw From Open|1039|7|null
  36.516 +		WithdrawalFeetYpe|Withdrawal Fee Type|1040|5|5
  36.517 +		WithdrawalFeeCount|Withdrawal Fee Count|1041|5|9999
  36.518 +		LastPurgeDate|Last Purge Date|1043|3|null
  36.519 +		StatementGroup|Statement Group|1044|5|99
  36.520 +		StatementDate|Statement Date|1045|3|null
  36.521 +		StatementMailCode|Statement Mail Code|1046|5|99
  36.522 +		RegECount|Reg E Count|1047|5|9999
  36.523 +		RegDCheckCount|Reg D Check Count|1048|5|9999
  36.524 +		RegDTransferCount|Reg D Transfer Count|1049|5|9999
  36.525 +		MaturityPostCode|Maturity Post Code|1050|5|3
  36.526 +		MaturityDate|Maturity Date|1051|3|null
  36.527 +		TermFrequency|Term Frequency|1052|5|1
  36.528 +		TermPeriod|Term Period|1053|5|9999
  36.529 +		CertificateNumber|Certificate Number|1054|0|10
  36.530 +		Description|Description|1055|0|30
  36.531 +		LoanPaymentHold|Loan Payment Hold|1056|7|null
  36.532 +		StatementPrevDate|Statement Previous Date|1057|3|null
  36.533 +		BondIntYTD|Bond Interest YTD|1058|7|null
  36.534 +		BondIntLastYear|Bond Int Last Year|1059|7|null
  36.535 +		NSFMonthToDate|NSF Month to Date|1060|5|9999
  36.536 +		NSFYTD|NSF Year to Date|1061|5|9999
  36.537 +		NSFLastYear|NSF Last Year|1062|5|9999
  36.538 +		XfrMonthToDate|XFR Month to Date|1063|5|9999
  36.539 +		XfrYTD|XFR Year to Date|1064|5|9999
  36.540 +		XfrLastYear|XFR Last Year|1065|5|9999
  36.541 +		WarningExpiration:1|Warning 1 Expiration|1066|3|null
  36.542 +		WarningExpiration:2|Warning 2 Expiration|1066|3|null
  36.543 +		WarningExpiration:3|Warning 3 Expiration|1066|3|null
  36.544 +		WarningExpiration:4|Warning 4 Expiration|1066|3|null
  36.545 +		WarningExpiration:5|Warning 5 Expiration|1066|3|null
  36.546 +		WarningExpiration:6|Warning 6 Expiration|1066|3|null
  36.547 +		WarningExpiration:7|Warning 7 Expiration|1066|3|null
  36.548 +		WarningExpiration:8|Warning 8 Expiration|1066|3|null
  36.549 +		FeeCount:1|Fee Count 1|1067|5|9999
  36.550 +		FeeCount:2|Fee Count 2|1067|5|9999
  36.551 +		FeeCount:3|Fee Count 3|1067|5|9999
  36.552 +		FeeCount:4|Fee Count 4|1067|5|9999
  36.553 +		StateWithholdingCode|State Withholding Code|1068|5|1
  36.554 +		StateWithholdingYTD|State Withheld YTD|1069|7|null
  36.555 +		StateWithholdingLastYear|State Withheld Lst Yr|1070|7|null
  36.556 +		CUTotalsUseCode|CU Totals Code|1071|5|1
  36.557 +		DivPeriodStart|Dividend Period Start|1072|3|null
  36.558 +		DivPeriodBaldAys|Div BalDays|1073|7|null
  36.559 +		ChargeOffAmount|Charge-off Amount|1074|7|null
  36.560 +		ChargeOffDate|Charge-off Date|1075|3|null
  36.561 +		ChargeOffType|Charge-off Type|1076|5|99
  36.562 +		CreditReportingCode|Credit Reporting Code|1077|5|99
  36.563 +		CreditReportNumber|Credit Report Number|1078|0|17
  36.564 +		Branch|Branch|1079|5|9999
  36.565 +		CreditReportOccurDate|Credit Report Occurrence|1080|3|null
  36.566 +		CreditReportLastsTatus|Credit Report Last Status|1081|5|99
  36.567 +		CreditReportComment|Credit Report Comment|1082|0|2
  36.568 +		BumpRate|Bump Rate|1083|2|null
  36.569 +		BumpEffectiveDate|Bump Effective Date|1084|3|null
  36.570 +		BumpExpirationDate|Bump Expiration Date|1085|3|null
  36.571 +		IRSPlan|IRS Plan|1086|5|99
  36.572 +		OriginalDepositDate|Original Deposit Date|1087|3|null
  36.573 +		OriginalDeposit|Original Deposit|1088|7|null
  36.574 +		CreditReportConsumerInfo|Credit Report Consumer Info|1089|0|2
  36.575 +		CreditReportCompliance|Credit Report Compliance Info|1090|0|2
  36.576 +		ActivityDate|Activity Date|1091|3|null
  36.577 +		CourtesyPayMonthToDate|Courtesy Pay Month to Date|1092|5|9999
  36.578 +		CourtesyPayYTD|Courtesy Pay Year to Date|1093|5|9999
  36.579 +		CourtesyPayLastYear|Courtesy Pay Last Year|1094|5|9999
  36.580 +		OverdraftTolerance|Overdraft Tolerance|1095|7|null
  36.581 +		CDDivAccrytd|Cert Accrual YTD|1096|7|null
  36.582 +		CDDivAccrlastyr|Cert Accrual Last Yr|1097|7|null
  36.583 +		AmortizationSchd|Amortization Schedule|1098|5|9999
  36.584 +		AmortizationSchdType|Amortize Schd Type|1099|5|1
  36.585 +		DividendRateMarginsIgn|Dividend Rate Margin Sign|1100|5|1
  36.586 +		DividendRatePeriodDate|Periodic Cap Start Date|1101|3|null
  36.587 +		DividendRatePeriodFREQ|Periodic Cap Frequency|1102|5|1
  36.588 +		DividendRateMargin|Dividend Rate Margin|1103|10|null
  36.589 +		DividendRateMax|Dividend Rate Maximum|1104|10|null
  36.590 +		DividendRateMin|Dividend Rate Minimum|1105|10|null
  36.591 +		PeriodicCap|Periodic Cap|1106|10|null
  36.592 +		PeriodicStartRate|Periodic Cap Start Rt|1107|10|null
  36.593 +		CallItemsChd|Call Item Schedule|1108|5|9999
  36.594 +		CallItemsChdType|Call Item Schd Type|1109|5|1
  36.595 +		MemberUserTransferCode|Member User Transfer Code|1110|5|9999
  36.596 +		CorporateUserTransferCode|Corporate User Transfer Code|1111|5|9999
  36.597 +		MemberBranchSupport|Member Branch Support|1112|5|1
  36.598 +		MCDivYTD|Mat Cert Div YTD|1113|7|null
  36.599 +		MCDivLastYear|Mat Cert Div Last Yr|1114|7|null
  36.600 +		UserChar1|Seller|1115|0|40
  36.601 +		UserChar2|Reason for Rate Override|1116|0|40
  36.602 +		UserChar3|User Char   03|1117|0|40
  36.603 +		UserChar4|User Char   04|1118|0|40
  36.604 +		UserAmount1|User Amount 01|1119|7|null
  36.605 +		UserAmount2|User Amount 02|1120|7|null
  36.606 +		UserDate1|Negative Date|1121|3|null
  36.607 +		UserDate2|User Date   02|1122|3|null
  36.608 +		PutItemsChd|Put Item Schedule|1123|5|9999
  36.609 +		PutItemsChdType|Put Item Schd Type|1124|5|1
  36.610 +		LedgerAccrual|Ledger Accrual|1125|7|null
  36.611 +		LedgerAccrualdate|Ledger Accrual Date|1126|3|null
  36.612 +		CurrDivPayable|Current Div Payable|1127|7|null
  36.613 +		CurrMonthPaidDiv|Current Mth Paid Div|1136|7|null
  36.614 +		MTDPaidDivs|MTD Paid Dividends|1128|7|null
  36.615 +		MTDAccruedDivs|MTD Accrued Div|1130|7|null
  36.616 +		MTDEarnedDivs|MTD Earned Div|1129|7|null
  36.617 +		PreMthDivPaid:1|01  Mth Pre Div Paid|1133|7|null
  36.618 +		PreMthDivPaid:2|02  Mth Pre Div Paid|1133|7|null
  36.619 +		PreMthDivPaid:3|03  Mth Pre Div Paid|1133|7|null
  36.620 +		PreMthDivAccrued:1|01  Mth Pre Div Accr|1132|7|null
  36.621 +		PreMthDivAccrued:2|02  Mth Pre Div Accr|1132|7|null
  36.622 +		PreMthDivAccrued:3|03  Mth Pre Div Accr|1132|7|null
  36.623 +		PreMthDivEarned:1|01 Mth Pre Div Earned|1131|7|null
  36.624 +		PreMthDivEarned:2|02 Mth Pre Div Earned|1131|7|null
  36.625 +		PreMthDivEarned:3|03 Mth Pre Div Earned|1131|7|null
  36.626 +		PreMthDivEarned:4|04 Mth Pre Div Earned|1131|7|null
  36.627 +		PreMthDivEarned:5|05 Mth Pre Div Earned|1131|7|null
  36.628 +		PreMthDivEarned:6|06 Mth Pre Div Earned|1131|7|null
  36.629 +		PreMthDivEarned:7|07 Mth Pre Div Earned|1131|7|null
  36.630 +		PreMthDivEarned:8|08 Mth Pre Div Earned|1131|7|null
  36.631 +		PreMthDivEarned:9|09 Mth Pre Div Earned|1131|7|null
  36.632 +		PreMthDivEarned:10|10 Mth Pre Div Earned|1131|7|null
  36.633 +		PreMthDivEarned:11|11 Mth Pre Div Earned|1131|7|null
  36.634 +		PreMthDivEarned:12|12 Mth Pre Div Earned|1131|7|null
  36.635 +		MTDPriorRateAccrual|MTD Prior Rate Accr|1135|7|null
  36.636 +		LastAccrualupdatedate|Last Accr Updt Date|1134|3|null
  36.637 +		MICRAcctNumber|MICR Account Number|1137|0|20
  36.638 +		UnpaidFeeYTD|Unpaid Item Fee YTD|1138|7|null
  36.639 +		UnpaidFeeLastYear|Unpaid Item Fee Lst Yr|1139|7|null
  36.640 +		OverdraftFeeYTD|OD Item Fee YTD|1140|7|null
  36.641 +		OverdraftFeeLastYr|OD Item Fee Last Year|1141|7|null
  36.642 +		AvailableBalance|Available Balance|1280|7|null
  36.643 +		***|Share Hold|Share Hold
  36.644 +			Type|Hold Type|501|5|19
  36.645 +			EffectiveDate|Effective Date|502|3|null
  36.646 +			ExpirationDate|Expiration Date|503|3|null
  36.647 +			Reference1|Reference 1|504|0|10
  36.648 +			Reference2|Reference 2|505|0|10
  36.649 +			Amount|Hold Amount|506|7|null
  36.650 +			PayeeName|Payee Name|507|0|16
  36.651 +			ExpirationTime|Expiration Time|508|5|2359
  36.652 +			Locator|Locator|509|4|null
  36.653 +			MemberBranch|Member Branch|510|0|4
  36.654 +			StopPayCode|Stop Reason Code|511|5|99
  36.655 +			Reference3|Reference 3|512|0|40
  36.656 +			Reference4|Reference 4|513|0|40
  36.657 +			MatchDate|Match Date|514|3|null
  36.658 +			MatchTime|Match Time|515|5|2359
  36.659 +			FeeCode|Fee Code|516|5|9999
  36.660 +			FeeDescription|Fee Description|580|1|40
  36.661 +		***|Share Name|Share Name
  36.662 +			Type|Name Type|101|5|53
  36.663 +			SubType|Name SubType|102|5|99
  36.664 +			MailOverride|Mail Override|103|5|1
  36.665 +			SSNOverride|SSN/TIN Override|104|5|3
  36.666 +			SSNCertification|SSN/TIN Certification|105|5|2
  36.667 +			SSNType|SSN/TIN Type|106|5|9
  36.668 +			EffectiveDate|Effective  Date|107|3|null
  36.669 +			ExpirationDate|Expiration Date|108|3|null
  36.670 +			BirthDate|Birth Date|109|3|null
  36.671 +			Title|Title|110|0|8
  36.672 +			First|First Name|111|0|20
  36.673 +			Middle|Middle Name|112|0|10
  36.674 +			Last|Last Name|113|0|40
  36.675 +			Suffix|Suffix|114|0|4
  36.676 +			ExtraAddress|Extra Address|115|0|40
  36.677 +			Street|Street|116|0|40
  36.678 +			City|City|117|0|40
  36.679 +			State|State|118|0|10
  36.680 +			ZipCode|Zip Code|119|0|10
  36.681 +			HomePhone|Home Phone|120|0|16
  36.682 +			SSN|SSN/TIN|121|0|9
  36.683 +			WorkPhone|Work Phone|122|0|16
  36.684 +			LastFMDate|Last FM Date|123|3|null
  36.685 +			CarrierRoute|Carrier Route|124|0|4
  36.686 +			AddressType|Address Type|125|5|2
  36.687 +			BeneficiaryPercent|Beneficiary Percent|126|2|null
  36.688 +			IRSCorrection|IRS Correction|127|5|1
  36.689 +			WorkPhoneExtension|Work Phone Ext|128|0|6
  36.690 +			DeathDate|Death Date|130|3|null
  36.691 +			ECOACode|ECOA Code|131|5|11
  36.692 +			Country|Country|132|0|20
  36.693 +			CountryCode|Country Code|133|0|2
  36.694 +			Email|E-Mail Address|134|0|40
  36.695 +			MothersMaidenName|Mother's Maiden Name|135|0|20
  36.696 +			EmployerName|Current Employer|136|0|40
  36.697 +			AltEmail|Alt E-Mail Address|137|0|40
  36.698 +			Locator|Locator|138|4|null
  36.699 +			MobilePhone|Mobile Phone|139|0|16
  36.700 +			PagerNumber|Pager Number|140|0|16
  36.701 +			USPersonFlag|U.S. Person Flag|141|5|1
  36.702 +			IdentDocFlag:1|Documentary Flag 1|142|5|1
  36.703 +			IdentDocFlag:2|Documentary Flag 2|142|5|1
  36.704 +			IdentDocFlag:3|Documentary Flag 3|142|5|1
  36.705 +			IdentIDType:1|ID Type 1|143|5|999
  36.706 +			IdentIDType:2|ID Type 2|143|5|999
  36.707 +			IdentIDType:3|ID Type 3|143|5|999
  36.708 +			IdentIDDescription:1|ID Description 1|144|0|40
  36.709 +			IdentIDDescription:2|ID Description 2|144|0|40
  36.710 +			IdentIDDescription:3|ID Description 3|144|0|40
  36.711 +			IdentIDNumber:1|ID Number 1|145|0|40
  36.712 +			IdentIDNumber:2|ID Number 2|145|0|40
  36.713 +			IdentIDNumber:3|ID Number 3|145|0|40
  36.714 +			IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
  36.715 +			IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
  36.716 +			IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
  36.717 +			IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
  36.718 +			IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
  36.719 +			IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
  36.720 +			IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
  36.721 +			IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
  36.722 +			IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
  36.723 +			Occupation|Occupation|149|0|20
  36.724 +			UserChar1|User Char   01|150|0|40
  36.725 +			UserChar2|User Char   02|151|0|40
  36.726 +			UserChar3|User Char   03|152|0|40
  36.727 +			UserChar4|User Char   04|153|0|40
  36.728 +			UserAmount1|User Amount 01|154|7|null
  36.729 +			UserAmount2|User Amount 02|155|7|null
  36.730 +			UserDate1|User Date   01|156|3|null
  36.731 +			UserDate2|User Date   02|157|3|null
  36.732 +			LastAddrChgDate|Address Change Date|158|3|null
  36.733 +			LastAddrVerifDate|Address Verify Date|159|3|null
  36.734 +			CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
  36.735 +			ShortName|Short Name|180|0|16
  36.736 +			LongName|Long Name|181|1|40
  36.737 +			License|License|129|0|20
  36.738 +		***|Share Transfer|Share Transfer
  36.739 +			Type|Transfer Type|901|5|8
  36.740 +			AccountNumber|Account|902|0|10
  36.741 +			IDType|ID Type|903|5|2
  36.742 +			ID|ID|904|0|2
  36.743 +			Amount|Amount|905|7|null
  36.744 +			Percent|Percent|906|2|null
  36.745 +			EffectiveDate|Effective  Date|907|3|null
  36.746 +			ExpirationDate|Expiration Date|908|3|null
  36.747 +			AmountOption|Amount Option|909|5|5
  36.748 +			NextDate|Next Transfer Date|910|3|null
  36.749 +			Frequency|Transfer Frequency|911|5|14
  36.750 +			Day1|Transfer Day 1|912|5|31
  36.751 +			Day2|Transfer Day 2|913|5|31
  36.752 +			Locator|Locator|914|4|null
  36.753 +			MinimumBalance|Minimum Balance|915|7|null
  36.754 +			MaximumBalance|Maximum Balance|916|7|null
  36.755 +			RegE|Reg E|917|5|1
  36.756 +			LastDate|Last Transfer Date|918|3|null
  36.757 +			PaymentType|Transfer Payment Type|919|5|1
  36.758 +			SweepMinimum|Sweep Minimum|920|7|null
  36.759 +		***|Share CheckOrder|Share Check Order
  36.760 +			Processor|Processor|6501|5|3
  36.761 +			Status|Status|6502|5|6
  36.762 +			OpenDate|Open Date|6503|3|null
  36.763 +			LastOrderDate|Last Order Date|6504|3|null
  36.764 +			StatusDate|Status Date|6505|3|null
  36.765 +			LastFMDate|Last FM Date|6506|3|null
  36.766 +			CheckType|Check Type|6507|5|1
  36.767 +			Branch|Branch|6508|5|9999
  36.768 +			StartNumber|Starting Number|6509|4|null
  36.769 +			Quantity|Quantity|6510|4|null
  36.770 +			ChecksTyle|Check Style|6511|0|12
  36.771 +			CoversTyle|Cover Style|6512|0|8
  36.772 +			CutNumber|Cut Style|6513|0|8
  36.773 +			BillingCode|Billing Code|6514|5|9
  36.774 +			ShipMethod|Shipping Method|6515|5|13
  36.775 +			ShipTo|Ship To|6516|5|4
  36.776 +			ImprintFont|Imprint Font Style|6517|5|8
  36.777 +			ImprintJustify|Imprint Justification|6518|5|2
  36.778 +			ImprintLine:1|Imprint Line 1|6519|0|40
  36.779 +			ImprintLine:2|Imprint Line 2|6519|0|40
  36.780 +			ImprintLine:3|Imprint Line 3|6519|0|40
  36.781 +			ImprintLine:4|Imprint Line 4|6519|0|40
  36.782 +			ImprintLine:5|Imprint Line 5|6519|0|40
  36.783 +			ImprintLine:6|Imprint Line 6|6519|0|40
  36.784 +			ImprintPhone|Imprint Phone|6520|0|12
  36.785 +			ImprintZipCode|Imprint Zip Code|6521|0|10
  36.786 +			MailAddress:1|Mailing Address 1|6522|0|40
  36.787 +			MailAddress:2|Mailing Address 2|6522|0|40
  36.788 +			MailAddress:3|Mailing Address 3|6522|0|40
  36.789 +			MailAddress:4|Mailing Address 4|6522|0|40
  36.790 +			MailAddress:5|Mailing Address 5|6522|0|40
  36.791 +			MailAddress:6|Mailing Address 6|6522|0|40
  36.792 +			MailZipCode|Mailing Zip Code|6523|0|10
  36.793 +			OverSigLine:1|Over Signature Line 1|6524|0|40
  36.794 +			OverSigLine:2|Over Signature Line 2|6524|0|40
  36.795 +			OverSigFont|Over Signature Font Style|6525|5|8
  36.796 +			NumberSigLineS|Number of Signature Lines|6526|5|3
  36.797 +			CoverInitials|Cover Initials|6527|0|3
  36.798 +			SpecialInstR:1|Special Instructions 1|6528|0|25
  36.799 +			SpecialInstR:2|Special Instructions 2|6528|0|25
  36.800 +			SpecialInstR:3|Special Instructions 3|6528|0|25
  36.801 +			SpecialInstR:4|Special Instructions 4|6528|0|25
  36.802 +			SpecialInstR:5|Special Instructions 5|6528|0|25
  36.803 +			SpecialInstR:6|Special Instructions 6|6528|0|25
  36.804 +			SpecialInstR:7|Special Instructions 7|6528|0|25
  36.805 +			SpecialInstR:8|Special Instructions 8|6528|0|25
  36.806 +			SSN:1|Imprint SSN/TIN 1|6529|0|9
  36.807 +			SSN:2|Imprint SSN/TIN 2|6529|0|9
  36.808 +			License:1|Imprint License 1|6530|0|25
  36.809 +			License:2|Imprint License 2|6530|0|25
  36.810 +			Binding|Binding Mnemonic|6531|0|6
  36.811 +			Design|Design Mnemonic|6532|0|8
  36.812 +			BusinessSerial|Business Serial Letters|6533|0|3
  36.813 +			BusNumCopies|Business Number of Copies|6534|5|4
  36.814 +			BusBindingsTyle|Business Binding Style|6535|5|11
  36.815 +			BusVoucherNumber|Business Voucher Number|6536|0|6
  36.816 +			BusCaptions:1|Business Caption 1|6537|0|2
  36.817 +			BusCaptions:2|Business Caption 2|6537|0|2
  36.818 +			BusCaptions:3|Business Caption 3|6537|0|2
  36.819 +			BusCaptions:4|Business Caption 4|6537|0|2
  36.820 +			BusCaptions:5|Business Caption 5|6537|0|2
  36.821 +			BusCaptions:6|Business Caption 6|6537|0|2
  36.822 +			BusCaptions:7|Business Caption 7|6537|0|2
  36.823 +			BusCaptions:8|Business Caption 8|6537|0|2
  36.824 +			PromoNumber|Promo Number|6538|0|4
  36.825 +			AcctAddrInkColor|Account/Address Ink Color|6539|5|7
  36.826 +			TitleInkColor|Titleplate Ink Color|6540|5|7
  36.827 +			CutInkColor|Cut Ink Color|6541|5|7
  36.828 +			TaxExemptCode|Tax Exempt Code|6542|5|1
  36.829 +			RerunReason|Rerun Reason|6543|5|5
  36.830 +			ImprintLineSize:1|Imprint Line 1 Size|6544|5|1
  36.831 +			ImprintLineSize:2|Imprint Line 2 Size|6544|5|1
  36.832 +			ImprintLineSize:3|Imprint Line 3 Size|6544|5|1
  36.833 +			ImprintLineSize:4|Imprint Line 4 Size|6544|5|1
  36.834 +			ImprintLineSize:5|Imprint Line 5 Size|6544|5|1
  36.835 +			ImprintLineSize:6|Imprint Line 6 Size|6544|5|1
  36.836 +			OverSigJustify|Over Signature Justification|6545|5|2
  36.837 +			OverSigLineSize|Over Signature Line Size|6546|5|1
  36.838 +			PONumber|Purchase Order|6547|0|10
  36.839 +			ChargeShipping|Charge Shipping To|6548|5|1
  36.840 +			ImprintUsage:1|Imprint Line 1 Usage|6549|5|1
  36.841 +			ImprintUsage:2|Imprint Line 2 Usage|6549|5|1
  36.842 +			ImprintUsage:3|Imprint Line 3 Usage|6549|5|1
  36.843 +			ImprintUsage:4|Imprint Line 4 Usage|6549|5|1
  36.844 +			ImprintUsage:5|Imprint Line 5 Usage|6549|5|1
  36.845 +			ImprintUsage:6|Imprint Line 6 Usage|6549|5|1
  36.846 +			Accent|Accent Figure|6550|0|5
  36.847 +			Phantom|Phantom Figure|6551|0|5
  36.848 +			SigFigure|Signature Figure|6552|0|5
  36.849 +			CheckInitials|Check Initials|6553|0|3
  36.850 +			ImprintCity|Imprint City|6554|0|30
  36.851 +			ImprintState|Imprint State|6555|0|2
  36.852 +			MailCity|Mailing City|6556|0|30
  36.853 +			MailState|Mailing State|6557|0|2
  36.854 +			MICRLine|MICR Line|6558|0|20
  36.855 +			UserID|User ID|6559|5|4999
  36.856 +			LastFreeOrder|Last Free Order|6560|3|null
  36.857 +			Locator|Locator|6561|4|null
  36.858 +		***|Share Tracking|Share Tracking
  36.859 +			Type|Tracking Type|6891|5|99
  36.860 +			ID|ID|6802|0|2
  36.861 +			IDType|ID Type|6803|5|4
  36.862 +			UserID|User ID|6804|5|4999
  36.863 +			FMLastDate|Last FM Date|6805|3|null
  36.864 +			CreationDate|Creation Date|6806|3|null
  36.865 +			CreationTime|Creation Time|6807|5|2359
  36.866 +			ExpireDate|Expiration Date|6808|3|null
  36.867 +			TrackingCode|Tracking Code|6809|5|99
  36.868 +			UserNumber1|User Number 01|6810|4|null
  36.869 +			UserNumber2|User Number 02|6811|4|null
  36.870 +			UserNumber3|User Number 03|6812|4|null
  36.871 +			UserNumber4|User Number 04|6813|4|null
  36.872 +			UserNumber5|User Number 05|6814|4|null
  36.873 +			UserNumber6|User Number 06|6815|4|null
  36.874 +			UserNumber7|User Number 07|6816|4|null
  36.875 +			UserNumber8|User Number 08|6817|4|null
  36.876 +			UserNumber9|User Number 09|6818|4|null
  36.877 +			UserNumber10|User Number 10|6819|4|null
  36.878 +			UserChar1|User Char   01|6820|0|40
  36.879 +			UserChar2|User Char   02|6821|0|40
  36.880 +			UserChar3|User Char   03|6822|0|40
  36.881 +			UserChar4|User Char   04|6823|0|40
  36.882 +			UserChar5|User Char   05|6824|0|40
  36.883 +			UserChar6|User Char   06|6825|0|40
  36.884 +			UserChar7|User Char   07|6826|0|40
  36.885 +			UserChar8|User Char   08|6827|0|40
  36.886 +			UserChar9|User Char   09|6828|0|40
  36.887 +			UserChar10|User Char   10|6829|0|40
  36.888 +			UserAmount1|User Amount 01|6830|7|null
  36.889 +			UserAmount2|User Amount 02|6831|7|null
  36.890 +			UserAmount3|User Amount 03|6832|7|null
  36.891 +			UserAmount4|User Amount 04|6833|7|null
  36.892 +			UserAmount5|User Amount 05|6834|7|null
  36.893 +			UserAmount6|User Amount 06|6835|7|null
  36.894 +			UserAmount7|User Amount 07|6836|7|null
  36.895 +			UserAmount8|User Amount 08|6837|7|null
  36.896 +			UserAmount9|User Amount 09|6838|7|null
  36.897 +			UserAmount10|User Amount 10|6839|7|null
  36.898 +			UserCode1|User Code   01|6840|5|9999
  36.899 +			UserCode2|User Code   02|6841|5|9999
  36.900 +			UserCode3|User Code   03|6842|5|9999
  36.901 +			UserCode4|User Code   04|6843|5|9999
  36.902 +			UserCode5|User Code   05|6844|5|9999
  36.903 +			UserCode6|User Code   06|6845|5|9999
  36.904 +			UserCode7|User Code   07|6846|5|9999
  36.905 +			UserCode8|User Code   08|6847|5|9999
  36.906 +			UserCode9|User Code   09|6848|5|9999
  36.907 +			UserCode10|User Code   10|6849|5|9999
  36.908 +			UserDate1|User Date   01|6850|3|null
  36.909 +			UserDate2|User Date   02|6851|3|null
  36.910 +			UserDate3|User Date   03|6852|3|null
  36.911 +			UserDate4|User Date   04|6853|3|null
  36.912 +			UserDate5|User Date   05|6854|3|null
  36.913 +			UserDate6|User Date   06|6855|3|null
  36.914 +			UserDate7|User Date   07|6856|3|null
  36.915 +			UserDate8|User Date   08|6857|3|null
  36.916 +			UserDate9|User Date   09|6858|3|null
  36.917 +			UserDate10|User Date   10|6859|3|null
  36.918 +			UserRate1|User Rate   01|6860|2|null
  36.919 +			UserRate2|User Rate   02|6861|2|null
  36.920 +			UserRate3|User Rate   03|6862|2|null
  36.921 +			UserRate4|User Rate   04|6863|2|null
  36.922 +			UserRate5|User Rate   05|6864|2|null
  36.923 +			UserRate6|User Rate   06|6865|2|null
  36.924 +			UserRate7|User Rate   07|6866|2|null
  36.925 +			UserRate8|User Rate   08|6867|2|null
  36.926 +			UserRate9|User Rate   09|6868|2|null
  36.927 +			UserRate10|User Rate   10|6869|2|null
  36.928 +			Locator|Locator|6870|4|null
  36.929 +			UserNumber11|User Number 11|6871|4|null
  36.930 +			UserNumber12|User Number 12|6872|4|null
  36.931 +			UserNumber13|User Number 13|6873|4|null
  36.932 +			UserNumber14|User Number 14|6874|4|null
  36.933 +			UserNumber15|User Number 15|6875|4|null
  36.934 +			UserNumber16|User Number 16|6876|4|null
  36.935 +			UserNumber17|User Number 17|6877|4|null
  36.936 +			UserNumber18|User Number 18|6878|4|null
  36.937 +			UserNumber19|User Number 19|6879|4|null
  36.938 +			UserNumber20|User Number 20|6880|4|null
  36.939 +			UserChar11|User Char   11|6881|0|40
  36.940 +			UserChar12|User Char   12|6882|0|40
  36.941 +			UserChar13|User Char   13|6883|0|40
  36.942 +			UserChar14|User Char   14|6884|0|40
  36.943 +			UserChar15|User Char   15|6885|0|40
  36.944 +			UserChar16|User Char   16|6886|0|40
  36.945 +			UserChar17|User Char   17|6887|0|40
  36.946 +			UserChar18|User Char   18|6888|0|40
  36.947 +			UserChar19|User Char   19|6889|0|40
  36.948 +			UserChar20|User Char   20|9400|0|40
  36.949 +			UserAmount11|User Amount 11|9401|7|null
  36.950 +			UserAmount12|User Amount 12|9402|7|null
  36.951 +			UserAmount13|User Amount 13|9403|7|null
  36.952 +			UserAmount14|User Amount 14|9404|7|null
  36.953 +			UserAmount15|User Amount 15|9405|7|null
  36.954 +			UserAmount16|User Amount 16|9406|7|null
  36.955 +			UserAmount17|User Amount 17|9407|7|null
  36.956 +			UserAmount18|User Amount 18|9408|7|null
  36.957 +			UserAmount19|User Amount 19|9409|7|null
  36.958 +			UserAmount20|User Amount 20|9410|7|null
  36.959 +			UserCode11|User Code   11|9411|5|9999
  36.960 +			UserCode12|User Code   12|9412|5|9999
  36.961 +			UserCode13|User Code   13|9413|5|9999
  36.962 +			UserCode14|User Code   14|9414|5|9999
  36.963 +			UserCode15|User Code   15|9415|5|9999
  36.964 +			UserCode16|User Code   16|9416|5|9999
  36.965 +			UserCode17|User Code   17|9417|5|9999
  36.966 +			UserCode18|User Code   18|9418|5|9999
  36.967 +			UserCode19|User Code   19|9419|5|9999
  36.968 +			UserCode20|User Code   20|9420|5|9999
  36.969 +			UserDate11|User Date   11|9421|3|null
  36.970 +			UserDate12|User Date   12|9422|3|null
  36.971 +			UserDate13|User Date   13|9423|3|null
  36.972 +			UserDate14|User Date   14|9424|3|null
  36.973 +			UserDate15|User Date   15|9425|3|null
  36.974 +			UserDate16|User Date   16|9426|3|null
  36.975 +			UserDate17|User Date   17|9427|3|null
  36.976 +			UserDate18|User Date   18|9428|3|null
  36.977 +			UserDate19|User Date   19|9429|3|null
  36.978 +			UserDate20|User Date   20|9430|3|null
  36.979 +			UserRate11|User Rate   11|9431|2|null
  36.980 +			UserRate12|User Rate   12|9432|2|null
  36.981 +			UserRate13|User Rate   13|9433|2|null
  36.982 +			UserRate14|User Rate   14|9434|2|null
  36.983 +			UserRate15|User Rate   15|9435|2|null
  36.984 +			UserRate16|User Rate   16|9436|2|null
  36.985 +			UserRate17|User Rate   17|9437|2|null
  36.986 +			UserRate18|User Rate   18|9438|2|null
  36.987 +			UserRate19|User Rate   19|9439|2|null
  36.988 +			UserRate20|User Rate   20|9440|2|null
  36.989 +		***|Share Note|Share Note
  36.990 +			ID|ID|2701|0|2
  36.991 +			IDType|ID Type|2702|5|4
  36.992 +			Code|Note Code|2713|5|199
  36.993 +			Text:1|Text Line 01|2704|0|40
  36.994 +			Text:2|Text Line 02|2704|0|40
  36.995 +			Text:3|Text Line 03|2704|0|40
  36.996 +			Text:4|Text Line 04|2704|0|40
  36.997 +			Text:5|Text Line 05|2704|0|40
  36.998 +			Text:6|Text Line 06|2704|0|40
  36.999 +			Text:7|Text Line 07|2704|0|40
 36.1000 +			Text:8|Text Line 08|2704|0|40
 36.1001 +			Text:9|Text Line 09|2704|0|40
 36.1002 +			Text:10|Text Line 10|2704|0|40
 36.1003 +			Text:11|Text Line 11|2704|0|40
 36.1004 +			Text:12|Text Line 12|2704|0|40
 36.1005 +			UserID|User ID|2705|5|4999
 36.1006 +			EnterDate|Enter Date|2706|3|null
 36.1007 +			EnterTime|Enter Time|2707|5|2359
 36.1008 +			VoidFlag|Voided|2709|5|1
 36.1009 +			VoidedBy|Voided By|2710|5|4999
 36.1010 +			ExpirationDate|Expiration Date|2711|3|null
 36.1011 +			Locator|Locator|2719|4|null
 36.1012 +			TextLineCount|Text Line Count|2712|4|null
 36.1013 +		***|Share Transaction|Share Transaction
 36.1014 +			AccountNumber|Account Number|0|0|10
 36.1015 +			ID|ID|0|0|2
 36.1016 +			IDType|ID Type|0|5|1
 36.1017 +			CommentCode|Comment Code|0|5|1
 36.1018 +			TransferCode|Transfer Code|0|5|1
 36.1019 +			AdjustmentCode|Adjustment Code|0|5|1
 36.1020 +			RegECode|Reg E Code|0|5|1
 36.1021 +			RegDCheckCode|Reg D Check Code|0|5|1
 36.1022 +			RegDTransferCode|Reg D Transfer Code|0|5|1
 36.1023 +			VoidCode|Void Code|0|5|1
 36.1024 +			SubActionCode|Sub Action Code|0|0|1
 36.1025 +			SequenceNumber|Sequence Number|0|4|null
 36.1026 +			EffectiveDate|Effective Date|0|3|null
 36.1027 +			PostDate|Post Date|0|3|null
 36.1028 +			PostTime|Post Time|0|5|2359
 36.1029 +			UserNumber|User Number|0|5|4999
 36.1030 +			UserOverride|User Override|0|5|4999
 36.1031 +			SecurityLevels|Security Levels|0|5|9999
 36.1032 +			Description|Description|0|0|16
 36.1033 +			ActionCode|Action Code|0|0|1
 36.1034 +			SourceCode|Source Code|0|0|1
 36.1035 +			BalanceChange|Balance Change|0|7|null
 36.1036 +			Interest|Interest/Penalty|0|7|null
 36.1037 +			NewBalance|New Balance|0|7|null
 36.1038 +			FeeAmount|Fee Amount|0|7|null
 36.1039 +			EscrowAmount|Escrow Amount|0|7|null
 36.1040 +			LastTranDate|Last Tran Date|0|3|null
 36.1041 +			MaturityLoanDueDate|Maturity/Loan Due Date|0|3|null
 36.1042 +			Comment|Comment|0|0|42
 36.1043 +			Branch|Branch|0|5|9999
 36.1044 +			ConsoleNumber|Console Number|0|5|9999
 36.1045 +			BatchSequence|Batch Sequence|0|4|null
 36.1046 +			SalesTaxAmount|Sales Tax Amount|0|7|null
 36.1047 +			ActivityDate|Activity Date|0|3|null
 36.1048 +			BilledFeeAmount|Billed Fee Amount|0|7|null
 36.1049 +			ProcessorUser|Processor User|0|5|32767
 36.1050 +			MemberBranch|Member Branch|0|0|4
 36.1051 +			PrevAvailBalance|Prev Available Balance|0|7|null
 36.1052 +			SubSource|Sub Source Code|0|5|9999
 36.1053 +			SubSourceDescr|Sub Source Description|2460|1|40
 36.1054 +		***|Share Analysis|Share Analysis
 36.1055 +			Plan|Analysis Plan|9301|5|99
 36.1056 +			StatementDate|Statement Date|9302|3|null
 36.1057 +			StatementPrevDate|Statement Prev Date|9303|3|null
 36.1058 +			StatementGroup|Statement Group|9304|5|99
 36.1059 +			Locator|Locator|9305|4|null
 36.1060 +			Counter:1|Deposit Count|9306|5|32767
 36.1061 +			Counter:2|Dep Correction Count|9306|5|32767
 36.1062 +			Counter:3|Returned Deposit Count|9306|5|32767
 36.1063 +			Counter:4|Draft Count|9306|5|32767
 36.1064 +			Counter:5|Bulk Count|9306|5|32767
 36.1065 +			Counter:6|Change Order Count|9306|5|32767
 36.1066 +			Counter:7|NSF Count|9306|5|32767
 36.1067 +			Counter:8|Sweep Count|9306|5|32767
 36.1068 +			Counter:9|Stop Payment Count|9306|5|32767
 36.1069 +			Counter:10|Account Printout Count|9306|5|32767
 36.1070 +			Counter:11|Stmt Balancing Count|9306|5|32767
 36.1071 +			Counter:12|Statement Copy Count|9306|5|32767
 36.1072 +			Counter:13|Check Copy Count|9306|5|32767
 36.1073 +			Counter:14|Primary Check Count|9306|5|32767
 36.1074 +			Counter:15|Secondary Check Count|9306|5|32767
 36.1075 +			Counter:16|Money Order Count|9306|5|32767
 36.1076 +			Counter:17|Wire Xfer In Count|9306|5|32767
 36.1077 +			Counter:18|Wire Xfer Out Count|9306|5|32767
 36.1078 +			Counter:19|Overdraft Xfer Count|9306|5|32767
 36.1079 +			Counter:20|Courtesy Pay Count|9306|5|32767
 36.1080 +			Counter:21|ACH Debit Count|9306|5|32767
 36.1081 +			Counter:22|ACH Credit Count|9306|5|32767
 36.1082 +			Counter:23|ACH Orig Debit Count|9306|5|32767
 36.1083 +			Counter:24|ACH Orig Credit Count|9306|5|32767
 36.1084 +			Counter:25|Checks Received Count|9306|5|32767
 36.1085 +			Counter:26|On Us Item Count|9306|5|32767
 36.1086 +			Counter:27|Lobby Visit Count|9306|5|32767
 36.1087 +			Counter:28|Loose Coin Count|9306|5|32767
 36.1088 +			Counter:29|Rolled Coin Count|9306|5|32767
 36.1089 +			Counter:30|Loose Currency Count|9306|5|32767
 36.1090 +			Counter:31|Strap Currency Count|9306|5|32767
 36.1091 +			Counter:32|Counter 032 Count|9306|5|32767
 36.1092 +			Counter:33|Counter 033 Count|9306|5|32767
 36.1093 +			Counter:34|Counter 034 Count|9306|5|32767
 36.1094 +			Counter:35|Counter 035 Count|9306|5|32767
 36.1095 +			Counter:36|Counter 036 Count|9306|5|32767
 36.1096 +			Counter:37|Counter 037 Count|9306|5|32767
 36.1097 +			Counter:38|Counter 038 Count|9306|5|32767
 36.1098 +			Counter:39|Counter 039 Count|9306|5|32767
 36.1099 +			Counter:40|Counter 040 Count|9306|5|32767
 36.1100 +			Counter:41|Counter 041 Count|9306|5|32767
 36.1101 +			Counter:42|Counter 042 Count|9306|5|32767
 36.1102 +			Counter:43|Counter 043 Count|9306|5|32767
 36.1103 +			Counter:44|Counter 044 Count|9306|5|32767
 36.1104 +			Counter:45|Counter 045 Count|9306|5|32767
 36.1105 +			Counter:46|Counter 046 Count|9306|5|32767
 36.1106 +			Counter:47|Counter 047 Count|9306|5|32767
 36.1107 +			Counter:48|Counter 048 Count|9306|5|32767
 36.1108 +			Counter:49|Counter 049 Count|9306|5|32767
 36.1109 +			Counter:50|Counter 050 Count|9306|5|32767
 36.1110 +			Counter:51|LOCKBOX COUNTER Count|9306|5|32767
 36.1111 +			Counter:52|Counter 052 Count|9306|5|32767
 36.1112 +			Counter:53|Counter 053 Count|9306|5|32767
 36.1113 +			Counter:54|Counter 054 Count|9306|5|32767
 36.1114 +			Counter:55|Counter 055 Count|9306|5|32767
 36.1115 +			Counter:56|Counter 056 Count|9306|5|32767
 36.1116 +			Counter:57|Counter 057 Count|9306|5|32767
 36.1117 +			Counter:58|Counter 058 Count|9306|5|32767
 36.1118 +			Counter:59|Counter 059 Count|9306|5|32767
 36.1119 +			Counter:60|Counter 060 Count|9306|5|32767
 36.1120 +			Counter:61|Counter 061 Count|9306|5|32767
 36.1121 +			Counter:62|Counter 062 Count|9306|5|32767
 36.1122 +			Counter:63|Counter 063 Count|9306|5|32767
 36.1123 +			Counter:64|Counter 064 Count|9306|5|32767
 36.1124 +			Counter:65|Counter 065 Count|9306|5|32767
 36.1125 +			Counter:66|Counter 066 Count|9306|5|32767
 36.1126 +			Counter:67|Counter 067 Count|9306|5|32767
 36.1127 +			Counter:68|Counter 068 Count|9306|5|32767
 36.1128 +			Counter:69|Counter 069 Count|9306|5|32767
 36.1129 +			Counter:70|Counter 070 Count|9306|5|32767
 36.1130 +			Counter:71|Counter 071 Count|9306|5|32767
 36.1131 +			Counter:72|Counter 072 Count|9306|5|32767
 36.1132 +			Counter:73|Counter 073 Count|9306|5|32767
 36.1133 +			Counter:74|Counter 074 Count|9306|5|32767
 36.1134 +			Counter:75|Counter 075 Count|9306|5|32767
 36.1135 +			Counter:76|Counter 076 Count|9306|5|32767
 36.1136 +			Counter:77|Counter 077 Count|9306|5|32767
 36.1137 +			Counter:78|Counter 078 Count|9306|5|32767
 36.1138 +			Counter:79|Counter 079 Count|9306|5|32767
 36.1139 +			Counter:80|Counter 080 Count|9306|5|32767
 36.1140 +			Counter:81|Counter 081 Count|9306|5|32767
 36.1141 +			Counter:82|Counter 082 Count|9306|5|32767
 36.1142 +			Counter:83|Counter 083 Count|9306|5|32767
 36.1143 +			Counter:84|Counter 084 Count|9306|5|32767
 36.1144 +			Counter:85|Counter 085 Count|9306|5|32767
 36.1145 +			Counter:86|Counter 086 Count|9306|5|32767
 36.1146 +			Counter:87|Counter 087 Count|9306|5|32767
 36.1147 +			Counter:88|Counter 088 Count|9306|5|32767
 36.1148 +			Counter:89|Counter 089 Count|9306|5|32767
 36.1149 +			Counter:90|Counter 090 Count|9306|5|32767
 36.1150 +			Counter:91|Counter 091 Count|9306|5|32767
 36.1151 +			Counter:92|Counter 092 Count|9306|5|32767
 36.1152 +			Counter:93|Counter 093 Count|9306|5|32767
 36.1153 +			Counter:94|Counter 094 Count|9306|5|32767
 36.1154 +			Counter:95|Counter 095 Count|9306|5|32767
 36.1155 +			Counter:96|Counter 096 Count|9306|5|32767
 36.1156 +			Counter:97|Counter 097 Count|9306|5|32767
 36.1157 +			Counter:98|Counter 098 Count|9306|5|32767
 36.1158 +			Counter:99|Counter 099 Count|9306|5|32767
 36.1159 +			Counter:100|Counter 100 Count|9306|5|32767
 36.1160 +	***|IRS|IRS
 36.1161 +		MaxContribution|Max Contribution|401|7|null
 36.1162 +		ContrLastYear:1|Contr 05 for 05|402|7|null
 36.1163 +		ContrLastYear:2|Contr 05 for 04|402|7|null
 36.1164 +		ContrLastYear:3|Contr 05 Rollover|402|7|null
 36.1165 +		ContrLastYear:4|Contr 05 Transfer|402|7|null
 36.1166 +		ContrLastYear:5|Contr 05 Roth Conv/MSA|402|7|null
 36.1167 +		ContrLastYear:6|Contr 05 Rechar/MSA|402|7|null
 36.1168 +		DistrLastYear:1|Distr 05 No Excptn|403|7|null
 36.1169 +		DistrLastYear:2|Distr 05 Exception|403|7|null
 36.1170 +		DistrLastYear:3|Distr 05 Disability|403|7|null
 36.1171 +		DistrLastYear:4|Distr 05 Death|403|7|null
 36.1172 +		DistrLastYear:5|Distr 05 Prohib Trn|403|7|null
 36.1173 +		DistrLastYear:6|Distr 05 Unspecif|403|7|null
 36.1174 +		DistrLastYear:7|Distr 05 Normal|403|7|null
 36.1175 +		DistrLastYear:8|Distr 05 Excess 05|403|7|null
 36.1176 +		DistrLastYear:9|Distr 05 Excess 04|403|7|null
 36.1177 +		DistrLastYear:10|Distr 05 Unspecif|403|7|null
 36.1178 +		DistrLastYear:11|Distr 05 Transfer|403|7|null
 36.1179 +		DistrLastYear:12|Distr 05 Ex Earn 05|403|7|null
 36.1180 +		DistrLastYear:13|Distr 05 Ex Earn 04|403|7|null
 36.1181 +		ContrThisYear:1|Contr 06 for 06|404|7|null
 36.1182 +		ContrThisYear:2|Contr 06 for 05|404|7|null
 36.1183 +		ContrThisYear:3|Contr 06 Rollover|404|7|null
 36.1184 +		ContrThisYear:4|Contr 06 Transfer|404|7|null
 36.1185 +		ContrThisYear:5|Contr 06 Roth Conv/MSA|404|7|null
 36.1186 +		ContrThisYear:6|Contr 06 Rechar/MSA|404|7|null
 36.1187 +		DistrThisYear:1|Distr 06 No Excptn|405|7|null
 36.1188 +		DistrThisYear:2|Distr 06 Exception|405|7|null
 36.1189 +		DistrThisYear:3|Distr 06 Disability|405|7|null
 36.1190 +		DistrThisYear:4|Distr 06 Death|405|7|null
 36.1191 +		DistrThisYear:5|Distr 06 Prohib Trn|405|7|null
 36.1192 +		DistrThisYear:6|Distr 06 Unspecif|405|7|null
 36.1193 +		DistrThisYear:7|Distr 06 Normal|405|7|null
 36.1194 +		DistrThisYear:8|Distr 06 Excess 06|405|7|null
 36.1195 +		DistrThisYear:9|Distr 06 Excess 05|405|7|null
 36.1196 +		DistrThisYear:10|Distr 06 Unspecif|405|7|null
 36.1197 +		DistrThisYear:11|Distr 06 Transfer|405|7|null
 36.1198 +		DistrThisYear:12|Distr 06 Ex Earn 06|405|7|null
 36.1199 +		DistrThisYear:13|Distr 06 Ex Earn 05|405|7|null
 36.1200 +		SSN|Taxpayer ID|406|0|9
 36.1201 +		IRSCode|IRS Code|407|5|15
 36.1202 +		ContributionYear|Contribution Year|408|5|1
 36.1203 +		FairMarketValueLastYear|Fair Mkt Value 05|409|7|null
 36.1204 +		OpenDate|Open Date|410|3|null
 36.1205 +		MSAHolderCode|MSA Holder Code|411|5|2
 36.1206 +		IRSPlan|IRS Plan|412|5|99
 36.1207 +		FairMarketValueDeath|Fair Mkt Value Death|413|7|null
 36.1208 +		Locator|Locator|414|4|null
 36.1209 +		IraRmd|Req Min Distrib 06|416|7|null
 36.1210 +		IRSHolderBirthDate|IRS Holder Birth Date|417|3|null
 36.1211 +		IRSHoldersPOUseBirthDate|IRS Holder Spouse Birth Date|418|3|null
 36.1212 +		ActualMaxContribution|Actual Max Contribution|480|7|null
 36.1213 +		***|IRS Name|IRS Name
 36.1214 +			Type|Name Type|101|5|53
 36.1215 +			SubType|Name SubType|102|5|99
 36.1216 +			MailOverride|Mail Override|103|5|1
 36.1217 +			SSNOverride|SSN/TIN Override|104|5|3
 36.1218 +			SSNCertification|SSN/TIN Certification|105|5|2
 36.1219 +			SSNType|SSN/TIN Type|106|5|9
 36.1220 +			EffectiveDate|Effective  Date|107|3|null
 36.1221 +			ExpirationDate|Expiration Date|108|3|null
 36.1222 +			BirthDate|Birth Date|109|3|null
 36.1223 +			Title|Title|110|0|8
 36.1224 +			First|First Name|111|0|20
 36.1225 +			Middle|Middle Name|112|0|10
 36.1226 +			Last|Last Name|113|0|40
 36.1227 +			Suffix|Suffix|114|0|4
 36.1228 +			ExtraAddress|Extra Address|115|0|40
 36.1229 +			Street|Street|116|0|40
 36.1230 +			City|City|117|0|40
 36.1231 +			State|State|118|0|10
 36.1232 +			ZipCode|Zip Code|119|0|10
 36.1233 +			HomePhone|Home Phone|120|0|16
 36.1234 +			SSN|SSN/TIN|121|0|9
 36.1235 +			WorkPhone|Work Phone|122|0|16
 36.1236 +			LastFMDate|Last FM Date|123|3|null
 36.1237 +			CarrierRoute|Carrier Route|124|0|4
 36.1238 +			AddressType|Address Type|125|5|2
 36.1239 +			BeneficiaryPercent|Beneficiary Percent|126|2|null
 36.1240 +			IRSCorrection|IRS Correction|127|5|1
 36.1241 +			WorkPhoneExtension|Work Phone Ext|128|0|6
 36.1242 +			DeathDate|Death Date|130|3|null
 36.1243 +			ECOACode|ECOA Code|131|5|11
 36.1244 +			Country|Country|132|0|20
 36.1245 +			CountryCode|Country Code|133|0|2
 36.1246 +			Email|E-Mail Address|134|0|40
 36.1247 +			MothersMaidenName|Mother's Maiden Name|135|0|20
 36.1248 +			EmployerName|Current Employer|136|0|40
 36.1249 +			AltEmail|Alt E-Mail Address|137|0|40
 36.1250 +			Locator|Locator|138|4|null
 36.1251 +			MobilePhone|Mobile Phone|139|0|16
 36.1252 +			PagerNumber|Pager Number|140|0|16
 36.1253 +			USPersonFlag|U.S. Person Flag|141|5|1
 36.1254 +			IdentDocFlag:1|Documentary Flag 1|142|5|1
 36.1255 +			IdentDocFlag:2|Documentary Flag 2|142|5|1
 36.1256 +			IdentDocFlag:3|Documentary Flag 3|142|5|1
 36.1257 +			IdentIDType:1|ID Type 1|143|5|999
 36.1258 +			IdentIDType:2|ID Type 2|143|5|999
 36.1259 +			IdentIDType:3|ID Type 3|143|5|999
 36.1260 +			IdentIDDescription:1|ID Description 1|144|0|40
 36.1261 +			IdentIDDescription:2|ID Description 2|144|0|40
 36.1262 +			IdentIDDescription:3|ID Description 3|144|0|40
 36.1263 +			IdentIDNumber:1|ID Number 1|145|0|40
 36.1264 +			IdentIDNumber:2|ID Number 2|145|0|40
 36.1265 +			IdentIDNumber:3|ID Number 3|145|0|40
 36.1266 +			IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
 36.1267 +			IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
 36.1268 +			IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
 36.1269 +			IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
 36.1270 +			IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
 36.1271 +			IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
 36.1272 +			IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
 36.1273 +			IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
 36.1274 +			IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
 36.1275 +			Occupation|Occupation|149|0|20
 36.1276 +			UserChar1|User Char   01|150|0|40
 36.1277 +			UserChar2|User Char   02|151|0|40
 36.1278 +			UserChar3|User Char   03|152|0|40
 36.1279 +			UserChar4|User Char   04|153|0|40
 36.1280 +			UserAmount1|User Amount 01|154|7|null
 36.1281 +			UserAmount2|User Amount 02|155|7|null
 36.1282 +			UserDate1|User Date   01|156|3|null
 36.1283 +			UserDate2|User Date   02|157|3|null
 36.1284 +			LastAddrChgDate|Address Change Date|158|3|null
 36.1285 +			LastAddrVerifDate|Address Verify Date|159|3|null
 36.1286 +			CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
 36.1287 +			ShortName|Short Name|180|0|16
 36.1288 +			LongName|Long Name|181|1|40
 36.1289 +			License|License|129|0|20
 36.1290 +	***|Loan|Loan
 36.1291 +		ID|Loan ID|1301|0|2
 36.1292 +		CheckDigits|Check Digits|1302|0|2
 36.1293 +		NoteNumber|Note Number|1303|0|10
 36.1294 +		Type|Loan Type|1304|5|9999
 36.1295 +		LastFMDate|Last FM Date|1305|3|null
 36.1296 +		LastTranDate|Last Transaction Date|1306|3|null
 36.1297 +		OriginalDate|Original Loan Date|1307|3|null
 36.1298 +		OpenDate|Open Date|1308|3|null
 36.1299 +		ChargeOffDate|Charge Off Date|1309|3|null
 36.1300 +		CloseDate|Close Date|1310|3|null
 36.1301 +		Reference|Reference|1311|0|20
 36.1302 +		WarningCode:1|Warning 1 Code|1312|5|99
 36.1303 +		WarningCode:2|Warning 2 Code|1312|5|99
 36.1304 +		WarningCode:3|Warning 3 Code|1312|5|99
 36.1305 +		WarningCode:4|Warning 4 Code|1312|5|99
 36.1306 +		WarningCode:5|Warning 5 Code|1312|5|99
 36.1307 +		WarningCode:6|Warning 6 Code|1312|5|99
 36.1308 +		WarningCode:7|Warning 7 Code|1312|5|99
 36.1309 +		WarningCode:8|Warning 8 Code|1312|5|99
 36.1310 +		Service:1|Service 1|1313|5|99
 36.1311 +		Service:2|Service 2|1313|5|99
 36.1312 +		Service:3|Service 3|1313|5|99
 36.1313 +		Service:4|Service 4|1313|5|99
 36.1314 +		Service:5|Service 5|1313|5|99
 36.1315 +		Service:6|Service 6|1313|5|99
 36.1316 +		Service:7|Service 7|1313|5|99
 36.1317 +		Service:8|Service 8|1313|5|99
 36.1318 +		LoanCode|Loan Code|1314|5|4
 36.1319 +		CollateralCode|Collateral Code|1315|5|999
 36.1320 +		CollateralDate|Collateral Date|1316|3|null
 36.1321 +		ApprovalCode|Approval Code|1317|5|4999
 36.1322 +		ApprovalDate|Approval Date|1318|3|null
 36.1323 +		PurposeCode|Loan Purpose|1319|5|999
 36.1324 +		ECOACode|ECOA Code|1320|5|11
 36.1325 +		CreditReportingCode|Credit Reporting Code|1321|5|99
 36.1326 +		PaymentType|Payment Type|1322|5|1
 36.1327 +		PaymentMethod|Payment Method|1323|5|9
 36.1328 +		CouponCode|Coupon Code|1324|5|2
 36.1329 +		PaymentFrequency|Payment Frequency|1325|5|14
 36.1330 +		PaymentSkips|Payment Skips|1326|5|9
 36.1331 +		PaymentCalcType|Payment Calc Type|1327|5|9
 36.1332 +		PartialPayment|Partial Payment|1328|7|null
 36.1333 +		Payment|Payment|1329|7|null
 36.1334 +		LastPaymentDate|Last Payment Date|1330|3|null
 36.1335 +		PaymentCount|Payment Count|1331|5|9999
 36.1336 +		PaymentHistory:1|Payments Made|1332|5|9999
 36.1337 +		PaymentHistory:2|31- 60 Days DQ|1332|5|9999
 36.1338 +		PaymentHistory:3|61- 90 Days DQ|1332|5|9999
 36.1339 +		PaymentHistory:4|91-120 Days DQ|1332|5|9999
 36.1340 +		PaymentHistory:5|121-180 Days DQ|1332|5|9999
 36.1341 +		PaymentHistory:6|181 and up Days DQ|1332|5|9999
 36.1342 +		NewLoanDueDateCode|New Loan Due Date Code|1333|5|99
 36.1343 +		DueDateAdvanceCode|Due Date Advance Code|1334|5|3
 36.1344 +		DueDay1|Due Day 1|1335|5|31
 36.1345 +		DueDay2|Due Day 2|1336|5|31
 36.1346 +		DueDate|Due Date|1337|3|null
 36.1347 +		BalloonDate|Balloon Date|1338|3|null
 36.1348 +		RefundPostCode|Refund Post Code|1339|5|2
 36.1349 +		RefundYTD|Refund YTD|1340|7|null
 36.1350 +		RefundLastYear|Refund Last Year|1341|7|null
 36.1351 +		InterestYTD|Interest YTD|1342|7|null
 36.1352 +		InterestLastYear|Interest Last Year|1343|7|null
 36.1353 +		InterestFromOpen|Interest From Open|1344|7|null
 36.1354 +		InterestType|Interest Type|1345|5|99
 36.1355 +		InterestRate|Interest Rate|1346|2|null
 36.1356 +		SplitRate|Split Rate|1347|2|null
 36.1357 +		SplitRateBalance|Split Rate Balance|1348|7|null
 36.1358 +		InterestDate|Interest Date|1349|3|null
 36.1359 +		InterestUnpaid|Interest Unpaid|1350|7|null
 36.1360 +		DQNoticeNumber|DQ Notice|1351|5|9
 36.1361 +		DQNoticedAtE|DQ Notice Date|1352|3|null
 36.1362 +		DQCardDate|DQ Card Date|1353|3|null
 36.1363 +		LateChargeType|Late Charge Type|1354|5|99
 36.1364 +		LateChargeAccrued|Late Charge Accrued|1355|7|null
 36.1365 +		LateChargeUnpaid|Late Charge Unpaid|1356|7|null
 36.1366 +		LateChargeYTD|Late Charge YTD|1357|7|null
 36.1367 +		LateChargeLastYear|Late Charge Last Yr|1358|7|null
 36.1368 +		Balance|Loan Balance|1359|7|null
 36.1369 +		OriginalBalance|Original Balance|1360|7|null
 36.1370 +		CreditLimit|Credit Limit|1361|7|null
 36.1371 +		PrincipalYTD|Principal YTD|1362|7|null
 36.1372 +		PrincipalLastYear|Principal Last Year|1363|7|null
 36.1373 +		ChargeOffType|Charge-off Type|1364|5|99
 36.1374 +		ChargeOffAmount|Charge-off Amount|1365|7|null
 36.1375 +		SecuredCode|Secured Code|1366|5|3
 36.1376 +		SecuredAmount|Secured Amount|1367|7|null
 36.1377 +		InsuranceType|Insurance Type|1368|5|99
 36.1378 +		InsuranceMax|Insurance Maximum|1369|7|null
 36.1379 +		InsuranceBalance|Insurance Balance|1370|7|null
 36.1380 +		AvailCreditCalc|Available Credit Calculation|1371|5|1
 36.1381 +		LastPurgeDate|Last Purge Date|1372|3|null
 36.1382 +		StatementGroup|Statement Group|1373|5|99
 36.1383 +		StatementDate|Statement Date|1374|3|null
 36.1384 +		StatementMailCode|Statement Mail Code|1375|5|99
 36.1385 +		RegECount|Reg E Count|1376|5|9999
 36.1386 +		Description|Description|1377|0|30
 36.1387 +		StatementPrevDate|Statement Previous Date|1378|3|null
 36.1388 +		PaymentSkipsTartDay|Payment Skip Start Day|1379|5|1231
 36.1389 +		CredLimitExpiration|Credit Limit Expiration|1380|3|null
 36.1390 +		InterestRateIndex|Interest Rate Index|1381|5|99
 36.1391 +		InterestRateMargin|Interest Rate Margin|1382|2|null
 36.1392 +		InterestRateMax|Interest Rate Maximum|1383|2|null
 36.1393 +		InterestRateMin|Interest Rate Minimum|1384|2|null
 36.1394 +		CreditReportNumber|Credit Report Number|1385|0|17
 36.1395 +		WarningExpiration:1|Warning 1 Expiration|1386|3|null
 36.1396 +		WarningExpiration:2|Warning 2 Expiration|1386|3|null
 36.1397 +		WarningExpiration:3|Warning 3 Expiration|1386|3|null
 36.1398 +		WarningExpiration:4|Warning 4 Expiration|1386|3|null
 36.1399 +		WarningExpiration:5|Warning 5 Expiration|1386|3|null
 36.1400 +		WarningExpiration:6|Warning 6 Expiration|1386|3|null
 36.1401 +		WarningExpiration:7|Warning 7 Expiration|1386|3|null
 36.1402 +		WarningExpiration:8|Warning 8 Expiration|1386|3|null
 36.1403 +		NSFMonthToDate|NSF Month to Date|1387|5|9999
 36.1404 +		NSFYTD|NSF Year to Date|1388|5|9999
 36.1405 +		NSFLastYear|NSF Last Year|1389|5|9999
 36.1406 +		DQCalculationMethod|DQ Calculation Method|1390|5|1
 36.1407 +		PmtBucketAmount:1|Pmt Bucket Amt 1|1391|7|null
 36.1408 +		PmtBucketAmount:2|Pmt Bucket Amt 2|1391|7|null
 36.1409 +		PmtBucketAmount:3|Pmt Bucket Amt 3|1391|7|null
 36.1410 +		PmtBucketAmount:4|Pmt Bucket Amt 4|1391|7|null
 36.1411 +		PmtBucketAmount:5|Pmt Bucket Amt 5|1391|7|null
 36.1412 +		PmtBucketAmount:6|Pmt Bucket Amt 6|1391|7|null
 36.1413 +		PmtBucketAmount:7|Pmt Bucket Amt 7|1391|7|null
 36.1414 +		PmtBucketAmount:8|Pmt Bucket Amt 8|1391|7|null
 36.1415 +		PmtBucketDueDate:1|Pmt Bucket Due Date 1|1392|3|null
 36.1416 +		PmtBucketDueDate:2|Pmt Bucket Due Date 2|1392|3|null
 36.1417 +		PmtBucketDueDate:3|Pmt Bucket Due Date 3|1392|3|null
 36.1418 +		PmtBucketDueDate:4|Pmt Bucket Due Date 4|1392|3|null
 36.1419 +		PmtBucketDueDate:5|Pmt Bucket Due Date 5|1392|3|null
 36.1420 +		PmtBucketDueDate:6|Pmt Bucket Due Date 6|1392|3|null
 36.1421 +		PmtBucketDueDate:7|Pmt Bucket Due Date 7|1392|3|null
 36.1422 +		PmtBucketDueDate:8|Pmt Bucket Due Date 8|1392|3|null
 36.1423 +		PUOldBalance|PU Old Balance|1393|7|null
 36.1424 +		PUOldIntUnpaid|PU Old Int Unpaid|1394|7|null
 36.1425 +		PUIntCharge|PU Int Charge|1395|7|null
 36.1426 +		PUNewBalance|PU New Balance|1396|7|null
 36.1427 +		PUNewIntUnpaid|PU New Int Unpaid|1397|7|null
 36.1428 +		CAOldBalance|CA Old Balance|1398|7|null
 36.1429 +		CAOldIntUnpaid|CA Old Int Unpaid|1399|7|null
 36.1430 +		CAIntCharge|CA Int Charge|1400|7|null
 36.1431 +		CATransIntCharge|CA Trans Int Charge|1401|7|null
 36.1432 +		CANewBalance|CA New Balance|1402|7|null
 36.1433 +		CANewIntUnpaid|CA New Int Unpaid|1403|7|null
 36.1434 +		FeeOldBalance|Fee Old Balance|1404|7|null
 36.1435 +		FeeNewBalance|Fee New Balance|1405|7|null
 36.1436 +		PUAverageBalance|PU Average Balance|1406|7|null
 36.1437 +		CAAverageBalance|CA Average Balance|1407|7|null
 36.1438 +		EffectiveAPR|Effective APR|1408|2|null
 36.1439 +		OriginalRate|Original Rate|1409|2|null
 36.1440 +		Unamortizedfees|Unamortized Fees|1410|7|null
 36.1441 +		MaturityDate|Maturity Date|1411|3|null
 36.1442 +		PointsYTD|Points YTD|1412|7|null
 36.1443 +		PointsLastYear|Points Last Year|1413|7|null
 36.1444 +		FeeCount:1|Fee Count 1|1414|5|9999
 36.1445 +		FeeCount:2|Fee Count 2|1414|5|9999
 36.1446 +		FeeCount:3|Fee Count 3|1414|5|9999
 36.1447 +		FeeCount:4|Fee Count 4|1414|5|9999
 36.1448 +		EscrowAmount|Escrow Amount|1415|7|null
 36.1449 +		EscrowID|Escrow ID|1416|0|2
 36.1450 +		LateChargedAtE|Late Charge Date|1417|3|null
 36.1451 +		CUTotalsUseCode|CU Totals Code|1418|5|1
 36.1452 +		PeriodicCap|Periodic Cap|1419|2|null
 36.1453 +		PeriodicStartRate|Periodic Cap Start Rate|1420|2|null
 36.1454 +		PeriodicStartDate|Periodic Cap Start Date|1421|3|null
 36.1455 +		SinglePremiumLife|Sgl Prem Life|1422|7|null
 36.1456 +		SinglePremiumDisability|Sgl Prem Disability|1423|7|null
 36.1457 +		PUOldBalance2|PU Old Balance 2|1424|7|null
 36.1458 +		PUNewBalance2|PU New Balance 2|1425|7|null
 36.1459 +		CAOldBalance2|CA Old Balance 2|1426|7|null
 36.1460 +		CANewBalance2|CA New Balance 2|1427|7|null
 36.1461 +		PUAverageBalance2|PU Average Balance 2|1428|7|null
 36.1462 +		CAAverageBalance2|CA Average Balance 2|1429|7|null
 36.1463 +		Minbalance|Minimum Balance|1430|7|null
 36.1464 +		Minadvance|Minimum Advance|1431|7|null
 36.1465 +		BalloonAmount|Balloon Amount|1432|7|null
 36.1466 +		InterestRateMarginsIgn|Interest Rate Margin Sign|1433|5|1
 36.1467 +		Branch|Branch|1434|5|9999
 36.1468 +		CreditReportOccurDate|Credit Report Occurrence|1435|3|null
 36.1469 +		CreditReportLastsTatus|Credit Report Last Status|1436|5|99
 36.1470 +		CreditReportComment|Credit Report Comment|1437|0|2
 36.1471 +		FASB91Code|FASB 91 Code|1438|5|199
 36.1472 +		StudentLoanCode|Student Loan Code|1439|5|1
 36.1473 +		StudentCoveredPeriodEnd|Student Covered End|1440|3|null
 36.1474 +		RiskRate|Risk Rate|1441|2|null
 36.1475 +		DiscountRate|Discount Rate|1442|2|null
 36.1476 +		APR|APR|1443|2|null
 36.1477 +		PrepAidFinanceChg|Prepaid Finance Chg|1444|7|null
 36.1478 +		CreditLimitGroup|Credit Limit Group|1445|5|99
 36.1479 +		AlternatePayment|Alternate Payment|1446|7|null
 36.1480 +		AltPmtEffective|Alternate Pmt Effective|1447|3|null
 36.1481 +		AltPmtExpiration|Alternate Pmt Expiration|1448|3|null
 36.1482 +		IntUnpaidBilled|Int Unpaid Billed|1449|7|null
 36.1483 +		PromoType:1|Promo 1 Type|1450|5|99
 36.1484 +		PromoType:2|Promo 2 Type|1450|5|99
 36.1485 +		PromoEffectDate:1|Promo 1 Effective Date|1451|3|null
 36.1486 +		PromoEffectDate:2|Promo 2 Effective Date|1451|3|null
 36.1487 +		PromoExpireDate:1|Promo 1 Expiration Date|1452|3|null
 36.1488 +		PromoExpireDate:2|Promo 2 Expiration Date|1452|3|null
 36.1489 +		PromoRateType:1|Promo 1 Rate Type|1453|5|1
 36.1490 +		PromoRateType:2|Promo 2 Rate Type|1453|5|1
 36.1491 +		PromoRate:1|Promo 1 Rate|1454|2|null
 36.1492 +		PromoRate:2|Promo 2 Rate|1454|2|null
 36.1493 +		PromoRateOffset:1|Promo 1 Rate Offset|1455|2|null
 36.1494 +		PromoRateOffset:2|Promo 2 Rate Offset|1455|2|null
 36.1495 +		PromoRateMin:1|Promo 1 Rate Minimum|1456|2|null
 36.1496 +		PromoRateMin:2|Promo 2 Rate Minimum|1456|2|null
 36.1497 +		PromoRateMax:1|Promo 1 Rate Maximum|1457|2|null
 36.1498 +		PromoRateMax:2|Promo 2 Rate Maximum|1457|2|null
 36.1499 +		PromoTotalAdvances:1|Promo 1 Total Advances|1458|7|null
 36.1500 +		PromoTotalAdvances:2|Promo 2 Total Advances|1458|7|null
 36.1501 +		PromoAdvanceCutoff:1|Promo 1 Advance Cutoff|1459|7|null
 36.1502 +		PromoAdvanceCutoff:2|Promo 2 Advance Cutoff|1459|7|null
 36.1503 +		PromoBalance:1|Promo 1 Balance|1460|7|null
 36.1504 +		PromoBalance:2|Promo 2 Balance|1460|7|null
 36.1505 +		ApplicationID|Application ID|1461|0|2
 36.1506 +		CreditReportConsumerInfo|Credit Report Consumer Info|1462|0|2
 36.1507 +		CreditReportCompliance|Credit Report Compliance Info|1463|0|2
 36.1508 +		LessEestate|Lessee State|1464|0|2
 36.1509 +		LessEecounty|Lessee County|1465|0|32
 36.1510 +		LessEecity|Lessee City|1466|0|32
 36.1511 +		DealersTate|Dealer State|1467|0|2
 36.1512 +		DealerCounty|Dealer County|1468|0|32
 36.1513 +		DealerCity|Dealer City|1469|0|32
 36.1514 +		SalesTaxStateIndicator|Sales Tax State Indicator|1470|5|2
 36.1515 +		SalesTaxCountyIndicator|Sales Tax County Indicator|1471|5|2
 36.1516 +		SalesTaxCityIndicator|Sales Tax City Indicator|1472|5|2
 36.1517 +		LeaseTerminatedAtE|Lease Termination Date|1473|3|null
 36.1518 +		LeaseTerminateFee|Lease Termination Fee|1474|7|null
 36.1519 +		DealerReserve|Dealer Reserve|1475|7|null
 36.1520 +		DealerCode|Dealer Code|1476|0|10
 36.1521 +		ActivityDate|Activity Date|1477|3|null
 36.1522 +		FeeBillingDate|Fee Billing Date|1478|3|null
 36.1523 +		FeeBillingAmount|Fee Billing Amount|1479|7|null
 36.1524 +		BilledFeeUnpaid|Billed Fee Unpaid|1480|7|null
 36.1525 +		BilledFeeYTD|Billed Fee YTD|1481|7|null
 36.1526 +		BilledFeeLastYear|Billed Fee Last Year|1482|7|null
 36.1527 +		BilledFeeBucketAmount:1|Billed Fee Bucket Amt 1|1483|7|null
 36.1528 +		BilledFeeBucketAmount:2|Billed Fee Bucket Amt 2|1483|7|null
 36.1529 +		BilledFeeBucketAmount:3|Billed Fee Bucket Amt 3|1483|7|null
 36.1530 +		BilledFeeBucketAmount:4|Billed Fee Bucket Amt 4|1483|7|null
 36.1531 +		BilledFeeBucketAmount:5|Billed Fee Bucket Amt 5|1483|7|null
 36.1532 +		BilledFeeBucketAmount:6|Billed Fee Bucket Amt 6|1483|7|null
 36.1533 +		BilledFeeBucketAmount:7|Billed Fee Bucket Amt 7|1483|7|null
 36.1534 +		BilledFeeBucketAmount:8|Billed Fee Bucket Amt 8|1483|7|null
 36.1535 +		CredCardPromo2effectdate|Cred Card Promo 2 Effect|1484|3|null
 36.1536 +		CredCardPromo3effectdate|Cred Card Promo 3 Effect|1485|3|null
 36.1537 +		CredCardPromo4effectdate|Cred Card Promo 4 Effect|1486|3|null
 36.1538 +		PUOldBalance3|PU Old Balance 3|1487|7|null
 36.1539 +		PUNewBalance3|PU New Balance 3|1488|7|null
 36.1540 +		CAOldBalance3|CA Old Balance 3|1489|7|null
 36.1541 +		CANewBalance3|CA New Balance 3|1490|7|null
 36.1542 +		PUAverageBalance3|PU Average Balance 3|1491|7|null
 36.1543 +		CAAverageBalance3|CA Average Balance 3|1492|7|null
 36.1544 +		PUOldBalance4|PU Old Balance 4|1493|7|null
 36.1545 +		PUNewBalance4|PU New Balance 4|1494|7|null
 36.1546 +		CAOldBalance4|CA Old Balance 4|1495|7|null
 36.1547 +		CANewBalance4|CA New Balance 4|1496|7|null
 36.1548 +		PUAverageBalance4|PU Average Balance 4|1497|7|null
 36.1549 +		CAAverageBalance4|CA Average Balance 4|1498|7|null
 36.1550 +		CreditsCore|Credit Score|1499|4|null
 36.1551 +		CreditsCoreType|Credit Score Type|1500|5|9
 36.1552 +		LastAdvancedAtE|Last Advance Date|1501|3|null
 36.1553 +		AdvanceAmount|Amount Advanced|1502|7|null
 36.1554 +		FirstPaymentDate|First Payment Date|1503|3|null
 36.1555 +		SchdRateChangeDate|Schd Rate Change Date|1504|3|null
 36.1556 +		SchdRate|Schd Rate|1505|2|null
 36.1557 +		SchdSplitBalance|Schd Split Balance|1506|7|null
 36.1558 +		SchdSplitRate|Schd Split Rate|1507|2|null
 36.1559 +		SchdPeriodStartRate|Schd Cap Start Rate|1508|2|null
 36.1560 +		SchdPeriodStartDate|Schd Cap Start Date|1509|3|null
 36.1561 +		PeriodicFrequency|Periodic Cap Frequency|1510|5|1
 36.1562 +		AmortizationSchd|Amortization Schedule|1511|5|9999
 36.1563 +		AmortizationSchdType|Amortize Schd Type|1512|5|1
 36.1564 +		CallItemsChd|Call Item Schedule|1513|5|9999
 36.1565 +		CallItemsChdType|Call Item Schd Type|1514|5|1
 36.1566 +		MemberUserTransferCode|Member User Transfer Code|1515|5|9999
 36.1567 +		CorporateUserTransferCode|Corporate User Transfer Code|1516|5|9999
 36.1568 +		ParticipationNumber|Participation Number|1517|0|10
 36.1569 +		VIN|VIN #|1518|0|20
 36.1570 +		UserChar1|Seller|1519|0|40
 36.1571 +		UserChar2|User Char   02|1520|0|40
 36.1572 +		UserChar3|RBL code|1521|0|40
 36.1573 +		UserChar4|User Char   04|1522|0|40
 36.1574 +		UserAmount1|FASB amount|1523|7|null
 36.1575 +		UserAmount2|User Amount 02|1524|7|null
 36.1576 +		UserDate1|Summit Action Date|1525|3|null
 36.1577 +		UserDate2|QC/Docs Received Date|1526|3|null
 36.1578 +		BureausCore:1|Bureau Score Experian|1527|4|null
 36.1579 +		BureausCore:2|Bureau Score Equifax|1527|4|null
 36.1580 +		BureausCore:3|Bureau Score Transunion|1527|4|null
 36.1581 +		BureausCore:4|Bureau Score ChexSystems|1527|4|null
 36.1582 +		StudentLoanOrigFeeYTD|Student Loan Org Fee YTD|1528|7|null
 36.1583 +		StudentLoanOrigFeeLastYear|Student Loan Org Fee LYr|1529|7|null
 36.1584 +		StudentLoanCapIntYTD|Student Loan Cap Int YTD|1530|7|null
 36.1585 +		StudentLoanCapIntLastYear|Student Loan Cap Int LYr|1531|7|null
 36.1586 +		PutItemsChd|Put Item Schedule|1532|5|9999
 36.1587 +		PutItemsChdType|Put Item Schd Type|1533|5|1
 36.1588 +		LedgerAccrual|Ledger Accrual|1534|7|null
 36.1589 +		LedgerAccrualdate|Ledger Accrual Date|1535|3|null
 36.1590 +		CurrIntPayable|Current Int Payable|1536|7|null
 36.1591 +		MTDAccruedInt|MTD Accrued Int|1537|7|null
 36.1592 +		MTDPaidInt|MTD Paid Interest|1538|7|null
 36.1593 +		MTDAccumulatedInt|MTD Accumulated Int|1539|7|null
 36.1594 +		PreMthIntAccumltd:1|01  Mth Pre Int Accm|1540|7|null
 36.1595 +		PreMthIntAccumltd:2|02  Mth Pre Int Accm|1540|7|null
 36.1596 +		PreMthIntAccumltd:3|03  Mth Pre Int Accm|1540|7|null
 36.1597 +		PreMthIntAccumltd:4|04  Mth Pre Int Accm|1540|7|null
 36.1598 +		PreMthIntAccumltd:5|05  Mth Pre Int Accm|1540|7|null
 36.1599 +		PreMthIntAccumltd:6|06  Mth Pre Int Accm|1540|7|null
 36.1600 +		PreMthIntAccumltd:7|07  Mth Pre Int Accm|1540|7|null
 36.1601 +		PreMthIntAccumltd:8|08  Mth Pre Int Accm|1540|7|null
 36.1602 +		PreMthIntAccumltd:9|09  Mth Pre Int Accm|1540|7|null
 36.1603 +		PreMthIntAccumltd:10|10  Mth Pre Int Accm|1540|7|null
 36.1604 +		PreMthIntAccumltd:11|11  Mth Pre Int Accm|1540|7|null
 36.1605 +		PreMthIntAccumltd:12|12  Mth Pre Int Accm|1540|7|null
 36.1606 +		PreMthIntAccrued:1|01  Mth Pre Int Accr|1541|7|null
 36.1607 +		PreMthIntAccrued:2|02  Mth Pre Int Accr|1541|7|null
 36.1608 +		PreMthIntAccrued:3|03  Mth Pre Int Accr|1541|7|null
 36.1609 +		PreMthIntPaid:1|01  Mth Pre Int Paid|1542|7|null
 36.1610 +		PreMthIntPaid:2|02  Mth Pre Int Paid|1542|7|null
 36.1611 +		PreMthIntPaid:3|03  Mth Pre Int Paid|1542|7|null
 36.1612 +		LastAccrupdatedate|Last Accr Updt Date|1543|3|null
 36.1613 +		MTDPriorRateAccrual|MTD Prior Rate Accr|1544|7|null
 36.1614 +		MICRAcctNumber|MICR Account Number|1545|0|20
 36.1615 +		CurrMonthPaidInt|Current Mth Paid Int|1546|7|null
 36.1616 +		IndirectDealerNum|Indirect Dealer Number|1547|0|10
 36.1617 +		IndirectPlanID|Reserve Plan ID|1548|0|2
 36.1618 +		AvailableCredit|Available Credit|1580|7|null
 36.1619 +		InterestDue|Interest Due|1581|7|null
 36.1620 +		LateChargedUe|Late Charge Due|1582|7|null
 36.1621 +		PaymentDue|Payment Due|1583|7|null
 36.1622 +		PastDueAmount|Past Due Amount|1584|7|null
 36.1623 +		PayoffAmount|Payoff Amount|1585|7|null
 36.1624 +		SalesTaxRate|Sales Tax Rate|1586|2|null
 36.1625 +		StatesAleStaxrate|State Sales Tax Rate|1587|2|null
 36.1626 +		Cntysalestaxrate|County Sales Tax Rate|1588|2|null
 36.1627 +		CitySalesTaxRate|City Sales Tax Rate|1589|2|null
 36.1628 +		SalesTaxDue|Sales Tax Due|1590|7|null
 36.1629 +		SalesTaxPayoff|Sales Tax Payoff|1591|7|null
 36.1630 +		EffectiveBalance|Effective Balance|1592|7|null
 36.1631 +		***|Loan Hold|Loan Hold
 36.1632 +			Type|Hold Type|501|5|19
 36.1633 +			EffectiveDate|Effective Date|502|3|null
 36.1634 +			ExpirationDate|Expiration Date|503|3|null
 36.1635 +			Reference1|Reference 1|504|0|10
 36.1636 +			Reference2|Reference 2|505|0|10
 36.1637 +			Amount|Hold Amount|506|7|null
 36.1638 +			PayeeName|Payee Name|507|0|16
 36.1639 +			ExpirationTime|Expiration Time|508|5|2359
 36.1640 +			Locator|Locator|509|4|null
 36.1641 +			MemberBranch|Member Branch|510|0|4
 36.1642 +			StopPayCode|Stop Reason Code|511|5|99
 36.1643 +			Reference3|Reference 3|512|0|40
 36.1644 +			Reference4|Reference 4|513|0|40
 36.1645 +			MatchDate|Match Date|514|3|null
 36.1646 +			MatchTime|Match Time|515|5|2359
 36.1647 +			FeeCode|Fee Code|516|5|9999
 36.1648 +			FeeDescription|Fee Description|580|1|40
 36.1649 +		***|Loan Name|Loan Name
 36.1650 +			Type|Name Type|101|5|53
 36.1651 +			SubType|Name SubType|102|5|99
 36.1652 +			MailOverride|Mail Override|103|5|1
 36.1653 +			SSNOverride|SSN/TIN Override|104|5|3
 36.1654 +			SSNCertification|SSN/TIN Certification|105|5|2
 36.1655 +			SSNType|SSN/TIN Type|106|5|9
 36.1656 +			EffectiveDate|Effective  Date|107|3|null
 36.1657 +			ExpirationDate|Expiration Date|108|3|null
 36.1658 +			BirthDate|Birth Date|109|3|null
 36.1659 +			Title|Title|110|0|8
 36.1660 +			First|First Name|111|0|20
 36.1661 +			Middle|Middle Name|112|0|10
 36.1662 +			Last|Last Name|113|0|40
 36.1663 +			Suffix|Suffix|114|0|4
 36.1664 +			ExtraAddress|Extra Address|115|0|40
 36.1665 +			Street|Street|116|0|40
 36.1666 +			City|City|117|0|40
 36.1667 +			State|State|118|0|10
 36.1668 +			ZipCode|Zip Code|119|0|10
 36.1669 +			HomePhone|Home Phone|120|0|16
 36.1670 +			SSN|SSN/TIN|121|0|9
 36.1671 +			WorkPhone|Work Phone|122|0|16
 36.1672 +			LastFMDate|Last FM Date|123|3|null
 36.1673 +			CarrierRoute|Carrier Route|124|0|4
 36.1674 +			AddressType|Address Type|125|5|2
 36.1675 +			BeneficiaryPercent|Beneficiary Percent|126|2|null
 36.1676 +			IRSCorrection|IRS Correction|127|5|1
 36.1677 +			WorkPhoneExtension|Work Phone Ext|128|0|6
 36.1678 +			DeathDate|Death Date|130|3|null
 36.1679 +			ECOACode|ECOA Code|131|5|11
 36.1680 +			Country|Country|132|0|20
 36.1681 +			CountryCode|Country Code|133|0|2
 36.1682 +			Email|E-Mail Address|134|0|40
 36.1683 +			MothersMaidenName|Mother's Maiden Name|135|0|20
 36.1684 +			EmployerName|Current Employer|136|0|40
 36.1685 +			AltEmail|Alt E-Mail Address|137|0|40
 36.1686 +			Locator|Locator|138|4|null
 36.1687 +			MobilePhone|Mobile Phone|139|0|16
 36.1688 +			PagerNumber|Pager Number|140|0|16
 36.1689 +			USPersonFlag|U.S. Person Flag|141|5|1
 36.1690 +			IdentDocFlag:1|Documentary Flag 1|142|5|1
 36.1691 +			IdentDocFlag:2|Documentary Flag 2|142|5|1
 36.1692 +			IdentDocFlag:3|Documentary Flag 3|142|5|1
 36.1693 +			IdentIDType:1|ID Type 1|143|5|999
 36.1694 +			IdentIDType:2|ID Type 2|143|5|999
 36.1695 +			IdentIDType:3|ID Type 3|143|5|999
 36.1696 +			IdentIDDescription:1|ID Description 1|144|0|40
 36.1697 +			IdentIDDescription:2|ID Description 2|144|0|40
 36.1698 +			IdentIDDescription:3|ID Description 3|144|0|40
 36.1699 +			IdentIDNumber:1|ID Number 1|145|0|40
 36.1700 +			IdentIDNumber:2|ID Number 2|145|0|40
 36.1701 +			IdentIDNumber:3|ID Number 3|145|0|40
 36.1702 +			IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
 36.1703 +			IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
 36.1704 +			IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
 36.1705 +			IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
 36.1706 +			IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
 36.1707 +			IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
 36.1708 +			IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
 36.1709 +			IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
 36.1710 +			IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
 36.1711 +			Occupation|Occupation|149|0|20
 36.1712 +			UserChar1|User Char   01|150|0|40
 36.1713 +			UserChar2|User Char   02|151|0|40
 36.1714 +			UserChar3|User Char   03|152|0|40
 36.1715 +			UserChar4|User Char   04|153|0|40
 36.1716 +			UserAmount1|User Amount 01|154|7|null
 36.1717 +			UserAmount2|User Amount 02|155|7|null
 36.1718 +			UserDate1|User Date   01|156|3|null
 36.1719 +			UserDate2|User Date   02|157|3|null
 36.1720 +			LastAddrChgDate|Address Change Date|158|3|null
 36.1721 +			LastAddrVerifDate|Address Verify Date|159|3|null
 36.1722 +			CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
 36.1723 +			ShortName|Short Name|180|0|16
 36.1724 +			LongName|Long Name|181|1|40
 36.1725 +			License|License|129|0|20
 36.1726 +		***|Loan Pledge|Loan Pledge
 36.1727 +			Type|Pledge Type|601|5|3
 36.1728 +			AccountNumber|Account Number|602|0|10
 36.1729 +			ID|ID|603|0|2
 36.1730 +			CollateralCode|Collateral Code|604|5|999
 36.1731 +			Percent|Pledge Rate|605|2|null
 36.1732 +			Amount|Pledge Amount|606|7|null
 36.1733 +			Locator|Locator|607|4|null
 36.1734 +			***|Loan Pledge Name|Loan Pledge Name
 36.1735 +				Type|Name Type|101|5|53
 36.1736 +				SubType|Name SubType|102|5|99
 36.1737 +				MailOverride|Mail Override|103|5|1
 36.1738 +				SSNOverride|SSN/TIN Override|104|5|3
 36.1739 +				SSNCertification|SSN/TIN Certification|105|5|2
 36.1740 +				SSNType|SSN/TIN Type|106|5|9
 36.1741 +				EffectiveDate|Effective  Date|107|3|null
 36.1742 +				ExpirationDate|Expiration Date|108|3|null
 36.1743 +				BirthDate|Birth Date|109|3|null
 36.1744 +				Title|Title|110|0|8
 36.1745 +				First|First Name|111|0|20
 36.1746 +				Middle|Middle Name|112|0|10
 36.1747 +				Last|Last Name|113|0|40
 36.1748 +				Suffix|Suffix|114|0|4
 36.1749 +				ExtraAddress|Extra Address|115|0|40
 36.1750 +				Street|Street|116|0|40
 36.1751 +				City|City|117|0|40
 36.1752 +				State|State|118|0|10
 36.1753 +				ZipCode|Zip Code|119|0|10
 36.1754 +				HomePhone|Home Phone|120|0|16
 36.1755 +				SSN|SSN/TIN|121|0|9
 36.1756 +				WorkPhone|Work Phone|122|0|16
 36.1757 +				LastFMDate|Last FM Date|123|3|null
 36.1758 +				CarrierRoute|Carrier Route|124|0|4
 36.1759 +				AddressType|Address Type|125|5|2
 36.1760 +				BeneficiaryPercent|Beneficiary Percent|126|2|null
 36.1761 +				IRSCorrection|IRS Correction|127|5|1
 36.1762 +				WorkPhoneExtension|Work Phone Ext|128|0|6
 36.1763 +				DeathDate|Death Date|130|3|null
 36.1764 +				ECOACode|ECOA Code|131|5|11
 36.1765 +				Country|Country|132|0|20
 36.1766 +				CountryCode|Country Code|133|0|2
 36.1767 +				Email|E-Mail Address|134|0|40
 36.1768 +				MothersMaidenName|Mother's Maiden Name|135|0|20
 36.1769 +				EmployerName|Current Employer|136|0|40
 36.1770 +				AltEmail|Alt E-Mail Address|137|0|40
 36.1771 +				Locator|Locator|138|4|null
 36.1772 +				MobilePhone|Mobile Phone|139|0|16
 36.1773 +				PagerNumber|Pager Number|140|0|16
 36.1774 +				USPersonFlag|U.S. Person Flag|141|5|1
 36.1775 +				IdentDocFlag:1|Documentary Flag 1|142|5|1
 36.1776 +				IdentDocFlag:2|Documentary Flag 2|142|5|1
 36.1777 +				IdentDocFlag:3|Documentary Flag 3|142|5|1
 36.1778 +				IdentIDType:1|ID Type 1|143|5|999
 36.1779 +				IdentIDType:2|ID Type 2|143|5|999
 36.1780 +				IdentIDType:3|ID Type 3|143|5|999
 36.1781 +				IdentIDDescription:1|ID Description 1|144|0|40
 36.1782 +				IdentIDDescription:2|ID Description 2|144|0|40
 36.1783 +				IdentIDDescription:3|ID Description 3|144|0|40
 36.1784 +				IdentIDNumber:1|ID Number 1|145|0|40
 36.1785 +				IdentIDNumber:2|ID Number 2|145|0|40
 36.1786 +				IdentIDNumber:3|ID Number 3|145|0|40
 36.1787 +				IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
 36.1788 +				IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
 36.1789 +				IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
 36.1790 +				IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
 36.1791 +				IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
 36.1792 +				IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
 36.1793 +				IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
 36.1794 +				IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
 36.1795 +				IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
 36.1796 +				Occupation|Occupation|149|0|20
 36.1797 +				UserChar1|User Char   01|150|0|40
 36.1798 +				UserChar2|User Char   02|151|0|40
 36.1799 +				UserChar3|User Char   03|152|0|40
 36.1800 +				UserChar4|User Char   04|153|0|40
 36.1801 +				UserAmount1|User Amount 01|154|7|null
 36.1802 +				UserAmount2|User Amount 02|155|7|null
 36.1803 +				UserDate1|User Date   01|156|3|null
 36.1804 +				UserDate2|User Date   02|157|3|null
 36.1805 +				LastAddrChgDate|Address Change Date|158|3|null
 36.1806 +				LastAddrVerifDate|Address Verify Date|159|3|null
 36.1807 +				CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
 36.1808 +				ShortName|Short Name|180|0|16
 36.1809 +				LongName|Long Name|181|1|40
 36.1810 +				License|License|129|0|20
 36.1811 +		***|Loan Transfer|Loan Transfer
 36.1812 +			Type|Transfer Type|901|5|8
 36.1813 +			AccountNumber|Account|902|0|10
 36.1814 +			IDType|ID Type|903|5|2
 36.1815 +			ID|ID|904|0|2
 36.1816 +			Amount|Amount|905|7|null
 36.1817 +			Percent|Percent|906|2|null
 36.1818 +			EffectiveDate|Effective  Date|907|3|null
 36.1819 +			ExpirationDate|Expiration Date|908|3|null
 36.1820 +			AmountOption|Amount Option|909|5|5
 36.1821 +			NextDate|Next Transfer Date|910|3|null
 36.1822 +			Frequency|Transfer Frequency|911|5|14
 36.1823 +			Day1|Transfer Day 1|912|5|31
 36.1824 +			Day2|Transfer Day 2|913|5|31
 36.1825 +			Locator|Locator|914|4|null
 36.1826 +			MinimumBalance|Minimum Balance|915|7|null
 36.1827 +			MaximumBalance|Maximum Balance|916|7|null
 36.1828 +			RegE|Reg E|917|5|1
 36.1829 +			LastDate|Last Transfer Date|918|3|null
 36.1830 +			PaymentType|Transfer Payment Type|919|5|1
 36.1831 +			SweepMinimum|Sweep Minimum|920|7|null
 36.1832 +		***|Loan CheckOrder|Loan Check Order
 36.1833 +			Processor|Processor|6501|5|3
 36.1834 +			Status|Status|6502|5|6
 36.1835 +			OpenDate|Open Date|6503|3|null
 36.1836 +			LastOrderDate|Last Order Date|6504|3|null
 36.1837 +			StatusDate|Status Date|6505|3|null
 36.1838 +			LastFMDate|Last FM Date|6506|3|null
 36.1839 +			CheckType|Check Type|6507|5|1
 36.1840 +			Branch|Branch|6508|5|9999
 36.1841 +			StartNumber|Starting Number|6509|4|null
 36.1842 +			Quantity|Quantity|6510|4|null
 36.1843 +			ChecksTyle|Check Style|6511|0|12
 36.1844 +			CoversTyle|Cover Style|6512|0|8
 36.1845 +			CutNumber|Cut Style|6513|0|8
 36.1846 +			BillingCode|Billing Code|6514|5|9
 36.1847 +			ShipMethod|Shipping Method|6515|5|13
 36.1848 +			ShipTo|Ship To|6516|5|4
 36.1849 +			ImprintFont|Imprint Font Style|6517|5|8
 36.1850 +			ImprintJustify|Imprint Justification|6518|5|2
 36.1851 +			ImprintLine:1|Imprint Line 1|6519|0|40
 36.1852 +			ImprintLine:2|Imprint Line 2|6519|0|40
 36.1853 +			ImprintLine:3|Imprint Line 3|6519|0|40
 36.1854 +			ImprintLine:4|Imprint Line 4|6519|0|40
 36.1855 +			ImprintLine:5|Imprint Line 5|6519|0|40
 36.1856 +			ImprintLine:6|Imprint Line 6|6519|0|40
 36.1857 +			ImprintPhone|Imprint Phone|6520|0|12
 36.1858 +			ImprintZipCode|Imprint Zip Code|6521|0|10
 36.1859 +			MailAddress:1|Mailing Address 1|6522|0|40
 36.1860 +			MailAddress:2|Mailing Address 2|6522|0|40
 36.1861 +			MailAddress:3|Mailing Address 3|6522|0|40
 36.1862 +			MailAddress:4|Mailing Address 4|6522|0|40
 36.1863 +			MailAddress:5|Mailing Address 5|6522|0|40
 36.1864 +			MailAddress:6|Mailing Address 6|6522|0|40
 36.1865 +			MailZipCode|Mailing Zip Code|6523|0|10
 36.1866 +			OverSigLine:1|Over Signature Line 1|6524|0|40
 36.1867 +			OverSigLine:2|Over Signature Line 2|6524|0|40
 36.1868 +			OverSigFont|Over Signature Font Style|6525|5|8
 36.1869 +			NumberSigLineS|Number of Signature Lines|6526|5|3
 36.1870 +			CoverInitials|Cover Initials|6527|0|3
 36.1871 +			SpecialInstR:1|Special Instructions 1|6528|0|25
 36.1872 +			SpecialInstR:2|Special Instructions 2|6528|0|25
 36.1873 +			SpecialInstR:3|Special Instructions 3|6528|0|25
 36.1874 +			SpecialInstR:4|Special Instructions 4|6528|0|25
 36.1875 +			SpecialInstR:5|Special Instructions 5|6528|0|25
 36.1876 +			SpecialInstR:6|Special Instructions 6|6528|0|25
 36.1877 +			SpecialInstR:7|Special Instructions 7|6528|0|25
 36.1878 +			SpecialInstR:8|Special Instructions 8|6528|0|25
 36.1879 +			SSN:1|Imprint SSN/TIN 1|6529|0|9
 36.1880 +			SSN:2|Imprint SSN/TIN 2|6529|0|9
 36.1881 +			License:1|Imprint License 1|6530|0|25
 36.1882 +			License:2|Imprint License 2|6530|0|25
 36.1883 +			Binding|Binding Mnemonic|6531|0|6
 36.1884 +			Design|Design Mnemonic|6532|0|8
 36.1885 +			BusinessSerial|Business Serial Letters|6533|0|3
 36.1886 +			BusNumCopies|Business Number of Copies|6534|5|4
 36.1887 +			BusBindingsTyle|Business Binding Style|6535|5|11
 36.1888 +			BusVoucherNumber|Business Voucher Number|6536|0|6
 36.1889 +			BusCaptions:1|Business Caption 1|6537|0|2
 36.1890 +			BusCaptions:2|Business Caption 2|6537|0|2
 36.1891 +			BusCaptions:3|Business Caption 3|6537|0|2
 36.1892 +			BusCaptions:4|Business Caption 4|6537|0|2
 36.1893 +			BusCaptions:5|Business Caption 5|6537|0|2
 36.1894 +			BusCaptions:6|Business Caption 6|6537|0|2
 36.1895 +			BusCaptions:7|Business Caption 7|6537|0|2
 36.1896 +			BusCaptions:8|Business Caption 8|6537|0|2
 36.1897 +			PromoNumber|Promo Number|6538|0|4
 36.1898 +			AcctAddrInkColor|Account/Address Ink Color|6539|5|7
 36.1899 +			TitleInkColor|Titleplate Ink Color|6540|5|7
 36.1900 +			CutInkColor|Cut Ink Color|6541|5|7
 36.1901 +			TaxExemptCode|Tax Exempt Code|6542|5|1
 36.1902 +			RerunReason|Rerun Reason|6543|5|5
 36.1903 +			ImprintLineSize:1|Imprint Line 1 Size|6544|5|1
 36.1904 +			ImprintLineSize:2|Imprint Line 2 Size|6544|5|1
 36.1905 +			ImprintLineSize:3|Imprint Line 3 Size|6544|5|1
 36.1906 +			ImprintLineSize:4|Imprint Line 4 Size|6544|5|1
 36.1907 +			ImprintLineSize:5|Imprint Line 5 Size|6544|5|1
 36.1908 +			ImprintLineSize:6|Imprint Line 6 Size|6544|5|1
 36.1909 +			OverSigJustify|Over Signature Justification|6545|5|2
 36.1910 +			OverSigLineSize|Over Signature Line Size|6546|5|1
 36.1911 +			PONumber|Purchase Order|6547|0|10
 36.1912 +			ChargeShipping|Charge Shipping To|6548|5|1
 36.1913 +			ImprintUsage:1|Imprint Line 1 Usage|6549|5|1
 36.1914 +			ImprintUsage:2|Imprint Line 2 Usage|6549|5|1
 36.1915 +			ImprintUsage:3|Imprint Line 3 Usage|6549|5|1
 36.1916 +			ImprintUsage:4|Imprint Line 4 Usage|6549|5|1
 36.1917 +			ImprintUsage:5|Imprint Line 5 Usage|6549|5|1
 36.1918 +			ImprintUsage:6|Imprint Line 6 Usage|6549|5|1
 36.1919 +			Accent|Accent Figure|6550|0|5
 36.1920 +			Phantom|Phantom Figure|6551|0|5
 36.1921 +			SigFigure|Signature Figure|6552|0|5
 36.1922 +			CheckInitials|Check Initials|6553|0|3
 36.1923 +			ImprintCity|Imprint City|6554|0|30
 36.1924 +			ImprintState|Imprint State|6555|0|2
 36.1925 +			MailCity|Mailing City|6556|0|30
 36.1926 +			MailState|Mailing State|6557|0|2
 36.1927 +			MICRLine|MICR Line|6558|0|20
 36.1928 +			UserID|User ID|6559|5|4999
 36.1929 +			LastFreeOrder|Last Free Order|6560|3|null
 36.1930 +			Locator|Locator|6561|4|null
 36.1931 +		***|Loan Tracking|Loan Tracking
 36.1932 +			Type|Tracking Type|6892|5|99
 36.1933 +			ID|ID|6802|0|2
 36.1934 +			IDType|ID Type|6803|5|4
 36.1935 +			UserID|User ID|6804|5|4999
 36.1936 +			FMLastDate|Last FM Date|6805|3|null
 36.1937 +			CreationDate|Creation Date|6806|3|null
 36.1938 +			CreationTime|Creation Time|6807|5|2359
 36.1939 +			ExpireDate|Expiration Date|6808|3|null
 36.1940 +			TrackingCode|Tracking Code|6809|5|99
 36.1941 +			UserNumber1|User Number 01|6810|4|null
 36.1942 +			UserNumber2|User Number 02|6811|4|null
 36.1943 +			UserNumber3|User Number 03|6812|4|null
 36.1944 +			UserNumber4|User Number 04|6813|4|null
 36.1945 +			UserNumber5|User Number 05|6814|4|null
 36.1946 +			UserNumber6|User Number 06|6815|4|null
 36.1947 +			UserNumber7|User Number 07|6816|4|null
 36.1948 +			UserNumber8|User Number 08|6817|4|null
 36.1949 +			UserNumber9|User Number 09|6818|4|null
 36.1950 +			UserNumber10|User Number 10|6819|4|null
 36.1951 +			UserChar1|User Char   01|6820|0|40
 36.1952 +			UserChar2|User Char   02|6821|0|40
 36.1953 +			UserChar3|User Char   03|6822|0|40
 36.1954 +			UserChar4|User Char   04|6823|0|40
 36.1955 +			UserChar5|User Char   05|6824|0|40
 36.1956 +			UserChar6|User Char   06|6825|0|40
 36.1957 +			UserChar7|User Char   07|6826|0|40
 36.1958 +			UserChar8|User Char   08|6827|0|40
 36.1959 +			UserChar9|User Char   09|6828|0|40
 36.1960 +			UserChar10|User Char   10|6829|0|40
 36.1961 +			UserAmount1|User Amount 01|6830|7|null
 36.1962 +			UserAmount2|User Amount 02|6831|7|null
 36.1963 +			UserAmount3|User Amount 03|6832|7|null
 36.1964 +			UserAmount4|User Amount 04|6833|7|null
 36.1965 +			UserAmount5|User Amount 05|6834|7|null
 36.1966 +			UserAmount6|User Amount 06|6835|7|null
 36.1967 +			UserAmount7|User Amount 07|6836|7|null
 36.1968 +			UserAmount8|User Amount 08|6837|7|null
 36.1969 +			UserAmount9|User Amount 09|6838|7|null
 36.1970 +			UserAmount10|User Amount 10|6839|7|null
 36.1971 +			UserCode1|User Code   01|6840|5|9999
 36.1972 +			UserCode2|User Code   02|6841|5|9999
 36.1973 +			UserCode3|User Code   03|6842|5|9999
 36.1974 +			UserCode4|User Code   04|6843|5|9999
 36.1975 +			UserCode5|User Code   05|6844|5|9999
 36.1976 +			UserCode6|User Code   06|6845|5|9999
 36.1977 +			UserCode7|User Code   07|6846|5|9999
 36.1978 +			UserCode8|User Code   08|6847|5|9999
 36.1979 +			UserCode9|User Code   09|6848|5|9999
 36.1980 +			UserCode10|User Code   10|6849|5|9999
 36.1981 +			UserDate1|User Date   01|6850|3|null
 36.1982 +			UserDate2|User Date   02|6851|3|null
 36.1983 +			UserDate3|User Date   03|6852|3|null
 36.1984 +			UserDate4|User Date   04|6853|3|null
 36.1985 +			UserDate5|User Date   05|6854|3|null
 36.1986 +			UserDate6|User Date   06|6855|3|null
 36.1987 +			UserDate7|User Date   07|6856|3|null
 36.1988 +			UserDate8|User Date   08|6857|3|null
 36.1989 +			UserDate9|User Date   09|6858|3|null
 36.1990 +			UserDate10|User Date   10|6859|3|null
 36.1991 +			UserRate1|User Rate   01|6860|2|null
 36.1992 +			UserRate2|User Rate   02|6861|2|null
 36.1993 +			UserRate3|User Rate   03|6862|2|null
 36.1994 +			UserRate4|User Rate   04|6863|2|null
 36.1995 +			UserRate5|User Rate   05|6864|2|null
 36.1996 +			UserRate6|User Rate   06|6865|2|null
 36.1997 +			UserRate7|User Rate   07|6866|2|null
 36.1998 +			UserRate8|User Rate   08|6867|2|null
 36.1999 +			UserRate9|User Rate   09|6868|2|null
 36.2000 +			UserRate10|User Rate   10|6869|2|null
 36.2001 +			Locator|Locator|6870|4|null
 36.2002 +			UserNumber11|User Number 11|6871|4|null
 36.2003 +			UserNumber12|User Number 12|6872|4|null
 36.2004 +			UserNumber13|User Number 13|6873|4|null
 36.2005 +			UserNumber14|User Number 14|6874|4|null
 36.2006 +			UserNumber15|User Number 15|6875|4|null
 36.2007 +			UserNumber16|User Number 16|6876|4|null
 36.2008 +			UserNumber17|User Number 17|6877|4|null
 36.2009 +			UserNumber18|User Number 18|6878|4|null
 36.2010 +			UserNumber19|User Number 19|6879|4|null
 36.2011 +			UserNumber20|User Number 20|6880|4|null
 36.2012 +			UserChar11|User Char   11|6881|0|40
 36.2013 +			UserChar12|User Char   12|6882|0|40
 36.2014 +			UserChar13|User Char   13|6883|0|40
 36.2015 +			UserChar14|User Char   14|6884|0|40
 36.2016 +			UserChar15|User Char   15|6885|0|40
 36.2017 +			UserChar16|User Char   16|6886|0|40
 36.2018 +			UserChar17|User Char   17|6887|0|40
 36.2019 +			UserChar18|User Char   18|6888|0|40
 36.2020 +			UserChar19|User Char   19|6889|0|40
 36.2021 +			UserChar20|User Char   20|9400|0|40
 36.2022 +			UserAmount11|User Amount 11|9401|7|null
 36.2023 +			UserAmount12|User Amount 12|9402|7|null
 36.2024 +			UserAmount13|User Amount 13|9403|7|null
 36.2025 +			UserAmount14|User Amount 14|9404|7|null
 36.2026 +			UserAmount15|User Amount 15|9405|7|null
 36.2027 +			UserAmount16|User Amount 16|9406|7|null
 36.2028 +			UserAmount17|User Amount 17|9407|7|null
 36.2029 +			UserAmount18|User Amount 18|9408|7|null
 36.2030 +			UserAmount19|User Amount 19|9409|7|null
 36.2031 +			UserAmount20|User Amount 20|9410|7|null
 36.2032 +			UserCode11|User Code   11|9411|5|9999
 36.2033 +			UserCode12|User Code   12|9412|5|9999
 36.2034 +			UserCode13|User Code   13|9413|5|9999
 36.2035 +			UserCode14|User Code   14|9414|5|9999
 36.2036 +			UserCode15|User Code   15|9415|5|9999
 36.2037 +			UserCode16|User Code   16|9416|5|9999
 36.2038 +			UserCode17|User Code   17|9417|5|9999
 36.2039 +			UserCode18|User Code   18|9418|5|9999
 36.2040 +			UserCode19|User Code   19|9419|5|9999
 36.2041 +			UserCode20|User Code   20|9420|5|9999
 36.2042 +			UserDate11|User Date   11|9421|3|null
 36.2043 +			UserDate12|User Date   12|9422|3|null
 36.2044 +			UserDate13|User Date   13|9423|3|null
 36.2045 +			UserDate14|User Date   14|9424|3|null
 36.2046 +			UserDate15|User Date   15|9425|3|null
 36.2047 +			UserDate16|User Date   16|9426|3|null
 36.2048 +			UserDate17|User Date   17|9427|3|null
 36.2049 +			UserDate18|User Date   18|9428|3|null
 36.2050 +			UserDate19|User Date   19|9429|3|null
 36.2051 +			UserDate20|User Date   20|9430|3|null
 36.2052 +			UserRate11|User Rate   11|9431|2|null
 36.2053 +			UserRate12|User Rate   12|9432|2|null
 36.2054 +			UserRate13|User Rate   13|9433|2|null
 36.2055 +			UserRate14|User Rate   14|9434|2|null
 36.2056 +			UserRate15|User Rate   15|9435|2|null
 36.2057 +			UserRate16|User Rate   16|9436|2|null
 36.2058 +			UserRate17|User Rate   17|9437|2|null
 36.2059 +			UserRate18|User Rate   18|9438|2|null
 36.2060 +			UserRate19|User Rate   19|9439|2|null
 36.2061 +			UserRate20|User Rate   20|9440|2|null
 36.2062 +		***|Loan Note|Loan Note
 36.2063 +			ID|ID|2701|0|2
 36.2064 +			IDType|ID Type|2702|5|4
 36.2065 +			Code|Note Code|2714|5|199
 36.2066 +			Text:1|Text Line 01|2704|0|40
 36.2067 +			Text:2|Text Line 02|2704|0|40
 36.2068 +			Text:3|Text Line 03|2704|0|40
 36.2069 +			Text:4|Text Line 04|2704|0|40
 36.2070 +			Text:5|Text Line 05|2704|0|40
 36.2071 +			Text:6|Text Line 06|2704|0|40
 36.2072 +			Text:7|Text Line 07|2704|0|40
 36.2073 +			Text:8|Text Line 08|2704|0|40
 36.2074 +			Text:9|Text Line 09|2704|0|40
 36.2075 +			Text:10|Text Line 10|2704|0|40
 36.2076 +			Text:11|Text Line 11|2704|0|40
 36.2077 +			Text:12|Text Line 12|2704|0|40
 36.2078 +			UserID|User ID|2705|5|4999
 36.2079 +			EnterDate|Enter Date|2706|3|null
 36.2080 +			EnterTime|Enter Time|2707|5|2359
 36.2081 +			VoidFlag|Voided|2709|5|1
 36.2082 +			VoidedBy|Voided By|2710|5|4999
 36.2083 +			ExpirationDate|Expiration Date|2711|3|null
 36.2084 +			Locator|Locator|2719|4|null
 36.2085 +			TextLineCount|Text Line Count|2712|4|null
 36.2086 +		***|Loan Transaction|Loan Transaction
 36.2087 +			AccountNumber|Account Number|0|0|10
 36.2088 +			ID|ID|0|0|2
 36.2089 +			IDType|ID Type|0|5|1
 36.2090 +			CommentCode|Comment Code|0|5|1
 36.2091 +			TransferCode|Transfer Code|0|5|1
 36.2092 +			AdjustmentCode|Adjustment Code|0|5|1
 36.2093 +			RegECode|Reg E Code|0|5|1
 36.2094 +			RegDCheckCode|Reg D Check Code|0|5|1
 36.2095 +			RegDTransferCode|Reg D Transfer Code|0|5|1
 36.2096 +			VoidCode|Void Code|0|5|1
 36.2097 +			SubActionCode|Sub Action Code|0|0|1
 36.2098 +			SequenceNumber|Sequence Number|0|4|null
 36.2099 +			EffectiveDate|Effective Date|0|3|null
 36.2100 +			PostDate|Post Date|0|3|null
 36.2101 +			PostTime|Post Time|0|5|2359
 36.2102 +			UserNumber|User Number|0|5|4999
 36.2103 +			UserOverride|User Override|0|5|4999
 36.2104 +			SecurityLevels|Security Levels|0|5|9999
 36.2105 +			Description|Description|0|0|16
 36.2106 +			ActionCode|Action Code|0|0|1
 36.2107 +			SourceCode|Source Code|0|0|1
 36.2108 +			BalanceChange|Balance Change|0|7|null
 36.2109 +			Interest|Interest/Penalty|0|7|null
 36.2110 +			NewBalance|New Balance|0|7|null
 36.2111 +			FeeAmount|Fee Amount|0|7|null
 36.2112 +			EscrowAmount|Escrow Amount|0|7|null
 36.2113 +			LastTranDate|Last Tran Date|0|3|null
 36.2114 +			MaturityLoanDueDate|Maturity/Loan Due Date|0|3|null
 36.2115 +			Comment|Comment|0|0|42
 36.2116 +			Branch|Branch|0|5|9999
 36.2117 +			ConsoleNumber|Console Number|0|5|9999
 36.2118 +			BatchSequence|Batch Sequence|0|4|null
 36.2119 +			SalesTaxAmount|Sales Tax Amount|0|7|null
 36.2120 +			ActivityDate|Activity Date|0|3|null
 36.2121 +			BilledFeeAmount|Billed Fee Amount|0|7|null
 36.2122 +			ProcessorUser|Processor User|0|5|32767
 36.2123 +			MemberBranch|Member Branch|0|0|4
 36.2124 +			PrevAvailBalance|Prev Available Balance|0|7|null
 36.2125 +			SubSource|Sub Source Code|0|5|9999
 36.2126 +			SubSourceDescr|Sub Source Description|2460|1|40
 36.2127 +	***|EFT|EFT
 36.2128 +		Type|EFT Type|701|5|3
 36.2129 +		GroupNumber|Group Number|702|0|6
 36.2130 +		IDType|ID Type|703|5|1
 36.2131 +		ID|ID|704|0|2
 36.2132 +		Payee|Payee|705|0|10
 36.2133 +		Reference|Reference|706|0|40
 36.2134 +		EffectiveDate|Effective Date|707|3|null
 36.2135 +		ExpirationDate|Expiration Date|708|3|null
 36.2136 +		LastTranDate|Last Tran Date|709|3|null
 36.2137 +		LastTranAmount|Last Tran Amount|710|7|null
 36.2138 +		PostAmount|Post Amount|711|7|null
 36.2139 +		StandardAmount|Standard Amount|712|7|null
 36.2140 +		SpecificAmount|Specific Amount|713|7|null
 36.2141 +		AmountYTD|Amount YTD|714|7|null
 36.2142 +		CreditLimit|Credit Limit|715|7|null
 36.2143 +		CountyTd|Count YTD|716|5|9999
 36.2144 +		AudioID|Audio ID|717|0|2
 36.2145 +		Balance|Balance|718|7|null
 36.2146 +		FederalWithholding|Federal Withholding|719|7|null
 36.2147 +		StateWithholding|State Withholding|720|7|null
 36.2148 +		DQCount|DQ Count|721|5|9999
 36.2149 +		AmountCode|Amount Code|722|5|99
 36.2150 +		Status|Status|723|0|1
 36.2151 +		PostFREQ|Posting Freq|724|5|99
 36.2152 +		MatchCode1|Match Code 1|725|5|12
 36.2153 +		MatchID1|Match ID 1|726|0|22
 36.2154 +		MatchCode2|Match Code 2|727|5|12
 36.2155 +		MatchID2|Match ID 2|728|0|22
 36.2156 +		DistributionRatio|Distribution Ratio|729|5|22
 36.2157 +		MatchCode3|Match Code 3|730|5|12
 36.2158 +		MatchID3|Match ID 3|731|0|22
 36.2159 +		NextDate|Next Date|732|3|null
 36.2160 +		Frequency|Frequency|733|5|14
 36.2161 +		Day1|Day 1|734|5|31
 36.2162 +		Day2|Day 2|735|5|31
 36.2163 +		DeferDate|Defer Until|736|3|null
 36.2164 +		Locator|Locator|737|4|null
 36.2165 +		RegDCode|Regulation D Code|738|5|1
 36.2166 +		Reference2|Reference 2|739|0|40
 36.2167 +		PayeeName|Payee Name|780|1|40
 36.2168 +		PayeeExtraAddress|Payee Extra Address|781|1|40
 36.2169 +		PayeeStreet|Payee Street|782|1|40
 36.2170 +		PayeeCity|Payee City|783|1|40
 36.2171 +		PayeeState|Payee State|784|1|10
 36.2172 +		PayeeZipCode|Payee Zip Code|785|1|10
 36.2173 +		***|EFT Name|EFT Name
 36.2174 +			Type|Name Type|101|5|53
 36.2175 +			SubType|Name SubType|102|5|99
 36.2176 +			MailOverride|Mail Override|103|5|1
 36.2177 +			SSNOverride|SSN/TIN Override|104|5|3
 36.2178 +			SSNCertification|SSN/TIN Certification|105|5|2
 36.2179 +			SSNType|SSN/TIN Type|106|5|9
 36.2180 +			EffectiveDate|Effective  Date|107|3|null
 36.2181 +			ExpirationDate|Expiration Date|108|3|null
 36.2182 +			BirthDate|Birth Date|109|3|null
 36.2183 +			Title|Title|110|0|8
 36.2184 +			First|First Name|111|0|20
 36.2185 +			Middle|Middle Name|112|0|10
 36.2186 +			Last|Last Name|113|0|40
 36.2187 +			Suffix|Suffix|114|0|4
 36.2188 +			ExtraAddress|Extra Address|115|0|40
 36.2189 +			Street|Street|116|0|40
 36.2190 +			City|City|117|0|40
 36.2191 +			State|State|118|0|10
 36.2192 +			ZipCode|Zip Code|119|0|10
 36.2193 +			HomePhone|Home Phone|120|0|16
 36.2194 +			SSN|SSN/TIN|121|0|9
 36.2195 +			WorkPhone|Work Phone|122|0|16
 36.2196 +			LastFMDate|Last FM Date|123|3|null
 36.2197 +			CarrierRoute|Carrier Route|124|0|4
 36.2198 +			AddressType|Address Type|125|5|2
 36.2199 +			BeneficiaryPercent|Beneficiary Percent|126|2|null
 36.2200 +			IRSCorrection|IRS Correction|127|5|1
 36.2201 +			WorkPhoneExtension|Work Phone Ext|128|0|6
 36.2202 +			DeathDate|Death Date|130|3|null
 36.2203 +			ECOACode|ECOA Code|131|5|11
 36.2204 +			Country|Country|132|0|20
 36.2205 +			CountryCode|Country Code|133|0|2
 36.2206 +			Email|E-Mail Address|134|0|40
 36.2207 +			MothersMaidenName|Mother's Maiden Name|135|0|20
 36.2208 +			EmployerName|Current Employer|136|0|40
 36.2209 +			AltEmail|Alt E-Mail Address|137|0|40
 36.2210 +			Locator|Locator|138|4|null
 36.2211 +			MobilePhone|Mobile Phone|139|0|16
 36.2212 +			PagerNumber|Pager Number|140|0|16
 36.2213 +			USPersonFlag|U.S. Person Flag|141|5|1
 36.2214 +			IdentDocFlag:1|Documentary Flag 1|142|5|1
 36.2215 +			IdentDocFlag:2|Documentary Flag 2|142|5|1
 36.2216 +			IdentDocFlag:3|Documentary Flag 3|142|5|1
 36.2217 +			IdentIDType:1|ID Type 1|143|5|999
 36.2218 +			IdentIDType:2|ID Type 2|143|5|999
 36.2219 +			IdentIDType:3|ID Type 3|143|5|999
 36.2220 +			IdentIDDescription:1|ID Description 1|144|0|40
 36.2221 +			IdentIDDescription:2|ID Description 2|144|0|40
 36.2222 +			IdentIDDescription:3|ID Description 3|144|0|40
 36.2223 +			IdentIDNumber:1|ID Number 1|145|0|40
 36.2224 +			IdentIDNumber:2|ID Number 2|145|0|40
 36.2225 +			IdentIDNumber:3|ID Number 3|145|0|40
 36.2226 +			IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
 36.2227 +			IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
 36.2228 +			IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
 36.2229 +			IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
 36.2230 +			IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
 36.2231 +			IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
 36.2232 +			IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
 36.2233 +			IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
 36.2234 +			IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
 36.2235 +			Occupation|Occupation|149|0|20
 36.2236 +			UserChar1|User Char   01|150|0|40
 36.2237 +			UserChar2|User Char   02|151|0|40
 36.2238 +			UserChar3|User Char   03|152|0|40
 36.2239 +			UserChar4|User Char   04|153|0|40
 36.2240 +			UserAmount1|User Amount 01|154|7|null
 36.2241 +			UserAmount2|User Amount 02|155|7|null
 36.2242 +			UserDate1|User Date   01|156|3|null
 36.2243 +			UserDate2|User Date   02|157|3|null
 36.2244 +			LastAddrChgDate|Address Change Date|158|3|null
 36.2245 +			LastAddrVerifDate|Address Verify Date|159|3|null
 36.2246 +			CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
 36.2247 +			ShortName|Short Name|180|0|16
 36.2248 +			LongName|Long Name|181|1|40
 36.2249 +			License|License|129|0|20
 36.2250 +		***|EFT Ttransfer|EFT Transfer
 36.2251 +			Type|Transfer Type|901|5|8
 36.2252 +			AccountNumber|Account|902|0|10
 36.2253 +			IDType|ID Type|903|5|2
 36.2254 +			ID|ID|904|0|2
 36.2255 +			Amount|Amount|905|7|null
 36.2256 +			Percent|Percent|906|2|null
 36.2257 +			EffectiveDate|Effective  Date|907|3|null
 36.2258 +			ExpirationDate|Expiration Date|908|3|null
 36.2259 +			AmountOption|Amount Option|909|5|5
 36.2260 +			NextDate|Next Transfer Date|910|3|null
 36.2261 +			Frequency|Transfer Frequency|911|5|14
 36.2262 +			Day1|Transfer Day 1|912|5|31
 36.2263 +			Day2|Transfer Day 2|913|5|31
 36.2264 +			Locator|Locator|914|4|null
 36.2265 +			MinimumBalance|Minimum Balance|915|7|null
 36.2266 +			MaximumBalance|Maximum Balance|916|7|null
 36.2267 +			RegE|Reg E|917|5|1
 36.2268 +			LastDate|Last Transfer Date|918|3|null
 36.2269 +			PaymentType|Transfer Payment Type|919|5|1
 36.2270 +			SweepMinimum|Sweep Minimum|920|7|null
 36.2271 +		***|EFT AddendaInfo|EFT Addenda Info
 36.2272 +			Type|Addenda Info Type|9701|5|0
 36.2273 +			Locator|Locator|9702|4|null
 36.2274 +			Info:1|Info 1|9703|0|40
 36.2275 +			Info:2|Info 2|9703|0|40
 36.2276 +	***|Card|Card
 36.2277 +		Number|Card Number|801|0|20
 36.2278 +		Suffix|Card Suffix|802|0|2
 36.2279 +		Type|Card Type|803|5|99
 36.2280 +		NameType|Name Type|804|5|2
 36.2281 +		Status|Card Status|805|5|2
 36.2282 +		IssueCode|Issue Code|806|5|99
 36.2283 +		ReIssueCode|Reissue Code|807|5|4
 36.2284 +		IssueDate|Issue Date|808|3|null
 36.2285 +		EffectiveDate|Effective Date|809|3|null
 36.2286 +		ExpirationDate|Expiration Date|810|3|null
 36.2287 +		LimitAmount|Limit Amount|811|7|null
 36.2288 +		LimitDays|Limit Days|812|5|9999
 36.2289 +		UsageLimit|ATM Usage Limit|813|7|null
 36.2290 +		UsageAmount|ATM Usage Amount|814|7|null
 36.2291 +		UsageDate|Usage Date|815|3|null
 36.2292 +		BlockCode|Block Code|816|0|1
 36.2293 +		RecLassCode|Reclass Code|817|0|1
 36.2294 +		PinActual|PIN Actual|818|4|null
 36.2295 +		PinOffset|PIN Offset|819|4|null
 36.2296 +		PinRetries|PIN Retries|820|5|9999
 36.2297 +		POSLimit|POS Limit|821|7|null
 36.2298 +		POSAmount|POS Amount|822|7|null
 36.2299 +		MiscLimit|Misc Limit|823|7|null
 36.2300 +		MiscAmount|Misc Amount|824|7|null
 36.2301 +		ReIssueMonths|Reissue Months|825|5|99
 36.2302 +		SavID|Sav ID|826|0|2
 36.2303 +		ChkID|Chk ID|827|0|2
 36.2304 +		LocID|LOC ID|828|0|2
 36.2305 +		MiscID:1|Misc ID 1|829|0|2
 36.2306 +		MiscID:2|Misc ID 2|829|0|2
 36.2307 +		MiscID:3|Misc ID 3|829|0|2
 36.2308 +		DepLimit|Dep Limit|830|7|null
 36.2309 +		DepAmount|Dep Amount|831|7|null
 36.2310 +		ActiveDate|Activation Date|832|3|null
 36.2311 +		PrevExpirationDate|Prev Expiration Date|833|3|null
 36.2312 +		PrevNumber|Prev Number|834|0|20
 36.2313 +		PrevSuffix|Prev Card Suffix|835|0|2
 36.2314 +		PrevPinActual|Prev PIN Actual|836|4|null
 36.2315 +		PrevPinOffset|Prev PIN Offset|837|4|null
 36.2316 +		WarningCode:1|Warning 1 Code|838|5|99
 36.2317 +		WarningCode:2|Warning 2 Code|838|5|99
 36.2318 +		WarningCode:3|Warning 3 Code|838|5|99
 36.2319 +		WarningCode:4|Warning 4 Code|838|5|99
 36.2320 +		WarningCode:5|Warning 5 Code|838|5|99
 36.2321 +		WarningCode:6|Warning 6 Code|838|5|99
 36.2322 +		WarningCode:7|Warning 7 Code|838|5|99
 36.2323 +		WarningCode:8|Warning 8 Code|838|5|99
 36.2324 +		WarningExpiration:1|Warning 1 Expiration|839|3|null
 36.2325 +		WarningExpiration:2|Warning 2 Expiration|839|3|null
 36.2326 +		WarningExpiration:3|Warning 3 Expiration|839|3|null
 36.2327 +		WarningExpiration:4|Warning 4 Expiration|839|3|null
 36.2328 +		WarningExpiration:5|Warning 5 Expiration|839|3|null
 36.2329 +		WarningExpiration:6|Warning 6 Expiration|839|3|null
 36.2330 +		WarningExpiration:7|Warning 7 Expiration|839|3|null
 36.2331 +		WarningExpiration:8|Warning 8 Expiration|839|3|null
 36.2332 +		Service:1|Service 1|840|5|99
 36.2333 +		Service:2|Service 2|840|5|99
 36.2334 +		Service:3|Service 3|840|5|99
 36.2335 +		Service:4|Service 4|840|5|99
 36.2336 +		Service:5|Service 5|840|5|99
 36.2337 +		Service:6|Service 6|840|5|99
 36.2338 +		Service:7|Service 7|840|5|99
 36.2339 +		Service:8|Service 8|840|5|99
 36.2340 +		AuthLimit|Auth Limit|841|7|null
 36.2341 +		AuthAmount|Auth Amount|842|7|null
 36.2342 +		AuthCountLimit|Auth Count Limit|843|5|9999
 36.2343 +		AuthCount|Auth Count|844|5|9999
 36.2344 +		ATMCountLimit|ATM Count Limit|845|5|9999
 36.2345 +		ATMCount|ATM Count|846|5|9999
 36.2346 +		POSCountLimit|POS Count Limit|847|5|9999
 36.2347 +		POSCount|POS Count|848|5|9999
 36.2348 +		MiscCountLimit|Misc Count Limit|849|5|9999
 36.2349 +		MiscCount|Misc Count|850|5|9999
 36.2350 +		CredDebLimit|Credit/Debit Limit|851|7|null
 36.2351 +		CredDebAmount|Credit/Debit Amount|852|7|null
 36.2352 +		CredDebCountLimit|Credit/Debit Count Limit|853|5|9999
 36.2353 +		CredDebCount|Credit/Debit Count|854|5|9999
 36.2354 +		FeeCount:1|Fee Count 1|855|5|9999
 36.2355 +		FeeCount:2|Fee Count 2|855|5|9999
 36.2356 +		FeeCount:3|Fee Count 3|855|5|9999
 36.2357 +		FeeCount:4|Fee Count 4|855|5|9999
 36.2358 +		CreditCardID|Credit Card Loan ID|856|0|2
 36.2359 +		SingleUsageMax|Single Usage Max|857|7|null
 36.2360 +		WDCheckMax|Maximum Check W/D|858|7|null
 36.2361 +		WDCheckLimit|Check W/D Limit|859|7|null
 36.2362 +		WDCheckAmount|Check W/D Amount|860|7|null
 36.2363 +		WDCheckCountLimit|Check W/D Count Limit|861|5|9999
 36.2364 +		WDCheckCount|Check W/D Count|862|5|9999
 36.2365 +		XferMax|Maximum Transfer|863|7|null
 36.2366 +		XferLimit|Transfer Limit|864|7|null
 36.2367 +		XferAmount|Transfer Amount|865|7|null
 36.2368 +		XferCountLimit|Transfer Count Limit|866|5|9999
 36.2369 +		XferCount|Transfer Count|867|5|9999
 36.2370 +		BillPayMax|Maximum Bill Pmt|868|7|null
 36.2371 +		BillPayLimit|Bill Pmt Limit|869|7|null
 36.2372 +		BillPayAmount|Bill Pmt Amount|870|7|null
 36.2373 +		BillPayCountLimit|Bill Pmt Count Limit|871|5|9999
 36.2374 +		BillPayCount|Bill Pmt Count|872|5|9999
 36.2375 +		DepMax|Maximum Deposit|873|7|null
 36.2376 +		DepCountLimit|Deposit Count Limit|874|5|9999
 36.2377 +		DepCount|Deposit Count|875|5|9999
 36.2378 +		PrevActivationDate|Prev Activation Date|876|3|null
 36.2379 +		ExtraEmBoss|Extra Emboss Line|877|0|26
 36.2380 +		CloseDate|Close Date|878|3|null
 36.2381 +		StatusReason|Status Reason|879|5|199
 36.2382 +		PinOrderDate|PIN Order Date|880|3|null
 36.2383 +		Locator|Locator|881|4|null
 36.2384 +		Description|Description|882|0|30
 36.2385 +		LastAddrChgDate|Last Address Change|883|3|null
 36.2386 +		***|Card Name|Card Name
 36.2387 +			Type|Name Type|101|5|53
 36.2388 +			SubType|Name SubType|102|5|99
 36.2389 +			MailOverride|Mail Override|103|5|1
 36.2390 +			SSNOverride|SSN/TIN Override|104|5|3
 36.2391 +			SSNCertification|SSN/TIN Certification|105|5|2
 36.2392 +			SSNType|SSN/TIN Type|106|5|9
 36.2393 +			EffectiveDate|Effective  Date|107|3|null
 36.2394 +			ExpirationDate|Expiration Date|108|3|null
 36.2395 +			BirthDate|Birth Date|109|3|null
 36.2396 +			Title|Title|110|0|8
 36.2397 +			First|First Name|111|0|20
 36.2398 +			Middle|Middle Name|112|0|10
 36.2399 +			Last|Last Name|113|0|40
 36.2400 +			Suffix|Suffix|114|0|4
 36.2401 +			ExtraAddress|Extra Address|115|0|40
 36.2402 +			Street|Street|116|0|40
 36.2403 +			City|City|117|0|40
 36.2404 +			State|State|118|0|10
 36.2405 +			ZipCode|Zip Code|119|0|10
 36.2406 +			HomePhone|Home Phone|120|0|16
 36.2407 +			SSN|SSN/TIN|121|0|9
 36.2408 +			WorkPhone|Work Phone|122|0|16
 36.2409 +			LastFMDate|Last FM Date|123|3|null
 36.2410 +			CarrierRoute|Carrier Route|124|0|4
 36.2411 +			AddressType|Address Type|125|5|2
 36.2412 +			BeneficiaryPercent|Beneficiary Percent|126|2|null
 36.2413 +			IRSCorrection|IRS Correction|127|5|1
 36.2414 +			WorkPhoneExtension|Work Phone Ext|128|0|6
 36.2415 +			DeathDate|Death Date|130|3|null
 36.2416 +			ECOACode|ECOA Code|131|5|11
 36.2417 +			Country|Country|132|0|20
 36.2418 +			CountryCode|Country Code|133|0|2
 36.2419 +			Email|E-Mail Address|134|0|40
 36.2420 +			MothersMaidenName|Mother's Maiden Name|135|0|20
 36.2421 +			EmployerName|Current Employer|136|0|40
 36.2422 +			AltEmail|Alt E-Mail Address|137|0|40
 36.2423 +			Locator|Locator|138|4|null
 36.2424 +			MobilePhone|Mobile Phone|139|0|16
 36.2425 +			PagerNumber|Pager Number|140|0|16
 36.2426 +			USPersonFlag|U.S. Person Flag|141|5|1
 36.2427 +			IdentDocFlag:1|Documentary Flag 1|142|5|1
 36.2428 +			IdentDocFlag:2|Documentary Flag 2|142|5|1
 36.2429 +			IdentDocFlag:3|Documentary Flag 3|142|5|1
 36.2430 +			IdentIDType:1|ID Type 1|143|5|999
 36.2431 +			IdentIDType:2|ID Type 2|143|5|999
 36.2432 +			IdentIDType:3|ID Type 3|143|5|999
 36.2433 +			IdentIDDescription:1|ID Description 1|144|0|40
 36.2434 +			IdentIDDescription:2|ID Description 2|144|0|40
 36.2435 +			IdentIDDescription:3|ID Description 3|144|0|40
 36.2436 +			IdentIDNumber:1|ID Number 1|145|0|40
 36.2437 +			IdentIDNumber:2|ID Number 2|145|0|40
 36.2438 +			IdentIDNumber:3|ID Number 3|145|0|40
 36.2439 +			IdentIDIssueDate:1|ID Issuance Date 1|146|3|null
 36.2440 +			IdentIDIssueDate:2|ID Issuance Date 2|146|3|null
 36.2441 +			IdentIDIssueDate:3|ID Issuance Date 3|146|3|null
 36.2442 +			IdentIDExpireDate:1|ID Expiration Date 1|147|3|null
 36.2443 +			IdentIDExpireDate:2|ID Expiration Date 2|147|3|null
 36.2444 +			IdentIDExpireDate:3|ID Expiration Date 3|147|3|null
 36.2445 +			IdentIDVerifyDate:1|ID Verification Date 1|148|3|null
 36.2446 +			IdentIDVerifyDate:2|ID Verification Date 2|148|3|null
 36.2447 +			IdentIDVerifyDate:3|ID Verification Date 3|148|3|null
 36.2448 +			Occupation|Occupation|149|0|20
 36.2449 +			UserChar1|User Char   01|150|0|40
 36.2450 +			UserChar2|User Char   02|151|0|40
 36.2451 +			UserChar3|User Char   03|152|0|40
 36.2452 +			UserChar4|User Char   04|153|0|40
 36.2453 +			UserAmount1|User Amount 01|154|7|null
 36.2454 +			UserAmount2|User Amount 02|155|7|null
 36.2455 +			UserDate1|User Date   01|156|3|null
 36.2456 +			UserDate2|User Date   02|157|3|null
 36.2457 +			LastAddrChgDate|Address Change Date|158|3|null
 36.2458 +			LastAddrVerifDate|Address Verify Date|159|3|null
 36.2459 +			CreditReportConsumerInfo|Credit Report Consumer Info|160|0|2
 36.2460 +			ShortName|Short Name|180|0|16
 36.2461 +			LongName|Long Name|181|1|40
 36.2462 +			License|License|129|0|20
 36.2463 +		***|Card Note|Card Note
 36.2464 +			ID|ID|2701|0|2
 36.2465 +			IDType|ID Type|2702|5|4
 36.2466 +			Code|Note Code|2717|5|199
 36.2467 +			Text:1|Text Line 01|2704|0|40
 36.2468 +			Text:2|Text Line 02|2704|0|40
 36.2469 +			Text:3|Text Line 03|2704|0|40
 36.2470 +			Text:4|Text Line 04|2704|0|40
 36.2471 +			Text:5|Text Line 05|2704|0|40
 36.2472 +			Text:6|Text Line 06|2704|0|40
 36.2473 +			Text:7|Text Line 07|2704|0|40
 36.2474 +			Text:8|Text Line 08|2704|0|40
 36.2475 +			Text:9|Text Line 09|2704|0|40
 36.2476 +			Text:10|Text Line 10|2704|0|40
 36.2477 +			Text:11|Text Line 11|2704|0|40
 36.2478 +			Text:12|Text Line 12|2704|0|40
 36.2479 +			UserID|User ID|2705|5|4999
 36.2480 +			EnterDate|Enter Date|2706|3|null
 36.2481 +			EnterTime|Enter Time|2707|5|2359
 36.2482 +			VoidFlag|Voided|2709|5|1
 36.2483 +			VoidedBy|Voided By|2710|5|4999
 36.2484 +			ExpirationDate|Expiration Date|2711|3|null
 36.2485 +			Locator|Locator|2719|4|null
 36.2486 +			TextLineCount|Text Line Count|2712|4|null
 36.2487 +		***|Card Access|Card Access
 36.2488 +			AccessType|Access Type|6701|5|99
 36.2489 +			AccountNumber|Account Number|6702|0|10
 36.2490 +			IDType|ID Type|6703|5|2
 36.2491 +			ID|ID|6704|0|2
 36.2492 +			EnableWithdrawal|Enable Withdrawals|6705|5|1
 36.2493 +			EnableDeposit|Enable Deposits|6706|5|1
 36.2494 +			EnableInquiry|Enable Inquiries|6707|5|1
 36.2495 +			Locator|Locator|6708|4|null
 36.2496 +			EnableFM|Enable FM|6709|5|1
 36.2497 +			Qualifier|Qualifier|6710|0|3
 36.2498 +	***|LoanApp|Application
 36.2499 +		ID|Application ID|1601|0|2
 36.2500 +		Type|Application Type|1602|5|14
 36.2501 +		SubType|Sub Type|1603|5|99
 36.2502 +		FormType|Form Type|1604|5|9
 36.2503 +		Branch|Branch|1605|5|9999
 36.2504 +		LastFMDate|Last FM Date|1606|3|null
 36.2505 +		CreationDate|Creation Date|1607|3|null
 36.2506 +		EffectiveDate|Effective Date|1608|3|null
 36.2507 +		ExpirationDate|Expiration Date|1609|3|null
 36.2508 +		ApplicationDate|Application Date|1610|3|null
 36.2509 +		DenialReason:1|Denial Reason 1|1611|5|99
 36.2510 +		DenialReason:2|Denial Reason 2|1611|5|99
 36.2511 +		DenialReason:3|Denial Reason 3|1611|5|99
 36.2512 +		DenialReason:4|Denial Reason 4|1611|5|99
 36.2513 +		DenialReason:5|Denial Reason 5|1611|5|99
 36.2514 +		DenialDate|Denial Date|1612|3|null
 36.2515 +		DebtRatioType:1|Debt Ratio 1 Type|1613|5|9
 36.2516 +		DebtRatioType:2|Debt Ratio 2 Type|1613|5|9
 36.2517 +		DebtRatioType:3|Debt Ratio 3 Type|1613|5|9
 36.2518 +		DebtRatioType:4|Debt Ratio 4 Type|1613|5|9
 36.2519 +		DebtRatioType:5|Debt Ratio 5 Type|1613|5|9
 36.2520 +		DebtRatio:1|Debt Ratio 1|1614|2|null
 36.2521 +		DebtRatio:2|Debt Ratio 2|1614|2|null
 36.2522 +		DebtRatio:3|Debt Ratio 3|1614|2|null
 36.2523 +		DebtRatio:4|Debt Ratio 4|1614|2|null
 36.2524 +		DebtRatio:5|Debt Ratio 5|1614|2|null
 36.2525 +		CreditsCoreType|Credit Score Type|1615|5|9
 36.2526 +		CreditsCore|Credit Score|1616|4|null
 36.2527 +		CUTotalsHares|CU Share Bal|1617|7|null
 36.2528 +		CUTotalDrafts|CU Draft Bal|1618|7|null
 36.2529 +		CUTotalCertiras|CU Cert IRA Bal|1619|7|null
 36.2530 +		CUTotalOpenEndLoans|CU Opn End Loan Bal|1620|7|null
 36.2531 +		CUTotalCloseDenDloans|CU Cls End Loan Bal|1621|7|null
 36.2532 +		CUTotalLocLoans|CU LOC Loan Bal|1622|7|null
 36.2533 +		CUTotalCreditCardLoans|CU Cred Card Ln Bal|1623|7|null
 36.2534 +		CUTotalCreditLimit|CU Total Credit Lim|1624|7|null
 36.2535 +		CUTotalOpenEndPaymentS|CU Open End Pmts|1625|7|null
 36.2536 +		CUTotalCloseDenDpayments|CU Closed End Pmts|1626|7|null
 36.2537 +		CUTotalLocPaymentS|CU LOC Pmts|1627|7|null
 36.2538 +		CUTotalCredCardPaymentS|CU Credit Card Pmts|1628|7|null
 36.2539 +		TotalIncome|Total Monthly Inc|1629|7|null
 36.2540 +		TotalExpenses|Total Monthly Exp|1630|7|null
 36.2541 +		TotalAssetS|Total Assets|1631|7|null
 36.2542 +		TotalLiabilities|Total Liabilities|1632|7|null
 36.2543 +		TotalCreditLimits|Total Credit Limit|1633|7|null
 36.2544 +		GrossMonthlyPay1|Gross Monthly Pay 1|1634|7|null
 36.2545 +		NetMonthlyPay1|Net Monthly Pay 1|1635|7|null
 36.2546 +		GrossMonthlyPay2|Gross Monthly Pay 2|1636|7|null
 36.2547 +		NetMonthlyPay2|Net Monthly Pay 2|1637|7|null
 36.2548 +		LoanType|Loan Type|1304|5|9999
 36.2549 +		ECOACode|ECOA Code|1320|5|11
 36.2550 +		ApprovalCode|Approval Code|1317|5|4999
 36.2551 +		ApprovalDate|Approval Date|1641|3|null
 36.2552 +		ProcessorCode|Processor Code|1642|5|4999
 36.2553 +		ExistingLoanID|Existing Loan ID|1643|0|2
 36.2554 +		ExistingLoanBalance|Existing Loan Bal|1644|7|null
 36.2555 +		PaymentMethod|Payment Method|1323|5|9
 36.2556 +		PaymentFrequency|Payment Frequency|1325|5|14
 36.2557 +		DueDay1|Due Day 1|1335|5|31
 36.2558 +		DueDay2|Due Day 2|1336|5|31
 36.2559 +		TransferAccountNumber|Transfer Account|1649|0|10
 36.2560 +		TransferAccountID|Transfer ID|1650|0|2
 36.2561 +		CollateralCode|Collateral Code|1315|5|999
 36.2562 +		CollateralDate|Collateral Date|1316|3|null
 36.2563 +		SecuredCode|Secured Code|1366|5|3
 36.2564 +		Insurance1chosen|Single Credit Life Insurance|1654|5|1
 36.2565 +		Insurance2chosen|Joint Credit Life Insurance|1655|5|1
 36.2566 +		Insurance3chosen|Credit Disability Insurance|1656|5|1
 36.2567 +		InsuranceType|Insurance Type|1368|5|99
 36.2568 +		InsuranceMax|Max Ins Balance|1369|7|null
 36.2569 +		PurposeCode|Purpose|1319|5|999
 36.2570 +		CreditLimit|Loan Credit Limit|1361|7|null
 36.2571 +		LimitExpirationDate|Cred Lim Exp Date|1380|3|null
 36.2572 +		LoanDescription|Description|1377|0|30
 36.2573 +		BorrowDate|Borrow Date|1663|3|null
 36.2574 +		FirstDueDate|First Due Date|1664|3|null
 36.2575 +		Payment|Payment Amount|1329|7|null
 36.2576 +		LoanAmount|Loan Amount|1666|7|null
 36.2577 +		TermMonths|Loan Term in Months|1667|5|999
 36.2578 +		BalloonDate|Balloon Date|1338|3|null
 36.2579 +		InterestRate|Interest Rate|1346|2|null
 36.2580 +		UserNumber1|User Number 01|1670|4|null
 36.2581 +		UserNumber2|User Number 02|1671|4|null
 36.2582 +		UserRate1|User Rate   01|1672|2|null
 36.2583 +		UserRate2|LTV|1673|2|null
 36.2584 +		UserChar1|CredRep Locator|1674|0|10
 36.2585 +		UserChar2|Co-Signer Application|1675|0|10
 36.2586 +		UserChar3|User Char   03|1676|0|10
 36.2587 +		UserChar4|User Char   04|1677|0|10
 36.2588 +		UserAmount1|Disposable Income|1678|7|null
 36.2589 +		UserAmount2|User Amount 02|1679|7|null
 36.2590 +		UserAmount3|User Amount 03|1680|7|null
 36.2591 +		UserAmount4|User Amount 04|1681|7|null
 36.2592 +		UserAmount5|User Amount 05|1682|7|null
 36.2593 +		UserAmount6|User Amount 06|1683|7|null
 36.2594 +		UserAmount7|User Amount 07|1684|7|null
 36.2595 +		UserAmount8|User Amount 08|1685|7|null
 36.2596 +		UserAmount9|User Amount 09|1686|7|null
 36.2597 +		UserAmount10|User Amount 10|1687|7|null
 36.2598 +		UserCode1|User Code   01|1688|5|9999
 36.2599 +		UserCode2|2nd Mortgage|1689|5|9999
 36.2600 +		UserCode3|Payment Count|1690|5|9999
 36.2601 +		UserCode4|Year|1691|5|9999
 36.2602 +		UserCode5|User Code   05|1692|5|9999
 36.2603 +		UserCode6|User Code   06|1693|5|9999
 36.2604 +		UserCode7|User Code   07|1694|5|9999
 36.2605 +		UserCode8|User Code   08|1695|5|9999
 36.2606 +		UserCode9|User Code   09|1696|5|9999
 36.2607 +		UserCode10|User Code   10|1697|5|9999
 36.2608 +		UserDate1|User Date   01|1698|3|null
 36.2609 +		UserDate2|User Date   02|1699|3|null
 36.2610 +		UserDate3|User Date   03|1700|3|null
 36.2611 +		UserDate4|User Date   04|1701|3|null
 36.2612 +		UserDate5|User Date   05|1702|3|null
 36.2613 +		UserDate6|User Date   06|1703|3|null
 36.2614 +		UserDate7|User Date   07|1704|3|null
 36.2615 +		UserDate8|User Date   08|1705|3|null
 36.2616 +		UserDate9|User Date   09|1706|3|null
 36.2617 +		UserDate10|User Date   10|1707|3|null
 36.2618 +		Event|Event Number|1708|5|50
 36.2619 +		EventDate|Event Date|1709|3|null
 36.2620 +		CancellationDate|Cancellation Date|1710|3|null
 36.2621 +		DecisionCode|Decision Code|1711|5|4999
 36.2622 +		DecisionDate|Decision Date|1712|3|null
 36.2623 +		InSurabilitycode|Insurability Code|1713|5|99
 36.2624 +		CounteredOrigAmt|Countered Orig Amt|1714|7|null
 36.2625 +		CounterOfferExpireDate|Counter Offer Exp Date|1715|3|null
 36.2626 +		SecondAppRequest|2nd App Request|1716|0|16
 36.2627 +		SecondAppPayment|2nd App Payment|1717|7|null
 36.2628 +		ThirdAppRequest|3rd App Request|1718|0|16
 36.2629 +		ThirdAppPayment|3rd App Payment|1719|7|null
 36.2630 +		CUTotalsAcctNumber:1|Other Account 1|1720|0|10
 36.2631 +		CUTotalsAcctNumber:2|Other Account 2|1720|0|10
 36.2632 +		CUTotalsAcctNumber:3|Other Account 3|1720|0|10
 36.2633 +		CUTotalsAcctNumber:4|Other Account 4|1720|0|10
 36.2634 +		CUTotalsAcctNumber:5|Other Account 5|1720|0|10
 36.2635 +		LoanReference|Loan Ref|1721|0|20
 36.2636 +		LoanMaturityDate|Loan Maturity Date|1722|3|null
 36.2637 +		InfoRequestDate|Info Request Date|1723|3|null
 36.2638 +		ClosingDate|Closing Date|1724|3|null
 36.2639 +		ApprovalAmount|Approval Amount|1725|7|null
 36.2640 +		CreditBureau|Credit Bureau|1726|5|9
 36.2641 +		VIN|VIN|1727|0|20
 36.2642 +		CensusTract|Census Tract|1728|0|10
 36.2643 +		PendingDate|Pending Date|1729|3|null
 36.2644 +		SecondAppRequestAmt|2nd App Request Amt|1730|7|null
 36.2645 +		ThirdAppRequestAmt|3rd App Request Amt|1731|7|null
 36.2646 +		AppraisedAmount|Appraised Amount|1732|7|null
 36.2647 +		EscrowAmount|Escrow Amount|1733|7|null
 36.2648 +		EscrowID|Escrow ID|1734|0|2
 36.2649 +		SinglePremiumLife|Sgl Prem Life|1735|7|null
 36.2650 +		SinglePremiumDisability|Sgl Prem Disability|1736|7|null
 36.2651 +		NotePurgeDate|Note Purge Date|1737|3|null
 36.2652 +		BalloonAmount|Balloon Amount|1738|7|null
 36.2653 +		AppraisalOffset|Appraisal Offset|1739|7|null
 36.2654 +		PaymentSkips|Payment Skips|1740|5|9
 36.2655 +		PaymentSkipsTartDay|Payment Skip Start Day|1741|5|1231
 36.2656 +		FASB91Code|FASB 91 Code|1742|5|199
 36.2657 +		EffectiveAPR|Effective APR|1743|2|null
 36.2658 +		OriginalRate|Original Rate|1744|2|null
 36.2659 +		Unamortizedfees|Unamortized Fees|1745|7|null
 36.2660 +		RiskRate|Risk Rate|1746|2|null
 36.2661 +		DiscountRate|Discount Rate|1747|2|null
 36.2662 +		APR|APR|1748|2|null
 36.2663 +		PrepAidFinanceChg|Prepaid Finance Chg|1749|7|null
 36.2664 +		CompletedActions:1|Completed Action 01|1750|5|1
 36.2665 +		CompletedActions:2|Completed Action 02|1750|5|1
 36.2666 +		CompletedActions:3|Completed Action 03|1750|5|1
 36.2667 +		CompletedActions:4|Completed Action 04|1750|5|1
 36.2668 +		CompletedActions:5|Completed Action 05|1750|5|1
 36.2669 +		CompletedActions:6|Completed Action 06|1750|5|1
 36.2670 +		CompletedActions:7|Completed Action 07|1750|5|1
 36.2671 +		CompletedActions:8|Completed Action 08|1750|5|1
 36.2672 +		CompletedActions:9|Completed Action 09|1750|5|1
 36.2673 +		CompletedActions:10|Completed Action 10|1750|5|1
 36.2674 +		CompletedActions:11|Completed Action 11|1750|5|1
 36.2675 +		CompletedActions:12|Completed Action 12|1750|5|1
 36.2676 +		CompletedActions:13|Completed Action 13|1750|5|1
 36.2677 +		CompletedActions:14|Completed Action 14|1750|5|1
 36.2678 +		CompletedActions:15|Completed Action 15|1750|5|1
 36.2679 +		AmortizationSchd|Amortization Schedule|1751|5|9999
 36.2680 +		AmortizationSchdType|Amortize Schd Type|1752|5|1
 36.2681 +		CallItemsChd|Call Item Schedule|1753|5|9999
 36.2682 +		CallItemsChdType|Call Item Schd Type|1754|5|1
 36.2683 +		BureausCore:1|Bureau Score Experian|1755|4|null
 36.2684 +		BureausCore:2|Bureau Score Equifax|1755|4|null
 36.2685 +		BureausCore:3|Bureau Score Transunion|1755|4|null
 36.2686 +		BureausCore:4|Bureau Score ChexSystems|1755|4|null
 36.2687 +		CBILocator:1|CBI Locator1|1756|4|null
 36.2688 +		CBILocator:2|CBI Locator2|1756|4|null
 36.2689 +		CBILocator:3|CBI Locator3|1756|4|null
 36.2690 +		CBILocator:4|CBI Locator4|1756|4|null
 36.2691 +		CBILocator:5|CBI Locator5|1756|4|null
 36.2692 +		CBILocator:6|CBI Locator6|1756|4|null
 36.2693 +		PrefLocator|Preference Locator|1757|4|null
 36.2694 +		PutItemsChd|Put Item Schedule|1758|5|9999
 36.2695 +		PutItemsChdType|Put Item Schd Type|1759|5|1
 36.2696 +		IndirectDealerNum|Indirect Dealer Number|1547|0|10
 36.2697 +		IndirectPlanID|Reserve Plan ID|1548|0|2
 36.2698 +		LoanToValueRatio|Loan To Value|1820|2|null
 36.2699 +		***|LoanApp Person|Application Person
 36.2700 +			PersonCode|Person Code|1901|5|9
 36.2701 +			AccountNumber|Member Account Number|1902|0|10
 36.2702 +			BirthDate|Birthdate|1903|3|null
 36.2703 +			MaritalStatus|Marital Status|1904|5|8
 36.2704 +			EducationYears|Education Years|1905|5|99
 36.2705 +			Sex|Sex|1906|0|1
 36.2706 +			Title|Name Title|1907|0|8
 36.2707 +			First|First Name|1908|0|20
 36.2708 +			Middle|Middle Name|1909|0|10
 36.2709 +			Last|Last Name|1910|0|40
 36.2710 +			Suffix|Name Suffix|1911|0|4
 36.2711 +			ExtraAddress|Extra Address|1912|0|40
 36.2712 +			Street|Street Address|1913|0|40
 36.2713 +			City|City|1914|0|40
 36.2714 +			State|State|1915|0|10
 36.2715 +			ZipCode|Zip Code|1916|0|10
 36.2716 +			HomePhone|Home Phone|1917|0|16
 36.2717 +			WorkPhone|Work Phone|1918|0|16
 36.2718 +			WorkPhoneExtension|Work Phone Ext|1919|0|6
 36.2719 +			SSN|SSN/TIN|1920|0|9
 36.2720 +			PreviousAddress|Previous Address|1921|0|40
 36.2721 +			DependentCount|Dependent Count|1922|5|99
 36.2722 +			DependentAge:1|Dependent  1 Age|1923|5|99
 36.2723 +			DependentAge:2|Dependent  2 Age|1923|5|99
 36.2724 +			DependentAge:3|Dependent  3 Age|1923|5|99
 36.2725 +			DependentAge:4|Dependent  4 Age|1923|5|99
 36.2726 +			DependentAge:5|Dependent  5 Age|1923|5|99
 36.2727 +			DependentAge:6|Dependent  6 Age|1923|5|99
 36.2728 +			DependentAge:7|Dependent  7 Age|1923|5|99
 36.2729 +			DependentAge:8|Dependent  8 Age|1923|5|99
 36.2730 +			DependentAge:9|Dependent  9 Age|1923|5|99
 36.2731 +			DependentAge:10|Dependent 10 Age|1923|5|99
 36.2732 +			OtherCreditName|Other Credit Name|1926|0|20
 36.2733 +			DerogStatus:1|Derog Status 1|1927|5|99
 36.2734 +			DerogStatus:2|Derog Status 2|1927|5|99
 36.2735 +			DerogStatus:3|Derog Status 3|1927|5|99
 36.2736 +			DerogStatus:4|Derog Status 4|1927|5|99
 36.2737 +			DerogStatus:5|Derog Status 5|1927|5|99
 36.2738 +			DerogStatus:6|Derog Status 6|1927|5|99
 36.2739 +			DerogExplanation|Cosigner/Derog Expl|1928|0|40
 36.2740 +			EmploymentsTatus|Employment Status|1929|5|4
 36.2741 +			EmploymentReturnDate|Date Returning to Work|1930|3|null
 36.2742 +			CurrEmpName|Curr Employer Name|1931|0|40
 36.2743 +			CurrEmpAddress|Curr Employer Address|1932|0|40
 36.2744 +			CurrEmpStartDate|Curr Employ Start Date|1933|3|null
 36.2745 +			CurrEmpEndDate|Curr Employ End Date|1934|3|null
 36.2746 +			CurrEmpOccupation|Curr Occupation|1935|0|20
 36.2747 +			CurrEmpSupervisor|Curr Supervisor|1936|0|20
 36.2748 +			CurrEmpGrossMonthlyPay|Curr Gross Mo Pay|1937|7|null
 36.2749 +			CurrEmpNetMonthlyPay|Curr Net Mo Pay|1938|7|null
 36.2750 +			PrevEmpName|Prev Employer Name|1939|0|40
 36.2751 +			PrevEmpAddress|Prev Employer Address|1940|0|40
 36.2752 +			PrevEmpStartDate|Prev Employ Start Date|1941|3|null
 36.2753 +			PrevEmpEndDate|Prev Employ End Date|1942|3|null
 36.2754 +			PrevEmpOccupation|Prev Occupation|1943|0|20
 36.2755 +			PrevEmpSupervisor|Prev Supervisor|1944|0|20
 36.2756 +			PrevEmpGrossMonthlyPay|Prev Gross Mo Pay|1945|7|null
 36.2757 +			Ref1Code|Ref 1 Ref Code|1946|5|1
 36.2758 +			Ref1Name|Ref 1 Name|1947|0|40
 36.2759 +			Ref1Address|Ref 1 Address|1948|0|40
 36.2760 +			Ref1Phone|Ref 1 Phone|1949|0|16
 36.2761 +			Ref1Relationship|Ref 1 Relation|1950|0|10
 36.2762 +			Ref2Code|Ref 2 Ref Code|1946|5|1
 36.2763 +			Ref2Name|Ref 2 Name|1947|0|40
 36.2764 +			Ref2Address|Ref 2 Address|1948|0|40
 36.2765 +			Ref2Phone|Ref 2 Phone|1949|0|16
 36.2766 +			Ref2Relationship|Ref 2 Relation|1950|0|10
 36.2767 +			Ref3Code|Ref 3 Ref Code|1946|5|1
 36.2768 +			Ref3Name|Ref 3 Name|1947|0|40
 36.2769 +			Ref3Address|Ref 3 Address|1948|0|40
 36.2770 +			Ref3Phone|Ref 3 Phone|1949|0|16
 36.2771 +			Ref3Relationship|Ref 3 Relation|1950|0|10
 36.2772 +			MonthsCurrAddress|Months Current Address|1961|5|999
 36.2773 +			MonthsPrevAddress|Months Previous Address|1962|5|999
 36.2774 +			OwnRentCurrAddress|Own or Rent Curr Address|1963|5|4
 36.2775 +			OwnRentPrevAddress|Own or Rent Prev Address|1964|5|4
 36.2776 +			AddressType|Address Type|1965|5|2
 36.2777 +			Type|Type|1966|5|9
 36.2778 +			MothersMaidenName|Mother's Maiden Name|1967|0|20
 36.2779 +			Citizenship|Citizenship|1968|5|1
 36.2780 +			CurrEmpYearsEmp|Curr Years Employed|1969|5|99
 36.2781 +			CurrEmpMonthsEmp|Curr Months Employed|1970|5|999
 36.2782 +			PrevEmpYearsEmp|Prev Years Employed|1971|5|99
 36.2783 +			PrevEmpMonthsEmp|Prev Months Employed|1972|5|999
 36.2784 +			County|County|1973|0|40
 36.2785 +			Country|Country|1974|0|20
 36.2786 +			CountryCode|Country Code|1975|0|2
 36.2787 +			Email|E-Mail Address|1976|0|40
 36.2788 +			EmpHoursPerWeek|Employment Hours Per Week|1977|5|168
 36.2789 +			Judgement|Judgement|1978|5|1
 36.2790 +			Bankruptcy|Bankruptcy|1979|5|1
 36.2791 +			PastForeclosure|Past Foreclosure|1980|5|1
 36.2792 +			PastRepossession|Past Repossession|1981|5|1
 36.2793 +			PartyInLawsuit|Party in a Lawsuit|1982|5|1
 36.2794 +			IncomeMayDecline|Income Likely to Decline|1983|5|1
 36.2795 +			CosignOtherLoan|Cosigner on Another Loan|1984|5|1
 36.2796 +			CosignForWhom|Cosigner for Whom|1985|0|40
 36.2797 +			CosignTowHom|Cosigner to Whom|1986|0|40
 36.2798 +			Ref1AddressType|Ref 1 Address Type|1987|5|2
 36.2799 +			Ref2AddressType|Ref 2 Address Type|1987|5|2
 36.2800 +			Ref3AddressType|Ref 3 Address Type|1987|5|2
 36.2801 +			AltEmail|Alt E-Mail Address|1990|0|40
 36.2802 +			Locator|Locator|1991|4|null
 36.2803 +			MobilePhone|Mobile Phone|1992|0|16
 36.2804 +			PagerNumber|Pager Number|1993|0|16
 36.2805 +			USPersonFlag|U.S. Person Flag|1994|5|1
 36.2806 +			IdentDocFlag:1|Documentary Flag 1|1995|5|1
 36.2807 +			IdentDocFlag:2|Documentary Flag 2|1995|5|1
 36.2808 +			IdentDocFlag:3|Documentary Flag 3|1995|5|1
 36.2809 +			IdentIDType:1|ID Type 1|1996|5|999
 36.2810 +			IdentIDType:2|ID Type 2|1996|5|999
 36.2811 +			IdentIDType:3|ID Type 3|1996|5|999
 36.2812 +			IdentIDDescription:1|ID Description 1|1997|0|40
 36.2813 +			IdentIDDescription:2|ID Description 2|1997|0|40
 36.2814 +			IdentIDDescription:3|ID Description 3|1997|0|40
 36.2815 +			IdentIDNumber:1|ID Number 1|1998|0|40
 36.2816 +			IdentIDNumber:2|ID Number 2|1998|0|40
 36.2817 +			IdentIDNumber:3|ID Number 3|1998|0|40
 36.2818 +			IdentIDIssueDate:1|ID Issuance Date 1|1999|3|null
 36.2819 +			IdentIDIssueDate:2|ID Issuance Date 2|1999|3|null
 36.2820 +			IdentIDIssueDate:3|ID Issuance Date 3|1999|3|null
 36.2821 +			IdentIDExpireDate:1|ID Expiration Date 1|2001|3|null
 36.2822 +			IdentIDExpireDate:2|ID Expiration Date 2|2001|3|null
 36.2823 +			IdentIDExpireDate:3|ID Expiration Date 3|2001|3|null
 36.2824 +			IdentIDVerifyDate:1|ID Verification Date 1|2003|3|null
 36.2825 +			IdentIDVerifyDate:2|ID Verification Date 2|2003|3|null
 36.2826 +			IdentIDVerifyDate:3|ID Verification Date 3|2003|3|null
 36.2827 +			ShortName|Short Name|180|0|16
 36.2828 +			LongName|Long Name|181|1|40
 36.2829 +			DriversLic|Drivers License No|1924|0|20
 36.2830 +			DriversLicstate|Drivers License State|1925|0|2
 36.2831 +		***|LoanApp Finance|Application Finance
 36.2832 +			OwnerCode|Owner Code|2101|5|2
 36.2833 +			ItemType|Item Type|2102|0|2
 36.2834 +			Description|Item Desc/Creditor Name|2103|0|30
 36.2835 +			Address|Address|2104|0|40
 36.2836 +			Reference|Reference|2105|0|20
 36.2837 +			AssetValue|Asset Value|2106|7|null
 36.2838 +			MonthlyIncome|Monthly Income|2107|7|null
 36.2839 +			LiabilityStatus|Liability Status|2108|5|2
 36.2840 +			AssetStatus|Asset Status|2109|5|2
 36.2841 +			LiabilityBalance|Liability Balance|2110|7|null
 36.2842 +			MonthlyExpense|Monthly Expense|2111|7|null
 36.2843 +			CreditLimit|Credit Limit|2112|7|null
 36.2844 +			DebtRatioUseCode|Debt Ratio Code|2113|5|1
 36.2845 +			Type|Finance Type|2114|5|9
 36.2846 +			Locator|Locator|2115|4|null
 36.2847 +			InterestRate|Interest Rate|2116|2|null
 36.2848 +			UserPledgeCode|User Pledge Code|2117|5|9
 36.2849 +		***|LoanApp Tracking|Application Tracking
 36.2850 +			Type|Tracking Type|6893|5|99
 36.2851 +			ID|ID|6802|0|2
 36.2852 +			IDType|ID Type|6803|5|4
 36.2853 +			UserID|User ID|6804|5|4999
 36.2854 +			FMLastDate|Last FM Date|6805|3|null
 36.2855 +			CreationDate|Creation Date|6806|3|null
 36.2856 +			CreationTime|Creation Time|6807|5|2359
 36.2857 +			ExpireDate|Expiration Date|6808|3|null
 36.2858 +			TrackingCode|Tracking Code|6809|5|99
 36.2859 +			UserNumber1|User Number 01|6810|4|null
 36.2860 +			UserNumber2|User Number 02|6811|4|null
 36.2861 +			UserNumber3|User Number 03|6812|4|null
 36.2862 +			UserNumber4|User Number 04|6813|4|null
 36.2863 +			UserNumber5|User Number 05|6814|4|null
 36.2864 +			UserNumber6|User Number 06|6815|4|null
 36.2865 +			UserNumber7|User Number 07|6816|4|null
 36.2866 +			UserNumber8|User Number 08|6817|4|null
 36.2867 +			UserNumber9|User Number 09|6818|4|null
 36.2868 +			UserNumber10|User Number 10|6819|4|null
 36.2869 +			UserChar1|User Char   01|6820|0|40
 36.2870 +			UserChar2|User Char   02|6821|0|40
 36.2871 +			UserChar3|User Char   03|6822|0|40
 36.2872 +			UserChar4|User Char   04|6823|0|40
 36.2873 +			UserChar5|User Char   05|6824|0|40
 36.2874 +			UserChar6|User Char   06|6825|0|40
 36.2875 +			UserChar7|User Char   07|6826|0|40
 36.2876 +			UserChar8|User Char   08|6827|0|40
 36.2877 +			UserChar9|User Char   09|6828|0|40
 36.2878 +			UserChar10|User Char   10|6829|0|40
 36.2879 +			UserAmount1|User Amount 01|6830|7|null
 36.2880 +			UserAmount2|User Amount 02|6831|7|null
 36.2881 +			UserAmount3|User Amount 03|6832|7|null
 36.2882 +			UserAmount4|User Amount 04|6833|7|null
 36.2883 +			UserAmount5|User Amount 05|6834|7|null
 36.2884 +			UserAmount6|User Amount 06|6835|7|null
 36.2885 +			UserAmount7|User Amount 07|6836|7|null
 36.2886 +			UserAmount8|User Amount 08|6837|7|null
 36.2887 +			UserAmount9|User Amount 09|6838|7|null
 36.2888 +			UserAmount10|User Amount 10|6839|7|null
 36.2889 +			UserCode1|User Code   01|6840|5|9999
 36.2890 +			UserCode2|User Code   02|6841|5|9999
 36.2891 +			UserCode3|User Code   03|6842|5|9999
 36.2892 +			UserCode4|User Code   04|6843|5|9999
 36.2893 +			UserCode5|User Code   05|6844|5|9999
 36.2894 +			UserCode6|User Code   06|6845|5|9999
 36.2895 +			UserCode7|User Code   07|6846|5|9999
 36.2896 +			UserCode8|User Code   08|6847|5|9999
 36.2897 +			UserCode9|User Code   09|6848|5|9999
 36.2898 +			UserCode10|User Code   10|6849|5|9999
 36.2899 +			UserDate1|User Date   01|6850|3|null
 36.2900 +			UserDate2|User Date   02|6851|3|null
 36.2901 +			UserDate3|User Date   03|6852|3|null
 36.2902 +			UserDate4|User Date   04|6853|3|null
 36.2903 +			UserDate5|User Date   05|6854|3|null
 36.2904 +			UserDate6|User Date   06|6855|3|null
 36.2905 +			UserDate7|User Date   07|6856|3|null
 36.2906 +			UserDate8|User Date   08|6857|3|null
 36.2907 +			UserDate9|User Date   09|6858|3|null
 36.2908 +			UserDate10|User Date   10|6859|3|null
 36.2909 +			UserRate1|User Rate   01|6860|2|null
 36.2910 +			UserRate2|User Rate   02|6861|2|null
 36.2911 +			UserRate3|User Rate   03|6862|2|null
 36.2912 +			UserRate4|User Rate   04|6863|2|null
 36.2913 +			UserRate5|User Rate   05|6864|2|null
 36.2914 +			UserRate6|User Rate   06|6865|2|null
 36.2915 +			UserRate7|User Rate   07|6866|2|null
 36.2916 +			UserRate8|User Rate   08|6867|2|null
 36.2917 +			UserRate9|User Rate   09|6868|2|null
 36.2918 +			UserRate10|User Rate   10|6869|2|null
 36.2919 +			Locator|Locator|6870|4|null
 36.2920 +			UserNumber11|User Number 11|6871|4|null
 36.2921 +			UserNumber12|User Number 12|6872|4|null
 36.2922 +			UserNumber13|User Number 13|6873|4|null
 36.2923 +			UserNumber14|User Number 14|6874|4|null
 36.2924 +			UserNumber15|User Number 15|6875|4|null
 36.2925 +			UserNumber16|User Number 16|6876|4|null
 36.2926 +			UserNumber17|User Number 17|6877|4|null
 36.2927 +			UserNumber18|User Number 18|6878|4|null
 36.2928 +			UserNumber19|User Number 19|6879|4|null
 36.2929 +			UserNumber20|User Number 20|6880|4|null
 36.2930 +			UserChar11|User Char   11|6881|0|40
 36.2931 +			UserChar12|User Char   12|6882|0|40
 36.2932 +			UserChar13|User Char   13|6883|0|40
 36.2933 +			UserChar14|User Char   14|6884|0|40
 36.2934 +			UserChar15|User Char   15|6885|0|40
 36.2935 +			UserChar16|User Char   16|6886|0|40
 36.2936 +			UserChar17|User Char   17|6887|0|40
 36.2937 +			UserChar18|User Char   18|6888|0|40
 36.2938 +			UserChar19|User Char   19|6889|0|40
 36.2939 +			UserChar20|User Char   20|9400|0|40
 36.2940 +			UserAmount11|User Amount 11|9401|7|null
 36.2941 +			UserAmount12|User Amount 12|9402|7|null
 36.2942 +			UserAmount13|User Amount 13|9403|7|null
 36.2943 +			UserAmount14|User Amount 14|9404|7|null
 36.2944 +			UserAmount15|User Amount 15|9405|7|null
 36.2945 +			UserAmount16|User Amount 16|9406|7|null
 36.2946 +			UserAmount17|User Amount 17|9407|7|null
 36.2947 +			UserAmount18|User Amount 18|9408|7|null
 36.2948 +			UserAmount19|User Amount 19|9409|7|null
 36.2949 +			UserAmount20|User Amount 20|9410|7|null
 36.2950 +			UserCode11|User Code   11|9411|5|9999
 36.2951 +			UserCode12|User Code   12|9412|5|9999
 36.2952 +			UserCode13|User Code   13|9413|5|9999
 36.2953 +			UserCode14|User Code   14|9414|5|9999
 36.2954 +			UserCode15|User Code   15|9415|5|9999
 36.2955 +			UserCode16|User Code   16|9416|5|9999
 36.2956 +			UserCode17|User Code   17|9417|5|9999
 36.2957 +			UserCode18|User Code   18|9418|5|9999
 36.2958 +			UserCode19|User Code   19|9419|5|9999
 36.2959 +			UserCode20|User Code   20|9420|5|9999
 36.2960 +			UserDate11|User Date   11|9421|3|null
 36.2961 +			UserDate12|User Date   12|9422|3|null
 36.2962 +			UserDate13|User Date   13|9423|3|null
 36.2963 +			UserDate14|User Date   14|9424|3|null
 36.2964 +			UserDate15|User Date   15|9425|3|null
 36.2965 +			UserDate16|User Date   16|9426|3|null
 36.2966 +			UserDate17|User Date   17|9427|3|null
 36.2967 +			UserDate18|User Date   18|9428|3|null
 36.2968 +			UserDate19|User Date   19|9429|3|null
 36.2969 +			UserDate20|User Date   20|9430|3|null
 36.2970 +			UserRate11|User Rate   11|9431|2|null
 36.2971 +			UserRate12|User Rate   12|9432|2|null
 36.2972 +			UserRate13|User Rate   13|9433|2|null
 36.2973 +			UserRate14|User Rate   14|9434|2|null
 36.2974 +			UserRate15|User Rate   15|9435|2|null
 36.2975 +			UserRate16|User Rate   16|9436|2|null
 36.2976 +			UserRate17|User Rate   17|9437|2|null
 36.2977 +			UserRate18|User Rate   18|9438|2|null
 36.2978 +			UserRate19|User Rate   19|9439|2|null
 36.2979 +			UserRate20|User Rate   20|9440|2|null
 36.2980 +			TrackingDescription|Tracking Code Description|6890|0|30
 36.2981 +		***|LoanApp Note|Application Note
 36.2982 +			ID|ID|2701|0|2
 36.2983 +			IDType|ID Type|2702|5|4
 36.2984 +			Code|Note Code|2715|5|199
 36.2985 +			Text:1|Text Line 01|2704|0|40
 36.2986 +			Text:2|Text Line 02|2704|0|40
 36.2987 +			Text:3|Text Line 03|2704|0|40
 36.2988 +			Text:4|Text Line 04|2704|0|40
 36.2989 +			Text:5|Text Line 05|2704|0|40
 36.2990 +			Text:6|Text Line 06|2704|0|40
 36.2991 +			Text:7|Text Line 07|2704|0|40
 36.2992 +			Text:8|Text Line 08|2704|0|40
 36.2993 +			Text:9|Text Line 09|2704|0|40
 36.2994 +			Text:10|Text Line 10|2704|0|40
 36.2995 +			Text:11|Text Line 11|2704|0|40
 36.2996 +			Text:12|Text Line 12|2704|0|40
 36.2997 +			UserID|User ID|2705|5|4999
 36.2998 +			EnterDate|Enter Date|2706|3|null
 36.2999 +			EnterTime|Enter Time|2707|5|2359
 36.3000 +			VoidFlag|Voided|2709|5|1
 36.3001 +			VoidedBy|Voided By|2710|5|4999
 36.3002 +			ExpirationDate|Expiration Date|2711|3|null
 36.3003 +			Locator|Locator|2719|4|null
 36.3004 +			TextLineCount|Text Line Count|2712|4|null
 36.3005 +	***|CPWorkCard|Collection Work Card
 36.3006 +		Type|Type|2501|5|99
 36.3007 +		FMLastDate|FM Last Date|2502|3|null
 36.3008 +		CloseDate|Close Date|2503|3|null
 36.3009 +		NextWorkDate|Next Work Date|2504|3|null
 36.3010 +		LastWorkDate|Last Work Date|2505|3|null
 36.3011 +		LastWorkTime|Last Work Time|2506|5|2359
 36.3012 +		NotePurgeDate|Note Purge Date|2507|3|null
 36.3013 +		LastCollectorID|Collector ID|2508|5|4999
 36.3014 +		Active|Active|2509|5|1
 36.3015 +		Locator|Locator|2510|4|null
 36.3016 +		Priority|Priority|2511|0|20
 36.3017 +		Seccollidlist|Sec Coll IDs|2512|0|20
 36.3018 +		***|CPWorkCard Tracking|Collection Tracking
 36.3019 +			Type|Tracking Type|6894|5|99
 36.3020 +			ID|ID|6802|0|2
 36.3021 +			IDType|ID Type|6803|5|1
 36.3022 +			UserID|User ID|6804|5|4999
 36.3023 +			FMLastDate|Last FM Date|6805|3|null
 36.3024 +			CreationDate|Creation Date|6806|3|null
 36.3025 +			CreationTime|Creation Time|6807|5|2359
 36.3026 +			ExpireDate|Expiration Date|6808|3|null
 36.3027 +			TrackingCode|Tracking Code|6809|5|99
 36.3028 +			UserNumber1|User Number 01|6810|4|null
 36.3029 +			UserNumber2|User Number 02|6811|4|null
 36.3030 +			UserNumber3|User Number 03|6812|4|null
 36.3031 +			UserNumber4|User Number 04|6813|4|null
 36.3032 +			UserNumber5|User Number 05|6814|4|null
 36.3033 +			UserNumber6|User Number 06|6815|4|null
 36.3034 +			UserNumber7|User Number 07|6816|4|null
 36.3035 +			UserNumber8|User Number 08|6817|4|null
 36.3036 +			UserNumber9|User Number 09|6818|4|null
 36.3037 +			UserNumber10|User Number 10|6819|4|null
 36.3038 +			UserChar1|User Char   01|6820|0|40
 36.3039 +			UserChar2|User Char   02|6821|0|40
 36.3040 +			UserChar3|User Char   03|6822|0|40
 36.3041 +			UserChar4|User Char   04|6823|0|40
 36.3042 +			UserChar5|User Char   05|6824|0|40
 36.3043 +			UserChar6|User Char   06|6825|0|40
 36.3044 +			UserChar7|User Char   07|6826|0|40
 36.3045 +			UserChar8|User Char   08|6827|0|40
 36.3046 +			UserChar9|User Char   09|6828|0|40
 36.3047 +			UserChar10|User Char   10|6829|0|40
 36.3048 +			UserAmount1|User Amount 01|6830|7|null
 36.3049 +			UserAmount2|User Amount 02|6831|7|null
 36.3050 +			UserAmount3|User Amount 03|6832|7|null
 36.3051 +			UserAmount4|User Amount 04|6833|7|null
 36.3052 +			UserAmount5|User Amount 05|6834|7|null
 36.3053 +			UserAmount6|User Amount 06|6835|7|null
 36.3054 +			UserAmount7|User Amount 07|6836|7|null
 36.3055 +			UserAmount8|User Amount 08|6837|7|null
 36.3056 +			UserAmount9|User Amount 09|6838|7|null
 36.3057 +			UserAmount10|User Amount 10|6839|7|null
 36.3058 +			UserCode1|User Code   01|6840|5|9999
 36.3059 +			UserCode2|User Code   02|6841|5|9999
 36.3060 +			UserCode3|User Code   03|6842|5|9999
 36.3061 +			UserCode4|User Code   04|6843|5|9999
 36.3062 +			UserCode5|User Code   05|6844|5|9999
 36.3063 +			UserCode6|User Code   06|6845|5|9999
 36.3064 +			UserCode7|User Code   07|6846|5|9999
 36.3065 +			UserCode8|User Code   08|6847|5|9999
 36.3066 +			UserCode9|User Code   09|6848|5|9999
 36.3067 +			UserCode10|User Code   10|6849|5|9999
 36.3068 +			UserDate1|User Date   01|6850|3|null
 36.3069 +			UserDate2|User Date   02|6851|3|null
 36.3070 +			UserDate3|User Date   03|6852|3|null
 36.3071 +			UserDate4|User Date   04|6853|3|null
 36.3072 +			UserDate5|User Date   05|6854|3|null
 36.3073 +			UserDate6|User Date   06|6855|3|null
 36.3074 +			UserDate7|User Date   07|6856|3|null
 36.3075 +			UserDate8|User Date   08|6857|3|null
 36.3076 +			UserDate9|User Date   09|6858|3|null
 36.3077 +			UserDate10|User Date   10|6859|3|null
 36.3078 +			UserRate1|User Rate   01|6860|2|null
 36.3079 +			UserRate2|User Rate   02|6861|2|null
 36.3080 +			UserRate3|User Rate   03|6862|2|null
 36.3081 +			UserRate4|User Rate   04|6863|2|null
 36.3082 +			UserRate5|User Rate   05|6864|2|null
 36.3083 +			UserRate6|User Rate   06|6865|2|null
 36.3084 +			UserRate7|User Rate   07|6866|2|null
 36.3085 +			UserRate8|User Rate   08|6867|2|null
 36.3086 +			UserRate9|User Rate   09|6868|2|null
 36.3087 +			UserRate10|User Rate   10|6869|2|null
 36.3088 +			Locator|Locator|6870|4|null
 36.3089 +			UserNumber11|User Number 11|6871|4|null
 36.3090 +			UserNumber12|User Number 12|6872|4|null
 36.3091 +			UserNumber13|User Number 13|6873|4|null
 36.3092 +			UserNumber14|User Number 14|6874|4|null
 36.3093 +			UserNumber15|User Number 15|6875|4|null
 36.3094 +			UserNumber16|User Number 16|6876|4|null
 36.3095 +			UserNumber17|User Number 17|6877|4|null
 36.3096 +			UserNumber18|User Number 18|6878|4|null
 36.3097 +			UserNumber19|User Number 19|6879|4|null
 36.3098 +			UserNumber20|User Number 20|6880|4|null
 36.3099 +			UserChar11|User Char   11|6881|0|40
 36.3100 +			UserChar12|User Char   12|6882|0|40
 36.3101 +			UserChar13|User Char   13|6883|0|40
 36.3102 +			UserChar14|User Char   14|6884|0|40
 36.3103 +			UserChar15|User Char   15|6885|0|40
 36.3104 +			UserChar16|User Char   16|6886|0|40
 36.3105 +			UserChar17|User Char   17|6887|0|40
 36.3106 +			UserChar18|User Char   18|6888|0|40
 36.3107 +			UserChar19|User Char   19|6889|0|40
 36.3108 +			UserChar20|User Char   20|9400|0|40
 36.3109 +			UserAmount11|User Amount 11|9401|7|null
 36.3110 +			UserAmount12|User Amount 12|9402|7|null
 36.3111 +			UserAmount13|User Amount 13|9403|7|null
 36.3112 +			UserAmount14|User Amount 14|9404|7|null
 36.3113 +			UserAmount15|User Amount 15|9405|7|null
 36.3114 +			UserAmount16|User Amount 16|9406|7|null
 36.3115 +			UserAmount17|User Amount 17|9407|7|null
 36.3116 +			UserAmount18|User Amount 18|9408|7|null
 36.3117 +			UserAmount19|User Amount 19|9409|7|null
 36.3118 +			UserAmount20|User Amount 20|9410|7|null
 36.3119 +			UserCode11|User Code   11|9411|5|9999
 36.3120 +			UserCode12|User Code   12|9412|5|9999
 36.3121 +			UserCode13|User Code   13|9413|5|9999
 36.3122 +			UserCode14|User Code   14|9414|5|9999
 36.3123 +			UserCode15|User Code   15|9415|5|9999
 36.3124 +			UserCode16|User Code   16|9416|5|9999
 36.3125 +			UserCode17|User Code   17|9417|5|9999
 36.3126 +			UserCode18|User Code   18|9418|5|9999
 36.3127 +			UserCode19|User Code   19|9419|5|9999
 36.3128 +			UserCode20|User Code   20|9420|5|9999
 36.3129 +			UserDate11|User Date   11|9421|3|null
 36.3130 +			UserDate12|User Date   12|9422|3|null
 36.3131 +			UserDate13|User Date   13|9423|3|null
 36.3132 +			UserDate14|User Date   14|9424|3|null
 36.3133 +			UserDate15|User Date   15|9425|3|null
 36.3134 +			UserDate16|User Date   16|9426|3|null
 36.3135 +			UserDate17|User Date   17|9427|3|null
 36.3136 +			UserDate18|User Date   18|9428|3|null
 36.3137 +			UserDate19|User Date   19|9429|3|null
 36.3138 +			UserDate20|User Date   20|9430|3|null
 36.3139 +			UserRate11|User Rate   11|9431|2|null
 36.3140 +			UserRate12|User Rate   12|9432|2|null
 36.3141 +			UserRate13|User Rate   13|9433|2|null
 36.3142 +			UserRate14|User Rate   14|9434|2|null
 36.3143 +			UserRate15|User Rate   15|9435|2|null
 36.3144 +			UserRate16|User Rate   16|9436|2|null
 36.3145 +			UserRate17|User Rate   17|9437|2|null
 36.3146 +			UserRate18|User Rate   18|9438|2|null
 36.3147 +			UserRate19|User Rate   19|9439|2|null
 36.3148 +			UserRate20|User Rate   20|9440|2|null
 36.3149 +		***|CPWorkCard Note|Collection Note
 36.3150 +			ID|ID|2701|0|2
 36.3151 +			IDType|ID Type|2702|5|2
 36.3152 +			Code|Note Code|2716|5|199
 36.3153 +			Text:1|Text Line 01|2704|0|40
 36.3154 +			Text:2|Text Line 02|2704|0|40
 36.3155 +			Text:3|Text Line 03|2704|0|40
 36.3156 +			Text:4|Text Line 04|2704|0|40
 36.3157 +			Text:5|Text Line 05|2704|0|40
 36.3158 +			Text:6|Text Line 06|2704|0|40
 36.3159 +			Text:7|Text Line 07|2704|0|40
 36.3160 +			Text:8|Text Line 08|2704|0|40
 36.3161 +			Text:9|Text Line 09|2704|0|40
 36.3162 +			Text:10|Text Line 10|2704|0|40
 36.3163 +			Text:11|Text Line 11|2704|0|40
 36.3164 +			Text:12|Text Line 12|2704|0|40
 36.3165 +			UserID|User ID|2705|5|4999
 36.3166 +			EnterDate|Enter Date|2706|3|null
 36.3167 +			EnterTime|Enter Time|2707|5|2359
 36.3168 +			VoidFlag|Voided|2709|5|1
 36.3169 +			VoidedBy|Voided By|2710|5|4999
 36.3170 +			ExpirationDate|Expiration Date|2711|3|null
 36.3171 +			Locator|Locator|2719|4|null
 36.3172 +			TextLineCount|Text Line Count|2712|4|null
 36.3173 +	***|CredRep|Credit Retrieval
 36.3174 +		RequestNumber|Request Number|2801|4|null
 36.3175 +		User|User|2803|5|4999
 36.3176 +		RequestDate|Request Date|2804|3|null
 36.3177 +		RequestTime|Request Time|2805|5|2359
 36.3178 +		QueueCode|Queue Code|2806|5|1
 36.3179 +		QueueAfterDate|Queue After Date|2807|3|null
 36.3180 +		QueueAfterTime|Queue After Time|2808|5|2359
 36.3181 +		CompletionCode|Completion Code|2809|5|6
 36.3182 +		CompletionDate|Completion Date|2810|3|null
 36.3183 +		CompletionTime|Completion Time|2811|5|2359
 36.3184 +		Bureau|Bureau|2812|5|4
 36.3185 +		BirthDate|Birth Date|2813|3|null
 36.3186 +		SpouseBirthDate|Spouse Birthdate|2814|3|null
 36.3187 +		Income|Income|2815|6|null
 36.3188 +		MultipleFile|Multiple File|2816|5|1
 36.3189 +		LoanType|Loan Type|2817|5|99
 36.3190 +		LoanTerms|Loan Terms|2818|5|999
 36.3191 +		LoanAmount|Loan Amount|2819|6|null
 36.3192 +		InquiryType|Inquiry Type|2820|5|99
 36.3193 +		OperatorCode|Operator Code|2821|0|2
 36.3194 +		AddrVerifyAcct|Addr Verification|2822|0|20
 36.3195 +		MonthsCountInQ|Months Count Inq|2823|0|1
 36.3196 +		MonthsCountMaxDQ|Months Count Max Delinq|2824|0|1
 36.3197 +		JointFileAccess|Joint File Access|2825|0|1
 36.3198 +		MemNumPlainDesc|Member # Plain Description|2826|0|10
 36.3199 +		HawkIndicator|Hawk Indicator|2827|0|1
 36.3200 +		Alias:1|Alias 1|2828|0|20
 36.3201 +		Alias:2|Alias 2|2828|0|20
 36.3202 +		Alias:3|Alias 3|2828|0|20
 36.3203 +		OptFeatureCode|Optional Feature Code|2829|0|10
 36.3204 +		ECOAInQtype|ECOA Inquiry Type|2830|0|1
 36.3205 +		FirstName|First Name|2831|0|20
 36.3206 +		MiddleName|Middle Name|2832|0|10
 36.3207 +		LastName|Last Name|2833|0|20
 36.3208 +		NameSuffix|Name Suffix|2834|0|4
 36.3209 +		SSN|SSN/TIN|2835|0|9
 36.3210 +		EmpName|Employer Name|2836|0|30
 36.3211 +		EmpHouseNumber|Employer House Number|2837|0|10
 36.3212 +		EmpStreet|Employer Street|2838|0|30
 36.3213 +		EmpCity|Employer City|2839|0|20
 36.3214 +		EmpState|Employer State|2840|0|10
 36.3215 +		EmpZipCode|Employer Zip Code|2841|0|10
 36.3216 +		Occupation|Occupation|2842|0|20
 36.3217 +		DateHired|Date Hired|2843|0|4
 36.3218 +		DatesEparated|Date Separated|2844|0|4
 36.3219 +		PayBasis|Pay Basis|2845|0|1
 36.3220 +		SpouseFirst|Spouse First Name|2846|0|20
 36.3221 +		SpouseMiddle|Spouse Middle Name|2847|0|10
 36.3222 +		SpouseLast|Spouse Last Name|2848|0|20
 36.3223 +		SpouseSuffix|Spouse Suffix|2849|0|4
 36.3224 +		SpouseSSN|Spouse SSN/TIN|2850|0|9
 36.3225 +		SpouseEmpName|Spouse Employer Name|2851|0|30
 36.3226 +		SpouseEmpStreet|Spouse Employer Street|2852|0|30
 36.3227 +		SpouseEmpCity|Spouse Employer City|2853|0|20
 36.3228 +		SpouseEmpState|Spouse Employer State|2854|0|10
 36.3229 +		SpouseEmpZipCode|Spouse Employer Zip Code|2855|0|10
 36.3230 +		CurrAddrHouseNumber|Curr Address House Number|2856|0|10
 36.3231 +		CurrAddrDirectional|Curr Address Directional|2857|0|2
 36.3232 +		CurrAddrStreetName|Curr Address Street Name|2858|0|40
 36.3233 +		CurrAddrStreetType|Curr Address Street Type|2859|0|2
 36.3234 +		CurrAddrQuadrant|Curr Address Quadrant|2860|0|2
 36.3235 +		CurrAddrUnitType|Curr Address Unit Type|2861|0|10
 36.3236 +		CurrAddrUnitNumber|Curr Address Unit Number|2862|0|10
 36.3237 +		CurrAddrCity|Curr Address City|2863|0|20
 36.3238 +		CurrAddrState|Curr Address State|2864|0|10
 36.3239 +		CurrAddrZipCode|Curr Address Zip Code|2865|0|10
 36.3240 +		CurrAddrHomePhone|Curr Home Phone|2866|0|12
 36.3241 +		PrevAddr1HouseNumber|Prev Addr 1 House Number|2867|0|10
 36.3242 +		PrevAddr1Directional|Prev Addr 1 Directional|2868|0|2
 36.3243 +		PrevAddr1StreetName|Prev Addr 1 Street Name|2869|0|40
 36.3244 +		PrevAddr1StreetType|Prev Addr 1 Street Type|2870|0|2
 36.3245 +		PrevAddr1Quadrant|Prev Addr 1 Quadrant|2871|0|2
 36.3246 +		PrevAddr1UnitType|Prev Addr 1 Unit Type|2872|0|10
 36.3247 +		PrevAddr1UnitNumber|Prev Addr 1 Unit Number|2873|0|10
 36.3248 +		PrevAddr1City|Prev Addr 1 City|2874|0|20
 36.3249 +		PrevAddr1State|Prev Addr 1 State|2875|0|10
 36.3250 +		PrevAddr1ZipCode|Prev Addr 1 Zip Code|2876|0|10
 36.3251 +		PrevAddr2HouseNumber|Prev Addr 2 House Number|2877|0|10
 36.3252 +		PrevAddr2Directional|Prev Addr 2 Directional|2878|0|2
 36.3253 +		PrevAddr2StreetName|Prev Addr 2 Street Name|2879|0|40
 36.3254 +		PrevAddr2StreetType|Prev Addr 2 Street Type|2880|0|2
 36.3255 +		PrevAddr2Quadrant|Prev Addr 2 Quadrant|2881|0|2
 36.3256 +		PrevAddr2UnitType|Prev Addr 2 Unit Type|2882|0|10
 36.3257 +		PrevAddr2UnitNumber|Prev Addr 2 Unit Number|2883|0|10
 36.3258 +		PrevAddr2City|Prev Addr 2 City|2884|0|20
 36.3259 +		PrevAddr2State|Prev Addr 2 State|2885|0|10
 36.3260 +		PrevAddr2ZipCode|Prev Addr 2 Zip Code|2886|0|10
 36.3261 +		SubscriberCode|Subscriber Code|2887|0|10
 36.3262 +		Password|Password|2888|0|32
 36.3263 +		BureauInfo|Bureau Info|2889|0|20
 36.3264 +		SSNSearch:1|SSN/TIN Search 1|2890|0|9
 36.3265 +		SSNSearch:2|SSN/TIN Search 2|2890|0|9
 36.3266 +		SSNSearch:3|SSN/TIN Search 3|2890|0|9
 36.3267 +		SSNSearchFacs|SSN/TIN Search Facs+|2891|0|1
 36.3268 +		RiskModel|Risk Model|2892|0|10
 36.3269 +		Decode:1|Decode 01|2893|0|7
 36.3270 +		Decode:2|Decode 02|2893|0|7
 36.3271 +		Decode:3|Decode 03|2893|0|7
 36.3272 +		Decode:4|Decode 04|2893|0|7
 36.3273 +		Decode:5|Decode 05|2893|0|7
 36.3274 +		Decode:6|Decode 06|2893|0|7
 36.3275 +		Decode:7|Decode 07|2893|0|7
 36.3276 +		Decode:8|Decode 08|2893|0|7
 36.3277 +		Decode:9|Decode 09|2893|0|7
 36.3278 +		Decode:10|Decode 10|2893|0|7
 36.3279 +		Decode:11|Decode 11|2893|0|7
 36.3280 +		Decode:12|Decode 12|2893|0|7
 36.3281 +		Decode:13|Decode 13|2893|0|7
 36.3282 +		Decode:14|Decode 14|2893|0|7
 36.3283 +		Decode:15|Decode 15|2893|0|7
 36.3284 +		Decode:16|Decode 16|2893|0|7
 36.3285 +		BullseyeAcct|Bullseye Acct|2894|0|20
 36.3286 +		DateOpened|Date Opened|2895|3|null
 36.3287 +		DateOccurrence|Date of Occurrence|2896|3|null
 36.3288 +		SpecialComment|Special Comment|2897|0|1
 36.3289 +		AssociationCode|Association Code|2898|0|1
 36.3290 +		InstantUpdateAcct|Instant Update Acct|2899|0|20
 36.3291 +		StatusCode|Status Code|2900|5|99
 36.3292 +		SelectCheckCode|Select Check Code|2911|0|8
 36.3293 +		OriginalCreditor|Original Creditor|2912|0|20
 36.3294 +		EmpCopy|Send Consumer Copy|2913|0|1
 36.3295 +		EQDecode:1|Decode 01|2914|0|10
 36.3296 +		EQDecode:2|Decode 02|2914|0|10
 36.3297 +		EQDecode:3|Decode 03|2914|0|10
 36.3298 +		EQDecode:4|Decode 04|2914|0|10
 36.3299 +		EQDecode:5|Decode 05|2914|0|10
 36.3300 +		LookType|Look Type|2915|0|1
 36.3301 +		LookupSegmentInd|Lookup Segment Indicator|2916|0|2
 36.3302 +		LookupBM|Lookup Bureau Market|2917|0|2
 36.3303 +		LookupBSM|Lookup Bureau Sub Market|2918|0|2
 36.3304 +		LookupIndCode|Industry code to be decoded|2919|0|2
 36.3305 +		LookupMemberCode|Member code to be decoded|2920|0|8
 36.3306 +		SecondaryName|Secondary Name|2921|0|25
 36.3307 +		LoanTypeChr|Loan Type|2922|0|2
 36.3308 +		DPower:1|DPower 01|2923|0|9
 36.3309 +		DPower:2|DPower 02|2923|0|9
 36.3310 +		DPower:3|DPower 03|2923|0|9
 36.3311 +		Locator|Locator|2924|4|null
 36.3312 +		Branch|Branch|2925|5|9999
 36.3313 +		Version|Version|2926|5|9999
 36.3314 +		Source|Source|2927|5|99
 36.3315 +		DeAppID|Application ID|2992|0|2
 36.3316 +		DeProductCode|Product Code|2928|0|2
 36.3317 +		DeRaterEQUested|Rate Requested|2929|2|null
 36.3318 +		DeVehAge|Vehicle Age (In years)|2930|5|99
 36.3319 +		DeVehStatus|Vehicle Status|2934|0|1
 36.3320 +		DeVehCashPrice|Vehicle Cash Price|2931|6|null
 36.3321 +		DeVehDownPmt|Vehicle Down Payment|2932|6|null
 36.3322 +		DeVehTradeIn|Vehicle Net Trade In|2933|6|null
 36.3323 +		DeVehNewPaymentAmt|Vehicle New Pmt Amount|2935|6|null
 36.3324 +		DeVehOldPaymentAmt|Vehicle Old Pmt Amount|2936|6|null
 36.3325 +		LoanUse|Loan Use|2937|0|1
 36.3326 +		OverrideCat|Override Category|2987|0|1
 36.3327 +		Override|Override Decision|2988|5|1
 36.3328 +		ReferenceID|Reference ID|2989|0|19
 36.3329 +		DecisionOverride|Decision Override|2990|0|1
 36.3330 +		OverrideAmount|Cred Lim Override|2991|6|null
 36.3331 +		Job1EmptyPe:1|Job 1 Employment Type|2938|0|1
 36.3332 +		Job2EmptyPe:2|Job 2 Employment Type|2938|0|1
 36.3333 +		Job1EmpPrevType:1|Job 1 Prev Type|2941|0|1
 36.3334 +		Job2EmpPrevType:2|Job 2 Prev Type|2941|0|1
 36.3335 +		Job1Years:1|Job 1 Years|2939|5|99
 36.3336 +		Job2Years:2|Job 2 Years|2939|5|99
 36.3337 +		Job1Months:1|Job 1 Months|2940|5|11
 36.3338 +		Job2Months:2|Job 2 Months|2940|5|11
 36.3339 +		Job1PrevYears:1|Job 1 Prev Years|2942|5|99
 36.3340 +		Job2PrevYears:2|Job 2 Prev Years|2942|5|99
 36.3341 +		Job1PrevMonths:1|Job 1 Prev Months|2943|5|11
 36.3342 +		Job2PrevMonths:2|Job 2 Prev Months|2943|5|11
 36.3343 +		Res1Type:1|Res 1 Type|2944|5|99
 36.3344 +		Res2Type:2|Res 2 Type|2944|5|99
 36.3345 +		Res1Years:1|Res 1 Years|2945|5|99
 36.3346 +		Res2Years:2|Res 2 Years|2945|5|99
 36.3347 +		Res1Months:1|Res 1 Months|2946|5|11
 36.3348 +		Res2Months:2|Res 2 Months|2946|5|11
 36.3349 +		Res1PrevType:1|Res 1 Prev Type|2947|5|99
 36.3350 +		Res2PrevType:2|Res 2 Prev Type|2947|5|99
 36.3351 +		Res1PrevYears:1|Res 1 Prev Years|2948|5|99
 36.3352 +		Res2PrevYears:2|Res 2 Prev Years|2948|5|99
 36.3353 +		Res1PrevMonths:1|Res 1 Prev Months|2949|5|11
 36.3354 +		Res2PrevMonths:2|Res 2 Prev Months|2949|5|11
 36.3355 +		Inc1TotalFREQ:1|Inc 1 Total Frequency|2950|0|1
 36.3356 +		Inc2TotalFREQ:2|Inc 2 Total Frequency|2950|0|1
 36.3357 +		Inc1SalaryFREQ:1|Inc 1 Salary Freq|2952|0|1
 36.3358 +		Inc2SalaryFREQ:2|Inc 2 Salary Freq|2952|0|1
 36.3359 +		Inc1OtherFREQ:1|Inc 1 Other Freq|2954|0|1
 36.3360 +		Inc2OtherFREQ:2|Inc 2 Other Freq|2954|0|1
 36.3361 +		Inc1TotalAmount:1|Inc 1 Total Amount|2951|6|null
 36.3362 +		Inc2TotalAmount:2|Inc 2 Total Amount|2951|6|null
 36.3363 +		Inc1SalaryAmount:1|Inc 1 Salary Amount|2953|6|null
 36.3364 +		Inc2SalaryAmount:2|Inc 2 Salary Amount|2953|6|null
 36.3365 +		Inc1OtherAmount:1|Inc 1 Other Amount|2955|6|null
 36.3366 +		Inc2OtherAmount:2|Inc 2 Other Amount|2955|6|null
 36.3367 +		Bre1Relation:1|Bre 1 Bank Relationship|2956|0|1
 36.3368 +		Bre2Relation:2|Bre 2 Bank Relationship|2956|0|1
 36.3369 +		Dep1DependAnts:1|Dep 1 Number of Dependants|2957|5|99
 36.3370 +		Dep2DependAnts:2|Dep 2 Number of Dependants|2957|5|99
 36.3371 +		Exp1FREQ:1|Exp 1 Frequency|2958|0|1
 36.3372 +		Exp2FREQ:2|Exp 2 Frequency|2958|0|1
 36.3373 +		Exp1ResidenceType:1|Exp 1 Residence Type|2960|0|1
 36.3374 +		Exp2ResidenceType:2|Exp 2 Residence Type|2960|0|1
 36.3375 +		Exp1ResidenceFREQ:1|Exp 1 Residence Frequency|2961|0|1
 36.3376 +		Exp2ResidenceFREQ:2|Exp 2 Residence Frequency|2961|0|1
 36.3377 +		Exp1OtherFREQ:1|Exp 1 Other Frequency|2963|0|1
 36.3378 +		Exp2OtherFREQ:2|Exp 2 Other Frequency|2963|0|1
 36.3379 +		Exp1Amount:1|Exp 1 Amount|2959|6|null
 36.3380 +		Exp2Amount:2|Exp 2 Amount|2959|6|null
 36.3381 +		Exp1ResidenceAmount:1|Exp 1 Residence Amount|2959|6|null
 36.3382 +		Exp2ResidenceAmount:2|Exp 2 Residence Amount|2959|6|null
 36.3383 +		Exp1OtherAmount:1|Exp 1 Other Amount|2964|6|null
 36.3384 +		Exp2OtherAmount:2|Exp 2 Other Amount|2964|6|null
 36.3385 +		AutoLoanType|Auto Loan Type|2965|0|1
 36.3386 +		AutoStatus|Auto Status|2966|0|2
 36.3387 +		AutoYear|Auto Year|2967|0|4
 36.3388 +		AutoMake|Auto Make|2968|0|15
 36.3389 +		AutoModel|Auto Model|2969|0|10
 36.3390 +		AutoResidualFactor|Auto Residual Factor|2978|0|9
 36.3391 +		AutoMoneyFactor|Auto Money Factor|2980|0|9
 36.3392 +		AutoMSRP|Auto MSRP|2970|6|null
 36.3393 +		AutoSalePrice|Auto Sale Price|2971|6|null
 36.3394 +		AutoDownPayment|Auto Down Payment|2972|6|null
 36.3395 +		AutoRebate|Auto Rebate|2973|6|null
 36.3396 +		AutoTradeBalance|Auto Trade Loan Bal|2974|6|null
 36.3397 +		AutoTradeAllowance|Auto Trade Alwnce|2975|6|null
 36.3398 +		AutoCapCost|Auto Capital Cost|2977|6|null
 36.3399 +		AutoResidualValue|Auto Residual Value|2979|6|null
 36.3400 +		AutoLeaseTerm|Auto Lease Term|2976|5|999
 36.3401 +		PrdProductCode01:1|Prod Code 01|2981|0|2
 36.3402 +		PrdProductCode02:2|Prod Code 02|2981|0|2
 36.3403 +		PrdProductCode03:3|Prod Code 03|2981|0|2
 36.3404 +		PrdProductCode04:4|Prod Code 04|2981|0|2
 36.3405 +		PrdProductCode05:5|Prod Code 05|2981|0|2
 36.3406 +		PrdProductCode06:6|Prod Code 06|2981|0|2
 36.3407 +		PrdProductCode07:7|Prod Code 07|2981|0|2
 36.3408 +		PrdProductCode08:8|Prod Code 08|2981|0|2
 36.3409 +		PrdProductCode09:9|Prod Code 09|2981|0|2
 36.3410 +		PrdProductCode10:10|Prod Code 10|2981|0|2
 36.3411 +		PrdDecType01:1|Decision 01|2982|0|1
 36.3412 +		PrdDecType02:2|Decision 02|2982|0|1
 36.3413 +		PrdDecType03:3|Decision 03|2982|0|1
 36.3414 +		PrdDecType04:4|Decision 04|2982|0|1
 36.3415 +		PrdDecType05:5|Decision 05|2982|0|1
 36.3416 +		PrdDecType06:6|Decision 06|2982|0|1
 36.3417 +		PrdDecType07:7|Decision 07|2982|0|1
 36.3418 +		PrdDecType08:8|Decision 08|2982|0|1
 36.3419 +		PrdDecType09:9|Decision 09|2982|0|1
 36.3420 +		PrdDecType10:10|Decision 10|2982|0|1
 36.3421 +		RefNumber1:1|Reference Number 1|2983|0|15
 36.3422 +		RefNumber2:2|Reference Number 2|2983|0|15
 36.3423 +		RefNumber3:3|Reference Number 3|2983|0|15
 36.3424 +		LoanAppID|Loanapp ID|2984|0|2
 36.3425 +		OldMnthlypmt|Old Monthly Payment|2985|6|null
 36.3426 +		NewMnthlypmt|New Monthly Payment|2986|6|null
 36.3427 +		AccessPin|Access PIN|2993|0|8
 36.3428 +		PhoneAppend|Phone Append|2994|8|null
 36.3429 +		ScoreModel:1|Score Model 01|2995|0|5
 36.3430 +		ScoreModel:2|Score Model 02|2995|0|5
 36.3431 +		ScoreModel:3|Score Model 03|2995|0|5
 36.3432 +		ScoreModel:4|Score Model 04|2995|0|5
 36.3433 +		ScoreModel:5|Score Model 05|2995|0|5
 36.3434 +		ScoreModel:6|Score Model 06|2995|0|5
 36.3435 +		ScoreModel:7|Score Model 07|2995|0|5
 36.3436 +		ScoreModel:8|Score Model 08|2995|0|5
 36.3437 +		ScoreModel:9|Score Model 09|2995|0|5
 36.3438 +		ScoreModel:10|Score Model 10|2995|0|5
 36.3439 +		ScoreModel:11|Score Model 11|2995|0|5
 36.3440 +		ScoreModel:12|Score Model 12|2995|0|5
 36.3441 +		UseType|Use Type|2996|0|2
 36.3442 +		CommercialCode|Commercial Code|2201|5|1
 36.3443 +		IDNumber:1|Identification Number 1|2202|0|25
 36.3444 +		IDNumber:2|Identification Number 2|2202|0|25
 36.3445 +		IDState:1|Identification State 1|2203|0|2
 36.3446 +		IDState:2|Identification State 2|2203|0|2
 36.3447 +		***|CredRep Item|Credit Report Item
 36.3448 +			SegmentType|Segment Type|0|0|4
 36.3449 +			SubsegmentType|Sub Segment Type|0|0|2
 36.3450 +			Segextended|Segment Extended Flag|0|5|1
 36.3451 +			Amount:1|Amount 1|0|4|null
 36.3452 +			Amount:2|Amount 2|0|4|null
 36.3453 +			Amount:3|Amount 3|0|4|null
 36.3454 +			Amount:4|Amount 4|0|4|null
 36.3455 +			Code:1|Code 1|0|5|9999
 36.3456 +			Code:2|Code 2|0|5|9999
 36.3457 +			Code:3|Code 3|0|5|9999
 36.3458 +			Code:4|Code 4|0|5|9999
 36.3459 +			Date:1|Date 1|0|3|null
 36.3460 +			Date:2|Date 2|0|3|null
 36.3461 +			Date:3|Date 3|0|3|null
 36.3462 +			Date:4|Date 4|0|3|null
 36.3463 +			Date:5|Date 5|0|3|null
 36.3464 +			Date:6|Date 6|0|3|null
 36.3465 +			Ch1:1|Ch1 1|0|0|1
 36.3466 +			Ch1:2|Ch1 2|0|0|1
 36.3467 +			Ch1:3|Ch1 3|0|0|1
 36.3468 +			Ch1:4|Ch1 4|0|0|1
 36.3469 +			Ch1:5|Ch1 5|0|0|1
 36.3470 +			Ch1:6|Ch1 6|0|0|1
 36.3471 +			Ch1:7|Ch1 7|0|0|1
 36.3472 +			Ch1:8|Ch1 8|0|0|1
 36.3473 +			Ch1:9|Ch1 9|0|0|1
 36.3474 +			Ch1:10|Ch1 10|0|0|1
 36.3475 +			Ch2:1|Ch2 1|0|0|2
 36.3476 +			Ch2:2|Ch2 2|0|0|2
 36.3477 +			Ch2:3|Ch2 3|0|0|2
 36.3478 +			Ch4:1|Ch4 1|0|0|4
 36.3479 +			Ch4:2|Ch4 2|0|0|4
 36.3480 +			Ch4:3|Ch4 3|0|0|4
 36.3481 +			Ch4:4|Ch4 4|0|0|4
 36.3482 +			Ch10:1|Ch10 1|0|0|10
 36.3483 +			Ch10:2|Ch10 2|0|0|10
 36.3484 +			Ch10:3|Ch10 3|0|0|10
 36.3485 +			Ch15:1|Ch15 1|0|0|15
 36.3486 +			Ch15:2|Ch15 2|0|0|15
 36.3487 +			Ch26:1|Ch26 1|0|0|26
 36.3488 +			Ch26:2|Ch26 2|0|0|26
 36.3489 +			Ch26:3|Ch26 3|0|0|26
 36.3490 +			CHLong:1|Long Char 1|0|0|132
 36.3491 +			CHLong:2|Long Char 2|0|0|132
 36.3492 +			CHLong:3|Long Char 3|0|0|132
 36.3493 +			CHLong:4|Long Char 4|0|0|132
 36.3494 +	***|Portfolio|Portfolio
 36.3495 +		ID|Portfolio ID|6901|0|2
 36.3496 +		FMLastDate|FM Last Date|6902|3|null
 36.3497 +		CloseDate|Close Date|6903|3|null
 36.3498 +		NotePurgeDate|Note Purge Date|6904|3|null
 36.3499 +		Description|Description|6905|0|30
 36.3500 +		Balance|Balance|6980|7|null
 36.3501 +		AvailableBalance|Available Balance|6981|7|null
 36.3502 +		***|Portfolio Hold|Portfolio Hold
 36.3503 +			Type|Hold Type|501|5|19
 36.3504 +			EffectiveDate|Effective Date|502|3|null
 36.3505 +			ExpirationDate|Expiration Date|503|3|null
 36.3506 +			Reference1|Reference 1|504|0|10
 36.3507 +			Reference2|Reference 2|505|0|10
 36.3508 +			Amount|Hold Amount|506|7|null
 36.3509 +			PayeeName|Payee Name|507|0|16
 36.3510 +			ExpirationTime|Expiration Time|508|5|2359
 36.3511 +			Locator|Locator|509|4|null
 36.3512 +			MemberBranch|Member Branch|510|0|4
 36.3513 +			StopPayCode|Stop Reason Code|511|5|99
 36.3514 +			Reference3|Reference 3|512|0|40
 36.3515 +			Reference4|Reference 4|513|0|40
 36.3516 +			MatchDate|Match Date|514|3|null
 36.3517 +			MatchTime|Match Time|515|5|2359
 36.3518 +			FeeCode|Fee Code|516|5|9999
 36.3519 +			FeeDescription|Fee Description|580|1|40
 36.3520 +		***|Portfolio Tracking|Portfolio Tracking
 36.3521 +			Type|Tracking Type|6895|5|99
 36.3522 +			ID|ID|6802|0|2
 36.3523 +			IDType|ID Type|6803|5|4
 36.3524 +			UserID|User ID|6804|5|4999
 36.3525 +			FMLastDate|Last FM Date|6805|3|null
 36.3526 +			CreationDate|Creation Date|6806|3|null
 36.3527 +			CreationTime|Creation Time|6807|5|2359
 36.3528 +			ExpireDate|Expiration Date|6808|3|null
 36.3529 +			TrackingCode|Tracking Code|6809|5|99
 36.3530 +			UserNumber1|User Number 01|6810|4|null
 36.3531 +			UserNumber2|User Number 02|6811|4|null
 36.3532 +			UserNumber3|User Number 03|6812|4|null
 36.3533 +			UserNumber4|User Number 04|6813|4|null
 36.3534 +			UserNumber5|User Number 05|6814|4|null
 36.3535 +			UserNumber6|User Number 06|6815|4|null
 36.3536 +			UserNumber7|User Number 07|6816|4|null
 36.3537 +			UserNumber8|User Number 08|6817|4|null
 36.3538 +			UserNumber9|User Number 09|6818|4|null
 36.3539 +			UserNumber10|User Number 10|6819|4|null
 36.3540 +			UserChar1|User Char   01|6820|0|40
 36.3541 +			UserChar2|User Char   02|6821|0|40
 36.3542 +			UserChar3|User Char   03|6822|0|40
 36.3543 +			UserChar4|User Char   04|6823|0|40
 36.3544 +			UserChar5|User Char   05|6824|0|40
 36.3545 +			UserChar6|User Char   06|6825|0|40
 36.3546 +			UserChar7|User Char   07|6826|0|40
 36.3547 +			UserChar8|User Char   08|6827|0|40
 36.3548 +			UserChar9|User Char   09|6828|0|40
 36.3549 +			UserChar10|User Char   10|6829|0|40
 36.3550 +			UserAmount1|User Amount 01|6830|7|null
 36.3551 +			UserAmount2|User Amount 02|6831|7|null
 36.3552 +			UserAmount3|User Amount 03|6832|7|null
 36.3553 +			UserAmount4|User Amount 04|6833|7|null
 36.3554 +			UserAmount5|User Amount 05|6834|7|null
 36.3555 +			UserAmount6|User Amount 06|6835|7|null
 36.3556 +			UserAmount7|User Amount 07|6836|7|null
 36.3557 +			UserAmount8|User Amount 08|6837|7|null
 36.3558 +			UserAmount9|User Amount 09|6838|7|null
 36.3559 +			UserAmount10|User Amount 10|6839|7|null
 36.3560 +			UserCode1|User Code   01|6840|5|9999
 36.3561 +			UserCode2|User Code   02|6841|5|9999
 36.3562 +			UserCode3|User Code   03|6842|5|9999
 36.3563 +			UserCode4|User Code   04|6843|5|9999
 36.3564 +			UserCode5|User Code   05|6844|5|9999
 36.3565 +			UserCode6|User Code   06|6845|5|9999
 36.3566 +			UserCode7|User Code   07|6846|5|9999
 36.3567 +			UserCode8|User Code   08|6847|5|9999
 36.3568 +			UserCode9|User Code   09|6848|5|9999
 36.3569 +			UserCode10|User Code   10|6849|5|9999
 36.3570 +			UserDate1|User Date   01|6850|3|null
 36.3571 +			UserDate2|User Date   02|6851|3|null
 36.3572 +			UserDate3|User Date   03|6852|3|null
 36.3573 +			UserDate4|User Date   04|6853|3|null
 36.3574 +			UserDate5|User Date   05|6854|3|null
 36.3575 +			UserDate6|User Date   06|6855|3|null
 36.3576 +			UserDate7|User Date   07|6856|3|null
 36.3577 +			UserDate8|User Date   08|6857|3|null
 36.3578 +			UserDate9|User Date   09|6858|3|null
 36.3579 +			UserDate10|User Date   10|6859|3|null
 36.3580 +			UserRate1|User Rate   01|6860|2|null
 36.3581 +			UserRate2|User Rate   02|6861|2|null
 36.3582 +			UserRate3|User Rate   03|6862|2|null
 36.3583 +			UserRate4|User Rate   04|6863|2|null
 36.3584 +			UserRate5|User Rate   05|6864|2|null
 36.3585 +			UserRate6|User Rate   06|6865|2|null
 36.3586 +			UserRate7|User Rate   07|6866|2|null
 36.3587 +			UserRate8|User Rate   08|6867|2|null
 36.3588 +			UserRate9|User Rate   09|6868|2|null
 36.3589 +			UserRate10|User Rate   10|6869|2|null
 36.3590 +			Locator|Locator|6870|4|null
 36.3591 +			UserNumber11|User Number 11|6871|4|null
 36.3592 +			UserNumber12|User Number 12|6872|4|null
 36.3593 +			UserNumber13|User Number 13|6873|4|null
 36.3594 +			UserNumber14|User Number 14|6874|4|null
 36.3595 +			UserNumber15|User Number 15|6875|4|null
 36.3596 +			UserNumber16|User Number 16|6876|4|null
 36.3597 +			UserNumber17|User Number 17|6877|4|null
 36.3598 +			UserNumber18|User Number 18|6878|4|null
 36.3599 +			UserNumber19|User Number 19|6879|4|null
 36.3600 +			UserNumber20|User Number 20|6880|4|null
 36.3601 +			UserChar11|User Char   11|6881|0|40
 36.3602 +			UserChar12|User Char   12|6882|0|40
 36.3603 +			UserChar13|User Char   13|6883|0|40
 36.3604 +			UserChar14|User Char   14|6884|0|40
 36.3605 +			UserChar15|User Char   15|6885|0|40
 36.3606 +			UserChar16|User Char   16|6886|0|40
 36.3607 +			UserChar17|User Char   17|6887|0|40
 36.3608 +			UserChar18|User Char   18|6888|0|40
 36.3609 +			UserChar19|User Char   19|6889|0|40
 36.3610 +			UserChar20|User Char   20|9400|0|40
 36.3611 +			UserAmount11|User Amount 11|9401|7|null
 36.3612 +			UserAmount12|User Amount 12|9402|7|null
 36.3613 +			UserAmount13|User Amount 13|9403|7|null
 36.3614 +			UserAmount14|User Amount 14|9404|7|null
 36.3615 +			UserAmount15|User Amount 15|9405|7|null
 36.3616 +			UserAmount16|User Amount 16|9406|7|null
 36.3617 +			UserAmount17|User Amount 17|9407|7|null
 36.3618 +			UserAmount18|User Amount 18|9408|7|null
 36.3619 +			UserAmount19|User Amount 19|9409|7|null
 36.3620 +			UserAmount20|User Amount 20|9410|7|null
 36.3621 +			UserCode11|User Code   11|9411|5|9999
 36.3622 +			UserCode12|User Code   12|9412|5|9999
 36.3623 +			UserCode13|User Code   13|9413|5|9999
 36.3624 +			UserCode14|User Code   14|9414|5|9999
 36.3625 +			UserCode15|User Code   15|9415|5|9999
 36.3626 +			UserCode16|User Code   16|9416|5|9999
 36.3627 +			UserCode17|User Code   17|9417|5|9999
 36.3628 +			UserCode18|User Code   18|9418|5|9999
 36.3629 +			UserCode19|User Code   19|9419|5|9999
 36.3630 +			UserCode20|User Code   20|9420|5|9999
 36.3631 +			UserDate11|User Date   11|9421|3|null
 36.3632 +			UserDate12|User Date   12|9422|3|null
 36.3633 +			UserDate13|User Date   13|9423|3|null
 36.3634 +			UserDate14|User Date   14|9424|3|null
 36.3635 +			UserDate15|User Date   15|9425|3|null
 36.3636 +			UserDate16|User Date   16|9426|3|null
 36.3637 +			UserDate17|User Date   17|9427|3|null
 36.3638 +			UserDate18|User Date   18|9428|3|null
 36.3639 +			UserDate19|User Date   19|9429|3|null
 36.3640 +			UserDate20|User Date   20|9430|3|null
 36.3641 +			UserRate11|User Rate   11|9431|2|null
 36.3642 +			UserRate12|User Rate   12|9432|2|null
 36.3643 +			UserRate13|User Rate   13|9433|2|null
 36.3644 +			UserRate14|User Rate   14|9434|2|null
 36.3645 +			UserRate15|User Rate   15|9435|2|null
 36.3646 +			UserRate16|User Rate   16|9436|2|null
 36.3647 +			UserRate17|User Rate   17|9437|2|null
 36.3648 +			UserRate18|User Rate   18|9438|2|null
 36.3649 +			UserRate19|User Rate   19|9439|2|null
 36.3650 +			UserRate20|User Rate   20|9440|2|null
 36.3651 +		***|Portfolio Note|Portfolio Note
 36.3652 +			ID|ID|2701|0|2
 36.3653 +			IDType|ID Type|2702|5|4
 36.3654 +			Code|Note Code|2718|5|199
 36.3655 +			Text:1|Text Line 01|2704|0|40
 36.3656 +			Text:2|Text Line 02|2704|0|40
 36.3657 +			Text:3|Text Line 03|2704|0|40
 36.3658 +			Text:4|Text Line 04|2704|0|40
 36.3659 +			Text:5|Text Line 05|2704|0|40
 36.3660 +			Text:6|Text Line 06|2704|0|40
 36.3661 +			Text:7|Text Line 07|2704|0|40
 36.3662 +			Text:8|Text Line 08|2704|0|40
 36.3663 +			Text:9|Text Line 09|2704|0|40
 36.3664 +			Text:10|Text Line 10|2704|0|40
 36.3665 +			Text:11|Text Line 11|2704|0|40
 36.3666 +			Text:12|Text Line 12|2704|0|40
 36.3667 +			UserID|User ID|2705|5|4999
 36.3668 +			EnterDate|Enter Date|2706|3|null
 36.3669 +			EnterTime|Enter Time|2707|5|2359
 36.3670 +			VoidFlag|Voided|2709|5|1
 36.3671 +			VoidedBy|Voided By|2710|5|4999
 36.3672 +			ExpirationDate|Expiration Date|2711|3|null
 36.3673 +			Locator|Locator|2719|4|null
 36.3674 +			TextLineCount|Text Line Count|2712|4|null
 36.3675 +	***|Site|Site
 36.3676 +		SiteNumber|Site Number|9501|5|9999
 36.3677 +		SiteName|Name|9502|0|40
 36.3678 +		ExtraAddress|Extra Address|9503|0|40
 36.3679 +		Street|Street|9504|0|40
 36.3680 +		City|City|9505|0|40
 36.3681 +		State|State|9506|0|10
 36.3682 +		ZipCode|Zip Code|9507|0|10
 36.3683 +		CloseDate|Close Date|9508|3|null
 36.3684 +		Faxphone|Fax Phone|9509|0|16
 36.3685 +		SiteContactName|Contact Name|9510|0|40
 36.3686 +		ContactPhone|Contact Phone|9511|0|16
 36.3687 +		SiteID|Site Identifier|9512|0|9
 36.3688 +		SiteSettleShareID|Settlement Share ID|9513|0|2
 36.3689 +		Locator|Locator|9514|4|null
 36.3690 +		***|Site CashOrderType|Site Cash Order Type
 36.3691 +			CashOrderTypeName|Name|9601|0|40
 36.3692 +			ActiveFlag|Active|9602|5|1
 36.3693 +			VendorNumber|Vendor Number|9603|5|9999
 36.3694 +			OrderLimiting|Order Limiting|9604|5|9
 36.3695 +			DelFrequency|Delivery Frequency|9605|5|3
 36.3696 +			LocationCode|Location Code|9607|0|20
 36.3697 +			CashOrderTypeMinorDeR|Minimum Order|9608|7|null
 36.3698 +			CashOrderTypeMaxOrder|Maximum Order|9609|7|null
 36.3699 +			CashOrderTypeComment:1|Comments Line 1|9610|0|40
 36.3700 +			CashOrderTypeComment:2|Comments Line 2|9610|0|40
 36.3701 +			CashOrderTypeComment:3|Comments Line 3|9610|0|40
 36.3702 +			CashOrderTypeComment:4|Comments Line 4|9610|0|40
 36.3703 +			CashOrderTypeCurrFit:1|Currency Fit - Hundreds|9611|7|null
 36.3704 +			CashOrderTypeCurrFit:2|Currency Fit - Fifties|9611|7|null
 36.3705 +			CashOrderTypeCurrFit:3|Currency Fit - Twenties|9611|7|null
 36.3706 +			CashOrderTypeCurrFit:4|Currency Fit - Tens|9611|7|null
 36.3707 +			CashOrderTypeCurrFit:5|Currency Fit - Fives|9611|7|null
 36.3708 +			CashOrderTypeCurrFit:6|Currency Fit - Twos|9611|7|null
 36.3709 +			CashOrderTypeCurrFit:7|Currency Fit - Ones|9611|7|null
 36.3710 +			CashOrderTypeCurrNew:1|Currency New - Hundreds|9612|7|null
 36.3711 +			CashOrderTypeCurrNew:2|Currency New - Fifties|9612|7|null
 36.3712 +			CashOrderTypeCurrNew:3|Currency New - Twenties|9612|7|null
 36.3713 +			CashOrderTypeCurrNew:4|Currency New - Tens|9612|7|null
 36.3714 +			CashOrderTypeCurrNew:5|Currency New - Fives|9612|7|null
 36.3715 +			CashOrderTypeCurrNew:6|Currency New - Twos|9612|7|null
 36.3716 +			CashOrderTypeCurrNew:7|Currency New - Ones|9612|7|null
 36.3717 +			CashOrderTypeCoinRoll:1|Coin Roll - Golden Dollars|9613|7|null
 36.3718 +			CashOrderTypeCoinRoll:2|Coin Roll - Susan Bs|9613|7|null
 36.3719 +			CashOrderTypeCoinRoll:3|Coin Roll - Halves|9613|7|null
 36.3720 +			CashOrderTypeCoinRoll:4|Coin Roll - Quarters|9613|7|null
 36.3721 +			CashOrderTypeCoinRoll:5|Coin Roll - Dimes|9613|7|null
 36.3722 +			CashOrderTypeCoinRoll:6|Coin Roll - Nickels|9613|7|null
 36.3723 +			CashOrderTypeCoinRoll:7|Coin Roll - Pennies|9613|7|null
 36.3724 +			CashOrderTypeCoinRoll:8|Coin Roll - State Quarters|9613|7|null
 36.3725 +			CashOrderTypeCoinBag:1|Coin Bag - Golden Dollars|9614|7|null
 36.3726 +			CashOrderTypeCoinBag:2|Coin Bag - Susan Bs|9614|7|null
 36.3727 +			CashOrderTypeCoinBag:3|Coin Bag - Halves|9614|7|null
 36.3728 +			CashOrderTypeCoinBag:4|Coin Bag - Quarters|9614|7|null
 36.3729 +			CashOrderTypeCoinBag:5|Coin Bag - Dimes|9614|7|null
 36.3730 +			CashOrderTypeCoinBag:6|Coin Bag - Nickels|9614|7|null
 36.3731 +			CashOrderTypeCoinBag:7|Coin Bag - Pennies|9614|7|null
 36.3732 +			CashOrderTypedElcharge|Delivery Charge|9615|7|null
 36.3733 +			CashOrderTypesPecdelcharge|Special Delivery Charge|9616|7|null
 36.3734 +			ApplyHandlingFee|Apply Special Handling Fee|9617|5|1
 36.3735 +			DeliveryDays:1|Delivery Day - Sunday|9606|5|1
 36.3736 +			DeliveryDays:2|Delivery Day - Monday|9606|5|1
 36.3737 +			DeliveryDays:3|Delivery Day - Tuesday|9606|5|1
 36.3738 +			DeliveryDays:4|Delivery Day - Wednesday|9606|5|1
 36.3739 +			DeliveryDays:5|Delivery Day - Thursday|9606|5|1
 36.3740 +			DeliveryDays:6|Delivery Day - Friday|9606|5|1
 36.3741 +			DeliveryDays:7|Delivery Day - Saturday|9606|5|1
 36.3742 +			CloseDate|Close Date|9618|3|null
 36.3743 +			Locator|Locator|9619|4|null
 36.3744 +			SpecHandlingFee|Special Handling Fee|9681|7|null
 36.3745 +***|ACHItem|ACH Item
 36.3746 +	GlobalSequenceDate|Global Seq Date|28101|3|null
 36.3747 +	GlobalSequence|Global Sequence|28102|4|null
 36.3748 +	AccountNumber|Account Number|28103|0|10
 36.3749 +	IDType|ID Type|28104|5|1
 36.3750 +	ID|ID|28105|0|2
 36.3751 +	Amount|Amount|28106|7|null
 36.3752 +	SortOrder|Sort Order|28107|5|32767
 36.3753 +	TransferAccount|Transfer Account|28108|0|10
 36.3754 +	TransferIDType|Transfer ID Type|28109|5|1
 36.3755 +	TransferID|Transfer ID|28110|0|2
 36.3756 +	TransactionCode|Transaction Code|28111|5|59
 36.3757 +	TranCode|Tran Code|28112|5|8
 36.3758 +	AdjustmentCode|Adjustment Code|28113|5|1
 36.3759 +	AcctCode1|Acct Code 1|28114|5|59
 36.3760 +	AcctCode2|Acct Code 2|28115|5|59
 36.3761 +	RegulationCode|Regulation Code|28116|5|7
 36.3762 +	TranPostDate|Transmission Date|28117|3|null
 36.3763 +	SettlementDate|Settlement Date|28118|3|null
 36.3764 +	EffectiveDate|Effective Date|28119|3|null
 36.3765 +	GLCode|GL Code|28120|5|1099
 36.3766 +	GLCategory|GL Category|28121|4|null
 36.3767 +	GLCode1|GL Code 1|28122|4|null
 36.3768 +	ProcessorAccount|Processor Account|28123|0|20
 36.3769 +	ProcessorTransactionCode|Processor Transaction Code|28124|0|2
 36.3770 +	CommentCode|Comment Code|28125|5|9999
 36.3771 +	MemberBranch|Member Branch|28126|0|4
 36.3772 +	CompanyName|Company Name|28127|0|16
 36.3773 +	CompanyDiscretionaryData|Company Discretionary Data|28128|0|20
 36.3774 +	CompanyID|Company ID|28129|0|10
 36.3775 +	CompanyEntryDescription|Company Entry Description|28130|0|10
 36.3776 +	IndividualID|Individual ID|28131|0|15
 36.3777 +	IndividualName|Individual Name|28132|0|22
 36.3778 +	Trace|Trace Number|28133|0|15
 36.3779 +	ServiceClassCode|Service Class Code|28134|0|3
 36.3780 +	StandardEntryClassCode|Entry Class Code|28135|0|3
 36.3781 +	CompanyDescDate|Company Descriptive Date|28136|0|6
 36.3782 +	EffectiveEntryDate|Effective Entry Date|28137|0|6
 36.3783 +	OriginatingRT|Originating R&T|28138|0|8
 36.3784 +	ReceivingRT|Receiving R&T|28139|0|8
 36.3785 +	DiscretionaryData|Individual Discretionary Data|28140|0|2
 36.3786 +	CustomInfo|Custom Info|28141|0|8
 36.3787 +	HoldReference2|Hold Reference 2|28142|0|10
 36.3788 +	SourceCode|Source Code|28143|0|1
 36.3789 +	OriginatorStatus|Originator Status|28144|0|1
 36.3790 +	Status|Status|28145|5|4
 36.3791 +	BatchSequence|Batch Sequence|0|4|null
 36.3792 +	PostsEQUence|Post Sequence Number|28147|4|null
 36.3793 +	PostDate|Post Date|28148|3|null
 36.3794 +	CORRdate|Correction Date|28149|3|null
 36.3795 +	CorrectData|Correction Data|28150|0|29
 36.3796 +	CorrectCode|Correction Code|28151|0|3
 36.3797 +	ReturnCode|Return Code|28152|0|3
 36.3798 +	ExcpPostCode|Force Exception Code|28153|5|2999
 36.3799 +	VendorNumber|Vendor Number|28154|0|10
 36.3800 +	SubTranCode|Sub Tran Code|28155|5|9999
 36.3801 +	ForceExcpDescr|Force Exception Description|28190|1|32
 36.3802 +	SubTranDescr|Sub Tran Description|28191|1|40
 36.3803 +	***|ACHAddenda|ACH Addenda
 36.3804 +		Type|Type|0|5|11
 36.3805 +		Locator|Locator|0|4|null
 36.3806 +		AddendaStd:1|Addenda Record 1|0|0|40
 36.3807 +		AddendaStd:2|Addenda Record 2|0|0|40
 36.3808 +		AddendaStd:3|Addenda Record 3|0|0|14
 36.3809 +		RecordType|Record Type Code|0|0|1
 36.3810 +		AddendaType|Addenda Type Code|0|0|2
 36.3811 +		TranDesc|Transaction Description|0|0|7
 36.3812 +		NetworkIDCode|Network ID Code|0|0|3
 36.3813 +		TerminalIDCode|Terminal ID Code|0|0|6
 36.3814 +		TranSerial|Transaction Serial Number|0|0|6
 36.3815 +		TranDateMmdd|Transaction Date|0|0|4
 36.3816 +		TranTime|Transaction Time|0|0|6
 36.3817 +		TerminalLocation|Terminal Location|0|0|27
 36.3818 +		TerminalCity|Terminal City|0|0|15
 36.3819 +		TerminalsTate|Terminal State|0|0|2
 36.3820 +		TraceNumber|Trace Number|0|0|15
 36.3821 +		TranType|Transaction Type|0|0|3
 36.3822 +		ForeignRecDFI|Foreign Receiving DFI|0|0|11
 36.3823 +		ForeignPayment|Foreign Payment Amount|0|0|15
 36.3824 +		ForeignTrace|Foreign Trace Number|0|0|22
 36.3825 +		ForeignAcctNum|Foreign Receiver Account|0|0|25
 36.3826 +		PmtRelatedInfo:1|Payment Related Info 1|0|0|40
 36.3827 +		PmtRelatedInfo:2|Payment Related Info 2|0|0|40
 36.3828 +		AddendaSeqNum|Addenda Sequence Number|0|0|4
 36.3829 +		DetailSeqNum|Entry Detail Sequence Number|0|0|7
 36.3830 +		ExcpReason|Return Reason Code|0|0|3
 36.3831 +		OriginalTrace|Original Entry Trace|0|0|15
 36.3832 +		DateOfDeath|Date of Death|0|0|6
 36.3833 +		OriginalRecDFI|Original Receiving DFI|0|0|8
 36.3834 +		AddendaInfo:1|Addenda Information 1|0|0|40
 36.3835 +		AddendaInfo:2|Addenda Information 2|0|0|4
 36.3836 +		CorrectedData|Corrected Data|0|0|29
 36.3837 +		ChangeCode|Change Code|0|0|3
 36.3838 +		CORTracesEQ|COR Trace Sequence|0|0|7
 36.3839 +		OrigForeignRDFI|Original Foreign RDFI|0|0|11
 36.3840 +		OrigEntryPmt|Original Entry Payment|0|0|10
 36.3841 +		OrigForeignPmt|Original Foreign Payment|0|0|15
 36.3842 +		CBRAddendaInfo|CBR Addenda Info|0|0|8
 36.3843 +		OrigSettlDate|Original Settlement Date|0|0|3
 36.3844 +		ReturnTrace|Return Trace Number|0|0|15
 36.3845 +		ReturnSettlDate|Return Settlement Date|0|0|3
 36.3846 +		ReturnReason|Return Reason Code|0|0|2
 36.3847 +		DishonorTrace|Dishonored Return Trace|0|0|15
 36.3848 +		DishonorSettlDate|Dishonored Settlement Date|0|0|3
 36.3849 +		DishonorReason|Dishonored Return Reason|0|0|2
 36.3850 +	***|ACHEdit|ACH Edit
 36.3851 +		Type|Type|0|5|4
 36.3852 +		Locator|Locator|0|4|null
 36.3853 +		EditRecord:1|Edit Record 1|0|0|40
 36.3854 +		EditRecord:2|Edit Record 2|0|0|40
 36.3855 +		EditRecord:3|Edit Record 3|0|0|14
 36.3856 +		GLAccount|GL Account|0|0|14
 36.3857 +		GLComment|GL Comment|0|0|40
 36.3858 +		GLReference|GL Reference|0|0|10
 36.3859 +		GLReference1|GL Reference 1|0|0|10
 36.3860 +		RemitProCACcount|Remittance Processor Account|0|0|20
 36.3861 +		RemitFundType|Remittance Type of Funds|0|0|2
 36.3862 +		RemitPayer|Remittance Payer|0|0|2
 36.3863 +		RemitTranCode|Remittance Transaction Code|0|0|4
 36.3864 +		RemitDescription|Remittance Description|0|0|10
 36.3865 +		DisAmt|Discount Amount|0|7|null
 36.3866 +		CRVAmt|Credit Voucher Amount|0|7|null
 36.3867 +		PmtAmt|Payment Amount|0|7|null
 36.3868 +		InvoiceLocator|Invoice Number|0|0|20
 36.3869 +	***|ACHAddInfo|ACH Additional Info
 36.3870 +		Number|Number|0|5|4
 36.3871 +		Locator|Locator|0|4|null
 36.3872 +		AdditionInfo:1|Additional Info 1|0|0|40
 36.3873 +		AdditionInfo:2|Additional Info 2|0|0|40
 36.3874 +		AdditionInfo:3|Additional Info 3|0|0|40
 36.3875 +		AdditionInfo:4|Additional Info 4|0|0|12
 36.3876 +***|Vendor|Vendor
 36.3877 +	Number|Vendor Number|6301|0|10
 36.3878 +	Name|Vendor Name|6302|0|40
 36.3879 +	ExtraAddress|Extra Address|6303|0|30
 36.3880 +	Street|Street|6304|0|30
 36.3881 +	City|City|6305|0|20
 36.3882 +	State|State|6306|0|10
 36.3883 +	ZipCode|Zipcode|6307|0|10
 36.3884 +	Phone|Phone|6308|0|12
 36.3885 +	Contact|Contact Person|6309|0|40
 36.3886 +	CreditYTD|Credits YTD|6310|7|null
 36.3887 +	DebitYTD|Debits YTD|6311|7|null
 36.3888 +	LastPaymentAmount|Last Pmt Amount|6312|7|null
 36.3889 +	LastPaymentDate|Last Pmt Date|6313|3|null
 36.3890 +	GLExpense|Expense GL|6314|0|16
 36.3891 +	GLAcctSpaY|A/P GL|6315|0|16
 36.3892 +	GLDiscount|Discount GL|6316|0|16
 36.3893 +	LastFMDate|Last FM Date|6317|3|null
 36.3894 +	CustomerID|Customer ID|6318|0|40
 36.3895 +	AddressType|Address Type|6319|5|2
 36.3896 +	CreditLastYear|Credits Last Year|6320|7|null
 36.3897 +	DebitLastYear|Debits Last Year|6321|7|null
 36.3898 +	IRSReporting|IRS Reporting|6322|5|2
 36.3899 +	IRSCorrection|IRS Correction|6323|5|1
 36.3900 +	IRSAmountCode|IRS Amount Code|6324|5|12
 36.3901 +	SSNType|SSN/TIN Type|6325|5|9
 36.3902 +	SSN|SSN/TIN|6326|0|9
 36.3903 +	IRSNameControl|IRS Name Control|6327|0|4
 36.3904 +	RestrictionLevel|Restriction Level|6328|5|9
 36.3905 +	Comment1|Comment|6329|0|40
 36.3906 +	Payee|Payee|6330|0|10
 36.3907 +	Email|E-Mail Address|6331|0|40
 36.3908 +	PhoneExtension|Phone Ext|6332|0|6
 36.3909 +	Achgroupnumber|ACH Group Number|6333|0|6
 36.3910 +	CompanyDisc|Company Disc|6334|0|20
 36.3911 +	CompanyEntryDesc|Company Entry Desc|6335|0|10
 36.3912 +	DFIAccount|DFI Account|6336|0|20
 36.3913 +	RDFIRT|RDFI R&T|6337|0|9
 36.3914 +	ReceivingComp|Receiving Company|6338|0|22
 36.3915 +	AltEmail|Alt E-Mail Address|6340|0|40
 36.3916 +	ContactDesc|Contact Description|6341|0|20
 36.3917 +	Contact2|Contact 2 Person|6342|0|40
 36.3918 +	Contact2desc|Contact 2 Description|6343|0|20
 36.3919 +	Contact2phone|Contact 2 Phone|6345|0|12
 36.3920 +	Contact2ext|Contact 2 Ext|6344|0|6
 36.3921 +	Fax|Fax|6346|0|12
 36.3922 +	UnpaidBalance|Unpaid Balance|6380|7|null
 36.3923 +	GLNameAcctSpaY|GL Name Accts Payable|6381|1|40
 36.3924 +	GLNamedIsCount|GL Name Discount|6382|1|40
 36.3925 +	GLNameExpense|GL Name Expense|6383|1|40
 36.3926 +	***|Invoice|Invoice
 36.3927 +		Number|Number|6401|0|20
 36.3928 +		Description|Description|6402|0|40
 36.3929 +		PONumber|PO Number|6403|0|10
 36.3930 +		Approval|Approval|6404|0|10
 36.3931 +		InvoicedAtE|Invoice Date|6405|3|null
 36.3932 +		DueDate:1|Due Date 01|6406|3|null
 36.3933 +		DueDate:2|Due Date 02|6406|3|null
 36.3934 +		DueDate:3|Due Date 03|6406|3|null
 36.3935 +		DueDate:4|Due Date 04|6406|3|null
 36.3936 +		DueDate:5|Due Date 05|6406|3|null
 36.3937 +		DueDate:6|Due Date 06|6406|3|null
 36.3938 +		DueDate:7|Due Date 07|6406|3|null
 36.3939 +		DueDate:8|Due Date 08|6406|3|null
 36.3940 +		DueDate:9|Due Date 09|6406|3|null
 36.3941 +		DueDate:10|Due Date 10|6406|3|null
 36.3942 +		DueDate:11|Due Date 11|6406|3|null
 36.3943 +		DueDate:12|Due Date 12|6406|3|null
 36.3944 +		DueAmount:1|Due Amount 01|6407|7|null
 36.3945 +		DueAmount:2|Due Amount 02|6407|7|null
 36.3946 +		DueAmount:3|Due Amount 03|6407|7|null
 36.3947 +		DueAmount:4|Due Amount 04|6407|7|null
 36.3948 +		DueAmount:5|Due Amount 05|6407|7|null
 36.3949 +		DueAmount:6|Due Amount 06|6407|7|null
 36.3950 +		DueAmount:7|Due Amount 07|6407|7|null
 36.3951 +		DueAmount:8|Due Amount 08|6407|7|null
 36.3952 +		DueAmount:9|Due Amount 09|6407|7|null
 36.3953 +		DueAmount:10|Due Amount 10|6407|7|null
 36.3954 +		DueAmount:11|Due Amount 11|6407|7|null
 36.3955 +		DueAmount:12|Due Amount 12|6407|7|null
 36.3956 +		DueDateFinal|Final Due Date|6408|3|null
 36.3957 +		DiscountDate|Discount Date|6409|3|null
 36.3958 +		DiscountAmount|Discount Amount|6410|7|null
 36.3959 +		GLAcctSpaY|AP GL|6411|0|16
 36.3960 +		GLDiscount|Discount GL|6412|0|16
 36.3961 +		GLExpense:1|Expense GL  01|6413|0|16
 36.3962 +		GLExpense:2|Expense GL  02|6413|0|16
 36.3963 +		GLExpense:3|Expense GL  03|6413|0|16
 36.3964 +		GLExpense:4|Expense GL  04|6413|0|16
 36.3965 +		GLExpense:5|Expense GL  05|6413|0|16
 36.3966 +		GLExpense:6|Expense GL  06|6413|0|16
 36.3967 +		GLExpense:7|Expense GL  07|6413|0|16
 36.3968 +		GLExpense:8|Expense GL  08|6413|0|16
 36.3969 +		GLExpense:9|Expense GL  09|6413|0|16
 36.3970 +		GLExpense:10|Expense GL  10|6413|0|16
 36.3971 +		GLExpense:11|Expense GL  11|6413|0|16
 36.3972 +		GLExpense:12|Expense GL  12|6413|0|16
 36.3973 +		ExpenseTable:1|Expense Table 01|6414|5|299
 36.3974 +		ExpenseTable:2|Expense Table 02|6414|5|299
 36.3975 +		ExpenseTable:3|Expense Table 03|6414|5|299
 36.3976 +		ExpenseTable:4|Expense Table 04|6414|5|299
 36.3977 +		ExpenseTable:5|Expense Table 05|6414|5|299
 36.3978 +		ExpenseTable:6|Expense Table 06|6414|5|299
 36.3979 +		ExpenseTable:7|Expense Table 07|6414|5|299
 36.3980 +		ExpenseTable:8|Expense Table 08|6414|5|299
 36.3981 +		ExpenseTable:9|Expense Table 09|6414|5|299
 36.3982 +		ExpenseTable:10|Expense Table 10|6414|5|299
 36.3983 +		ExpenseTable:11|Expense Table 11|6414|5|299
 36.3984 +		ExpenseTable:12|Expense Table 12|6414|5|299
 36.3985 +		ExpenseAmount:1|Expense Amt 01|6415|7|null
 36.3986 +		ExpenseAmount:2|Expense Amt 02|6415|7|null
 36.3987 +		ExpenseAmount:3|Expense Amt 03|6415|7|null
 36.3988 +		ExpenseAmount:4|Expense Amt 04|6415|7|null
 36.3989 +		ExpenseAmount:5|Expense Amt 05|6415|7|null
 36.3990 +		ExpenseAmount:6|Expense Amt 06|6415|7|null
 36.3991 +		ExpenseAmount:7|Expense Amt 07|6415|7|null
 36.3992 +		ExpenseAmount:8|Expense Amt 08|6415|7|null
 36.3993 +		ExpenseAmount:9|Expense Amt 09|6415|7|null
 36.3994 +		ExpenseAmount:10|Expense Amt 10|6415|7|null
 36.3995 +		ExpenseAmount:11|Expense Amt 11|6415|7|null
 36.3996 +		ExpenseAmount:12|Expense Amt 12|6415|7|null
 36.3997 +		Status|Status|6416|5|6
 36.3998 +		ExpEffectiveDate|Expense Effective Date|6417|3|null
 36.3999 +		ExpPostDate|Expense Post Date|6418|3|null
 36.4000 +		LastFMDate|Last FM Date|6419|3|null
 36.4001 +		PaymentDate:1|Payment Date   01|6420|3|null
 36.4002 +		PaymentDate:2|Payment Date   02|6420|3|null
 36.4003 +		PaymentDate:3|Payment Date   03|6420|3|null
 36.4004 +		PaymentDate:4|Payment Date   04|6420|3|null
 36.4005 +		PaymentDate:5|Payment Date   05|6420|3|null
 36.4006 +		PaymentDate:6|Payment Date   06|6420|3|null
 36.4007 +		PaymentDate:7|Payment Date   07|6420|3|null
 36.4008 +		PaymentDate:8|Payment Date   08|6420|3|null
 36.4009 +		PaymentDate:9|Payment Date   09|6420|3|null
 36.4010 +		PaymentDate:10|Payment Date   10|6420|3|null
 36.4011 +		PaymentDate:11|Payment Date   11|6420|3|null
 36.4012 +		PaymentDate:12|Payment Date   12|6420|3|null
 36.4013 +		PaymentAmount:1|Payment Amount 01|6421|7|null
 36.4014 +		PaymentAmount:2|Payment Amount 02|6421|7|null
 36.4015 +		PaymentAmount:3|Payment Amount 03|6421|7|null
 36.4016 +		PaymentAmount:4|Payment Amount 04|6421|7|null
 36.4017 +		PaymentAmount:5|Payment Amount 05|6421|7|null
 36.4018 +		PaymentAmount:6|Payment Amount 06|6421|7|null
 36.4019 +		PaymentAmount:7|Payment Amount 07|6421|7|null
 36.4020 +		PaymentAmount:8|Payment Amount 08|6421|7|null
 36.4021 +		PaymentAmount:9|Payment Amount 09|6421|7|null
 36.4022 +		PaymentAmount:10|Payment Amount 10|6421|7|null
 36.4023 +		PaymentAmount:11|Payment Amount 11|6421|7|null
 36.4024 +		PaymentAmount:12|Payment Amount 12|6421|7|null
 36.4025 +		PaymentCheck:1|Payment Check  01|6422|0|12
 36.4026 +		PaymentCheck:2|Payment Check  02|6422|0|12
 36.4027 +		PaymentCheck:3|Payment Check  03|6422|0|12
 36.4028 +		PaymentCheck:4|Payment Check  04|6422|0|12
 36.4029 +		PaymentCheck:5|Payment Check  05|6422|0|12
 36.4030 +		PaymentCheck:6|Payment Check  06|6422|0|12
 36.4031 +		PaymentCheck:7|Payment Check  07|6422|0|12
 36.4032 +		PaymentCheck:8|Payment Check  08|6422|0|12
 36.4033 +		PaymentCheck:9|Payment Check  09|6422|0|12
 36.4034 +		PaymentCheck:10|Payment Check  10|6422|0|12
 36.4035 +		PaymentCheck:11|Payment Check  11|6422|0|12
 36.4036 +		PaymentCheck:12|Payment Check  12|6422|0|12
 36.4037 +		DiscountTaken|Discount Taken|6423|7|null
 36.4038 +		Locator|Locator|6424|4|null
 36.4039 +		Type|Invoice Type|6425|5|99
 36.4040 +		Event|Event Number|6426|5|50
 36.4041 +		EventDate|Event Date|6427|3|null
 36.4042 +		User|Assigned User|6428|5|9999
 36.4043 +		CompletedActions:1|Completed Action 01|6429|5|1
 36.4044 +		CompletedActions:2|Completed Action 02|6429|5|1
 36.4045 +		CompletedActions:3|Completed Action 03|6429|5|1
 36.4046 +		CompletedActions:4|Completed Action 04|6429|5|1
 36.4047 +		CompletedActions:5|Completed Action 05|6429|5|1
 36.4048 +		CompletedActions:6|Completed Action 06|6429|5|1
 36.4049 +		CompletedActions:7|Completed Action 07|6429|5|1
 36.4050 +		CompletedActions:8|Completed Action 08|6429|5|1
 36.4051 +		CompletedActions:9|Completed Action 09|6429|5|1
 36.4052 +		CompletedActions:10|Completed Action 10|6429|5|1
 36.4053 +		CompletedActions:11|Completed Action 11|6429|5|1
 36.4054 +		CompletedActions:12|Completed Action 12|6429|5|1
 36.4055 +		CompletedActions:13|Completed Action 13|6429|5|1
 36.4056 +		CompletedActions:14|Completed Action 14|6429|5|1
 36.4057 +		CompletedActions:15|Completed Action 15|6429|5|1
 36.4058 +		PaymentMethod|Payment Method|6430|5|1
 36.4059 +		Achtrancodeout|Outgoing ACH Transaction Code|6431|5|99
 36.4060 +		ImageID|Image ID|6432|0|40
 36.4061 +		Achgroupnumber|ACH Group Number|6433|0|6
 36.4062 +		CreateAddenda|Create Addenda Record|6434|5|1
 36.4063 +		PreNotedFIAccount|Pre Note DFI Account|6435|0|20
 36.4064 +		DFIAccount|DFI Account|6436|0|20
 36.4065 +		Achacknowledge|ACH Acknowledgement|6437|5|1
 36.4066 +		UnpaidBalance|Unpaid Balance|6480|7|null
 36.4067 +		GLNameAcctSpaY|GL Name Accts Payable|6481|1|40
 36.4068 +		GLNamedIsCount|GL Name Discount|6482|1|40
 36.4069 +		GLNameExpense:1|GL Name Expense 01|6483|1|40
 36.4070 +		GLNameExpense:2|GL Name Expense 02|6483|1|40
 36.4071 +		GLNameExpense:3|GL Name Expense 03|6483|1|40
 36.4072 +		GLNameExpense:4|GL Name Expense 04|6483|1|40
 36.4073 +		GLNameExpense:5|GL Name Expense 05|6483|1|40
 36.4074 +		GLNameExpense:6|GL Name Expense 06|6483|1|40
 36.4075 +		GLNameExpense:7|GL Name Expense 07|6483|1|40
 36.4076 +		GLNameExpense:8|GL Name Expense 08|6483|1|40
 36.4077 +		GLNameExpense:9|GL Name Expense 09|6483|1|40
 36.4078 +		GLNameExpense:10|GL Name Expense 10|6483|1|40
 36.4079 +		GLNameExpense:11|GL Name Expense 11|6483|1|40
 36.4080 +		GLNameExpense:12|GL Name Expense 12|6483|1|40
 36.4081 +		TotalExpenses|Total Expenses|6484|7|null
 36.4082 +		TotalPaymentS|Total Payments|6485|7|null
 36.4083 +		***|APInv Note|AP Invoice Note
 36.4084 +			ID|ID|2701|0|2
 36.4085 +			IDType|ID Type|2702|5|4
 36.4086 +			Code|Note Code|2703|5|199
 36.4087 +			Text:1|Text Line 01|2704|0|40
 36.4088 +			Text:2|Text Line 02|2704|0|40
 36.4089 +			Text:3|Text Line 03|2704|0|40
 36.4090 +			Text:4|Text Line 04|2704|0|40
 36.4091 +			Text:5|Text Line 05|2704|0|40
 36.4092 +			Text:6|Text Line 06|2704|0|40
 36.4093 +			Text:7|Text Line 07|2704|0|40
 36.4094 +			Text:8|Text Line 08|2704|0|40
 36.4095 +			Text:9|Text Line 09|2704|0|40
 36.4096 +			Text:10|Text Line 10|2704|0|40
 36.4097 +			Text:11|Text Line 11|2704|0|40
 36.4098 +			Text:12|Text Line 12|2704|0|40
 36.4099 +			UserID|User ID|2705|5|4999
 36.4100 +			EnterDate|Enter Date|2706|3|null
 36.4101 +			EnterTime|Enter Time|2707|5|2359
 36.4102 +			VoidFlag|Voided|2709|5|1
 36.4103 +			VoidedBy|Voided By|2710|5|4999
 36.4104 +			ExpirationDate|Expiration Date|2711|3|null
 36.4105 +			Locator|Locator|2719|4|null
 36.4106 +***|ATMDialog|ATM Dialog
 36.4107 +	MessageTypeIn|Message Type In|0|0|6
 36.4108 +	DuplicateFlag|Duplicate Flag|0|5|1
 36.4109 +	ProcessorAccount|Processor Account Number|0|0|20
 36.4110 +	CardsEQUencenumber|Card Sequence Number|0|0|3
 36.4111 +	TransactionCode|Transaction Code|0|0|10
 36.4112 +	ResponseCodeIn|Response Code In|0|0|2
 36.4113 +	Amount1In|Amount 1 In|0|6|null
 36.4114 +	Amount2In|Amount 2 In|0|6|null
 36.4115 +	Amount3In|Amount 3 In|0|6|null
 36.4116 +	Amount4In|Amount 4 In|0|6|null
 36.4117 +	Amount5In|Amount 5 In|0|6|null
 36.4118 +	Amount6In|Amount 6 In|0|6|null
 36.4119 +	Amount7In|Amount 7 In|0|6|null
 36.4120 +	Amount8In|Amount 8 In|0|6|null
 36.4121 +	Amount9In|Amount 9 In|0|6|null
 36.4122 +	Amount10In|Amount 10 In|0|6|null
 36.4123 +	AuthIDResponse|Auth ID Response|0|0|6
 36.4124 +	TraceNumber|Trace Number|0|0|6
 36.4125 +	ReferenceNumber|Reference Number|0|0|12
 36.4126 +	LocalTranDate|Local Transaction Date|0|3|null
 36.4127 +	LocalTranTime|Local Transaction Time|0|0|6
 36.4128 +	CaptureDate|Capture Date|0|3|null
 36.4129 +	SettlementDate|Settlement Date|0|3|null
 36.4130 +	ConversionDate|Conversion Date|0|3|null
 36.4131 +	TransmissionDate|Transmission Date|0|3|null
 36.4132 +	TransmissionTime|Transmission Time|0|0|6
 36.4133 +	CardExpirationDate|Card Expiration Date|0|3|null
 36.4134 +	ExtraDate1|Extra Date 1|0|3|null
 36.4135 +	ExtraTime1|Extra Time 1|0|0|6
 36.4136 +	OurSystemDate|Our System Date|0|3|null
 36.4137 +	InternalNetwork|Internal Network|0|0|5
 36.4138 +	PreAuthLifetime|Pre-Authorization Lifetime|0|0|6
 36.4139 +	SourceInstID|Source Institution ID|0|0|15
 36.4140 +	TerminalID|Terminal ID|0|0|8
 36.4141 +	NetworkID|Network ID|0|0|15
 36.4142 +	DestinationInstID|Destination Institution ID|0|0|15
 36.4143 +	SettlementInstID|Settlement Institution ID|0|0|15
 36.4144 +	POSEntryMode|Point of Sale Entry Mode|0|5|999
 36.4145 +	POSConditionCode|Point of Svc Condition Code|0|0|6
 36.4146 +	SettleConversionRate|Settlement Conversion Rate|0|0|8
 36.4147 +	IssuerConversionRate|Card Issuer Conversion Rate|0|0|8
 36.4148 +	MiscData1|Misc Data 1|0|0|80
 36.4149 +	MiscData2|Misc Data 2|0|0|80
 36.4150 +	MiscData3|Misc Data 3|0|0|80
 36.4151 +	MiscData4|Misc Data 4|0|0|80
 36.4152 +	TranCurrencyCode|Transaction Currency Code|0|5|999
 36.4153 +	SettleCurrencyCode|Settlement Currency Code|0|5|999
 36.4154 +	IssuerCurrencyCode|Card Issuer Currency Code|0|5|999
 36.4155 +	MerchantType|Merchant Type|0|5|9999
 36.4156 +	ReversalCode|Reversal Code|0|5|99
 36.4157 +	DeviceNumber|Device Number|0|5|999
 36.4158 +	DeviceName|Device Name|0|0|20
 36.4159 +	DeviceType|Device Type|0|5|1
 36.4160 +	MessageFormat|Message Format|0|0|10
 36.4161 +	RoutingCode|Routing Code|0|5|2
 36.4162 +	SymDir|SYM Directory|0|0|3
 36.4163 +	PostsUccess|Post Success Flag|0|5|1
 36.4164 +	ReversalFlag|Reversal Flag|0|5|1
 36.4165 +	AdjustmentFlag|Adjustment Flag|0|5|1
 36.4166 +	OriginalAmount|Original Amount|0|6|null
 36.4167 +	TranSubType|Transaction SubType|0|5|99
 36.4168 +	OurPreAuthCode|Our PreAuth Code|0|5|3
 36.4169 +	OurTranCode|Our Transaction Code|0|5|7
 36.4170 +	OurAccount|Our Account Number|0|0|10
 36.4171 +	OurAcctCode1|Our Account Code 1|0|5|4
 36.4172 +	OurAcctCode2|Our Account Code 2|0|5|4
 36.4173 +	OurID1|Our ID 1|0|0|4
 36.4174 +	OurID2|Our ID 2|0|0|4
 36.4175 +	OurFeeAmount|Our Fee Amount|0|6|null
 36.4176 +	OurFeeID|Our Fee ID|0|0|4
 36.4177 +	KeyGenCode|Key Generation Code|0|5|4
 36.4178 +	ReplaceAmount1|Replacement Amount 1|0|6|null
 36.4179 +	ReplaceAmount2|Replacement Amount 2|0|6|null
 36.4180 +	ReplaceAmount3|Replacement Amount 3|0|6|null
 36.4181 +	ReplaceAmount4|Replacement Amount 4|0|6|null
 36.4182 +	ReplaceCode|Replacement Code|0|5|9999
 36.4183 +	ReplaceDate1|Replacement Date 1|0|3|null
 36.4184 +	ReplaceTime1|Replacement Time 1|0|0|6
 36.4185 +	ReplaceDate2|Replacement Date 2|0|3|null
 36.4186 +	ReplaceTime2|Replacement Time 2|0|0|6
 36.4187 +	ReplaceField1|Replacement Field 1|0|0|20
 36.4188 +	ReplaceField2|Replacement Field 2|0|0|20
 36.4189 +	ReversalResponseCode|Reversal Response Code|0|5|99
 36.4190 +	MessageTypeout|Message Type Out|0|0|6
 36.4191 +	ResponseCodeOut|Response Code Out|0|0|2
 36.4192 +	PostAmount|Post Amount|0|6|null
 36.4193 +	Amount1Out|Amount 1 Out|0|6|null
 36.4194 +	Amount2Out|Amount 2 Out|0|6|null
 36.4195 +	Amount3Out|Amount 3 Out|0|6|null
 36.4196 +	Amount4Out|Amount 4 Out|0|6|null
 36.4197 +	Amount5Out|Amount 5 Out|0|6|null
 36.4198 +	Amount6Out|Amount 6 Out|0|6|null
 36.4199 +	Amount7Out|Amount 7 Out|0|6|null
 36.4200 +	Amount8Out|Amount 8 Out|0|6|null
 36.4201 +	Amount9Out|Amount 9 Out|0|6|null
 36.4202 +	Amount10Out|Amount 10 Out|0|6|null
 36.4203 +	OurTransmissionDate|Our Transmission Date|0|3|null
 36.4204 +	OurTransmissionTime|Our Transmission Time|0|0|6
 36.4205 +	TurnaroundTime|Turn Around Time|0|5|99
 36.4206 +	OurResponseCode|Our Response Code|0|5|9999
 36.4207 +	SubState|SubState|0|5|3
 36.4208 +	CurrencyIndex|Currency Rate Index|0|5|3
 36.4209 +	CurrencyAmount|Currency Amount|0|6|null
 36.4210 +	ApprovedLesserCode|Approved For Lesser Amt Code|0|0|1
 36.4211 +	OurReversalCode|Our Reversal Code|0|0|1
 36.4212 +	OurAccount2|Our Account Number 2|0|0|10
 36.4213 +	ForcePost|Force Post Flag|0|5|2
 36.4214 +***|CashLetter|Cash Letter
 36.4215 +	GlobalSequence|Global Sequence|28201|4|null
 36.4216 +	GlobalSequenceDate|Global Seq Date|28202|3|null
 36.4217 +	Type|Type|28203|5|5
 36.4218 +	CreationDate|Creation Date|28204|3|null
 36.4219 +	CreationTime|Creation Time|28205|5|2359
 36.4220 +	AccountNumber|Account Number|28206|0|10
 36.4221 +	ShareID|Share ID|28207|0|2
 36.4222 +	OriginatorRT|Originator R&T|28208|0|9
 36.4223 +	CorporateID|Corporate ID|28209|0|9
 36.4224 +	USCEnTralrt|US Central R&T|28210|0|9
 36.4225 +	MemberID|Member ID|28211|0|9
 36.4226 +	CashLetterAmount|Cash Letter Amount|28212|7|null
 36.4227 +	CashLetterDate|Cash Letter Date|28213|3|null
 36.4228 +	OriginalAmount|Original Amount|28214|7|null
 36.4229 +	OriginalDepositDate|Original Deposit Date|28215|3|null
 36.4230 +	AvailableAmount:1|Available Amount 1|28216|7|null
 36.4231 +	AvailableAmount:2|Available Amount 2|28216|7|null
 36.4232 +	AvailableAmount:3|Available Amount 3|28216|7|null
 36.4233 +	AvailableAmount:4|Available Amount 4|28216|7|null
 36.4234 +	AvailableDate:1|Available Date 1|28217|3|null
 36.4235 +	AvailableDate:2|Available Date 2|28217|3|null
 36.4236 +	AvailableDate:3|Available Date 3|28217|3|null
 36.4237 +	AvailableDate:4|Available Date 4|28217|3|null
 36.4238 +	AdjustmentAmount|Adjustment Amount|28218|7|null
 36.4239 +	AdjustmentDate|Adjustment Date|28219|3|null
 36.4240 +	ProcessDate|Process Date|28220|3|null
 36.4241 +	ItemCount|Item Count|28221|4|null
 36.4242 +	PriorAmount|Prior Amount|28222|7|null
 36.4243 +	Reference|Reference|28223|0|8
 36.4244 +	FedCode|Fed Code|28224|5|9999
 36.4245 +	Branch|Branch|28225|5|9999
 36.4246 +	DebitCredit|Debit/Credit|28226|5|1
 36.4247 +	ReturnReason|Return Reason|28227|0|2
 36.4248 +	ReturnType|Return Type|28228|0|2
 36.4249 +	FedReference|Fed Reference|28229|0|6
 36.4250 +	StatementCode|Statement Code|28230|0|2
 36.4251 +	DepositDate|Deposit Date|28231|3|null
 36.4252 +	DebitAmount|Debit Amount|28232|7|null
 36.4253 +	CreditAmount|Credit Amount|28233|7|null
 36.4254 +	ReSubmitAmount|Resubmit Amount|28234|7|null
 36.4255 +	AdjustedTotalAmount|Adjusted Total Amount|28235|7|null
 36.4256 +	AccountInformation|Account Information|28236|0|15
 36.4257 +	ThirdPartyInformation|3rd Party Information|28237|0|15
 36.4258 +	Payee|Payee|28238|0|15
 36.4259 +	BatchID|Batch ID|28239|0|6
 36.4260 +	ReversalFlag|Reversal Flag|28240|5|1
 36.4261 +	ReversalDate|Reversal Date|28241|3|null
 36.4262 +	CalculatedAmount|Calculated Amount|28301|6|null
 36.4263 +	ImmediateAmount|Immediate Amount|28302|6|null
 36.4264 +	DayDeferredAmount:1|1 Day Deferred Amount|28303|6|null
 36.4265 +	DayDeferredAmount:2|2 Day Deferred Amount|28303|6|null
 36.4266 +	DayDeferredAmount:3|3 Day Deferred Amount|28303|6|null
 36.4267 +	DayDeferredAmount:4|4 Day Deferred Amount|28303|6|null
 36.4268 +	DayDeferredAmount:5|5 Day Deferred Amount|28303|6|null
 36.4269 +	DayDeferredAmount:6|6 Day Deferred Amount|28303|6|null
 36.4270 +	DayDeferredAmount:7|7 Day Deferred Amount|28303|6|null
 36.4271 +	DayDeferredAmount:8|8 Day Deferred Amount|28303|6|null
 36.4272 +	DayDeferredAmount:9|9 Day Deferred Amount|28303|6|null
 36.4273 +	CalculatedDate|Calculated Date|28304|3|null
 36.4274 +***|CashOrder|Cash Order
 36.4275 +	SequenceNumber|Sequence Number|9701|4|null
 36.4276 +	Status|Status|9702|5|3
 36.4277 +	AccountNumber|Account Number|9703|0|10
 36.4278 +	SiteLocator|Site Locator|9704|4|null
 36.4279 +	CashOrderTypeLocator|Cash Order Type Locator|9705|4|null
 36.4280 +	VendorNumber|Vendor Number|9706|5|9999
 36.4281 +	DeliveryDate|Delivery Date|9707|3|null
 36.4282 +	CommentLine:1|Comments Line 1|9708|0|40
 36.4283 +	CommentLine:2|Comments Line 2|9708|0|40
 36.4284 +	CommentLine:3|Comments Line 3|9708|0|40
 36.4285 +	CommentLine:4|Comments Line 4|9708|0|40
 36.4286 +	CurrFit:1|Currency Fit - Hundreds|9709|7|null
 36.4287 +	CurrFit:2|Currency Fit - Fifties|9709|7|null
 36.4288 +	CurrFit:3|Currency Fit - Twenties|9709|7|null
 36.4289 +	CurrFit:4|Currency Fit - Tens|9709|7|null
 36.4290 +	CurrFit:5|Currency Fit - Fives|9709|7|null
 36.4291 +	CurrFit:6|Currency Fit - Twos|9709|7|null
 36.4292 +	CurrFit:7|Currency Fit - Ones|9709|7|null
 36.4293 +	CurrNew:1|Currency New - Hundreds|9710|7|null
 36.4294 +	CurrNew:2|Currency New - Fifties|9710|7|null
 36.4295 +	CurrNew:3|Currency New - Twenties|9710|7|null
 36.4296 +	CurrNew:4|Currency New - Tens|9710|7|null
 36.4297 +	CurrNew:5|Currency New - Fives|9710|7|null
 36.4298 +	CurrNew:6|Currency New - Twos|9710|7|null
 36.4299 +	CurrNew:7|Currency New - Ones|9710|7|null
 36.4300 +	CoinRoll:1|Coin Roll - Golden Dollars|9711|7|null
 36.4301 +	CoinRoll:2|Coin Roll - Susan Bs|9711|7|null
 36.4302 +	CoinRoll:3|Coin Roll - Halves|9711|7|null
 36.4303 +	CoinRoll:4|Coin Roll - Quarters|9711|7|null
 36.4304 +	CoinRoll:5|Coin Roll - Dimes|9711|7|null
 36.4305 +	CoinRoll:6|Coin Roll - Nickels|9711|7|null
 36.4306 +	CoinRoll:7|Coin Roll - Pennies|9711|7|null
 36.4307 +	CoinRoll:8|Coin Roll - State Quarters|9711|7|null
 36.4308 +	CoinBag:1|Coin Bag - Golden Dollars|9712|7|null
 36.4309 +	CoinBag:2|Coin Bag - Susan Bs|9712|7|null
 36.4310 +	CoinBag:3|Coin Bag - Halves|9712|7|null
 36.4311 +	CoinBag:4|Coin Bag - Quarters|9712|7|null
 36.4312 +	CoinBag:5|Coin Bag - Dimes|9712|7|null
 36.4313 +	CoinBag:6|Coin Bag - Nickels|9712|7|null
 36.4314 +	CoinBag:7|Coin Bag - Pennies|9712|7|null
 36.4315 +	EnteredDate|Entered Date|9713|3|null
 36.4316 +	EnteredTime|Entered Time|9714|5|2359
 36.4317 +	EnteredMemberUser|Entered by Member User|9715|4|null
 36.4318 +	EnteredCorpusEr|Entered by Corp User|9716|4|null
 36.4319 +	ValidationMethod|Validation Method|9717|0|40
 36.4320 +	LastRevisedDate|Last Revised Date|9718|3|null
 36.4321 +	LastRevisedTime|Last Revised Time|9719|5|2359
 36.4322 +	LastRevisedMemberUser|Last Revised by Member User|9720|4|null
 36.4323 +	LastRevisedCorpusEr|Last Revised by Corp User|9721|4|null
 36.4324 +	PulledDate|Pulled Date|9722|3|null
 36.4325 +	PulledTime|Pulled Time|9723|5|2359
 36.4326 +	PulledCorpusEr|Pulled by User|9724|4|null
 36.4327 +	CompletedDate|Completed Date|9725|3|null
 36.4328 +	CompletedTime|Completed Time|9726|5|2359
 36.4329 +	CancelLedDate|Cancelled Date|9727|3|null
 36.4330 +	CancelLedTime|Cancelled Time|9728|5|2359
 36.4331 +	CancelLedMemberUser|Cancelled by Member User|9729|4|null
 36.4332 +	CancelLedCorpusEr|Cancelled by Corp User|9730|4|null
 36.4333 +	CancelLedReason|Cancelled Reason|9731|0|40
 36.4334 +	TotalAmount|Total Amount|9780|7|null
 36.4335 +	EnteredMbrUserName|Entered by Mbr User Name|9781|0|20
 36.4336 +	EnteredCorpusErname|Entered by Corp User Name|9782|0|20
 36.4337 +	ReVedmbrusername|Revised by Mbr User Name|9783|0|20
 36.4338 +	ReVedcorpusername|Revised by Corp User Name|9784|0|20
 36.4339 +	PulledCorpusErname|Pulled by User Name|9785|0|20
 36.4340 +	CanceledMbrUserName|Cancelled by Mbr User Name|9786|0|20
 36.4341 +	CanceledCorpusErname|Cancelled by Corp User Name|9787|0|20
 36.4342 +***|CDMDialog|Cash Dispense Dialog
 36.4343 +	TransmissionDate|Transmission Date|0|3|null
 36.4344 +	TransmissionTime|Transmission Time|0|5|1259
 36.4345 +	RequestAmount|Request Amount|0|6|null
 36.4346 +	ResponseAmount|Response Amount|0|6|null
 36.4347 +	User|User|0|5|4999
 36.4348 +	TellerDirection|Teller Direction|0|5|2
 36.4349 +	RequestCassette:1|Request Cassette 1|0|5|32767
 36.4350 +	RequestCassette:2|Request Cassette 2|0|5|32767
 36.4351 +	RequestCassette:3|Request Cassette 3|0|5|32767
 36.4352 +	RequestCassette:4|Request Cassette 4|0|5|32767
 36.4353 +	RequestCassette:5|Request Cassette 5|0|5|32767
 36.4354 +	RequestCassette:6|Request Cassette 6|0|5|32767
 36.4355 +	RequestDispenser|Request Dispenser|0|6|null
 36.4356 +	ResponseCassette:1|Response Cassette 1|0|5|32767
 36.4357 +	ResponseCassette:2|Response Cassette 2|0|5|32767
 36.4358 +	ResponseCassette:3|Response Cassette 3|0|5|32767
 36.4359 +	ResponseCassette:4|Response Cassette 4|0|5|32767
 36.4360 +	ResponseCassette:5|Response Cassette 5|0|5|32767
 36.4361 +	ResponseCassette:6|Response Cassette 6|0|5|32767
 36.4362 +	ResponseDispenser|Response Dispenser|0|6|null
 36.4363 +	DeviceNumber|Device Number|0|5|99
 36.4364 +	Status|Status|0|0|1
 36.4365 +***|Check|Check
 36.4366 +	AccountCode|Checking Acct Code|3501|0|2
 36.4367 +	Number|Check Number|3502|0|10
 36.4368 +	Payee:1|Payee Line 1|3503|0|40
 36.4369 +	Payee:2|Payee Line 2|3503|0|40
 36.4370 +	Payee:3|Payee Line 3|3503|0|40
 36.4371 +	Payee:4|Payee Line 4|3503|0|40
 36.4372 +	Payee:5|Payee Line 5|3503|0|40
 36.4373 +	PostDate|Post Date|3504|3|null
 36.4374 +	SequenceNumber|Tran Seq Number|3505|4|null
 36.4375 +	IssueDate|Issue Date|3506|3|null
 36.4376 +	ReconciliationDate|Reconcile Date|3507|3|null
 36.4377 +	Status|Status|3508|5|5
 36.4378 +	AccountNumber|Account|3509|0|10
 36.4379 +	IDType|ID Type|3510|5|2
 36.4380 +	ID|ID|3511|0|2
 36.4381 +	Reference|Reference|3512|0|40
 36.4382 +	Amount|Amount|3513|7|null
 36.4383 +	Branch|Branch|3514|5|9999
 36.4384 +	Source|Source|3515|5|27
 36.4385 +	VoidDate|Void Date|3516|3|null
 36.4386 +	StopPmtDate|Stop Payment Date|3517|3|null
 36.4387 +	Reference2|Reference 2|3518|0|40
 36.4388 +	TracerNumber|Tracer Number|3519|0|15
 36.4389 +	SourceGLCode|Source GL Code|3520|5|999
 36.4390 +	Escheatdate|Escheat Date|3521|3|null
 36.4391 +	CheckNumberAssigned|Check Number Assigned|3522|5|1
 36.4392 +	GlobalSequenceDate|Global Seq Date|3523|3|null
 36.4393 +	GlobalSequence|Global Sequence|3524|4|null
 36.4394 +	Reference3|Reference 3|3525|0|20
 36.4395 +***|CorpTransfer|Corporate Transfer
 36.4396 +	GlobalSequence|Global Sequence|28401|4|null
 36.4397 +	GlobalSequenceDate|Global Seq Date|28402|3|null
 36.4398 +	Type|Type|28403|5|3
 36.4399 +	Status|Status|28404|5|2
 36.4400 +	FromAccount|From Account|28405|0|10
 36.4401 +	FromIDType|From ID Type|28406|5|1
 36.4402 +	FromID|From ID|28407|0|2
 36.4403 +	FromGLAccount|From GL Account|28408|0|14
 36.4404 +	ToAccount|To Account|28409|0|10
 36.4405 +	ToIDType|To ID Type|28410|5|1
 36.4406 +	ToID|To ID|28411|0|2
 36.4407 +	ToGLAccount|To GL Account|28412|0|14
 36.4408 +	Amount|Amount|28413|7|null
 36.4409 +	PrincipalAmount|Principal Amount|28414|7|null
 36.4410 +	InterestAmount|Interest Amount|28415|7|null
 36.4411 +	Memo:1|Memo|28416|0|40
 36.4412 +	Memo:2|Memo|28416|0|40
 36.4413 +	EffectiveDate|Effective Date|28417|3|null
 36.4414 +	PostDate|Post Date|28418|3|null
 36.4415 +	EnteredDate|Entered Date|28419|3|null
 36.4416 +	EnteredTime|Entered Time|28420|5|2359
 36.4417 +	EnteredByMemberUser|Entered By Member User|28421|4|null
 36.4418 +	EnteredByCorporateUser|Entered By Corporate User|28422|4|null
 36.4419 +	EnteredValidationMethod|Entered Validation Method|28423|0|40
 36.4420 +	NoticedAtE|Notice Date|28424|3|null
 36.4421 +	CompletedDate|Completed Date|28425|3|null
 36.4422 +	CompletedTime|Completed Time|28426|5|2359
 36.4423 +	CompletedByUser|Completed By User|28427|4|null
 36.4424 +	CompletedReason|Completed Reason|28428|0|40
 36.4425 +	NotificationsTatus|Notification Status|28429|5|2
 36.4426 +	NotificationMethod|Notification Method|28430|5|2
 36.4427 +	NotificationDate|Notification Date|28431|3|null
 36.4428 +	NotificationTime|Notification Time|28432|5|2359
 36.4429 +	NotificationUser|Notification User|28433|0|40
 36.4430 +	OriginatorStatementDesc|Originator Statement Desc|28434|0|40
 36.4431 +	ReceiversTateMenTdesc|Receiver Statement Desc|28435|0|40
 36.4432 +	OriginatorTransactionsEQ|Originator Transaction Seq|28436|4|null
 36.4433 +	ReceiverTransactionsEQ|Receiver Transaction Seq|28437|4|null
 36.4434 +***|Dealer|Dealer
 36.4435 +	Number|Dealer Number|28501|0|10
 36.4436 +	Name|Dealer Name|28502|0|40
 36.4437 +	VendorNumber|Vendor Number|28503|0|10
 36.4438 +	Achtrancodeout|Outgoing ACH Transaction Code|28504|5|99
 36.4439 +	OpenDate|Open Date|28505|3|null
 36.4440 +	CloseDate|Close Date|28506|3|null
 36.4441 +	LastFMDate|Last FM Date|28507|3|null
 36.4442 +	FMLastPurgeDate|FM History Purge Date|28508|3|null
 36.4443 +	StatementDate|Statement Date|28509|3|null
 36.4444 +	StatementPrevDate|Statement Previous Date|28510|3|null
 36.4445 +	StatementGroup|Statement Group|28511|5|99
 36.4446 +	PaymentMethod|Payment Method|28512|5|2
 36.4447 +	Balance|Balance|28513|7|null
 36.4448 +	LastPurgeDate|Last Purge Date|28514|3|null
 36.4449 +	LastDisbursalDate|Last Disbursal Date|28515|3|null
 36.4450 +	SubType|Sub Type|28517|5|99
 36.4451 +	TotalReserveAccrual|Total Reserve Accrual|28518|7|null
 36.4452 +	Buckets:1|Pmt Bucket 01|28519|7|null
 36.4453 +	Buckets:2|Pmt Bucket 02|28519|7|null
 36.4454 +	Buckets:3|Pmt Bucket 03|28519|7|null
 36.4455 +	Buckets:4|Pmt Bucket 04|28519|7|null
 36.4456 +	Buckets:5|Pmt Bucket 05|28519|7|null
 36.4457 +	Buckets:6|Pmt Bucket 06|28519|7|null
 36.4458 +	Buckets:7|Pmt Bucket 07|28519|7|null
 36.4459 +	Buckets:8|Pmt Bucket 08|28519|7|null
 36.4460 +	Buckets:9|Pmt Bucket 09|28519|7|null
 36.4461 +	Buckets:10|Pmt Bucket 10|28519|7|null
 36.4462 +	Buckets:11|Pmt Bucket 11|28519|7|null
 36.4463 +	Buckets:12|Pmt Bucket 12|28519|7|null
 36.4464 +	PaymentsLastYear|Payments Last Year|28520|7|null
 36.4465 +	PaymentsLTD|Payments Life to Date|28521|7|null
 36.4466 +	LegacyCode|Legacy Code|28522|0|10
 36.4467 +	Branch|Branch|28523|5|9999
 36.4468 +	ReservePaymentMethod|Reserve Payment Method|28524|5|2
 36.4469 +	UserChar1|User Char   01|28525|0|40
 36.4470 +	UserChar2|User Char   02|28526|0|40
 36.4471 +	UserChar3|User Char   03|28527|0|40
 36.4472 +	UserAmount1|User Amount 01|28528|7|null
 36.4473 +	UserAmount2|User Amount 02|28529|7|null
 36.4474 +	UserNumber1|User Number 01|28530|4|null
 36.4475 +	UserRate1|User Rate   01|28531|2|null
 36.4476 +	UserDate1|User Date   01|28532|3|null
 36.4477 +	UserCode1|User Code   01|28533|5|9999
 36.4478 +	BeginningBalLS|Beginning Bal Last Stmt|28535|7|null
 36.4479 +	UpFrontRSRVLS|Upfront Rsrv Last Stmt|28536|7|null
 36.4480 +	ChargeBackLS|Chargeback Last Stmt|28537|7|null
 36.4481 +	FeesLS|Fees Last Stmt|28538|7|null
 36.4482 +	AdjLS|Adjustments Last Stmt|28539|7|null
 36.4483 +	HoldBackLS|Holdback Last Stmt|28540|7|null
 36.4484 +	PaymentsYTD|Payments YTD|28541|7|null
 36.4485 +	VendorName|Vendor Name|28560|0|40
 36.4486 +	VendorEmail|Vendor E-mail|28561|0|40
 36.4487 +	VendorContact|Vendor Contact Person|28562|0|40
 36.4488 +	VendorPhone|Vendor Phone|28563|0|12
 36.4489 +	VendorPhoneExT|Vendor Phone Ext|28564|0|6
 36.4490 +	VendorContact2phone|Vendor Contact 2 Phone|28565|0|12
 36.4491 +	VendorAltEmail|Vendor Alt E-Mail Address|28566|0|40
 36.4492 +	VendorContact2|Vendor Contact 2 Person|28567|0|40
 36.4493 +	VendorContact2description|Vendor Contact 2 Description|28568|0|20
 36.4494 +	VendorContact2phoneext|Vendor Contact 2 Phone Ext|28569|0|6
 36.4495 +	VendorsTreeT|Vendor Street|28570|0|30
 36.4496 +	VendorCity|Vendor City|28571|0|20
 36.4497 +	VendorsTate|Vendor State|28572|0|10
 36.4498 +	VendorZipCode|Vendor Zipcode|28573|0|10
 36.4499 +	VendorContactDescription|Vendor Contact Description|28574|0|20
 36.4500 +	VendorExtraAddress|Vendor Extra Address|28575|0|30
 36.4501 +	LoanCount|Number of Loans|28576|4|null
 36.4502 +	ChgOffLoanCount|Num of Charged Off Loans|28577|4|null
 36.4503 +	TotalLoanBalance|Total Loan Balance|28578|7|null
 36.4504 +	TotalUpFrontReserve|Total Up-Front Reserve|28579|7|null
 36.4505 +	TotalHoldBackAmount|Total Holdback Amount|28580|7|null
 36.4506 +	TotalEarnedReserve|Total Earned Reserve|28581|7|null
 36.4507 +	TotalUnearnedReserve|Total Unearned Reserve|28582|7|null
 36.4508 +	ChargeOffBalance|Charge Off Balance|28583|7|null
 36.4509 +	ChargeBackBalance|Chargeback Balance|28584|7|null
 36.4510 +	LoanBalanceSLP|New Loan Balance SLP|28585|7|null
 36.4511 +	UnpaidUpFrontReserve|Unpaid Up-Front Reserve|28586|7|null
 36.4512 +	LoanCountsLp|Number of Loans SLP|28587|4|null
 36.4513 +	DealerTotalBalance|Dealer Total Balance|28588|7|null
 36.4514 +	DealerAvailBalance|Dealer Available Balance|28589|7|null
 36.4515 +	Active|Active|28590|8|null
 36.4516 +	VendorFax|Vendor Fax|28591|0|12
 36.4517 +	***|Dealer Tracking|Dealer Tracking
 36.4518 +		Type|Tracking Type|6895|5|99
 36.4519 +		ID|ID|6802|0|2
 36.4520 +		IDType|ID Type|6803|5|4
 36.4521 +		UserID|User ID|6804|5|4999
 36.4522 +		FMLastDate|Last FM Date|6805|3|null
 36.4523 +		CreationDate|Creation Date|6806|3|null
 36.4524 +		CreationTime|Creation Time|6807|5|2359
 36.4525 +		ExpireDate|Expiration Date|6808|3|null
 36.4526 +		TrackingCode|Tracking Code|6809|5|99
 36.4527 +		UserNumber1|User Number 01|6810|4|null
 36.4528 +		UserNumber2|User Number 02|6811|4|null
 36.4529 +		UserNumber3|User Number 03|6812|4|null
 36.4530 +		UserNumber4|User Number 04|6813|4|null
 36.4531 +		UserNumber5|User Number 05|6814|4|null
 36.4532 +		UserNumber6|User Number 06|6815|4|null
 36.4533 +		UserNumber7|User Number 07|6816|4|null
 36.4534 +		UserNumber8|User Number 08|6817|4|null
 36.4535 +		UserNumber9|User Number 09|6818|4|null
 36.4536 +		UserNumber10|User Number 10|6819|4|null
 36.4537 +		UserChar1|User Char   01|6820|0|40
 36.4538 +		UserChar2|User Char   02|6821|0|40
 36.4539 +		UserChar3|User Char   03|6822|0|40
 36.4540 +		UserChar4|User Char   04|6823|0|40
 36.4541 +		UserChar5|User Char   05|6824|0|40
 36.4542 +		UserChar6|User Char   06|6825|0|40
 36.4543 +		UserChar7|User Char   07|6826|0|40
 36.4544 +		UserChar8|User Char   08|6827|0|40
 36.4545 +		UserChar9|User Char   09|6828|0|40
 36.4546 +		UserChar10|User Char   10|6829|0|40
 36.4547 +		UserAmount1|User Amount 01|6830|7|null
 36.4548 +		UserAmount2|User Amount 02|6831|7|null
 36.4549 +		UserAmount3|User Amount 03|6832|7|null
 36.4550 +		UserAmount4|User Amount 04|6833|7|null
 36.4551 +		UserAmount5|User Amount 05|6834|7|null
 36.4552 +		UserAmount6|User Amount 06|6835|7|null
 36.4553 +		UserAmount7|User Amount 07|6836|7|null
 36.4554 +		UserAmount8|User Amount 08|6837|7|null
 36.4555 +		UserAmount9|User Amount 09|6838|7|null
 36.4556 +		UserAmount10|User Amount 10|6839|7|null
 36.4557 +		UserCode1|User Code   01|6840|5|9999
 36.4558 +		UserCode2|User Code   02|6841|5|9999
 36.4559 +		UserCode3|User Code   03|6842|5|9999
 36.4560 +		UserCode4|User Code   04|6843|5|9999
 36.4561 +		UserCode5|User Code   05|6844|5|9999
 36.4562 +		UserCode6|User Code   06|6845|5|9999
 36.4563 +		UserCode7|User Code   07|6846|5|9999
 36.4564 +		UserCode8|User Code   08|6847|5|9999
 36.4565 +		UserCode9|User Code   09|6848|5|9999
 36.4566 +		UserCode10|User Code   10|6849|5|9999
 36.4567 +		UserDate1|User Date   01|6850|3|null
 36.4568 +		UserDate2|User Date   02|6851|3|null
 36.4569 +		UserDate3|User Date   03|6852|3|null
 36.4570 +		UserDate4|User Date   04|6853|3|null
 36.4571 +		UserDate5|User Date   05|6854|3|null
 36.4572 +		UserDate6|User Date   06|6855|3|null
 36.4573 +		UserDate7|User Date   07|6856|3|null
 36.4574 +		UserDate8|User Date   08|6857|3|null
 36.4575 +		UserDate9|User Date   09|6858|3|null
 36.4576 +		UserDate10|User Date   10|6859|3|null
 36.4577 +		UserRate1|User Rate   01|6860|2|null
 36.4578 +		UserRate2|User Rate   02|6861|2|null
 36.4579 +		UserRate3|User Rate   03|6862|2|null
 36.4580 +		UserRate4|User Rate   04|6863|2|null
 36.4581 +		UserRate5|User Rate   05|6864|2|null
 36.4582 +		UserRate6|User Rate   06|6865|2|null
 36.4583 +		UserRate7|User Rate   07|6866|2|null
 36.4584 +		UserRate8|User Rate   08|6867|2|null
 36.4585 +		UserRate9|User Rate   09|6868|2|null
 36.4586 +		UserRate10|User Rate   10|6869|2|null
 36.4587 +		Locator|Locator|6870|4|null
 36.4588 +		UserNumber11|User Number 11|6871|4|null
 36.4589 +		UserNumber12|User Number 12|6872|4|null
 36.4590 +		UserNumber13|User Number 13|6873|4|null
 36.4591 +		UserNumber14|User Number 14|6874|4|null
 36.4592 +		UserNumber15|User Number 15|6875|4|null
 36.4593 +		UserNumber16|User Number 16|6876|4|null
 36.4594 +		UserNumber17|User Number 17|6877|4|null
 36.4595 +		UserNumber18|User Number 18|6878|4|null
 36.4596 +		UserNumber19|User Number 19|6879|4|null
 36.4597 +		UserNumber20|User Number 20|6880|4|null
 36.4598 +		UserChar11|User Char   11|6881|0|40
 36.4599 +		UserChar12|User Char   12|6882|0|40
 36.4600 +		UserChar13|User Char   13|6883|0|40
 36.4601 +		UserChar14|User Char   14|6884|0|40
 36.4602 +		UserChar15|User Char   15|6885|0|40
 36.4603 +		UserChar16|User Char   16|6886|0|40
 36.4604 +		UserChar17|User Char   17|6887|0|40
 36.4605 +		UserChar18|User Char   18|6888|0|40
 36.4606 +		UserChar19|User Char   19|6889|0|40
 36.4607 +		UserChar20|User Char   20|9400|0|40
 36.4608 +		UserAmount11|User Amount 11|9401|7|null
 36.4609 +		UserAmount12|User Amount 12|9402|7|null
 36.4610 +		UserAmount13|User Amount 13|9403|7|null
 36.4611 +		UserAmount14|User Amount 14|9404|7|null
 36.4612 +		UserAmount15|User Amount 15|9405|7|null
 36.4613 +		UserAmount16|User Amount 16|9406|7|null
 36.4614 +		UserAmount17|User Amount 17|9407|7|null
 36.4615 +		UserAmount18|User Amount 18|9408|7|null
 36.4616 +		UserAmount19|User Amount 19|9409|7|null
 36.4617 +		UserAmount20|User Amount 20|9410|7|null
 36.4618 +		UserCode11|User Code   11|9411|5|9999
 36.4619 +		UserCode12|User Code   12|9412|5|9999
 36.4620 +		UserCode13|User Code   13|9413|5|9999
 36.4621 +		UserCode14|User Code   14|9414|5|9999
 36.4622 +		UserCode15|User Code   15|9415|5|9999
 36.4623 +		UserCode16|User Code   16|9416|5|9999
 36.4624 +		UserCode17|User Code   17|9417|5|9999
 36.4625 +		UserCode18|User Code   18|9418|5|9999
 36.4626 +		UserCode19|User Code   19|9419|5|9999
 36.4627 +		UserCode20|User Code   20|9420|5|9999
 36.4628 +		UserDate11|User Date   11|9421|3|null
 36.4629 +		UserDate12|User Date   12|9422|3|null
 36.4630 +		UserDate13|User Date   13|9423|3|null
 36.4631 +		UserDate14|User Date   14|9424|3|null
 36.4632 +		UserDate15|User Date   15|9425|3|null
 36.4633 +		UserDate16|User Date   16|9426|3|null
 36.4634 +		UserDate17|User Date   17|9427|3|null
 36.4635 +		UserDate18|User Date   18|9428|3|null
 36.4636 +		UserDate19|User Date   19|9429|3|null
 36.4637 +		UserDate20|User Date   20|9430|3|null
 36.4638 +		UserRate11|User Rate   11|9431|2|null
 36.4639 +		UserRate12|User Rate   12|9432|2|null
 36.4640 +		UserRate13|User Rate   13|9433|2|null
 36.4641 +		UserRate14|User Rate   14|9434|2|null
 36.4642 +		UserRate15|User Rate   15|9435|2|null
 36.4643 +		UserRate16|User Rate   16|9436|2|null
 36.4644 +		UserRate17|User Rate   17|9437|2|null
 36.4645 +		UserRate18|User Rate   18|9438|2|null
 36.4646 +		UserRate19|User Rate   19|9439|2|null
 36.4647 +		UserRate20|User Rate   20|9440|2|null
 36.4648 +	***|Comment|Comment
 36.4649 +		Type|Comment Type|29701|5|99
 36.4650 +		EffectiveDate|Effective Date|29702|3|null
 36.4651 +		ExpirationDate|Expiration Date|29703|3|null
 36.4652 +		Comment|Comment|29704|0|40
 36.4653 +		Locator|Locator|29705|4|null
 36.4654 +	***|ReservePlan|Reserve Plan
 36.4655 +		ID|Reserve Plan ID|29501|0|2
 36.4656 +		Type|Type|29502|5|99
 36.4657 +		OpenDate|Open Date|29503|3|null
 36.4658 +		CloseDate|Close Date|29504|3|null
 36.4659 +		TranPurgeDate|Tran Purge Date|29505|3|null
 36.4660 +		Description|Description|29506|0|30
 36.4661 +		LastFMDate|Last FM Date|29507|3|null
 36.4662 +		UpFrontReserveOption|Up-Front Reserve Option|29508|5|2
 36.4663 +		UpFrontReservePercent|Up-Front Reserve Percent|29509|2|null
 36.4664 +		HoldBackPercent|Holdback Percent|29510|2|null
 36.4665 +		UpFrontReserveAmt|Up-Front Reserve Amount|29511|7|null
 36.4666 +		HoldBackAmount|Holdback Amount|29512|7|null
 36.4667 +		EffectiveDate|Effective Date|29513|3|null
 36.4668 +		ExpirationDate|Expiration Date|29514|3|null
 36.4669 +		ChargeOffDays|No. of Charge Off Days|29515|5|9999
 36.4670 +		ChargeBackCoopTion|Chargeback Rsrv Chrg Off Opt|29516|5|2
 36.4671 +		ChargeOffPmtS|No. of Charge Off Pmts|29517|5|9999
 36.4672 +		LoanCount|No. of Loans|29518|4|null
 36.4673 +		ChargeOffLoanCount|No. of Charge Off Loans|29519|4|null
 36.4674 +		EarlyPayoffDays|No. of Early Pay Off Days|29520|5|9999
 36.4675 +		EarlyPayoffPmtS|No. of Early Pay Off Pmts|29521|5|9999
 36.4676 +		ChargeBackPOOption|Chargeback Rsv Pay Off Opt|29522|5|2
 36.4677 +		Recourse|Recourse|29523|5|1
 36.4678 +		TotalLoanBalance|Total Loan Balance|29524|7|null
 36.4679 +		TotalUpFrontReserve|Total Up Front Reserve|29525|7|null
 36.4680 +		HoldBackBalance|Holdback Balance|29526|7|null
 36.4681 +		TotalEarnedReserve|Total Earned Reserve|29527|7|null
 36.4682 +		ChargeOffBalance|Charge Off Balance|29528|7|null
 36.4683 +		ChargeBackBalance|Chargeback Balance|29529|7|null
 36.4684 +		TotalAmOrTreserve|Total Amortized Reserve|29530|7|null
 36.4685 +		UserChar1|User Char   01|29531|0|40
 36.4686 +		UserChar2|User Char   02|29532|0|40
 36.4687 +		UserChar3|User Char   03|29533|0|40
 36.4688 +		UserAmount1|User Amount 01|29534|7|null
 36.4689 +		UserAmount2|User Amount 02|29535|7|null
 36.4690 +		UserAmount3|User Amount 03|29536|7|null
 36.4691 +		UserNumber1|User Number 01|29537|4|null
 36.4692 +		UserNumber2|User Number 02|29538|4|null
 36.4693 +		UserDate1|User Date   01|29539|3|null
 36.4694 +		UserCode1|User Code   01|29540|5|9999
 36.4695 +		UserRate1|User Rate   01|29541|2|null
 36.4696 +		LoanCountsLp|Number of Loans SLP|29542|4|null
 36.4697 +		MemberFee|Member Fee|29543|5|1
 36.4698 +		UnpaidUpFrontReserve|Unpaid Up-Front Reserve|29544|7|null
 36.4699 +		LoanBalanceSLP|New Loan Balance SLP|29546|7|null
 36.4700 +		Balance|Balance|29547|7|null
 36.4701 +		MbrFeeAmount|Member Fee Amount|29548|7|null
 36.4702 +		PlanAvailBalance|Available Balance|29580|7|null
 36.4703 +		Active|Active|29581|8|null
 36.4704 +		TotalUnearnedReserve|Total Unearned Reserve|29545|7|null
 36.4705 +		***|ReservePlan Loan|Reserve Plan Loan
 36.4706 +			AccountNumber|Account Number|29601|0|10
 36.4707 +			LoanID|Loan ID|29602|0|2
 36.4708 +			LastFMDate|Last FM Date|29603|3|null
 36.4709 +			OpenDate|Open Date|29604|3|null
 36.4710 +			CloseDate|Close Date|29605|3|null
 36.4711 +			Locator|Locator|29606|4|null
 36.4712 +			VIN|VIN|29607|0|20
 36.4713 +			Name|Name|29650|0|16
 36.4714 +			DealerNumber|Dealer Number|29651|0|10
 36.4715 +			PlantYpe|Reserve Plan Type|29652|5|9999
 36.4716 +			PlanDescription|Reserve Plan Description|29653|0|30
 36.4717 +			PlanID|Reserve Plan ID|29654|0|4
 36.4718 +			LoanAmount|Loan Amount|29655|7|null
 36.4719 +			UpFrontReserve|Up-Front Reserve|29656|7|null
 36.4720 +			UpFrontReservePaidDate|Up-Front Reserve Paid Date|29657|3|null
 36.4721 +			UpFrontPercent|Dealer Up-Front Percent|29658|2|null
 36.4722 +			EarnedReserve|Earned Reserve|29659|7|null
 36.4723 +			AmortizedReserve|Amortized Reserve|29660|7|null
 36.4724 +			MemberFee|Member Fee|29661|5|1
 36.4725 +			ContractRate|Contract Rate|29662|2|null
 36.4726 +			BuyRate|Buy Rate|29663|2|null
 36.4727 +			Spread|Spread|29664|2|null
 36.4728 +			EffectiveRate|Effective Rate|29665|2|null
 36.4729 +			ChargeBack|Chargeback|29666|7|null
 36.4730 +			OriginalLoanDate|Original Loan Date|29667|3|null
 36.4731 +			Unamortizedreserve|Unamortized Reserve|29668|7|null
 36.4732 +			UnearnedReserve|Unearned Reserve|29669|7|null
 36.4733 +		***|ReservePlan Tracking|Reserve Plan Tracking
 36.4734 +			Type|Tracking Type|6895|5|99
 36.4735 +			ID|ID|6802|0|2
 36.4736 +			IDType|ID Type|6803|5|4
 36.4737 +			UserID|User ID|6804|5|4999
 36.4738 +			FMLastDate|Last FM Date|6805|3|null
 36.4739 +			CreationDate|Creation Date|6806|3|null
 36.4740 +			CreationTime|Creation Time|6807|5|2359
 36.4741 +			ExpireDate|Expiration Date|6808|3|null
 36.4742 +			TrackingCode|Tracking Code|6809|5|99
 36.4743 +			UserNumber1|User Number 01|6810|4|null
 36.4744 +			UserNumber2|User Number 02|6811|4|null
 36.4745 +			UserNumber3|User Number 03|6812|4|null
 36.4746 +			UserNumber4|User Number 04|6813|4|null
 36.4747 +			UserNumber5|User Number 05|6814|4|null
 36.4748 +			UserNumber6|User Number 06|6815|4|null
 36.4749 +			UserNumber7|User Number 07|6816|4|null
 36.4750 +			UserNumber8|User Number 08|6817|4|null
 36.4751 +			UserNumber9|User Number 09|6818|4|null
 36.4752 +			UserNumber10|User Number 10|6819|4|null
 36.4753 +			UserChar1|User Char   01|6820|0|40
 36.4754 +			UserChar2|User Char   02|6821|0|40
 36.4755 +			UserChar3|User Char   03|6822|0|40
 36.4756 +			UserChar4|User Char   04|6823|0|40
 36.4757 +			UserChar5|User Char   05|6824|0|40
 36.4758 +			UserChar6|User Char   06|6825|0|40
 36.4759 +			UserChar7|User Char   07|6826|0|40
 36.4760 +			UserChar8|User Char   08|6827|0|40
 36.4761 +			UserChar9|User Char   09|6828|0|40
 36.4762 +			UserChar10|User Char   10|6829|0|40
 36.4763 +			UserAmount1|User Amount 01|6830|7|null
 36.4764 +			UserAmount2|User Amount 02|6831|7|null
 36.4765 +			UserAmount3|User Amount 03|6832|7|null
 36.4766 +			UserAmount4|User Amount 04|6833|7|null
 36.4767 +			UserAmount5|User Amount 05|6834|7|null
 36.4768 +			UserAmount6|User Amount 06|6835|7|null
 36.4769 +			UserAmount7|User Amount 07|6836|7|null
 36.4770 +			UserAmount8|User Amount 08|6837|7|null
 36.4771 +			UserAmount9|User Amount 09|6838|7|null
 36.4772 +			UserAmount10|User Amount 10|6839|7|null
 36.4773 +			UserCode1|User Code   01|6840|5|9999
 36.4774 +			UserCode2|User Code   02|6841|5|9999
 36.4775 +			UserCode3|User Code   03|6842|5|9999
 36.4776 +			UserCode4|User Code   04|6843|5|9999
 36.4777 +			UserCode5|User Code   05|6844|5|9999
 36.4778 +			UserCode6|User Code   06|6845|5|9999
 36.4779 +			UserCode7|User Code   07|6846|5|9999
 36.4780 +			UserCode8|User Code   08|6847|5|9999
 36.4781 +			UserCode9|User Code   09|6848|5|9999
 36.4782 +			UserCode10|User Code   10|6849|5|9999
 36.4783 +			UserDate1|User Date   01|6850|3|null
 36.4784 +			UserDate2|User Date   02|6851|3|null
 36.4785 +			UserDate3|User Date   03|6852|3|null
 36.4786 +			UserDate4|User Date   04|6853|3|null
 36.4787 +			UserDate5|User Date   05|6854|3|null
 36.4788 +			UserDate6|User Date   06|6855|3|null
 36.4789 +			UserDate7|User Date   07|6856|3|null
 36.4790 +			UserDate8|User Date   08|6857|3|null
 36.4791 +			UserDate9|User Date   09|6858|3|null
 36.4792 +			UserDate10|User Date   10|6859|3|null
 36.4793 +			UserRate1|User Rate   01|6860|2|null
 36.4794 +			UserRate2|User Rate   02|6861|2|null
 36.4795 +			UserRate3|User Rate   03|6862|2|null
 36.4796 +			UserRate4|User Rate   04|6863|2|null
 36.4797 +			UserRate5|User Rate   05|6864|2|null
 36.4798 +			UserRate6|User Rate   06|6865|2|null
 36.4799 +			UserRate7|User Rate   07|6866|2|null
 36.4800 +			UserRate8|User Rate   08|6867|2|null
 36.4801 +			UserRate9|User Rate   09|6868|2|null
 36.4802 +			UserRate10|User Rate   10|6869|2|null
 36.4803 +			Locator|Locator|6870|4|null
 36.4804 +			UserNumber11|User Number 11|6871|4|null
 36.4805 +			UserNumber12|User Number 12|6872|4|null
 36.4806 +			UserNumber13|User Number 13|6873|4|null
 36.4807 +			UserNumber14|User Number 14|6874|4|null
 36.4808 +			UserNumber15|User Number 15|6875|4|null
 36.4809 +			UserNumber16|User Number 16|6876|4|null
 36.4810 +			UserNumber17|User Number 17|6877|4|null
 36.4811 +			UserNumber18|User Number 18|6878|4|null
 36.4812 +			UserNumber19|User Number 19|6879|4|null
 36.4813 +			UserNumber20|User Number 20|6880|4|null