diff --git a/.gitmodules b/.gitmodules index 6990a425..be0e86cb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -96,7 +96,7 @@ url = https://github.com/bfad/Sublime-Lasso [submodule "vendor/grammars/chapel-tmbundle"] path = vendor/grammars/chapel-tmbundle - url = https://github.com/bholt/chapel-tmbundle + url = https://github.com/chapel-lang/chapel-tmbundle [submodule "vendor/grammars/sublime-nginx"] path = vendor/grammars/sublime-nginx url = https://github.com/brandonwamboldt/sublime-nginx @@ -397,9 +397,6 @@ [submodule "vendor/grammars/pascal.tmbundle"] path = vendor/grammars/pascal.tmbundle url = https://github.com/textmate/pascal.tmbundle -[submodule "vendor/grammars/perl.tmbundle"] - path = vendor/grammars/perl.tmbundle - url = https://github.com/textmate/perl.tmbundle [submodule "vendor/grammars/php-smarty.tmbundle"] path = vendor/grammars/php-smarty.tmbundle url = https://github.com/textmate/php-smarty.tmbundle @@ -615,6 +612,9 @@ [submodule "vendor/grammars/mediawiki.tmbundle"] path = vendor/grammars/mediawiki.tmbundle url = https://github.com/textmate/mediawiki.tmbundle +[submodule "vendor/grammars/SublimeClarion"] + path = vendor/grammars/SublimeClarion + url = https://github.com/fushnisoft/SublimeClarion [submodule "vendor/grammars/oracle.tmbundle"] path = vendor/grammars/oracle.tmbundle url = https://github.com/mulander/oracle.tmbundle.git @@ -645,3 +645,18 @@ [submodule "vendor/grammars/xc.tmbundle"] path = vendor/grammars/xc.tmbundle url = https://github.com/graymalkin/xc.tmbundle +[submodule "vendor/grammars/perl.tmbundle"] + path = vendor/grammars/perl.tmbundle + url = https://github.com/textmate/perl.tmbundle +[submodule "vendor/grammars/sublime-netlinx"] + path = vendor/grammars/sublime-netlinx + url = https://github.com/amclain/sublime-netlinx +[submodule "vendor/grammars/Sublime-Red"] + path = vendor/grammars/Sublime-Red + url = https://github.com/Oldes/Sublime-Red +[submodule "vendor/grammars/jflex.tmbundle"] + path = vendor/grammars/jflex.tmbundle + url = https://github.com/jflex-de/jflex.tmbundle.git +[submodule "vendor/grammars/api-blueprint-sublime-plugin"] + path = vendor/grammars/api-blueprint-sublime-plugin + url = https://github.com/apiaryio/api-blueprint-sublime-plugin diff --git a/.travis.yml b/.travis.yml index 4d0c2351..52540b57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ -sudo: false before_install: script/travis/before_install rvm: - 1.9.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1c8a09c..ebae203c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ Assuming your code is being detected as the right language, in most cases this i You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). -Once the bug has been fixed upstream, please let us know and we'll pick it up for GitHub. +Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist. ## Testing diff --git a/README.md b/README.md index 9df9f6fe..c7d77101 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ $ cat .gitattributes Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Vendored files are also hidden by default in diffs on github.com. -Use the `linguist-vendored` attribute to vendor or un-vendor paths. +Use the `linguist-vendored` attribute to vendor or un-vendor paths. Please note, overriding the vendored (or un-vendored) status of a file only affects the language statistics for the repository and not the behavior in diffs on github.com. ``` $ cat .gitattributes diff --git a/bin/linguist b/bin/linguist index 6ac8f0a7..d1d9c306 100755 --- a/bin/linguist +++ b/bin/linguist @@ -2,10 +2,8 @@ # linguist — detect language type for a file, or, given a directory, determine language breakdown # usage: linguist [<--breakdown>] - -require 'linguist/file_blob' -require 'linguist/language' -require 'linguist/repository' +# +require 'linguist' require 'rugged' path = ARGV[0] || Dir.pwd diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 983db982..3f3a0853 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -14,13 +14,14 @@ Gem::Specification.new do |s| s.executables << 'linguist' s.add_dependency 'charlock_holmes', '~> 0.7.3' - s.add_dependency 'escape_utils', '~> 1.0.1' + s.add_dependency 'escape_utils', '~> 1.1.0' s.add_dependency 'mime-types', '>= 1.19' - s.add_dependency 'rugged', '~> 0.22.0b4' + s.add_dependency 'rugged', '~> 0.23.0b1' s.add_development_dependency 'minitest', '>= 5.0' s.add_development_dependency 'mocha' s.add_development_dependency 'pry' s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' + s.add_development_dependency 'color-proximity', '~> 0.2.1' end diff --git a/grammars.yml b/grammars.yml index 048f7da8..d34253ac 100644 --- a/grammars.yml +++ b/grammars.yml @@ -113,6 +113,8 @@ vendor/grammars/Sublime-QML: - source.qml vendor/grammars/Sublime-REBOL: - source.rebol +vendor/grammars/Sublime-Red: +- source.red vendor/grammars/Sublime-SQF-Language: - source.sqf vendor/grammars/Sublime-Text-2-OpenEdge-ABL: @@ -121,6 +123,8 @@ vendor/grammars/Sublime-VimL: - source.viml vendor/grammars/SublimeBrainfuck: - source.bf +vendor/grammars/SublimeClarion/: +- source.clarion vendor/grammars/SublimePapyrus/: - source.compiled-papyrus - source.papyrus @@ -152,6 +156,9 @@ vendor/grammars/antlr.tmbundle: vendor/grammars/apache.tmbundle: - source.apache-config - source.apache-config.mod_perl +vendor/grammars/api-blueprint-sublime-plugin/: +- text.html.markdown.source.gfm.apib +- text.html.markdown.source.gfm.mson vendor/grammars/applescript.tmbundle: - source.applescript vendor/grammars/asciidoc.tmbundle/: @@ -293,6 +300,8 @@ vendor/grammars/javadoc.tmbundle: - text.html.javadoc vendor/grammars/javascript-objective-j.tmbundle: - source.js.objj +vendor/grammars/jflex.tmbundle: +- source.jflex vendor/grammars/jquery-tmbundle: - source.js.jquery vendor/grammars/json.tmbundle: @@ -393,8 +402,9 @@ vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage: - source.oz vendor/grammars/pascal.tmbundle: - source.pascal -vendor/grammars/perl.tmbundle: +vendor/grammars/perl.tmbundle/: - source.perl +- source.perl.6 vendor/grammars/php-smarty.tmbundle: - source.smarty vendor/grammars/php.tmbundle: @@ -474,6 +484,9 @@ vendor/grammars/sublime-idris: - source.idris vendor/grammars/sublime-mask: - source.mask +vendor/grammars/sublime-netlinx: +- source.netlinx +- source.netlinx.erb vendor/grammars/sublime-nginx: - source.nginx vendor/grammars/sublime-nix: @@ -501,6 +514,7 @@ vendor/grammars/sublime-varnish: vendor/grammars/sublime_cobol: - source.acucobol - source.cobol +- source.jcl - source.opencobol vendor/grammars/sublime_man_page_support: - source.man diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 56c15f02..01a567e0 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -99,7 +99,7 @@ module Linguist elsif name.nil? "attachment" else - "attachment; filename=#{EscapeUtils.escape_url(File.basename(name))}" + "attachment; filename=#{EscapeUtils.escape_url(name)}" end end @@ -233,7 +233,7 @@ module Linguist # # Return true or false def vendored? - name =~ VendoredRegexp ? true : false + path =~ VendoredRegexp ? true : false end documentation_paths = YAML.load_file(File.expand_path("../documentation.yml", __FILE__)) @@ -248,7 +248,7 @@ module Linguist # # Return true or false def documentation? - name =~ DocumentationRegexp ? true : false + path =~ DocumentationRegexp ? true : false end # Public: Get each line of data @@ -316,7 +316,7 @@ module Linguist # # Return true or false def generated? - @_generated ||= Generated.generated?(name, lambda { data }) + @_generated ||= Generated.generated?(path, lambda { data }) end # Public: Detects the Language of the blob. diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index cf142ef5..20d87bb0 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -3,7 +3,7 @@ require 'linguist/blob_helper' module Linguist # A FileBlob is a wrapper around a File object to make it quack # like a Grit::Blob. It provides the basic interface: `name`, - # `data`, and `size`. + # `data`, `path` and `size`. class FileBlob include BlobHelper @@ -14,43 +14,50 @@ module Linguist # # Returns a FileBlob. def initialize(path, base_path = nil) - @path = path - @name = base_path ? path.sub("#{base_path}/", '') : path + @fullpath = path + @path = base_path ? path.sub("#{base_path}/", '') : path end # Public: Filename # # Examples # - # FileBlob.new("/path/to/linguist/lib/linguist.rb").name + # FileBlob.new("/path/to/linguist/lib/linguist.rb").path # # => "/path/to/linguist/lib/linguist.rb" # # FileBlob.new("/path/to/linguist/lib/linguist.rb", - # "/path/to/linguist").name + # "/path/to/linguist").path # # => "lib/linguist.rb" # # Returns a String - attr_reader :name + attr_reader :path # Public: Read file permissions # # Returns a String like '100644' def mode - File.stat(@path).mode.to_s(8) + File.stat(@fullpath).mode.to_s(8) + end + + # Public: File name + # + # Returns a String + def name + File.basename(@fullpath) end # Public: Read file contents. # # Returns a String. def data - File.read(@path) + File.read(@fullpath) end # Public: Get byte size # # Returns an Integer. def size - File.size(@path) + File.size(@fullpath) end # Public: Get file extension. @@ -67,7 +74,7 @@ module Linguist # # Returns an Array def extensions - basename, *segments = File.basename(name).downcase.split(".") + basename, *segments = name.downcase.split(".") segments.map.with_index do |segment, index| "." + segments[index..-1].join(".") diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index b93f7ea6..12987196 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -53,15 +53,18 @@ module Linguist def generated? xcode_file? || generated_net_designer_file? || + generated_net_specflow_feature_file? || composer_lock? || node_modules? || godeps? || generated_by_zephir? || minified_files? || + source_map? || compiled_coffeescript? || generated_parser? || generated_net_docfile? || generated_postscript? || + compiled_cython_file? || generated_protocol_buffer_go? || generated_protocol_buffer? || generated_jni_header? || @@ -95,6 +98,20 @@ module Linguist end end + # Internal: Is the blob a generated source map? + # + # Source Maps usually have .css.map or .js.map extensions. In case they + # are not following the name convention, detect them based on the content. + # + # Returns true or false. + def source_map? + return false unless extname.downcase == '.map' + + name =~ /(\.css|\.js)\.map$/i || # Name convention + lines[0] =~ /^{"version":\d+,/ || # Revision 2 and later begin with the version number + lines[0] =~ /^\/\*\* Begin line maps\. \*\*\/{/ # Revision 1 begins with a magic comment + end + # Internal: Is the blob of JS generated by CoffeeScript? # # CoffeeScript is meant to output JS that would be difficult to @@ -162,6 +179,17 @@ module Linguist def generated_net_designer_file? name.downcase =~ /\.designer\.cs$/ end + + # Internal: Is this a codegen file for Specflow feature file? + # + # Visual Studio's SpecFlow extension generates *.feature.cs files + # from *.feature files, they are not meant to be consumed by humans. + # Let's hide them. + # + # Returns true or false + def generated_net_specflow_feature_file? + name.downcase =~ /\.feature\.cs$/ + end # Internal: Is the blob of JS a parser generated by PEG.js? # @@ -270,5 +298,18 @@ module Linguist # VCR Cassettes have "recorded_with: VCR" in the second last line. return lines[-2].include?("recorded_with: VCR") end + + # Internal: Is this a compiled C/C++ file from Cython? + # + # Cython-compiled C/C++ files typically contain: + # /* Generated by Cython x.x.x on ... */ + # on the first line. + # + # Return true or false + def compiled_cython_file? + return false unless ['.c', '.cpp'].include? extname + return false unless lines.count > 1 + return lines[0].include?("Generated by Cython") + end end end diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index eb39a925..2002d51b 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -129,7 +129,7 @@ module Linguist end disambiguate "Common Lisp", "OpenCL", "Cool" do |data| - if data.include?("(defun ") + if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^class/x.match(data) Language["Cool"] @@ -155,16 +155,16 @@ module Linguist end disambiguate "AsciiDoc", "AGS Script", "Public Key" do |data| - if /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) + if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) + Language["Public Key"] + elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) Language["AsciiDoc"] elsif /^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])/.match(data) Language["AGS Script"] - elsif /^-----BEGIN/.match(data) - Language["Public Key"] end end - disambiguate "FORTRAN", "Forth" do |data| + disambiguate "FORTRAN", "Forth", "Formatted" do |data| if /^: /.match(data) Language["Forth"] elsif /^([c*][^a-z]| (subroutine|program)\s|\s*!)/i.match(data) @@ -172,17 +172,19 @@ module Linguist end end - disambiguate "F#", "Forth", "GLSL" do |data| + disambiguate "F#", "Forth", "GLSL", "Filterscript" do |data| if /^(: |new-device)/.match(data) Language["Forth"] elsif /^\s*(#light|import|let|module|namespace|open|type)/.match(data) Language["F#"] - elsif /^\s*(#include|#pragma|precision|uniform|varying|void)/.match(data) + elsif /^\s*(#version|precision|uniform|varying|vec[234])/.match(data) Language["GLSL"] + elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) + Language["Filterscript"] end end - disambiguate "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data| + disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data| if ObjectiveCRegex.match(data) Language["Objective-C"] elsif data.include?(":- module") @@ -195,6 +197,8 @@ module Linguist Language["Mathematica"] elsif /^\s*%/.match(data) Language["Matlab"] + elsif /^\w+\s*:\s*module\s*{/.match(data) + Language["Limbo"] end end @@ -211,7 +215,7 @@ module Linguist end disambiguate "Common Lisp", "NewLisp" do |data| - if /^\s*\((defun|in-package|defpackage) /.match(data) + if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^\s*\(define /.match(data) Language["NewLisp"] @@ -261,5 +265,29 @@ module Linguist Language["Makefile"] end end + + disambiguate "OCaml", "Standard ML" do |data| + if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data) + Language["OCaml"] + elsif /=> |case\s+(\S+\s)+of/.match(data) + Language["Standard ML"] + end + end + + disambiguate "NL", "NewLisp" do |data| + if /^(b|g)[0-9]+ /.match(data) + Language["NL"] + else + Language["NewLisp"] + end + end + + disambiguate "Rust", "RenderScript" do |data| + if data.include?("^(use |fn |mod |pub |macro_rules|impl|#!?\[)") + Language["Rust"] + elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) + Language["RenderScript"] + end + end end end diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index da02b110..d2d44466 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -541,7 +541,7 @@ module Linguist if extnames = extensions[name] extnames.each do |extname| if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase } - warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" unless extname == '.script!' + warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" options['extensions'] << extname end end diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 01c98820..1b981b9b 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -18,6 +18,8 @@ # language. This should match one of the scopes listed in # the grammars.yml file. Use "none" if there is no grammar # for this language. +# group - Name of the parent language. Languages in a group are counted +# in the statistics as the parent language. # # Any additions or modifications (even trivial) should have corresponding # test change in `test/test_blob.rb`. @@ -26,6 +28,7 @@ ABAP: type: programming + color: "#E8274B" extensions: - .abap ace_mode: abap @@ -43,7 +46,7 @@ AGS Script: AMPL: type: programming - color: "#00008B" + color: "#E6EFBB" extensions: - .ampl tm_scope: source.ampl @@ -56,9 +59,17 @@ ANTLR: - .g4 ace_mode: text +API Blueprint: + type: markup + color: "#2ACCA8" + ace_mode: markdown + extensions: + - .apib + tm_scope: text.html.markdown.source.gfm.apib + APL: type: programming - color: "#8a0707" + color: "#5A8164" extensions: - .apl - .dyalog @@ -98,7 +109,7 @@ ATS: ActionScript: type: programming tm_scope: source.actionscript.3 - color: "#e3491a" + color: "#882B0F" search_term: as3 aliases: - actionscript 3 @@ -116,12 +127,13 @@ Ada: - .ada - .ads aliases: - - ada95ada2005 + - ada95 + - ada2005 ace_mode: ada Agda: type: programming - color: "#467C91" + color: "#315665" extensions: - .agda ace_mode: text @@ -148,7 +160,6 @@ ApacheConf: - apache extensions: - .apacheconf - - .conf - .vhost tm_scope: source.apache-config ace_mode: apache_conf @@ -173,7 +184,7 @@ AppleScript: Arc: type: programming - color: "#ca2afe" + color: "#aa2afe" extensions: - .arc tm_scope: none @@ -199,7 +210,7 @@ AsciiDoc: AspectJ: type: programming - color: "#1957b0" + color: "#a957b0" extensions: - .aj tm_scope: none @@ -238,7 +249,7 @@ AutoHotkey: AutoIt: type: programming - color: "#36699B" + color: "#1C3552" aliases: - au3 - AutoIt3 @@ -265,7 +276,6 @@ Awk: Batchfile: type: programming - group: Shell search_term: bat aliases: - bat @@ -336,6 +346,7 @@ Boo: Brainfuck: type: programming + color: "#2F2530" extensions: - .b - .bf @@ -357,7 +368,7 @@ Bro: C: type: programming - color: "#555" + color: "#555555" extensions: - .c - .cats @@ -495,14 +506,22 @@ ChucK: Cirru: type: programming - color: "#aaaaff" + color: "#ccccff" ace_mode: cirru extensions: - .cirru +Clarion: + type: programming + color: "#db901e" + ace_mode: text + extensions: + - .clw + tm_scope: source.clarion + Clean: type: programming - color: "#3a81ad" + color: "#3F85AF" extensions: - .icl - .dcl @@ -515,6 +534,7 @@ Clojure: color: "#db5855" extensions: - .clj + - .boot - .cl2 - .cljc - .cljs @@ -641,6 +661,7 @@ Creole: Crystal: type: programming + color: "#776791" extensions: - .cr ace_mode: ruby @@ -698,9 +719,18 @@ D-ObjDump: tm_scope: objdump.x86asm ace_mode: assembly_x86 +DIGITAL Command Language: + type: programming + aliases: + - dcl + extensions: + - .com + tm_scope: none + ace_mode: text + DM: type: programming - color: "#075ff1" + color: "#447265" extensions: - .dm aliases: @@ -710,6 +740,8 @@ DM: DTrace: type: programming + aliases: + - dtrace-script extensions: - .d interpreters: @@ -718,7 +750,7 @@ DTrace: ace_mode: c_cpp Darcs Patch: - type: programming + type: data search_term: dpatch aliases: - dpatch @@ -730,18 +762,20 @@ Darcs Patch: Dart: type: programming - color: "#98BAD6" + color: "#00B4AB" extensions: - .dart ace_mode: dart Diff: - type: programming + type: data + color: "#88dddd" extensions: - .diff - .patch aliases: - udiff + tm_scope: source.diff ace_mode: diff Dockerfile: @@ -763,7 +797,7 @@ Dogescript: Dylan: type: programming - color: "#3ebc27" + color: "#6c616e" extensions: - .dylan - .dyl @@ -790,7 +824,7 @@ ECL: Eagle: type: markup - color: "#3994bc" + color: "#814C05" extensions: - .sch - .brd @@ -819,6 +853,8 @@ Elixir: - .ex - .exs ace_mode: elixir + filenames: + - mix.lock Elm: type: programming @@ -846,7 +882,7 @@ Emacs Lisp: EmberScript: type: programming - color: "#f64e3e" + color: "#FFF4F3" extensions: - .em - .emberscript @@ -855,12 +891,16 @@ EmberScript: Erlang: type: programming - color: "#0faf8d" + color: "#B83998" extensions: - .erl - .es - .escript - .hrl + filenames: + - rebar.config + - rebar.config.lock + - rebar.lock ace_mode: erlang interpreters: - escript @@ -880,7 +920,7 @@ F#: FLUX: type: programming - color: "#33CCFF" + color: "#88ccff" extensions: - .fx - .flux @@ -930,6 +970,21 @@ Fantom: tm_scope: source.fan ace_mode: text +Filterscript: + type: programming + group: RenderScript + extensions: + - .fs + tm_scope: none + ace_mode: text + +Formatted: + type: data + extensions: + - .for + tm_scope: none + ace_mode: text + Forth: type: programming color: "#341708" @@ -1015,7 +1070,7 @@ GLSL: Game Maker Language: type: programming - color: "#8ad353" + color: "#8fb200" extensions: - .gml tm_scope: source.c++ @@ -1048,7 +1103,7 @@ Gentoo Eclass: ace_mode: sh Gettext Catalog: - type: programming + type: prose search_term: pot searchable: false aliases: @@ -1089,7 +1144,7 @@ Go: Golo: type: programming - color: "#f6a51f" + color: "#88562A" extensions: - .golo tm_scope: source.golo @@ -1128,7 +1183,7 @@ Grammatical Framework: extensions: - .gf searchable: true - color: "#ff0000" + color: "#79aa7a" tm_scope: source.haskell ace_mode: haskell @@ -1148,7 +1203,7 @@ Graphviz (DOT): ace_mode: text Groff: - type: programming + type: markup extensions: - .man - '.1' @@ -1258,6 +1313,7 @@ Haml: Handlebars: type: markup + color: "#01a9d6" aliases: - hbs - htmlbars @@ -1295,16 +1351,23 @@ Haxe: Hy: type: programming ace_mode: text - color: "#7891b1" + color: "#7790B2" extensions: - .hy aliases: - hylang tm_scope: source.hy +HyPhy: + type: programming + ace_mode: text + extensions: + - .bf + tm_scope: none + IDL: type: programming - color: "#e3592c" + color: "#a3522f" extensions: - .pro - .dlm @@ -1389,7 +1452,7 @@ Ioke: Isabelle: type: programming - color: "#fdcd00" + color: "#FEFE00" extensions: - .thy tm_scope: source.isabelle.theory @@ -1397,12 +1460,21 @@ Isabelle: J: type: programming - color: "#2d8abd" + color: "#9EEDFF" extensions: - .ijs tm_scope: source.j ace_mode: text +JFlex: + type: programming + color: "#DBCA00" + extensions: + - .flex + - .jflex + tm_scope: source.jflex + ace_mode: text + JSON: type: data tm_scope: source.json @@ -1525,12 +1597,19 @@ Julia: KRL: type: programming - color: "#f5c800" + color: "#28431f" extensions: - .krl tm_scope: none ace_mode: text +KiCad: + type: programming + extensions: + - .sch + tm_scope: none + ace_mode: text + Kit: type: markup ace_mode: html @@ -1540,6 +1619,7 @@ Kit: Kotlin: type: programming + color: "#EA4DFA" extensions: - .kt - .ktm @@ -1588,7 +1668,7 @@ LabVIEW: Lasso: type: programming - color: "#2584c3" + color: "#999999" extensions: - .lasso - .las @@ -1631,6 +1711,24 @@ LilyPond: - .ily ace_mode: text +Limbo: + type: programming + extensions: + - .b + - .m + tm_scope: none + ace_mode: text + +Linker Script: + type: data + extensions: + - .ld + - .lds + filenames: + - ld.script + tm_scope: none + ace_mode: text + Liquid: type: markup extensions: @@ -1717,7 +1815,7 @@ LoomScript: Lua: type: programming ace_mode: lua - color: "#fa1fa1" + color: "#000080" extensions: - .lua - .fcgi @@ -1740,7 +1838,7 @@ M: MTML: type: markup - color: "#0095d9" + color: "#b7e1f4" extensions: - .mtml tm_scope: text.html.basic @@ -1757,6 +1855,7 @@ MUF: Makefile: type: programming + color: "#427819" aliases: - bsdmake - make @@ -1834,7 +1933,7 @@ Maven POM: Max: type: programming - color: "#ce279c" + color: "#c4a79c" aliases: - max/msp - maxmsp @@ -1858,7 +1957,7 @@ MediaWiki: Mercury: type: programming - color: "#abcdef" + color: "#ff2b2b" ace_mode: prolog interpreters: - mmi @@ -1895,6 +1994,17 @@ Modelica: tm_scope: source.modelica ace_mode: text +Module Management System: + type: programming + extensions: + - .mms + - .mmk + filenames: + - descrip.mmk + - descrip.mms + tm_scope: none + ace_mode: text + Monkey: type: programming extensions: @@ -1939,14 +2049,32 @@ NSIS: Nemerle: type: programming - color: "#0d3c6e" + color: "#3d3c6e" extensions: - .n ace_mode: text +NetLinx: + type: programming + color: "#0aa0ff" + extensions: + - .axs + - .axi + tm_scope: source.netlinx + ace_mode: text + +NetLinx+ERB: + type: programming + color: "#747faa" + extensions: + - .axs.erb + - .axi.erb + tm_scope: source.netlinx.erb + ace_mode: text + NetLogo: type: programming - color: "#ff2b2b" + color: "#ff6375" extensions: - .nlogo tm_scope: source.lisp @@ -1955,7 +2083,7 @@ NetLogo: NewLisp: type: programming lexer: NewLisp - color: "#eedd66" + color: "#87AED7" extensions: - .nl - .lisp @@ -1995,7 +2123,7 @@ Ninja: Nit: type: programming - color: "#0d8921" + color: "#009917" extensions: - .nit tm_scope: source.nit @@ -2003,7 +2131,7 @@ Nit: Nix: type: programming - color: "#7070ff" + color: "#7e7eff" extensions: - .nix aliases: @@ -2047,6 +2175,10 @@ OCaml: - .mli - .mll - .mly + interpreters: + - ocaml + - ocamlrun + tm_scope: source.ocaml ObjDump: type: data @@ -2071,7 +2203,7 @@ Objective-C: Objective-C++: type: programming tm_scope: source.objc++ - color: "#4886FC" + color: "#6866fb" aliases: - obj-c++ - objc++ @@ -2162,7 +2294,7 @@ Ox: Oxygene: type: programming - color: "#5a63a3" + color: "#cdd0e3" extensions: - .oxygene tm_scope: none @@ -2170,7 +2302,7 @@ Oxygene: Oz: type: programming - color: "#fcaf3e" + color: "#fab738" extensions: - .oz tm_scope: source.oz @@ -2205,7 +2337,7 @@ PHP: aliases: - inc -#Oracle +#Oracle PLSQL: type: programming ace_mode: sql @@ -2215,9 +2347,10 @@ PLSQL: - .pkb - .pks - .plb + - .plsql - .sql -#Postgres +#Postgres PLpgSQL: type: programming ace_mode: pgsql @@ -2286,6 +2419,7 @@ Pascal: Perl: type: programming + tm_scope: source.perl ace_mode: perl color: "#0298c3" extensions: @@ -2304,7 +2438,7 @@ Perl: Perl6: type: programming - color: "#0298c3" + color: "#0000fb" extensions: - .6pl - .6pm @@ -2321,7 +2455,7 @@ Perl6: - Rexfile interpreters: - perl6 - tm_scope: none + tm_scope: source.perl.6 ace_mode: perl PigLatin: @@ -2334,7 +2468,7 @@ PigLatin: Pike: type: programming - color: "#066ab2" + color: "#005390" extensions: - .pike - .pmod @@ -2380,7 +2514,7 @@ PowerShell: Processing: type: programming - color: "#2779ab" + color: "#0096D8" extensions: - .pde ace_mode: text @@ -2399,7 +2533,7 @@ Prolog: Propeller Spin: type: programming - color: "#2b446d" + color: "#7fa2a7" extensions: - .spin tm_scope: source.spin @@ -2425,7 +2559,7 @@ Public Key: Puppet: type: programming - color: "#cc5555" + color: "#332A77" extensions: - .pp filenames: @@ -2451,7 +2585,7 @@ PureBasic: PureScript: type: programming - color: "#bcdc53" + color: "#1D222D" extensions: - .purs tm_scope: source.haskell @@ -2460,7 +2594,7 @@ PureScript: Python: type: programming ace_mode: python - color: "#3581ba" + color: "#3572A5" extensions: - .py - .cgi @@ -2578,18 +2712,20 @@ RMarkdown: Racket: type: programming - color: "#ae17ff" + color: "#22228f" extensions: - .rkt - .rktd - .rktl - .scrbl + interpreters: + - racket tm_scope: source.racket ace_mode: lisp Ragel in Ruby Host: type: programming - color: "#ff9c2e" + color: "#e17600" extensions: - .rl aliases: @@ -2618,6 +2754,7 @@ Rebol: - .r3 - .rebol ace_mode: text + tm_scope: source.rebol Red: type: programming @@ -2627,7 +2764,7 @@ Red: - .reds aliases: - red/system - tm_scope: none + tm_scope: source.red ace_mode: text Redcode: @@ -2637,6 +2774,14 @@ Redcode: tm_scope: none ace_mode: text +RenderScript: + type: programming + extensions: + - .rs + - .rsh + tm_scope: none + ace_mode: text + RobotFramework: type: programming extensions: @@ -2670,6 +2815,7 @@ Ruby: - .gemspec - .god - .irbrc + - .jbuilder - .mspec - .pluginspec - .podspec @@ -2679,6 +2825,7 @@ Ruby: - .rbw - .rbx - .ru + - .ruby - .thor - .watchr interpreters: @@ -2710,7 +2857,7 @@ Rust: SAS: type: programming - color: "#1E90FF" + color: "#B34936" extensions: - .sas tm_scope: source.sas @@ -2734,7 +2881,7 @@ SPARQL: SQF: type: programming - color: "#FFCB1F" + color: "#3F3F3F" extensions: - .sqf - .hqf @@ -2788,8 +2935,8 @@ Sage: ace_mode: python SaltStack: - type: data - group: YAML + type: programming + color: "#646464" aliases: - saltstate - salt @@ -2836,7 +2983,6 @@ Scheme: - .ss interpreters: - guile - - racket - bigloo - chicken ace_mode: scheme @@ -2874,6 +3020,7 @@ Shell: - .fcgi - .ksh - .tmux + - .tool - .zsh interpreters: - bash @@ -2911,7 +3058,7 @@ Slash: Slim: group: HTML type: markup - color: "#ff8877" + color: "#ff8f77" extensions: - .slim ace_mode: text @@ -2934,16 +3081,18 @@ Smarty: SourcePawn: type: programming - color: "#f69e1d" + color: "#5c7611" aliases: - sourcemod extensions: - .sp + - .sma tm_scope: source.sp ace_mode: text Squirrel: type: programming + color: "#800000" extensions: - .nut tm_scope: source.c++ @@ -3000,7 +3149,7 @@ Swift: SystemVerilog: type: programming - color: "#343761" + color: "#DAE1C2" extensions: - .sv - .svh @@ -3076,6 +3225,8 @@ Tea: Text: type: prose wrap: true + aliases: + - fundamental extensions: - .txt - .fr @@ -3123,7 +3274,7 @@ Twig: TypeScript: type: programming - color: "#31859c" + color: "#2b7489" aliases: - ts extensions: @@ -3135,7 +3286,7 @@ Unified Parallel C: type: programming group: C ace_mode: c_cpp - color: "#755223" + color: "#4e3617" extensions: - .upc tm_scope: source.c @@ -3149,8 +3300,8 @@ UnrealScript: ace_mode: java VCL: + group: Perl type: programming - color: "#0298c3" extensions: - .vcl tm_scope: source.varnish.vcl @@ -3158,7 +3309,7 @@ VCL: VHDL: type: programming - color: "#543978" + color: "#adb2cb" extensions: - .vhdl - .vhd @@ -3172,7 +3323,7 @@ VHDL: Vala: type: programming - color: "#ee7d06" + color: "#fbe5cd" extensions: - .vala - .vapi @@ -3180,7 +3331,7 @@ Vala: Verilog: type: programming - color: "#848bf3" + color: "#b2b7f8" extensions: - .v - .veo @@ -3188,16 +3339,19 @@ Verilog: VimL: type: programming - color: "#199c4b" + color: "#199f4b" search_term: vim aliases: - vim + - nvim extensions: - .vim filenames: + - .nvimrc - .vimrc - _vimrc - gvimrc + - nvimrc - vimrc ace_mode: text @@ -3221,7 +3375,7 @@ Visual Basic: Volt: type: programming - color: "#0098db" + color: "#1F1F1F" extensions: - .volt tm_scope: source.d @@ -3229,7 +3383,7 @@ Volt: Web Ontology Language: type: markup - color: "#3994bc" + color: "#9cc9dd" extensions: - .owl tm_scope: text.xml @@ -3283,6 +3437,7 @@ XML: - .mxml - .nproj - .nuspec + - .odd - .osm - .plist - .pluginspec @@ -3293,6 +3448,7 @@ XML: - .rss - .scxml - .srdf + - .storyboard - .stTheme - .sublime-snippet - .targets @@ -3316,6 +3472,7 @@ XML: - .x3d - .xacro - .xaml + - .xib - .xlf - .xliff - .xmi @@ -3342,7 +3499,7 @@ XProc: XQuery: type: programming - color: "#2700e2" + color: "#5232e7" extensions: - .xquery - .xq @@ -3425,7 +3582,7 @@ desktop: eC: type: programming - color: "#4A4773" + color: "#913960" search_term: ec extensions: - .ec @@ -3457,7 +3614,7 @@ mupad: nesC: type: programming - color: "#ffce3b" + color: "#94B0C7" extensions: - .nc ace_mode: text @@ -3490,7 +3647,7 @@ wisp: xBase: type: programming - color: "#3a4040" + color: "#403a40" extensions: - .prg tm_scope: none diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index 6dc2e73a..78f37b18 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -14,13 +14,15 @@ module Linguist attr_reader :repository attr_reader :oid - attr_reader :name + attr_reader :path attr_reader :mode - def initialize(repo, oid, name, mode = nil) + alias :name :path + + def initialize(repo, oid, path, mode = nil) @repository = repo @oid = oid - @name = name + @path = path @mode = mode end diff --git a/lib/linguist/popular.yml b/lib/linguist/popular.yml index 1a5cb750..afb68021 100644 --- a/lib/linguist/popular.yml +++ b/lib/linguist/popular.yml @@ -9,21 +9,21 @@ - CSS - Clojure - CoffeeScript -- Common Lisp -- Diff -- Emacs Lisp -- Erlang +- Go - HTML - Haskell - Java - JavaScript - Lua +- Matlab - Objective-C - PHP - Perl - Python +- R - Ruby -- SQL - Scala -- Scheme - Shell +- Swift +- TeX +- VimL diff --git a/lib/linguist/samples.rb b/lib/linguist/samples.rb index efcba365..a7ecd1bd 100644 --- a/lib/linguist/samples.rb +++ b/lib/linguist/samples.rb @@ -50,16 +50,13 @@ module Linguist end else path = File.join(dirname, filename) - - if File.extname(filename) == "" - raise "#{path} is missing an extension, maybe it belongs in filenames/ subdir" - end + extname = File.extname(filename) yield({ :path => path, :language => category, :interpreter => Shebang.interpreter(File.read(path)), - :extname => File.extname(filename) + :extname => extname.empty? ? nil : extname }) end end diff --git a/lib/linguist/shebang.rb b/lib/linguist/shebang.rb index 6f04e866..5b27532a 100644 --- a/lib/linguist/shebang.rb +++ b/lib/linguist/shebang.rb @@ -23,17 +23,20 @@ module Linguist # First line must start with #! return unless shebang && shebang.start_with?("#!") - # Get the parts of the shebang without the #! - tokens = shebang.sub(/^#!\s*/, '').strip.split(' ') + s = StringScanner.new(shebang) # There was nothing after the #! - return if tokens.empty? + return unless path = s.scan(/^#!\s*\S+/) - # Get the name of the interpreter - script = File.basename(tokens.first) + # Keep going + script = path.split('/').last - # Get next argument if interpreter was /usr/bin/env - script = tokens[1] if script == 'env' + # if /usr/bin/env type shebang then walk the string + if script == 'env' + s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) # skip over variable arguments e.g. foo=bar + script = s.scan(/\S+/) + end # Interpreter was /usr/bin/env with no arguments return unless script @@ -41,6 +44,9 @@ module Linguist # "python2.6" -> "python2" script.sub! /(\.\d+)$/, '' + # #! perl -> perl + script.sub! /^#!\s*/, '' + # Check for multiline shebang hacks that call `exec` if script == 'sh' && data.lines.first(5).any? { |l| l.match(/exec (\w+).+\$0.+\$@/) } diff --git a/lib/linguist/strategy/filename.rb b/lib/linguist/strategy/filename.rb index e682863b..b8c819eb 100644 --- a/lib/linguist/strategy/filename.rb +++ b/lib/linguist/strategy/filename.rb @@ -3,17 +3,7 @@ module Linguist # Detects language based on filename and/or extension class Filename def self.call(blob, _) - name = blob.name.to_s - - # A bit of an elegant hack. If the file is executable but extensionless, - # append a "magic" extension so it can be classified with other - # languages that have shebang scripts. - extensions = FileBlob.new(name).extensions - if extensions.empty? && blob.mode && (blob.mode.to_i(8) & 05) == 05 - name += ".script!" - end - - Language.find_by_filename(name) + Language.find_by_filename(blob.name.to_s) end end end diff --git a/lib/linguist/strategy/modeline.rb b/lib/linguist/strategy/modeline.rb index e77597f4..55a8f355 100644 --- a/lib/linguist/strategy/modeline.rb +++ b/lib/linguist/strategy/modeline.rb @@ -1,7 +1,7 @@ module Linguist module Strategy class Modeline - EmacsModeline = /-\*-\s*mode:\s*(\w+);?\s*-\*-/i + EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i VimModeline = /\/\*\s*vim:\s*set\s*(?:ft|filetype)=(\w+):\s*\*\//i # Public: Detects language based on Vim and Emacs modelines diff --git a/lib/linguist/tokenizer.rb b/lib/linguist/tokenizer.rb index 05882649..0123f385 100644 --- a/lib/linguist/tokenizer.rb +++ b/lib/linguist/tokenizer.rb @@ -22,8 +22,10 @@ module Linguist # Start state on token, ignore anything till the next newline SINGLE_LINE_COMMENTS = [ '//', # C + '--', # Ada, Haskell, AppleScript '#', # Ruby '%', # Tex + '"', # Vim ] # Start state on opening token, ignore anything until the closing @@ -130,6 +132,9 @@ module Linguist # extract_shebang("#!/usr/bin/env node") # # => "node" # + # extract_shebang("#!/usr/bin/env A=B foo=bar awk -f") + # # => "awk" + # # Returns String token or nil it couldn't be parsed. def extract_shebang(data) s = StringScanner.new(data) @@ -138,6 +143,7 @@ module Linguist script = path.split('/').last if script == 'env' s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) script = s.scan(/\S+/) end script = script[/[^\d]+/, 0] if script diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 0384a7db..edc95804 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -24,6 +24,9 @@ - (^|/)config.guess$ - (^|/)config.sub$ +# Linters +- cpplint.py + # Node dependencies - node_modules/ @@ -143,6 +146,9 @@ ## Python ## +# Sphinx +- (^|/)docs?/_?(build|themes?|templates?|static)/ + # django - (^|/)admin_media/ @@ -221,7 +227,7 @@ - ^readme$ # Test fixtures -- ^[Tt]est/fixtures/ +- ^[Tt]ests?/fixtures/ # PhoneGap/Cordova - (^|/)cordova([^.]*)\.js$ @@ -233,7 +239,7 @@ # Vagrant - ^Vagrantfile$ -# .DS_Store's +# .DS_Stores - .[Dd][Ss]_[Ss]tore$ # R packages @@ -252,5 +258,8 @@ - proguard.pro - proguard-rules.pro +# PuPHPet +- ^puphpet/ + # Android Google APIs - (^|/)\.google_apis/ diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 9a84798b..f46571b1 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.4.3" + VERSION = "4.5.4" end diff --git a/samples/API Blueprint/actions.apib b/samples/API Blueprint/actions.apib new file mode 100644 index 00000000..f94dc67a --- /dev/null +++ b/samples/API Blueprint/actions.apib @@ -0,0 +1,55 @@ +FORMAT: 1A + +# Advanced Action API +A resource action is – in fact – a state transition. This API example demonstrates an action - state transition - to another resource. + +## API Blueprint ++ [Previous: Resource Model](11.%20Resource%20Model.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/11.%20Advanced%20Action.md) + +# Tasks [/tasks/tasks{?status,priority}] + ++ Parameters + + status (string) + + priority (number) + +## List All Tasks [GET] + ++ Response 200 (application/json) + + [ + { + "id": 123, + "name": "Exercise in gym", + "done": false, + "type": "task" + }, + { + "id": 124, + "name": "Shop for groceries", + "done": true, + "type": "task" + } + ] + +## Retrieve Task [GET /task/{id}] +This is a state transition to another resource + ++ Parameters + + id (string) + ++ Response 200 (application/json) + + { + "id": 123, + "name": "Go to gym", + "done": false, + "type": "task" + } + +## Delete Task [DELETE /task/{id}] + ++ Parameters + + id (string) + ++ Response 204 diff --git a/samples/API Blueprint/attributes.apib b/samples/API Blueprint/attributes.apib new file mode 100644 index 00000000..ce143f7b --- /dev/null +++ b/samples/API Blueprint/attributes.apib @@ -0,0 +1,39 @@ +FORMAT: 1A + +# Attributes API +This API example demonstrates how to describe body attributes of a request or response message. + +In this case, the description is complementary (and duplicate!) to the provided JSON example in the body section. The [Advanced Attributes](09.%20Advanced%20Attributes.md) API example will demonstrate how to avoid duplicates and how to reuse attributes descriptions. + +## API Blueprint ++ [Previous: Parameters](07.%20Parameters.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/08.%20Attributes.md) ++ [Next: Advanced Attributes](09.%20Advanced%20Attributes.md) + +# Group Coupons + +## Coupon [/coupons/{id}] +A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. + +### Retrieve a Coupon [GET] +Retrieves the coupon with the given ID. + ++ Response 200 (application/json) + + + Attributes (object) + + id: 250FF (string) + + created: 1415203908 (number) - Time stamp + + percent_off: 25 (number) + + A positive integer between 1 and 100 that represents the discount the coupon will apply. + + + redeem_by (number) - Date after which the coupon can no longer be redeemed + + + Body + + { + "id": "250FF", + "created": 1415203908, + "percent_off": 25, + "redeem_by:" null + } diff --git a/samples/API Blueprint/simple.apib b/samples/API Blueprint/simple.apib new file mode 100644 index 00000000..ecee8481 --- /dev/null +++ b/samples/API Blueprint/simple.apib @@ -0,0 +1,18 @@ +FORMAT: 1A + +# The Simplest API +This is one of the simplest APIs written in the **API Blueprint**. +One plain resource combined with a method and that's it! We will explain what is going on in the next installment - [Resource and Actions](02.%20Resource%20and%20Actions.md). + +**Note:** As we progress through the examples, do not also forget to view the [Raw](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) code to see what is really going on in the API Blueprint, as opposed to just seeing the output of the Github Markdown parser. + +Also please keep in mind that every single example in this course is a **real API Blueprint** and as such you can **parse** it with the [API Blueprint parser](https://github.com/apiaryio/drafter) or one of its [bindings](https://github.com/apiaryio/drafter#bindings). + +## API Blueprint ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) ++ [Next: Resource and Actions](02.%20Resource%20and%20Actions.md) + +# GET /message ++ Response 200 (text/plain) + + Hello World! diff --git a/samples/AsciiDoc/list.asc b/samples/AsciiDoc/list.asc index 066d14fc..3d93ade1 100644 --- a/samples/AsciiDoc/list.asc +++ b/samples/AsciiDoc/list.asc @@ -1,6 +1,9 @@ AsciiDoc Home Page ================== +Title +----- + Example Articles ~~~~~~~~~~~~~~~~ - Item 1 diff --git a/samples/Brainfuck/factor.b b/samples/Brainfuck/factor.b new file mode 100644 index 00000000..43f06ba2 --- /dev/null +++ b/samples/Brainfuck/factor.b @@ -0,0 +1,195 @@ +* factor an arbitrarily large positive integer +* +* Copyright (C) 1999 by Brian Raiter +* under the GNU General Public License + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- + +* +* read in the number +* + +<<<<<<<<<+ +[-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<] + >>>>>>>>>>,----------] +>>>>>>>>>>[------------------------------------->>>>>>>>>->] +<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- + +* +* display the number and initialize the loop variable to two +* + +[>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<] +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. +--------------------------.[-] +>>>>>>>>>>>>++<<<<+ + +* +* the main loop +* + +[ [-]>> + + * + * make copies of the number and the loop variable + * + + [>>>>[-]>[-]>[-]>[-] + >[-]>[-] + <<<<<<<[->>>+>+<<<<]>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>[->>>+>>+<<<<<]>>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + + * + * divide the number by the loop variable + * + + [>>>[-]>>>[-]>[-]>>>] initialize + <<<<<<<<<<[<<<<<<<<<<] + >>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+ + [ ->> double divisor until above dividend + [>>>>>>[->++<]>>>>]<<<<<<<<<< + [>>>>>>>>[-]>[-] + <<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>] + <<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+> + [-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>] + <<<<<<<<<< + [>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<< + [>>>>>>>>[->-<]> + [<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>>] + <<<<<<<<<<<<<<<<<<<] + >>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]< + ] + >>>>>>>> + [ subtract divisor from dividend + <<<<<< + [>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<< + [>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<< + [>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>] + >>>>>>>+ + [ if difference is nonnegative then + [-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient + [>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<< + [>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<< + [-<<<<<<+>>>>>>]]]]]]]]]]]>] + >>>>>>> + ] halve divisor and loop until zero + <<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<< + [+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<< + [->>>>>>>+<<<<<<<]-<<<<<<<<<<] + >>>>>>> + [-<<<<<<<<<<<+>>>>>>>>>>>] + >>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<< + [+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<< + [->>>>>>>>+<<<<<<<<]-<<<<<<<<<<] + >>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>> + [>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<< + [<<<<<<<<<<]>>>>>>>>>> + >>>>>> + ] + <<<<<< + + * + * make copies of the loop variable and the quotient + * + + [>>>[->>>>+>+<<<<<]>>>>>>>] + <<<<<<<<<< + [>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<< + + * + * break out of the loop if the quotient is larger than the loop variable + * + + [>>>>>>>>>[-<->]< + [<<<<<<<< + [<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+ + + [ [-] + + * + * partially increment the loop variable + * + + <[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<< + + * + * examine the remainder for nonzero digits + * + + [<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<] + >>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<] + >>>>- + + [ [+] + + * + * decrement the loop variable and replace the number with the quotient + * + + >>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<< + + * + * display the loop variable + * + + [+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]- + [>>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<<] + ++++++++++++++++++++++++++++++++.[-]>>>> + + ] + + * + * normalize the loop variable + * + + >>>>>> + [>>[->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<< + [->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>] + <<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<] + >>>>>>>>> + + ]< + +]>> + +* +* display the number and end +* + +[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- +[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<] +++++++++++. diff --git a/samples/Chapel/distributions.chpl b/samples/Chapel/distributions.chpl index a3e5f81d..31040c92 100644 --- a/samples/Chapel/distributions.chpl +++ b/samples/Chapel/distributions.chpl @@ -58,6 +58,34 @@ var BA: [BlockSpace] int; forall ba in BA do ba = here.id; +// +// The 'hasSingleLocalSubdomain' method on arrays will return true if the +// index set for a locale can be represented by a single domain. +// +if !BA.hasSingleLocalSubdomain() then + halt("For a Block distribution, the index set per locale should be \ + represented by a single domain"); + +// +// If the distribution's subdomains can be represented as single subdomain, +// we can use the 'localSubdomain' method to get the index set for the +// current locale. +// +// Below, we'll use the index set to confirm that the array elements have the +// correct locale id. +// + +for L in Locales { + on L { + const indices = BA.localSubdomain(); + for i in indices { + if BA[i] != L.id then + halt("Error: incorrect locale id"); + } + } +} + + // // Output the Block-distributed array to visually see how the elements // are partitioned across the locales. @@ -104,6 +132,14 @@ writeln("Block Array Index Map"); writeln(BA2); writeln(); +// +// We can use the 'targetLocales' method available on an array to get the +// locales array used as targets. +// +for (L, ML) in zip(BA2.targetLocales(), MyLocales) do + if L != ML then + halt("Error: BA2.targetLocales() should equal MyLocales"); + // @@ -126,6 +162,18 @@ writeln("Cyclic Array Index Map"); writeln(CA); writeln(); +// +// The domain returned by 'localSubdomain' need not be a dense block, as is +// the case for the Cyclic Distribution. +// +on Locales[0] { + const indices = CA.localSubdomain(); + for i in indices { + if CA[i] != 0 then + halt("Error: Cyclic array values on Locale 0 should be zero"); + } +} + // // Next, we'll declare a Block-Cyclic distribution. These @@ -134,7 +182,7 @@ writeln(); // of indices. Thus, the BlockCyclic distribution is parameterized // by a starting index (as with Cyclic) and a block size (per // dimension) specifying how large the chunks to be dealt out are. -// +// const BlkCycSpace = Space dmapped BlockCyclic(startIdx=Space.low, blocksize=(2, 3)); var BCA: [BlkCycSpace] int; @@ -146,6 +194,46 @@ writeln("Block-Cyclic Array Index Map"); writeln(BCA); writeln(); +// +// A locale's index set for a Block-Cyclic distribution cannot be represented +// by a single subdomain. +// +if BCA.hasSingleLocalSubdomain() then + halt("A Block-Cyclic index set cannot be represented by a single subdomain"); + +// +// If the local index set cannot be represented by a single subdomain, +// we can use the 'localSubdomains' iterator to yield a number of domains +// that represent the whole index set. +// +// Let's write a function that will use 'localSubdomains' to verify the +// correctness of the array values. +// + +proc verifyID(Data: []) { + for L in Locales { + on L { + for indices in Data.localSubdomains() { + for i in indices { + if Data[i] != L.id then + halt("Error: incorrect locale id"); + } + } + } + } +} +verifyID(BCA); + +// +// The 'localSubdomains' iterator is also available on distributions that +// can represent a locale's index set with a single domain. This allows us to +// write more general code that will work for all distributions. +// +// This means that we can call the 'verifyID' function on any array, like the +// 'BA' array from earlier. +// +verifyID(BA); + // // The ReplicatedDist distribution is different: each of the diff --git a/samples/Chapel/lulesh.chpl b/samples/Chapel/lulesh.chpl index d6480d26..78dab00d 100644 --- a/samples/Chapel/lulesh.chpl +++ b/samples/Chapel/lulesh.chpl @@ -292,14 +292,14 @@ proc main() { LagrangeLeapFrog(); if debug { - // deprint("[[ Forces ]]", fx, fy, fz); + deprintatomic("[[ Forces ]]", fx, fy, fz); deprint("[[ Positions ]]", x, y, z); deprint("[[ p, e, q ]]", p, e, q); } if showProgress then - writeln("time = ", format("%e", time), ", dt=", format("%e", deltatime), - if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) - else ""); + writef("time = %er, dt=%er, %s", time, deltatime, + if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) +"\n" + else "\n"); } if (cycle == maxcycles) { writeln("Stopped early due to reaching maxnumsteps"); @@ -314,12 +314,10 @@ proc main() { if printCoords { var outfile = open("coords.out", iomode.cw); var writer = outfile.writer(); - var fmtstr = if debug then "%1.9e" else "%1.4e"; - for i in Nodes { - writer.writeln(format(fmtstr, x[i]), " ", - format(fmtstr, y[i]), " ", - format(fmtstr, z[i])); - } + var fmtstr = if debug then "%1.9re %1.9er %1.9er\n" + else "%1.4er %1.4er %1.4er\n"; + for i in Nodes do + writer.writef(fmtstr, x[i], y[i], z[i]); writer.close(); outfile.close(); } @@ -479,7 +477,7 @@ inline proc localizeNeighborNodes(eli: index(Elems), y: [] real, ref y_local: 8*real, z: [] real, ref z_local: 8*real) { - for param i in 1..nodesPerElem { + for i in 1..nodesPerElem { const noi = elemToNode[eli][i]; x_local[i] = x[noi]; @@ -670,7 +668,7 @@ proc SumElemStressesToNodeForces(b_x: 8*real, b_y: 8*real, b_z: 8*real, ref fx: 8*real, ref fy: 8*real, ref fz: 8*real) { - for param i in 1..8 { + for i in 1..8 { fx[i] = -(stress_xx * b_x[i]); fy[i] = -(stress_yy * b_y[i]); fz[i] = -(stress_zz * b_z[i]); @@ -725,17 +723,17 @@ inline proc CalcElemFBHourglassForce(xd: 8*real, yd: 8*real, zd: 8*real, var hx, hy, hz: 4*real; // reduction - for param i in 1..4 { - for param j in 1..8 { + for i in 1..4 { + for j in 1..8 { hx[i] += hourgam[j][i] * xd[j]; hy[i] += hourgam[j][i] * yd[j]; hz[i] += hourgam[j][i] * zd[j]; } } - for param i in 1..8 { + for i in 1..8 { var shx, shy, shz: real; - for param j in 1..4 { + for j in 1..4 { shx += hourgam[i][j] * hx[j]; shy += hourgam[i][j] * hy[j]; shz += hourgam[i][j] * hz[j]; @@ -1088,16 +1086,16 @@ proc CalcFBHourglassForceForElems(determ, x8n, y8n, z8n, dvdx, dvdy, dvdz) { /* TODO: Can we enable this local block? */ // local { - for param i in 1..4 { + for i in 1..4 { var hourmodx, hourmody, hourmodz: real; // reduction - for param j in 1..8 { + for j in 1..8 { hourmodx += x8n[eli][j] * gammaCoef[i][j]; hourmody += y8n[eli][j] * gammaCoef[i][j]; hourmodz += z8n[eli][j] * gammaCoef[i][j]; } - for param j in 1..8 { + for j in 1..8 { hourgam[j][i] = gammaCoef[i][j] - volinv * (dvdx[eli][j] * hourmodx + dvdy[eli][j] * hourmody + @@ -1221,7 +1219,7 @@ proc CalcKinematicsForElems(dxx, dyy, dzz, const dt: real) { arealg[k] = CalcElemCharacteristicLength(x_local, y_local, z_local, volume); - for param i in 1..8 { + for i in 1..8 { x_local[i] -= dt2 * xd_local[i]; y_local[i] -= dt2 * yd_local[i]; z_local[i] -= dt2 * zd_local[i]; @@ -1669,7 +1667,7 @@ proc CalcSoundSpeedForElems(vnewc, rho0:real, enewc, pnewc, pbvc, bvc) { iter elemToNodes(elem) { - for param i in 1..nodesPerElem do + for i in 1..nodesPerElem do yield elemToNode[elem][i]; } @@ -1679,14 +1677,19 @@ iter elemToNodesTuple(e) { } -proc deprint(title:string, x:[?D] real, y:[D]real, z:[D]real) { +proc deprint(title:string, x:[?D] real, y:[D] real, z:[D] real) { writeln(title); - for i in D { - writeln(format("%3d", i), ": ", - format("%3.4e", x[i]), " ", - format("%3.4e", y[i]), " ", - format("%3.4e", z[i])); - } + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i], y[i], z[i]); } +proc deprintatomic(title:string, x:[?D] atomic real, y:[] atomic real, z:[] atomic real) { + writeln(title); + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i].peek(), y[i].peek(), z[i].peek()); +} diff --git a/samples/Clarion/CStringClass.clw b/samples/Clarion/CStringClass.clw new file mode 100644 index 00000000..7fa3ba98 --- /dev/null +++ b/samples/Clarion/CStringClass.clw @@ -0,0 +1,172 @@ + Member() + omit('***$***',_VER_C55) +_ABCDllMode_ EQUATE(0) +_ABCLinkMode_ EQUATE(1) + ***$*** + Include('Equates.CLW'),ONCE + Include('Keycodes.CLW'),ONCE + Include('Errors.CLW'),ONCE + Map + End ! map + Include('CStringClass.inc'),ONCE +CStringClass.Construct PROCEDURE ! Declare Procedure + CODE + SELF.bufferSize = DEFAULT_CS_BUFFER_SIZE + SELF.CS &= New(CSTRING(SELF.bufferSize)) +CStringClass.Destruct PROCEDURE ! Declare Procedure + CODE + Dispose(SELF.cs) +CStringClass.Cat PROCEDURE (STRING pStr) !,*CSTRING,PROC ! Declare Procedure +newLen LONG,AUTO +oldCS &CSTRING + CODE + newLen = Len(pStr) + IF (newLen+SELF.strLength+2) > SELF.newStrSize + ! Only grow the internal string if the result of the cat will be larger than the string currently is. + ! The reason for the "+2" is because this is used in the string slicing outside this IF. Without this matching +2 there is potential for an out of bounds slice which would be bad! + + ! Save a temporary copy of the old string so we can us it in the concatination after we have grown it! + oldCS &= New(CSTRING(SELF.strLength+1)) + oldCS = SELF.CS + Dispose(SELF.CS) + + SELF.newStrSize = newLen + SELF.strLength + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + SELF.CS = oldCS + Dispose(oldCS) + END + + ! Append the new string directly to the end of the old one. + SELF.CS[SELF.strLength+1 : SELF.strLength+newLen] = pStr + ! And terminate the CSTRING manually + SELF.CS[SELF.strLength+newLen+1] = '<0>' + + ! This is the same as doing "SELF.strLength = Len(SELF.CS)" but the Len() is _really_ slow on large strings. This is much faster! + SELF.strLength += newLen + + ! This is what it used to be: + ! SELF.Str(SELF.Str() & s) + ! It is a nice and neat solution but performance, especially on large strings was terrible! + + RETURN SELF.Str() +CStringClass.Str PROCEDURE (STRING pStr) !,*CSTRING, PROC ! Declare Procedure + CODE + IF Len(pStr) > SELF.newStrSize + ! Only Dispose/New the internal string if the new one requires it. + ! This might be slightly innefficient in terms of memory usage when the string gets smaller + ! But it is _vasty_ better for performance when the string gets added to a lot. + Dispose(SELF.CS) + SELF.newStrSize = Len(pStr) + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + END + + SELF.CS = pStr + SELF.strLength = Len(SELF.CS) + + RETURN SELF.CS +CStringClass.Len PROCEDURE !,LONG ! Declare Procedure + CODE + RETURN SELF.strLength +CStringClass.Replace PROCEDURE (STRING pFind, STRING pReplace) !,*CSTRING,PROC ! Declare Procedure +! FindString , ReplaceWith +locate LONG,AUTO +lastLocate LONG + CODE + LOOP + locate = InString(Upper(pFind), Upper(SELF.Str()), 1, lastLocate+1) + IF ~locate + BREAK + END + + ! So we dont end up having recursive replacement. + lastLocate = locate + Len(pReplace)-1 + + SELF.Str(Sub(SELF.Str(), 1, locate-1) & | + pReplace & | + Sub(SELF.Str(), locate+Len(pFind), SELF.Len()) | + ) + END + + RETURN SELF.Str() +CStringClass.Str PROCEDURE () !,*CSTRING ! Declare Procedure 3 + CODE + RETURN SELF.CS +!------------------------------------------------------------------------------ +CStringClass.Contains PROCEDURE (STRING pFind, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns a value (TRUE) indicating whether the specified String occurs within this string. +! Second parameter defaults to a case sensitive search. + CODE + IF pCaseSensitive = TRUE + IF InString(pFind, SELF.Str(), 1 , 1) > 0 + RETURN TRUE + END + ELSE + IF InString(Lower(pFind), SELF.Lower(), 1 , 1) > 0 + RETURN TRUE + END + END + + RETURN FALSE +CStringClass.Lower PROCEDURE () !,STRING ! Declare Procedure +! Returns a "Lowered" version of the self.cs doesnt change the self.cs + CODE + RETURN Lower(SELF.CS) +CStringClass.SubString PROCEDURE (LONG pPosition, LONG pLength) !,STRING,PROC ! Declare Procedure + CODE + RETURN Sub(SELF.Str(), pPosition, pLength) +CStringClass.ToLower PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to lowercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Lower()) +CStringClass.ToUpper PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to uppercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Upper()) +CStringClass.Trim PROCEDURE () !,*CSTRING,PROC ! Declare Procedure + CODE + SELF.Str(Left(SELF.Str())) + SELF.Str(Clip(SELF.Str())) + RETURN SELF.Str() +CStringClass.Upper PROCEDURE () !,STRING ! Declare Procedure + CODE + RETURN Upper(SELF.Str()) +CStringClass.IndexOf PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,LONG ! Declare Procedure +! Returns the index of the first parameter (pLookIn) is found within the SELF.CS +! zero if it is not found + CODE + IF pCaseSensitive = TRUE + RETURN InString(SELF.Str(), pLookIn, 1 , 1) + ELSE + RETURN InString(SELF.Lower(), Lower(pLookIn), 1 , 1) + END +CStringClass.FoundIn PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns TRUE if the first parameter (pLookIn) is found within the SELF.CS +! FALSE if it is no + CODE + IF SELF.IndexOf(pLookIn, pCaseSensitive) > 0 + RETURN TRUE + ELSE + RETURN FALSE + END +CStringClass.SetBuffer PROCEDURE (LONG pNewBuffer) ! Declare Procedure + CODE + SELF.bufferSize = pNewBuffer +CStringClass.EscapeXml PROCEDURE () !,STRING ! Declare Procedure +CS CStringClass + CODE + IF Omitted(pStr)=FALSE + CS.Str(pStr) + ELSE + ! Make a copy so we don't alter the original + CS.Str(SELF.Str()) + END + CS.Replace('&', '&') + CS.Replace('<', '<') + CS.Replace('>', '>') + CS.Replace('"', '"') + CS.Replace('''', ''') + + RETURN CS.Str() + diff --git a/samples/Clarion/ConsoleSupport.clw b/samples/Clarion/ConsoleSupport.clw new file mode 100644 index 00000000..c7eac1e1 --- /dev/null +++ b/samples/Clarion/ConsoleSupport.clw @@ -0,0 +1,68 @@ + Member() + Include('ConsoleSupport.inc'),ONCE + Map + MODULE('32-bit Windows API') + ! General functions + GetLastError(),DWORD,PASCAL + + ! Console functions + GetStdHandle(DWORD),HANDLE,PASCAL,PROC,RAW + WriteConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('WriteConsoleA') + ReadConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('ReadConsoleA') + SetConsoleTitle(Long),Bool,Raw,Pascal,name('SetConsoleTitleA') + GetConsoleTitle(Long,dword),Bool,Raw,Pascal,name('GetConsoleTitleA') + SetConsoleMode(Handle,dWord),BOOL,RAW,PASCAL + GetConsoleMode(Handle,Long),BOOL,RAW,PASCAL + End + End + +ConsoleSupport.Construct PROCEDURE + + CODE + +ConsoleSupport.Destruct PROCEDURE + + CODE + +ConsoleSupport.Init PROCEDURE () !,BYTE,VIRTUAL + CODE + + SELF.OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE) + If SELF.OutputHandle = INVALID_HANDLE_VALUE + Halt(1,'Unable to get output handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + SELF.InputHandle = GetStdHandle(STD_INPUT_HANDLE) + if SELF.InputHandle = INVALID_HANDLE_VALUE + Halt(2,'Unable to get console input handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + If ~SetConsoleMode(SELF.InputHandle,ENABLE_PROCESSED_INPUT ) + Halt(3,'Unable to set console mode (' & GetLastError() & ')') + RETURN INVALID_OTHER + End + + RETURN FALSE + +ConsoleSupport.WriteLine PROCEDURE (STRING pText) !,BYTE,PROC,VIRTUAL + CODE + SELF.TextBuffer = SELF.Prefix & pText & '<13,10>' + If WriteConsole(SELF.OutputHandle, ADDRESS(SELF.TextBuffer), LEN(SELF.TextBuffer),ADDRESS(SELF.BytesWritten), NULL) = 0 + Halt(4,'WriteConsoleError (' & GetLastError() & ')') + RETURN -1 + End + RETURN FALSE + +Consolesupport.ReadKey PROCEDURE () !,STRING,PROC,VIRTUAL + CODE + SELF.WriteLine('Press any key to continue...') + Clear(SELF.InBuffer) + Loop + IF ReadConsole(SELF.InputHandle,Address(SELF.InBuffer),100,Address(SELF.BytesRead),NULL) = 0 THEN + Halt(5,'Error on read console (' & GetLastError() & ')') + Break + End + Until SELF.BytesRead > 0 + RETURN SELF.InBuffer \ No newline at end of file diff --git a/samples/Clarion/HelloWorld.clw b/samples/Clarion/HelloWorld.clw new file mode 100644 index 00000000..8cad46dc --- /dev/null +++ b/samples/Clarion/HelloWorld.clw @@ -0,0 +1,10 @@ + PROGRAM + + MAP + END + + CODE + + MESSAGE('Hello World!') + + RETURN \ No newline at end of file diff --git a/samples/Clarion/hello.clw b/samples/Clarion/hello.clw new file mode 100644 index 00000000..14328c84 --- /dev/null +++ b/samples/Clarion/hello.clw @@ -0,0 +1,12 @@ + MEMBER() + INCLUDE('HelloClass.inc'),ONCE + MAP + END + +HelloClass.Construct PROCEDURE + CODE +HelloClass.Destruct PROCEDURE() !,VIRTUAL + CODE +HelloClass.SayHello PROCEDURE + CODE + MESSAGE('Hello World!') diff --git a/samples/Clojure/build.boot b/samples/Clojure/build.boot new file mode 100644 index 00000000..6de0bfca --- /dev/null +++ b/samples/Clojure/build.boot @@ -0,0 +1,15 @@ +;; from: https://github.com/boot-clj/boot#configure-task-options + +(set-env! + :source-paths #{"src"} + :dependencies '[[me.raynes/conch "0.8.0"]]) + +(task-options! + pom {:project 'my-project + :version "0.1.0"} + jar {:manifest {"Foo" "bar"}}) + +(deftask build + "Build my project." + [] + (comp (pom) (jar) (install))) diff --git a/samples/Common Lisp/hello.lisp b/samples/Common Lisp/hello.lisp new file mode 100644 index 00000000..642cdd29 --- /dev/null +++ b/samples/Common Lisp/hello.lisp @@ -0,0 +1,2 @@ +(DEFUN HELLO () + (PRINT 'HELLO)) diff --git a/samples/DIGITAL Command Language/fis_gtm_kitinstal.com b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com new file mode 100644 index 00000000..b4701ff9 --- /dev/null +++ b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com @@ -0,0 +1,443 @@ +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! ! +$! Copyright 2001, 2011 Fidelity Information Services, Inc ! +$! ! +$! This source code contains the intellectual property ! +$! of its copyright holder(s), and is made available ! +$! under a license. If you do not know the terms of ! +$! the license, please stop and do not read further. ! +$! ! +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! +$! +$! KITINSTAL.COM PROCEDURE FOR THE GT.M PRODUCT +$! +$ ON CONTROL_Y THEN VMI$CALLBACK CONTROL_Y +$! ON WARNING THEN EXIT $STATUS !! allow warning errors for INSTALL REPLACE +$ IF P1 .EQS. "VMI$_INSTALL" THEN GOTO INSTALL +$ IF P1 .EQS. "VMI$_POSTINSTALL" THEN GOTO POSTINSTALL +$ IF P1 .EQS. "VMI$_IVP" THEN GOTO IVP +$ EXIT VMI$_UNSUPPORTED +$! +$INSTALL: +$ TYPE SYS$INPUT + + GT.M (c) COPYRIGHT 1985 - 2000 by Sanchez Computer Associates + ALL RIGHTS RESERVED + +$! the following 2 lines must be maintained +$ GTM$VMS_VERSION :== 072 ! Minimum VMS version required +$ ALPHA = (f$getsyi("arch_name") .eqs. "Alpha") +$ IF ALPHA +$ THEN +$ GTM$DISK_SPACE == 28000 ! Minumum disk space on system disk required +$ ELSE +$ GTM$DISK_SPACE == 16000 ! Minumum disk space on system disk required +$ ENDIF +$ IF F$ELEMENT(0,",",VMI$VMS_VERSION) .EQS. "RELEASED" +$ THEN +$ GTM$VMS_IS == F$ELEMENT(1,",",VMI$VMS_VERSION) +$ IF GTM$VMS_IS .LTS. GTM$VMS_VERSION +$ THEN +$ VMI$CALLBACK MESSAGE E VMSMISMATCH "This GT.M kit requires an existing VMS''GTM$VMS_VERSION' system." +$ EXIT VMI$_FAILURE +$ ENDIF +$ ELSE +$ GTM$VMS_IS :== +$ WRITE SYS$OUTPUT " No VMS version checking performed for field test versions." +$ ENDIF +$ IF (GTM$VMS_IS .GES. "052") THEN T1 = F$VERIFY(VMI$KIT_DEBUG) +$ VMI$CALLBACK CHECK_NET_UTILIZATION GTM$ROOM 'GTM$DISK_SPACE' +$ IF .NOT. GTM$ROOM +$ THEN +$ VMI$CALLBACK MESSAGE E NOSPACE "There is not enough disk space -- GT.M needs ''GTM$DISK_SPACE' blocks." +$ EXIT VMI$_FAILURE +$ ENDIF +$! setup default answers +$ GTM$DOPURGE :== YES +$ GTM$RUN_IVP :== YES +$ GTM$STD_CNF :== YES +$ GTM$DST_OWN :== SYSTEM +$ IF F$IDENTIFIER(GTM$DST_OWN,"NAME_TO_NUMBER") .EQ. 0 THEN GTM$DST_OWN :== 1,4 +$ GTM$SYS_DST :== YES +$ GTM$DST_DIR :== GTM_DIST +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_DEV :== +$ GTM$STARTDB :== YES +$ GTM$MGR_COM :== YES +$ GTM$HLP_DIR :== NO +$ GTM$DEF_DCL :== YES +$ GTM$DEF_SYS :== YES +$ GTM$LNK_LOG :== YES +$ GTM$INSTALL :== YES +$ GTM$DEF_GLD :== YES +$ GTM$GBL_DIR :== MUMPS.GLD +$ GTM$DEF_RTN :== YES +$ GTM$RTN_DIR :== [],GTM$DIST: +$ GTM$PCT_RTN :== YES +$ VMI$CALLBACK ASK GTM$DOPURGE "Do you want to purge files replaced by this installation" 'GTM$DOPURGE' B - + "@VMI$KWD:GTMKITHLP HELP_PURGE" +$ IF .NOT. GTM$DOPURGE THEN VMI$CALLBACK SET PURGE NO +$ VMI$CALLBACK ASK GTM$STD_CNF "Do you want the standard GT.M configuration (performs INSTALL)" 'GTM$STD_CNF' B - + "@VMI$KWD:GTMKITHLP HELP_STD_CNF" +$ IF GTM$STD_CNF +$ THEN +$ GTM$SYS_DST == 1 +$ GTM$STARTDB == 1 +$ GTM$MGR_COM == 1 +$ GTM$HLP_DIR == 0 +$ GTM$DEF_DCL == 1 +$ GTM$DEF_SYS == 1 +$ GTM$INSTALL == 1 +$ GTM$LNK_LOG == 1 +$ GTM$INSTALL == 1 +$ GTM$DEF_GLD == 1 +$ GTM$DEF_RTN == 1 +$ GTM$PCT_RTN == 1 +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not standard configuration +$ VMI$CALLBACK ASK GTM$DST_OWN "What UIC should own the GT.M distribution" 'GTM$DST_OWN' S "@VMI$KWD:GTMKITHLP HELP_DST_OWN" +$ GTM$DST_OWN == GTM$DST_OWN - "[" - "]" +$ VMI$CALLBACK ASK GTM$SYS_DST "Do you want the GT.M distribution to go into a System Directory" 'GTM$SYS_DST' B - + "@VMI$KWD:GTMKITHLP HELP_SYS_DST" +$ IF GTM$SYS_DST +$ THEN +$ VMI$CALLBACK ASK GTM$DST_DIR "In what System Directory do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_SYS_DIR" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not system disk +$ VMI$CALLBACK ASK GTM$DST_DEV "On which device do you want to place GT.M" "''GTM$DST_DEV'" S "@VMI$KWD:GTMKITHLP HELP_DST_DEV" +$ VMI$CALLBACK ASK GTM$DST_DIR "In what directory on that device do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_DST_DIR" +$ GTM$DST_DEV == GTM$DST_DEV - ":" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_LOG :== 'GTM$DST_DEV':['GTM$DST_DIR'] +$ GTM$DST_CRE == GTM$DST_LOG +$ GTM$DIR_TYPE :== USER +$ ENDIF ! system disk +$ VMI$CALLBACK ASK GTM$STARTDB "Do you want GTMSTART.COM in the startup database" 'GTM$STARTDB' B - + "@VMI$KWD:GTMKITHLP HELP_STARTDB" +$ IF .NOT. GTM$STARTDB +$ THEN +$ VMI$CALLBACK ASK GTM$MGR_COM "Do you want the GT.M .COM files in SYS$MANAGER" 'GTM$MGR_COM' B - + "@VMI$KWD:GTMKITHLP HELP_MGR_COM" +$ ENDIF +$ VMI$CALLBACK ASK GTM$HLP_DIR "Do you want the GT.M help files in SYS$HELP" 'GTM$HLP_DIR' B "@VMI$KWD:GTMKITHLP HELP_HLP_DIR" +$ VMI$CALLBACK ASK GTM$DEF_DCL "Do you want to define GT.M commands to the system" 'GTM$DEF_DCL' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_DCL" +$ VMI$CALLBACK ASK GTM$DEF_SYS "Do you want to define GT.M logical names in the System Table" 'GTM$DEF_SYS' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_SYS" +$ VMI$CALLBACK ASK GTM$LNK_LOG "Do you want to define the LNK$LIBRARY logical names" 'GTM$LNK_LOG' B - + "@VMI$KWD:GTMKITHLP HELP_LNK_LOG" +$ VMI$CALLBACK ASK GTM$RUN_IVP "Do you want to run the IVP (performs INSTALL)" 'GTM$RUN_IVP' B - + "@VMI$KWD:GTMKITHLP HELP_RUN_IVP" +$ IF GTM$RUN_IVP +$ THEN +$ GTM$PCT_RTN == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$PCT_RTN "Do you want to compile the GT.M percent routines (performs INSTALL)" 'GTM$PCT_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_PCT_RTN" +$ ENDIF +$ IF (GTM$RUN_IVP .OR. GTM$PCT_RTN) +$ THEN +$ GTM$INSTALL == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$INSTALL "Do you want to INSTALL the GT.M shareable images now" 'GTM$INSTALL' B - + "@VMI$KWD:GTMKITHLP HELP_INSTALL" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_RTN "Do you want to have a default definition for GTM$ROUTINES" 'GTM$DEF_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_RTN" +$ IF GTM$DEF_RTN +$ THEN +$ VMI$CALLBACK ASK GTM$RTN_DIR "What is the search specification for GTM$ROUTINES" 'GTM$RTN_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_RTN_DIR" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_GLD "Do you want to have a default definition for GTM$GBLDIR" 'GTM$DEF_GLD' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_GLD" +$ IF GTM$DEF_GLD +$ THEN +$ VMI$CALLBACK ASK GTM$GBL_DIR "What is the file specification for GTM$GBLDIR" 'GTM$GBL_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_GBL_DIR" +$ ENDIF +$ ENDIF ! standard configuration +$! tell them what's happening +$ IF GTM$MGR_COM +$ THEN +$ WRITE SYS$OUTPUT " The following command files are created and copied to SYS$MANAGER:" +$ ELSE +$ WRITE SYS$OUTPUT " The following command files are created:" +$ ENDIF +$ TYPE SYS$INPUT + + GTMINSTALL.COM + GTMLOGICALS.COM + GTMLOGIN.COM + GTMSTART.COM + GTMSTOP.COM + + Each file contains its own user documentation. + + All the questions have been asked. Installation now proceeds without your + manual intervention for about 10-15 minutes. +$ IF GTM$RUN_IVP THEN WRITE SYS$OUTPUT " Finally the Installation Verification Procedure tests the installation." +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK CREATE_DIRECTORY 'GTM$DIR_TYPE' 'GTM$DST_CRE' "/OWNER_UIC=[''GTM$DST_OWN'] /PROTECTION=(WO:RE)" +$ VMI$CALLBACK RESTORE_SAVESET B +$ VMI$CALLBACK RESTORE_SAVESET C +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK MESSAGE I CRECOM "Creating command files." +$! Create GTMINSTALL.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMINSTALL.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMINSTALL.COM installs GTMSECSHR and other GT.M images." +$ WRITE OUFILE "$! GTMSECSHR is a small protected image and must be installed." +$ WRITE OUFILE "$! GTMSHR is the run-time library and is installed for performance." +$ WRITE OUFILE "$! GTM$DMOD and MCOMPILE are small images frequently used in development." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ INSTALL" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER/PROTECTED GTMSECSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTMSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTM$DMOD" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER MCOMPILE" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGICALS.COM +$ GTM$HLP_LOG :== GTM$DIST +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== SYS$HELP +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGICALS.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGICALS.COM defines the logical names required to use GT.M." +$ WRITE OUFILE "$! By default the definitions are placed in the PROCESS table." +$ WRITE OUFILE "$! Parameter 1, if supplied should be the name of a logical name table" +$ WRITE OUFILE "$! and/or the mode of definition." +$ WRITE OUFILE "$! Assignments in a ""permanent"" table reduce GT.M activation time." +$ WRITE OUFILE "$!" +$ IF GTM$LNK_LOG THEN WRITE OUFILE "$! The LNK$LIBRARY names many require adjustment to your environment." +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$! GTM$GBLDIR is defined to provide default access to a global directory." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! GTM$ROUTINES is defined to provide access to the GT.M utilities." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! You may wish to define a different structure for $ZROUTINES." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ IF (P1 .NES. """") .AND. (F$EXTRACT(0,1,P1) .NES. ""/"") THEN P1 := /'P1" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DIST ''GTM$DST_LOG'" +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$ DEFINE 'P1' GTM$GBLDIR ''GTM$GBL_DIR'" +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$ DEFINE 'P1' GTM$ROUTINES ""''GTM$RTN_DIR'""" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$HELP ''GTM$HLP_LOG'" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSHR GTM$DIST:GTMSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSECSHR GTM$DIST:GTMSECSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DMOD GTM$DIST:GTM$DMOD.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' MCOMPILE GTM$DIST:MCOMPILE.EXE" +$ IF GTM$LNK_LOG +$ THEN +$ N1 = 0 +$ DN = 0 +$ T1 = F$TRNLNM("LNK$LIBRARY") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ELSE ! lnk$library is in use +$LNK_LOOP: +$ N1 = N1 + 1 +$ T1 = F$TRNLNM("LNK$LIBRARY_''N1'") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ENDIF +$ IF (.NOT. DN) .AND. (N1 .LT. 998) THEN GOTO LNK_LOOP +$ ENDIF ! gtmlib handling +$ IF DN ! placed gtmlib +$ THEN +$ N1 = N1 + 1 +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMSHR.OLB" +$ ELSE +$ VMI$CALLBACK MESSAGE I NOLNKLOG "No LNK$LIBRARY logical names available" +$ ENDIF +$ ENDIF ! setting up LNK$LIBRARYs +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGIN.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGIN.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGIN.COM performs process specific setup for GT.M." +$ WRITE OUFILE "$! It calls GTMLOGICALS.COM if the logical names are not" +$ WRITE OUFILE "$! in the SYSTEM table." +$ WRITE OUFILE "$! It defines symbols to access GT.M images." +$ WRITE OUFILE "$! It defines GT.M commands locally if they are not defined to the system." +$ WRITE OUFILE "$! When the command and logical names are not defined on a process level," +$ WRITE OUFILE "$! a production user may save start-up time by not using GTMLOGIN." +$ WRITE OUFILE "$! CCE is infrequently used, but may be defined as a foreign command." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ IF .NOT. GTM$DEF_DCL THEN WRITE OUFILE "$ SET COMMAND GTM$DIST:GTMCOMMANDS.CLD" +$ WRITE OUFILE "$ DSE :== $GTM$DIST:DSE.EXE ! Database System Editor" +$ WRITE OUFILE "$ GDE :== $GTM$DIST:GDE.EXE ! Global Directory Editor" +$ WRITE OUFILE "$ GTM :== MUMPS/DIRECT ! Direct Mode MUMPS" +$ WRITE OUFILE "$ LKE :== $GTM$DIST:LKE.EXE ! Lock Editor" +$ WRITE OUFILE "$ MUPI*P :== $GTM$DIST:MUPIP.EXE ! MUMPS Peripheral Interchange Program" +$ WRITE OUFILE "$ EXIT" +$ WRITE OUFILE "$ CCE :== $GTM$DIST:CCE.EXE ! GT.CX Operator Interface Program" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTART.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTART.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTART.COM should be placed in the VMS startup database." +$ WRITE OUFILE "$! It invokes GTMLOGICALS.COM and GTMINSTALL.COM." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P1 .EQS. """" .OR. (P1 .EQS. ""FULL"") THEN P1 := SYSTEM/EXEC" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS 'P1'" +$ WRITE OUFILE "$ @'dir'GTMINSTALL" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTOP.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTOP.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTOP.COM stops all the active GT.M processes and does a RUNDOWN." +$ WRITE OUFILE "$! Place an invocation or copy of this procedure in the site specific" +$ WRITE OUFILE "$! shutdown: SYS$MANAGER:SYSHUTDWN to ensure all GT.M databases are" +$ WRITE OUFILE "$! properly closed before VMS terminates. GTMSTOP should follow" +$ WRITE OUFILE "$! GTCMSTOP and precede GTCXSTOP, if they are used." +$ WRITE OUFILE "$! If GTMSTOP is not intended to disable subsequent use of GT.M," +$ WRITE OUFILE "$! add a comment (!) before the INSTALL REMOVE GTMSECSHR." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ WRITE OUFILE "$ MUPIP := $GTM$DIST:MUPIP.EXE" +$ WRITE OUFILE "$ STOP := $GTM$DIST:GTM$STOP" +$ WRITE OUFILE "$ STOP 'P1'" +$ WRITE OUFILE "$ MUPIP RUNDOWN" +$ WRITE OUFILE "$ INSTALL REMOVE GTMSECSHR" +$ WRITE OUFILE "$ EXIT" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P2 .EQS. """" THEN P2 := /SYSTEM/EXEC" +$ WRITE OUFILE "$ DEASSIGN 'P2' GTMSECSHR" +$ CLOSE OUFILE +$ VMI$CALLBACK MESSAGE I PREINS "Preparing files for installation." +$! GTMFILES.KIT must be maintained as kit contents change +$ GTM$HLP_LOG == GTM$DST_LOG +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== VMI$ROOT:[SYSHLP] +$ OPEN /WRITE OUFILE VMI$KWD:GTMFILES.KIT +$ IF GTM$MGR_COM +$ THEN +$ WRITE OUFILE "GTM$ GTMINSTALL.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTART.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTOP.COM VMI$ROOT:[SYSMGR] C" +$ ENDIF +$ WRITE OUFILE "GTM$ GTMINSTALL.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTART.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTOP.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GDE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ LKE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUMPS.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GTMLIB.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMZCALL.MLB ''GTM$DST_LOG'" +$ IF ALPHA +$ THEN +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.M64 ''GTM$DST_LOG'" +$ ELSE +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.MAR ''GTM$DST_LOG'" +$ ENDIF +$ WRITE OUFILE "GTM$ GTM$CE.H ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOLLECT.OPT ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOMMANDS.CLD ''GTM$DST_LOG' C" +$ WRITE OUFILE "GTM$ *.M ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! GTMIMAGES.KIT must be maintained as kit contents change +$ OPEN /WRITE OUFILE VMI$KWD:GTMIMAGES.KIT +$ WRITE OUFILE "GTM$ GTMSECSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GDE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$DMOD.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ LKE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MCOMPILE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$STOP.EXE ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! Provide with file.KITs +$ VMI$CALLBACK PROVIDE_FILE "" VMI$KWD:GTMFILES.KIT "" T +$ VMI$CALLBACK PROVIDE_IMAGE "" VMI$KWD:GTMIMAGES.KIT "" T +$ VMI$CALLBACK MESSAGE I FININS "Finalizing the installation." +$ IF GTM$DEF_DCL THEN VMI$CALLBACK PROVIDE_DCL_COMMAND GTMCOMMANDS.CLD +$ IF GTM$STARTDB THEN VMI$CALLBACK MODIFY_STARTUP_DB ADD GTMSTART.COM LPMAIN +$! GTM$INSTALL is TRUE if GTM$RUN_IVP or GTM$PCT_RTN +$ IF GTM$INSTALL THEN VMI$CALLBACK SET POSTINSTALL YES +$ IF GTM$RUN_IVP THEN VMI$CALLBACK SET IVP YES +$ EXIT VMI$_SUCCESS +$! +$POSTINSTALL: +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$! remove MUPIP from command tables for change from V2.4 to V2.5 +$ SET NOON +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /TABLE=SYS$COMMON:[SYSLIB]DCLTABLES /OUTPUT=SYS$COMMON:[SYSLIB]DCLTABLES /DELETE=MUPIP +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /DELETE=MUPIP +$ SET ON +$ IF GTM$MGR_COM +$ THEN +$ T1 := SYS$MANAGER: +$ ELSE +$ T1 = GTM$DST_LOG +$ ENDIF +$ @'T1'GTMSTART +$ @'T1'GTMLOGIN +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$ SET DEFAULT GTM$DIST +$ T2 = F$ENVIRONMENT("PROTECTION") +$ SET PROTECTION=(S=REWD,O=REWD,G=REWD,W=RE)/DEFAULT +$ MUMPS GTM$DMOD.M +$ IF GTM$LNK_LOG +$ THEN +$ T1 := +$ ELSE +$ T1 :=,GTMLIB.OLB/LIB,GTMSHR.OLB/LIB +$ ENDIF +$ LINK GTM$DMOD.OBJ/NOTRACE'T1 +$ IF GTM$PCT_RTN +$ THEN +$ TYPE SYS$INPUT + + Compiling the GT.M percent (%) routines. +$ MUMPS * +$ IF GTM$DOPURGE THEN PURGE *.* +$ SET DEFAULT VMI$KWD +$ ENDIF ! percent routines +$ SET PROTECTION=('T2')/DEFAULT +$ EXIT VMI$_SUCCESS +$! +$IVP: +$! The real Installation Verification Procedure. +$ TYPE SYS$INPUT + + GT.M Installation Verification Procedure + +$! Extract the IVP .COM file from the text library. +$ LIBRARIAN /EXTRACT=GTM$IVP /OUTPUT=GTM$IVP.COM GTM$IVP.TLB +$ @GTM$IVP +$ EXIT $STATUS +$! diff --git a/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com new file mode 100644 index 00000000..65e9d0cb --- /dev/null +++ b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com @@ -0,0 +1,867 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! martin.zinser@eurexchange.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples +$! subdir path, update module search in makefile.in +$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned +$! shared image creation +$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared +$! image +$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)). +$! "" -> automatic, preference: MMK, MMS, built-in. +$! +$ on error then goto err_exit +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "''p1'" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "/include = []" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ mapfile = name + ".map" +$ libdefs = "" +$ vax = f$getsyi("HW_MODEL").lt.1024 +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$ ia64 = f$getsyi("HW_MODEL").ge.4096 +$! +$! 2012-03-05 SMS. +$! Why is this needed? And if it is needed, why not simply ".not. vax"? +$! +$!!! if axp .or. ia64 then set proc/parse=extended +$! +$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ if (Make .eqs. "") +$ then +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$ else +$ Make = f$edit( Make, "trim") +$ endif +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$ close optf +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$! +$! 2012-03-05 SMS. +$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX? +$! +$ if axp .or. ia64 +$ then +$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)" +$ s_case = true +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "" +$ write aconf "/* VMS specifics added by make_vms.com: */" +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "# define off64_t __off64_t" +$ write aconf "# define fopen64 fopen" +$ write aconf "# define fseeko64 fseeko" +$ write aconf "# define lseek64 lseek" +$ write aconf "# define ftello64 ftell" +$ write aconf "#endif" +$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)" +$ write aconf "# define HAVE_VSNPRINTF" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;* +$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" - + [.test]example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" - + [.test]minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib" - + minigzip.obj libz.olb +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Create shareable image +$! +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call map_2_shopt 'mapfile' 'optfile' +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt +$ write sys$output "Zlib build completed" +$ delete/nolog tmp.opt;* +$ exit +$AMISS_ERR: +$ write sys$output "No source for config.hin found." +$ write sys$output "Tried any of ''aconf_in_file'" +$ goto err_exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ write out "all : example.exe minigzip.exe libz.olb" +$ copy sys$input: out +$ deck + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : [.test]example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : [.test]minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check_list = "OBJZ =#OBJG =" +$MRLOOP: +$ read/end=mrdone min rec +$ i = 0 +$SRC_CHECK_LOOP: +$ src_check = f$element(i, "#", src_check_list) +$ i = i+1 +$ if src_check .eqs. "#" then goto mrloop +$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Analyze the project map file and create the symbol vector for a shareable +$! image from it +$! +$! Version history +$! 0.01 20120128 First version +$! 0.02 20120226 Add pre-load logic +$! +$ MAP_2_SHOPT: Subroutine +$! +$ SAY := "WRITE_ SYS$OUTPUT" +$! +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_m2s +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT: Error, no output file provided" +$ goto exit_m2s +$ ENDIF +$! +$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary" +$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread" +$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary" +$ module4 = "inflateSync#uncompress#zlibVersion#compress" +$ open/read map 'p1 +$ if axp .or. ia64 +$ then +$ open/write aopt a.opt +$ open/write bopt b.opt +$ write aopt " CASE_SENSITIVE=YES" +$ write bopt "SYMBOL_VECTOR= (-" +$ mod_sym_num = 1 +$ MOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ MOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ mod_in = mod_in + 1 +$ goto mod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto mod_sym_loop +$ endif +$MAP_LOOP: +$ read/end=map_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto map_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ endif +$ goto map_loop +$MAP_END: +$ close/nolog aopt +$ close/nolog bopt +$ open/append libopt 'p2' +$ open/read aopt a.opt +$ open/read bopt b.opt +$ALOOP: +$ read/end=aloop_end aopt line +$ write libopt line +$ goto aloop +$ALOOP_END: +$ close/nolog aopt +$ sv = "" +$BLOOP: +$ read/end=bloop_end bopt svn +$ if (svn.nes."") +$ then +$ if (sv.nes."") then write libopt sv +$ sv = svn +$ endif +$ goto bloop +$BLOOP_END: +$ write libopt f$extract(0,f$length(sv)-2,sv), "-" +$ write libopt ")" +$ close/nolog bopt +$ delete/nolog/noconf a.opt;*,b.opt;* +$ else +$ if vax +$ then +$ open/append libopt 'p2' +$ mod_sym_num = 1 +$ VMOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ VMOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ mod_in = mod_in + 1 +$ goto vmod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto vmod_sym_loop +$ endif +$VMAP_LOOP: +$ read/end=vmap_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto vmap_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ endif +$ goto vmap_loop +$VMAP_END: +$ else +$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)" +$ write sys$output "No options file created" +$ endif +$ endif +$ EXIT_M2S: +$ close/nolog map +$ close/nolog libopt +$ endsubroutine diff --git a/samples/DIGITAL Command Language/libxslt_build.com b/samples/DIGITAL Command Language/libxslt_build.com new file mode 100644 index 00000000..89371f01 --- /dev/null +++ b/samples/DIGITAL Command Language/libxslt_build.com @@ -0,0 +1,342 @@ +$! BUILD_XSLT.COM +$! +$! Build the XSLT library +$! +$! Arguments: +$! +$! p1 - "DEBUG" is you want to build with debug +$! +$! This package requires libxml to have already been installed. You need +$! to ensure that the logical name LIBXML is defined and points to the +$! directory containing libxml's .h files +$! +$! This procedure creates the object libraries +$! +$! XML_LIBDIR:LIBXSLT.OLB +$! XML_LIBDIR:LIBEXSLT.OLB +$! +$! and the program +$! +$! XSLTPROC +$! +$! After the library is built, you can link these routines into +$! your code with the command +$! +$! LINK your_modules,XML_LIBDIR:LIBEXSLT/LIB,LIBXSLT/LIBRARY,LIBXML/LIB +$! +$! Change History +$! -------------- +$! Command file author : John A Fotheringham (jaf@jafsoft.com) +$! Last update : 2 Nov 2001 +$! +$!- configuration ------------------------------------------------------------- +$! +$!- compile command. +$! +$ cc_opts = "/INCLUDE=([],XML_SRCDIR:,[-.libxslt])/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if p1.eqs."DEBUG" +$ then +$ debug = "Y" +$ cc_command = "CC''cc_opts'/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ else +$ debug = "N" +$ cc_command = "CC''cc_opts'" +$ endif +$! +$!- configure multiple build passes for each library. ------------------------- +$! +$! For each pass: +$! +$! "libname" is the name of the library or module being created +$! +$! "progname" is the name of the program being created +$! +$! "src" is the list of sources to be built into the library or program +$! - This should be compared to the definition of +$! "_la_SOURCES" in the MAKEFILE.IN file in +$! corresponding directory. +$! +$ num_passes = 3 ! two libraries and a program +$! +$!- pass 1 - library LIBXSLT +$! +$ libname_1 = "LIBXSLT" +$ h_file_1 = "xslt.h" +$ progname_1 = "" +$! +$ ! see "libxslt_la_SOURCES" in [.libxslt]makefile.in +$ src_1 = "xslt.c xsltutils.c pattern.c templates.c variables.c keys.c" +$ src_1 = src_1 + " numbers.c extensions.c extra.c functions.c" +$ src_1 = src_1 + " namespaces.c imports.c attributes.c documents.c" +$ src_1 = src_1 + " preproc.c transform.c security.c" +$! +$!- pass 2 - library LIBEXSLT +$! +$ libname_2 = "LIBEXSLT" +$ h_file_2 = "exslt.h" +$ progname_2 = "" +$! +$ ! see "libexslt_la_SOURCES" in [.libexslt]makefile.in +$ src_2 = "exslt.c common.c math.c sets.c functions.c strings.c date.c saxon.c dynamic.c" +$! +$!- pass 3 - program XSLTPROC +$! +$ libname_3 = "" +$ h_file_3 = "" +$ progname_3 = "XSLTPROC" +$! +$ ! see "xsltproc_SOURCES" in [.xsltproc]makefile.in +$ src_3 = "xsltproc.c" +$! +$!- set up and check logicals ----------------------------------------------- +$! +$! XML_LIBDIR - object library directory +$! XML_SRCDIR - top-level build directory of libxml package -- needed for config.h and trio.h +$! LIBXML - source directory containing .h files for libxml package +$! +$ if f$trnlnm("XML_LIBDIR").eqs."" +$ then +$ on error then continue +$ globfile = f$search("[--...]libxml.olb") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define the XML_LIBDIR logical name to" +$ write sys$output " point to the directory containing your object" +$ write sys$output " libraries. This should already contain LIBXML.OLB" +$ write sys$output " from the libxml package, and will be the directory" +$ write sys$output " the new LIBXSLT.OLB library will be placed in" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_LIBDIR "''srcdir'" +$ write sys$output "Defining XML_LIBDIR as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("libxml").eqs."" +$ then +$ ! look for globals.h in a directory installed paralle to this one +$ on error then continue +$ globfile = f$search("[--...]globals.h") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define a LIBXML logical directory to" +$ write sys$output " point to the directory containing the .h files" +$ write sys$output " for the libxml package" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process LIBXML "''srcdir'" +$ write sys$output "Defining LIBXML as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("XML_SRCDIR").eqs."" +$ then +$ globfile = f$search("[--...]globals.c") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate globals.c. You need to manually define a XML_SRCDIR logical" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_SRCDIR "''srcdir'" +$ write sys$output "Defining XML_SRCDIR as ""''srcdir'""" +$ endif +$ endif +$! +$!- set up some working logicals ------------------- +$! +$ pass_no = 1 +$ set_pass_logical: +$! +$ if pass_no.le.num_passes +$ then +$! +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ else +$ logname = "''progname'_SRCDIR" +$ endif +$ findfile = f$element(0," ",src_'pass_no') +$! +$!--- set up a source directory logical +$! +$ if f$trnlnm("''logname'").eqs."" +$ then +$ ! look for the target file in a parallel subdirectory +$ globfile = f$search("[-...]''findfile'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''findfile'. You need to manually define a ''logname' logical" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process 'logname' "''srcdir'" +$ write sys$output "Defining ''logname' as ""''srcdir'""" +$ endif +$ endif +$! +$!--- if it's a library, set up a logical pointing to the .h files +$! +$ if libname.nes."" +$ then +$ if f$trnlnm("''libname'").eqs."" +$ then +$ ! look for the target .h file in a parallel subdirectory +$ h_file = h_file_'pass_no' +$ globfile = f$search("[-...]''h_file'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''h_file'. You need to manually define a ''libname' logical" +$ exit +$ else +$ includedir = f$element(0,"]",globfile)+ "]" +$ define/process 'libname' "''includedir'" +$ write sys$output "Defining ''libname' as ""''includedir'""" +$ endif +$ endif +$ endif +$! +$ pass_no = pass_no +1 +$ goto set_pass_logical +$! +$ endif ! for each pass +$! +$!- set up error handling (such as it is) ------------------------------------- +$! +$ exit_status = 1 +$ saved_default = f$environment("default") +$ on error then goto ERROR_OUT +$ on control_y then goto ERROR_OUT +$! +$ goto start_here +$ start_here: ! move this line to debug/rerun parts of this command file +$! +$!- compile modules into the library ------------------------------------------ +$! +$! +$ pass_no = 1 ! make three passes, one for each library, one for XSLTPROC +$ pass_loop: +$! +$ if pass_no.le.num_passes +$ then +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ pass_description = "the XML_LIBDIR:''libname'.OLB object library" +$ else +$ logname = "''progname'_SRCDIR" +$ pass_description = "the programs in ''progname'" +$ endif +$ src = src_'pass_no' +$! +$!- create the library if need +$! +$ if libname.nes."" +$ then +$ if f$search("XML_LIBDIR:''libname'.OLB").eqs."" +$ then +$ write sys$output "Creating new object library XML_LIBDIR:''libname'.OLB..." +$ library/create XML_LIBDIR:'libname'.OLB +$ endif +$ endif +$! +$!- move to the source directory +$! +$ set def 'logname' +$! +$!- define the library and link commands (link command not used as is) +$! +$ if libname.nes."" +$ then +$ lib_command = "LIBRARY/REPLACE XML_LIBDIR:''libname'.OLB" +$ link_command = "" +$ else +$ lib_command = "" +$ link_command = "LINK" +$ endif +$! +$ write sys$output "" +$ write sys$output "Building ''pass_description' +$ write sys$output "" +$! +$ s_no = 0 +$ src = f$edit(src,"COMPRESS") +$! +$ source_loop: +$! +$ next_source = f$element (S_no," ",src) +$ if next_source.nes."" .and. next_source.nes." " +$ then +$ call build 'next_source' +$ s_no = s_no + 1 +$ goto source_loop +$ endif +$! +$ pass_no = pass_no + 1 +$ goto pass_loop +$! +$ endif ! for each pass +$! +$!- Th-th-th-th-th-that's all folks! ------------------------------------------ +$! +$EXIT_OUT: +$! +$ set def 'saved_default +$ exit 'exit_status +$! +$ +$ERROR_OUT: +$ exit_status = $status +$ write sys$output "''f$message(exit_status)'" +$ goto EXIT_OUT +$! +$!- the BUILD subroutine. Compile then insert into library or link as required +$! +$BUILD: subroutine +$ on warning then goto EXIT_BUILD +$ source_file = p1 +$ name = f$element(0,".",source_file) +$ object_file = f$fao("XML_LIBDIR:!AS.OBJ",name) +$! +$!- compile +$ write sys$output "Compiling ",p1,p2,"..." +$ cc_command /object='object_file 'source_file' 'p2' +$! +$!- insert into library if command defined +$! +$ if lib_command.nes."" +$ then +$ lib_command 'object_file' +$ delete/nolog 'object_file';* +$ endif +$! +$!- link module if command defined +$! +$ if link_command.nes."" +$ then +$ text = f$element(0,".",p1) ! lose the ".c" +$ write sys$output "Linking ",text,"..." +$ dbgopts = "" +$ if debug then dbgopts = "/DEBUG" +$ link_command'dbgopts' 'object_file',- + XML_LIBDIR:libexslt/lib,- + XML_LIBDIR:libxslt/lib,- + XML_LIBDIR:libxml/library +$ endif +$! +$EXIT_BUILD: +$ exit $status +$! +$endsubroutine diff --git a/samples/DIGITAL Command Language/vmsbackup_build.com b/samples/DIGITAL Command Language/vmsbackup_build.com new file mode 100644 index 00000000..c6cb4cab --- /dev/null +++ b/samples/DIGITAL Command Language/vmsbackup_build.com @@ -0,0 +1,10 @@ +$! Compiling with VAXC is said to work, but it requires the usual cruft +$! (vaxcrtl and all), and to avoid hair we don't supply said cruft here. +$ CC/DECC/PREFIX=all VMSBACKUP.C/DEFINE=(HAVE_MT_IOCTLS=0,HAVE_UNIXIO_H=1) +$ CC/DECC/PREFIX=all DCLMAIN.C +$! Probably we don't want match as it probably doesn't implement VMS-style +$! matching, but I haven't looking into the issues yet. +$ CC/DECC/PREFIX=all match +$ LINK/exe=VMSBACKUP.EXE - +vmsbackup.obj,dclmain.obj,match.obj,sys$input/opt +identification="VMSBACKUP4.1.1" diff --git a/samples/DTrace/javascript-trace.d b/samples/DTrace/javascript-trace.d index 258c6cd2..0acbaa97 100644 --- a/samples/DTrace/javascript-trace.d +++ b/samples/DTrace/javascript-trace.d @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: dtrace-script; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * diff --git a/samples/Elixir/filenames/mix.lock b/samples/Elixir/filenames/mix.lock new file mode 100644 index 00000000..830b074c --- /dev/null +++ b/samples/Elixir/filenames/mix.lock @@ -0,0 +1,10 @@ +%{"cowboy": {:hex, :cowboy, "1.0.0"}, + "cowlib": {:hex, :cowlib, "1.0.1"}, + "hackney": {:hex, :hackney, "0.14.3"}, + "hound": {:hex, :hound, "0.6.0"}, + "httpoison": {:hex, :httpoison, "0.5.0"}, + "idna": {:hex, :idna, "1.0.1"}, + "phoenix": {:hex, :phoenix, "0.10.0"}, + "plug": {:hex, :plug, "0.11.1"}, + "poison": {:hex, :poison, "1.3.1"}, + "ranch": {:hex, :ranch, "1.0.0"}} diff --git a/samples/Erlang/factorial.script! b/samples/Erlang/factorial similarity index 100% rename from samples/Erlang/factorial.script! rename to samples/Erlang/factorial diff --git a/samples/Erlang/filenames/rebar.config b/samples/Erlang/filenames/rebar.config new file mode 100644 index 00000000..91d3dff4 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config @@ -0,0 +1,260 @@ +%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- +%% ex: ts=4 sw=4 ft=erlang et +%% This is a sample rebar.conf file that shows examples of some of rebar's +%% options. + +%% == Core == + +%% Extend list of always recursive commands +{recursive_cmds, []}. + +%% Check required ERTS or OTP release version +{require_erts_vsn, ".*"}. +{require_otp_vsn, ".*"}. +{require_min_otp_vsn, ".*"}. + +%% Additional library directories to add to the code path +{lib_dirs, []}. + +%% == Erlang Compiler == + +%% Erlang files to compile before the rest. Rebar automatically compiles +%% parse_transforms and custom behaviours before anything other than the files +%% in this list. +{erl_first_files, ["src/mymib1.erl", "src/mymib2.erl"]}. + +%% Erlang compiler options +{erl_opts, [no_debug_info, + {i, "myinclude"}, + {src_dirs, ["src", "src2", "src3"]}, + {platform_define, + "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'}, + {platform_define, "(linux|freebsd)", 'BACKLOG', 128}, + {platform_define, "R13", 'old_inets'}]}. + +%% MIB Options? +{mib_opts, []}. + +%% SNMP mibs to compile first? +{mib_first_files, []}. + +%% leex options +{xrl_opts, []}. + +%% leex files to compile first +{xrl_first_files, []}. + +%% yecc options +{yrl_opts, []}. + +%% yecc files to compile first +{yrl_first_files, []}. + +%% == EDoc == + +%% EDoc options +{edoc_opts, []}. + +%% == Port Compiler == + +%% Port compilation environment variables. See rebar_port_compiler.erl for +%% more info. Default is `[]' +{port_env, [{"CFLAGS", "$CFLAGS -Ifoo"}, + {"freebsd", "LDFLAGS", "$LDFLAGS -lfoo"}]}. + +%% port_specs +%% List of filenames or wildcards to be compiled. May also contain a tuple +%% consisting of a regular expression to be applied against the system +%% architecture as a filter. +{port_specs, [{"priv/so_name.so", ["c_src/*.c"]}, + {"linux", "priv/hello_linux", ["c_src/hello_linux.c"]}, + {"linux", "priv/hello_linux", ["c_src/*.c"], [{env, []}]}]}. + +%% == escriptize == +{escript_name, "application"}. +{escript_incl_apps, []}. +{escript_shebang, "#!/usr/bin/env escript\n"}. +{escript_comment, "%%\n"}. +{escript_emu_args, "%%! -pa application/application/ebin\n"}. + +%% == LFE Compiler == + +%% LFE files to compile before the rest +{lfe_first_files, []}. + +%% Options for the LFE compiler: reuse {erl_opts, []} + +%% == ErlyDTL Compiler == + +%% Options for the ErlyDTL compiler +{erlydtl_opts, []}. + +%% == Proto compiler == +{proto_opts, [ + {compiler, protobuffs}, + {src_dirs, ["src"]} +]}. +%% Available compilers for protocol buffer files (*.proto): +%% protobuffs (default) +%% gpb +%% Optional src_dirs which is a list of directories where +%% to look for .proto files, default is src + +%% Options for the gpb protocol buffer compiler, +%% if selected by the proto_compiler option +{gpb_opts, []}. + +%% == EUnit == + +%% Options for eunit:test() +{eunit_opts, []}. + +%% Additional compile options for eunit. erl_opts is also used +{eunit_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'eunit' +{eunit_first_files, []}. + +%% == Cover == + +%% Whether to enable coverage reporting. Default is `false' +{cover_enabled, false}. + +%% Whether to print coverage report to console. Default is `false' +{cover_print_enabled, false}. + +%% Whether to export coverage report to file. Default is `false' +{cover_export_enabled, false}. + +%% == Common Test == + +%% Override the default "test" directory in which SUITEs are located +{ct_dir, "itest"}. + +%% Override the default "logs" directory in which SUITEs are logged +{ct_log_dir, "test/logs"}. + +%% Option to pass extra parameters when launching Common Test +{ct_extra_params, "-boot start_sasl -s myapp"}. + +%% Option to use short names (i.e., -sname test) when starting ct +{ct_use_short_names, true}. + +%% == QuickCheck == + +%% If qc_mod is unspecified, rebar tries to detect Triq or EQC +{qc_opts, [{qc_mod, module()}, Options]}. + +%% Additional compile options for qc. erl_opts is also used +{qc_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'qc' +{qc_first_files, []}. + +%% == Cleanup == + +%% Which files to cleanup +{clean_files, ["file", "file2"]}. + +%% == OTP Applications == + +%% Enable validation of the OTP app module list. Default is 'true' +{validate_app_modules, true}. + +%% == Dependencies == + +%% Where to put any downloaded dependencies. Default is "deps" +{deps_dir, "deps"}. + +%% What dependencies we have, dependencies can be of 3 forms, an application +%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or +%% an application name, a version and the SCM details on how to fetch it (SCM +%% type, location and revision). +%% Rebar currently supports git, hg, bzr, svn, rsync, fossil, and p4. +{deps, [app_name, + {rebar, "1.0.*"}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git"}}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git", "Rev"}}, + {rebar, "1.0.*", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}}, + {rebar, "1.0.0", + {git, "git://github.com/rebar/rebar.git", {tag, "1.0.0"}}}, + %% Dependencies can be marked as 'raw'. Rebar does not require + %% such dependencies to have a standard Erlang/OTP layout + %% which assumes the presence of either + %% "src/dependency_name.app.src" or "ebin/dependency_name.app" + %% files. + %% + %% 'raw' dependencies can still contain 'rebar.config' and + %% even can have the proper OTP directory layout, but they + %% won't be compiled. + %% + %% Only a subset of rebar commands will be executed on the + %% 'raw' subdirectories: get-deps, update-deps, check-deps, + %% list-deps and delete-deps. + {rebar, "", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}, + [raw]}, + {app_name, ".*", {hg, "https://www.example.org/url"}}, + {app_name, ".*", {rsync, "Url"}}, + {app_name, ".*", {svn, "https://www.example.org/url"}}, + {app_name, ".*", {svn, "svn://svn.example.org/url"}}, + {app_name, ".*", {bzr, "https://www.example.org/url", "Rev"}}, + {app_name, ".*", {fossil, "https://www.example.org/url"}}, + {app_name, ".*", {fossil, "https://www.example.org/url", "Vsn"}}, + {app_name, ".*", {p4, "//depot/subdir/app_dir"}}]}. + +%% == Subdirectories == + +%% Subdirectories? +{sub_dirs, ["dir1", "dir2"]}. + +%% == Plugins == + +%% Plugins you wish to include. +%% These can include any module on the code path, including deps. +%% Alternatively, plugins can be placed as source files in the plugin_dir, in +%% which case they will be compiled and loaded dynamically at runtime. +{plugins, [plugin1, plugin2]}. + +%% Override the directory in which plugin sources can be found. +%% Defaults to ./plugins +{plugin_dir, "some_other_directory"}. + + +%% == Pre/Post Command Hooks == + +{pre_hooks, [{clean, "./prepare_package_files.sh"}, + {"linux", compile, "c_src/build_linux.sh"}, + {compile, "escript generate_headers"}, + {compile, "escript check_headers"}]}. + +{post_hooks, [{clean, "touch file1.out"}, + {"freebsd", compile, "c_src/freebsd_tweaks.sh"}, + {eunit, "touch file2.out"}, + {compile, "touch postcompile.out"}]}. + +%% == xref == + +{xref_warnings, false}. + +%% optional extra paths to include in xref:set_library_path/2. +%% specified relative location of rebar.config. +%% e.g. {xref_extra_paths,["../gtknode/src"]} +{xref_extra_paths,[]}. + +%% xref checks to run +{xref_checks, [undefined_function_calls, undefined_functions, + locals_not_used, exports_not_used, + deprecated_function_calls, deprecated_functions]}. + +%% Optional custom xref queries (xref manual has details) specified as +%% {xref_queries, [{query_string(), expected_query_result()},...]} +%% The following for example removes all references to mod:*foo/4 +%% functions from undefined external function calls as those are in a +%% generated module +{xref_queries, + [{"(XC - UC) || (XU - X - B" + " - (\"mod\":\".*foo\"/\"4\"))",[]}]}. diff --git a/samples/Erlang/filenames/rebar.config.lock b/samples/Erlang/filenames/rebar.config.lock new file mode 100644 index 00000000..1627a9b1 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config.lock @@ -0,0 +1,158 @@ +%% THIS FILE IS GENERATED. DO NOT EDIT IT MANUALLY %% + +{sub_dirs,["rel","apps/riak"]}. +{require_otp_vsn,"R16|17"}. +{cover_enabled,true}. +{lib_dirs,["apps/riak"]}. +{erl_opts,[debug_info,fail_on_warning]}. +{eunit_opts,[verbose]}. +{erlydtl_opts,[{compiler_options,[report,return,debug_info]}]}. +{deps,[{rebar_lock_deps_plugin,".*", + {git,"git://github.com/seth/rebar_lock_deps_plugin.git", + "7a5835029c42b8138325405237ea7e8516a84800"}}, + {node_package,".*", + {git,"git://github.com/basho/node_package.git", + "a829631eccebe3c1d7657a0075584f55bf342977"}}, + {goldrush,".*", + {git,"git://github.com/DeadZen/goldrush.git", + "71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + {lager,".*", + {git,"git://github.com/basho/lager.git", + "b6b6cebcb27ccff8acc59ae775acebc2f52e4926"}}, + {syslog,".*", + {git,"git://github.com/Vagabond/erlang-syslog.git", + "918c9b453e0811b24f2c99b35b712b0ef9f29c7e"}}, + {lager_syslog,".*", + {git,"git://github.com/basho/lager_syslog.git", + "fa2e7e3daee0d0a59dadb820fd3381eac4a65770"}}, + {cluster_info,".*", + {git,"git://github.com/basho/cluster_info.git", + "e231144ca32dc83317be3360a4a259c73826b08a"}}, + {sidejob,".*", + {git,"git://github.com/basho/sidejob.git", + "c5aabba2d7daa80c340e110902bbcfcb552ccdcf"}}, + {erlang_js,".*", + {git,"git://github.com/basho/erlang_js.git", + "07467d899ab90a2b719ad19ab0be0048c1c8d873"}}, + {meck,".*", + {git,"git://github.com/basho/meck.git", + "dde759050eff19a1a80fd854d7375174b191665d"}}, + {getopt,".*", + {git,"git://github.com/jcomellas/getopt.git", + "659a28f4145bc9843598972854299dc4ea77e4cb"}}, + {neotoma,".*", + {git,"git://github.com/seancribbs/neotoma.git", + "760928ec8870da02eb11bccb501e2700925d06c6"}}, + {cuttlefish,".*", + {git,"git://github.com/basho/cuttlefish.git", + "c92c8325aeaea6b6ba7516bbd434f8e408f87d60"}}, + {bitcask,".*", + {git,"git://github.com/basho/bitcask.git", + "c74d0c43fdefdd435f7621ddf1fc2995b5bd123c"}}, + {eper,".*", + {git,"git://github.com/basho/eper.git", + "7222ecaebceb5422e74a9c1503043bbc6036f6b7"}}, + {edown,".*", + {git,"git://github.com/uwiger/edown.git", + "d62ec85281e451a46ba30045917c119d65b72a84"}}, + {sext,".*", + {git,"git://github.com/basho/sext.git", + "846b9cc22456287a572efd4c924203d77778670f"}}, + {poolboy,".*", + {git,"git://github.com/basho/poolboy.git", + "8bb45fbc715c5f493642a1cc572ec7017d0d5fa3"}}, + {basho_stats,".*", + {git,"git://github.com/basho/basho_stats.git", + "19c532af235ae675439d491b329c55c2f9b02deb"}}, + {riak_sysmon,".*", + {git,"git://github.com/basho/riak_sysmon.git", + "26a58bcaba96d07df885f7b3db4d4306f995ce14"}}, + {eleveldb,".*", + {git,"git://github.com/basho/eleveldb.git", + "0e4e4e7cf3ddc26523a77f853ea9409c1707b26c"}}, + {riak_ensemble,".*", + {git,"git://github.com/basho/riak_ensemble", + "78dc8f623353a212ca3cf12236d1e9ac824bde16"}}, + {pbkdf2,".*", + {git,"git://github.com/basho/erlang-pbkdf2.git", + "7076584f5377e98600a7e2cb81980b2992fb2f71"}}, + {parse_trans,".*", + {git,"git://github.com/uwiger/parse_trans.git", + "82cc00264aa1bad8fc5c0739b7541feb4a843432"}}, + {bear,".*", + {git,"git://github.com/basho/bear.git", + "da820a13c607c3f816ee8b83c587266da5389761"}}, + {folsom,".*", + {git,"git://github.com/basho/folsom.git", + "72944523b6467c9f7add5f1c96dd5020424a2681"}}, + {setup,".*", + {git,"git://github.com/uwiger/setup.git", + "51ee7c9f64d2bbe9dcbb58c278e8fbfd4d0ca5e2"}}, + {exometer_core,".*", + {git,"git://github.com/basho/exometer_core.git", + "b47a5d65d9500c2b8f6ccc50e34005503589ef77"}}, + {clique,".*", + {git,"git://github.com/basho/clique.git", + "3af4db8ea0f74aca42f6713446dcd5915c795a74"}}, + {riak_core,".*", + {git,"git://github.com/basho/riak_core.git", + "044c4e7f8dbfe8c49c45f2f7090adff4cd5aba50"}}, + {riak_pipe,".*", + {git,"git://github.com/basho/riak_pipe.git", + "3c0abc7ba301d57940c5a9c5de368b70429c28ff"}}, + {protobuffs,".*", + {git,"git://github.com/basho/erlang_protobuffs.git", + "f88fc3c6881687432ddd5546b3c7b08009dfb26f"}}, + {riak_pb,".*", + {git,"git://github.com/basho/riak_pb.git", + "78c50efa698f33f7d6ab1c7f5fa4666ec03b46b4"}}, + {mochiweb,".*", + {git,"git://github.com/basho/mochiweb.git", + "ade2a9b29a11034eb550c1d79b4f991bf5ca05ba"}}, + {webmachine,".*", + {git,"git://github.com/basho/webmachine.git", + "7677c240f4a7ed020f4bab48278224966bb42311"}}, + {riak_api,".*", + {git,"git://github.com/basho/riak_api.git", + "2781e66796903bc6847bffcf71a6ba7a05d69275"}}, + {riak_dt,".*", + {git,"git://github.com/basho/riak_dt.git", + "f7981d4ad7407ddc085f133f204dd71bf9d50c56"}}, + {eunit_formatters,".*", + {git,"git://github.com/seancribbs/eunit_formatters", + "96b6ced4d45ba641cbf2c8a8ae9b350dd300bc10"}}, + {riak_kv,".*", + {git,"git://github.com/basho/riak_kv.git", + "404619cb57574cd43e2dc0dc0453884ec6732a99"}}, + {merge_index,".*", + {git,"git://github.com/basho/merge_index.git", + "b701dde5c28956c3b629411e5ff7e50cbb5cb4b3"}}, + {riak_search,".*", + {git,"git://github.com/basho/riak_search.git", + "8fe4a8c020a74c52ee877bf6dd410824b4f79f8b"}}, + {erlydtl,".*", + {git,"git://github.com/evanmiller/erlydtl.git", + "d20b53f04837a1053ed18987f645cb60eae82453"}}, + {riak_control,".*", + {git,"git://github.com/basho/riak_control.git", + "09073ce672260e1ec0ba3999fabed7f319624ba1"}}, + {riaknostic,".*", + {git,"git://github.com/basho/riaknostic.git", + "101d95bddff4b70afcd1dd5442b8c6651887e0a4"}}, + {kvc,".*", + {git,"git://github.com/etrepum/kvc.git", + "5565fe51857747662410cc3c06362ebcf48a2f04"}}, + {ibrowse,".*", + {git,"git://github.com/cmullaparthi/ibrowse.git", + "e8ae353c16d4f0897abb9f80025b52925b974dd1"}}, + {yokozuna,".*", + {git,"git://github.com/basho/yokozuna.git", + "5868266b11f131d14c85495e50f899f3fe8158ba"}}, + {canola,".*", + {git,"git://github.com/basho/canola.git", + "9bdfee88fce20b3a01b7003696b53eb21913d6fb"}}, + {riak_auth_mods,".*", + {git,"git://github.com/basho/riak_auth_mods.git", + "31b8b30e6c215418522eaa615264ae9769a87410"}}]}. +{plugins,[rebar_lock_deps_plugin]}. + diff --git a/samples/Erlang/filenames/rebar.lock b/samples/Erlang/filenames/rebar.lock new file mode 100644 index 00000000..1d3a3982 --- /dev/null +++ b/samples/Erlang/filenames/rebar.lock @@ -0,0 +1,16 @@ +[{<<"goldrush">>, + {git,"git://github.com/DeadZen/goldrush.git", + {ref,"71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + 1}, + {<<"riak_dt">>, + {git,"git://github.com/helium/riak_dt.git", + {ref,"15d66cb26c2028c1ad1271c359b1d5da213825c3"}}, + 0}, + {<<"lager">>, + {git,"git://github.com/basho/lager.git", + {ref,"d33ccf3b69de09a628fe38b4d7981bb8671b8a4f"}}, + 0}, + {<<"eleveldb">>, + {git,"git://github.com/helium/eleveldb.git", + {ref,"29a5360dc0365b3330dd0cd45b0b8166f3b854be"}}, + 0}]. diff --git a/samples/Erlang/release.script! b/samples/Erlang/release similarity index 100% rename from samples/Erlang/release.script! rename to samples/Erlang/release diff --git a/samples/Filterscript/colormatrix.fs b/samples/Filterscript/colormatrix.fs new file mode 100644 index 00000000..86fb2482 --- /dev/null +++ b/samples/Filterscript/colormatrix.fs @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ip.rsh" + +static rs_matrix4x4 Mat; + +void init() { + rsMatrixLoadIdentity(&Mat); +} + +void setMatrix(rs_matrix4x4 m) { + Mat = m; +} + +uchar4 __attribute__((kernel)) root(uchar4 in) { + float4 f = convert_float4(in); + f = rsMatrixMultiply(&Mat, f); + f = clamp(f, 0.f, 255.f); + return convert_uchar4(f); +} + diff --git a/samples/Filterscript/fs_kernel.fs b/samples/Filterscript/fs_kernel.fs new file mode 100644 index 00000000..d8f0c4d6 --- /dev/null +++ b/samples/Filterscript/fs_kernel.fs @@ -0,0 +1,18 @@ +#pragma version(1) +#pragma rs java_package_name(foo) + +int __attribute__((kernel)) root(uint32_t ain) { + return 0; +} + +void __attribute__((kernel)) in_only(uint32_t ain) { +} + +int __attribute__((kernel)) out_only() { + return 0; +} + +int __attribute__((kernel)) everything(uint32_t ain, uint32_t x, uint32_t y) { + return 0; +} + diff --git a/samples/Formatted/long_seq.for b/samples/Formatted/long_seq.for new file mode 100644 index 00000000..eadf8036 --- /dev/null +++ b/samples/Formatted/long_seq.for @@ -0,0 +1,919 @@ +ACCEPTABLE LEFT PRIMERS + 1-based # self self hair- qual- + # sequence start ln N GC% Tm any_th end_th pin lity + 0 tgctagctaggcgatgctag 411 20 0 55.00 60.028 23.16 23.16 38.59 0.028 + 1 actgatacgcgatgctagct 476 20 0 50.00 59.957 17.69 1.35 0.00 0.043 + 2 gatcgatgctagctaggcga 405 20 0 55.00 60.100 16.30 16.30 0.00 0.100 + 3 tcgatcgatgctagctaggc 403 20 0 55.00 60.100 18.63 8.45 0.00 0.100 + 4 tagctgatcgatcgtagcgg 565 20 0 55.00 60.101 25.02 17.36 0.00 0.101 + 5 gctgactgatcgatcgatgc 113 20 0 55.00 59.826 24.08 17.09 35.21 0.174 + 6 tatcatctctgcgcgatcga 361 20 0 50.00 59.747 22.07 1.72 38.48 0.253 + 7 agctaggcgatgctagctag 415 20 0 55.00 59.742 17.46 17.46 41.54 0.258 + 8 ctagctaggcgatgctagct 413 20 0 55.00 59.742 18.68 17.35 43.53 0.258 + 9 ggcgatctagctagctgact 583 20 0 55.00 59.671 17.44 7.44 37.58 0.329 + 10 tcgatgctagctaggcgatg 407 20 0 55.00 60.382 14.03 0.00 0.00 0.382 + 11 gctgatcgatcgatgctagc 398 20 0 55.00 59.618 25.97 24.79 35.21 0.382 + 12 gctagctgatcgatcgatgc 394 20 0 55.00 59.618 24.08 21.09 35.21 0.382 + 13 atcatctctgcgcgatcgat 362 20 0 50.00 60.382 22.07 5.02 38.48 0.382 + 14 gactgatacgcgatgctagc 475 20 0 55.00 59.551 8.61 8.61 0.00 0.449 + 15 atcgatgctagctaggcgat 406 20 0 50.00 59.452 18.43 18.43 0.00 0.548 + 16 gctagctgactgatacgcga 468 20 0 55.00 60.589 16.29 0.00 0.00 0.589 + 17 agctagctgactgatacgcg 467 20 0 55.00 60.590 17.99 3.89 0.00 0.590 + 18 atgctagctaggcgatgcta 410 20 0 50.00 59.375 10.59 8.91 0.00 0.625 + 19 ctatcatctctgcgcgatcg 360 20 0 55.00 59.347 12.19 12.19 39.07 0.653 + 20 gatgctagctaggcgatgct 409 20 0 55.00 60.668 7.01 7.53 0.00 0.668 + 21 gctactatcatctctgcgcg 356 20 0 55.00 59.273 0.00 0.00 0.00 0.727 + 22 cgtagcggcgatctagctag 577 20 0 60.00 60.791 15.64 15.64 37.58 0.791 + 23 cggcgatctagctagctgac 582 20 0 60.00 61.003 14.84 7.25 38.70 1.003 + 24 gctagctgatcgatcgtagc 563 20 0 55.00 58.995 23.70 23.70 0.00 1.005 + 25 gatcgatcgatgtgcggcta 81 20 0 55.00 61.006 19.16 0.00 41.65 1.006 + 26 atcgatcgatgtgcggctag 82 20 0 55.00 61.008 29.65 0.00 41.65 1.008 + 27 gctgactgatacgcgatgc 472 19 0 57.89 60.025 0.00 0.00 0.00 1.025 + 28 agctagctgatcatcgatgct 190 21 0 47.62 60.035 17.99 11.09 0.00 1.035 + 29 gctagctagctgactgatcga 105 21 0 52.38 60.037 34.38 0.00 46.11 1.037 + 30 tcatctctgcgcgatcgat 363 19 0 52.63 59.946 22.07 0.12 38.48 1.054 + 31 atcatctctgcgcgatcga 362 19 0 52.63 59.946 22.07 1.72 38.48 1.054 + 32 atcgatcgatgtgcggcta 82 19 0 52.63 59.945 29.65 0.00 41.65 1.055 + 33 gtagcggcgatctagctagc 578 20 0 60.00 61.071 16.97 7.15 39.86 1.071 + 34 gctagctgactgatcgatcg 109 20 0 55.00 58.924 16.84 13.89 0.00 1.076 + 35 gctgatcgatcgatgtgcg 78 19 0 57.89 60.097 29.87 18.15 42.69 1.097 + 36 tatcatctctgcgcgatcgat 361 21 0 47.62 60.172 22.07 11.47 38.48 1.172 + 37 gctagctagctgatcgatcga 390 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 38 gctagctagctgatcgatcga 70 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 39 catctctgcgcgatcgatg 364 19 0 57.89 59.810 13.74 13.74 38.48 1.190 + 40 tcgtagcggcgatctagcta 576 20 0 55.00 61.231 11.55 9.27 36.40 1.231 + 41 actgatacgcgatgctagcta 476 21 0 47.62 59.765 17.69 3.08 0.00 1.235 + 42 actgatcgatcgatgctagct 117 21 0 47.62 59.763 23.29 11.70 35.21 1.237 + 43 agctagctgatcgatcgatgt 73 21 0 47.62 59.763 17.99 2.62 35.21 1.237 + 44 tagcggcgatctagctagct 579 20 0 55.00 61.243 23.74 23.74 46.60 1.243 + 45 cgtagcggcgatctagcta 577 19 0 57.89 59.729 11.55 9.27 37.58 1.271 + 46 ctagctgatcgatcgtagcg 564 20 0 55.00 58.727 25.02 15.05 0.00 1.273 + 47 tagcggcgatctagctagc 579 19 0 57.89 59.725 16.97 9.14 39.86 1.275 + 48 catcgatcgatgcatgcatg 442 20 0 50.00 58.722 37.80 23.31 44.93 1.278 + 49 tcatctctgcgcgatcgatg 363 20 0 55.00 61.279 18.01 18.01 38.48 1.279 + 50 gctagctagctgatcgatcg 559 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 51 gctagctagctgatcgatcg 390 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 52 gctagctagctgatcgatcg 70 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 53 agcatcggattagctagctga 3 21 0 47.62 59.689 28.29 20.88 0.00 1.311 + 54 agctgatcgatcgtagcgg 566 19 0 57.89 60.315 25.02 17.36 0.00 1.315 + 55 cggcgatctagctagctga 582 19 0 57.89 59.650 21.57 16.66 38.70 1.350 + 56 ctagctgatcgatcgatgtgc 75 21 0 52.38 59.643 31.83 30.04 35.21 1.357 + 57 gctagctgatcgatcgatgtg 74 21 0 52.38 59.643 12.06 6.93 35.21 1.357 + 58 gctagctaggcgatgctagc 412 20 0 60.00 61.357 30.41 30.41 46.19 1.357 + 59 tagctagctgactgatacgcg 466 21 0 52.38 60.373 28.29 3.89 0.00 1.373 + 60 gctagctgactgatcgatcga 109 21 0 52.38 60.374 22.52 22.52 0.00 1.374 + 61 agctagctgactgatcgatcg 108 21 0 52.38 60.374 17.99 13.89 0.00 1.374 + 62 cgatcgatgctagctaggcg 404 20 0 60.00 61.409 15.59 9.14 0.00 1.409 + 63 gctagctagctgactgatcg 105 20 0 55.00 58.563 34.38 1.84 46.11 1.437 + 64 atgctagctaggcgatgct 410 19 0 52.63 59.561 10.59 7.53 0.00 1.439 + 65 agctagctgatcgatcgtagc 562 21 0 52.38 60.441 26.87 26.87 0.00 1.441 + 66 gctagctagctgatcgatcgt 559 21 0 52.38 60.441 34.38 2.65 46.11 1.441 + 67 tagctaggcgatgctagctag 414 21 0 52.38 59.559 18.42 17.46 42.44 1.441 + 68 ctagctaggcgatgctagcta 413 21 0 52.38 59.559 18.69 17.64 42.44 1.441 + 69 tagctgatcgatcgatgtgc 76 20 0 50.00 58.558 31.83 30.04 35.21 1.442 + 70 gatgctagctaggcgatgcta 409 21 0 52.38 60.444 9.82 8.91 0.00 1.444 + 71 atgctagctaggcgatgctag 410 21 0 52.38 60.444 23.16 23.16 38.59 1.444 + 72 gctagctgatcatcgatgct 191 20 0 50.00 58.539 16.29 12.14 0.00 1.461 + 73 agctagctgatcatcgatgc 190 20 0 50.00 58.539 21.42 9.22 0.00 1.461 + 74 gctgactgatacgcgatgct 472 20 0 55.00 61.494 2.33 0.00 0.00 1.494 + 75 agctgactgatacgcgatgc 471 20 0 55.00 61.494 3.47 0.00 0.00 1.494 + 76 ggcgatctagctagctgacta 583 21 0 52.38 59.491 17.44 5.40 37.58 1.509 + 77 gatcgatgctagctaggcgat 405 21 0 52.38 60.510 21.61 21.61 0.00 1.510 + 78 atcgatcgatgctagctaggc 402 21 0 52.38 60.510 29.65 8.45 33.56 1.510 + 79 ctgatcgatcgatgtgcgg 79 19 0 57.89 59.447 15.54 5.83 41.65 1.553 + 80 agctgatcgatcgatgtgcg 77 20 0 55.00 61.556 31.92 20.26 42.69 1.556 + 81 cgatcatcgatgctagctagc 548 21 0 52.38 59.444 34.89 34.89 46.99 1.556 + 82 tagctaggcgatgctagcta 414 20 0 50.00 58.433 19.37 17.81 42.44 1.567 + 83 agctagctactgatcgatgct 303 21 0 47.62 59.415 17.56 11.51 0.00 1.585 + 84 tcgatcgatgtgcggctag 83 19 0 57.89 60.606 18.63 0.00 41.65 1.606 + 85 gactgatcgatcgatgctagc 116 21 0 52.38 59.378 15.86 8.45 35.21 1.622 + 86 agctagctgactgatcgatca 260 21 0 47.62 59.347 26.99 26.99 35.44 1.653 + 87 ctgactgatacgcgatgctag 473 21 0 52.38 59.312 1.70 0.00 0.00 1.688 + 88 ctagctgactgatacgcgatg 469 21 0 52.38 59.312 0.00 0.00 0.00 1.688 + 89 gctactatcatctctgcgcga 356 21 0 52.38 60.707 2.71 2.71 0.00 1.707 + 90 agctactatcatctctgcgcg 355 21 0 52.38 60.709 0.00 0.00 0.00 1.709 + 91 actatcatctctgcgcgatc 359 20 0 50.00 58.270 4.99 0.00 0.00 1.730 + 92 actgatcgatcgatgctagc 117 20 0 50.00 58.270 23.29 13.61 35.21 1.730 + 93 gctagctgatcgatcgatgt 74 20 0 50.00 58.270 14.29 2.62 35.21 1.730 + 94 ctatcatctctgcgcgatcga 360 21 0 52.38 60.771 22.07 1.72 38.48 1.771 + 95 atcgatgctagctaggcgatg 406 21 0 52.38 60.779 21.16 4.37 0.00 1.779 + 96 tgactgatacgcgatgctag 474 20 0 50.00 58.207 1.70 0.00 0.00 1.793 + 97 ctgactgatacgcgatgcta 473 20 0 50.00 58.207 2.33 0.00 0.00 1.793 + 98 tagctgactgatacgcgatg 470 20 0 50.00 58.207 0.00 0.00 0.00 1.793 + 99 ctgactgatcgatcgatgct 114 20 0 50.00 58.197 26.44 12.40 35.21 1.803 + 100 agctgactgatcgatcgatg 112 20 0 50.00 58.197 23.05 13.21 35.21 1.803 + 101 tcggattagctagctgatgc 7 20 0 50.00 58.176 17.46 17.46 40.05 1.824 + 102 gcatcggattagctagctga 4 20 0 50.00 58.176 28.29 20.88 0.00 1.824 + 103 agcatcggattagctagctg 3 20 0 50.00 58.171 28.29 10.80 0.00 1.829 + 104 gatgctagctaggcgatgc 409 19 0 57.89 59.141 4.18 0.00 0.00 1.859 + 105 ctgatacgcgatgctagctag 477 21 0 52.38 59.113 17.46 17.46 0.00 1.887 + 106 gctagctgactgatacgcg 468 19 0 57.89 59.086 8.21 3.89 0.00 1.914 + 107 ctctgcgcgatcgatgctag 367 20 0 60.00 61.946 21.94 18.16 38.48 1.946 + 108 tctgcgcgatcgatgctag 368 19 0 57.89 60.966 21.94 18.16 38.48 1.966 + 109 ctctgcgcgatcgatgcta 367 19 0 57.89 60.966 26.61 17.10 38.48 1.966 + 110 cgatgctagctaggcgatgc 408 20 0 60.00 61.968 11.09 0.00 0.00 1.968 + 111 gactgatacgcgatgctagct 475 21 0 52.38 60.975 17.69 1.35 0.00 1.975 + 112 gctagctgactgatacgcgat 468 21 0 52.38 60.975 8.21 0.00 0.00 1.975 + 113 tgatacgcgatgctagctag 478 20 0 50.00 57.994 17.46 17.46 0.00 2.006 + 114 ctgatacgcgatgctagcta 477 20 0 50.00 57.994 17.69 3.08 0.00 2.006 + 115 cgcgatcgatgctagctagc 372 20 0 60.00 62.011 34.89 34.89 43.67 2.011 + 116 gcgcgatcgatgctagctag 371 20 0 60.00 62.011 21.66 17.46 38.48 2.011 + 117 ctgatcgatcgatgctagct 399 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 118 agctgatcgatcgatgctag 397 20 0 50.00 57.983 27.33 18.05 34.69 2.017 + 119 ctagctgatcgatcgatgct 395 20 0 50.00 57.983 33.87 33.38 38.16 2.017 + 120 agctagctgatcgatcgatg 393 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 121 ctgatcgatcgatgctagct 118 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 122 agctagctgatcgatcgatg 73 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 123 catcggattagctagctgatgc 5 22 0 50.00 59.982 24.41 24.41 40.05 2.018 + 124 gcatcggattagctagctgatg 4 22 0 50.00 59.982 27.81 27.81 33.28 2.018 + 125 tcgatgctagctaggcgat 407 19 0 52.63 58.964 14.03 3.01 0.00 2.036 + 126 atcgatgctagctaggcga 406 19 0 52.63 58.964 16.30 16.30 0.00 2.036 + 127 actatcatctctgcgcgatcg 359 21 0 52.38 61.037 12.19 12.19 39.07 2.037 + 128 gcgcgatcgatgctagcta 371 19 0 57.89 61.037 21.66 3.08 38.48 2.037 + 129 gctgatcgatcgatgctagct 398 21 0 52.38 61.044 27.88 12.70 35.21 2.044 + 130 agctgatcgatcgatgctagc 397 21 0 52.38 61.044 27.33 27.90 34.69 2.044 + 131 gctagctgatcgatcgatgct 394 21 0 52.38 61.044 33.87 33.38 38.16 2.044 + 132 agctagctgatcgatcgatgc 393 21 0 52.38 61.044 24.08 21.09 35.21 2.044 + 133 cgcgatcgatgctagctag 372 19 0 57.89 58.947 22.07 17.46 38.48 2.053 + 134 tcgtagcggcgatctagc 576 18 0 61.11 59.936 4.70 0.00 36.40 2.064 + 135 cgtagcggcgatctagct 577 18 0 61.11 59.935 11.03 11.03 37.58 2.065 + 136 gcggcgatctagctagct 581 18 0 61.11 59.933 23.74 23.74 38.05 2.067 + 137 agcggcgatctagctagc 580 18 0 61.11 59.933 16.97 7.15 39.86 2.067 + 138 ctagctgactgatacgcgat 469 20 0 50.00 57.918 1.43 0.00 0.00 2.082 + 139 ctagctgatcgatcgtagcgg 564 21 0 57.14 61.096 20.31 16.15 0.00 2.096 + 140 agctactatcatctctgcgc 355 20 0 50.00 57.898 0.00 0.00 0.00 2.102 + 141 gctagctactgatcgatgct 304 20 0 50.00 57.898 11.51 11.51 0.00 2.102 + 142 agctagctactgatcgatgc 303 20 0 50.00 57.898 17.56 1.76 0.00 2.102 + 143 agcatcggattagctagctgat 3 22 0 45.45 60.108 17.84 15.13 0.00 2.108 + 144 tgctagctaggcgatgcta 411 19 0 52.63 58.881 17.69 8.91 0.00 2.119 + 145 aagcatcggattagctagctg 2 21 0 47.62 58.879 28.29 10.80 0.00 2.121 + 146 tctgcgcgatcgatgcta 368 18 0 55.56 59.857 26.61 16.13 38.48 2.143 + 147 cgatgctagctaggcgatg 408 19 0 57.89 58.856 11.09 0.00 0.00 2.144 + 148 agctagctgatcatcgatgcta 190 22 0 45.45 59.845 17.99 13.09 0.00 2.155 + 149 tagctagctgatcatcgatgct 189 22 0 45.45 59.845 16.29 15.30 0.00 2.155 + 150 atcgatcgatgtgcggct 82 18 0 55.56 60.166 29.65 4.36 41.65 2.166 + 151 gctagctgactgatcgatca 261 20 0 50.00 57.829 26.99 26.99 35.44 2.171 + 152 tagctagctgactgatcgatcg 107 22 0 50.00 60.174 28.29 13.89 0.00 2.174 + 153 agctgatcatcatcgatgct 515 20 0 45.00 57.788 11.25 0.72 40.32 2.212 + 154 agctagctgactgatcgatcat 260 22 0 45.45 59.778 26.67 18.02 36.62 2.222 + 155 tgactgatacgcgatgctagc 474 21 0 52.38 61.238 8.61 8.61 0.00 2.238 + 156 gctgactgatacgcgatgcta 472 21 0 52.38 61.238 2.33 0.00 0.00 2.238 + 157 tagctgactgatacgcgatgc 470 21 0 52.38 61.238 3.47 0.00 0.00 2.238 + 158 tagctagctgatcgatcgtagc 561 22 0 50.00 60.238 26.87 26.87 0.00 2.238 + 159 gctagctagctgatcgatcgta 559 22 0 50.00 60.238 34.38 3.07 46.11 2.238 + 160 tgatcgatcgatgctagctagg 400 22 0 50.00 60.239 26.44 6.29 35.21 2.239 + 161 gctgactgatcgatcgatgct 113 21 0 52.38 61.244 26.44 12.40 35.21 2.244 + 162 agctgactgatcgatcgatgc 112 21 0 52.38 61.244 24.08 19.43 35.21 2.244 + 163 gatcgatcgatgtgcggct 81 19 0 57.89 61.263 19.16 0.00 41.65 2.263 + 164 gctgatcatcgatgctactagc 195 22 0 50.00 59.727 18.08 16.44 45.61 2.273 + 165 gctagctgatcatcgatgctac 191 22 0 50.00 59.727 9.57 5.47 0.00 2.273 + 166 gatcgatcgatgtgcggc 81 18 0 61.11 59.714 18.10 0.95 41.65 2.286 + 167 ctagctagctgactgatacgc 465 21 0 52.38 58.703 14.90 0.00 0.00 2.297 + 168 tagctgatcgatcgatgtgcg 76 21 0 52.38 61.299 31.92 20.26 42.69 2.299 + 169 agctgatcgatcgatgtgc 77 19 0 52.63 58.698 31.83 30.04 35.21 2.302 + 170 gctgatcatcatcgatgctagc 516 22 0 50.00 60.302 10.80 10.34 40.32 2.302 + 171 gctagctgatcatcatcgatgc 512 22 0 50.00 60.302 21.42 7.40 40.32 2.302 + 172 aagcatcggattagctagctga 2 22 0 45.45 60.306 28.29 20.88 0.00 2.306 + 173 gatcgatcgtagcggcga 570 18 0 61.11 60.318 13.01 8.51 45.59 2.318 + 174 atcggattagctagctgatgc 6 21 0 47.62 58.673 17.46 17.46 40.05 2.327 + 175 gcatcggattagctagctgat 4 21 0 47.62 58.673 17.84 15.13 0.00 2.327 + 176 gcggcgatctagctagctg 581 19 0 63.16 61.329 17.07 8.17 38.05 2.329 + 177 tgctagtgatgcatgctagt 24 20 0 45.00 57.636 24.96 11.17 35.89 2.364 + 178 ctactatcatctctgcgcga 357 20 0 50.00 57.636 2.71 2.71 0.00 2.364 + 179 actagctagctgactgatacgc 464 22 0 50.00 60.368 21.52 0.00 0.00 2.368 + 180 gctagctagctgatcatcga 187 20 0 50.00 57.613 34.38 0.24 46.11 2.387 + 181 tctctgcgcgatcgatgcta 366 20 0 55.00 62.413 26.61 17.10 38.48 2.413 + 182 tgatcgatcgatgctagctagt 119 22 0 45.45 59.586 26.44 5.69 35.21 2.414 + 183 actgatcgatcgatgctagcta 117 22 0 45.45 59.586 23.29 7.65 35.21 2.414 + 184 tagctagctgatcgatcgatgt 72 22 0 45.45 59.586 14.29 2.62 35.21 2.414 + 185 agctaggcgatgctagcta 415 19 0 52.63 58.572 17.69 3.08 41.54 2.428 + 186 tagctaggcgatgctagct 414 19 0 52.63 58.572 17.35 17.35 43.53 2.428 + 187 gatcgatcgatgctagctagg 401 21 0 52.38 58.567 23.89 6.29 35.21 2.433 + 188 gctagctagctgactgatcgat 105 22 0 50.00 60.434 34.38 0.00 46.11 2.434 + 189 gatcgatgctagctaggcg 405 19 0 57.89 58.563 15.59 9.02 0.00 2.437 + 190 cgatcgatgctagctaggc 404 19 0 57.89 58.563 14.87 8.45 0.00 2.437 + 191 tagctagctgactgatacgc 466 20 0 50.00 57.549 28.29 0.00 0.00 2.451 + 192 agctagctgactgatcgatc 260 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 193 agctagctgactgatcgatc 108 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 194 aaagcatcggattagctagctg 1 22 0 45.45 59.524 28.29 10.80 0.00 2.476 + 195 gctgactgatcgatcatcatgc 265 22 0 50.00 60.493 25.66 25.12 41.77 2.493 + 196 tagctactatcatctctgcgcg 354 22 0 50.00 60.495 0.00 0.00 0.00 2.495 + 197 ctgatcgatcgatgtgcggc 79 20 0 60.00 62.497 15.54 4.15 41.65 2.497 + 198 gctgatcgatcgatgtgcgg 78 20 0 60.00 62.497 29.87 22.23 41.65 2.497 + 199 tcgtagcggcgatctagct 576 19 0 57.89 61.503 11.03 11.03 36.40 2.503 + 200 agcggcgatctagctagct 580 19 0 57.89 61.519 23.74 23.74 42.96 2.519 + 201 ctagctagctgatcatcgatgc 188 22 0 50.00 59.470 21.42 9.22 0.00 2.530 + 202 gctagctagctgatcatcgatg 187 22 0 50.00 59.470 34.38 20.23 46.11 2.530 + 203 tcatctctgcgcgatcga 363 18 0 55.56 59.468 22.07 0.00 38.48 2.532 + 204 tcgatcgatgtgcggcta 83 18 0 55.56 59.465 18.63 0.00 41.65 2.535 + 205 tgatcgatcgatgtgcggc 80 19 0 57.89 61.549 21.27 8.44 41.65 2.549 + 206 ctagctaggcgatgctagctag 413 22 0 54.55 60.561 22.99 22.99 46.84 2.561 + 207 gctagctagctgatcgatcgat 390 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 208 gctagctagctgatcgatcgat 70 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 209 ctgcgcgatcgatgctag 369 18 0 61.11 59.415 19.79 13.97 38.48 2.585 + 210 aagcatcggattagctagct 2 20 0 45.00 57.413 23.74 23.74 0.00 2.587 + 211 gctagctgatcatcgatgcta 191 21 0 47.62 58.410 16.61 13.09 0.00 2.590 + 212 tagctagctgatcatcgatgc 189 21 0 47.62 58.410 21.42 9.22 0.00 2.590 + 213 actgatacgcgatgctagc 476 19 0 52.63 58.407 8.61 8.61 0.00 2.593 + 214 gctagctgactgatcgatcatc 261 22 0 50.00 59.406 23.93 21.92 36.62 2.594 + 215 atcgatcgatgctagctagg 402 20 0 50.00 57.396 29.65 6.29 33.56 2.604 + 216 atctctgcgcgatcgatgc 365 19 0 57.89 61.618 22.01 22.01 38.48 2.618 + 217 tgatcgatcgtagcggcg 569 18 0 61.11 60.621 20.58 0.86 0.00 2.621 + 218 atcatctctgcgcgatcgatg 362 21 0 52.38 61.633 18.01 18.01 38.48 2.633 + 219 agctagctgatcgatcgtag 562 20 0 50.00 57.344 17.99 16.86 0.00 2.656 + 220 ctagctagctgatcgatcgt 560 20 0 50.00 57.344 16.40 2.65 0.00 2.656 + 221 gctagctgactgatcgatcat 261 21 0 47.62 58.339 26.67 18.02 36.62 2.661 + 222 ctgatcgatcgtagcggcg 568 19 0 63.16 61.664 14.21 0.86 0.00 2.664 + 223 ctgactgatacgcgatgct 473 19 0 52.63 58.330 2.33 0.00 0.00 2.670 + 224 agctgactgatacgcgatg 471 19 0 52.63 58.330 0.00 0.00 0.00 2.670 + 225 gctagctgatcgatcgtagcg 563 21 0 57.14 61.676 24.18 16.49 0.00 2.676 + 226 ctagctgactgatcgatcga 110 20 0 50.00 57.276 22.52 22.52 0.00 2.724 + 227 agctagctactgatcgatgcta 303 22 0 45.45 59.252 17.56 12.23 0.00 2.748 + 228 tagctagctactgatcgatgct 302 22 0 45.45 59.252 27.80 11.51 0.00 2.748 + 229 gactgatacgcgatgctagcta 475 22 0 50.00 60.751 17.69 3.08 0.00 2.751 + 230 actgatacgcgatgctagctag 476 22 0 50.00 60.752 17.46 17.46 0.00 2.752 + 231 gactgatcgatcgatgctagct 116 22 0 50.00 60.753 18.04 9.56 35.21 2.753 + 232 gctagctgactgatcgatcgat 109 22 0 50.00 60.753 30.53 30.53 37.90 2.753 + 233 tgcgcgatcgatgctagcta 370 20 0 55.00 62.756 26.61 9.85 38.48 2.756 + 234 gcggcgatctagctagctga 581 20 0 60.00 62.765 21.57 16.66 38.70 2.765 + 235 agcggcgatctagctagctg 580 20 0 60.00 62.771 17.07 8.17 44.87 2.771 + 236 ctactatcatctctgcgcgatc 357 22 0 50.00 59.220 4.99 0.00 0.00 2.780 + 237 tatcatctctgcgcgatcg 361 19 0 52.63 58.199 12.19 12.19 39.07 2.801 + 238 tactatcatctctgcgcgatcg 358 22 0 50.00 60.811 12.19 12.19 39.07 2.811 + 239 tagctagctgactgatcgatca 259 22 0 45.45 59.187 28.29 26.99 35.44 2.813 + 240 gctgatcgatcgatgctagcta 398 22 0 50.00 60.816 27.88 12.57 35.21 2.816 + 241 tagctgatcgatcgatgctagc 396 22 0 50.00 60.816 30.84 27.90 36.80 2.816 + 242 gctagctgatcgatcgatgcta 394 22 0 50.00 60.816 34.11 32.56 36.80 2.816 + 243 tagctagctgatcgatcgatgc 392 22 0 50.00 60.816 24.08 21.09 35.21 2.816 + 244 gctaggcgatgctagctag 416 19 0 57.89 58.179 17.46 17.46 35.42 2.821 + 245 ctagctaggcgatgctagc 413 19 0 57.89 58.179 18.68 9.44 36.95 2.821 + 246 gctagctaggcgatgctag 412 19 0 57.89 58.179 23.16 23.16 38.59 2.821 + 247 catctctgcgcgatcgatgc 364 20 0 60.00 62.823 22.01 22.01 38.48 2.823 + 248 aaagcatcggattagctagct 1 21 0 42.86 58.168 23.74 23.74 0.00 2.832 + 249 ctgactgatcgatcgatgctag 114 22 0 50.00 59.155 22.81 19.44 35.21 2.845 + 250 ctagctgactgatcgatcgatg 110 22 0 50.00 59.155 23.05 13.21 35.21 2.845 + 251 tactatcatctctgcgcgatc 358 21 0 47.62 58.155 4.99 0.00 0.00 2.845 + 252 gctagctactgatcgatgctac 304 22 0 50.00 59.151 8.57 4.26 0.00 2.849 + 253 ctactatcatctctgcgcgat 357 21 0 47.62 58.150 4.99 2.52 0.00 2.850 + 254 agctgatcatcgatgctact 194 20 0 45.00 57.134 17.14 8.95 0.00 2.866 + 255 gctagctagctgatcatcgat 187 21 0 47.62 58.132 34.38 0.00 46.11 2.868 + 256 ctgatacgcgatgctagct 477 19 0 52.63 58.107 17.69 1.35 0.00 2.893 + 257 ggcgatctagctagctgac 583 19 0 57.89 58.106 14.84 7.25 37.58 2.894 + 258 tgactgatcgatcgatgctag 115 21 0 47.62 58.084 22.81 19.44 35.21 2.916 + 259 ctgactgatcgatcgatgcta 114 21 0 47.62 58.084 26.44 14.64 35.21 2.916 + 260 tagctgactgatcgatcgatg 111 21 0 47.62 58.084 23.05 13.21 35.21 2.916 + 261 actgatcgatcatcatgctagc 269 22 0 45.45 59.071 26.67 8.61 41.77 2.929 + 262 agctgactgatcgatcatca 264 20 0 45.00 57.064 26.49 26.49 39.98 2.936 + 263 ctagctagctgatcgatcga 391 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 264 ctagctagctgatcgatcga 71 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 265 gatcgatcgatgtgcggctag 81 21 0 57.14 61.947 19.16 0.00 41.65 2.947 + 266 tgctagctaggcgatgct 411 18 0 55.56 59.050 17.69 7.53 0.00 2.950 + 267 gctgatcgatcgtagcggc 567 19 0 63.16 61.960 20.49 19.38 0.00 2.960 + 268 cgatcgatgtgcggctag 84 18 0 61.11 59.032 10.82 0.00 41.65 2.968 + 269 tgatcgatcgatgtgcggct 80 20 0 55.00 62.987 22.21 0.00 41.65 2.987 + 270 ctgactgatcgatcatcatgct 266 22 0 45.45 59.004 20.99 6.82 41.77 2.996 + 271 agctgactgatcgatcatcatg 264 22 0 45.45 59.004 22.70 19.51 41.77 2.996 + 272 agctagctgactgatacgcga 467 21 0 52.38 62.000 17.99 0.00 0.00 3.000 + 273 tgactgatcgatcgatgctagc 115 22 0 50.00 61.008 18.17 12.52 35.21 3.008 + 274 gctgactgatcgatcgatgcta 113 22 0 50.00 61.008 26.44 14.64 35.21 3.008 + 275 tagctgactgatcgatcgatgc 111 22 0 50.00 61.008 24.08 19.43 35.21 3.008 + 276 agctagctgatcgatcgatgtg 73 22 0 50.00 61.010 17.99 6.93 35.21 3.010 + 277 ctgatcgatcgatgctagctag 399 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 278 ctagctgatcgatcgatgctag 395 22 0 50.00 58.963 37.86 37.86 43.17 3.037 + 279 ctagctagctgatcgatcgatg 391 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 280 ctgatcgatcgatgctagctag 118 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 281 ctagctagctgatcgatcgatg 71 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 282 gactgatcgatcatcatgctagc 268 23 0 47.83 60.053 24.51 9.03 41.77 3.053 + 283 gctagtgatgcatgctagtagtg 25 23 0 47.83 59.929 24.96 10.54 0.00 3.071 + 284 gctactatcatctctgcgcgat 356 22 0 50.00 61.073 4.99 2.52 0.00 3.073 + 285 gtagcggcgatctagctag 578 19 0 57.89 57.903 15.64 15.64 37.58 3.097 + 286 tgactgatcgatcatcatgct 267 21 0 42.86 57.900 26.79 12.28 41.77 3.100 + 287 ctagctactatcatctctgcgc 353 22 0 50.00 58.892 0.00 0.00 0.00 3.108 + 288 gctagctactatcatctctgcg 352 22 0 50.00 58.892 8.21 0.00 0.00 3.108 + 289 ctagctagctactgatcgatgc 301 22 0 50.00 58.892 14.00 1.76 0.00 3.108 + 290 gctagctagctactgatcgatg 300 22 0 50.00 58.892 34.38 7.78 46.11 3.108 + 291 catcgatcgatgctagtatgct 325 22 0 45.45 58.885 37.80 10.02 44.93 3.115 + 292 tgatcgatcgatgctagctag 400 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 293 ctgatcgatcgatgctagcta 399 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 294 tagctgatcgatcgatgctag 396 21 0 47.62 57.879 34.03 27.12 36.80 3.121 + 295 ctagctgatcgatcgatgcta 395 21 0 47.62 57.879 34.11 32.56 36.80 3.121 + 296 tagctagctgatcgatcgatg 392 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 297 tgatcgatcgatgctagctag 119 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 298 ctgatcgatcgatgctagcta 118 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 299 tagctagctgatcgatcgatg 72 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 300 gatcgatcgatgctagctagt 120 21 0 47.62 57.878 23.89 3.56 35.21 3.122 + 301 ctatcatctctgcgcgatcgat 360 22 0 50.00 61.132 22.07 11.47 38.48 3.132 + 302 tgatcgatcgtagcggcga 569 19 0 57.89 62.144 20.58 8.51 45.59 3.144 + 303 tcgtagcggcgatctagctag 576 21 0 57.14 62.173 15.64 15.64 36.40 3.173 + 304 tactagctagctgactgatacgc 463 23 0 47.83 60.176 13.17 0.00 0.00 3.176 + 305 ctgatcatcatcgatgctagct 517 22 0 45.45 58.807 17.69 1.76 40.32 3.193 + 306 agctgatcatcatcgatgctag 515 22 0 45.45 58.807 5.93 2.76 40.32 3.193 + 307 ctagctgatcatcatcgatgct 513 22 0 45.45 58.807 14.14 8.34 40.32 3.193 + 308 agctagctgatcatcatcgatg 511 22 0 45.45 58.807 20.23 20.23 41.48 3.193 + 309 ctgatcgatcatcatgctagct 270 22 0 45.45 58.807 26.67 0.00 41.77 3.193 + 310 ctagctgactgatcgatcgat 110 21 0 47.62 57.806 30.53 30.53 37.90 3.194 + 311 ttagctagctgactgatcgatca 258 23 0 43.48 59.798 28.29 26.99 35.44 3.202 + 312 tagctactatcatctctgcgc 354 21 0 47.62 57.798 0.00 0.00 0.00 3.202 + 313 gctagctactgatcgatgcta 304 21 0 47.62 57.798 12.99 12.23 0.00 3.202 + 314 tagctagctactgatcgatgc 302 21 0 47.62 57.798 27.80 1.76 0.00 3.202 + 315 tctctgcgcgatcgatgc 366 18 0 61.11 61.229 22.01 22.01 38.48 3.229 + 316 ctctgcgcgatcgatgct 367 18 0 61.11 61.232 26.61 0.00 38.48 3.232 + 317 agctagctactatcatctctgcg 351 23 0 47.83 60.238 17.56 0.00 0.00 3.238 + 318 ctagctagctactgatcgatgct 301 23 0 47.83 60.238 14.00 11.51 0.00 3.238 + 319 ctgatcgatcgtagcggc 568 18 0 61.11 58.727 14.21 0.00 0.00 3.273 + 320 gctgatcgatcgtagcgg 567 18 0 61.11 58.727 20.49 15.03 0.00 3.273 + 321 agctaggcgatgctagct 415 18 0 55.56 58.725 17.69 13.00 39.84 3.275 + 322 tgctagtgatgcatgctagtagt 24 23 0 43.48 60.302 24.96 12.98 35.89 3.302 + 323 gcgcgatcgatgctagct 371 18 0 61.11 61.306 21.66 1.35 38.48 3.306 + 324 tgatcatcatcgatgctagct 518 21 0 42.86 57.691 17.69 1.76 40.32 3.309 + 325 agctgatcatcatcgatgcta 515 21 0 42.86 57.691 0.24 0.00 40.32 3.309 + 326 tagctgatcatcatcgatgct 514 21 0 42.86 57.691 14.14 8.34 40.32 3.309 + 327 tgatcgatcatcatgctagct 271 21 0 42.86 57.691 27.48 0.00 37.38 3.309 + 328 ctagctagctgactgatacgcg 465 22 0 54.55 61.313 14.90 3.89 0.00 3.313 + 329 tgctagtgatgcatgctagtag 24 22 0 45.45 58.673 24.96 19.76 35.89 3.327 + 330 gctagtgatgcatgctagtagt 25 22 0 45.45 58.672 24.96 12.98 0.00 3.328 + 331 tagctagctgatcatcgatgcta 189 23 0 43.48 59.671 17.82 15.89 0.00 3.329 + 332 agctagctgactgatacgc 467 19 0 52.63 57.642 17.99 0.00 0.00 3.358 + 333 tatcatctctgcgcgatcgatg 361 22 0 50.00 61.383 18.01 18.01 38.48 3.383 + 334 agctgactgatcgatcatcat 264 21 0 42.86 57.616 26.31 18.90 41.77 3.384 + 335 actagctagctgatcatcatcga 508 23 0 43.48 59.607 22.43 0.00 0.00 3.393 + 336 tagctagctgactgatcgatcat 259 23 0 43.48 59.607 28.29 18.02 36.62 3.393 + 337 gatgctagctaggcgatgctag 409 22 0 54.55 61.393 23.16 23.16 38.59 3.393 + 338 cggcgatctagctagctgact 582 21 0 57.14 62.394 17.44 7.44 38.70 3.394 + 339 ctagctagctgatcgatcgat 391 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 340 ctagctagctgatcgatcgat 71 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 341 actgatcgatcatcatgctagct 269 23 0 43.48 60.428 26.67 4.70 41.77 3.428 + 342 ctagctagctgactgatcgatc 106 22 0 50.00 58.567 19.32 19.32 0.00 3.433 + 343 ctgactgatcgatcatcatgc 266 21 0 47.62 57.562 20.99 12.19 41.77 3.438 + 344 gctgactgatcgatcatcatg 265 21 0 47.62 57.562 22.70 19.51 41.77 3.438 + 345 gatcgatcgatgctagctaggc 401 22 0 54.55 61.448 23.89 8.45 35.21 3.448 + 346 gtgatgcatgctagtagtgatgt 29 23 0 43.48 59.551 11.60 0.00 0.00 3.449 + 347 tgctagtgatgcatgctagta 24 21 0 42.86 57.546 24.96 21.25 35.89 3.454 + 348 tagcggcgatctagctagctg 579 21 0 57.14 62.457 18.98 9.30 45.57 3.457 + 349 gtagcggcgatctagctagct 578 21 0 57.14 62.458 23.74 23.74 46.60 3.458 + 350 tagctgatcgatcgtagcg 565 19 0 52.63 57.539 25.02 11.96 0.00 3.461 + 351 gctagctagctactgatcgat 300 21 0 47.62 57.517 34.38 0.00 46.11 3.483 + 352 agctagctactgatcgatgctac 303 23 0 47.83 60.487 17.56 7.81 0.00 3.487 + 353 atcgatcgatgctagtatgct 326 21 0 42.86 57.502 29.65 2.17 33.56 3.498 + 354 agctactgatcgatgctacatc 307 22 0 45.45 58.484 7.41 0.00 37.97 3.516 + 355 agtgatgcatgctagtagtga 28 21 0 42.86 57.471 0.00 0.00 0.00 3.529 + 356 gactgatcgatcgatgctagcta 116 23 0 47.83 60.546 18.04 4.19 35.21 3.546 + 357 ctgatcgatcgatgctagctagt 118 23 0 47.83 60.547 22.18 3.56 35.21 3.547 + 358 actgatcgatcgatgctagctag 117 23 0 47.83 60.547 23.29 17.46 35.21 3.547 + 359 ctagctagctgatcgatcgatgt 71 23 0 47.83 60.547 14.29 2.62 35.21 3.547 + 360 catcgatcgatgctagtatgc 325 21 0 47.62 57.452 37.80 0.00 44.93 3.548 + 361 tagctagctgactgatcgatc 259 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 362 tagctagctgactgatcgatc 107 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 363 ctagctagctgactgatcgat 106 21 0 47.62 57.445 14.90 0.00 0.00 3.555 + 364 tcgatgctagctaggcga 407 18 0 55.56 58.427 15.59 13.52 0.00 3.573 + 365 tgatcgatcgatgctagctagta 119 23 0 43.48 59.424 26.44 18.77 35.21 3.576 + 366 ctgcgcgatcgatgctagc 369 19 0 63.16 62.586 20.26 12.12 38.48 3.586 + 367 agctagctgatcatcatcgat 511 21 0 42.86 57.405 17.99 0.00 0.00 3.595 + 368 tgcgcgatcgatgctagc 370 18 0 61.11 61.605 26.61 17.77 38.48 3.605 + 369 ctagctagctgatcgatcgtag 560 22 0 50.00 58.387 16.86 16.86 0.00 3.613 + 370 actagctagctgactgatacg 464 21 0 47.62 57.384 21.52 2.77 0.00 3.616 + 371 ctagctgactgatacgcga 469 19 0 52.63 57.370 16.29 0.00 0.00 3.630 + 372 gctactagctagctgactgat 461 21 0 47.62 57.360 15.96 3.00 44.92 3.640 + 373 ctgatcatcatcgatgctagc 517 21 0 47.62 57.358 8.61 8.61 40.32 3.642 + 374 gctgatcatcatcgatgctag 516 21 0 47.62 57.358 5.93 2.76 40.32 3.642 + 375 ctagctgatcatcatcgatgc 513 21 0 47.62 57.358 21.42 7.40 40.32 3.642 + 376 gctagctgatcatcatcgatg 512 21 0 47.62 57.358 20.23 20.23 41.48 3.642 + 377 ctgatcgatcatcatgctagc 270 21 0 47.62 57.358 26.67 8.61 41.77 3.642 + 378 agctactgatcgatgctacat 307 21 0 42.86 57.344 7.41 0.00 0.00 3.656 + 379 tgatcgatcgatgtgcggcta 80 21 0 52.38 62.663 22.21 0.24 41.65 3.663 + 380 atctctgcgcgatcgatg 365 18 0 55.56 58.327 12.03 4.19 38.48 3.673 + 381 catctctgcgcgatcgat 364 18 0 55.56 58.327 22.07 1.26 38.48 3.673 + 382 atcatctctgcgcgatcg 362 18 0 55.56 58.327 12.19 12.19 39.07 3.673 + 383 aagcatcggattagctagctgat 2 23 0 43.48 60.682 17.84 15.13 0.00 3.682 + 384 agtgatgcatgctagtagtgatg 28 23 0 43.48 59.299 7.49 7.49 0.00 3.701 + 385 gatcgatgctagctaggcgatg 405 22 0 54.55 61.702 24.26 6.24 0.00 3.702 + 386 atctctgcgcgatcgatgcta 365 21 0 52.38 62.723 26.61 17.10 38.48 3.723 + 387 tagctagctgactgatacgcga 466 22 0 50.00 61.730 28.29 0.00 0.00 3.730 + 388 tagctagctgatcgatcgtag 561 21 0 47.62 57.269 16.86 16.86 0.00 3.731 + 389 ctagctagctgatcgatcgta 560 21 0 47.62 57.269 11.68 3.07 0.00 3.731 + 390 tcgatcgatgctagctagtag 122 21 0 47.62 57.269 18.63 2.63 0.00 3.731 + 391 gctagctactgatcgatgctaca 304 23 0 47.83 60.734 11.21 0.06 0.00 3.734 + 392 agctagctgactgatcgatcatc 260 23 0 47.83 60.736 23.93 21.92 36.62 3.736 + 393 agctagctgactgatcgatcga 108 22 0 50.00 61.737 22.52 22.52 0.00 3.737 + 394 tctctgcgcgatcgatgct 366 19 0 57.89 62.740 26.61 0.00 38.48 3.740 + 395 tgatgcatgctagtagtgatgt 30 22 0 40.91 58.256 11.60 0.00 0.00 3.744 + 396 tgatcgatcgatgtgcgg 80 18 0 55.56 58.244 21.27 0.00 41.65 3.756 + 397 cgatcgatgctagctaggcga 404 21 0 57.14 62.770 16.30 16.30 0.00 3.770 + 398 tcgatcgatgctagctaggcg 403 21 0 57.14 62.770 18.63 11.67 0.00 3.770 + 399 atcgatcgatgcatgcatg 443 19 0 47.37 57.226 29.65 23.31 37.30 3.774 + 400 catcgatcgatgcatgcat 442 19 0 47.37 57.226 37.80 33.45 44.93 3.774 + 401 actagctagctgatcatcatcg 508 22 0 45.45 58.219 22.43 3.40 0.00 3.781 + 402 ctgatcatcgatgctactagct 196 22 0 45.45 58.219 10.86 0.00 45.92 3.781 + 403 agctgatcatcgatgctactag 194 22 0 45.45 58.219 13.67 9.68 0.00 3.781 + 404 ctagctgatcatcgatgctact 192 22 0 45.45 58.219 14.85 7.80 0.00 3.781 + 405 tttagctagctgactgatcga 257 21 0 42.86 57.216 0.38 0.00 0.00 3.784 + 406 tagctagctgatcgatcgatgtg 72 23 0 47.83 60.793 10.14 4.94 35.21 3.793 + 407 gctagctagctgatcatcatct 146 22 0 45.45 58.203 34.38 0.00 46.11 3.797 + 408 ctagctagctgatcatcgatgct 188 23 0 47.83 60.799 16.29 15.30 0.00 3.799 + 409 agctagctactatcatcgatcga 429 23 0 43.48 59.170 22.52 22.52 0.00 3.830 + 410 ttagctagctgactgatcgatc 258 22 0 45.45 58.159 28.29 19.32 0.00 3.841 + 411 ctagctgactgatcgatcatca 262 22 0 45.45 58.155 26.49 26.49 39.98 3.845 + 412 aaagcatcggattagctagctga 1 23 0 43.48 60.870 28.29 20.88 0.00 3.870 + 413 agctgactgatacgcgatgct 471 21 0 52.38 62.876 7.57 2.13 0.00 3.876 + 414 tagctagctactgatcgatgcta 302 23 0 43.48 59.102 27.80 12.23 0.00 3.898 + 415 tcatcatcgatgctagctagt 521 21 0 42.86 57.067 22.18 3.56 40.32 3.933 + 416 tcgatcatcatgctagctact 274 21 0 42.86 57.067 0.00 0.00 0.00 3.933 + 417 tgatcatcgatgctactagct 197 21 0 42.86 57.067 17.14 0.00 45.92 3.933 + 418 agctgatcatcgatgctacta 194 21 0 42.86 57.067 17.14 4.89 0.00 3.933 + 419 tagctgatcatcgatgctact 193 21 0 42.86 57.067 14.85 7.80 0.00 3.933 + 420 tcgatcgatgctagtatgctag 327 22 0 45.45 58.044 18.63 13.77 46.09 3.956 + 421 gcgatctagctagctgact 584 19 0 52.63 57.034 17.44 7.44 0.00 3.966 + 422 gctactgatcgatgctacatc 308 21 0 47.62 57.028 2.44 0.00 37.97 3.972 + 423 cggcgatctagctagctg 582 18 0 61.11 58.018 17.07 8.17 37.58 3.982 + 424 gctagctgactgatcgatcatca 261 23 0 47.83 60.983 26.49 26.49 39.98 3.983 + 425 actatcatctctgcgcgat 359 19 0 47.37 57.015 4.99 2.52 0.00 3.985 + 426 catcggattagctagctgatg 5 21 0 47.62 57.003 23.69 23.29 0.00 3.997 + 427 tagctgactgatcgatcatca 263 21 0 42.86 57.000 26.49 26.49 39.98 4.000 + 428 actagctagctgatcatcatcgat 508 24 0 41.67 59.995 22.43 0.00 0.00 4.005 + 429 agtgatgcatgctagtagtgat 28 22 0 40.91 57.984 0.00 0.00 0.00 4.016 + 430 ctagctagctgatcatcatcga 509 22 0 45.45 57.958 11.68 0.00 0.00 4.042 + 431 gctgatcatcgatgctactagct 195 23 0 47.83 61.046 20.91 5.24 45.92 4.046 + 432 agctgatcatcgatgctactagc 194 23 0 47.83 61.046 20.78 20.78 45.61 4.046 + 433 gctagctgatcatcgatgctact 191 23 0 47.83 61.046 12.59 8.92 0.00 4.046 + 434 agctagctgatcatcgatgctac 190 23 0 47.83 61.046 17.99 7.99 0.00 4.046 + 435 tagctagctactatcatctctgcg 350 24 0 45.83 60.058 27.80 0.00 0.00 4.058 + 436 ctagctagctactgatcgatgcta 301 24 0 45.83 60.058 14.00 12.23 0.00 4.058 + 437 agctactatcatctctgcgcga 355 22 0 50.00 62.058 2.71 2.71 0.00 4.058 + 438 gctatttagctagctgactgatcg 253 24 0 45.83 60.060 7.27 0.00 46.11 4.060 + 439 tgatcgatcatcatgctagctac 271 23 0 43.48 58.931 27.48 0.00 37.38 4.069 + 440 gtgatgcatgctagtagtgatg 29 22 0 45.45 57.921 7.49 7.49 0.00 4.079 + 441 ctagctagctgactgatcgatcg 106 23 0 52.17 61.091 16.84 13.89 0.00 4.091 + 442 ctagctactgatcgatgctaca 305 22 0 45.45 57.898 13.79 1.61 0.00 4.102 + 443 cggcgatctagctagctgacta 582 22 0 54.55 62.109 17.44 5.40 38.70 4.109 + 444 atgctagctaggcgatgc 410 18 0 55.56 57.890 10.59 0.00 0.00 4.110 + 445 ctgatcgatcatcatgctagctac 270 24 0 45.83 59.882 26.67 0.00 41.77 4.118 + 446 gctactagctagctgatcatca 505 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 447 gctactagctagctgatcatca 208 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 448 ctgactgatacgcgatgctagc 473 22 0 54.55 62.128 8.61 8.61 0.00 4.128 + 449 gctgactgatacgcgatgctag 472 22 0 54.55 62.128 1.70 0.00 0.00 4.128 + 450 ctagctgactgatacgcgatgc 469 22 0 54.55 62.128 3.47 0.00 0.00 4.128 + 451 gctagctgactgatacgcgatg 468 22 0 54.55 62.128 8.21 0.00 0.00 4.128 + 452 tgactgatcgatcatcatgctag 267 23 0 43.48 58.866 26.79 18.40 41.77 4.134 + 453 ctgactgatcgatcatcatgcta 266 23 0 43.48 58.866 20.99 8.89 41.77 4.134 + 454 tagctgactgatcgatcatcatg 263 23 0 43.48 58.866 22.70 19.51 41.77 4.134 + 455 ctagctagctgatcgatcgtagc 560 23 0 52.17 61.151 26.87 26.87 0.00 4.151 + 456 gctagctagctgatcgatcgtag 559 23 0 52.17 61.151 34.38 16.86 46.11 4.151 + 457 ctgatcgatcgatgctagctagg 399 23 0 52.17 61.158 22.67 6.29 35.21 4.158 + 458 gatcgatcgatgctagctagtag 120 23 0 47.83 58.829 23.89 2.63 35.21 4.171 + 459 ttagctagctgactgatcgatcat 258 24 0 41.67 60.177 28.29 18.02 36.62 4.177 + 460 ctgactgatcgatcatcatgctag 266 24 0 45.83 59.822 20.99 12.80 41.77 4.178 + 461 ctagctgactgatcgatcatcatg 262 24 0 45.83 59.822 22.70 19.51 41.77 4.178 + 462 ctagctgatcgatcgatgtgcg 75 22 0 54.55 62.180 31.92 20.85 42.69 4.180 + 463 tttagctagctgactgatcgatc 257 23 0 43.48 58.807 19.32 19.32 0.00 4.193 + 464 tgactgatcgatcatcatgcta 267 22 0 40.91 57.803 26.79 13.11 41.77 4.197 + 465 gctagctactatcatcgatcga 430 22 0 45.45 57.783 22.52 22.52 0.00 4.217 + 466 gatcgatcgatgctagctagta 120 22 0 45.45 57.783 23.89 18.77 35.21 4.217 + 467 agctagctactatcatcgatcg 429 22 0 45.45 57.777 17.56 9.87 0.00 4.223 + 468 atcgatcgatgctagctagtag 121 22 0 45.45 57.777 29.65 2.63 33.56 4.223 + 469 tgatcatcatcgatgctagctagt 518 24 0 41.67 60.238 22.18 3.56 40.32 4.238 + 470 tgatcgatcatcatgctagctact 271 24 0 41.67 60.238 27.48 0.00 37.38 4.238 + 471 actgatcgatcatcatgctagcta 269 24 0 41.67 60.238 26.67 2.76 41.77 4.238 + 472 catcgatcgatgctagtatgcta 325 23 0 43.48 58.753 37.80 6.23 44.93 4.247 + 473 tttagctagctgactgatcgat 257 22 0 40.91 57.736 0.38 0.00 0.00 4.264 + 474 atttagctagctgactgatcga 256 22 0 40.91 57.736 4.16 0.00 0.00 4.264 + 475 cgcgatcgatgctagcta 372 18 0 55.56 57.717 22.07 3.08 38.48 4.283 + 476 catcgatcgatgctagtatgctag 325 24 0 45.83 59.708 37.80 16.01 44.93 4.292 + 477 tagctagctactgatcgatgctac 302 24 0 45.83 60.297 27.80 7.81 0.00 4.297 + 478 agcatcggattagctagctgatg 3 23 0 47.83 61.299 27.81 27.81 33.28 4.299 + 479 agctagctgactgatacgcgat 467 22 0 50.00 62.317 17.99 0.00 0.00 4.317 + 480 tgatcatcatcgatgctagctag 518 23 0 43.48 58.678 17.46 17.46 40.32 4.322 + 481 ctgatcatcatcgatgctagcta 517 23 0 43.48 58.678 17.69 2.41 40.32 4.322 + 482 tagctgatcatcatcgatgctag 514 23 0 43.48 58.678 9.90 2.76 40.32 4.322 + 483 ctagctgatcatcatcgatgcta 513 23 0 43.48 58.678 14.58 9.63 40.32 4.322 + 484 tagctagctgatcatcatcgatg 510 23 0 43.48 58.678 20.23 20.23 41.48 4.322 + 485 ctgatcgatcatcatgctagcta 270 23 0 43.48 58.678 26.67 2.76 41.77 4.322 + 486 gatcatcatcgatgctagctagt 519 23 0 43.48 58.677 22.18 3.56 40.32 4.323 + 487 gatcgatcatcatgctagctact 272 23 0 43.48 58.677 21.11 0.00 0.00 4.323 + 488 gctagctagctgactgatcgatc 105 23 0 52.17 61.341 34.38 19.32 46.11 4.341 + 489 tgatcgatcgatgctagctagtag 119 24 0 45.83 60.356 26.44 2.63 35.21 4.356 + 490 ctgatcgatcgatgctagctagta 118 24 0 45.83 60.356 22.18 18.77 35.21 4.356 + 491 ctgatcatcatcgatgctagctag 517 24 0 45.83 59.644 17.46 17.46 40.32 4.356 + 492 ctagctgatcatcatcgatgctag 513 24 0 45.83 59.644 19.54 18.30 42.07 4.356 + 493 ctagctagctgatcatcatcgatg 509 24 0 45.83 59.644 20.23 20.23 41.48 4.356 + 494 tttagctagctgactgatcgatca 257 24 0 41.67 60.358 26.99 26.99 35.44 4.358 + 495 actatcatctctgcgcgatcga 359 22 0 50.00 62.365 22.07 1.72 38.48 4.365 + 496 agctgatcgatcgtagcg 566 18 0 55.56 57.634 25.02 11.96 0.00 4.366 + 497 gctactagctagctgactgatac 461 23 0 47.83 58.626 15.96 1.42 44.92 4.374 + 498 agctgatcgatcgatgctagct 397 22 0 50.00 62.388 30.32 30.32 38.42 4.388 + 499 agctagctgatcgatcgatgct 393 22 0 50.00 62.388 33.87 33.38 38.16 4.388 + 500 ctagctgactgatcgatcatcat 262 23 0 43.48 58.612 26.31 20.43 41.77 4.388 + 501 agctagctactatcatctctgc 351 22 0 45.45 57.608 17.56 0.00 0.00 4.392 + 502 ctagctactatcatctctgcgcg 353 23 0 52.17 61.393 0.00 0.00 0.00 4.393 + 503 tgatcatcatcgatgctagcta 518 22 0 40.91 57.602 17.69 3.08 40.32 4.398 + 504 tagctgatcatcatcgatgcta 514 22 0 40.91 57.602 15.95 9.16 40.32 4.398 + 505 tgatcgatcatcatgctagcta 271 22 0 40.91 57.602 27.48 3.08 37.38 4.398 + 506 atcatcatcgatgctagctagt 520 22 0 40.91 57.595 22.18 3.56 40.32 4.405 + 507 atcgatcatcatgctagctact 273 22 0 40.91 57.595 0.00 0.00 0.00 4.405 + 508 agctagctactatcatcgatcgat 429 24 0 41.67 59.573 25.37 25.37 35.13 4.427 + 509 gctagctgatcgatcgatgtgc 74 22 0 54.55 62.443 31.83 30.04 35.21 4.443 + 510 tagctgactgatcgatcatcat 263 22 0 40.91 57.531 26.31 20.43 41.77 4.469 + 511 tagctagctgactgatcgatcga 107 23 0 47.83 61.487 28.29 22.52 0.00 4.487 + 512 atcgatcgatgctagtatgctag 326 23 0 43.48 58.501 29.65 13.77 46.09 4.499 + 513 ctagtgatgcatgctagtagtga 26 23 0 43.48 58.483 20.00 1.46 0.00 4.517 + 514 tagctagctgactgatcgatcatc 259 24 0 45.83 60.536 28.29 21.92 36.62 4.536 + 515 tactagctagctgatcatcatcga 507 24 0 41.67 59.449 0.00 0.00 0.00 4.551 + 516 gctagctagctactatcatcga 426 22 0 45.45 57.437 34.38 0.00 46.11 4.563 + 517 tgactgatacgcgatgctagct 474 22 0 50.00 62.569 17.69 1.35 0.00 4.569 + 518 agctgactgatacgcgatgcta 471 22 0 50.00 62.569 7.57 0.00 0.00 4.569 + 519 tagctgactgatacgcgatgct 470 22 0 50.00 62.569 10.87 8.44 0.00 4.569 + 520 atcgatcgatgctagtatgcta 326 22 0 40.91 57.423 29.65 0.00 33.56 4.577 + 521 ctagctagctgatcatcatcgat 509 23 0 43.48 58.422 11.68 0.00 0.00 4.578 + 522 agctgactgatcgatcgatgct 112 22 0 50.00 62.580 26.44 23.13 35.21 4.580 + 523 ctagctagctgatcatcgatgcta 188 24 0 45.83 60.596 16.78 15.81 0.00 4.596 + 524 gtgatgcatgctagtagtgatgta 29 24 0 41.67 59.398 11.60 8.84 0.00 4.602 + 525 gctgatcatcatcgatgctagct 516 23 0 47.83 61.603 20.15 8.14 40.32 4.603 + 526 agctgatcatcatcgatgctagc 515 23 0 47.83 61.603 20.04 19.26 40.32 4.603 + 527 gctagctgatcatcatcgatgct 512 23 0 47.83 61.603 14.14 8.34 40.32 4.603 + 528 agctagctgatcatcatcgatgc 511 23 0 47.83 61.603 21.42 7.40 40.32 4.603 + 529 tagtgatgcatgctagtagtga 27 22 0 40.91 57.391 0.01 0.00 0.00 4.609 + 530 ctactagctagctgactgatacg 462 23 0 47.83 58.387 3.12 0.00 0.00 4.613 + 531 tagctactgatcgatgctacatc 306 23 0 43.48 58.368 13.79 0.00 37.97 4.632 + 532 gactgatacgcgatgctagctag 475 23 0 52.17 61.633 17.46 17.46 0.00 4.633 + 533 ctagctactgatcgatgctacat 305 23 0 43.48 58.364 13.79 0.09 0.00 4.636 + 534 gctagctactatcatctctgcgc 352 23 0 52.17 61.644 8.21 0.00 0.00 4.644 + 535 gctagctagctactgatcgatgc 300 23 0 52.17 61.644 34.38 12.71 46.11 4.644 + 536 gctactagctagctgatcatcat 505 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 537 gctactagctagctgatcatcat 208 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 538 ctagctactgatcgatgctacatc 305 24 0 45.83 59.349 13.79 0.00 37.97 4.651 + 539 gctactagctagctgatcatcatc 505 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 540 gctactagctagctgatcatcatc 208 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 541 gctgatcatcatctagctagtagc 154 24 0 45.83 59.343 15.25 15.25 45.79 4.657 + 542 tagctagctgatcatcatcgat 510 22 0 40.91 57.329 10.14 0.00 0.00 4.671 + 543 ctactatcatctctgcgcgatcg 357 23 0 52.17 61.686 12.19 12.19 39.07 4.686 + 544 tactagctagctgactgatacg 463 22 0 45.45 57.310 13.17 0.00 0.00 4.690 + 545 gctgatcgatcgatgctagctag 398 23 0 52.17 61.697 27.88 18.22 35.21 4.697 + 546 ctagctgatcgatcgatgctagc 395 23 0 52.17 61.697 38.64 35.38 43.05 4.697 + 547 gctagctgatcgatcgatgctag 394 23 0 52.17 61.697 41.07 41.07 46.89 4.697 + 548 ctagctagctgatcgatcgatgc 391 23 0 52.17 61.697 24.08 21.09 35.21 4.697 + 549 gctagctagctgatcgatcgatg 390 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 550 gctagctagctgatcgatcgatg 70 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 551 gctactagctagctgactgata 461 22 0 45.45 57.286 15.96 3.69 44.92 4.714 + 552 gatcgatcatcatgctagctac 272 22 0 45.45 57.284 21.11 0.00 0.00 4.716 + 553 cgatgctagctaggcgat 408 18 0 55.56 57.277 10.81 3.01 0.00 4.723 + 554 atcgatgctagctaggcg 406 18 0 55.56 57.277 15.59 9.02 0.00 4.723 + 555 tagctactgatcgatgctacat 306 22 0 40.91 57.270 13.79 0.09 0.00 4.730 + 556 gctagctactatcatcgatcgat 430 23 0 43.48 58.251 25.37 25.37 35.13 4.749 + 557 tgcatgctagtagtgatgtatacg 33 24 0 41.67 59.224 20.79 0.00 0.00 4.776 + 558 gcatgctagtagtgatgtatacgt 34 24 0 41.67 59.223 11.60 0.00 0.00 4.777 + 559 atttagctagctgactgatcgatc 256 24 0 41.67 59.219 19.32 19.32 0.00 4.781 + 560 gactgatcgatcatcatgctag 268 22 0 45.45 57.215 24.51 15.87 41.77 4.785 + 561 atttagctagctgactgatcgat 256 23 0 39.13 58.215 4.16 0.00 0.00 4.785 + 562 gctgactgatcgatcatcatgct 265 23 0 47.83 61.788 27.72 15.10 41.77 4.788 + 563 agctgactgatcgatcatcatgc 264 23 0 47.83 61.788 27.74 27.74 41.77 4.788 + 564 tagctactatcatctctgcgcga 354 23 0 47.83 61.796 2.71 2.71 0.00 4.796 + 565 gctgatcatcgatgctactagcta 195 24 0 45.83 60.834 20.91 7.37 45.92 4.834 + 566 tagctgatcatcgatgctactagc 193 24 0 45.83 60.834 20.78 20.78 45.61 4.834 + 567 gctagctgatcatcgatgctacta 191 24 0 45.83 60.834 11.65 8.83 0.00 4.834 + 568 tagctagctgatcatcgatgctac 189 24 0 45.83 60.834 17.82 12.06 0.00 4.834 + 569 tagtgatgcatgctagtagtgatg 27 24 0 41.67 59.155 11.56 7.49 0.00 4.845 + 570 agtgatgcatgctagtagtgatgt 28 24 0 41.67 60.846 11.60 0.00 0.00 4.846 + 571 tgatgcatgctagtagtgatgta 30 23 0 39.13 58.147 11.60 8.84 0.00 4.853 + 572 ctgactgatcgatcgatgctagc 114 23 0 52.17 61.878 18.17 12.52 35.21 4.878 + 573 gctgactgatcgatcgatgctag 113 23 0 52.17 61.878 22.81 19.44 35.21 4.878 + 574 ctagctgactgatcgatcgatgc 110 23 0 52.17 61.878 24.08 19.43 35.21 4.878 + 575 gctagctgactgatcgatcgatg 109 23 0 52.17 61.878 23.05 13.21 35.21 4.878 + 576 tcatcatcgatgctagctagtag 521 23 0 43.48 58.114 2.81 0.00 40.32 4.886 + 577 tactagctagctgatcatcatcg 507 23 0 43.48 58.114 0.00 0.00 0.00 4.886 + 578 tcgatcatcatgctagctactag 274 23 0 43.48 58.114 0.00 0.00 37.62 4.886 + 579 tgatcatcgatgctactagctag 197 23 0 43.48 58.114 20.04 20.04 45.92 4.886 + 580 ctgatcatcgatgctactagcta 196 23 0 43.48 58.114 10.86 0.00 45.92 4.886 + 581 tagctgatcatcgatgctactag 193 23 0 43.48 58.114 13.67 9.68 0.00 4.886 + 582 ctagctgatcatcgatgctacta 192 23 0 43.48 58.114 11.65 8.83 0.00 4.886 + 583 ctactagctagctgatcatcatcg 506 24 0 45.83 59.110 1.08 0.00 0.00 4.890 + 584 ctgatcatcgatgctactagctag 196 24 0 45.83 59.110 20.04 20.04 45.92 4.890 + 585 ctagctgatcatcgatgctactag 192 24 0 45.83 59.110 15.68 15.68 0.00 4.890 + 586 gctagctagctgatcatcatctag 146 24 0 45.83 59.102 34.38 13.13 44.71 4.898 + 587 gctagctagctgatcatcatcta 146 23 0 43.48 58.097 34.38 0.00 46.11 4.903 + 588 ctagtgatgcatgctagtagtg 26 22 0 45.45 57.072 20.00 3.96 0.00 4.928 + 589 gctactatcatctctgcgcgatc 356 23 0 52.17 61.936 4.99 0.00 0.00 4.936 + 590 gctgatcgatcgatgtgc 78 18 0 55.56 57.052 29.71 26.38 35.21 4.948 + 591 tagctagctactatcatcgatcga 428 24 0 41.67 59.031 27.80 22.52 0.00 4.969 + 592 agctagctgatcgatcgtagcg 562 22 0 54.55 62.971 27.20 18.31 0.00 4.971 + 593 tgactgatacgcgatgct 474 18 0 50.00 57.028 2.33 0.00 0.00 4.972 + 594 gatcatcatcgatgctagctag 519 22 0 45.45 57.019 17.46 17.46 40.32 4.981 + 595 tcatcatcgatgctagctagta 521 22 0 40.91 57.005 22.18 18.77 40.32 4.995 + 596 tcgatcatcatgctagctacta 274 22 0 40.91 57.005 0.00 0.00 0.00 4.995 + 597 tgatcatcgatgctactagcta 197 22 0 40.91 57.005 17.14 1.01 45.92 4.995 + 598 tagctgatcatcgatgctacta 193 22 0 40.91 57.005 12.62 8.42 0.00 4.995 + 599 tagctagctgactgatacgcgat 466 23 0 47.83 62.044 28.29 0.00 0.00 5.044 + 600 ctagctagctactatcatcgatcga 427 25 0 44.00 59.949 27.80 22.52 0.00 5.051 + 601 agctagctgactgatcgatcgat 108 23 0 47.83 62.053 30.53 30.53 37.90 5.053 + 602 ctactagctagctgactgatacgc 462 24 0 50.00 61.062 3.61 0.00 0.00 5.062 + 603 gctactagctagctgactgatacg 461 24 0 50.00 61.062 14.37 0.00 44.92 5.062 + 604 tgatcatcatcgatgctagctagta 518 25 0 40.00 60.062 22.18 18.77 40.32 5.062 + 605 tgatcgatcatcatgctagctacta 271 25 0 40.00 60.062 27.48 0.00 37.38 5.062 + 606 ctagtgatgcatgctagtagtgatg 26 25 0 44.00 60.064 20.00 7.49 0.00 5.064 + 607 gctagctagctactatcatcgatc 426 24 0 45.83 58.932 34.38 4.20 46.11 5.068 + 608 gctagctactgatcgatgctacat 304 24 0 45.83 61.072 11.21 0.00 0.00 5.072 + 609 gctagctagctactatcatcgat 426 23 0 43.48 57.922 34.38 0.00 46.11 5.078 + 610 ctagtgatgcatgctagtagtgat 26 24 0 41.67 58.911 20.00 4.64 0.00 5.089 + 611 tactatcatctctgcgcgatcga 358 23 0 47.83 62.092 22.07 1.72 38.48 5.092 + 612 agctgatcgatcgatgctagcta 397 23 0 47.83 62.111 31.26 14.51 40.03 5.111 + 613 tagctgatcgatcgatgctagct 396 23 0 47.83 62.111 33.22 33.22 42.08 5.111 + 614 agctagctgatcgatcgatgcta 393 23 0 47.83 62.111 34.11 32.56 36.80 5.111 + 615 tagctagctgatcgatcgatgct 392 23 0 47.83 62.111 33.87 33.38 38.16 5.111 + 616 tagtgatgcatgctagtagtgat 27 23 0 39.13 57.886 11.56 0.00 0.00 5.114 + 617 tactagctagctgatcatcatcgat 507 25 0 40.00 59.828 0.00 0.00 0.00 5.172 + 618 gctagctagctgatcatcgatgc 187 23 0 52.17 62.193 34.38 9.22 46.11 5.193 + 619 gctagtgatgcatgctagtagtga 25 24 0 45.83 61.195 24.96 4.57 0.00 5.195 + 620 aaagcatcggattagctagctgat 1 24 0 41.67 61.209 17.84 15.13 0.00 5.209 + 621 gtgatgcatgctagtagtgatgtat 29 25 0 40.00 59.774 1.07 1.07 0.00 5.226 + 622 ctatcatctctgcgcgatcgatg 360 23 0 52.17 62.227 18.01 18.01 38.48 5.227 + 623 tgactgatacgcgatgctagcta 474 23 0 47.83 62.287 17.69 3.08 0.00 5.287 + 624 tagctgactgatacgcgatgcta 470 23 0 47.83 62.287 12.64 9.09 0.00 5.287 + 625 tgctagtagtgatgtatacgtagct 37 25 0 40.00 59.713 9.37 8.73 0.00 5.287 + 626 tgactgatcgatcgatgctagct 115 23 0 47.83 62.296 20.19 11.59 35.21 5.296 + 627 agctgactgatcgatcgatgcta 112 23 0 47.83 62.296 26.44 14.64 35.21 5.296 + 628 tagctgactgatcgatcgatgct 111 23 0 47.83 62.296 31.98 30.27 35.21 5.296 + 629 ctagctagctactatcatcgatcg 427 24 0 45.83 58.703 12.49 9.87 0.00 5.297 + 630 tagctagctactatcatcgatcg 428 23 0 43.48 57.691 27.80 9.87 0.00 5.309 + 631 gactgatcgatcatcatgctagct 268 24 0 45.83 61.313 24.51 7.81 41.77 5.313 + 632 gctagctgactgatcgatcatcat 261 24 0 45.83 61.313 26.31 20.43 41.77 5.313 + 633 ctatttagctagctgactgatcga 254 24 0 41.67 58.679 0.00 0.00 0.00 5.321 + 634 gcatgctagtagtgatgtatacg 34 23 0 43.48 57.659 11.60 0.00 0.00 5.341 + 635 tatttagctagctgactgatcga 255 23 0 39.13 57.650 0.00 0.00 0.00 5.350 + 636 ctactagctagctgatcatcatcga 506 25 0 44.00 60.352 1.08 0.00 0.00 5.352 + 637 agctactatcatctctgcgcgat 355 23 0 47.83 62.360 4.99 2.52 0.00 5.360 + 638 gctgatcatcatcgatgctagcta 516 24 0 45.83 61.370 20.15 8.49 40.32 5.370 + 639 tagctgatcatcatcgatgctagc 514 24 0 45.83 61.370 20.04 19.26 40.32 5.370 + 640 gctagctgatcatcatcgatgcta 512 24 0 45.83 61.370 14.58 9.63 40.32 5.370 + 641 tagctagctgatcatcatcgatgc 510 24 0 45.83 61.370 21.42 7.40 40.32 5.370 + 642 atgcatgctagtagtgatgtatacg 32 25 0 40.00 59.604 11.70 0.00 0.00 5.396 + 643 tgatgcatgctagtagtgatgtat 30 24 0 37.50 58.592 12.66 12.66 0.00 5.408 + 644 gactgatcgatcgatgctagctag 116 24 0 50.00 61.409 18.04 17.46 35.21 5.409 + 645 gctatttagctagctgactgatc 253 23 0 43.48 57.572 7.27 0.00 46.11 5.428 + 646 tgctagtgatgcatgctagtagtg 24 24 0 45.83 61.434 24.96 10.54 35.89 5.434 + 647 ctagctagctactatcatctctgc 349 24 0 45.83 58.562 27.80 0.00 0.00 5.438 + 648 gctagctagctactatcatctctg 348 24 0 45.83 58.562 34.38 6.79 46.11 5.438 + 649 gatcatcatcgatgctagctagta 519 24 0 41.67 58.557 22.18 18.77 40.32 5.443 + 650 gatcgatcatcatgctagctacta 272 24 0 41.67 58.557 21.11 0.00 0.00 5.443 + 651 atcatcatcgatgctagctagtag 520 24 0 41.67 58.554 2.13 0.00 40.32 5.446 + 652 atcgatcatcatgctagctactag 273 24 0 41.67 58.554 0.00 0.00 37.62 5.446 + 653 tagctagctactatcatctctgc 350 23 0 43.48 57.527 27.80 0.00 0.00 5.473 + 654 atcatcatcgatgctagctagta 520 23 0 39.13 57.514 22.18 18.77 40.32 5.486 + 655 atcgatcatcatgctagctacta 273 23 0 39.13 57.514 0.00 0.00 0.00 5.486 + 656 gatcatcatcgatgctagctagtag 519 25 0 44.00 59.494 0.21 0.00 40.32 5.506 + 657 gatcgatcatcatgctagctactag 272 25 0 44.00 59.494 21.11 0.00 37.62 5.506 + 658 actagctagctgatcatcatctact 211 25 0 40.00 59.471 22.43 6.99 0.00 5.529 + 659 tgactgatcgatcatcatgctagc 267 24 0 45.83 61.547 26.79 14.13 41.77 5.547 + 660 gctgactgatcgatcatcatgcta 265 24 0 45.83 61.547 27.72 16.42 41.77 5.547 + 661 tagctgactgatcgatcatcatgc 263 24 0 45.83 61.547 27.74 27.74 41.77 5.547 + 662 tgctagtagtgatgtatacgtagc 37 24 0 41.67 58.446 4.93 4.93 0.00 5.554 + 663 ctagctagctgactgatacgcga 465 23 0 52.17 62.571 14.90 0.00 0.00 5.571 + 664 tagctagctactatcatcgatcgat 428 25 0 40.00 59.423 27.80 25.37 35.13 5.577 + 665 gctactagctagctgatcatcatct 208 25 0 44.00 60.585 14.37 0.00 44.92 5.585 + 666 agctgatcatcatctagctagtagc 153 25 0 44.00 60.585 15.25 15.25 40.45 5.585 + 667 ctagctagctgatcgatcgatgtg 71 24 0 50.00 61.642 11.68 4.94 35.21 5.642 + 668 agtgatgcatgctagtagtgatgta 28 25 0 40.00 60.646 11.60 8.84 0.00 5.646 + 669 tagtgatgcatgctagtagtgatgt 27 25 0 40.00 60.646 11.60 0.00 0.00 5.646 + 670 actatcatctctgcgcgatcgat 359 23 0 47.83 62.652 22.07 11.47 38.48 5.652 + 671 ctatttagctagctgactgatcg 254 23 0 43.48 57.339 0.00 0.00 0.00 5.661 + 672 tagctagctgatcgatcgtagcg 561 23 0 52.17 62.677 27.20 18.31 0.00 5.677 + 673 gcatcggattagctagctgatgc 4 23 0 52.17 62.687 34.10 34.10 41.15 5.687 + 674 tgcatgctagtagtgatgtatacgt 33 25 0 40.00 60.700 20.79 0.00 0.00 5.700 + 675 tttagctagctgactgatcgatcat 257 25 0 40.00 60.702 26.67 18.02 36.62 5.702 + 676 atttagctagctgactgatcgatca 256 25 0 40.00 60.702 26.99 26.99 35.44 5.702 + 677 gctagctagctactatcatctct 348 23 0 43.48 57.266 34.38 0.00 46.11 5.734 + 678 aagcatcggattagctagctgatg 2 24 0 45.83 61.794 27.81 27.81 33.28 5.794 + 679 agtgatgtatacgtagctagtagc 44 24 0 41.67 58.201 15.25 15.25 45.79 5.799 + 680 gctagtagtgatgtatacgtagct 38 24 0 41.67 58.201 5.92 5.92 0.00 5.799 + 681 tagctagctgactgatcgatcgat 107 24 0 45.83 61.800 30.53 30.53 37.90 5.800 + 682 actagctagctgactgatacgcg 464 23 0 52.17 62.816 21.52 3.89 0.00 5.816 + 683 actagctagctgatcatcatctac 211 24 0 41.67 58.178 22.43 0.00 0.00 5.822 + 684 tagctgatcgatcgatgctagcta 396 24 0 45.83 61.857 34.98 33.55 41.05 5.857 + 685 tagctagctgatcgatcgatgcta 392 24 0 45.83 61.857 34.11 32.56 36.80 5.857 + 686 tatttagctagctgactgatcgat 255 24 0 37.50 58.112 1.68 0.00 0.00 5.888 + 687 gcatgctagtagtgatgtatacgta 34 25 0 40.00 59.089 11.60 0.00 0.00 5.911 + 688 tatttagctagctgactgatcgatc 255 25 0 40.00 59.084 19.32 19.32 0.00 5.916 + 689 ctatttagctagctgactgatcgat 254 25 0 40.00 59.082 0.00 0.00 0.00 5.918 + 690 ctagctagctactatcatctctgcg 349 25 0 48.00 60.920 27.80 5.75 0.00 5.920 + 691 tgatcgatcgatgctagctaggc 400 23 0 52.17 62.955 26.44 12.49 35.21 5.955 + 692 agctagctactgatcgatgctaca 303 24 0 45.83 61.988 17.56 3.03 0.00 5.988 + 693 tgactgatcgatcgatgctagcta 115 24 0 45.83 62.034 20.19 11.16 35.21 6.034 + 694 tagctgactgatcgatcgatgcta 111 24 0 45.83 62.034 33.43 30.74 35.21 6.034 + 695 catgctagtagtgatgtatacgtagc 35 26 0 42.31 59.961 4.93 4.93 0.00 6.039 + 696 gcatgctagtagtgatgtatacgtag 34 26 0 42.31 59.961 11.60 0.00 0.00 6.039 + 697 actgatcgatcgatgctagctagt 117 24 0 45.83 62.039 23.29 15.07 35.21 6.039 + 698 ctatttagctagctgactgatcgatc 254 26 0 42.31 59.960 19.32 19.32 0.00 6.040 + 699 ttagctagctgactgatcgatcatc 258 25 0 44.00 61.041 28.29 21.92 36.62 6.041 + 700 atgctagtagtgatgtatacgtagct 36 26 0 38.46 60.068 9.37 8.73 0.00 6.068 + 701 ctagctagctgatcatcatctact 212 24 0 41.67 57.930 11.68 6.99 0.00 6.070 + 702 ctactagctagctgatcatcatct 209 24 0 41.67 57.930 1.08 0.00 0.00 6.070 + 703 agctgatcatcatctagctagtag 153 24 0 41.67 57.930 7.49 3.73 40.45 6.070 + 704 ctagctgatcatcatctagctagt 151 24 0 41.67 57.930 21.70 5.56 46.15 6.070 + 705 tagctactatcatctctgcgcgat 354 24 0 45.83 62.096 4.99 2.52 0.00 6.096 + 706 gactgatcgatcatcatgctagcta 268 25 0 44.00 61.099 24.51 4.57 41.77 6.099 + 707 ctgatcatcatcgatgctagctagt 517 25 0 44.00 61.101 22.18 3.56 40.32 6.101 + 708 actagctagctgatcatcatcgatg 508 25 0 44.00 61.101 22.43 20.23 41.48 6.101 + 709 ctgatcgatcatcatgctagctact 270 25 0 44.00 61.101 26.67 0.00 41.77 6.101 + 710 atgctagtagtgatgtatacgtagc 36 25 0 40.00 58.855 4.93 4.93 0.00 6.145 + 711 ctagctagctactgatcgatgctac 301 25 0 48.00 61.145 14.00 7.81 0.00 6.145 + 712 gctagctagctactatcatctctgc 348 25 0 48.00 61.152 34.38 11.74 46.11 6.152 + 713 agctagctgatcatcatctactatca 214 26 0 38.46 59.840 17.99 0.00 0.00 6.160 + 714 ctgatcgatcgatgctagctagtag 118 25 0 48.00 61.197 19.70 5.49 35.21 6.197 + 715 agctagctgactgatcgatcatca 260 24 0 45.83 62.232 26.49 26.49 39.98 6.232 + 716 gctagctagctactatcatcgatcg 426 25 0 48.00 61.252 34.38 9.87 46.11 6.252 + 717 gctatttagctagctgactgatcga 253 25 0 44.00 61.268 7.27 0.00 46.11 6.268 + 718 ctagctagctactatcatcgatcgat 427 26 0 42.31 60.291 27.80 25.37 35.13 6.291 + 719 agctgatcatcgatgctactagct 194 24 0 45.83 62.294 24.11 23.60 45.92 6.294 + 720 agctagctgatcatcgatgctact 190 24 0 45.83 62.294 17.99 10.88 0.00 6.294 + 721 ctagctagctgactgatcgatcga 106 24 0 50.00 62.312 22.52 22.52 0.00 6.312 + 722 actgatcgatcatcatgctagctac 269 25 0 44.00 61.328 26.67 0.00 41.77 6.328 + 723 tgatgcatgctagtagtgatgtatac 30 26 0 38.46 59.623 9.19 6.43 0.00 6.377 + 724 gtgatgcatgctagtagtgatgtata 29 26 0 38.46 59.623 4.23 0.00 0.00 6.377 + 725 tactatcatctctgcgcgatcgat 358 24 0 45.83 62.379 22.07 11.47 38.48 6.379 + 726 gctagctgatcatcatctactatca 215 25 0 40.00 58.607 8.21 0.00 0.00 6.393 + 727 gctactagctagctgatcatcatcta 208 26 0 42.31 60.404 14.37 0.00 44.92 6.404 + 728 tagctgatcatcatctagctagtagc 152 26 0 42.31 60.404 15.25 15.25 41.48 6.404 + 729 tgctagtagtgatgtatacgtagcta 37 26 0 38.46 59.564 10.00 8.05 0.00 6.436 + 730 gatgcatgctagtagtgatgtatacg 31 26 0 42.31 60.453 7.40 0.00 0.00 6.453 + 731 tagtgatgcatgctagtagtgatgta 27 26 0 38.46 60.461 11.60 8.84 0.00 6.461 + 732 gctagtgatgcatgctagtagtgat 25 25 0 44.00 61.506 24.96 8.51 0.00 6.506 + 733 tgcatgctagtagtgatgtatacgta 33 26 0 38.46 60.515 20.79 0.00 0.00 6.515 + 734 tatttagctagctgactgatcgatca 255 26 0 38.46 60.516 26.99 26.99 35.44 6.516 + 735 tgatgcatgctagtagtgatgtata 30 25 0 36.00 58.479 4.13 0.00 0.00 6.521 + 736 tactagctagctgactgatacgcg 463 24 0 50.00 62.538 13.17 3.89 0.00 6.538 + 737 ctagctactatcatctctgcgcga 353 24 0 50.00 62.603 2.71 2.71 0.00 6.603 + 738 agctagctgatcatcatctactatc 214 25 0 40.00 58.369 17.99 0.00 0.00 6.631 + 739 agctagctgatcatcatctactat 214 24 0 37.50 57.345 17.99 0.00 0.00 6.655 + 740 gctactagctagctgatcatcatcg 505 25 0 48.00 61.656 14.37 0.00 44.92 6.656 + 741 gctgatcatcgatgctactagctag 195 25 0 48.00 61.656 20.91 20.04 45.92 6.656 + 742 ctagctgatcatcgatgctactagc 192 25 0 48.00 61.656 20.78 20.78 45.61 6.656 + 743 gctagctgatcatcgatgctactag 191 25 0 48.00 61.656 20.13 20.13 0.00 6.656 + 744 ctagctagctgatcatcgatgctac 188 25 0 48.00 61.656 17.82 12.06 0.00 6.656 + 745 actagctagctgatcatcatctacta 211 26 0 38.46 59.328 22.43 8.11 0.00 6.672 + 746 tactagctagctgatcatcatctact 210 26 0 38.46 59.328 6.99 6.99 0.00 6.672 + 747 ctactagctagctgatcatcatcgat 506 26 0 42.31 60.681 1.08 0.00 0.00 6.681 + 748 tagctagctactgatcgatgctaca 302 25 0 44.00 61.746 27.80 5.02 0.00 6.746 + 749 gtagtgatgtatacgtagctagtagc 42 26 0 42.31 59.249 15.25 15.25 45.79 6.751 + 750 actgatcgatcgatgctagctagta 117 25 0 44.00 61.797 23.29 18.77 35.21 6.797 + 751 gatgcatgctagtagtgatgtatac 31 25 0 40.00 58.175 20.79 1.70 0.00 6.825 + 752 agctgatcatcatcgatgctagct 515 24 0 45.83 62.835 23.00 22.41 41.74 6.835 + 753 agctagctgatcatcatcgatgct 511 24 0 45.83 62.835 17.99 8.34 40.32 6.835 + 754 ctagctagctgactgatacgcgat 465 24 0 50.00 62.838 14.90 0.00 0.00 6.838 + 755 atgcatgctagtagtgatgtatac 32 24 0 37.50 57.161 11.70 0.53 0.00 6.839 + 756 agctagctactatcatctctgcgc 351 24 0 50.00 62.858 17.56 0.00 0.00 6.858 + 757 gctagctagctactgatcgatgct 300 24 0 50.00 62.858 34.38 11.51 46.11 6.858 + 758 ctactatcatctctgcgcgatcga 357 24 0 50.00 62.878 22.07 1.72 38.48 6.878 + 759 gctagctactgatcgatgctacatc 304 25 0 48.00 61.879 11.21 4.40 37.97 6.879 + 760 tagtgatgtatacgtagctagtagc 43 25 0 40.00 58.104 15.25 15.25 45.79 6.896 + 761 gctagtagtgatgtatacgtagcta 38 25 0 40.00 58.104 7.24 5.34 0.00 6.896 + 762 tgatcatcatcgatgctagctagtag 518 26 0 42.31 60.902 14.93 0.00 40.32 6.902 + 763 ctgatcatcatcgatgctagctagta 517 26 0 42.31 60.902 22.18 18.77 40.32 6.902 + 764 tactagctagctgatcatcatcgatg 507 26 0 42.31 60.902 20.23 20.23 41.48 6.902 + 765 tgatcgatcatcatgctagctactag 271 26 0 42.31 60.902 27.48 0.00 37.38 6.902 + 766 ctgatcgatcatcatgctagctacta 270 26 0 42.31 60.902 26.67 1.37 41.77 6.902 + 767 agctgatcgatcgatgctagctag 397 24 0 50.00 62.904 31.26 19.90 40.03 6.904 + 768 ctagctgatcgatcgatgctagct 395 24 0 50.00 62.904 35.51 33.22 43.05 6.904 + 769 agctagctgatcgatcgatgctag 393 24 0 50.00 62.904 41.07 41.07 46.89 6.904 + 770 ctagctagctgatcgatcgatgct 391 24 0 50.00 62.904 33.87 33.38 38.16 6.904 + 771 tactagctagctgatcatcatctac 210 25 0 40.00 58.081 0.00 0.00 0.00 6.919 + 772 gctagctgatcatcatctactatc 215 24 0 41.67 57.062 8.21 0.00 0.00 6.938 + 773 agtgatgcatgctagtagtgatgtat 28 26 0 38.46 60.969 1.07 1.07 0.00 6.969 + 774 gctagtagtgatgtatacgtagctag 38 26 0 42.31 59.027 8.99 8.99 0.00 6.973 + 775 tagctagctgactgatcgatcatca 259 25 0 44.00 61.981 28.29 26.49 39.98 6.981 + 776 ctactagctagctgatcatcatctac 209 26 0 42.31 59.015 1.08 0.00 0.00 6.985 + 777 agtagtgatgtatacgtagctagt 41 24 0 37.50 57.012 8.68 8.68 0.00 6.988 + 778 gctagctgatcatcatctactatcat 215 26 0 38.46 59.001 8.21 0.00 0.00 6.999 + 779 agctgatcatcatctactatcatca 218 25 0 36.00 57.993 0.00 0.00 0.00 7.007 + 780 atgcatgctagtagtgatgtatacgt 32 26 0 38.46 61.018 11.70 0.00 0.00 7.018 + 781 atttagctagctgactgatcgatcat 256 26 0 38.46 61.022 26.67 18.02 36.62 7.022 + 782 agctgatcatcgatgctactagcta 194 25 0 44.00 62.040 24.59 9.79 45.92 7.040 + 783 tagctgatcatcgatgctactagct 193 25 0 44.00 62.040 27.00 27.00 45.92 7.040 + 784 agctagctgatcatcgatgctacta 190 25 0 44.00 62.040 17.99 11.59 0.00 7.040 + 785 tagctagctgatcatcgatgctact 189 25 0 44.00 62.040 17.55 15.53 0.00 7.040 + 786 atgctagtagtgatgtatacgtagcta 36 27 0 37.04 59.911 10.00 8.05 0.00 7.089 + 787 gctagctgatcatcatctactatcatc 215 27 0 40.74 59.861 8.21 0.00 0.00 7.139 + 788 ctagctagctgatcatcatctacta 212 25 0 40.00 57.842 11.68 8.11 0.00 7.158 + 789 ctactagctagctgatcatcatcta 209 25 0 40.00 57.842 1.08 0.00 0.00 7.158 + 790 tagctgatcatcatctagctagtag 152 25 0 40.00 57.842 13.40 3.73 41.48 7.158 + 791 ctagctgatcatcatctagctagta 151 25 0 40.00 57.842 21.70 7.13 46.15 7.158 + 792 gctgatcatcatcgatgctagctag 516 25 0 48.00 62.165 20.15 17.46 40.32 7.165 + 793 ctagctgatcatcatcgatgctagc 513 25 0 48.00 62.165 19.27 19.26 41.96 7.165 + 794 gctagctgatcatcatcgatgctag 512 25 0 48.00 62.165 23.70 23.70 45.51 7.165 + 795 ctagctagctgatcatcatcgatgc 509 25 0 48.00 62.165 21.42 7.40 40.32 7.165 + 796 agctagctgatcatcatctactatcat 214 27 0 37.04 60.181 17.99 0.00 0.00 7.181 + 797 ctactagctagctgatcatcatctact 209 27 0 40.74 60.181 6.99 6.99 0.00 7.181 + 798 ctagctgatcatcatctagctagtag 151 26 0 42.31 58.789 21.70 10.73 46.15 7.211 + 799 aaagcatcggattagctagctgatg 1 25 0 44.00 62.249 27.81 27.81 33.28 7.249 + 800 agctagctactgatcgatgctacat 303 25 0 44.00 62.272 17.56 6.16 0.00 7.272 + 801 tagctagctgatcatcatctactatca 213 27 0 37.04 59.689 8.31 0.00 0.00 7.311 + 802 actagctagctgatcatcatctactat 211 27 0 37.04 59.688 22.43 2.36 0.00 7.312 + 803 ctgactgatcgatcatcatgctagc 266 25 0 48.00 62.333 20.99 8.86 41.77 7.333 + 804 gctgactgatcgatcatcatgctag 265 25 0 48.00 62.333 27.72 21.73 41.77 7.333 + 805 ctagctgactgatcgatcatcatgc 262 25 0 48.00 62.333 27.74 27.74 41.77 7.333 + 806 gctagctgactgatcgatcatcatg 261 25 0 48.00 62.333 22.70 19.51 41.77 7.333 + 807 tgctagtagtgatgtatacgtagctag 37 27 0 40.74 60.395 8.99 8.99 0.00 7.395 + 808 agtagtgatgtatacgtagctagtagc 41 27 0 40.74 60.395 15.25 15.25 45.79 7.395 + 809 gctagtagtgatgtatacgtagctagt 38 27 0 40.74 60.395 15.55 15.55 0.00 7.395 + 810 ctagtgatgcatgctagtagtgatgt 26 26 0 42.31 61.460 20.00 0.00 0.00 7.460 + 811 gctgatcatcatctactatcatcatca 219 27 0 37.04 59.533 0.00 0.00 0.00 7.467 + 812 agctagctgactgatcgatcatcat 260 25 0 44.00 62.507 26.31 20.43 41.77 7.507 + 813 tttagctagctgactgatcgatcatc 257 26 0 42.31 61.507 23.93 21.92 36.62 7.507 + 814 catgctagtagtgatgtatacgtag 35 25 0 40.00 57.441 4.74 0.00 0.00 7.559 + 815 agctgatcatcatcgatgctagcta 515 25 0 44.00 62.561 23.50 10.90 43.19 7.561 + 816 tagctgatcatcatcgatgctagct 514 25 0 44.00 62.561 26.21 26.21 44.79 7.561 + 817 agctagctgatcatcatcgatgcta 511 25 0 44.00 62.561 17.99 9.63 40.32 7.561 + 818 tagctagctgatcatcatcgatgct 510 25 0 44.00 62.561 14.14 10.38 40.32 7.561 + 819 gctatttagctagctgactgatcgat 253 26 0 42.31 61.564 7.27 0.00 46.11 7.564 + 820 ctagctagctgactgatcgatcgat 106 25 0 48.00 62.579 30.53 30.53 37.90 7.579 + 821 agctgatcatcatctactatcatcat 218 26 0 34.62 58.415 0.00 0.00 0.00 7.585 + 822 tagctagctactatcatctctgcgc 350 25 0 48.00 62.587 27.80 0.00 0.00 7.587 + 823 gctagctagctactgatcgatgcta 300 25 0 48.00 62.587 34.38 12.23 46.11 7.587 + 824 tgctagtgatgcatgctagtagtga 24 25 0 44.00 62.622 24.96 13.57 35.89 7.622 + 825 tagctgatcgatcgatgctagctag 396 25 0 48.00 62.632 33.71 21.46 41.05 7.632 + 826 ctagctgatcgatcgatgctagcta 395 25 0 48.00 62.632 35.51 32.61 43.05 7.632 + 827 tagctagctgatcgatcgatgctag 392 25 0 48.00 62.632 41.07 41.07 46.89 7.632 + 828 ctagctagctgatcgatcgatgcta 391 25 0 48.00 62.632 34.11 32.56 36.80 7.632 + 829 gtgatgcatgctagtagtgatgtatac 29 27 0 40.74 60.659 9.56 7.17 0.00 7.659 + 830 agctgatcatcatctactatcatcatc 218 27 0 37.04 59.314 0.00 0.00 0.00 7.686 + 831 tagctagctgatcatcatctactat 213 25 0 36.00 57.279 8.31 0.00 0.00 7.721 + 832 tagctagctgatcatcatctactatc 213 26 0 38.46 58.269 8.31 0.00 0.00 7.731 + 833 tgactgatcgatcatcatgctagct 267 25 0 44.00 62.733 26.79 10.55 41.77 7.733 + 834 agctgactgatcgatcatcatgcta 264 25 0 44.00 62.733 30.60 18.10 41.77 7.733 + 835 tagctgactgatcgatcatcatgct 263 25 0 44.00 62.733 32.31 32.31 41.77 7.733 + 836 ctagctagctgatcatcatctactat 212 26 0 38.46 58.265 9.41 0.00 0.00 7.735 + 837 agtgatgcatgctagtagtgatgtata 28 27 0 37.04 60.779 4.23 0.00 0.00 7.779 + 838 tagtgatgcatgctagtagtgatgtat 27 27 0 37.04 60.779 11.56 0.00 0.00 7.779 + 839 tgactgatcgatcgatgctagctag 115 25 0 48.00 62.800 20.19 17.46 35.21 7.800 + 840 ctgactgatcgatcgatgctagcta 114 25 0 48.00 62.800 20.19 11.97 35.21 7.800 + 841 tagctgactgatcgatcgatgctag 111 25 0 48.00 62.800 31.45 26.34 35.21 7.800 + 842 ctagctgactgatcgatcgatgcta 110 25 0 48.00 62.800 31.54 29.68 35.21 7.800 + 843 tagctagctgactgatcgatcgatg 107 25 0 48.00 62.800 28.29 13.21 35.21 7.800 + 844 gactgatcgatcgatgctagctagt 116 25 0 48.00 62.802 22.18 12.64 35.21 7.802 + 845 tactagctagctgatcatcatctacta 210 27 0 37.04 59.196 8.79 8.11 0.00 7.804 + 846 tagctgatcatcgatgctactagcta 193 26 0 42.31 61.805 28.86 27.39 45.92 7.805 + 847 tagctagctgatcatcgatgctacta 189 26 0 42.31 61.805 18.93 16.03 0.00 7.805 + 848 atgcatgctagtagtgatgtatacgta 32 27 0 37.04 60.828 11.70 0.00 0.00 7.828 + 849 tatttagctagctgactgatcgatcat 255 27 0 37.04 60.831 26.67 18.02 36.62 7.831 + 850 ctagctagctgatcatcatctactatc 212 27 0 40.74 59.162 9.41 0.06 0.00 7.838 + 851 tagctactatcatctctgcgcgatc 354 25 0 48.00 62.854 0.00 0.00 0.00 7.854 + 852 gctgatcatcatctactatcatcat 219 25 0 36.00 57.142 0.00 0.00 0.00 7.858 + 853 ctagctactatcatctctgcgcgat 353 25 0 48.00 62.859 4.99 2.52 0.00 7.859 + 854 gctgatcatcatctactatcatcatc 219 26 0 38.46 58.126 0.00 0.00 0.00 7.874 + 855 tagctagctactgatcgatgctacat 302 26 0 42.31 62.028 27.80 3.08 0.00 8.028 + 856 agtagtgatgtatacgtagctagtag 41 26 0 38.46 57.950 9.92 1.30 0.00 8.050 + 857 ctagtagtgatgtatacgtagctagt 39 26 0 38.46 57.950 15.52 15.52 0.00 8.050 + 858 catgctagtagtgatgtatacgtagct 35 27 0 40.74 61.089 9.37 8.73 0.00 8.089 + 859 gactgatcgatcatcatgctagctac 268 26 0 46.15 62.094 24.51 8.36 41.77 8.094 + 860 tagctgatcatcatctactatcatca 217 26 0 34.62 57.906 0.00 0.00 0.00 8.094 + 861 ctagctgatcatcatctactatcatca 216 27 0 37.04 58.826 0.00 0.00 0.00 8.174 + 862 ctagctgatcatcatctagctagtagc 151 27 0 44.44 61.196 21.70 15.25 46.15 8.196 + 863 tagctagctgactgatcgatcatcat 259 26 0 42.31 62.255 28.29 20.43 41.77 8.255 + 864 ctagtgatgcatgctagtagtgatgta 26 27 0 40.74 61.255 20.00 8.84 0.00 8.255 + 865 tgcatgctagtagtgatgtatacgtag 33 27 0 40.74 61.300 20.79 0.00 0.00 8.300 + 866 ctatttagctagctgactgatcgatca 254 27 0 40.74 61.304 26.99 26.99 35.44 8.304 + 867 tagctgatcatcatcgatgctagcta 514 26 0 42.31 62.307 28.23 26.63 43.19 8.307 + 868 tagctagctgatcatcatcgatgcta 510 26 0 42.31 62.307 14.58 11.03 40.32 8.307 + 869 gctagctagctactatcatcgatcga 426 26 0 46.15 62.381 34.38 22.52 46.11 8.381 + 870 gctactagctagctgatcatcatctac 208 27 0 44.44 61.407 14.37 0.00 44.92 8.407 + 871 ttagctagctgactgatcgatcatca 258 26 0 42.31 62.416 28.29 26.49 39.98 8.416 + 872 tgactgatcgatcatcatgctagcta 267 26 0 42.31 62.472 26.79 11.24 41.77 8.472 + 873 tagctgactgatcgatcatcatgcta 263 26 0 42.31 62.472 33.83 32.61 41.77 8.472 + 874 actgatcgatcatcatgctagctact 269 26 0 42.31 62.478 26.67 0.00 41.77 8.478 + 875 gctagtgatgcatgctagtagtgatg 25 26 0 46.15 62.484 24.96 9.07 0.00 8.484 + 876 ctagctagctactgatcgatgctaca 301 26 0 46.15 62.503 14.00 5.87 0.00 8.503 + 877 gactgatcgatcgatgctagctagta 116 26 0 46.15 62.543 22.18 18.77 35.21 8.543 + 878 actgatcgatcgatgctagctagtag 117 26 0 46.15 62.548 23.29 12.42 35.21 8.548 + 879 ctagctgatcatcatctactatcatc 216 26 0 38.46 57.395 0.00 0.00 0.00 8.605 + 880 ctgatcatcatcgatgctagctagtag 517 27 0 44.44 61.665 10.30 1.36 40.32 8.665 + 881 ctactagctagctgatcatcatcgatg 506 27 0 44.44 61.665 20.23 20.23 41.48 8.665 + 882 ctgatcgatcatcatgctagctactag 270 27 0 44.44 61.665 26.67 8.14 41.77 8.665 + 883 tagctgatcatcatctactatcatcat 217 27 0 33.33 58.315 0.00 0.00 0.00 8.685 + 884 tgatgcatgctagtagtgatgtatacg 30 27 0 40.74 61.778 9.81 0.00 0.00 8.778 + 885 gatgcatgctagtagtgatgtatacgt 31 27 0 40.74 61.779 7.40 0.00 0.00 8.779 + 886 gctactagctagctgatcatcatcga 505 26 0 46.15 62.779 14.37 0.00 44.92 8.779 + 887 agctgatcatcgatgctactagctag 194 26 0 46.15 62.784 24.59 20.04 45.92 8.784 + 888 ctagctgatcatcgatgctactagct 192 26 0 46.15 62.784 27.00 27.00 45.92 8.784 + 889 agctagctgatcatcgatgctactag 190 26 0 46.15 62.784 20.13 20.13 0.00 8.784 + 890 ctagctagctgatcatcgatgctact 188 26 0 46.15 62.784 17.55 15.53 0.00 8.784 + 891 atttagctagctgactgatcgatcatc 256 27 0 40.74 61.785 23.93 21.92 36.62 8.785 + 892 tctactatcatcatcatctactagct 230 26 0 34.62 57.155 0.00 0.00 0.00 8.845 + 893 tgctagtgatgcatgctagtagtgat 24 26 0 42.31 62.874 24.96 8.51 35.89 8.874 + 894 ctgatcatcatctactatcatcatca 220 26 0 34.62 57.026 0.00 0.00 0.00 8.974 + 895 agctagctactgatcgatgctacatc 303 26 0 46.15 62.999 17.56 7.89 37.97 8.999 + 896 tagtagtgatgtatacgtagctagtag 40 27 0 37.04 57.869 16.78 1.30 0.00 9.131 + 897 ctagtagtgatgtatacgtagctagta 39 27 0 37.04 57.869 16.85 15.97 0.00 9.131 + 898 actgatcgatcatcatgctagctacta 269 27 0 40.74 62.236 26.67 1.37 41.77 9.236 + 899 gcatgctagtagtgatgtatacgtagc 34 27 0 44.44 62.283 11.60 4.93 0.00 9.283 + 900 gctatttagctagctgactgatcgatc 253 27 0 44.44 62.291 19.32 19.32 46.11 9.291 + 901 atctactatcatcatcatctactagct 229 27 0 33.33 57.592 0.00 0.00 0.00 9.408 + 902 catctactatcatcatcatctactagc 228 27 0 37.04 57.549 0.00 0.00 0.00 9.451 + 903 tgatcatcatctactatcatcatcatc 221 27 0 33.33 57.467 0.00 0.00 0.00 9.533 + 904 tagctgatcatcgatgctactagctag 193 27 0 44.44 62.534 27.70 20.04 45.92 9.534 + 905 ctagctgatcatcgatgctactagcta 192 27 0 44.44 62.534 27.76 26.73 45.92 9.534 + 906 tagctagctgatcatcgatgctactag 189 27 0 44.44 62.534 20.13 20.13 0.00 9.534 + 907 ctagctagctgatcatcgatgctacta 188 27 0 44.44 62.534 17.74 15.95 0.00 9.534 + 908 ctgatcatcatctactatcatcatcat 220 27 0 33.33 57.462 0.00 0.00 0.00 9.538 + 909 gctagctagctactatcatcgatcgat 426 27 0 44.44 62.627 34.38 25.37 46.11 9.627 + 910 ttagctagctgactgatcgatcatcat 258 27 0 40.74 62.665 28.29 20.43 41.77 9.665 + 911 tagctagctactgatcgatgctacatc 302 27 0 44.44 62.742 27.80 7.89 37.97 9.742 + 912 ctagctagctactgatcgatgctacat 301 27 0 44.44 62.747 14.00 2.51 0.00 9.747 + 913 gatcatcatctactatcatcatcatct 222 27 0 33.33 57.242 0.00 0.00 0.00 9.758 + 914 tttagctagctgactgatcgatcatca 257 27 0 40.74 62.820 26.49 26.49 39.98 9.820 + 915 tctactatcatcatcatctactagcta 230 27 0 33.33 57.100 0.00 0.00 0.00 9.900 diff --git a/samples/Formatted/wksst8110.for b/samples/Formatted/wksst8110.for new file mode 100644 index 00000000..1ee1a489 --- /dev/null +++ b/samples/Formatted/wksst8110.for @@ -0,0 +1,1317 @@ + Weekly SST data starts week centered on 3Jan1990 + + Nino1+2 Nino3 Nino34 Nino4 + Week SST SSTA SST SSTA SST SSTA SST SSTA + 03JAN1990 23.4-0.4 25.1-0.3 26.6 0.0 28.6 0.3 + 10JAN1990 23.4-0.8 25.2-0.3 26.6 0.1 28.6 0.3 + 17JAN1990 24.2-0.3 25.3-0.3 26.5-0.1 28.6 0.3 + 24JAN1990 24.4-0.5 25.5-0.4 26.5-0.1 28.4 0.2 + 31JAN1990 25.1-0.2 25.8-0.2 26.7 0.1 28.4 0.2 + 07FEB1990 25.8 0.2 26.1-0.1 26.8 0.1 28.4 0.3 + 14FEB1990 25.9-0.1 26.4 0.0 26.9 0.2 28.5 0.4 + 21FEB1990 26.1-0.1 26.7 0.2 27.1 0.3 28.9 0.8 + 28FEB1990 26.1-0.2 26.7-0.1 27.2 0.3 29.0 0.8 + 07MAR1990 26.7 0.3 26.7-0.2 27.3 0.2 28.9 0.7 + 14MAR1990 26.1-0.4 26.9-0.2 27.3 0.1 28.6 0.4 + 21MAR1990 26.1-0.2 27.2 0.0 27.6 0.3 28.7 0.5 + 28MAR1990 25.7-0.4 27.5 0.2 27.8 0.3 28.8 0.5 + 04APR1990 25.6-0.3 27.6 0.3 27.9 0.4 28.8 0.4 + 11APR1990 25.1-0.6 27.6 0.2 27.9 0.2 28.8 0.3 + 18APR1990 25.3 0.0 27.7 0.2 28.0 0.2 28.9 0.4 + 25APR1990 25.1 0.0 27.7 0.4 28.2 0.4 29.2 0.6 + 02MAY1990 24.6-0.2 27.6 0.3 28.1 0.3 29.0 0.4 + 09MAY1990 24.2-0.2 27.5 0.3 28.1 0.3 28.9 0.2 + 16MAY1990 24.3 0.1 27.4 0.3 28.0 0.2 28.8 0.1 + 23MAY1990 23.7-0.2 27.2 0.2 28.1 0.3 29.0 0.2 + 30MAY1990 23.4-0.1 27.1 0.3 27.9 0.2 28.9 0.1 + 06JUN1990 23.2 0.0 26.7 0.1 27.7 0.0 28.9 0.1 + 13JUN1990 22.8-0.2 26.6 0.1 27.7 0.0 29.0 0.1 + 20JUN1990 22.5-0.1 26.4 0.0 27.5-0.1 29.0 0.1 + 27JUN1990 22.1-0.3 26.0-0.1 27.3-0.2 28.9 0.1 + 04JUL1990 21.7-0.4 25.8-0.2 27.3-0.1 28.9 0.1 + 11JUL1990 21.3-0.5 25.4-0.3 27.2-0.1 28.8 0.0 + 18JUL1990 21.0-0.5 25.7 0.1 27.4 0.2 29.1 0.3 + 25JUL1990 20.2-1.1 25.1-0.4 27.3 0.1 29.1 0.3 + 01AUG1990 20.6-0.6 25.1-0.2 27.1 0.1 29.0 0.3 + 08AUG1990 20.4-0.5 25.2 0.1 27.2 0.3 29.3 0.6 + 15AUG1990 20.4-0.3 25.1 0.1 27.0 0.2 29.2 0.5 + 22AUG1990 19.8-0.7 24.9 0.0 27.0 0.2 29.2 0.5 + 29AUG1990 20.2-0.3 25.0 0.1 26.9 0.2 29.0 0.4 + 05SEP1990 19.7-0.8 24.9 0.0 26.7 0.0 28.9 0.3 + 12SEP1990 20.1-0.3 24.7-0.2 26.7 0.0 29.1 0.4 + 19SEP1990 20.3-0.1 24.9 0.1 26.8 0.0 29.1 0.4 + 26SEP1990 20.3-0.2 24.8-0.1 26.7 0.0 29.0 0.3 + 03OCT1990 20.8 0.1 25.1 0.2 26.9 0.2 29.2 0.5 + 10OCT1990 20.1-0.6 24.9 0.0 27.0 0.3 29.1 0.5 + 17OCT1990 20.3-0.6 24.9 0.0 27.0 0.3 29.3 0.6 + 24OCT1990 20.1-0.9 24.9-0.1 27.0 0.4 29.3 0.6 + 31OCT1990 20.2-1.0 24.7-0.2 26.9 0.2 29.2 0.6 + 07NOV1990 20.5-0.8 25.0 0.1 26.9 0.3 29.1 0.5 + 14NOV1990 20.8-0.8 24.8-0.1 26.7 0.0 29.0 0.4 + 21NOV1990 20.9-0.9 24.6-0.4 26.6 0.0 29.0 0.4 + 28NOV1990 21.5-0.6 24.8-0.3 26.5-0.1 28.9 0.4 + 05DEC1990 22.2-0.2 25.2 0.1 26.9 0.3 29.2 0.7 + 12DEC1990 22.1-0.5 25.0-0.1 26.8 0.3 29.3 0.8 + 19DEC1990 22.2-0.8 24.9-0.3 26.9 0.4 29.2 0.7 + 26DEC1990 23.3 0.0 25.3 0.0 27.0 0.4 29.0 0.6 + 02JAN1991 23.2-0.5 25.3-0.1 26.9 0.4 28.9 0.5 + 09JAN1991 23.5-0.6 25.4-0.1 27.0 0.4 29.1 0.8 + 16JAN1991 23.7-0.7 25.7 0.1 27.0 0.5 29.0 0.8 + 23JAN1991 24.2-0.6 25.8 0.0 27.1 0.5 29.0 0.8 + 30JAN1991 24.7-0.5 26.0 0.0 27.0 0.3 28.9 0.7 + 06FEB1991 25.4-0.2 26.1 0.0 27.0 0.3 28.8 0.6 + 13FEB1991 26.0 0.0 26.3 0.0 27.0 0.3 28.8 0.7 + 20FEB1991 26.5 0.3 26.3-0.2 26.9 0.1 28.7 0.6 + 27FEB1991 26.5 0.2 26.5-0.2 26.8-0.1 28.5 0.4 + 06MAR1991 26.5 0.2 26.6-0.3 26.8-0.2 28.5 0.3 + 13MAR1991 26.8 0.4 27.0-0.1 27.1-0.1 28.5 0.3 + 20MAR1991 26.6 0.2 27.1-0.1 27.4 0.1 28.6 0.4 + 27MAR1991 26.2 0.1 27.4 0.1 27.7 0.3 28.9 0.6 + 03APR1991 25.8-0.1 27.3 0.0 27.8 0.2 28.9 0.5 + 10APR1991 25.2-0.5 27.0-0.4 27.8 0.1 29.1 0.7 + 17APR1991 24.9-0.5 27.5 0.0 28.2 0.4 29.2 0.7 + 24APR1991 24.3-0.8 27.4 0.0 28.1 0.3 29.2 0.6 + 01MAY1991 24.6-0.2 27.6 0.4 28.1 0.3 29.1 0.4 + 08MAY1991 24.4-0.2 27.5 0.3 28.3 0.5 29.3 0.6 + 15MAY1991 24.5 0.2 27.5 0.4 28.4 0.5 29.5 0.7 + 22MAY1991 24.3 0.4 27.7 0.7 28.5 0.7 29.5 0.7 + 29MAY1991 24.2 0.5 27.6 0.8 28.5 0.7 29.5 0.7 + 05JUN1991 23.7 0.4 27.5 0.8 28.3 0.6 29.3 0.5 + 12JUN1991 23.2 0.2 27.4 0.9 28.3 0.6 29.3 0.5 + 19JUN1991 23.0 0.3 27.2 0.9 28.4 0.8 29.4 0.5 + 26JUN1991 22.2-0.2 27.3 1.1 28.4 0.9 29.4 0.6 + 03JUL1991 22.8 0.7 27.0 1.0 28.1 0.7 29.2 0.4 + 10JUL1991 22.3 0.4 26.8 1.0 28.1 0.8 29.2 0.4 + 17JUL1991 21.9 0.3 26.6 1.0 27.9 0.7 29.3 0.5 + 24JUL1991 21.6 0.3 26.2 0.7 27.7 0.5 29.2 0.5 + 31JUL1991 21.6 0.5 26.1 0.8 27.9 0.9 29.5 0.7 + 07AUG1991 21.2 0.3 25.6 0.4 27.5 0.6 29.3 0.6 + 14AUG1991 21.3 0.5 25.4 0.4 27.6 0.7 29.3 0.6 + 21AUG1991 20.9 0.3 25.4 0.5 27.4 0.6 29.3 0.6 + 28AUG1991 20.7 0.2 25.2 0.3 27.0 0.3 29.0 0.3 + 04SEP1991 20.9 0.4 25.1 0.2 27.1 0.3 29.1 0.5 + 11SEP1991 20.7 0.3 24.7-0.1 26.9 0.1 29.0 0.4 + 18SEP1991 20.7 0.3 25.1 0.2 27.2 0.5 29.4 0.7 + 25SEP1991 20.8 0.3 25.2 0.3 27.1 0.4 29.2 0.5 + 02OCT1991 20.8 0.2 25.3 0.4 27.2 0.5 29.3 0.6 + 09OCT1991 21.1 0.4 25.6 0.7 27.7 1.0 29.5 0.8 + 16OCT1991 20.7-0.1 25.5 0.6 27.8 1.1 29.6 1.0 + 23OCT1991 21.2 0.2 25.7 0.8 27.6 0.9 29.4 0.7 + 30OCT1991 21.9 0.7 25.9 1.0 27.8 1.1 29.4 0.8 + 06NOV1991 22.0 0.7 25.8 0.9 27.8 1.1 29.5 0.8 + 13NOV1991 21.9 0.4 25.9 1.0 27.8 1.1 29.5 0.9 + 20NOV1991 22.5 0.7 26.1 1.1 27.9 1.3 29.4 0.8 + 27NOV1991 22.3 0.3 26.1 1.1 28.0 1.4 29.4 0.9 + 04DEC1991 22.8 0.5 26.2 1.1 28.1 1.5 29.4 0.9 + 11DEC1991 23.4 0.8 26.5 1.4 28.3 1.7 29.4 0.9 + 18DEC1991 23.7 0.8 26.6 1.5 28.5 2.0 29.5 1.0 + 25DEC1991 23.6 0.3 26.7 1.4 28.5 1.9 29.6 1.2 + 01JAN1992 24.0 0.3 26.7 1.3 28.5 1.9 29.3 1.0 + 08JAN1992 24.2 0.2 26.8 1.3 28.5 1.9 29.2 0.9 + 15JAN1992 24.6 0.2 26.9 1.3 28.4 1.9 29.1 0.8 + 22JAN1992 25.3 0.5 27.1 1.3 28.4 1.8 29.0 0.7 + 29JAN1992 25.9 0.7 27.4 1.4 28.3 1.7 28.7 0.6 + 05FEB1992 26.3 0.8 27.5 1.3 28.4 1.7 28.8 0.7 + 12FEB1992 26.4 0.5 27.6 1.3 28.6 1.9 29.0 0.9 + 19FEB1992 26.8 0.6 27.8 1.3 28.8 2.0 29.2 1.1 + 26FEB1992 27.3 1.1 27.9 1.2 28.8 1.9 29.1 1.0 + 04MAR1992 27.3 1.0 27.9 1.1 28.6 1.6 29.1 0.9 + 11MAR1992 27.7 1.2 28.1 1.0 28.7 1.6 29.2 1.0 + 18MAR1992 27.9 1.4 28.5 1.3 28.8 1.6 28.9 0.7 + 25MAR1992 28.1 1.9 28.7 1.4 29.0 1.6 29.1 0.8 + 01APR1992 27.9 1.9 28.7 1.3 29.1 1.6 29.4 1.0 + 08APR1992 28.3 2.6 28.8 1.4 29.3 1.6 29.6 1.2 + 15APR1992 28.0 2.5 28.8 1.3 29.2 1.4 29.5 1.0 + 22APR1992 27.1 1.9 28.6 1.2 29.0 1.2 29.3 0.8 + 29APR1992 27.0 2.1 28.8 1.5 29.1 1.2 29.2 0.6 + 06MAY1992 27.0 2.4 28.8 1.6 29.2 1.3 29.4 0.7 + 13MAY1992 26.6 2.3 28.6 1.5 29.1 1.2 29.5 0.8 + 20MAY1992 25.8 1.8 28.2 1.2 29.0 1.1 29.5 0.8 + 27MAY1992 25.9 2.2 28.1 1.3 28.8 1.1 29.5 0.7 + 03JUN1992 24.2 0.9 27.5 0.8 28.6 0.9 29.4 0.6 + 10JUN1992 24.2 1.2 26.8 0.3 28.3 0.6 29.4 0.6 + 17JUN1992 23.9 1.1 26.6 0.2 27.8 0.2 29.2 0.4 + 24JUN1992 23.5 1.0 26.2 0.0 27.6 0.1 29.2 0.4 + 01JUL1992 22.3 0.1 25.8-0.2 27.6 0.1 29.2 0.4 + 08JUL1992 23.0 1.1 26.2 0.4 28.0 0.7 29.5 0.7 + 15JUL1992 21.4-0.3 25.7 0.0 27.7 0.5 29.5 0.7 + 22JUL1992 21.6 0.2 25.1-0.4 27.2 0.0 29.2 0.5 + 29JUL1992 21.5 0.3 24.9-0.5 27.1 0.1 29.2 0.5 + 05AUG1992 20.8-0.2 24.6-0.6 26.7-0.2 29.1 0.4 + 12AUG1992 20.8 0.0 24.9-0.2 26.6-0.3 28.8 0.1 + 19AUG1992 20.3-0.4 24.6-0.4 26.6-0.3 28.8 0.2 + 26AUG1992 20.3-0.3 24.8-0.2 26.7-0.1 28.9 0.3 + 02SEP1992 20.3-0.2 24.4-0.5 26.3-0.4 28.6 0.0 + 09SEP1992 19.7-0.8 24.4-0.5 26.4-0.3 28.7 0.1 + 16SEP1992 20.1-0.2 24.5-0.3 26.5-0.2 28.9 0.2 + 23SEP1992 20.1-0.3 24.6-0.3 26.5-0.2 28.9 0.2 + 30SEP1992 20.2-0.4 24.7-0.2 26.6-0.1 28.7 0.0 + 07OCT1992 20.5-0.2 24.5-0.4 26.4-0.3 28.8 0.1 + 14OCT1992 20.7 0.0 24.6-0.3 26.4-0.3 28.6-0.1 + 21OCT1992 20.9 0.0 24.6-0.4 26.2-0.5 28.8 0.1 + 28OCT1992 21.5 0.4 24.8-0.1 26.2-0.4 28.5-0.1 + 04NOV1992 21.2-0.1 24.7-0.2 26.3-0.4 28.6 0.0 + 11NOV1992 21.2-0.3 24.8-0.1 26.6-0.1 28.8 0.2 + 18NOV1992 21.2-0.5 24.7-0.3 26.4-0.2 28.5-0.1 + 25NOV1992 22.1 0.2 24.9-0.2 26.7 0.0 28.8 0.2 + 02DEC1992 22.2 0.0 24.9-0.2 26.7 0.1 28.9 0.4 + 09DEC1992 22.2-0.3 25.1 0.0 26.8 0.2 28.7 0.2 + 16DEC1992 22.3-0.5 24.9-0.3 26.7 0.1 28.7 0.3 + 23DEC1992 22.5-0.7 25.1-0.2 26.8 0.2 28.9 0.4 + 30DEC1992 23.3-0.2 25.1-0.3 26.6 0.0 28.6 0.2 + 06JAN1993 23.6-0.3 25.4-0.1 26.7 0.1 28.5 0.2 + 13JAN1993 24.4 0.1 25.6 0.0 26.8 0.2 28.7 0.4 + 20JAN1993 24.5-0.2 25.5-0.2 26.6 0.0 28.6 0.3 + 27JAN1993 25.2 0.1 25.8-0.2 26.7 0.0 28.6 0.4 + 03FEB1993 26.2 0.8 26.3 0.2 26.9 0.3 28.5 0.3 + 10FEB1993 26.6 0.7 26.4 0.2 26.8 0.1 28.3 0.2 + 17FEB1993 26.6 0.4 26.9 0.5 27.0 0.2 28.3 0.2 + 24FEB1993 26.6 0.4 26.7 0.1 27.1 0.2 28.5 0.4 + 03MAR1993 26.9 0.6 26.9 0.1 27.2 0.2 28.4 0.3 + 10MAR1993 27.2 0.7 27.3 0.3 27.4 0.3 28.4 0.3 + 17MAR1993 27.1 0.6 27.5 0.3 27.7 0.4 28.6 0.4 + 24MAR1993 27.2 1.0 28.0 0.7 28.0 0.7 28.8 0.5 + 31MAR1993 27.7 1.7 28.3 1.0 28.2 0.7 28.9 0.6 + 07APR1993 26.6 0.9 28.4 1.0 28.3 0.6 28.7 0.3 + 14APR1993 26.3 0.7 28.5 1.0 28.8 1.1 29.0 0.5 + 21APR1993 26.3 1.0 28.4 1.0 28.7 0.9 29.0 0.5 + 28APR1993 26.0 1.1 28.5 1.2 28.8 1.0 29.0 0.4 + 05MAY1993 25.9 1.2 28.5 1.2 28.8 1.0 28.9 0.3 + 12MAY1993 25.6 1.2 28.3 1.2 28.9 1.0 29.1 0.4 + 19MAY1993 24.9 0.8 28.1 1.1 28.8 1.0 29.2 0.4 + 26MAY1993 24.3 0.6 27.9 1.0 28.9 1.1 29.2 0.4 + 02JUN1993 24.5 1.1 27.7 0.9 28.6 0.9 29.2 0.4 + 09JUN1993 23.9 0.7 27.2 0.6 28.3 0.6 29.1 0.2 + 16JUN1993 23.6 0.8 27.1 0.6 28.2 0.6 29.1 0.2 + 23JUN1993 23.8 1.3 26.9 0.7 28.2 0.7 29.3 0.5 + 30JUN1993 23.0 0.7 26.7 0.6 28.1 0.6 29.3 0.5 + 07JUL1993 22.4 0.4 26.1 0.3 27.9 0.6 29.3 0.5 + 14JUL1993 22.2 0.5 25.8 0.1 27.4 0.2 29.2 0.4 + 21JUL1993 22.0 0.6 25.6 0.1 27.5 0.4 29.2 0.4 + 28JUL1993 21.3 0.0 25.3-0.1 27.2 0.1 29.1 0.4 + 04AUG1993 21.2 0.2 25.0-0.3 26.8-0.2 28.9 0.2 + 11AUG1993 20.8 0.0 25.0-0.1 26.9 0.0 29.0 0.3 + 18AUG1993 21.1 0.5 24.8-0.1 26.8 0.0 28.7 0.1 + 25AUG1993 21.2 0.6 24.9 0.0 26.9 0.1 29.1 0.4 + 01SEP1993 20.9 0.4 24.9 0.0 26.9 0.2 29.1 0.4 + 08SEP1993 20.8 0.3 25.0 0.1 26.8 0.1 29.0 0.4 + 15SEP1993 20.8 0.4 24.9 0.0 26.9 0.2 29.1 0.5 + 22SEP1993 21.0 0.5 25.0 0.2 27.0 0.3 29.1 0.4 + 29SEP1993 20.7 0.2 25.1 0.2 27.0 0.3 29.0 0.3 + 06OCT1993 20.6-0.1 25.2 0.3 26.9 0.2 28.8 0.1 + 13OCT1993 20.8 0.0 25.3 0.4 27.0 0.3 29.0 0.3 + 20OCT1993 21.2 0.3 25.0 0.1 26.6 0.0 28.9 0.2 + 27OCT1993 21.3 0.2 25.3 0.4 27.1 0.4 29.0 0.3 + 03NOV1993 22.0 0.8 25.4 0.4 27.2 0.5 29.0 0.3 + 10NOV1993 21.4 0.0 25.1 0.1 26.9 0.2 28.8 0.2 + 17NOV1993 21.7 0.0 25.1 0.2 26.9 0.2 28.9 0.3 + 24NOV1993 21.4-0.5 25.1 0.0 26.7 0.1 29.0 0.5 + 01DEC1993 21.8-0.4 25.3 0.2 26.9 0.3 29.2 0.6 + 08DEC1993 22.1-0.3 25.3 0.2 26.9 0.4 29.0 0.5 + 15DEC1993 23.1 0.4 25.3 0.2 26.8 0.3 28.9 0.4 + 22DEC1993 23.0-0.2 25.3 0.1 26.6 0.1 28.9 0.4 + 29DEC1993 23.3-0.2 25.4 0.0 26.5-0.1 28.6 0.2 + 05JAN1994 23.8 0.0 25.7 0.2 26.7 0.1 28.7 0.3 + 12JAN1994 23.9-0.3 25.7 0.1 26.7 0.2 28.5 0.2 + 19JAN1994 24.6 0.0 25.7-0.1 26.5-0.1 28.5 0.2 + 26JAN1994 24.8-0.2 25.8-0.1 26.5-0.2 28.2 0.0 + 02FEB1994 25.4 0.0 25.9-0.1 26.6 0.0 28.2 0.0 + 09FEB1994 25.9 0.1 26.2 0.0 26.7 0.0 28.1 0.0 + 16FEB1994 25.6-0.5 26.1-0.3 26.6-0.1 28.0 0.0 + 23FEB1994 26.1-0.1 25.9-0.7 26.4-0.5 27.9-0.2 + 02MAR1994 26.2-0.1 26.6-0.2 26.6-0.3 27.9-0.2 + 09MAR1994 25.5-0.9 27.0 0.1 27.2 0.1 28.2 0.1 + 16MAR1994 25.7-0.9 27.0-0.1 27.4 0.2 28.4 0.2 + 23MAR1994 25.0-1.2 26.8-0.4 27.3-0.1 28.3 0.0 + 30MAR1994 24.8-1.3 27.0-0.3 27.7 0.2 28.3 0.0 + 06APR1994 24.9-0.9 27.0-0.4 27.6 0.0 28.5 0.1 + 13APR1994 24.7-0.9 27.2-0.3 28.0 0.2 28.6 0.2 + 20APR1994 24.2-1.1 27.0-0.4 28.0 0.2 28.6 0.1 + 27APR1994 23.4-1.6 27.1-0.2 28.1 0.3 28.7 0.2 + 04MAY1994 23.4-1.3 27.0-0.3 27.9 0.1 28.8 0.1 + 11MAY1994 23.6-0.8 26.8-0.3 27.8 0.0 28.9 0.2 + 18MAY1994 23.0-1.1 27.2 0.1 28.2 0.4 29.0 0.2 + 25MAY1994 23.0-0.8 26.9 0.0 28.1 0.3 29.1 0.3 + 01JUN1994 22.8-0.7 26.9 0.1 28.3 0.5 29.3 0.5 + 08JUN1994 22.7-0.5 26.7 0.1 28.0 0.3 29.1 0.3 + 15JUN1994 22.7-0.1 26.8 0.4 28.2 0.6 29.1 0.3 + 22JUN1994 22.2-0.4 26.2-0.1 27.9 0.3 29.2 0.4 + 29JUN1994 21.7-0.6 25.9-0.2 27.6 0.1 29.2 0.4 + 06JUL1994 21.9-0.1 25.6-0.3 27.4 0.1 29.3 0.5 + 13JUL1994 21.3-0.4 25.2-0.5 27.3 0.1 29.4 0.6 + 20JUL1994 20.9-0.6 25.1-0.4 27.4 0.2 29.5 0.8 + 27JUL1994 20.8-0.5 24.8-0.6 27.2 0.1 29.4 0.6 + 03AUG1994 20.1-1.0 24.5-0.8 27.3 0.3 29.4 0.7 + 10AUG1994 19.2-1.6 24.8-0.3 27.6 0.7 29.5 0.8 + 17AUG1994 19.6-1.1 24.8-0.2 27.4 0.6 29.5 0.9 + 24AUG1994 20.0-0.5 24.8-0.2 27.3 0.5 29.5 0.8 + 31AUG1994 19.6-0.9 24.7-0.2 27.1 0.3 29.4 0.7 + 07SEP1994 20.1-0.4 24.6-0.3 26.9 0.2 29.3 0.6 + 14SEP1994 20.0-0.3 24.6-0.2 26.9 0.1 29.2 0.5 + 21SEP1994 20.5 0.1 24.9 0.0 27.0 0.2 29.2 0.5 + 28SEP1994 20.2-0.3 25.2 0.3 27.2 0.5 29.2 0.6 + 05OCT1994 21.0 0.3 25.4 0.5 27.3 0.6 29.4 0.8 + 12OCT1994 21.7 0.9 25.6 0.7 27.5 0.8 29.4 0.8 + 19OCT1994 21.8 0.9 25.6 0.6 27.5 0.8 29.4 0.8 + 26OCT1994 21.7 0.7 25.6 0.6 27.6 1.0 29.5 0.9 + 02NOV1994 22.1 0.9 25.7 0.7 27.8 1.1 29.6 1.0 + 09NOV1994 22.1 0.7 26.0 1.0 27.9 1.3 29.5 0.9 + 16NOV1994 22.3 0.7 25.8 0.8 27.8 1.1 29.6 1.0 + 23NOV1994 22.8 0.9 25.9 0.9 27.9 1.2 29.7 1.1 + 30NOV1994 22.9 0.7 26.0 0.9 28.0 1.4 29.8 1.3 + 07DEC1994 23.3 0.9 26.0 0.9 27.9 1.3 29.6 1.1 + 14DEC1994 23.4 0.7 25.9 0.8 27.9 1.3 29.5 1.1 + 21DEC1994 23.7 0.6 26.2 1.0 27.9 1.3 29.3 0.9 + 28DEC1994 24.3 0.9 26.3 0.9 27.8 1.3 29.3 0.9 + 04JAN1995 24.7 0.8 26.1 0.7 27.6 1.1 29.3 0.9 + 11JAN1995 25.1 0.9 26.2 0.7 27.6 1.0 29.2 0.9 + 18JAN1995 25.3 0.8 26.4 0.7 27.6 1.0 29.3 1.0 + 25JAN1995 25.9 0.9 26.5 0.6 27.5 0.8 29.1 0.8 + 01FEB1995 26.2 0.9 26.7 0.7 27.4 0.8 29.0 0.9 + 08FEB1995 26.7 0.9 26.9 0.7 27.4 0.7 29.1 1.0 + 15FEB1995 26.5 0.4 26.8 0.4 27.3 0.5 28.9 0.8 + 22FEB1995 26.4 0.2 26.9 0.3 27.5 0.7 29.0 0.9 + 01MAR1995 26.0-0.2 26.9 0.2 27.7 0.7 29.0 0.9 + 08MAR1995 26.0-0.4 26.7-0.2 27.4 0.4 28.9 0.7 + 15MAR1995 26.6 0.1 27.1 0.0 27.7 0.5 29.0 0.9 + 22MAR1995 26.4 0.1 27.2-0.1 27.7 0.3 29.0 0.8 + 29MAR1995 25.4-0.6 27.4 0.1 27.7 0.2 28.8 0.5 + 05APR1995 24.9-1.0 27.2-0.2 27.9 0.3 28.8 0.5 + 12APR1995 24.9-0.7 27.3-0.2 27.8 0.1 28.8 0.4 + 19APR1995 24.6-0.7 27.3-0.2 28.2 0.4 28.9 0.3 + 26APR1995 23.5-1.5 26.6-0.7 27.9 0.1 28.9 0.3 + 03MAY1995 23.3-1.4 26.6-0.6 28.0 0.2 29.2 0.6 + 10MAY1995 23.0-1.4 26.3-0.8 27.7-0.1 29.1 0.4 + 17MAY1995 23.0-1.2 26.2-0.8 27.7-0.2 29.2 0.4 + 24MAY1995 23.2-0.6 26.4-0.5 27.6-0.2 29.1 0.3 + 31MAY1995 22.8-0.7 26.4-0.3 27.7 0.0 29.0 0.2 + 07JUN1995 22.9-0.3 26.4-0.2 27.7 0.0 29.1 0.3 + 14JUN1995 22.9 0.0 26.4-0.1 27.7 0.1 29.1 0.3 + 21JUN1995 21.9-0.7 26.0-0.3 27.5 0.0 28.9 0.1 + 28JUN1995 21.8-0.5 25.8-0.3 27.3-0.1 28.8 0.0 + 05JUL1995 22.0 0.0 25.7-0.2 27.3-0.1 29.0 0.2 + 12JUL1995 21.2-0.5 25.6-0.1 27.1-0.2 28.8 0.0 + 19JUL1995 21.0-0.5 25.3-0.2 26.9-0.3 28.7-0.1 + 26JUL1995 20.8-0.5 25.1-0.3 26.8-0.3 28.6-0.1 + 02AUG1995 20.3-0.8 24.8-0.5 26.7-0.3 28.5-0.2 + 09AUG1995 19.9-1.0 24.3-0.8 26.3-0.6 28.3-0.4 + 16AUG1995 20.0-0.7 24.3-0.7 26.4-0.4 28.5-0.2 + 23AUG1995 19.9-0.7 24.3-0.7 26.3-0.5 28.4-0.2 + 30AUG1995 20.1-0.5 24.0-0.9 25.9-0.8 28.2-0.5 + 06SEP1995 20.4 0.0 24.1-0.8 26.0-0.8 28.2-0.5 + 13SEP1995 19.9-0.5 24.1-0.8 26.0-0.7 28.0-0.6 + 20SEP1995 20.2-0.2 24.0-0.9 26.1-0.7 28.4-0.3 + 27SEP1995 20.2-0.3 23.9-1.0 25.9-0.8 28.4-0.3 + 04OCT1995 19.6-1.0 23.9-1.0 25.6-1.1 28.1-0.5 + 11OCT1995 20.2-0.5 24.1-0.8 25.6-1.1 28.0-0.6 + 18OCT1995 20.0-0.8 24.1-0.9 25.8-0.9 28.2-0.5 + 25OCT1995 20.3-0.7 24.0-0.9 25.6-1.1 27.9-0.8 + 01NOV1995 21.0-0.2 24.1-0.8 25.6-1.0 28.0-0.7 + 08NOV1995 20.6-0.8 23.9-1.1 25.8-0.9 28.1-0.5 + 15NOV1995 21.3-0.2 24.1-0.9 25.7-1.0 27.8-0.8 + 22NOV1995 21.4-0.4 24.1-0.9 25.5-1.1 27.7-0.9 + 29NOV1995 21.6-0.5 24.1-1.0 25.7-0.9 28.1-0.5 + 06DEC1995 21.5-0.9 24.1-1.0 25.6-1.0 27.9-0.6 + 13DEC1995 21.7-1.0 24.0-1.1 25.4-1.2 27.9-0.5 + 20DEC1995 22.0-1.0 24.1-1.1 25.6-1.0 28.1-0.3 + 27DEC1995 22.8-0.6 24.5-0.8 25.7-0.9 28.1-0.3 + 03JAN1996 23.4-0.4 24.6-0.8 25.6-1.0 28.1-0.3 + 10JAN1996 23.6-0.6 24.9-0.6 25.6-1.0 27.9-0.4 + 17JAN1996 24.0-0.5 25.2-0.5 25.9-0.7 27.8-0.5 + 24JAN1996 23.9-1.0 25.0-0.8 25.9-0.7 27.9-0.4 + 31JAN1996 24.6-0.7 25.2-0.8 25.8-0.9 27.8-0.4 + 07FEB1996 25.4-0.3 25.4-0.8 25.6-1.1 27.5-0.6 + 14FEB1996 25.9-0.1 25.7-0.6 25.8-0.9 27.5-0.5 + 21FEB1996 26.0-0.2 25.9-0.6 25.8-1.0 27.4-0.7 + 28FEB1996 26.1-0.2 26.3-0.5 26.3-0.6 27.5-0.6 + 06MAR1996 26.6 0.2 26.5-0.4 26.2-0.8 27.5-0.6 + 13MAR1996 26.1-0.3 26.9-0.2 26.6-0.6 27.7-0.5 + 20MAR1996 26.3-0.1 27.0-0.2 26.8-0.5 27.7-0.5 + 27MAR1996 25.7-0.4 26.7-0.6 26.8-0.6 27.8-0.4 + 03APR1996 24.4-1.5 26.5-0.9 27.0-0.6 27.9-0.5 + 10APR1996 23.9-1.7 27.0-0.4 27.4-0.3 27.9-0.5 + 17APR1996 23.8-1.6 26.8-0.7 27.3-0.4 28.0-0.5 + 24APR1996 23.6-1.5 26.7-0.7 27.6-0.1 28.2-0.3 + 01MAY1996 23.0-1.9 26.4-0.9 27.4-0.4 28.2-0.4 + 08MAY1996 23.0-1.6 26.5-0.7 27.6-0.2 28.4-0.3 + 15MAY1996 23.0-1.3 26.3-0.8 27.3-0.5 28.3-0.4 + 22MAY1996 23.0-0.9 26.2-0.7 27.2-0.6 28.5-0.3 + 29MAY1996 22.6-1.1 26.2-0.6 27.3-0.4 28.6-0.2 + 05JUN1996 22.3-1.0 26.0-0.6 27.3-0.4 28.6-0.3 + 12JUN1996 21.9-1.0 26.0-0.5 27.3-0.4 28.5-0.4 + 19JUN1996 21.4-1.3 25.8-0.6 27.3-0.3 28.4-0.4 + 26JUN1996 20.6-1.8 25.7-0.5 27.3-0.2 28.6-0.2 + 03JUL1996 20.4-1.7 25.9 0.0 27.6 0.2 28.6-0.2 + 10JUL1996 20.1-1.8 25.4-0.3 27.1-0.2 28.5-0.3 + 17JUL1996 20.0-1.6 25.4-0.2 27.1-0.1 28.3-0.5 + 24JUL1996 20.2-1.2 25.1-0.4 26.9-0.2 28.5-0.3 + 31JUL1996 19.2-1.9 24.7-0.6 26.6-0.4 28.4-0.3 + 07AUG1996 19.2-1.7 24.8-0.4 26.7-0.3 28.5-0.2 + 14AUG1996 20.0-0.8 24.6-0.5 26.5-0.4 28.6 0.0 + 21AUG1996 20.1-0.5 24.6-0.3 26.5-0.3 28.6-0.1 + 28AUG1996 18.9-1.6 24.4-0.6 26.5-0.2 28.4-0.3 + 04SEP1996 19.1-1.3 24.3-0.6 26.4-0.4 28.5-0.2 + 11SEP1996 19.4-1.0 24.4-0.5 26.2-0.5 28.3-0.4 + 18SEP1996 19.1-1.3 24.3-0.5 26.4-0.3 28.5-0.2 + 25SEP1996 19.3-1.2 24.4-0.4 26.3-0.4 28.4-0.3 + 02OCT1996 19.5-1.2 24.5-0.4 26.2-0.5 28.3-0.4 + 09OCT1996 19.5-1.3 24.3-0.6 26.2-0.5 28.5-0.2 + 16OCT1996 20.2-0.6 24.4-0.5 26.3-0.3 28.5-0.1 + 23OCT1996 20.5-0.5 24.4-0.6 26.2-0.5 28.3-0.3 + 30OCT1996 20.0-1.1 24.3-0.7 26.1-0.5 28.3-0.3 + 06NOV1996 20.2-1.2 24.4-0.6 26.1-0.5 28.1-0.5 + 13NOV1996 20.1-1.4 24.4-0.6 26.2-0.5 28.3-0.3 + 20NOV1996 20.3-1.5 24.4-0.6 26.3-0.3 28.4-0.1 + 27NOV1996 20.4-1.6 24.3-0.7 26.2-0.4 28.3-0.2 + 04DEC1996 20.8-1.5 24.4-0.7 26.3-0.3 28.5 0.0 + 11DEC1996 21.6-1.0 24.1-1.0 26.1-0.5 28.6 0.1 + 18DEC1996 21.6-1.3 24.2-1.0 25.9-0.6 28.3-0.1 + 25DEC1996 22.1-1.1 24.1-1.1 25.9-0.7 28.3-0.1 + 01JAN1997 22.5-1.2 24.3-1.1 25.8-0.8 28.2-0.2 + 08JAN1997 23.0-1.0 24.5-1.0 25.9-0.6 28.4 0.1 + 15JAN1997 23.6-0.8 24.6-1.0 25.8-0.7 28.4 0.1 + 22JAN1997 24.3-0.5 24.8-1.0 25.9-0.7 28.4 0.2 + 29JAN1997 24.6-0.6 25.1-0.8 26.3-0.4 28.4 0.2 + 05FEB1997 25.3-0.2 25.2-0.9 26.2-0.5 28.4 0.2 + 12FEB1997 25.4-0.6 25.8-0.5 26.4-0.3 28.3 0.2 + 19FEB1997 26.3 0.1 25.9-0.6 26.4-0.4 28.2 0.1 + 26FEB1997 26.2-0.1 26.2-0.4 26.5-0.4 28.2 0.1 + 05MAR1997 26.8 0.5 26.6-0.3 26.6-0.4 28.1 0.0 + 12MAR1997 26.9 0.5 26.8-0.3 26.8-0.4 28.3 0.1 + 19MAR1997 27.0 0.6 27.3 0.1 27.4 0.1 28.5 0.3 + 26MAR1997 27.2 1.0 27.4 0.1 27.3-0.1 28.9 0.7 + 02APR1997 27.0 1.1 27.3-0.1 27.5 0.0 29.2 0.8 + 09APR1997 26.4 0.7 27.3-0.1 27.8 0.2 29.2 0.8 + 16APR1997 26.5 1.1 27.6 0.1 28.0 0.3 29.3 0.8 + 23APR1997 26.6 1.4 27.8 0.4 28.4 0.6 29.5 0.9 + 30APR1997 26.8 1.9 28.0 0.7 28.4 0.6 29.5 0.8 + 07MAY1997 26.8 2.2 28.2 1.0 28.6 0.8 29.4 0.8 + 14MAY1997 26.7 2.4 28.0 0.9 28.5 0.6 29.3 0.6 + 21MAY1997 26.6 2.6 27.9 1.0 28.6 0.8 29.5 0.7 + 28MAY1997 26.8 3.1 28.1 1.3 28.8 1.0 29.5 0.7 + 04JUN1997 26.4 3.1 28.0 1.3 28.8 1.1 29.4 0.6 + 11JUN1997 26.5 3.5 28.1 1.6 28.9 1.2 29.3 0.5 + 18JUN1997 26.0 3.3 28.2 1.8 29.0 1.4 29.4 0.6 + 25JUN1997 26.2 3.7 28.2 2.0 29.1 1.6 29.5 0.7 + 02JUL1997 25.9 3.7 28.1 2.1 29.0 1.5 29.4 0.6 + 09JUL1997 25.7 3.8 28.0 2.2 28.9 1.6 29.5 0.7 + 16JUL1997 25.7 4.1 28.1 2.5 29.0 1.8 29.5 0.7 + 23JUL1997 25.5 4.1 27.9 2.4 28.8 1.7 29.5 0.8 + 30JUL1997 25.2 4.0 27.9 2.6 28.9 1.9 29.5 0.8 + 06AUG1997 25.3 4.3 27.8 2.6 28.8 1.8 29.4 0.7 + 13AUG1997 25.4 4.6 27.9 2.9 28.9 2.0 29.3 0.6 + 20AUG1997 24.2 3.6 27.9 2.9 28.9 2.1 29.2 0.5 + 27AUG1997 24.3 3.7 27.7 2.7 28.8 2.0 29.2 0.5 + 03SEP1997 24.6 4.2 27.8 2.9 28.9 2.1 29.2 0.6 + 10SEP1997 24.6 4.2 27.8 2.9 28.9 2.2 29.3 0.6 + 17SEP1997 24.2 3.8 27.8 2.9 28.9 2.2 29.3 0.6 + 24SEP1997 24.4 3.9 27.9 3.0 28.9 2.2 29.5 0.8 + 01OCT1997 24.1 3.5 28.0 3.1 29.1 2.4 29.4 0.7 + 08OCT1997 24.5 3.8 28.1 3.2 29.2 2.6 29.3 0.6 + 15OCT1997 24.5 3.7 28.1 3.2 29.2 2.5 29.3 0.7 + 22OCT1997 24.9 3.9 28.2 3.3 29.3 2.6 29.5 0.8 + 29OCT1997 24.7 3.6 28.3 3.4 29.2 2.6 29.2 0.6 + 05NOV1997 25.0 3.7 28.4 3.4 29.2 2.6 29.2 0.6 + 12NOV1997 25.8 4.3 28.5 3.6 29.3 2.7 29.5 0.8 + 19NOV1997 25.8 4.1 28.6 3.6 29.3 2.7 29.7 1.1 + 26NOV1997 25.9 3.9 28.7 3.7 29.4 2.8 29.7 1.1 + 03DEC1997 26.2 3.9 28.6 3.6 29.2 2.6 29.4 0.9 + 10DEC1997 26.7 4.2 28.7 3.6 29.2 2.7 29.4 0.9 + 17DEC1997 27.0 4.1 28.8 3.6 29.3 2.7 29.3 0.8 + 24DEC1997 27.2 4.0 28.8 3.5 29.3 2.7 29.3 0.9 + 31DEC1997 27.7 4.1 28.9 3.5 29.2 2.7 29.2 0.8 + 07JAN1998 28.0 4.0 28.9 3.4 29.2 2.6 29.1 0.8 + 14JAN1998 28.4 4.0 28.9 3.3 29.1 2.5 29.0 0.7 + 21JAN1998 28.4 3.7 28.9 3.2 29.0 2.4 28.9 0.7 + 28JAN1998 28.3 3.2 29.1 3.1 29.1 2.4 28.9 0.7 + 04FEB1998 28.9 3.4 29.1 3.0 29.2 2.5 29.0 0.9 + 11FEB1998 28.9 3.0 29.0 2.7 29.0 2.3 29.0 0.9 + 18FEB1998 29.1 3.0 28.8 2.3 28.7 1.9 28.8 0.7 + 25FEB1998 29.1 2.9 28.9 2.2 28.6 1.7 28.8 0.7 + 04MAR1998 29.2 2.8 29.0 2.2 28.5 1.5 28.6 0.4 + 11MAR1998 29.2 2.8 29.1 2.1 28.7 1.6 28.8 0.7 + 18MAR1998 29.2 2.7 29.1 2.0 28.6 1.4 28.6 0.4 + 25MAR1998 29.1 2.8 29.2 2.0 28.8 1.5 28.6 0.4 + 01APR1998 29.1 3.1 29.3 1.9 28.7 1.2 28.6 0.2 + 08APR1998 28.8 3.0 29.2 1.8 28.6 1.0 28.5 0.0 + 15APR1998 28.6 3.1 29.1 1.6 28.4 0.6 28.5 0.0 + 22APR1998 28.4 3.2 29.0 1.6 28.5 0.7 28.5-0.1 + 29APR1998 28.3 3.4 28.9 1.6 28.7 0.8 28.7 0.1 + 06MAY1998 27.8 3.2 29.4 2.1 29.1 1.3 28.7 0.1 + 13MAY1998 28.1 3.8 28.7 1.6 28.8 0.9 28.7-0.1 + 20MAY1998 27.9 3.9 27.6 0.7 28.3 0.5 28.6-0.2 + 27MAY1998 27.0 3.3 27.1 0.2 27.9 0.1 28.8 0.0 + 03JUN1998 26.2 2.8 26.1-0.6 27.1-0.6 28.7-0.1 + 10JUN1998 26.1 3.0 26.2-0.3 26.9-0.8 28.6-0.2 + 17JUN1998 24.6 1.8 25.8-0.6 26.7-1.0 28.7-0.1 + 24JUN1998 24.5 2.0 26.0-0.2 26.4-1.1 28.5-0.3 + 01JUL1998 24.1 1.9 25.7-0.3 26.4-1.1 28.3-0.5 + 08JUL1998 23.6 1.7 25.6-0.2 26.2-1.2 28.2-0.6 + 15JUL1998 23.6 2.0 25.3-0.4 25.9-1.4 28.1-0.7 + 22JUL1998 23.0 1.5 24.9-0.6 25.7-1.4 28.0-0.8 + 29JUL1998 23.2 2.0 24.9-0.5 25.7-1.4 27.8-1.0 + 05AUG1998 22.6 1.7 24.8-0.4 25.6-1.4 27.9-0.8 + 12AUG1998 21.8 1.1 24.6-0.5 25.5-1.4 27.8-0.9 + 19AUG1998 21.3 0.7 24.4-0.6 25.2-1.6 27.6-1.0 + 26AUG1998 21.2 0.7 24.7-0.3 25.6-1.2 27.6-1.0 + 02SEP1998 21.1 0.6 24.5-0.4 25.6-1.2 27.8-0.8 + 09SEP1998 20.9 0.5 24.3-0.6 25.9-0.8 28.3-0.4 + 16SEP1998 21.0 0.7 24.2-0.7 25.7-1.0 28.0-0.7 + 23SEP1998 20.5 0.1 24.1-0.7 25.5-1.2 27.6-1.1 + 30SEP1998 20.9 0.3 23.7-1.2 25.1-1.6 27.2-1.4 + 07OCT1998 20.9 0.2 23.9-1.0 25.3-1.4 27.5-1.2 + 14OCT1998 21.2 0.4 24.1-0.8 25.4-1.3 27.3-1.4 + 21OCT1998 21.1 0.1 24.1-0.8 25.3-1.4 27.2-1.5 + 28OCT1998 21.6 0.5 24.2-0.7 25.5-1.2 27.3-1.3 + 04NOV1998 21.4 0.1 24.4-0.6 25.2-1.5 27.2-1.4 + 11NOV1998 21.0-0.4 24.0-0.9 25.2-1.5 27.2-1.4 + 18NOV1998 21.7 0.0 24.1-0.9 25.2-1.4 27.1-1.5 + 25NOV1998 21.5-0.5 24.0-1.0 25.1-1.5 27.2-1.4 + 02DEC1998 21.7-0.5 23.9-1.2 25.1-1.5 27.3-1.2 + 09DEC1998 22.0-0.5 23.8-1.3 24.8-1.8 27.2-1.2 + 16DEC1998 22.5-0.3 23.9-1.3 24.7-1.8 27.1-1.4 + 23DEC1998 23.3 0.2 23.8-1.4 24.6-1.9 27.0-1.4 + 30DEC1998 23.2-0.4 23.9-1.5 24.7-1.9 26.7-1.7 + 06JAN1999 23.4-0.5 24.1-1.4 24.7-1.9 26.7-1.7 + 13JAN1999 23.7-0.6 24.2-1.4 25.0-1.6 26.8-1.5 + 20JAN1999 23.3-1.4 24.5-1.3 25.0-1.6 26.4-1.8 + 27JAN1999 24.5-0.6 24.9-1.0 25.0-1.6 26.2-2.0 + 03FEB1999 24.8-0.6 25.1-1.0 25.2-1.5 26.6-1.6 + 10FEB1999 25.1-0.7 25.0-1.2 25.2-1.5 26.5-1.6 + 17FEB1999 25.5-0.6 25.5-0.9 25.5-1.3 26.3-1.7 + 24FEB1999 26.8 0.6 26.4-0.2 25.7-1.2 26.4-1.7 + 03MAR1999 27.4 1.1 26.7-0.1 26.1-0.9 26.8-1.3 + 10MAR1999 27.0 0.6 26.6-0.4 26.1-1.0 26.7-1.5 + 17MAR1999 26.4 0.0 26.7-0.4 26.2-1.0 26.9-1.2 + 24MAR1999 26.3 0.0 26.7-0.6 26.5-0.9 27.0-1.2 + 31MAR1999 25.8-0.3 26.6-0.7 26.5-1.0 27.0-1.3 + 07APR1999 24.4-1.3 26.7-0.7 26.7-0.9 27.1-1.3 + 14APR1999 24.6-0.9 26.5-0.9 26.8-0.9 27.3-1.1 + 21APR1999 23.8-1.4 26.7-0.7 27.0-0.8 27.4-1.1 + 28APR1999 23.7-1.3 26.8-0.6 27.0-0.8 27.5-1.1 + 05MAY1999 23.6-1.1 26.6-0.6 27.0-0.8 27.8-0.9 + 12MAY1999 23.7-0.7 26.7-0.4 27.1-0.7 27.9-0.8 + 19MAY1999 23.7-0.4 26.5-0.5 26.9-0.9 27.8-0.9 + 26MAY1999 23.2-0.6 26.1-0.8 26.9-0.9 27.9-0.9 + 02JUN1999 22.5-0.9 25.8-0.9 26.7-1.1 28.0-0.8 + 09JUN1999 22.4-0.8 25.8-0.7 26.6-1.1 27.9-0.9 + 16JUN1999 21.6-1.2 25.6-0.9 26.6-1.1 28.0-0.9 + 23JUN1999 21.3-1.2 25.4-0.8 26.5-1.0 28.0-0.8 + 30JUN1999 21.3-1.0 25.3-0.8 26.6-0.8 28.1-0.7 + 07JUL1999 20.4-1.5 25.2-0.7 26.6-0.7 28.1-0.7 + 14JUL1999 20.4-1.3 24.9-0.7 26.4-0.8 27.8-1.0 + 21JUL1999 20.3-1.1 24.8-0.7 26.2-0.9 27.8-1.0 + 28JUL1999 20.2-1.0 24.4-1.0 26.0-1.0 27.8-0.9 + 04AUG1999 20.2-0.8 24.3-0.9 26.0-1.0 27.8-0.9 + 11AUG1999 19.7-1.1 24.1-1.0 25.6-1.3 27.7-1.0 + 18AUG1999 19.5-1.1 23.9-1.1 25.4-1.4 27.8-0.9 + 25AUG1999 19.7-0.9 24.0-1.0 25.5-1.3 27.6-1.1 + 01SEP1999 19.5-1.0 23.6-1.3 25.4-1.4 27.6-1.0 + 08SEP1999 19.2-1.2 23.7-1.2 25.7-1.1 27.7-0.9 + 15SEP1999 18.9-1.5 23.6-1.3 25.7-1.0 27.7-0.9 + 22SEP1999 19.3-1.2 23.8-1.1 25.8-0.9 27.9-0.7 + 29SEP1999 19.5-1.1 24.0-0.8 25.9-0.8 27.8-0.8 + 06OCT1999 19.7-0.9 23.6-1.3 25.7-1.0 27.9-0.8 + 13OCT1999 20.1-0.7 23.7-1.2 25.8-0.9 28.0-0.6 + 20OCT1999 20.0-1.0 23.7-1.2 25.6-1.0 27.8-0.9 + 27OCT1999 20.6-0.5 23.8-1.1 25.4-1.3 27.7-1.0 + 03NOV1999 20.1-1.2 23.6-1.3 25.4-1.3 27.6-1.0 + 10NOV1999 20.1-1.3 23.7-1.2 25.4-1.3 27.5-1.1 + 17NOV1999 20.6-1.0 23.5-1.5 25.2-1.5 27.6-1.0 + 24NOV1999 20.9-1.1 23.1-1.9 24.7-1.9 27.4-1.1 + 01DEC1999 21.0-1.2 23.1-1.9 24.9-1.7 27.3-1.2 + 08DEC1999 21.1-1.4 23.6-1.5 25.1-1.4 27.3-1.2 + 15DEC1999 21.3-1.4 23.4-1.7 24.9-1.7 27.1-1.4 + 22DEC1999 22.0-1.1 23.8-1.4 24.9-1.6 27.1-1.3 + 29DEC1999 23.0-0.5 23.6-1.8 24.6-1.9 27.2-1.2 + 05JAN2000 23.2-0.6 23.4-2.1 24.5-2.0 27.0-1.3 + 12JAN2000 23.8-0.4 23.9-1.7 24.7-1.9 26.9-1.4 + 19JAN2000 23.7-0.9 24.0-1.7 24.8-1.8 26.9-1.4 + 26JAN2000 24.0-1.0 24.0-1.8 24.6-2.0 26.9-1.3 + 02FEB2000 25.0-0.4 24.7-1.3 24.8-1.9 26.7-1.5 + 09FEB2000 25.1-0.7 25.3-0.9 25.1-1.6 26.6-1.5 + 16FEB2000 25.6-0.5 25.5-0.9 25.4-1.4 26.7-1.4 + 23FEB2000 26.2 0.0 25.4-1.2 25.2-1.6 26.6-1.5 + 01MAR2000 26.4 0.1 25.7-1.0 25.5-1.5 26.5-1.6 + 08MAR2000 26.6 0.2 26.2-0.8 25.7-1.4 26.6-1.5 + 15MAR2000 26.2-0.3 26.5-0.6 26.0-1.2 26.7-1.5 + 22MAR2000 25.3-1.0 26.9-0.3 26.3-1.1 26.7-1.5 + 29MAR2000 25.6-0.5 27.5 0.2 26.8-0.7 27.0-1.3 + 05APR2000 25.7-0.1 27.6 0.2 27.0-0.6 27.2-1.2 + 12APR2000 26.1 0.5 27.4-0.1 26.9-0.8 27.3-1.2 + 19APR2000 25.6 0.3 27.5 0.0 27.0-0.8 27.4-1.1 + 26APR2000 25.3 0.3 27.5 0.1 27.1-0.7 27.5-1.0 + 03MAY2000 24.9 0.2 27.3 0.0 27.1-0.7 27.5-1.1 + 10MAY2000 24.3-0.1 27.2 0.0 27.1-0.7 27.7-1.0 + 17MAY2000 23.9-0.3 26.6-0.4 27.1-0.8 27.8-1.0 + 24MAY2000 23.2-0.6 26.4-0.5 27.1-0.7 28.0-0.8 + 31MAY2000 23.2-0.3 26.3-0.4 27.2-0.5 28.1-0.7 + 07JUN2000 22.6-0.6 26.0-0.7 27.0-0.7 28.0-0.8 + 14JUN2000 22.4-0.5 25.9-0.6 27.1-0.6 28.1-0.7 + 21JUN2000 21.7-0.9 25.8-0.5 27.0-0.6 28.2-0.7 + 28JUN2000 21.4-0.9 25.5-0.6 26.9-0.6 28.0-0.8 + 05JUL2000 21.0-1.0 25.6-0.3 26.9-0.5 28.0-0.8 + 12JUL2000 20.6-1.2 25.2-0.5 26.8-0.5 28.1-0.7 + 19JUL2000 20.3-1.2 24.9-0.6 26.7-0.5 28.2-0.5 + 26JUL2000 20.2-1.1 24.9-0.5 26.5-0.6 28.3-0.4 + 02AUG2000 20.2-0.8 24.7-0.5 26.6-0.4 28.4-0.3 + 09AUG2000 20.1-0.8 24.5-0.6 26.6-0.3 28.4-0.3 + 16AUG2000 20.5-0.2 24.4-0.6 26.4-0.4 28.3-0.3 + 23AUG2000 20.1-0.5 24.3-0.7 26.3-0.5 28.1-0.5 + 30AUG2000 19.3-1.2 24.5-0.4 26.4-0.4 28.2-0.4 + 06SEP2000 20.2-0.3 24.4-0.4 26.3-0.5 28.4-0.2 + 13SEP2000 19.7-0.7 24.3-0.6 26.1-0.6 28.4-0.2 + 20SEP2000 20.1-0.3 24.2-0.6 26.1-0.6 28.5-0.2 + 27SEP2000 19.9-0.6 24.4-0.5 26.3-0.4 28.4-0.3 + 04OCT2000 20.2-0.5 24.7-0.2 26.1-0.6 28.1-0.5 + 11OCT2000 20.2-0.5 24.4-0.5 26.0-0.6 28.2-0.4 + 18OCT2000 20.5-0.3 24.3-0.6 25.9-0.8 28.1-0.5 + 25OCT2000 20.7-0.4 24.3-0.6 25.9-0.8 28.1-0.6 + 01NOV2000 20.6-0.6 24.2-0.8 25.6-1.1 28.0-0.6 + 08NOV2000 20.6-0.8 24.0-1.0 25.6-1.1 28.1-0.6 + 15NOV2000 20.3-1.3 24.2-0.7 25.9-0.7 28.2-0.4 + 22NOV2000 20.2-1.7 24.1-0.9 25.9-0.7 28.1-0.5 + 29NOV2000 21.4-0.7 24.4-0.6 25.9-0.7 27.8-0.7 + 06DEC2000 21.8-0.6 24.4-0.7 25.6-1.0 27.5-1.1 + 13DEC2000 22.4-0.2 24.5-0.6 25.6-1.0 27.6-0.9 + 20DEC2000 22.4-0.6 24.4-0.8 25.6-1.0 27.6-0.8 + 27DEC2000 22.2-1.2 24.4-1.0 25.5-1.0 27.5-0.9 + 03JAN2001 22.8-0.9 24.5-0.9 25.6-1.0 27.5-0.8 + 10JAN2001 23.3-0.8 24.7-0.8 25.6-1.0 27.5-0.9 + 17JAN2001 23.7-0.8 25.1-0.6 25.8-0.8 27.5-0.8 + 24JAN2001 24.6-0.3 25.3-0.5 25.9-0.8 27.4-0.8 + 31JAN2001 25.2 0.0 25.4-0.6 26.0-0.7 27.3-0.9 + 07FEB2001 25.6-0.1 25.8-0.4 25.9-0.8 27.1-1.0 + 14FEB2001 25.6-0.4 25.9-0.5 26.0-0.7 27.2-0.9 + 21FEB2001 26.0-0.2 26.4-0.1 26.3-0.6 27.3-0.8 + 28FEB2001 26.7 0.4 26.7 0.0 26.4-0.5 27.4-0.8 + 07MAR2001 27.2 0.8 27.1 0.2 26.6-0.5 27.4-0.7 + 14MAR2001 27.3 0.8 27.2 0.1 26.8-0.4 27.6-0.6 + 21MAR2001 27.6 1.3 27.4 0.2 27.1-0.2 27.7-0.6 + 28MAR2001 27.7 1.6 27.4 0.2 27.0-0.4 27.8-0.5 + 04APR2001 27.3 1.5 27.6 0.2 27.3-0.3 27.9-0.4 + 11APR2001 27.2 1.6 27.7 0.3 27.6-0.1 28.1-0.3 + 18APR2001 26.2 0.8 27.7 0.2 27.7-0.1 28.3-0.2 + 25APR2001 25.9 0.8 27.2-0.1 27.6-0.2 28.2-0.3 + 02MAY2001 24.2-0.6 27.1-0.2 27.5-0.3 28.3-0.3 + 09MAY2001 23.9-0.6 27.0-0.1 27.6-0.2 28.6-0.1 + 16MAY2001 23.6-0.6 26.7-0.4 27.5-0.3 28.6-0.1 + 23MAY2001 23.3-0.6 26.9-0.1 27.7-0.1 28.8 0.0 + 30MAY2001 23.1-0.5 26.7 0.0 27.7-0.1 28.8 0.0 + 06JUN2001 22.1-1.2 26.7 0.1 27.8 0.1 28.8 0.0 + 13JUN2001 21.7-1.3 26.3-0.1 27.7 0.0 28.8 0.0 + 20JUN2001 21.5-1.2 26.3 0.0 27.7 0.1 28.8-0.1 + 27JUN2001 20.7-1.6 25.9-0.2 27.6 0.1 28.9 0.1 + 04JUL2001 20.7-1.4 25.6-0.3 27.5 0.1 29.0 0.2 + 11JUL2001 21.2-0.6 25.5-0.2 27.4 0.1 29.0 0.2 + 18JUL2001 20.9-0.7 25.5-0.1 27.3 0.1 29.1 0.3 + 25JUL2001 20.7-0.6 25.2-0.2 27.2 0.1 29.1 0.3 + 01AUG2001 20.3-0.8 25.0-0.3 27.2 0.1 29.1 0.4 + 08AUG2001 20.1-0.8 25.0-0.1 27.0 0.1 28.9 0.2 + 15AUG2001 19.8-0.9 24.7-0.3 26.8 0.0 28.9 0.2 + 22AUG2001 19.8-0.8 24.6-0.3 26.8 0.0 28.9 0.2 + 29AUG2001 19.7-0.9 24.3-0.6 26.6-0.2 29.0 0.4 + 05SEP2001 19.6-0.8 24.4-0.5 26.6-0.1 29.2 0.5 + 12SEP2001 19.1-1.3 24.2-0.7 26.6-0.2 29.1 0.4 + 19SEP2001 19.4-1.0 24.2-0.6 26.5-0.2 29.2 0.5 + 26SEP2001 19.6-0.9 24.3-0.6 26.5-0.2 29.1 0.4 + 03OCT2001 19.2-1.4 24.4-0.5 26.5-0.2 28.9 0.3 + 10OCT2001 19.6-1.1 24.4-0.5 26.5-0.2 29.0 0.4 + 17OCT2001 19.4-1.4 24.5-0.4 26.6 0.0 29.0 0.3 + 24OCT2001 19.6-1.4 24.5-0.4 26.6 0.0 29.1 0.4 + 31OCT2001 19.9-1.3 24.5-0.5 26.6 0.0 28.9 0.3 + 07NOV2001 20.3-1.1 24.3-0.7 26.6-0.1 29.1 0.5 + 14NOV2001 20.1-1.5 24.3-0.7 26.5-0.1 29.0 0.4 + 21NOV2001 20.6-1.2 24.3-0.7 26.3-0.3 28.8 0.2 + 28NOV2001 21.4-0.7 24.4-0.6 26.3-0.3 28.7 0.2 + 05DEC2001 21.4-1.0 24.5-0.6 26.1-0.5 28.6 0.1 + 12DEC2001 21.6-1.1 24.5-0.7 26.1-0.4 28.6 0.1 + 19DEC2001 22.0-0.9 24.6-0.5 26.2-0.4 28.5 0.0 + 26DEC2001 22.5-0.8 24.8-0.5 26.2-0.3 28.6 0.2 + 02JAN2002 23.2-0.5 24.8-0.7 26.2-0.4 28.6 0.2 + 09JAN2002 23.3-0.8 25.0-0.5 26.5-0.1 28.8 0.5 + 16JAN2002 23.5-1.0 25.0-0.7 26.4-0.1 28.9 0.6 + 23JAN2002 23.8-1.1 25.3-0.5 26.6 0.0 28.9 0.6 + 30JAN2002 24.3-0.9 25.5-0.5 26.7 0.1 28.7 0.6 + 06FEB2002 25.4-0.2 26.0-0.2 26.9 0.3 28.8 0.7 + 13FEB2002 25.9-0.1 26.2-0.2 27.0 0.3 28.9 0.8 + 20FEB2002 26.3 0.1 26.4-0.1 26.8 0.0 28.6 0.5 + 27FEB2002 27.4 1.1 26.7 0.0 27.1 0.1 28.6 0.5 + 06MAR2002 27.1 0.8 27.1 0.2 27.2 0.1 28.5 0.4 + 13MAR2002 27.6 1.2 27.2 0.1 27.3 0.1 28.6 0.4 + 20MAR2002 27.8 1.4 27.3 0.1 27.4 0.1 28.8 0.6 + 27MAR2002 27.4 1.3 27.4 0.2 27.4 0.0 28.7 0.5 + 03APR2002 27.1 1.2 27.6 0.2 27.7 0.2 28.8 0.5 + 10APR2002 27.1 1.5 27.8 0.4 28.0 0.3 29.0 0.6 + 17APR2002 26.3 0.9 27.6 0.1 27.9 0.2 29.1 0.6 + 24APR2002 25.4 0.3 27.3 0.0 28.0 0.2 29.3 0.7 + 01MAY2002 25.4 0.6 27.4 0.1 28.0 0.2 29.2 0.6 + 08MAY2002 25.0 0.5 27.3 0.1 28.0 0.2 29.2 0.5 + 15MAY2002 24.5 0.2 27.2 0.1 28.0 0.1 29.4 0.6 + 22MAY2002 24.4 0.5 27.1 0.2 28.3 0.4 29.6 0.8 + 29MAY2002 24.5 0.9 27.4 0.5 28.4 0.7 29.7 0.9 + 05JUN2002 23.5 0.2 27.3 0.6 28.6 0.9 29.8 1.0 + 12JUN2002 22.7-0.3 27.1 0.6 28.6 0.9 29.7 0.9 + 19JUN2002 22.1-0.6 27.0 0.6 28.4 0.8 29.6 0.8 + 26JUN2002 22.0-0.4 26.9 0.8 28.2 0.7 29.4 0.6 + 03JUL2002 21.8-0.3 26.6 0.6 28.0 0.6 29.4 0.6 + 10JUL2002 21.1-0.8 26.3 0.5 28.0 0.7 29.4 0.6 + 17JUL2002 21.2-0.4 26.0 0.4 28.0 0.8 29.5 0.7 + 24JUL2002 20.5-0.8 25.7 0.2 27.9 0.8 29.5 0.8 + 31JUL2002 20.3-0.8 25.5 0.2 27.9 0.9 29.6 0.9 + 07AUG2002 20.0-0.9 25.3 0.1 27.8 0.9 29.4 0.7 + 14AUG2002 20.3-0.4 25.5 0.5 27.8 0.9 29.4 0.7 + 21AUG2002 19.8-0.8 25.5 0.5 27.8 1.0 29.3 0.7 + 28AUG2002 19.8-0.7 25.6 0.7 27.8 1.0 29.4 0.7 + 04SEP2002 19.3-1.2 25.4 0.5 27.7 0.9 29.3 0.7 + 11SEP2002 20.2-0.2 25.5 0.6 27.8 1.0 29.4 0.7 + 18SEP2002 20.1-0.3 25.5 0.7 27.9 1.2 29.5 0.9 + 25SEP2002 20.1-0.4 25.7 0.8 27.9 1.2 29.5 0.8 + 02OCT2002 20.1-0.5 25.7 0.8 28.0 1.3 29.5 0.8 + 09OCT2002 20.7 0.0 25.6 0.7 27.9 1.2 29.4 0.7 + 16OCT2002 21.7 0.9 25.7 0.8 27.9 1.2 29.4 0.7 + 23OCT2002 21.6 0.6 26.0 1.1 28.2 1.6 29.8 1.2 + 30OCT2002 21.9 0.7 26.3 1.4 28.3 1.7 29.9 1.2 + 06NOV2002 22.0 0.6 26.2 1.3 28.2 1.6 29.8 1.2 + 13NOV2002 21.9 0.4 26.3 1.4 28.3 1.7 29.9 1.3 + 20NOV2002 22.5 0.7 26.5 1.5 28.3 1.7 29.9 1.3 + 27NOV2002 22.6 0.6 26.4 1.4 28.2 1.6 29.7 1.2 + 04DEC2002 23.0 0.7 26.6 1.6 28.2 1.6 29.6 1.0 + 11DEC2002 23.5 0.9 26.5 1.4 28.1 1.5 29.4 1.0 + 18DEC2002 23.3 0.4 26.5 1.3 28.1 1.5 29.4 1.0 + 25DEC2002 23.5 0.2 26.3 1.0 28.0 1.4 29.5 1.1 + 01JAN2003 24.2 0.6 26.6 1.2 28.1 1.5 29.4 1.1 + 08JAN2003 23.9-0.1 26.3 0.8 27.9 1.3 29.2 0.9 + 15JAN2003 24.1-0.3 26.3 0.7 27.7 1.2 29.3 1.0 + 22JAN2003 24.4-0.4 26.5 0.7 27.7 1.1 29.3 1.0 + 29JAN2003 24.9-0.3 26.3 0.3 27.5 0.8 29.1 0.9 + 05FEB2003 25.3-0.3 26.4 0.3 27.3 0.6 28.9 0.7 + 12FEB2003 25.7-0.3 26.6 0.3 27.4 0.7 28.9 0.9 + 19FEB2003 26.2 0.0 27.0 0.6 27.7 0.9 29.1 1.0 + 26FEB2003 26.0-0.3 26.8 0.1 27.6 0.7 29.2 1.1 + 05MAR2003 25.7-0.7 27.0 0.2 27.6 0.6 29.0 0.9 + 12MAR2003 25.7-0.8 27.2 0.1 27.7 0.6 29.0 0.8 + 19MAR2003 26.5 0.1 27.6 0.4 28.0 0.8 29.1 0.9 + 26MAR2003 25.5-0.7 27.4 0.2 27.9 0.5 29.0 0.7 + 02APR2003 25.7-0.3 27.2-0.1 27.8 0.3 28.9 0.6 + 09APR2003 24.8-0.9 27.3-0.1 27.8 0.2 29.0 0.6 + 16APR2003 24.3-1.1 27.3-0.2 27.9 0.1 28.9 0.5 + 23APR2003 23.6-1.6 27.2-0.2 27.8 0.0 28.9 0.4 + 30APR2003 23.2-1.6 26.5-0.8 27.7-0.1 28.9 0.3 + 07MAY2003 23.0-1.6 26.3-0.9 27.4-0.4 28.9 0.2 + 14MAY2003 22.5-1.8 26.2-0.9 27.3-0.5 28.8 0.1 + 21MAY2003 22.3-1.7 26.0-1.0 27.3-0.6 28.8 0.1 + 28MAY2003 22.0-1.6 26.0-0.9 27.4-0.4 29.0 0.2 + 04JUN2003 21.9-1.4 25.7-0.9 27.4-0.3 29.0 0.2 + 11JUN2003 21.6-1.5 25.7-0.8 27.4-0.2 29.1 0.2 + 18JUN2003 21.1-1.6 25.9-0.5 27.5-0.1 29.1 0.3 + 25JUN2003 21.6-0.8 25.9-0.2 27.6 0.0 29.1 0.3 + 02JUL2003 21.4-0.7 25.9-0.1 27.5 0.1 29.2 0.4 + 09JUL2003 21.1-0.8 25.9 0.0 27.6 0.3 29.2 0.4 + 16JUL2003 20.8-0.8 25.8 0.1 27.5 0.3 29.1 0.3 + 23JUL2003 20.2-1.2 25.7 0.2 27.3 0.2 29.1 0.3 + 30JUL2003 20.3-0.9 25.5 0.2 27.1 0.1 29.0 0.3 + 06AUG2003 20.2-0.8 25.3 0.1 27.0 0.0 29.0 0.3 + 13AUG2003 20.0-0.8 25.0 0.0 26.9 0.1 29.1 0.5 + 20AUG2003 20.6 0.0 24.9-0.1 26.7-0.1 29.0 0.4 + 27AUG2003 20.0-0.5 24.8-0.2 26.7-0.1 29.0 0.3 + 03SEP2003 20.4-0.1 25.0 0.1 26.9 0.1 29.0 0.3 + 10SEP2003 19.9-0.5 24.8-0.1 26.8 0.0 28.9 0.2 + 17SEP2003 19.5-0.8 25.0 0.1 26.9 0.2 28.9 0.3 + 24SEP2003 20.5 0.0 25.0 0.2 27.1 0.4 29.1 0.5 + 01OCT2003 20.1-0.5 25.3 0.4 27.3 0.6 29.1 0.4 + 08OCT2003 20.9 0.2 25.5 0.6 27.4 0.7 29.1 0.5 + 15OCT2003 20.9 0.1 25.2 0.3 27.1 0.4 29.1 0.5 + 22OCT2003 21.5 0.6 25.3 0.3 27.1 0.4 29.3 0.6 + 29OCT2003 21.4 0.3 25.4 0.4 27.2 0.5 29.3 0.7 + 05NOV2003 21.6 0.3 25.3 0.4 27.0 0.4 29.4 0.7 + 12NOV2003 21.8 0.3 25.3 0.4 26.9 0.3 29.3 0.7 + 19NOV2003 22.0 0.3 25.4 0.4 27.1 0.4 29.3 0.7 + 26NOV2003 22.3 0.3 25.5 0.5 27.2 0.5 29.2 0.6 + 03DEC2003 22.5 0.2 25.6 0.5 27.1 0.5 29.2 0.6 + 10DEC2003 22.9 0.3 25.5 0.4 27.0 0.4 29.1 0.6 + 17DEC2003 23.0 0.1 25.4 0.3 26.8 0.3 29.0 0.5 + 24DEC2003 23.0-0.2 25.6 0.3 26.8 0.2 28.9 0.4 + 31DEC2003 23.8 0.2 25.7 0.4 26.7 0.1 28.7 0.4 + 07JAN2004 24.2 0.2 25.7 0.2 26.6 0.0 28.7 0.3 + 14JAN2004 24.6 0.2 25.9 0.3 26.6 0.0 28.9 0.6 + 21JAN2004 24.8 0.0 26.0 0.3 27.0 0.4 28.9 0.7 + 28JAN2004 24.7-0.4 26.1 0.1 26.9 0.2 28.8 0.6 + 04FEB2004 25.0-0.5 26.0-0.1 26.8 0.1 28.7 0.6 + 11FEB2004 25.4-0.5 26.4 0.1 26.8 0.1 28.5 0.4 + 18FEB2004 26.1 0.0 26.7 0.2 26.9 0.1 28.5 0.4 + 25FEB2004 26.3 0.1 26.7 0.1 27.0 0.1 28.5 0.4 + 03MAR2004 25.8-0.6 26.7-0.1 26.9-0.1 28.5 0.4 + 10MAR2004 25.4-1.0 27.1 0.1 26.9-0.2 28.3 0.1 + 17MAR2004 25.6-0.8 27.4 0.2 27.1-0.1 28.3 0.1 + 24MAR2004 26.0-0.3 27.4 0.1 27.3-0.1 28.4 0.2 + 31MAR2004 26.1 0.1 27.4 0.1 27.5 0.0 28.5 0.2 + 07APR2004 26.0 0.2 27.4 0.0 27.7 0.1 28.6 0.2 + 14APR2004 25.2-0.3 27.4 0.0 27.8 0.1 28.7 0.2 + 21APR2004 24.8-0.4 27.4 0.0 28.0 0.2 28.8 0.3 + 28APR2004 24.1-0.9 27.2-0.1 28.1 0.3 28.9 0.3 + 05MAY2004 23.6-1.0 26.7-0.5 27.9 0.1 29.0 0.3 + 12MAY2004 23.1-1.3 26.6-0.6 28.0 0.1 29.0 0.3 + 19MAY2004 22.8-1.3 26.8-0.3 28.2 0.4 29.2 0.4 + 26MAY2004 22.7-1.0 26.7-0.2 28.1 0.3 29.4 0.6 + 02JUN2004 22.1-1.4 26.7 0.0 28.1 0.3 29.2 0.4 + 09JUN2004 21.7-1.4 26.6 0.0 28.0 0.3 29.2 0.4 + 16JUN2004 21.5-1.3 26.4-0.1 27.8 0.1 29.2 0.4 + 23JUN2004 21.3-1.2 26.0-0.3 27.5 0.0 29.1 0.2 + 30JUN2004 21.0-1.2 25.6-0.4 27.3-0.1 29.1 0.3 + 07JUL2004 20.8-1.2 25.4-0.4 27.6 0.3 29.4 0.6 + 14JUL2004 20.9-0.8 25.5-0.2 27.7 0.4 29.4 0.6 + 21JUL2004 20.7-0.7 25.2-0.3 27.7 0.6 29.4 0.7 + 28JUL2004 20.3-0.9 25.4 0.0 27.9 0.8 29.4 0.6 + 04AUG2004 19.9-1.1 25.2 0.0 27.8 0.8 29.4 0.7 + 11AUG2004 19.7-1.1 25.1 0.0 27.6 0.7 29.2 0.6 + 18AUG2004 19.6-1.0 24.9 0.0 27.4 0.6 29.2 0.5 + 25AUG2004 19.2-1.4 24.9 0.0 27.4 0.7 29.3 0.7 + 01SEP2004 20.1-0.4 25.0 0.1 27.4 0.7 29.6 0.9 + 08SEP2004 19.8-0.6 25.0 0.1 27.4 0.6 29.6 0.9 + 15SEP2004 19.8-0.5 25.1 0.3 27.5 0.7 29.6 0.9 + 22SEP2004 20.4-0.1 25.3 0.4 27.6 0.9 29.6 0.9 + 29SEP2004 20.5-0.1 25.4 0.5 27.5 0.8 29.5 0.8 + 06OCT2004 20.8 0.1 25.2 0.4 27.4 0.7 29.5 0.8 + 13OCT2004 20.5-0.2 25.2 0.3 27.3 0.6 29.4 0.8 + 20OCT2004 21.4 0.5 25.4 0.5 27.4 0.7 29.6 1.0 + 27OCT2004 21.3 0.2 25.4 0.5 27.4 0.7 29.7 1.0 + 03NOV2004 21.5 0.3 25.4 0.5 27.3 0.6 29.6 1.0 + 10NOV2004 22.0 0.5 25.5 0.5 27.3 0.6 29.5 0.9 + 17NOV2004 22.2 0.5 25.5 0.5 27.3 0.7 29.6 1.0 + 24NOV2004 21.9 0.0 25.4 0.4 27.3 0.7 29.5 1.0 + 01DEC2004 22.4 0.2 25.6 0.6 27.4 0.8 29.4 0.9 + 08DEC2004 22.3-0.2 25.7 0.6 27.4 0.8 29.4 0.8 + 15DEC2004 22.9 0.2 25.8 0.6 27.3 0.7 29.2 0.8 + 22DEC2004 22.9-0.2 25.9 0.6 27.3 0.7 29.5 1.1 + 29DEC2004 23.6 0.2 25.8 0.5 27.2 0.6 29.5 1.1 + 05JAN2005 23.7-0.2 25.7 0.3 27.1 0.5 29.3 0.9 + 12JAN2005 24.2 0.0 25.9 0.3 27.1 0.5 29.2 0.9 + 19JAN2005 25.0 0.3 26.0 0.3 27.1 0.5 29.2 0.9 + 26JAN2005 24.9-0.1 26.0 0.1 27.1 0.5 29.2 1.0 + 02FEB2005 24.6-0.8 25.9-0.2 26.9 0.2 29.0 0.8 + 09FEB2005 25.1-0.6 26.2-0.1 27.0 0.3 28.8 0.7 + 16FEB2005 25.8-0.3 26.4 0.0 27.0 0.3 28.8 0.7 + 23FEB2005 25.7-0.5 26.3-0.3 27.0 0.1 28.7 0.6 + 02MAR2005 25.2-1.1 26.2-0.6 27.0 0.0 28.8 0.6 + 09MAR2005 25.9-0.5 26.7-0.2 27.2 0.1 28.8 0.6 + 16MAR2005 25.9-0.6 27.3 0.2 27.6 0.4 29.0 0.8 + 23MAR2005 25.0-1.3 27.3 0.0 27.9 0.5 28.9 0.7 + 30MAR2005 24.9-1.1 27.4 0.1 28.0 0.5 29.0 0.7 + 06APR2005 24.8-1.0 27.4 0.0 28.0 0.4 28.9 0.5 + 13APR2005 24.6-0.9 27.7 0.2 27.9 0.1 28.8 0.3 + 20APR2005 24.8-0.5 27.9 0.5 28.2 0.4 28.9 0.4 + 27APR2005 25.4 0.4 28.1 0.8 28.3 0.5 29.1 0.5 + 04MAY2005 25.2 0.5 28.1 0.9 28.3 0.4 29.1 0.4 + 11MAY2005 24.6 0.2 27.6 0.5 28.2 0.4 29.1 0.3 + 18MAY2005 24.5 0.4 27.4 0.3 28.2 0.4 29.3 0.5 + 25MAY2005 23.5-0.3 27.1 0.2 28.2 0.4 29.2 0.4 + 01JUN2005 23.0-0.5 26.8 0.0 28.1 0.3 29.2 0.4 + 08JUN2005 22.6-0.5 26.9 0.3 28.1 0.4 29.2 0.4 + 15JUN2005 22.3-0.5 26.8 0.3 28.1 0.4 29.2 0.4 + 22JUN2005 22.2-0.3 26.9 0.6 28.0 0.5 29.1 0.3 + 29JUN2005 21.6-0.7 26.7 0.6 28.0 0.5 29.1 0.3 + 06JUL2005 21.5-0.5 26.3 0.4 27.8 0.4 29.2 0.4 + 13JUL2005 21.5-0.3 26.2 0.5 27.6 0.3 29.1 0.3 + 20JUL2005 20.7-0.8 25.8 0.2 27.3 0.2 29.0 0.2 + 27JUL2005 20.8-0.5 25.4 0.0 27.1 0.1 28.9 0.1 + 03AUG2005 20.8-0.2 25.2-0.1 26.9-0.1 28.8 0.1 + 10AUG2005 20.6-0.2 25.2 0.1 26.9 0.0 28.7 0.0 + 17AUG2005 20.4-0.2 25.4 0.4 27.0 0.2 28.9 0.2 + 24AUG2005 20.8 0.3 25.2 0.3 26.9 0.1 28.9 0.3 + 31AUG2005 20.4-0.1 24.8-0.1 26.7-0.1 28.9 0.2 + 07SEP2005 20.0-0.5 24.5-0.3 26.5-0.3 28.7 0.1 + 14SEP2005 19.7-0.7 24.5-0.4 26.4-0.3 28.7 0.0 + 21SEP2005 19.6-0.9 24.7-0.2 26.8 0.1 28.9 0.3 + 28SEP2005 19.6-0.9 24.5-0.4 26.7 0.0 28.9 0.3 + 05OCT2005 19.4-1.2 24.6-0.3 26.9 0.2 29.0 0.3 + 12OCT2005 20.0-0.8 24.9 0.0 26.9 0.2 28.9 0.3 + 19OCT2005 19.8-1.1 24.7-0.2 26.7 0.0 28.8 0.2 + 26OCT2005 19.9-1.2 24.7-0.2 26.6-0.1 28.8 0.1 + 02NOV2005 19.8-1.4 24.3-0.7 26.5-0.2 28.7 0.1 + 09NOV2005 20.2-1.2 24.2-0.7 26.3-0.4 28.6 0.0 + 16NOV2005 21.0-0.6 24.3-0.7 26.5-0.2 28.6 0.0 + 23NOV2005 21.2-0.7 24.3-0.7 26.3-0.3 28.7 0.1 + 30NOV2005 21.2-0.9 24.2-0.9 26.1-0.5 28.6 0.1 + 07DEC2005 21.4-1.1 24.1-1.0 26.0-0.6 28.6 0.0 + 14DEC2005 21.8-0.9 24.0-1.1 25.8-0.7 28.5 0.0 + 21DEC2005 23.1 0.1 24.3-0.9 25.8-0.8 28.1-0.3 + 28DEC2005 23.3-0.2 24.7-0.6 25.9-0.7 28.0-0.4 + 04JAN2006 23.4-0.4 25.0-0.5 25.8-0.7 27.9-0.5 + 11JAN2006 24.2 0.0 25.0-0.6 25.7-0.9 27.8-0.5 + 18JAN2006 24.3-0.2 24.8-0.9 25.5-1.1 27.6-0.7 + 25JAN2006 24.8-0.1 25.1-0.8 25.5-1.1 27.4-0.8 + 01FEB2006 25.0-0.3 25.5-0.6 25.8-0.9 27.4-0.7 + 08FEB2006 25.9 0.2 25.8-0.4 26.0-0.7 27.3-0.9 + 15FEB2006 27.1 1.0 26.3 0.0 26.1-0.6 27.3-0.8 + 22FEB2006 26.8 0.6 26.4-0.2 26.3-0.5 27.4-0.7 + 01MAR2006 27.0 0.7 26.2-0.6 26.1-0.9 27.4-0.7 + 08MAR2006 26.9 0.5 26.5-0.4 26.4-0.7 27.6-0.6 + 15MAR2006 26.7 0.2 26.5-0.6 26.5-0.7 27.7-0.5 + 22MAR2006 26.6 0.3 26.6-0.6 26.7-0.6 28.0-0.3 + 29MAR2006 26.0-0.1 26.8-0.5 27.0-0.5 28.1-0.2 + 05APR2006 24.9-0.9 27.1-0.3 27.3-0.3 28.1-0.2 + 12APR2006 24.0-1.5 27.6 0.1 27.7 0.0 28.3-0.1 + 19APR2006 23.4-2.0 27.2-0.2 27.7-0.1 28.4-0.1 + 26APR2006 23.1-1.9 27.2-0.2 27.7-0.1 28.5 0.0 + 03MAY2006 23.9-0.8 27.2-0.1 27.7-0.1 28.6-0.1 + 10MAY2006 24.1-0.4 27.1 0.0 27.8 0.0 28.8 0.1 + 17MAY2006 23.8-0.3 27.1 0.0 28.1 0.2 29.1 0.3 + 24MAY2006 23.5-0.3 26.9 0.0 28.0 0.2 29.0 0.2 + 31MAY2006 23.4-0.1 26.8 0.0 28.0 0.3 29.2 0.4 + 07JUN2006 22.6-0.6 26.6 0.0 28.0 0.3 29.2 0.4 + 14JUN2006 22.8-0.1 26.5 0.1 27.9 0.3 29.2 0.3 + 21JUN2006 22.5-0.1 26.3 0.0 27.8 0.2 29.2 0.3 + 28JUN2006 22.4 0.0 26.1 0.0 27.6 0.1 29.0 0.2 + 05JUL2006 22.2 0.1 26.0 0.1 27.5 0.1 29.0 0.1 + 12JUL2006 22.0 0.2 25.8 0.0 27.3 0.0 29.0 0.2 + 19JUL2006 22.3 0.8 25.8 0.2 27.3 0.1 29.1 0.3 + 26JUL2006 22.0 0.7 25.7 0.3 27.3 0.2 29.2 0.4 + 02AUG2006 21.9 0.8 25.5 0.3 27.2 0.2 29.2 0.5 + 09AUG2006 21.7 0.8 25.3 0.2 27.1 0.2 29.1 0.4 + 16AUG2006 21.6 0.9 25.4 0.4 27.2 0.4 29.2 0.6 + 23AUG2006 21.5 1.0 25.5 0.5 27.3 0.5 29.3 0.6 + 30AUG2006 21.1 0.6 25.6 0.6 27.3 0.5 29.3 0.7 + 06SEP2006 21.6 1.2 25.6 0.7 27.4 0.6 29.4 0.8 + 13SEP2006 21.3 0.9 25.8 0.9 27.3 0.6 29.4 0.7 + 20SEP2006 21.2 0.8 25.9 1.1 27.4 0.7 29.4 0.8 + 27SEP2006 21.7 1.1 25.7 0.8 27.2 0.5 29.3 0.7 + 04OCT2006 21.7 1.0 25.7 0.8 27.2 0.5 29.2 0.6 + 11OCT2006 22.2 1.4 26.1 1.2 27.5 0.8 29.4 0.8 + 18OCT2006 22.4 1.5 26.0 1.1 27.5 0.8 29.5 0.8 + 25OCT2006 22.7 1.6 26.1 1.1 27.6 0.9 29.6 1.0 + 01NOV2006 22.4 1.2 25.9 1.0 27.6 0.9 29.5 0.9 + 08NOV2006 22.5 1.1 25.9 0.9 27.6 0.9 29.6 1.0 + 15NOV2006 22.6 1.0 26.1 1.1 27.8 1.2 29.7 1.1 + 22NOV2006 22.7 0.8 26.3 1.2 27.8 1.2 29.6 1.1 + 29NOV2006 23.0 0.9 26.1 1.1 27.8 1.2 29.6 1.0 + 06DEC2006 22.9 0.5 26.1 1.1 27.9 1.3 29.6 1.1 + 13DEC2006 22.9 0.2 26.3 1.2 27.8 1.2 29.5 1.0 + 20DEC2006 23.7 0.6 26.5 1.3 27.7 1.2 29.4 1.0 + 27DEC2006 24.0 0.6 26.6 1.3 27.7 1.1 29.4 1.0 + 03JAN2007 24.3 0.5 26.4 0.9 27.5 0.9 29.2 0.8 + 10JAN2007 24.9 0.7 26.7 1.1 27.5 0.9 29.1 0.8 + 17JAN2007 25.0 0.4 26.4 0.7 27.2 0.6 28.8 0.6 + 24JAN2007 25.2 0.3 26.5 0.7 27.1 0.5 28.7 0.5 + 31JAN2007 25.6 0.3 26.6 0.6 27.0 0.3 28.7 0.5 + 07FEB2007 26.0 0.4 26.6 0.4 26.9 0.2 28.6 0.4 + 14FEB2007 26.3 0.3 26.3-0.1 26.7 0.0 28.6 0.6 + 21FEB2007 26.4 0.3 26.4-0.1 26.8-0.1 28.6 0.5 + 28FEB2007 25.7-0.6 26.4-0.3 26.9 0.0 28.5 0.4 + 07MAR2007 25.8-0.5 26.6-0.3 26.9-0.2 28.5 0.4 + 14MAR2007 26.0-0.5 27.3 0.2 27.3 0.1 28.6 0.4 + 21MAR2007 25.6-0.8 26.8-0.4 27.2-0.1 28.5 0.3 + 28MAR2007 25.1-1.0 26.6-0.7 27.4 0.0 28.5 0.2 + 04APR2007 24.5-1.4 26.7-0.7 27.5 0.0 28.7 0.3 + 11APR2007 24.4-1.2 27.2-0.2 27.8 0.1 28.7 0.3 + 18APR2007 23.9-1.4 27.4-0.1 27.9 0.2 28.7 0.2 + 25APR2007 24.1-1.0 27.3-0.1 27.8 0.0 28.7 0.1 + 02MAY2007 23.6-1.2 26.9-0.4 27.7-0.1 28.6 0.0 + 09MAY2007 23.0-1.5 26.3-0.9 27.4-0.4 28.7 0.0 + 16MAY2007 22.9-1.3 26.3-0.8 27.5-0.4 28.8 0.1 + 23MAY2007 22.3-1.6 26.3-0.6 27.7-0.1 29.0 0.2 + 30MAY2007 21.8-1.8 26.1-0.7 27.6-0.2 29.0 0.2 + 06JUN2007 21.6-1.6 25.8-0.9 27.6-0.1 29.0 0.2 + 13JUN2007 22.2-0.7 26.1-0.4 27.7 0.1 29.1 0.3 + 20JUN2007 21.8-0.8 25.9-0.5 27.6 0.0 28.9 0.1 + 27JUN2007 20.7-1.7 25.5-0.6 27.3-0.1 28.8 0.0 + 04JUL2007 21.2-0.9 25.3-0.6 27.0-0.4 28.7-0.1 + 11JUL2007 20.1-1.7 24.9-0.9 26.8-0.5 28.8 0.0 + 18JUL2007 19.9-1.7 24.8-0.8 26.9-0.3 28.9 0.1 + 25JUL2007 20.3-1.0 24.5-1.0 26.6-0.5 28.9 0.1 + 01AUG2007 19.6-1.5 24.1-1.2 26.4-0.6 28.7 0.0 + 08AUG2007 19.3-1.6 23.8-1.3 26.2-0.7 28.6-0.1 + 15AUG2007 19.7-1.0 24.0-1.0 26.3-0.6 28.6-0.1 + 22AUG2007 19.2-1.4 23.8-1.2 26.1-0.7 28.5-0.1 + 29AUG2007 18.4-2.1 23.7-1.3 26.1-0.7 28.4-0.2 + 05SEP2007 19.4-1.1 23.7-1.2 26.0-0.8 28.3-0.4 + 12SEP2007 18.6-1.8 23.6-1.3 25.8-1.0 28.0-0.6 + 19SEP2007 18.5-2.0 23.6-1.2 25.8-0.9 28.0-0.7 + 26SEP2007 18.4-2.1 23.2-1.7 25.6-1.1 28.0-0.7 + 03OCT2007 18.3-2.3 23.2-1.7 25.4-1.3 27.9-0.7 + 10OCT2007 18.8-1.9 23.3-1.6 24.9-1.8 27.7-1.0 + 17OCT2007 18.6-2.2 23.5-1.4 25.3-1.4 27.9-0.7 + 24OCT2007 19.2-1.8 23.5-1.4 25.3-1.4 27.8-0.8 + 31OCT2007 19.7-1.5 23.2-1.8 25.2-1.5 27.8-0.8 + 07NOV2007 19.3-2.1 23.0-2.0 25.0-1.6 27.5-1.1 + 14NOV2007 19.2-2.3 23.2-1.7 25.2-1.5 27.3-1.3 + 21NOV2007 19.8-2.0 23.2-1.8 24.9-1.7 27.1-1.5 + 28NOV2007 19.8-2.2 23.3-1.8 25.1-1.6 27.4-1.1 + 05DEC2007 20.6-1.8 23.5-1.5 25.1-1.5 27.5-1.0 + 12DEC2007 20.3-2.4 23.3-1.8 24.9-1.7 27.5-1.0 + 19DEC2007 21.3-1.6 23.7-1.5 25.0-1.6 27.2-1.3 + 26DEC2007 21.9-1.4 23.7-1.6 24.9-1.6 27.0-1.4 + 02JAN2008 22.6-1.1 23.9-1.5 25.0-1.6 26.8-1.6 + 09JAN2008 23.3-0.8 24.0-1.5 24.8-1.8 26.6-1.7 + 16JAN2008 24.1-0.4 24.0-1.6 24.6-2.0 26.6-1.7 + 23JAN2008 24.1-0.7 24.1-1.7 24.4-2.2 26.4-1.8 + 30JAN2008 25.1-0.1 24.7-1.3 24.9-1.7 26.5-1.7 + 06FEB2008 25.9 0.3 24.8-1.4 24.6-2.1 26.4-1.8 + 13FEB2008 25.9-0.1 24.7-1.7 24.5-2.2 26.4-1.7 + 20FEB2008 26.7 0.6 25.1-1.4 24.9-2.0 26.4-1.7 + 27FEB2008 27.2 0.9 25.8-0.9 25.3-1.6 26.3-1.8 + 05MAR2008 27.3 1.0 26.3-0.6 25.7-1.3 26.6-1.5 + 12MAR2008 27.2 0.7 26.5-0.5 26.0-1.1 26.7-1.4 + 19MAR2008 27.3 0.9 26.7-0.5 26.2-1.1 26.8-1.4 + 26MAR2008 27.1 0.9 26.8-0.5 26.3-1.0 27.0-1.2 + 02APR2008 27.2 1.2 26.9-0.4 26.5-1.0 27.2-1.2 + 09APR2008 25.9 0.2 27.3-0.2 26.7-1.0 27.3-1.1 + 16APR2008 25.5 0.0 27.3-0.2 26.9-0.9 27.4-1.1 + 23APR2008 25.5 0.4 27.1-0.3 26.9-0.9 27.5-1.1 + 30APR2008 24.5-0.3 27.3 0.0 27.1-0.7 27.7-0.9 + 07MAY2008 24.1-0.5 26.8-0.4 27.0-0.9 27.7-1.0 + 14MAY2008 24.5 0.2 27.1-0.1 27.1-0.7 27.8-0.9 + 21MAY2008 24.1 0.1 27.2 0.2 27.3-0.5 28.0-0.7 + 28MAY2008 24.1 0.5 27.2 0.4 27.3-0.5 28.0-0.8 + 04JUN2008 24.0 0.7 27.0 0.3 27.3-0.4 28.0-0.8 + 11JUN2008 23.7 0.7 26.7 0.2 27.2-0.5 28.0-0.8 + 18JUN2008 23.3 0.6 26.3-0.1 27.1-0.5 28.1-0.8 + 25JUN2008 23.0 0.6 26.2 0.0 27.1-0.4 28.1-0.7 + 02JUL2008 22.7 0.5 26.3 0.4 27.2-0.2 28.2-0.6 + 09JUL2008 22.7 0.8 26.3 0.5 27.3-0.1 28.3-0.5 + 16JUL2008 22.7 1.1 26.2 0.5 27.3 0.0 28.3-0.5 + 23JUL2008 22.6 1.2 25.9 0.5 27.1 0.0 28.2-0.6 + 30JUL2008 22.2 1.1 25.9 0.5 27.1 0.0 28.2-0.5 + 06AUG2008 22.0 1.1 25.9 0.7 27.0 0.1 28.2-0.5 + 13AUG2008 22.5 1.8 25.8 0.8 27.0 0.2 28.2-0.5 + 20AUG2008 21.1 0.5 25.5 0.5 26.7-0.1 28.1-0.6 + 27AUG2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 03SEP2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 10SEP2008 21.0 0.6 25.2 0.3 26.6-0.2 28.1-0.6 + 17SEP2008 21.1 0.8 24.9 0.1 26.4-0.4 28.1-0.6 + 24SEP2008 21.3 0.8 25.1 0.2 26.4-0.4 28.1-0.6 + 01OCT2008 21.0 0.4 24.7-0.2 26.2-0.5 28.3-0.4 + 08OCT2008 20.6-0.1 24.9 0.0 26.3-0.4 28.3-0.4 + 15OCT2008 20.7-0.1 24.9-0.1 26.4-0.3 28.3-0.4 + 22OCT2008 21.0 0.0 24.8-0.2 26.3-0.4 28.2-0.4 + 29OCT2008 20.5-0.7 24.6-0.3 26.4-0.2 28.2-0.4 + 05NOV2008 21.3 0.0 24.6-0.3 26.3-0.3 28.2-0.4 + 12NOV2008 21.8 0.3 24.9-0.1 26.5-0.2 28.1-0.5 + 19NOV2008 21.5-0.2 24.9-0.1 26.3-0.3 28.0-0.6 + 26NOV2008 21.2-0.8 24.6-0.4 26.1-0.5 27.9-0.6 + 03DEC2008 21.4-0.9 24.8-0.3 26.0-0.6 27.9-0.6 + 10DEC2008 22.1-0.4 24.6-0.5 25.8-0.8 27.7-0.7 + 17DEC2008 22.6-0.3 24.6-0.6 25.8-0.8 27.7-0.8 + 24DEC2008 22.8-0.5 24.5-0.8 25.6-1.0 27.5-0.9 + 31DEC2008 23.3-0.3 24.4-1.0 25.4-1.2 27.5-0.9 + 07JAN2009 23.4-0.6 24.5-0.9 25.4-1.2 27.4-1.0 + 14JAN2009 24.0-0.3 24.8-0.8 25.4-1.1 27.4-0.9 + 21JAN2009 25.3 0.5 25.5-0.2 25.8-0.8 27.4-0.8 + 28JAN2009 25.3 0.2 25.5-0.4 25.7-1.0 27.3-0.9 + 04FEB2009 25.1-0.4 25.4-0.7 25.7-0.9 27.2-0.9 + 11FEB2009 25.8 0.0 25.6-0.6 25.9-0.8 27.3-0.8 + 18FEB2009 26.3 0.2 26.1-0.4 26.2-0.6 27.4-0.7 + 25FEB2009 26.5 0.2 26.4-0.3 26.3-0.6 27.4-0.7 + 04MAR2009 26.5 0.2 26.1-0.7 26.4-0.7 27.5-0.6 + 11MAR2009 26.1-0.3 26.1-0.9 26.7-0.5 27.7-0.4 + 18MAR2009 26.0-0.4 26.4-0.7 26.7-0.6 27.8-0.4 + 25MAR2009 26.3 0.1 26.7-0.5 26.8-0.6 27.9-0.4 + 01APR2009 26.4 0.5 27.2-0.1 27.1-0.4 28.1-0.2 + 08APR2009 25.7 0.0 27.4 0.0 27.4-0.2 28.3-0.1 + 15APR2009 26.1 0.7 27.5 0.0 27.5-0.2 28.3-0.2 + 22APR2009 25.4 0.2 27.3-0.1 27.6-0.2 28.4-0.2 + 29APR2009 25.3 0.4 27.5 0.2 27.7-0.1 28.6 0.0 + 06MAY2009 25.3 0.7 27.6 0.4 27.9 0.1 28.8 0.1 + 13MAY2009 24.8 0.5 27.4 0.3 28.0 0.2 29.0 0.2 + 20MAY2009 24.4 0.4 27.4 0.4 28.2 0.4 29.1 0.3 + 27MAY2009 24.3 0.6 27.2 0.4 28.1 0.3 29.1 0.3 + 03JUN2009 23.7 0.4 27.1 0.4 27.9 0.2 29.0 0.2 + 10JUN2009 23.7 0.6 27.2 0.6 28.1 0.4 29.1 0.3 + 17JUN2009 23.9 1.1 27.2 0.8 28.2 0.5 29.2 0.4 + 24JUN2009 23.5 1.0 27.1 0.9 28.2 0.7 29.3 0.5 + 01JUL2009 22.9 0.7 26.9 0.9 28.2 0.7 29.3 0.5 + 08JUL2009 23.0 1.1 26.7 0.9 28.0 0.7 29.2 0.4 + 15JUL2009 22.7 1.0 26.6 1.0 28.0 0.7 29.2 0.4 + 22JUL2009 22.2 0.8 26.5 1.0 27.9 0.8 29.2 0.4 + 29JUL2009 22.1 0.9 26.2 0.8 27.7 0.6 29.1 0.4 + 05AUG2009 22.2 1.2 26.0 0.8 27.6 0.6 29.1 0.4 + 12AUG2009 21.4 0.6 25.9 0.8 27.4 0.6 29.1 0.4 + 19AUG2009 21.6 0.9 25.8 0.9 27.4 0.6 29.2 0.6 + 26AUG2009 21.5 1.0 25.9 1.0 27.6 0.8 29.3 0.7 + 02SEP2009 21.4 0.9 25.9 1.0 27.6 0.8 29.3 0.6 + 09SEP2009 21.1 0.6 25.7 0.8 27.5 0.8 29.3 0.6 + 16SEP2009 20.8 0.4 25.6 0.8 27.5 0.8 29.3 0.6 + 23SEP2009 20.5 0.0 25.6 0.7 27.4 0.7 29.2 0.6 + 30SEP2009 20.4-0.2 25.4 0.6 27.3 0.6 29.2 0.6 + 07OCT2009 20.1-0.5 25.5 0.6 27.3 0.6 29.4 0.7 + 14OCT2009 21.0 0.2 25.6 0.7 27.5 0.8 29.6 1.0 + 21OCT2009 21.2 0.3 25.8 0.8 27.7 1.0 29.8 1.2 + 28OCT2009 21.6 0.5 26.1 1.2 28.1 1.4 30.0 1.3 + 04NOV2009 21.8 0.5 26.2 1.3 28.2 1.6 29.9 1.3 + 11NOV2009 22.1 0.6 26.2 1.2 28.2 1.5 29.9 1.3 + 18NOV2009 22.2 0.5 26.2 1.2 28.2 1.6 29.8 1.2 + 25NOV2009 22.2 0.3 26.3 1.2 28.2 1.6 29.9 1.3 + 02DEC2009 22.7 0.4 26.5 1.4 28.2 1.6 29.7 1.2 + 09DEC2009 22.7 0.2 26.6 1.5 28.2 1.7 29.6 1.1 + 16DEC2009 22.6-0.2 26.7 1.5 28.3 1.8 29.7 1.2 + 23DEC2009 23.7 0.5 26.8 1.5 28.4 1.9 29.7 1.3 + 30DEC2009 24.3 0.7 26.7 1.4 28.3 1.7 29.6 1.2 + 06JAN2010 24.3 0.4 26.7 1.2 28.3 1.7 29.7 1.3 + 13JAN2010 24.6 0.3 26.7 1.1 28.2 1.6 29.6 1.3 + 20JAN2010 24.7 0.1 26.5 0.8 28.0 1.4 29.5 1.2 + 27JAN2010 25.5 0.4 26.6 0.7 27.8 1.2 29.3 1.1 + 03FEB2010 25.4 0.0 26.7 0.6 27.8 1.2 29.1 1.0 + 10FEB2010 25.7-0.2 27.0 0.7 27.9 1.2 29.0 0.9 + 17FEB2010 26.4 0.3 27.2 0.8 27.9 1.2 29.0 1.0 + 24FEB2010 26.5 0.3 27.4 0.8 28.0 1.1 29.2 1.1 + 03MAR2010 26.3-0.1 27.5 0.7 28.1 1.1 29.2 1.0 + 10MAR2010 26.0-0.4 27.5 0.5 28.3 1.2 29.3 1.1 + 17MAR2010 26.2-0.3 27.8 0.7 28.4 1.1 29.2 1.1 + 24MAR2010 26.3 0.0 27.9 0.7 28.4 1.0 29.2 0.9 + 31MAR2010 25.9-0.1 28.1 0.8 28.4 0.9 29.2 0.8 + 07APR2010 26.0 0.3 28.1 0.7 28.4 0.8 29.3 0.9 + 14APR2010 26.6 1.0 28.2 0.8 28.5 0.7 29.2 0.7 + 21APR2010 26.0 0.8 28.0 0.6 28.4 0.6 29.2 0.7 + 28APR2010 25.2 0.3 27.8 0.4 28.2 0.4 29.3 0.7 + 05MAY2010 24.8 0.2 27.7 0.5 28.0 0.2 29.1 0.4 + 12MAY2010 24.8 0.5 27.1 0.0 27.7-0.2 29.0 0.3 + 19MAY2010 24.0 0.0 26.8-0.3 27.5-0.3 29.0 0.2 + 26MAY2010 23.2-0.5 26.4-0.4 27.5-0.3 29.0 0.2 + 02JUN2010 23.4 0.0 26.1-0.6 27.3-0.5 28.8 0.0 + 09JUN2010 23.1 0.0 26.0-0.6 27.1-0.6 28.7-0.1 + 16JUN2010 22.3-0.5 25.8-0.6 27.0-0.7 28.6-0.2 + 23JUN2010 22.4-0.2 25.5-0.8 26.9-0.7 28.5-0.3 + 30JUN2010 21.6-0.7 25.3-0.8 26.7-0.8 28.3-0.5 + 07JUL2010 20.9-1.1 24.8-1.0 26.4-0.9 28.2-0.6 + 14JUL2010 20.0-1.6 24.6-1.1 26.1-1.1 28.2-0.6 + 21JUL2010 19.6-1.9 24.4-1.1 26.0-1.2 28.0-0.8 + 28JUL2010 19.5-1.7 24.0-1.4 25.6-1.4 27.8-1.0 + 04AUG2010 19.5-1.5 24.0-1.3 25.8-1.2 27.7-1.0 + 11AUG2010 19.6-1.2 24.1-1.0 25.7-1.2 27.5-1.2 + 18AUG2010 19.2-1.4 23.8-1.1 25.6-1.2 27.5-1.1 + 25AUG2010 19.2-1.4 23.7-1.3 25.2-1.6 27.1-1.5 + 01SEP2010 18.8-1.7 23.4-1.5 25.1-1.7 27.2-1.5 + 08SEP2010 19.1-1.3 23.5-1.4 25.2-1.6 27.1-1.6 + 15SEP2010 18.6-1.8 23.4-1.5 25.1-1.6 27.1-1.6 + 22SEP2010 19.3-1.2 24.0-0.8 25.1-1.6 27.1-1.6 + 29SEP2010 19.2-1.4 23.5-1.3 24.8-1.9 27.1-1.6 + 06OCT2010 18.7-1.9 23.2-1.7 24.8-1.9 27.1-1.6 + 13OCT2010 18.9-1.9 23.0-2.0 25.1-1.6 27.1-1.6 + 20OCT2010 19.1-1.8 23.2-1.7 25.1-1.6 27.0-1.7 + 27OCT2010 19.8-1.3 23.6-1.4 25.2-1.5 27.0-1.6 + 03NOV2010 19.7-1.6 23.4-1.6 25.2-1.4 27.0-1.6 + 10NOV2010 19.5-1.9 23.5-1.5 25.2-1.4 27.2-1.5 + 17NOV2010 20.2-1.5 23.5-1.5 25.0-1.6 27.1-1.5 + 24NOV2010 20.6-1.3 23.3-1.7 24.9-1.7 26.9-1.7 + 01DEC2010 20.5-1.7 23.3-1.7 25.0-1.7 27.0-1.5 + 08DEC2010 20.9-1.5 23.4-1.7 25.0-1.6 26.9-1.6 + 15DEC2010 21.1-1.7 23.5-1.7 25.0-1.5 26.9-1.6 + 22DEC2010 21.7-1.4 23.4-1.8 24.8-1.8 26.8-1.6 + 29DEC2010 22.9-0.6 23.8-1.5 25.0-1.5 26.7-1.7 + 05JAN2011 23.1-0.7 24.1-1.3 25.0-1.5 26.7-1.7 + 12JAN2011 23.6-0.7 24.1-1.5 24.7-1.8 26.6-1.7 + 19JAN2011 24.2-0.5 24.4-1.3 25.0-1.6 26.7-1.6 + 26JAN2011 25.0 0.0 24.5-1.4 24.9-1.7 26.8-1.4 + 02FEB2011 25.3-0.1 24.9-1.1 25.1-1.5 26.6-1.5 + 09FEB2011 25.9 0.2 25.5-0.8 25.5-1.2 26.8-1.3 + 16FEB2011 26.8 0.7 25.6-0.8 25.4-1.3 27.0-1.1 + 23FEB2011 26.4 0.2 25.9-0.7 25.6-1.3 27.0-1.1 + 02MAR2011 25.7-0.6 26.0-0.8 25.7-1.3 27.1-1.1 + 09MAR2011 26.3-0.2 26.2-0.8 26.0-1.1 27.3-0.9 + 16MAR2011 26.6 0.1 26.3-0.8 26.4-0.9 27.5-0.7 + 23MAR2011 25.8-0.5 26.6-0.6 26.4-0.9 27.5-0.7 + 30MAR2011 25.6-0.4 26.9-0.4 26.6-0.9 27.5-0.8 + 06APR2011 25.4-0.4 27.1-0.2 26.9-0.7 27.7-0.6 + 13APR2011 25.8 0.3 27.3-0.2 27.1-0.7 27.9-0.6 + 20APR2011 25.4 0.1 27.2-0.3 27.1-0.7 27.8-0.7 + 27APR2011 25.8 0.8 27.2-0.1 27.1-0.7 27.9-0.7 + 04MAY2011 25.1 0.4 27.0-0.3 27.2-0.6 28.0-0.7 + 11MAY2011 25.3 0.9 27.0-0.2 27.4-0.5 28.3-0.5 + 18MAY2011 24.6 0.5 27.0-0.1 27.6-0.3 28.4-0.4 + 25MAY2011 24.0 0.3 26.8 0.0 27.5-0.3 28.3-0.5 + 01JUN2011 24.3 0.8 26.8 0.1 27.5-0.2 28.4-0.4 + 08JUN2011 24.2 1.1 26.7 0.1 27.5-0.2 28.4-0.4 + 15JUN2011 23.8 1.0 26.6 0.1 27.4-0.2 28.4-0.4 + 22JUN2011 23.2 0.6 26.5 0.2 27.4-0.1 28.4-0.4 + 29JUN2011 22.9 0.6 26.1 0.1 27.4-0.1 28.6-0.2 + 06JUL2011 22.2 0.2 25.8-0.1 27.1-0.3 28.5-0.3 + 13JUL2011 21.9 0.2 25.7 0.0 27.1-0.2 28.5-0.3 + 20JUL2011 22.1 0.6 25.6 0.0 26.9-0.3 28.4-0.4 + 27JUL2011 21.9 0.7 25.3-0.1 26.8-0.3 28.4-0.4 + 03AUG2011 21.5 0.4 25.0-0.3 26.4-0.6 28.3-0.4 + 10AUG2011 20.9 0.0 24.6-0.5 26.3-0.6 28.4-0.3 + 17AUG2011 20.5-0.1 24.5-0.5 26.0-0.8 28.2-0.4 + 24AUG2011 20.2-0.4 24.3-0.6 26.1-0.7 28.3-0.4 + 31AUG2011 20.0-0.5 24.4-0.5 26.1-0.7 28.3-0.4 + 07SEP2011 19.7-0.7 24.2-0.7 26.1-0.7 28.2-0.5 + 14SEP2011 19.6-0.8 24.1-0.7 26.0-0.8 28.0-0.7 + 21SEP2011 19.8-0.6 24.3-0.6 25.9-0.9 27.8-0.9 + 28SEP2011 19.9-0.6 24.1-0.7 26.0-0.7 28.0-0.7 + 05OCT2011 19.8-0.8 24.1-0.8 25.7-1.0 27.7-0.9 + 12OCT2011 19.7-1.0 24.1-0.8 25.8-0.9 27.9-0.8 + 19OCT2011 20.0-0.9 23.9-1.1 25.8-0.8 28.1-0.6 + 26OCT2011 21.2 0.2 23.8-1.1 25.4-1.2 28.0-0.7 + 02NOV2011 20.5-0.8 23.9-1.1 25.6-1.0 27.9-0.8 + 09NOV2011 20.5-0.9 23.9-1.1 25.7-0.9 27.9-0.7 + 16NOV2011 20.5-1.1 23.8-1.1 25.6-1.0 27.9-0.7 + 23NOV2011 21.4-0.5 24.0-1.0 25.6-1.0 27.8-0.8 + 30NOV2011 21.0-1.2 23.8-1.3 25.4-1.2 27.7-0.9 + 07DEC2011 21.4-1.0 23.9-1.2 25.5-1.1 27.5-1.0 + 14DEC2011 21.5-1.2 24.1-1.0 25.6-1.0 27.4-1.1 + 21DEC2011 22.1-1.0 24.5-0.7 25.6-1.0 27.2-1.3 + 28DEC2011 22.6-0.9 24.4-0.9 25.5-1.1 27.1-1.3 + 04JAN2012 22.7-1.1 24.6-0.8 25.5-1.0 27.2-1.2 + 11JAN2012 23.7-0.5 24.8-0.7 25.6-1.0 27.1-1.2 + 18JAN2012 24.0-0.6 24.9-0.8 25.4-1.2 27.1-1.2 + 25JAN2012 24.6-0.4 25.2-0.7 25.5-1.2 26.9-1.3 + 01FEB2012 24.6-0.8 25.2-0.8 25.5-1.2 27.0-1.2 + 08FEB2012 25.2-0.5 25.6-0.6 25.7-1.0 27.1-1.0 + 15FEB2012 26.9 0.8 26.3-0.1 26.1-0.7 27.1-1.0 + 22FEB2012 26.9 0.8 26.8 0.2 26.5-0.4 27.4-0.7 + 29FEB2012 27.3 1.0 27.1 0.4 26.4-0.6 27.2-0.9 + 07MAR2012 26.6 0.2 26.7-0.2 26.4-0.7 27.3-0.9 + 14MAR2012 26.6 0.2 26.6-0.4 26.6-0.6 27.5-0.7 + 21MAR2012 26.7 0.4 27.0-0.2 26.7-0.6 27.8-0.5 + 28MAR2012 26.9 0.8 27.5 0.3 27.1-0.3 27.7-0.6 + 04APR2012 26.2 0.3 27.6 0.3 27.2-0.3 27.9-0.5 + 11APR2012 27.4 1.8 27.8 0.4 27.3-0.4 28.1-0.3 + 18APR2012 26.8 1.4 27.5 0.0 27.3-0.5 28.1-0.4 + 25APR2012 26.6 1.5 27.5 0.1 27.6-0.2 28.4-0.2 + 02MAY2012 26.3 1.6 27.4 0.1 27.7-0.1 28.4-0.2 + 09MAY2012 25.7 1.2 27.3 0.1 27.8 0.0 28.4-0.3 + 16MAY2012 25.2 1.0 27.2 0.1 27.8 0.0 28.5-0.3 + 23MAY2012 24.8 0.9 27.1 0.2 27.8 0.0 28.6-0.2 + 30MAY2012 24.5 0.9 27.2 0.4 27.9 0.2 28.7-0.1 + 06JUN2012 24.7 1.5 27.1 0.4 27.8 0.1 28.6-0.2 + 13JUN2012 24.4 1.5 27.1 0.6 27.9 0.3 28.6-0.2 + 20JUN2012 24.3 1.7 27.1 0.8 28.0 0.4 28.8 0.0 + 27JUN2012 23.8 1.5 27.1 0.9 28.1 0.6 28.9 0.0 + 04JUL2012 23.2 1.1 26.8 0.8 27.9 0.5 28.8 0.0 + 11JUL2012 22.6 0.8 26.6 0.8 27.7 0.4 28.8 0.0 + 18JUL2012 22.6 1.1 26.5 0.9 27.7 0.5 28.8 0.0 + 25JUL2012 22.0 0.7 26.4 1.0 27.7 0.6 28.9 0.1 + 01AUG2012 21.6 0.5 26.1 0.9 27.6 0.6 29.0 0.3 + 08AUG2012 20.9 0.0 25.9 0.8 27.7 0.8 29.1 0.4 + 15AUG2012 20.8 0.1 25.6 0.6 27.4 0.6 29.1 0.4 + 22AUG2012 21.0 0.4 25.5 0.5 27.4 0.6 29.1 0.4 + 29AUG2012 20.3-0.2 25.6 0.7 27.7 0.9 29.1 0.5 + 05SEP2012 20.7 0.3 25.5 0.6 27.5 0.8 29.2 0.5 + 12SEP2012 20.9 0.5 25.3 0.4 27.3 0.5 29.1 0.4 + 19SEP2012 21.0 0.5 25.2 0.3 27.0 0.3 29.0 0.4 + 26SEP2012 21.0 0.5 25.1 0.2 26.9 0.2 29.1 0.4 + 03OCT2012 20.5-0.1 24.8-0.1 26.8 0.1 29.0 0.3 + 10OCT2012 20.2-0.6 24.7-0.2 26.8 0.1 29.1 0.4 + 17OCT2012 20.5-0.4 25.0 0.1 27.0 0.3 29.1 0.5 + 24OCT2012 21.0 0.0 25.0 0.1 27.2 0.5 29.3 0.7 + 31OCT2012 21.5 0.3 25.2 0.2 27.1 0.4 29.2 0.6 + 07NOV2012 21.5 0.2 25.1 0.1 27.0 0.4 29.2 0.6 + 14NOV2012 21.0-0.5 25.2 0.2 27.2 0.5 29.3 0.7 + 21NOV2012 21.1-0.7 25.1 0.1 26.9 0.3 29.1 0.5 + 28NOV2012 20.7-1.4 24.9-0.1 26.8 0.2 28.9 0.4 + 05DEC2012 21.5-0.9 24.9-0.2 26.5-0.1 28.6 0.1 + 12DEC2012 21.8-0.8 24.8-0.3 26.5-0.1 28.8 0.4 + 19DEC2012 22.4-0.6 24.9-0.3 26.4-0.2 28.6 0.2 + 26DEC2012 22.7-0.6 25.0-0.3 26.4-0.1 28.6 0.2 + 02JAN2013 23.3-0.4 25.0-0.4 26.3-0.3 28.4 0.1 + 09JAN2013 23.7-0.4 24.8-0.7 26.0-0.6 28.3 0.0 + 16JAN2013 24.1-0.4 25.0-0.6 26.0-0.6 28.1-0.2 + 23JAN2013 24.2-0.6 25.3-0.5 26.4-0.2 28.2 0.0 + 30JAN2013 24.8-0.5 25.1-0.9 26.1-0.5 28.1 0.0 + 06FEB2013 25.4-0.2 25.5-0.7 26.2-0.5 28.1-0.1 + 13FEB2013 25.9-0.1 25.9-0.4 26.4-0.3 28.1 0.0 + 20FEB2013 25.6-0.6 26.2-0.3 26.3-0.5 27.9-0.1 + 27FEB2013 25.8-0.4 26.5-0.2 26.6-0.3 27.9-0.2 + 06MAR2013 26.7 0.4 27.0 0.1 26.9-0.1 27.9-0.2 + 13MAR2013 27.0 0.5 27.1 0.0 26.8-0.3 27.7-0.4 + 20MAR2013 26.6 0.2 27.6 0.4 27.1-0.1 28.0-0.2 + 27MAR2013 25.6-0.5 27.6 0.3 27.3-0.1 28.1-0.2 + 03APR2013 25.0-0.9 27.3 0.0 27.6 0.1 28.3 0.0 + 10APR2013 24.8-0.9 27.5 0.0 27.7 0.0 28.5 0.1 + 17APR2013 24.6-0.8 27.5 0.0 27.7-0.1 28.5 0.0 + 24APR2013 24.5-0.6 27.3-0.1 27.7-0.1 28.4-0.1 + 01MAY2013 23.6-1.2 26.9-0.4 27.8 0.0 28.7 0.0 + 08MAY2013 22.9-1.6 26.7-0.5 27.7-0.1 28.7 0.0 + 15MAY2013 23.2-1.1 26.5-0.6 27.5-0.4 28.6-0.2 + 22MAY2013 22.3-1.6 25.9-1.0 27.4-0.4 28.7-0.1 + 29MAY2013 21.5-2.1 25.9-0.9 27.5-0.2 28.8 0.0 + 05JUN2013 22.0-1.3 25.9-0.8 27.5-0.2 28.8 0.0 + 12JUN2013 21.9-1.1 25.9-0.6 27.5-0.2 28.8-0.1 + 19JUN2013 21.1-1.6 25.7-0.7 27.3-0.3 28.6-0.2 + 26JUN2013 20.5-1.9 25.6-0.6 27.4-0.1 28.8 0.0 + 03JUL2013 20.6-1.5 25.4-0.5 27.2-0.2 28.8 0.0 + 10JUL2013 20.5-1.3 25.0-0.8 26.9-0.4 28.8 0.0 + 17JUL2013 20.1-1.5 24.8-0.8 26.8-0.4 28.7-0.1 + 24JUL2013 20.3-1.1 24.9-0.6 26.8-0.3 28.7-0.1 + 31JUL2013 19.8-1.3 24.6-0.8 26.8-0.2 28.7 0.0 + 07AUG2013 19.8-1.1 24.5-0.7 26.7-0.3 28.6-0.1 + 14AUG2013 19.6-1.1 24.4-0.7 26.4-0.4 28.7 0.0 + 21AUG2013 19.9-0.8 24.4-0.6 26.4-0.4 28.7 0.0 + 28AUG2013 19.4-1.1 24.5-0.5 26.7-0.1 28.8 0.2 + 04SEP2013 19.6-0.9 24.6-0.3 26.8 0.0 28.8 0.1 + 11SEP2013 20.0-0.4 24.7-0.2 26.8 0.0 28.7 0.0 + 18SEP2013 19.9-0.5 24.9 0.1 26.7-0.1 28.6-0.1 + 25SEP2013 20.1-0.4 24.7-0.2 26.5-0.2 28.5-0.1 + 02OCT2013 19.7-0.9 24.6-0.2 26.4-0.3 28.7 0.0 + 09OCT2013 20.1-0.7 24.6-0.3 26.3-0.3 28.6 0.0 + 16OCT2013 20.3-0.5 24.8-0.1 26.3-0.4 28.6-0.1 + 23OCT2013 20.5-0.4 24.7-0.2 26.3-0.4 28.7 0.1 + 30OCT2013 20.5-0.7 24.8-0.1 26.5-0.2 28.8 0.2 + 06NOV2013 21.0-0.4 24.8-0.1 26.6 0.0 28.9 0.3 + 13NOV2013 21.1-0.4 24.7-0.2 26.6 0.0 28.9 0.3 + 20NOV2013 21.3-0.5 24.8-0.2 26.7 0.1 28.9 0.3 + 27NOV2013 21.7-0.4 24.9-0.1 26.7 0.1 28.8 0.2 + 04DEC2013 22.0-0.3 24.9-0.2 26.8 0.2 28.8 0.3 + 11DEC2013 22.4-0.2 25.1 0.0 26.6 0.0 28.7 0.2 + 18DEC2013 22.4-0.5 25.2 0.0 26.5-0.1 28.6 0.1 + 25DEC2013 22.8-0.4 25.2-0.1 26.4-0.2 28.5 0.1 + 01JAN2014 23.7 0.0 25.2-0.2 26.3-0.3 28.2-0.2 + 08JAN2014 24.2 0.1 25.1-0.5 26.0-0.5 28.2-0.2 + 15JAN2014 25.0 0.6 25.2-0.4 25.9-0.7 28.0-0.3 + 22JAN2014 25.4 0.6 25.6-0.2 26.2-0.4 28.1-0.1 + 29JAN2014 25.4 0.2 25.3-0.7 25.9-0.7 27.9-0.2 + 05FEB2014 25.1-0.4 25.3-0.8 25.9-0.7 28.1 0.0 + 12FEB2014 25.4-0.6 25.4-0.9 26.2-0.5 28.5 0.4 + 19FEB2014 25.1-1.1 25.7-0.7 26.4-0.4 28.5 0.4 + 26FEB2014 25.5-0.7 26.0-0.6 26.3-0.6 28.2 0.1 + 05MAR2014 26.1-0.3 26.4-0.5 26.6-0.4 28.5 0.3 + 12MAR2014 25.8-0.6 26.8-0.3 26.8-0.4 28.7 0.6 + 19MAR2014 25.2-1.2 27.3 0.1 27.4 0.1 28.8 0.6 + 26MAR2014 25.4-0.7 27.6 0.4 27.6 0.2 29.0 0.7 + 02APR2014 25.2-0.7 27.8 0.5 27.8 0.3 29.0 0.7 + 09APR2014 24.9-0.8 27.6 0.1 27.9 0.2 29.1 0.7 + 16APR2014 24.8-0.7 27.7 0.2 28.0 0.2 29.1 0.6 + 23APR2014 25.3 0.1 27.8 0.4 28.2 0.4 29.2 0.6 + 30APR2014 25.7 0.8 27.8 0.5 28.2 0.4 29.3 0.7 + 07MAY2014 25.8 1.2 27.8 0.6 28.3 0.5 29.5 0.8 + 14MAY2014 25.5 1.3 27.7 0.6 28.3 0.4 29.5 0.8 + 21MAY2014 25.4 1.5 27.6 0.7 28.3 0.5 29.6 0.8 + 28MAY2014 25.3 1.6 27.6 0.7 28.4 0.6 29.7 0.9 + 04JUN2014 24.8 1.4 27.5 0.8 28.3 0.5 29.6 0.8 + 11JUN2014 24.6 1.6 27.3 0.8 28.1 0.4 29.5 0.6 + 18JUN2014 24.8 2.1 27.4 1.0 28.1 0.5 29.4 0.5 + 25JUN2014 24.0 1.6 27.2 1.0 28.0 0.5 29.3 0.5 + 02JUL2014 23.6 1.4 27.0 1.0 27.8 0.4 29.1 0.3 + 09JUL2014 23.0 1.1 26.5 0.6 27.6 0.3 29.1 0.3 + 16JUL2014 23.1 1.5 26.2 0.6 27.4 0.2 29.1 0.4 + 23JUL2014 22.9 1.6 26.0 0.5 27.1-0.1 28.9 0.2 + 30JUL2014 21.8 0.6 25.5 0.2 26.9-0.1 29.0 0.3 + 06AUG2014 22.2 1.2 25.6 0.4 27.0 0.0 29.2 0.5 + 13AUG2014 21.9 1.2 25.5 0.5 26.9 0.0 29.0 0.4 + 20AUG2014 22.1 1.4 25.5 0.5 27.1 0.3 29.1 0.4 + 27AUG2014 21.3 0.8 25.4 0.4 27.2 0.4 29.2 0.5 + 03SEP2014 21.7 1.2 25.3 0.4 27.1 0.4 29.2 0.5 + 10SEP2014 21.1 0.7 25.3 0.4 27.3 0.5 29.4 0.7 + 17SEP2014 21.0 0.7 25.2 0.4 27.2 0.5 29.4 0.8 + 24SEP2014 21.2 0.8 25.4 0.5 27.1 0.4 29.3 0.6 + 01OCT2014 21.7 1.1 25.4 0.5 27.1 0.3 29.2 0.5 + 08OCT2014 21.3 0.6 25.5 0.6 27.1 0.4 29.1 0.5 + 15OCT2014 21.5 0.7 25.5 0.5 27.2 0.5 29.4 0.7 + 22OCT2014 21.8 0.8 25.8 0.8 27.2 0.5 29.4 0.7 + 29OCT2014 21.8 0.6 25.8 0.9 27.3 0.6 29.4 0.8 + 05NOV2014 21.9 0.5 25.8 0.9 27.4 0.8 29.5 0.9 + 12NOV2014 22.4 0.9 25.8 0.9 27.5 0.8 29.5 0.9 + 19NOV2014 22.6 0.8 26.0 1.0 27.5 0.9 29.5 0.9 + 26NOV2014 22.4 0.4 25.9 0.9 27.6 1.0 29.5 0.9 + 03DEC2014 22.3 0.0 25.8 0.7 27.4 0.8 29.4 0.9 + 10DEC2014 22.8 0.2 26.0 0.9 27.5 0.9 29.4 0.9 + 17DEC2014 22.9 0.1 26.0 0.8 27.4 0.8 29.4 1.0 + 24DEC2014 23.1-0.2 26.0 0.7 27.3 0.7 29.3 0.9 + 31DEC2014 23.6 0.0 25.9 0.6 27.1 0.5 29.2 0.8 + 07JAN2015 23.7-0.2 25.9 0.4 27.0 0.4 29.1 0.7 + 14JAN2015 24.0-0.4 25.9 0.3 27.1 0.5 29.1 0.9 + 21JAN2015 24.3-0.4 26.1 0.3 27.2 0.6 29.2 1.0 + 28JAN2015 24.8-0.3 26.2 0.3 27.2 0.5 29.1 0.9 + 04FEB2015 25.0-0.5 26.2 0.1 27.2 0.5 29.1 0.9 + 11FEB2015 25.1-0.8 26.6 0.3 27.2 0.5 29.0 0.9 + 18FEB2015 26.1-0.1 26.7 0.3 27.3 0.5 29.0 1.0 + 25FEB2015 26.1-0.1 26.8 0.1 27.5 0.6 29.3 1.2 diff --git a/samples/Groovy/build.script! b/samples/Groovy/build.gvy similarity index 100% rename from samples/Groovy/build.script! rename to samples/Groovy/build.gvy diff --git a/samples/Groovy/groovy.script! b/samples/Groovy/groovy similarity index 100% rename from samples/Groovy/groovy.script! rename to samples/Groovy/groovy diff --git a/samples/Haskell/HsColour.hs b/samples/Haskell/HsColour.hs new file mode 100644 index 00000000..64588a6d --- /dev/null +++ b/samples/Haskell/HsColour.hs @@ -0,0 +1,114 @@ +-- | This is a library which colourises Haskell code. +-- It currently has six output formats: +-- +-- * ANSI terminal codes +-- +-- * LaTeX macros +-- +-- * HTML 3.2 with font tags +-- +-- * HTML 4.01 with external CSS. +-- +-- * XHTML 1.0 with internal CSS. +-- +-- * mIRC chat client colour codes. +-- +module Language.Haskell.HsColour (Output(..), ColourPrefs(..), + hscolour) where + +import Language.Haskell.HsColour.Colourise (ColourPrefs(..)) +import qualified Language.Haskell.HsColour.TTY as TTY +import qualified Language.Haskell.HsColour.HTML as HTML +import qualified Language.Haskell.HsColour.CSS as CSS +import qualified Language.Haskell.HsColour.ACSS as ACSS +import qualified Language.Haskell.HsColour.InlineCSS as ICSS +import qualified Language.Haskell.HsColour.LaTeX as LaTeX +import qualified Language.Haskell.HsColour.MIRC as MIRC +import Data.List(mapAccumL, isPrefixOf) +import Data.Maybe +import Language.Haskell.HsColour.Output +--import Debug.Trace + +-- | Colourise Haskell source code with the given output format. +hscolour :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them). + -> Bool -- ^ Whether to include anchors. + -> Bool -- ^ Whether output document is partial or complete. + -> String -- ^ Title for output. + -> Bool -- ^ Whether input document is literate haskell or not + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour output pref anchor partial title False = + (if partial then id else top'n'tail output title) . + hscolour' output pref anchor +hscolour output pref anchor partial title True = + (if partial then id else top'n'tail output title) . + concatMap chunk . joinL . classify . inlines + where + chunk (Code c) = hscolour' output pref anchor c + chunk (Lit c) = c + +-- | The actual colourising worker, despatched on the chosen output format. +hscolour' :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them) + -> Bool -- ^ Whether to include anchors. + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour' TTY pref _ = TTY.hscolour pref +hscolour' (TTYg tt) pref _ = TTY.hscolourG tt pref +hscolour' MIRC pref _ = MIRC.hscolour pref +hscolour' LaTeX pref _ = LaTeX.hscolour pref +hscolour' HTML pref anchor = HTML.hscolour pref anchor +hscolour' CSS _ anchor = CSS.hscolour anchor +hscolour' ICSS pref anchor = ICSS.hscolour pref anchor +hscolour' ACSS _ anchor = ACSS.hscolour anchor + +-- | Choose the right headers\/footers, depending on the output format. +top'n'tail :: Output -- ^ Output format + -> String -- ^ Title for output + -> (String->String) -- ^ Output transformer +top'n'tail TTY _ = id +top'n'tail (TTYg _) _ = id +top'n'tail MIRC _ = id +top'n'tail LaTeX title = LaTeX.top'n'tail title +top'n'tail HTML title = HTML.top'n'tail title +top'n'tail CSS title = CSS.top'n'tail title +top'n'tail ICSS title = ICSS.top'n'tail title +top'n'tail ACSS title = CSS.top'n'tail title + +-- | Separating literate files into code\/comment chunks. +data Lit = Code {unL :: String} | Lit {unL :: String} deriving (Show) + +-- Re-implementation of 'lines', for better efficiency (but decreased laziness). +-- Also, importantly, accepts non-standard DOS and Mac line ending characters. +-- And retains the trailing '\n' character in each resultant string. +inlines :: String -> [String] +inlines s = lines' s id + where + lines' [] acc = [acc []] + lines' ('\^M':'\n':s) acc = acc ['\n'] : lines' s id -- DOS +--lines' ('\^M':s) acc = acc ['\n'] : lines' s id -- MacOS + lines' ('\n':s) acc = acc ['\n'] : lines' s id -- Unix + lines' (c:s) acc = lines' s (acc . (c:)) + + +-- | The code for classify is largely stolen from Language.Preprocessor.Unlit. +classify :: [String] -> [Lit] +classify [] = [] +classify (x:xs) | "\\begin{code}"`isPrefixOf`x + = Lit x: allProg xs + where allProg [] = [] -- Should give an error message, + -- but I have no good position information. + allProg (x:xs) | "\\end{code}"`isPrefixOf`x + = Lit x: classify xs + allProg (x:xs) = Code x: allProg xs +classify (('>':x):xs) = Code ('>':x) : classify xs +classify (x:xs) = Lit x: classify xs + +-- | Join up chunks of code\/comment that are next to each other. +joinL :: [Lit] -> [Lit] +joinL [] = [] +joinL (Code c:Code c2:xs) = joinL (Code (c++c2):xs) +joinL (Lit c :Lit c2 :xs) = joinL (Lit (c++c2):xs) +joinL (any:xs) = any: joinL xs + diff --git a/samples/HyPhy/AAModelComparison.bf b/samples/HyPhy/AAModelComparison.bf new file mode 100644 index 00000000..602a9e56 --- /dev/null +++ b/samples/HyPhy/AAModelComparison.bf @@ -0,0 +1,252 @@ +if (Rows (modelMatrixList) == 0) +{ + modelMatrixList = + { + {"Equal Input", "EIAA.mdl", "19"} + {"Dayhoff","Dayhoff.mdl","0"} + {"Dayhoff+F","Dayhoff_F.mdl","19"} + {"JTT", "Jones.mdl", "0"} + {"JTT+F", "Jones_F.mdl", "19"} + {"WAG", "WAG.mdl", "0"} + {"WAG+F", "WAG_F.mdl", "19"} + {"rtREV", "rtREV.mdl", "0"} + {"rtREV+F", "rtREV_F.mdl", "19"} + {"mtMAM", "mtMAM.mdl", "0"} + {"mtMAM+F", "mtMAM_F.mdl", "19"} + {"mtREV 24", "mtREV_24.mdl", "0"} + {"mtREV 24+F", "mtREV_24_F.mdl", "19"} + {"HIV within", "HIVwithin.mdl", "0"} + {"HIV within+F", "HIVwithin+F.mdl", "19"} + {"HIV between", "HIVbetween.mdl", "0"} + {"HIV between+F", "HIVbetween+F.mdl", "19"} + {"REV-1 step", "reducedREV.mdl", "19"} + {"REV", "mtREV.mdl", "19"} + }; +} + +/*___________________________________________________________________________________________________________*/ + +function runAModel (modelID, fileName, xtraP, midx) +{ + ExecuteCommands ("#include \"TemplateModels/"+fileName+"\";"); + Tree givenTree = treeString; + LikelihoodFunction lf = (filteredData,givenTree); + + GetString (lf_info, lf, -1); + locals = lf_info["Local Independent"]; + + if (Columns (branchLengthStash)) + { + USE_LAST_RESULTS = 1; + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=1;\n"); + } + currentBL = BranchLength (givenTree,0); + currentBN = BranchName (givenTree,-1); + for (_iv = 0; _iv < Columns (currentBN); _iv = _iv+1) + { + ExecuteCommands ("givenTree."+currentBN[_iv]+".t="+branchLengthStash[_iv]/currentBL+";"); + + } + } + else + { + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=0.1;\n"); + } + USE_LAST_RESULTS = 1; + } + + Optimize (res,lf); + + fprintf (stdout, "| ", modelID); + for (k=0; k1) + { + cAIC = 2(-res[1][0]+params*(filteredData.sites/(filteredData.sites-params-1))); + } + else + { + cAIC = 0; + } + + branchLengths = BranchLength (givenTree,-1); + TL = 0; + for (k=Rows(branchLengths)*Columns(branchLengths)-1; k>=0; k=k-1) + { + TL = TL + branchLengths[k]; + } + + fprintf (stdout, "| ", Format (res[1][0],14,3), " | ", Format (params,5,0), " | ", + Format (AIC, 9,3), " | ",); + + if (cAIC > 0) + { + fprintf (stdout, Format (cAIC,11,3), " | "); + } + else + { + fprintf (stdout, " N/A | "); + } + + fprintf (stdout, Format (TL,11,3), " |\n", sepString); + + resultMatrix[midx][0] = res[1][0]; + resultMatrix[midx][1] = params; + resultMatrix[midx][2] = AIC; + resultMatrix[midx][3] = cAIC; + resultMatrix[midx][4] = TL; + + if (AIC < bestAIC) + { + bestAIC = AIC; + bestAICidx = midx; + branchLengthStash = BranchLength (givenTree,-1); + } + + if (cAIC > 0) + { + if (bestCAIC > cAIC) + { + bestCAIC = cAIC; + bestCAICidx = midx; + + } + } + + return 0; +} + + +/*___________________________________________________________________________________________________________*/ + + + +maxModelWidth = 7; +skipCodeSelectionStep = 0; + +ChoiceList (doREV, "Include REV?", 1, SKIP_NONE, "Yes", "Include REV and reduced REV models. CAUTION: these models take a long time to fit.", + "No", "Only use empirical models"); + +if (doREV < 0) +{ + return 0; +} + +if (doREV == 0) +{ + #include "TemplateModels/chooseGeneticCode.def"; + skipCodeSelectionStep = 1; +} + +modelCount = Rows (modelMatrixList) - 2*doREV; + +for (k=0; k=0) +{ + fprintf (stdout, "\n\nBest c-AIC model:\n\t", modelMatrixList[bestCAICidx][0], " with the score of ", bestCAIC); +} + +labelMatrix = {{"Log-likelihood","Parameters","AIC","c-AIC","Total tree length",""}}; + +aaString = "Model"; + +for (fC = 0; fC < modelCount; fC = fC+1) +{ + aaString = aaString + ";" + modelMatrixList[fC][0]; +} + +USE_LAST_RESULTS = 0; + +labelMatrix[5] = aaString; +skipCodeSelectionStep = 0; +OpenWindow (CHARTWINDOW,{{"Model Fits"} + {"labelMatrix"}, + {"resultMatrix"}, + {"Bar Chart"}, + {"Index"}, + {"c-AIC"}, + {"Model Index"}, + {""}, + {"AIC"} + }, + "SCREEN_WIDTH-60;SCREEN_HEIGHT-60;30;30"); diff --git a/samples/HyPhy/CodonModelCompare.bf b/samples/HyPhy/CodonModelCompare.bf new file mode 100644 index 00000000..e24b730d --- /dev/null +++ b/samples/HyPhy/CodonModelCompare.bf @@ -0,0 +1,1046 @@ +/* + This file takes a nucleotide data set and a tree (either from the data file or from a separate file) and computes maximum likelihood estimates for every possible 4x4 reversible model on that data and tree. + + We use the string (v1,v2,v3,v4,v5,v6), where and v1..6 = 0..5 + to encode a 4x4 symmetric transition matrix with entries + [* v1 v2 v3] + [- * v4 v5] + [- - * v6] + [- - - * ] + + For instance: (010010) encodes HKY85. + + For each model the following information is reported: + - Model string. (e.g. (012345) for the GRM) + - Number of model parameters + - Max ln-likelihood for the model + - Likelihood ratio statistic (as a sub-model of the GRM) + - AIC + - P-Value for the Likelihood Ratio Test. + + + Sergei L. Kosakovsky Pond, Summer 2002. + +*/ + +function ReceiveJobs (sendOrNot) +{ + if (MPI_NODE_COUNT>1) + { + MPIReceive (-1, fromNode, result_String); + jobModelNum = MPINodeState[fromNode-1][1]; + vv1 = MPINodeState[fromNode-1][2]; + vv2 = MPINodeState[fromNode-1][3]; + vv3 = MPINodeState[fromNode-1][4]; + vv4 = MPINodeState[fromNode-1][5]; + vv5 = MPINodeState[fromNode-1][6]; + vv6 = MPINodeState[fromNode-1][7]; + if (sendOrNot) + { + MPISend (fromNode,lf); + MPINodeState[fromNode-1][1] = modelNum; + MPINodeState[fromNode-1][2] = v1; + MPINodeState[fromNode-1][3] = v2; + MPINodeState[fromNode-1][4] = v3; + MPINodeState[fromNode-1][5] = v4; + MPINodeState[fromNode-1][6] = v5; + MPINodeState[fromNode-1][7] = v6; + } + else + { + MPINodeState[fromNode-1][0] = 0; + MPINodeState[fromNode-1][1] = -1; + } + + ExecuteCommands (result_String); + } + else + { + jobModelNum = modelNum; + } + + if (jobModelNum == 0) + { + stdl = lf_MLES[1][0]; + fullnp = lf_MLES[1][1]+addOn; + fprintf(stdout,"\n(012345) Full Model ln-lik = ",stdl,". Parameter Count=",Format(fullnp,0,0)," AIC = ", 2*(fullnp-stdl),"\n\n"); + + + resultCache [0][0] = 1; + resultCache [0][1] = 2; + resultCache [0][2] = 3; + resultCache [0][3] = 4; + resultCache [0][4] = 5; + resultCache [0][5] = lf_MLES[1][0]; + resultCache [0][6] = lf_MLES[1][1]+addOn; + resultCache [0][7] = 0; + resultCache [0][8] = 0; + + fprintf (stdout,"\n# | Model | # prm | lnL | LRT | AIC | P-Value |"); + fprintf (stdout,"\n----|----------|-------|-----------|----------------|------------|------------------|"); + + if (MPI_NODE_COUNT>1) + { + for (h=1; h<203; h=h+1) + { + lnL = resultCache[h][5]; + + if (lnL<0) + { + np = resultCache[h][6]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",h); + PRINT_DIGITS = 1; + fprintf (stdout," | (",0, resultCache[h][0], resultCache[h][1], resultCache[h][2], resultCache[h][3], resultCache[h][4],") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + resultCache [jobModelNum][7] = pValue; + if (pValue1)&&(resultCache[0][5]>=0)) + { + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + return fromNode - 1; + } + } + + np = lf_MLES[1][1]+addOn; + lnL = lf_MLES[1][0]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",jobModelNum); + PRINT_DIGITS = 1; + fprintf (stdout," | (",vv1,vv2,vv3,vv4,vv5,vv6,") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + resultCache [jobModelNum][7] = pValue; + if (pValue 0) +{ + #include "TemplateModels/defineGamma.mdl"; +} + +ChoiceList (branchLengths,"Estimate Branch Lengths",1,SKIP_NONE, + "Every Time","Branch lengths are reestimated for every model.", + "Once","Branch lenghts obtained from the nucleotide GTR model and reused for subsequent models." + ); + +if (branchLengths<0) +{ + return; +} + +rejectAt = 0; + +while ((rejectAt<=0)||(rejectAt>=1)) +{ + fprintf (stdout, "\nModel rejection level (e.g. 0.05):"); + fscanf (stdin,"Number", rejectAt); +} + +SetDialogPrompt ("Save results to:"); + +fprintf (PROMPT_FOR_FILE, CLEAR_FILE); +BASE_PATH = LAST_FILE_PATH; + +KEEP_OPTIMAL_ORDER = 1; +MESSAGE_LOGGING = 0; + +global AC=1; +global AT=1; +global CG=1; +global CT=1; +global GT=1; +global R=1; + + +r = setElement (0,2,1); +r = setElement (0,3,2); +r = setElement (1,2,3); +r = setElement (1,3,4); +r = setElement (2,3,5); + +MG94custom = 0; +MULTIPLY_BY_FREQS = PopulateModelMatrix ("MG94custom", observedFreq); +vectorOfFrequencies = BuildCodonFrequencies (observedFreq); +Model MG94customModel = (MG94custom,vectorOfFrequencies,0); + +USE_POSITION_SPECIFIC_FREQS = 1; +Tree tr = treeString; + +addOn = 0; + +if (branchLengths) +{ + global TreeScaler = 1; + GTRMatrix = {{*,AC*nt,nt,AT*nt}{AC*nt,*,CG*nt,CT*nt}{nt,CG*nt,*,GT*nt}{AT*nt,CT*nt,GT*nt,*}}; + DataSetFilter nucFilter = CreateFilter (filteredData,1); + HarvestFrequencies (nucFreq,nucFilter,1,1,1); + Model GTRModel = (GTRMatrix,nucFreq,1); + givenTreeString = Format (tr,0,0); + Tree nucTree = givenTreeString; + LikelihoodFunction lfn = (nucFilter, nucTree); + Optimize (nres,lfn); + ReplicateConstraint ("this1.?.synRate:=this2.?.nt__/TreeScaler",tr,nucTree); + addOn = nres[1][1]-nres[1][2]-1; +} + +LikelihoodFunction lf = (filteredData, tr); + +resultCache = {203,9}; + +modelNum = 0; +rejectCount = 0; + +if (MPI_NODE_COUNT>1) +{ + MPINodeState = {MPI_NODE_COUNT-1,8}; + OPTIMIZE_SUMMATION_ORDER = 0; + MPISend (1,lf); + MPINodeState[0][0] = 1; + MPINodeState[0][1] = modelNum; +} +else +{ + Optimize (lf_MLES,lf); + vv1 = 0; + vv2 = 0; + vv3 = 0; + vv4 = 0; + vv5 = 0; + vv6 = 0; + dummy = ReceiveJobs (0); +} + +rateBiasTerms = {{"AC","1","AT","CG","CT","GT"}}; + +for (v2=0; v2<=1; v2=v2+1) +{ + for (v3=0; v3<=v2+1; v3=v3+1) + { + if (v3>v2) + { + ub4 = v3; + } + else + { + ub4 = v2; + } + for (v4=0; v4<=ub4+1; v4=v4+1) + { + if (v4>=ub4) + { + ub5 = v4; + } + else + { + ub5 = ub4; + } + for (v5=0; v5<=ub5+1; v5=v5+1) + { + if (v5>ub5) + { + ub6 = v5; + } + else + { + ub6 = ub5; + } + for (v6=0; v6<=ub6+1; v6=v6+1) + { + if (v6==5) + { + break; + } + + R = 1; + + paramCount = 0; + + modelDesc = "0"+Format(v2,1,0); + modelDesc = modelDesc+Format(v3,1,0); + modelDesc = modelDesc+Format(v4,1,0); + modelDesc = modelDesc+Format(v5,1,0); + modelDesc = modelDesc+Format(v6,1,0); + + modelConstraintString = ""; + + AC = 1; + AT = 1; + CG = 1; + CT = 1; + GT = 1; + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter1) + { + for (mpiNode = 0; mpiNode < MPI_NODE_COUNT-1; mpiNode = mpiNode+1) + { + if (MPINodeState[mpiNode][0]==0) + { + break; + } + } + + if (mpiNode==MPI_NODE_COUNT-1) + /* all nodes busy */ + { + mpiNode = ReceiveJobs (1); + } + else + { + MPISend (mpiNode+1,lf); + MPINodeState[mpiNode][0] = 1; + MPINodeState[mpiNode][1] = modelNum; + MPINodeState[mpiNode][2] = v1; + MPINodeState[mpiNode][3] = v2; + MPINodeState[mpiNode][4] = v3; + MPINodeState[mpiNode][5] = v4; + MPINodeState[mpiNode][6] = v5; + MPINodeState[mpiNode][7] = v6; + } + } + else + { + Optimize (lf_MLES,lf); + vv1 = v1; + vv2 = v2; + vv3 = v3; + vv4 = v4; + vv5 = v5; + vv6 = v6; + dummy = ReceiveJobs (0); + } + } + } + } + } + +} + +if (MPI_NODE_COUNT>1) +{ + while (1) + { + for (nodeCounter = 0; nodeCounter < MPI_NODE_COUNT-1; nodeCounter = nodeCounter+1) + { + if (MPINodeState[nodeCounter][0]==1) + { + fromNode = ReceiveJobs (0); + break; + } + } + if (nodeCounter == MPI_NODE_COUNT-1) + { + break; + } + } + OPTIMIZE_SUMMATION_ORDER = 1; +} + +function checkEmbedding (_m1, _m2) +{ + for (r=0; r<6; r=r+1) + { + if (_m2[r]<_m1[r]) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 1 at position ",r,"\n");*/ + return 0; + } + if (_m2[r]>_m1[r]) + { + for (r2 = 0; r2 < 6; r2 = r2+1) + { + if ((_m2[r2]==_m2[r])&&(_m1[r2]!=_m1[r])) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 2 at positions ",r,r2,"\n");*/ + return 0; + } + } + } + } + return 1; +} + +PRINT_DIGITS = 0; + +fprintf (stdout, "\n\n--------------------------\n (*) => p-Value < ", rejectAt, "\nRejected ", rejectCount, " models.\n"); + + +if (rejectCount<202) +{ + + fprintf (stdout, "\nPerforming nested tests on the remaining models...\n"); + + done = 0; + while (!done) + { + done = 1; + for (v2=1; v2<203; v2=v2+1) + { + if (resultCache[v2][8]) + { + modelString = "0"; + for (v3 = 0; v3<5; v3=v3+1) + { + modelString = modelString + resultCache [v2][v3]; + } + for (v3 = v2+1; v3<203; v3 = v3+1) + { + if (resultCache[v3][8]) + { + modelString2 = "0"; + for (v4 = 0; v4<5; v4=v4+1) + { + modelString2 = modelString2 + resultCache [v3][v4]; + } + if (checkEmbedding (modelString, modelString2)) + { + fprintf (stdout,"H: (", modelString,") A: (", modelString2, "). "); + done = 0; + LRT = 2*(resultCache[v3][5]-resultCache[v2][5]); + npd = resultCache[v3][6]-resultCache[v2][6]; + if (LRT<0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,npd); + } + fprintf (stdout," P-Value=", Format (pValue,10,3)); + if (pValue1)", + "0 & 2 (Normal>1)", + "3 Normal", + "RE: Lognormal", + "RE: Gamma", + "RE: Discrete"}}; + +ParameterCount = {{0, + 1, + 3, + 4, + 2, + 4, + 2, + 4, + 5, + 5, + 5, + 5, + 6, + 1, + 2, + 4 + }}; + +MAXIMUM_ITERATIONS_PER_VARIABLE = 2000; +OPTIMIZATION_PRECISION = 0.001; + +function SetWDistribution (resp) +{ + if (rateType == 0) + { + global P = .5; + P:<1; + categFreqMatrix = {{P,1-P}}; + categRateMatrix = {{0,1}}; + category c = (2, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 1) + { + global P1 = 1/3; + global P2 = 0; + + P1:<1; + P2:<1; + + global W = 1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{0,1,W}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 2) + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 3) + { + global P1 = 1/5; + global P2 = 1/4; + global P3 = 1/3; + global P4 = 1/2; + + P1:<1; + P2:<1; + P3:<1; + P4:<1; + + categFreqMatrix = {{P1, + (1-P1)P2, + (1-P1)(1-P2)*P3, + (1-P1)(1-P2)(1-P3)P4, + (1-P1)(1-P2)(1-P3)(1-P4)}} ; + categRateMatrix = {{0,1/3,2/3,1,3}}; + category c = (5, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 4) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta); + } + else + { + if (rateType == 5) + { + global alpha = .5; + global beta = 1; + global alpha2= .75; + global P = .5; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + alpha2:>0.01;alpha2:<100; + category c = (resp, EQUAL, MEAN, P*GammaDist(_x_,alpha,beta) + (1-P)*GammaDist(_x_,alpha2,alpha2) + , P*CGammaDist(_x_,alpha,beta) + (1-P)*CGammaDist(_x_,alpha2,alpha2), + 0 , 1e25, + P*CGammaDist(_x_,alpha+1,beta)*alpha/beta + (1-P)*CGammaDist(_x_,alpha2+1,alpha2)); + } + else + { + if (rateType == 6) + { + global betaP = 1; + global betaQ = 1; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + category c = (resp, EQUAL, MEAN, _x_^(betaP-1)*(1-_x_)^(betaQ-1)/Beta(betaP,betaQ), IBeta(_x_,betaP,betaQ), 0 , + 1,IBeta(_x_,betaP+1,betaQ)*betaP/(betaP+betaQ)); + } + else + { + if (rateType == 7) + { + global W = 2; + /*W:>1;*/ + global P = 1-1/(resp+1); + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + P:>0.0000001; + P:<0.9999999; + categFreqMatrix = {resp+1,1}; + for (k=0; k=W), + 0,1e25, + P*IBeta(Min(_x_,1),betaP+1,betaQ)*betaP/(betaP+betaQ)+(1-P)*W*(_x_>=W)); + } + else + { + if (rateType == 8) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*GammaDist(_x_,alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(_x_,alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+(1-P)*alpha/beta*CGammaDist(_x_,alpha+1,beta)); + } + else + { + if (rateType == 9) + { + global P = .5; + P:<1; + global betaP = 1; + betaP:>0.05;betaP:<85; + global betaQ = 2; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + alpha:>0.01;alpha:<100; + global beta = 1; + beta:>0.01;beta:<500; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*(_x_>1)*GammaDist(Max(1e-20,_x_-1),alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(Max(_x_-1,0),alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(alpha/beta*CGammaDist(Max(0,_x_-1),alpha+1,beta)+CGammaDist(Max(0,_x_-1),alpha,beta))); + } + else + { + if (rateType == 10) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + global mu = 3; + global sigma = .01; + sigma:>0.0001; + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+ + (1-P)*(_x_>=1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF((mu-1)/sigma), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*(_x_>=1)*(1-ZCDF((mu-_x_)/sigma)/ZCDF((mu-1)/sigma)), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(_x_>=1)*(mu*(1-ZCDF((1-mu)/sigma)-ZCDF((mu-_x_)/sigma))+ + sigma*(Exp((mu-1)(1-mu)/(2*sigma*sigma))-Exp((_x_-mu)(mu-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF((mu-1)/sigma)); + } + else + { + if (rateType == 11) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .5; + sigma:>0.0001; + global sigma1 = 1; + sigma1:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + categFreqMatrix = {resp+1,1}; + for (k=1; k<=resp; k=k+1) + { + categFreqMatrix[k]:=(1-P)/resp__; + } + categFreqMatrix[0]:=P; + + category c = (resp+1, categFreqMatrix, MEAN, + (1-P)((1-P1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(mu/sigma1)+ + P1*Exp(-(_x_-1)(_x_-1)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF(1/sigma)), + P+(1-P)(_x_>1e-20)((1-P1)(1-ZCDF((mu-_x_)/sigma1)/ZCDF(mu/sigma1))+ + P1*(1-ZCDF((1-_x_)/sigma)/ZCDF(1/sigma))), + 0,1e25, + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma1)-ZCDF((mu-_x_)/sigma1))+ + sigma1*(Exp(-mu*mu/(2*sigma1*sigma1))-Exp((_x_-mu)(mu-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)+ + P(1-ZCDF(-1/sigma)-ZCDF((1-_x_)/sigma)+ + sigma*(Exp(-1/(2*sigma*sigma))-Exp((_x_-1)(1-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF(1/sigma)) + ); + } + else + { + if (rateType == 12) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .25; + global sigma1 = .5; + global sigma2 = 1; + sigma:>0.0001; + sigma1:>0.0001; + sigma2:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + category c = (resp, EQUAL , MEAN, + 2*P*Exp(-_x_^2/(2*sigma*sigma))+ + (1-P)((1-P1)*Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2))/(sqrt2pi__*sigma2)/ZCDF(mu/sigma2)+ + P1*Exp((1-_x_)(_x_-1)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(1/sigma1)), + P*(1-2*ZCDF(-_x_/sigma))+ + (1-P)((1-P1)(1-ZCDF((mu-_x_)/sigma2)/ZCDF(mu/sigma2))+ + P1*(1-ZCDF((1-_x_)/sigma1)/ZCDF(1/sigma1))), + 0,1e25, + 2*P*sigma*(1-Exp(-_x_*_x_/(2*sigma*sigma)))/sqrt2pi__+ + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma2)-ZCDF((mu-_x_)/sigma2))+ + sigma2*(Exp(-mu*mu/(2*sigma2*sigma2))-Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2)))/sqrt2pi__)/ZCDF(mu/sigma2)+ + P1(1-ZCDF(-1/sigma1)-ZCDF((1-_x_)/sigma1)+ + sigma1*(Exp(-1/(2*sigma1*sigma1))-Exp((_x_-1)(1-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)) + ); + } + else + { + if (rateType == 13) + { + global sigma = .1; + sigma:>0.0001;sigma:<10; + sqrt2pi = Sqrt(8*Arctan(1)); + global _x_:<1e200; + category c = (resp, EQUAL, MEAN, + Exp (-Log(_x_)*Log(_x_) / (2*sigma*sigma)) / (_x_*sigma*sqrt2pi__), /*density*/ + ZCDF (Log(_x_)/sigma), /*CDF*/ + 1e-200, /*left bound*/ + 1e200, /*right bound*/ + Exp (.5*sigma^2)*ZCDF (Log(_x_)/sigma-sigma), + CONSTANT_ON_PARTITION + ); + } + else + { + if (rateType == 14) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta,CONSTANT_ON_PARTITION); + } + else + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25, ,CONSTANT_ON_PARTITION); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return 0; +} + +/* ____________________________________________________________________________________________________________________*/ + +function FrameText (frameChar,vertChar,parOff,theText) +{ + h = Abs (theText)+4; + fprintf (stdout,"\n"); + for (k=0; k1) break; + } + if (k 1 */ + { + ConstructCategoryMatrix(marginals,lf,COMPLETE); + + CC = Columns (marginals); + if (rateType>=13) + /* subset rate variation */ + { + CC = CC/numberOfSubsets; + + subsetMarginals = {D,numberOfSubsets}; + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Subsets with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Sites with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1."); + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n"); + return E; +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + if (modelType==0) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__]; + } + } + } + } + } + else + { + if (modelType==1) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + nucPosInCodon = 2; + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + nucPosInCodon = 0; + } + else + { + transition = v%16$4; + transition2= h%16$4; + nucPosInCodon = 1; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__][nucPosInCodon__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__][nucPosInCodon__]; + } + } + } + } + } + else + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*c*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*c*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + } + } + return (modelType>1); +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix2 (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := c*kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := c*kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + return 1; +} +/* ____________________________________________________________________________________________________________________*/ + +function spawnLikelihood (kappaSharedOrNot) +{ + if (kappaSharedOrNot) + { + for (l=0; l=lowerSeqBound)&&(speciesIndex1)","Beta & (Normal>1)", + "0 & 2 (Normal>1)","0 & 2 (Normal>1)", + "3 Normal","3 Normal", + "RE:Log normal","Random Effects: Log normal", + "RE:Gamma","Random Effects: Gamma", + "RE:Discrete","Random Effects: 3 bin Discrete"); + + if (modelTypes[0]<0) + { + return; + } + for (rateType = 0; rateType < Rows(modelTypes)*Columns(modelTypes); rateType = rateType + 1) + { + modelType = modelTypes[rateType]; + chosenModelList[modelType] = 1; + } +} + +ChoiceList (shareType,"Choose parameter sharing mode",1,SKIP_NONE, + "All","Share dN/dS, transversion/transition ratio (if applicable) and base frequencies for all subsets.", + "dN/dS Only","Share only dN/dS. Transversion/transition ratio (if applicable) and base frequencies are separate for each subset." +); + +if (shareType<0) +{ + return; +} + +ChoiceList (modelType,"Choose a model",1,SKIP_NONE, + "MG94 1x4","Muse-Gaut 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "MG94 3x4","Muse-Gaut 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific).", + "GY94 1x4","Goldman-Yang 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "GY94 3x4","Goldman-Yang 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific)." +); + +if (modelType<0) +{ + return; +} + +if ((modelType==0)||(modelType==2)) +{ + if (shareType==0) + { + HarvestFrequencies (observedFreq,filteredData,1,1,0); + vectorOfFrequencies = BuildCodonFrequencies4 (observedFreq); + } + else + { + for (v=0; v1) +{ + global kappa = 2.; +} + +fprintf (stdout, "\n\n\nChoose the cutoff (0 to 1) for posterior of dN/dS>1 for a site to be considered under selective pressure:"); +fscanf (stdin, "Number",psigLevel); +if ((psigLevel <= 0)||(psigLevel>1)) +{ + psigLevel = .95; +} +fprintf (stdout, "\n>Using ", psigLevel , " cutoff\n"); + +fprintf (stdout, "\nChoose the number of categories in discretized distributions:"); +fscanf (stdin, "Number",categCount); +categCount = categCount$1; +if (categCount<=0) +{ + categCount = 8; +} + +fprintf (stdout, "\n>Using ", Format (categCount,0,0), " categories.\n"); + +SetDialogPrompt ("Write detailed results to:"); + +fprintf (PROMPT_FOR_FILE,CLEAR_FILE); + +global c = 1.; + +dummyVar = FrameText ("-","|",2,"SUMMARY TABLE"); +tableSeparator = "+-------------------------+----------------+---------------+-----+\n"; +fprintf (stdout, "\n\"p\" is the number of parameters in addition to the branch lengths.\nDetailed results including sites with dN/dS>1 will be written to\n",LAST_FILE_PATH,"\n\n"); +fprintf (stdout, tableSeparator, + "| MODEL (Number & Desc) | Log likelihood | dN/dS | p |\n", + tableSeparator); + +cachedBranchLengths = {{-1,-1}}; + +if (chosenModelList[0]>0) +{ + timer = Time(1); + fprintf (LAST_FILE_PATH,"\n*** RUNNING SINGLE RATE MODEL ***\n#################################\n"); + dummy = spawnLikelihood (shareType); + Optimize (res,lf); + fprintf (LAST_FILE_PATH,"\n>Done in ", Time(1)-timer, " seconds \n\n"); + fprintf (LAST_FILE_PATH,lf,"\n\n-----------------------------------\n\ndN/dS = ",c,"\n\n"); + + fprintf (stdout, "| 0. Single Rate Model | ",Format (res[1][0],14,6)," | ",Format (c,13,8)," | 0 |\n", + tableSeparator); + + timer = res[1][1]-res[1][2]; + cachedBranchLengths = {timer,1}; + + for (rateType = timer; rateType < Columns(cachedBranchLengths); rateType = rateType+1) + { + cachedBranchLengths[rateType-timer][0] = res [0][rateType]; + } +} + +for (rateType = 0; rateType < 16; rateType = rateType + 1) +{ + if (chosenModelList[rateType+1]==0) + { + continue; + } + timer = Time(1); + dummy = SetWDistribution (categCount); + dummy = spawnLikelihood (shareType); + + fprintf (LAST_FILE_PATH,"\n*** RUNNING MODEL ", Format(rateType+1,0,0), " (",ModelNames[rateType],") ***\n######################################\n"); + /*if (cachedBranchLengths[0][0]>=0.0) + { + v = ParameterCount[rateType]; + if (modelType>1) + { + v=v+1; + } + for (h=0; hDone in ",Time(1)-timer, " seconds \n\n", lf); + fprintf (stdout, "| "); + if (rateType<9) + { + fprintf (stdout," "); + } + fprintf (stdout, Format (rateType+1,0,0), ". ", ModelNames[rateType]); + for (dummy = Abs(ModelNames[rateType])+5; dummy<25; dummy = dummy+1) + { + fprintf (stdout," "); + } + dummy = GetDistributionParameters(psigLevel); + fprintf (stdout,"| ",Format (res[1][0],14,6)," | ",Format (dummy,13,8)," | ", + Format(ParameterCount[rateType],0,0)," |\n",tableSeparator); + + if (modelType>1) + { + kappa = 2.; + } +} diff --git a/samples/HyPhy/MatrixIndexing.bf b/samples/HyPhy/MatrixIndexing.bf new file mode 100755 index 00000000..aa1344d4 --- /dev/null +++ b/samples/HyPhy/MatrixIndexing.bf @@ -0,0 +1 @@ +fprintf (stdout, "\n1). Spawning a zero-populated 5x6 matrix and setting it's values to random numbers in [0,1].\n"); aMatrix = {5,6}; aMatrix = aMatrix ["Random(0,1)"]; fprintf (stdout, aMatrix, "\n"); fprintf (stdout, "\n2). Accessing a second-row third-column element and a random element.\n\n"); r = Random (0, Rows(aMatrix))$1; c = Random (0, Columns(aMatrix))$1; fprintf (stdout, "matrix[1][2]=", aMatrix[1][2], "\nmatrix[", r , "][" , c, "]=", aMatrix[r][c], "\n"); fprintf (stdout, "\n3). Accessing the fourth row.\n\n"); fprintf (stdout, "matrix[3][-1]=\n", aMatrix[3][-1],"\n"); fprintf (stdout, "\n4). Accessing the first column.\n\n"); fprintf (stdout, "matrix[-1][0]=\n", aMatrix[-1][0],"\n"); fprintf (stdout, "\n5). Populating a matrix template (below the diagonal).\n\n"); template={5,6}; template=template["_MATRIX_ELEMENT_ROW_>_MATRIX_ELEMENT_COLUMN_"]; fprintf (stdout, template ,"\n"); fprintf (stdout, "\n6). Extracting (by row) matrix elements using the template.\n\n"); fprintf (stdout, aMatrix[template] ,"\n"); fprintf (stdout, "\n7). Extracting a submatrix: top left corner at (1,1) - bottom right corner at (3,2).\n\n"); fprintf (stdout, "matrix[{{1,1}}][{{3,2}}]=\n", aMatrix[{{1,1}}][{{3,2}}],"\n"); fprintf (stdout, "\n8). Returning a matrix in which all elements are squared and above diagonal elements are further increased by 1.\n\n"); fprintf (stdout, "\n", aMatrix["_MATRIX_ELEMENT_VALUE_^2+(_MATRIX_ELEMENT_ROW_<_MATRIX_ELEMENT_COLUMN_)"],"\n"); \ No newline at end of file diff --git a/samples/HyPhy/MolecularClock.bf b/samples/HyPhy/MolecularClock.bf new file mode 100644 index 00000000..92606d2d --- /dev/null +++ b/samples/HyPhy/MolecularClock.bf @@ -0,0 +1,147 @@ +#include "molclockBootstrap.bf"; + +RESTORE_GLOBALS = 1; +_DO_TREE_REBALANCE_ = 0; +VERBOSITY_LEVEL = -1; + +function RestoreGlobalValues (lfIndex) +{ + if (lfIndex==0) + { + for (i=0;i1) +{ + ChoiceList (parameter2Constrain, "Parameter(s) to constrain:",1,SKIP_NONE,LAST_MODEL_PARAMETER_LIST); + + if (parameter2Constrain<0) + { + return; + } + if (parameter2Constrain==0) + { + parameter2ConstrainString = ""; + for (parameter2Constrain=Rows("LAST_MODEL_PARAMETER_LIST")-1; parameter2Constrain; parameter2Constrain = parameter2Constrain-1) + { + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain); + parameter2ConstrainString = parameter2ConstrainString + funnyString + ","; + } + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,0); + parameter2ConstrainString = parameter2ConstrainString + funnyString; + } + else + { + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain-1); + } +} +else +{ + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,0); +} + +timer = Time(0); + +LikelihoodFunction lf = (filteredData,givenTree); + +Optimize (res,lf); + +separator = "*-----------------------------------------------------------*"; + +fprintf (stdout, "\n", separator, "\nRESULTS WITHOUT THE CLOCK:\n",lf); + +fullModelLik = res[1][0]; + +fullVars = res[1][1]; + +/* now specify the constraint */ + +Tree clockTree = treeString; + +ExecuteCommands ("MolecularClock (clockTree,"+parameter2ConstrainString+");"); + +LikelihoodFunction lfConstrained = (filteredData, clockTree); + +USE_LAST_RESULTS = 1; +Optimize (res1,lfConstrained); +USE_LAST_RESULTS = 0; + +SAVE_GLOBALS = res1[1][2]; + +if (SAVE_GLOBALS) +{ + globalSpoolMatrix = {1,SAVE_GLOBALS}; + + for (i=0;idS in the data sets? + - Do the sites under positive selection share the same dN/dS? + - Two previous tests combined +*/ + +RequireVersion ("0.9920061001"); + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function BuildCodonFrequencies (obsF) +{ + PIStop = 1.0; + result = {ModelMatrixDimension,1}; + hshift = 0; + + for (h=0; h<64; h=h+1) + { + first = h$16; + second = h%16$4; + third = h%4; + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + PIStop = PIStop-obsF[first][0]*obsF[second][1]*obsF[third][2]; + continue; + } + result[h-hshift][0]=obsF[first][0]*obsF[second][1]*obsF[third][2]; + } + return result*(1.0/PIStop); +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function ReportDistributionString (rc,freqStrMx,infix, skip0) +{ + distroString = ""; + distroString * 1024; + + reportMx = {rc,4}; + + distroString * (" dN/dS dS dN Prob\n"); + for (mi=0; mi 0) + { + distroString * (Format(reportMx[mi][2],8,3)+Format(reportMx[mi][0],8,3)+Format(reportMx[mi][1],8,3)+Format(reportMx[mi][3],10,3)+"\n"); + } + } + + distroString * 0; + return distroString; +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function DefineNucleotideBiases (dummy) +{ + ModelTitle = "MG94x"+modelDesc[0]; + modelConstraintString = ""; + + for (customLoopCounter2=0; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + if (rateBiasTerms[customLoopCounter2] != "1") + { + ExecuteCommands ("global " + rateBiasTerms[customLoopCounter2] + "=1;"); + } + } + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter0.0000001;global NS_"+infix+"0 = 0.1;"); + + for (mi=1; mi0.0000001;\nglobal NS_"+infix+mi+";\n"); + if (randomizeInitValues) + { + categDef1*("global P_"+infix+mi+" = Random(0.05,0.95);\nP_"+infix+mi+":<1;\n"); + categDef1*("global S_"+infix+mi+" = Random(0.05,1);"); + } + else + { + categDef1*("global P_"+infix+mi+" = 1/"+(resp+1-mi)+";\nP_"+infix+mi+":<1;\n"); + } + } + + freqStrMx = {resp,1}; + if (resp>1) + { + freqStrMx[0] = "P_"+infix+"1"; + + for (mi=1; mi1;R_"+infix+mi+"="+Random(1.05,10)+";"); + } + } + else + { + for (mi=respN+respP; mi1;R_"+infix+mi+"=2+"+mi+";"); + } + } + } + else + { + if (randomizeInitValues) + { + for (mi=0; mi 1) + { + lfParts = lfParts + ",filteredData_" + fileID + "," + treeID; + } + } +} + +lfParts * 0; +ExecuteCommands (lfParts + "," + lfDef1 + ");"); + +sumPath = resToPath + ".summary"; + +treeBranchParameters = 0; +for (fileID = 1; fileID <= fileCount; fileID = fileID + 1) +{ + ExecuteCommands ("treeBranchParameters = treeBranchParameters + BranchCount(tree_" + fileID + "_0) + TipCount(tree_" + fileID + "_0);"); +} + +/*-------------- INDEPENDENT DISTRIBUTIONS ------------------*/ + +sop = Max(OPTIMIZATION_PRECISION,0.001); + +fprintf (stdout, "Running simpler distribution approximations to ensure good convergence...\n"); + +OPTIMIZATION_PRECISION = 0.1; + +P_1_1 := 0;P_1_2 := 0;P_1_3 := 0; +P_2_1 := 0;P_2_2 := 0;P_2_3 := 0; + +S_1_0 := 1;S_1_1 := 1;S_1_2 := 1;S_1_3 := 1; +S_2_0 := 1;S_2_1 := 1;S_2_2 := 1;S_2_3 := 1; +R_1_0 := 1;R_1_1 := 1;R_1_2 := 1; +R_2_0 := 1;R_2_1 := 1;R_2_2 := 1; + +Optimize (res,lf); +USE_LAST_RESULTS = 1; +SKIP_CONJUGATE_GRADIENT = 1; + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 1. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +codonFactor_1 := codonFactor_1__; +codonFactor_2 := codonFactor_2__; + +AC_1 := AC_1__; AT_1 := AT_1__; CG_1 := CG_1__; CT_1 := CT_1__; GT_1 := GT_1__; +AC_2 := AC_2__; AT_2 := AT_2__; CG_2 := CG_2__; CT_2 := CT_2__; GT_2 := GT_2__; + + + +fprintf (stdout, "\nGateaux sampling positively selected directions\n"); + +P_1_1 = 2/filteredData_1.sites; +S_1_3 = 1; + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; +bestLL = -1e100; + +step = 0.1; +step2 = 0.25; +v1 = 0.05; + +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("1_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +S_1_0 = bestAlpha; +R_1_0 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_1 = 0; +} +saveBD = bestDiff; + +P_2_1 = 1/filteredData_2.sites; +S_2_3 = 1; + +v1 = 0.05; +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("2_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_0 = bestAlpha; +R_2_0 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_1 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_0, ",", S_1_0*R_1_0, "), (", S_2_0, ",", S_2_0*R_2_0, "), ",bestDiff," likelihood points\n"); +} + + +Optimize (res,lf); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 2. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + + +fprintf (stdout, "\nGateaux sampling neutral directions\n"); + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); + +P_1_2 = 1/(filteredData_1.sites*(1-P_1_1)); +bestDiff = -1e100; +bestAlpha = 1; +step = 0.02; +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("1_1"); +} + + +S_1_1 = bestAlpha; +bestAlpha = 1; + +if (bestDiff <= 0) +{ + P_1_2 = 0; +} +saveBD = bestDiff; +R_1_1 := 1; + +P_2_2 = 1/(filteredData_2.sites*(1-P_2_1)); + +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("2_1"); +} + + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_1 = bestAlpha; +R_2_1 := 1; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_1, ",", S_1_1, "), (", S_2_1, ",", S_2_1, "), ",bestDiff," likelihood points\n"); +} + +Optimize (res,lf); +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 3. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +fprintf (stdout, "\nGateaux sampling negative selected directions\n"); + + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; + + +step = 1/16; +v1 = 0; +P_1_3 = 2/(filteredData_1.sites*(1-P_1_1)*(1-P_1_2)); +S_1_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("1_2"); + v2 = v2 + step; + } +} + + +S_1_2 = bestAlpha; +R_1_2 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_3 = 0; +} +saveBD = bestDiff; + + +v1 = 0; +P_2_3 = 2/(filteredData_2.sites*(1-P_2_1)*(1-P_2_2)); +S_2_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("2_2"); + v2 = v2 + step; + } +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_2 = bestAlpha; +R_2_2 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_2, ",", S_1_2*R_1_2, "), (", S_2_2, ",", S_2_2*R_2_2, "), ",bestDiff," likelihood points\n"); +} + +AC_1 = AC_1; AT_1 = AT_1; CG_1 = CG_1; CT_1 = CT_1; GT_1 = GT_1; +AC_2 = AC_2; AT_2 = AT_2; CG_2 = CG_2; CT_2 = CT_2; GT_2 = GT_2; + +if (Abs(modelConstraintString_1)) +{ + ExecuteCommands (modelConstraintString_1); +} +if (Abs(modelConstraintString_2)) +{ + ExecuteCommands (modelConstraintString_2); +} + +codonFactor_1 = codonFactor_1; +codonFactor_2 = codonFactor_2; + + +GetString (paramList, lf, -1); +degF = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; + +OPTIMIZATION_PRECISION = sop; +fprintf (stdout, "Running an independent distributions model fit (", degF, " parameters)...\n"); +Optimize (res,lf); +LogL = res[1][0]; + +AIC = 2*(degF-LogL); +AICc = 2*(degF*totalCodonCount/(totalCodonCount-degF-1) - LogL); + +fprintf (stdout, "\n\nIndependent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n" +); + +fprintf (sumPath,CLEAR_FILE,"Independent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n"); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",0); + +fprintf (stdout, "Inferred rates for data set 1:\n", d1); +fprintf (sumPath, "Inferred rates for data set 1:\n", d1); +fprintf (stdout, "Inferred rates for data set 2:\n", d2); +fprintf (sumPath, "Inferred rates for data set 2:\n", d2); + +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (resToPath,CLEAR_FILE,lf); + + +/*-------------- SHARED POSITIVE SELECTION STRENGTHS ------------------*/ + +for (k=0; k=respP+respN) + { + ExecuteCommands ("R_1_"+k+"=0.5(R_1_"+k+"+R_2_"+k+");"); + } + ExecuteCommands ("S_2_"+k+":=S_1_"+k+";R_2_"+k+":=R_1_"+k+";"); +} +for (k=1; k<=resp; k=k+1) +{ + ExecuteCommands ("P_1_"+k+"=0.5(P_1_"+k+"+P_2_"+k+");"); + ExecuteCommands ("P_2_"+k+":=P_1_"+k+";"); +} + +GetString (paramList, lf, -1); +degFJ = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; +fprintf (stdout, "\nRunning a shared distributions model fit (", degFJ, " parameters)...\n"); + +Optimize (res_J,lf); +LogLJ = res_J[1][0]; + +AICJ = 2*(degFJ-LogLJ); +AICcJ = 2*(degFJ*totalCodonCount/(totalCodonCount-degFJ-1) - LogLJ); + +fprintf (stdout, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +fprintf (sumPath, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); + +fprintf (stdout, "Inferred joint rates:\n", d1); +fprintf (sumPath, "Inferred joint rates:\n", d1); + +fpath = resToPath + ".JointAll"; +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (fpath,CLEAR_FILE,lf); + +USE_LAST_RESULTS = 0; +SKIP_CONJUGATE_GRADIENT = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 2; + +fprintf (stdout, "\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (stdout, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); + +fprintf (sumPath, "\n\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); +/*------------------------------------------------------------------------------------------------------------*/ + +function checkASample (whichRate) +{ + ExecuteCommands ("S_"+whichRate+"=v1;R_"+whichRate+"=v2/v1;"); + LFCompute (lf,res_n); + localDiff = res_n-baseLineLL; + if (localDiff > bestDiff) + { + bestDiff = localDiff; + bestAlpha = v1; + bestBeta = v2/v1; + } + return 0; +} diff --git a/samples/HyPhy/hyphy_cmds.bf b/samples/HyPhy/hyphy_cmds.bf new file mode 100644 index 00000000..7a2189f9 --- /dev/null +++ b/samples/HyPhy/hyphy_cmds.bf @@ -0,0 +1,11003 @@ +INTEGRATION_PRECISION_FACTOR = 5.0e-6; +END_OF_FILE = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 5; +ACCEPT_BRANCH_LENGTHS = 1; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//NTsCodonsAAs.ibf"; +fprintf(stdout, "Running HYPHY script hyphy_cmds.bf...\n"); +DataSet data = ReadDataFile("_codenames_Aligned_NPs_Swine.fasta"); +assert(data.sites % 3 == 0, "Sequence lengths not multiples of 3"); +totalcodons = data.sites $ 3; +fprintf(stdout, "Read from _codenames_Aligned_NPs_Swine.fasta a set of ", data.species, " sequences consisting of ", data.sites, " nucleotides corresponding to ", totalcodons, " codons each.\n"); +fprintf(stdout, "The analysis will include the following 498 codon positions (sequential numbering starting with 1):\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498\n"); +assert(totalcodons >= 498, "Largest included site exceeds sequence length"); +DataSetFilter codonfilter = CreateFilter(data, 3, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493", "", "TAA,TAG,TGA"); +assert(data.species == codonfilter.species, "species number mismatch"); +assert(codonfilter.sites == 498, "Codon filtered data does not contain the right number of sites"); +fprintf(stdout, "Created a codon filter of ", codonfilter.sites, " sites.\n"); +assert(totalcodons - (totalcodons - 498) - 0 == codonfilter.sites, "Codon filtered data is not the expected length. Do sequences contain stop codons?"); +CheckCodonFilter("codonfilter"); +fprintf(stdout, "Reading tree string from _codenames_codonphyml_Swine_tree.newick.\n"); +fscanf("_codenames_codonphyml_Swine_tree.newick", String, treestring); +fprintf(stdout, "Using the Goldman Yang 1994 (GY94) codon model...\n"); +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//CF3x4.ibf"; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//GY94.ibf"; +CreateGY94Model("CF3x4", "global", "global", 4, 4, 1); +UseModel(model); +ExecuteCommands("Tree tree = treestring;") +assert(codonfilter.species == TipCount(tree), "Number of species and number of tips differ"); +LikelihoodFunction likelihood = (codonfilter, tree); +fprintf(stdout, "\nNow optimizing the likelihood function...\n"); +Optimize(mlestimates, likelihood) +fprintf(stdout, "Completed likelihood optimization. Optimized ", mlestimates[1][1], " indpendent parameters and ", mlestimates[1][2], " shared parameters to obtain a log likelihood of ", mlestimates[1][0], ".\n"); +fprintf(stdout, "Writing the results to hyphy_output.txt.\n"); +fprintf("hyphy_output.txt", "Log likelihood: ", mlestimates[1][0], "\nindependent parameters (includes branch lengths): ", mlestimates[1][1], "\nshared parameters: ", mlestimates[1][2], "\nnumber of branch lengths: ", TipCount(tree) + BranchCount(tree), "\nnumber of tip nodes: ", TipCount(tree), "\nnumber of internal branches: ", BranchCount(tree), "\n",likelihood); +fprintf(stdout, "\nNow computing per-site likelihoods.\n"); +fprintf(stdout, "\nFirst fixing all global variables to the maximum-likelihood values estimated on the entire tree.\n"); +GetString(associativearray, likelihood, -1); +globalindependentvariables = associativearray["Global Independent"]; +for (ivariable=0; ivariable * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +package jflex; + +import java_cup.runtime.Symbol; +import java.io.*; +import java.util.Stack; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import jflex.unicode.UnicodeProperties; + +%% + +%final +%public +%class LexScan +%implements sym, java_cup.runtime.Scanner +%function next_token + +%type Symbol +%unicode + +%column +%line + +%eofclose + +%state COMMENT, STATELIST, MACROS, REGEXPSTART +%state REGEXP, JAVA_CODE, STATES, STRING_CONTENT +%state CHARCLASS, COPY, REPEATEXP, EATWSPNL +%state CTOR_ARG, REGEXP_CODEPOINT_SEQUENCE +%state STRING_CODEPOINT_SEQUENCE, CHARCLASS_CODEPOINT + +%inputstreamctor false + +%cupdebug + +%{ + int balance = 0; + int commentbalance = 0; + int action_line = 0; + int bufferSize = 16384; + + File file; + Stack files = new Stack(); + + StringBuilder userCode = new StringBuilder(); + + String classCode; + String initCode; + String initThrow; + String eofCode; + String eofThrow; + String lexThrow; + String eofVal; + String scanErrorException; + String cupSymbol = "sym"; + + StringBuilder actionText = new StringBuilder(); + StringBuilder string = new StringBuilder(); + + private UnicodeProperties unicodeProperties; + + boolean charCount; + boolean lineCount; + boolean columnCount; + boolean cupCompatible; + boolean cup2Compatible; + boolean cupDebug; + boolean isInteger; + boolean isIntWrap; + boolean isYYEOF; + boolean notUnix; + boolean isPublic; + boolean isFinal; + boolean isAbstract; + boolean bolUsed; + boolean standalone; + boolean debugOption; + boolean caseless; + boolean inclusive_states; + boolean eofclose; + boolean isASCII; + // TODO: In the version of JFlex after 1.6, the InputStream ctor + // TODO: will never be emitted, and this option will cease to exist. + boolean emitInputStreamCtor = Options.emitInputStreamCtor; + + String isImplementing; + String isExtending; + String className = "Yylex"; + String functionName; + String tokenType; + String visibility = "public"; + + List ctorArgs = new ArrayList(); + List ctorTypes = new ArrayList(); + + LexicalStates states = new LexicalStates(); + + List actions = new ArrayList(); + + private int nextState; + + boolean macroDefinition; + + Timer t = new Timer(); + + // CharClasses.init() is delayed until UnicodeProperties.init() has been called, + // since the max char code won't be known until then. + private CharClasses charClasses = new CharClasses(); + + public CharClasses getCharClasses() { + return charClasses; + } + + public int currentLine() { + return yyline; + } + + public void setFile(File file) { + this.file = file; + } + + private Symbol symbol(int type, Object value) { + return new Symbol(type, yyline, yycolumn, value); + } + + private Symbol symbol(int type) { + return new Symbol(type, yyline, yycolumn); + } + + // updates line and column count to the beginning of the first + // non whitespace character in yytext, but leaves yyline+yycolumn + // untouched + private Symbol symbol_countUpdate(int type, Object value) { + int lc = yyline; + int cc = yycolumn; + String text = yytext(); + + for (int i=0; i < text.length(); i++) { + char c = text.charAt(i); + + if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) + return new Symbol(type, lc, cc, value); + + if (c == '\n') { + lc++; + cc = 0; + } + else + cc++; + } + + return new Symbol(type, yyline, yycolumn, value); + } + + private String makeMacroIdent() { + String matched = yytext().trim(); + return matched.substring(1, matched.length()-1).trim(); + } + + public static String conc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+b.toString(); + } + + public static String concExc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+", "+b.toString(); + } + + public UnicodeProperties getUnicodeProperties() { + return unicodeProperties; + } + + private void populateDefaultVersionUnicodeProperties() { + try { + unicodeProperties = new UnicodeProperties(); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + + private void includeFile(String filePath) { + File f = new File(file.getParentFile(), filePath); + if ( !f.canRead() ) + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + // check for cycle + if (files.search(f) > 0) + throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); + try { + yypushStream( new FileReader(f) ); + files.push(file); + file = f; + Out.println("Including \""+file+"\""); + } + catch (FileNotFoundException e) { + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + } + } +%} + +%init{ + states.insert("YYINITIAL", true); +%init} + + +Digit = [0-9] +HexDigit = [0-9a-fA-F] +OctDigit = [0-7] + +Number = {Digit}+ +HexNumber = \\ x {HexDigit} {2} +OctNumber = \\ [0-3]? {OctDigit} {1, 2} + +// Unicode4 can encode chars only in the BMP with the 16 bits provided by its +// 4 hex digits. +Unicode4 = \\ u {HexDigit} {4} + +// Unicode6 can encode all Unicode chars, both in the BMP and in the +// supplementary planes -- only 21 bits are required as of Unicode 5.0, +// but its six hex digits provide 24 bits. +Unicode6 = \\ U {HexDigit} {6} + +// see http://www.unicode.org/unicode/reports/tr18/ +WSP = [ \t\b] +WSPNL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NWSPNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085] | \u000D\u000A +NNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085] + +Ident = {IdentStart} {IdentPart}* +QualIdent = {Ident} ( {WSP}* "." {WSP}* {Ident} )* +QUIL = {QualIdent} ( {WSP}* "," {WSP}* {QualIdent} )* +Array = "[" {WSP}* "]" +ParamPart = {IdentStart}|{IdentPart}|"<"|">"|","|{WSP}|"&"|"?"|"." +GenParam = "<" {ParamPart}+ ">" +ClassT = {Ident} ({WSP}* {GenParam})? +QClassT = {QualIdent} ({WSP}* {GenParam})? +ArrType = ({GenParam} {WSP}*)? {QClassT} ({WSP}* {Array})* + +IdentStart = [:jletter:] +IdentPart = [:jletterdigit:] + +JFlexCommentChar = [^*/]|"/"+[^*/]|"*"+[^*/] +JFlexComment = {JFlexCommentChar}+ + +/* Java comments */ +JavaComment = {TraditionalComment}|{EndOfLineComment} +TraditionalComment = "/*"{CommentContent}\*+"/" +EndOfLineComment = "//".*{NL} + +CommentContent = ([^*]|\*+[^*/])* + +StringCharacter = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\"\\] + +CharLiteral = \'([^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\'\\]|{EscapeSequence})\' +StringLiteral = \"({StringCharacter}|{EscapeSequence})*\" + +EscapeSequence = \\[^\u2028\u2029\u000A\u000B\u000C\u000D\u0085]|\\+u{HexDigit}{4}|\\[0-3]?{OctDigit}{1,2} + +/* \\(b|t|n|f|r|\"|\'|\\|[0-3]?{OctDigit}{1,2}|u{HexDigit}{4}) */ + +JavaRest = [^\{\}\"\'/]|"/"[^*/] +JavaCode = ({JavaRest}|{StringLiteral}|{CharLiteral}|{JavaComment})+ + +DottedVersion = [1-9][0-9]*(\.[0-9]+){0,2} + +%% + + { + "%%".*{NL}? { + t.start(); + yybegin(MACROS); + macroDefinition = true; + return symbol(USERCODE,userCode); + } + .*{NL} | .+ { userCode.append(yytext()); } + <> { return symbol(EOF); } +} + + ("%{"|"%init{"|"%initthrow{"|"%eof{"|"%eofthrow{"|"%yylexthrow{"|"%eofval{").*{NL} + { string.setLength(0); yybegin(COPY); } + { + "%}".*{NL} { classCode = conc(classCode,string); yybegin(MACROS); } + "%init}".*{NL} { initCode = conc(initCode,string); yybegin(MACROS); } + "%initthrow}".*{NL} { initThrow = concExc(initThrow,string); yybegin(MACROS); } + "%eof}".*{NL} { eofCode = conc(eofCode,string); yybegin(MACROS); } + "%eofthrow}".*{NL} { eofThrow = concExc(eofThrow,string); yybegin(MACROS); } + "%yylexthrow}".*{NL} { lexThrow = concExc(lexThrow,string); yybegin(MACROS); } + "%eofval}".*{NL} { eofVal = string.toString(); yybegin(MACROS); } + + .*{NL} { string.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + + ^"%s" ("tate" "s"?)? {WSP}+ { inclusive_states = true; yybegin(STATELIST); } + ^"%x" ("state" "s"?)? {WSP}+ { inclusive_states = false; yybegin(STATELIST); } + { + {Ident} { states.insert(yytext(),inclusive_states); } + ([\ \t]*","[\ \t]*)|([\ \t]+) { } + {NL} { yybegin(MACROS); } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + { + "%char" { charCount = true; } + "%line" { lineCount = true; } + "%column" { columnCount = true; } + "%byaccj" { isInteger = true; + if (eofVal == null) + eofVal = "return 0;"; + eofclose = true; + } + "%cup2" { cup2Compatible = true; + isImplementing = concExc(isImplementing, "Scanner"); + lineCount = true; + columnCount = true; + if (functionName == null) + functionName = "readNextTerminal"; + if (tokenType == null) + tokenType = "ScannerToken"; + if (eofVal == null) + eofVal = "return token(SpecialTerminals.EndOfInputStream);"; + if (!Options.jlex) eofclose = true; + return symbol(UNICODE); // %unicode + } + "%cup" { cupCompatible = true; + isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); + if (functionName == null) + functionName = "next_token"; + if (tokenType == null) + tokenType = "java_cup.runtime.Symbol"; + if (eofVal == null) + eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; + if (!Options.jlex) eofclose = true; + } + "%cupsym"{WSP}+{QualIdent} {WSP}* { cupSymbol = yytext().substring(8).trim(); + if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); } + "%cupsym"{WSP}+{NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); } + "%cupdebug" { cupDebug = true; } + "%eofclose"({WSP}+"true")? { eofclose = true; } + "%eofclose"({WSP}+"false") { eofclose = false; } + "%class"{WSP}+{ClassT} {WSP}* { className = yytext().substring(7).trim(); } + "%ctorarg"{WSP}+{ArrType}{WSP}+ { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); } + "%function"{WSP}+{Ident} {WSP}* { functionName = yytext().substring(10).trim(); } + "%type"{WSP}+{ArrType} {WSP}* { tokenType = yytext().substring(6).trim(); } + "%integer"|"%int" { isInteger = true; } + "%intwrap" { isIntWrap = true; } + "%yyeof" { isYYEOF = true; } + "%notunix" { notUnix = true; } + "%7bit" { isASCII = true; return symbol(ASCII); } + "%full"|"%8bit" { return symbol(FULL); } + "%16bit" { populateDefaultVersionUnicodeProperties(); + return symbol(UNICODE); + } + "%unicode"({WSP}+{DottedVersion})? { String v = yytext().substring(8).trim(); + if (v.length() == 0) { + populateDefaultVersionUnicodeProperties(); + } else { + try { + unicodeProperties = new UnicodeProperties(v); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + return symbol(UNICODE); + } + + "%caseless"|"%ignorecase" { caseless = true; } + "%implements"{WSP}+.* { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); } + "%extends"{WSP}+{QClassT}{WSP}* { isExtending = yytext().substring(9).trim(); } + "%public" { isPublic = true; } + "%apiprivate" { visibility = "private"; Skeleton.makePrivate(); } + "%final" { isFinal = true; } + "%abstract" { isAbstract = true; } + "%debug" { debugOption = true; } + "%standalone" { standalone = true; isInteger = true; } + "%pack" { /* no-op - this is the only generation method */ } + "%include" {WSP}+ .* { includeFile(yytext().substring(9).trim()); } + "%buffer" {WSP}+ {Number} {WSP}* { bufferSize = Integer.parseInt(yytext().substring(8).trim()); } + "%buffer" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); } + "%initthrow" {WSP}+ {QUIL} {WSP}* { initThrow = concExc(initThrow,yytext().substring(11).trim()); } + "%initthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); } + "%eofthrow" {WSP}+ {QUIL} {WSP}* { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); } + "%eofthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); } + "%yylexthrow"{WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); } + "%throws" {WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); } + "%yylexthrow"{WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); } + "%throws" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); } + "%scanerror" {WSP}+ {QualIdent} {WSP}* { scanErrorException = yytext().substring(11).trim(); } + "%scanerror" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); } +// TODO: In the version of JFlex after 1.6, the %inputstreamctor directive will become a no-op: the InputStream ctor will never be emitted. + "%inputstreamctor"({WSP}+"true")? { emitInputStreamCtor = true; } + "%inputstreamctor"{WSP}+"false" { emitInputStreamCtor = false; } + + {Ident} { return symbol(IDENT, yytext()); } + "="{WSP}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + yybegin(REGEXP); + return symbol(EQUALS); + } + + "/*" { nextState = MACROS; yybegin(COMMENT); } + + {EndOfLineComment} { } + + ^"%%" {NNL}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + macroDefinition = false; + yybegin(REGEXPSTART); + return symbol(DELIMITER); + } + "%"{Ident} { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + "%" { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + ^{WSP}+"%" { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); } + + {WSP}+ { } + {NL}+ { } + <> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else + throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); + } +} + + { + {Ident} {WSP}* { yybegin(MACROS); ctorArgs.add(yytext().trim()); } + [^] { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); } +} + + { + ^ {WSP}* "%include" {WSP}+ .* { includeFile(yytext().trim().substring(9).trim()); } + {WSP}* "/*" { nextState = REGEXPSTART; yybegin(COMMENT); } + {WSP}* "<" { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); } + {WSP}* "}" { return symbol_countUpdate(RBRACE, null); } + {WSP}* "//" {NNL}* { } + {WSP}* "<>" {WSPNL}* "{" { actionText.setLength(0); yybegin(JAVA_CODE); + Symbol s = symbol_countUpdate(EOFRULE, null); + action_line = s.left+1; + return s; + } + ^ {WSP}* {NWSPNL} { yypushback(yylength()); yybegin(REGEXP); } + {WSP} | {NL} { } +} + + { + {Ident} { return symbol(IDENT, yytext()); } + "," { return symbol(COMMA); } + {WSPNL}+ { } + + // "{" will be caught in REGEXP + ">"{WSPNL}* { yybegin(REGEXP); return symbol(MORETHAN); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); } +} + + + { + "<>" {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); } + "<>" { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); } + + {WSPNL}*"|"{WSP}*$ { if (macroDefinition) { + yybegin(EATWSPNL); + return symbol(BAR); + } + else { + yybegin(REGEXPSTART); + return symbol(NOACTION); + } + } + + // stategroup + "{" { yybegin(REGEXPSTART); return symbol(LBRACE); } + + {WSPNL}*"|" { return symbol(BAR); } + + {WSPNL}*\" { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); } + {WSPNL}*"\\u{" { string.setLength(0); yybegin(REGEXP_CODEPOINT_SEQUENCE); } + {WSPNL}*"!" { return symbol(BANG); } + {WSPNL}*"~" { return symbol(TILDE); } + {WSPNL}*"(" { return symbol(OPENBRACKET); } + {WSPNL}*")" { return symbol(CLOSEBRACKET); } + {WSPNL}*"*" { return symbol(STAR); } + {WSPNL}*"+" { return symbol(PLUS); } + {WSPNL}*"?" { return symbol(QUESTION); } + {WSPNL}*"$" { return symbol(DOLLAR); } + {WSPNL}*"^" { bolUsed = true; return symbol(HAT); } + {WSPNL}*"." { return symbol(POINT); } + {WSPNL}*"\\R" { return symbol(NEWLINE); } + {WSPNL}*"[" { yybegin(CHARCLASS); return symbol(OPENCLASS); } + {WSPNL}*"/" { return symbol(LOOKAHEAD); } + + {WSPNL}* "{" {WSP}* {Ident} {WSP}* "}" { return symbol_countUpdate(MACROUSE, makeMacroIdent()); } + {WSPNL}* "{" {WSP}* {Number} { yybegin(REPEATEXP); + return symbol(REPEAT, + new Integer(yytext().trim().substring(1).trim())); + } + + {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); } + {NL} { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); } + + {WSPNL}*"/*" { nextState = REGEXP; yybegin(COMMENT); } + + {WSPNL}*"//"{NNL}* { } + + {WSP}+ { } + + { + {WSPNL}*"[:jletter:]" { return symbol(JLETTERCLASS); } + {WSPNL}*"[:jletterdigit:]" { return symbol(JLETTERDIGITCLASS); } + {WSPNL}*"[:letter:]" { return symbol(LETTERCLASS); } + {WSPNL}*"[:uppercase:]" { return symbol(UPPERCLASS); } + {WSPNL}*"[:lowercase:]" { return symbol(LOWERCLASS); } + {WSPNL}*"[:digit:]" { return symbol(DIGITCLASS); } + {WSPNL}*"\\d" { return symbol(DIGITCLASS); } + {WSPNL}*"\\D" { return symbol(DIGITCLASSNOT); } + {WSPNL}*"\\s" { return symbol(WHITESPACECLASS); } + {WSPNL}*"\\S" { return symbol(WHITESPACECLASSNOT); } + {WSPNL}*"\\w" { return symbol(WORDCLASS); } + {WSPNL}*"\\W" { return symbol(WORDCLASSNOT); } + {WSPNL}*"\\p{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASS, set); + } + {WSPNL}*"\\P{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASSNOT, set); + } + } + + . { return symbol(CHAR, yytext().codePointAt(0)); } +} + + {WSPNL}+ { yybegin(REGEXP); } + + + { + "}" { yybegin(REGEXP); return symbol(RBRACE); } + "," {WSP}* {Number} { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); } + {WSP}+ { } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + "{"{Ident}"}" { return symbol(MACROUSE, yytext().substring(1,yylength()-1)); } + "[" { balance++; return symbol(OPENCLASS); } + "]" { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); } + "^" { return symbol(HAT); } + "-" { return symbol(DASH); } + "--" { return symbol(DIFFERENCE); } + "&&" { return symbol(INTERSECTION); } + "||" { /* union is the default operation - '||' can be ignored */ } + "~~" { return symbol(SYMMETRICDIFFERENCE); } + "\\u{" { yybegin(CHARCLASS_CODEPOINT); } + + // this is a hack to keep JLex compatibilty with char class + // expressions like [+-] + "-]" { yypushback(1); yycolumn--; return symbol(CHAR, (int)'-'); } + + \" { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); } + + . { return symbol(CHAR, yytext().codePointAt(0)); } + + \n { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + \" { yybegin(nextState); return symbol(STRING, string.toString()); } + \\\" { string.append('\"'); } + [^\"\\\u2028\u2029\u000A\u000B\u000C\u000D\u0085]+ { string.append(yytext()); } + + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + + {HexNumber} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { string.append( (char) Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + "\\u{" { yybegin(STRING_CODEPOINT_SEQUENCE); } + + \\b { string.append('\b'); } + \\n { string.append('\n'); } + \\t { string.append('\t'); } + \\f { string.append('\f'); } + \\r { string.append('\r'); } + + \\. { string.append(yytext().substring(1, yytext().offsetByCodePoints(1, 1))); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + + { + {HexNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + \\b { return symbol(CHAR, (int)'\b'); } + \\n { return symbol(CHAR, (int)'\n'); } + \\t { return symbol(CHAR, (int)'\t'); } + \\f { return symbol(CHAR, (int)'\f'); } + \\r { return symbol(CHAR, (int)'\r'); } + + \\. { return symbol(CHAR, yytext().codePointAt(1)); } +} + + + { + "{" { balance++; actionText.append('{'); } + "}" { if (balance > 0) { + balance--; + actionText.append('}'); + } + else { + yybegin(REGEXPSTART); + Action a = new Action(actionText.toString(), action_line); + actions.add(a); + return symbol(ACTION, a); + } + } + + {JavaCode} { actionText.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); } +} + + { + + "/"+ "*" { commentbalance++; } + "*"+ "/" { if (commentbalance > 0) + commentbalance--; + else + yybegin(nextState); + } + + {JFlexComment} { /* ignore */ } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); } +} + + { + "}" { yybegin(REGEXP); return symbol(STRING, string.toString()); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {WSPNL}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { // Specialized form: newlines disallowed, and doesn't return a symbol + "}" { yybegin(STRING_CONTENT); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + {WSP}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + { // Specialized form: only one codepoint allowed, no whitespace allowed + {HexDigit}{1,6} "}" { int codePoint = Integer.parseInt(yytext().substring(0, yylength() - 1), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + yybegin(CHARCLASS); + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + +. { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); } +\R { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); } + +<> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else { + return symbol(EOF); + } + } diff --git a/samples/JFlex/java.jflex b/samples/JFlex/java.jflex new file mode 100644 index 00000000..b12f15d2 --- /dev/null +++ b/samples/JFlex/java.jflex @@ -0,0 +1,305 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright (C) 1998-2015 Gerwin Klein * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Java 1.2 language lexer specification */ + +/* Use together with unicode.flex for Unicode preprocesssing */ +/* and java12.cup for a Java 1.2 parser */ + +/* Note that this lexer specification is not tuned for speed. + It is in fact quite slow on integer and floating point literals, + because the input is read twice and the methods used to parse + the numbers are not very fast. + For a production quality application (e.g. a Java compiler) + this could be optimized */ + + +import java_cup.runtime.*; + +%% + +%public +%class Scanner +%implements sym + +%unicode + +%line +%column + +%cup +%cupdebug + +%{ + StringBuilder string = new StringBuilder(); + + private Symbol symbol(int type) { + return new JavaSymbol(type, yyline+1, yycolumn+1); + } + + private Symbol symbol(int type, Object value) { + return new JavaSymbol(type, yyline+1, yycolumn+1, value); + } + + /** + * assumes correct representation of a long value for + * specified radix in scanner buffer from start + * to end + */ + private long parseLong(int start, int end, int radix) { + long result = 0; + long digit; + + for (int i = start; i < end; i++) { + digit = Character.digit(yycharat(i),radix); + result*= radix; + result+= digit; + } + + return result; + } +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f] + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} | + {DocumentationComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? +DocumentationComment = "/*" "*"+ [^/*] ~"*/" + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* +DecLongLiteral = {DecIntegerLiteral} [lL] + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexLongLiteral = 0 [xX] 0* {HexDigit} {1,16} [lL] +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctLongLiteral = 0+ 1? {OctDigit} {1,21} [lL] +OctDigit = [0-7] + +/* floating point literals */ +FloatLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [fF] +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] + +%state STRING, CHARLITERAL + +%% + + { + + /* keywords */ + "abstract" { return symbol(ABSTRACT); } + "boolean" { return symbol(BOOLEAN); } + "break" { return symbol(BREAK); } + "byte" { return symbol(BYTE); } + "case" { return symbol(CASE); } + "catch" { return symbol(CATCH); } + "char" { return symbol(CHAR); } + "class" { return symbol(CLASS); } + "const" { return symbol(CONST); } + "continue" { return symbol(CONTINUE); } + "do" { return symbol(DO); } + "double" { return symbol(DOUBLE); } + "else" { return symbol(ELSE); } + "extends" { return symbol(EXTENDS); } + "final" { return symbol(FINAL); } + "finally" { return symbol(FINALLY); } + "float" { return symbol(FLOAT); } + "for" { return symbol(FOR); } + "default" { return symbol(DEFAULT); } + "implements" { return symbol(IMPLEMENTS); } + "import" { return symbol(IMPORT); } + "instanceof" { return symbol(INSTANCEOF); } + "int" { return symbol(INT); } + "interface" { return symbol(INTERFACE); } + "long" { return symbol(LONG); } + "native" { return symbol(NATIVE); } + "new" { return symbol(NEW); } + "goto" { return symbol(GOTO); } + "if" { return symbol(IF); } + "public" { return symbol(PUBLIC); } + "short" { return symbol(SHORT); } + "super" { return symbol(SUPER); } + "switch" { return symbol(SWITCH); } + "synchronized" { return symbol(SYNCHRONIZED); } + "package" { return symbol(PACKAGE); } + "private" { return symbol(PRIVATE); } + "protected" { return symbol(PROTECTED); } + "transient" { return symbol(TRANSIENT); } + "return" { return symbol(RETURN); } + "void" { return symbol(VOID); } + "static" { return symbol(STATIC); } + "while" { return symbol(WHILE); } + "this" { return symbol(THIS); } + "throw" { return symbol(THROW); } + "throws" { return symbol(THROWS); } + "try" { return symbol(TRY); } + "volatile" { return symbol(VOLATILE); } + "strictfp" { return symbol(STRICTFP); } + + /* boolean literals */ + "true" { return symbol(BOOLEAN_LITERAL, true); } + "false" { return symbol(BOOLEAN_LITERAL, false); } + + /* null literal */ + "null" { return symbol(NULL_LITERAL); } + + + /* separators */ + "(" { return symbol(LPAREN); } + ")" { return symbol(RPAREN); } + "{" { return symbol(LBRACE); } + "}" { return symbol(RBRACE); } + "[" { return symbol(LBRACK); } + "]" { return symbol(RBRACK); } + ";" { return symbol(SEMICOLON); } + "," { return symbol(COMMA); } + "." { return symbol(DOT); } + + /* operators */ + "=" { return symbol(EQ); } + ">" { return symbol(GT); } + "<" { return symbol(LT); } + "!" { return symbol(NOT); } + "~" { return symbol(COMP); } + "?" { return symbol(QUESTION); } + ":" { return symbol(COLON); } + "==" { return symbol(EQEQ); } + "<=" { return symbol(LTEQ); } + ">=" { return symbol(GTEQ); } + "!=" { return symbol(NOTEQ); } + "&&" { return symbol(ANDAND); } + "||" { return symbol(OROR); } + "++" { return symbol(PLUSPLUS); } + "--" { return symbol(MINUSMINUS); } + "+" { return symbol(PLUS); } + "-" { return symbol(MINUS); } + "*" { return symbol(MULT); } + "/" { return symbol(DIV); } + "&" { return symbol(AND); } + "|" { return symbol(OR); } + "^" { return symbol(XOR); } + "%" { return symbol(MOD); } + "<<" { return symbol(LSHIFT); } + ">>" { return symbol(RSHIFT); } + ">>>" { return symbol(URSHIFT); } + "+=" { return symbol(PLUSEQ); } + "-=" { return symbol(MINUSEQ); } + "*=" { return symbol(MULTEQ); } + "/=" { return symbol(DIVEQ); } + "&=" { return symbol(ANDEQ); } + "|=" { return symbol(OREQ); } + "^=" { return symbol(XOREQ); } + "%=" { return symbol(MODEQ); } + "<<=" { return symbol(LSHIFTEQ); } + ">>=" { return symbol(RSHIFTEQ); } + ">>>=" { return symbol(URSHIFTEQ); } + + /* string literal */ + \" { yybegin(STRING); string.setLength(0); } + + /* character literal */ + \' { yybegin(CHARLITERAL); } + + /* numeric literals */ + + /* This is matched together with the minus, because the number is too big to + be represented by a positive integer. */ + "-2147483648" { return symbol(INTEGER_LITERAL, new Integer(Integer.MIN_VALUE)); } + + {DecIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer(yytext())); } + {DecLongLiteral} { return symbol(INTEGER_LITERAL, new Long(yytext().substring(0,yylength()-1))); } + + {HexIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(2, yylength(), 16))); } + {HexLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(2, yylength()-1, 16))); } + + {OctIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(0, yylength(), 8))); } + {OctLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(0, yylength()-1, 8))); } + + {FloatLiteral} { return symbol(FLOATING_POINT_LITERAL, new Float(yytext().substring(0,yylength()-1))); } + {DoubleLiteral} { return symbol(FLOATING_POINT_LITERAL, new Double(yytext())); } + {DoubleLiteral}[dD] { return symbol(FLOATING_POINT_LITERAL, new Double(yytext().substring(0,yylength()-1))); } + + /* comments */ + {Comment} { /* ignore */ } + + /* whitespace */ + {WhiteSpace} { /* ignore */ } + + /* identifiers */ + {Identifier} { return symbol(IDENTIFIER, yytext()); } +} + + { + \" { yybegin(YYINITIAL); return symbol(STRING_LITERAL, string.toString()); } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated string at end of line"); } +} + + { + {SingleCharacter}\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, yytext().charAt(0)); } + + /* escape sequences */ + "\\b"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\b');} + "\\t"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\t');} + "\\n"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\n');} + "\\f"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\f');} + "\\r"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\r');} + "\\\""\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\"');} + "\\'"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\'');} + "\\\\"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\\'); } + \\[0-3]?{OctDigit}?{OctDigit}\' { yybegin(YYINITIAL); + int val = Integer.parseInt(yytext().substring(1,yylength()-1),8); + return symbol(CHARACTER_LITERAL, (char)val); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated character literal at end of line"); } +} + +/* error fallback */ +[^] { throw new RuntimeException("Illegal character \""+yytext()+ + "\" at line "+yyline+", column "+yycolumn); } +<> { return symbol(EOF); } \ No newline at end of file diff --git a/samples/JavaScript/js.script! b/samples/JavaScript/js similarity index 100% rename from samples/JavaScript/js.script! rename to samples/JavaScript/js diff --git a/samples/JavaScript/js2.script! b/samples/JavaScript/js2 similarity index 100% rename from samples/JavaScript/js2.script! rename to samples/JavaScript/js2 diff --git a/samples/KiCad/Volume.sch b/samples/KiCad/Volume.sch new file mode 100644 index 00000000..2141db90 --- /dev/null +++ b/samples/KiCad/Volume.sch @@ -0,0 +1,714 @@ +EESchema Schematic File Version 2 +LIBS:mfk_alps +LIBS:mfk_connector +LIBS:mfk_interface +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:Volume-AlpsRK16814MG-cache +EELAYER 27 0 +EELAYER END +$Descr A 11000 8500 +encoding utf-8 +Sheet 1 1 +Title "ALPS RK16816MG with H-bridge" +Date "4 apr 2015" +Rev "" +Comp "Mithat Konar" +Comment1 "Copyright (C) 2015 Mithat Konar" +Comment2 "CERN Open Hardware Licence v1.2" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L SN754410 U1 +U 1 1 550CA683 +P 7600 4650 +F 0 "U1" H 7600 5350 60 0000 C CNN +F 1 "SN754410" H 7600 4000 60 0000 C CNN +F 2 "mfk-DIP-16_AriesC84_e" H 7600 4650 60 0001 C CNN +F 3 "~" H 7600 4650 60 0000 C CNN + 1 7600 4650 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR01 +U 1 1 550CA83D +P 8450 5500 +F 0 "#PWR01" H 8450 5500 40 0001 C CNN +F 1 "DGND" H 8450 5430 40 0000 C CNN +F 2 "" H 8450 5500 60 0000 C CNN +F 3 "" H 8450 5500 60 0000 C CNN + 1 8450 5500 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR02 +U 1 1 550CA86E +P 6600 5300 +F 0 "#PWR02" H 6600 5300 40 0001 C CNN +F 1 "DGND" H 6600 5230 40 0000 C CNN +F 2 "" H 6600 5300 60 0000 C CNN +F 3 "" H 6600 5300 60 0000 C CNN + 1 6600 5300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 4550 6600 4550 +Wire Wire Line + 6600 4550 6600 5300 +Wire Wire Line + 6900 4700 6600 4700 +Connection ~ 6600 4700 +Wire Wire Line + 8300 4550 8450 4550 +Wire Wire Line + 8450 4250 8450 5500 +Wire Wire Line + 8300 4700 8450 4700 +Connection ~ 8450 4700 +Wire Wire Line + 3900 4450 4600 4450 +Wire Wire Line + 4400 4450 4400 4400 +Wire Wire Line + 4600 4450 4600 4400 +Wire Wire Line + 4400 5250 4400 5500 +Wire Wire Line + 4600 5400 4600 5250 +Wire Wire Line + 5700 4200 5700 4150 +Wire Wire Line + 5700 4150 6150 4150 +Wire Wire Line + 6150 4400 6900 4400 +Wire Wire Line + 5700 4850 6900 4850 +Wire Wire Line + 5700 4800 5700 4850 +Wire Wire Line + 8300 4250 8450 4250 +Connection ~ 8450 4550 +Wire Wire Line + 6400 4250 6900 4250 +Wire Wire Line + 6400 3250 6400 4250 +Wire Wire Line + 6750 3750 8450 3750 +Wire Wire Line + 8300 5000 8450 5000 +Wire Wire Line + 8300 4100 8700 4100 +Wire Wire Line + 6750 5150 6900 5150 +$Comp +L C C1 +U 1 1 550CAD46 +P 8700 4350 +F 0 "C1" H 8700 4450 40 0000 L CNN +F 1 "100n" H 8706 4265 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 8738 4200 30 0001 C CNN +F 3 "~" H 8700 4350 60 0000 C CNN + 1 8700 4350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4100 8700 4150 +$Comp +L DGND #PWR03 +U 1 1 550CADFB +P 8700 4700 +F 0 "#PWR03" H 8700 4700 40 0001 C CNN +F 1 "DGND" H 8700 4630 40 0000 C CNN +F 2 "" H 8700 4700 60 0000 C CNN +F 3 "" H 8700 4700 60 0000 C CNN + 1 8700 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4700 8700 4550 +Text Label 6400 3250 3 50 ~ 0 +VOL_UP +Text Label 6400 6150 1 50 ~ 0 +VOL_DOWN +$Comp +L DGND #PWR04 +U 1 1 550CB0E4 +P 3150 2100 +F 0 "#PWR04" H 3150 2100 40 0001 C CNN +F 1 "DGND" H 3150 2030 40 0000 C CNN +F 2 "" H 3150 2100 60 0000 C CNN +F 3 "" H 3150 2100 60 0000 C CNN + 1 3150 2100 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1350 3650 1800 +Wire Wire Line + 3100 2450 3850 2450 +Text Label 3850 2450 2 50 ~ 0 +VOL_UP +Wire Wire Line + 3100 2650 3850 2650 +Text Label 3850 2650 2 50 ~ 0 +VOL_DOWN +$Comp +L PWR_FLAG #FLG05 +U 1 1 550CB3B3 +P 3400 2000 +F 0 "#FLG05" H 3400 2095 30 0001 C CNN +F 1 "PWR_FLAG" H 3400 2180 30 0000 C CNN +F 2 "" H 3400 2000 60 0000 C CNN +F 3 "" H 3400 2000 60 0000 C CNN + 1 3400 2000 + -1 0 0 1 +$EndComp +$Comp +L PWR_FLAG #FLG06 +U 1 1 550CB3CC +P 3900 1650 +F 0 "#FLG06" H 3900 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3900 1830 30 0000 C CNN +F 2 "" H 3900 1650 60 0000 C CNN +F 3 "" H 3900 1650 60 0000 C CNN + 1 3900 1650 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 1900 3100 1900 +Wire Wire Line + 3150 1900 3150 2100 +Wire Wire Line + 3900 1650 3650 1650 +Connection ~ 3650 1650 +Wire Wire Line + 3400 2000 3150 2000 +Connection ~ 3150 2000 +$Comp +L CONN_2 P4 +U 1 1 550CCCA8 +P 2750 2550 +F 0 "P4" V 2700 2550 50 0000 C CNN +F 1 "CTRL" V 2800 2550 50 0000 C CNN +F 2 "mfk-TE_282834-2" H 2750 2550 60 0001 C CNN +F 3 "" H 2750 2550 60 0000 C CNN + 1 2750 2550 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4150 3250 4150 3850 +$Comp +L CONN_5 P1 +U 1 1 550CCE69 +P 2750 3450 +F 0 "P1" V 2700 3450 50 0000 C CNN +F 1 "AB I/O" V 2800 3450 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2750 3450 60 0001 C CNN +F 3 "" H 2750 3450 60 0000 C CNN + 1 2750 3450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 3250 4150 3250 +Wire Wire Line + 4300 4100 4350 4100 +Wire Wire Line + 4350 4100 4350 3350 +Wire Wire Line + 4350 3350 3150 3350 +Text Label 3150 3250 0 50 ~ 0 +A_TOP +Text Label 3150 3350 0 50 ~ 0 +A_WIPER +Text Label 3150 3550 0 50 ~ 0 +B_TOP +Text Label 3150 3650 0 50 ~ 0 +B_WIPER +$Comp +L CONN_5 P2 +U 1 1 550CCF9F +P 2800 4800 +F 0 "P2" V 2750 4800 50 0000 C CNN +F 1 "CD I/O" V 2850 4800 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2800 4800 60 0001 C CNN +F 3 "" H 2800 4800 60 0000 C CNN + 1 2800 4800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3200 4600 4150 4600 +Wire Wire Line + 3200 4700 3900 4700 +Wire Wire Line + 3200 4900 3700 4900 +Wire Wire Line + 5100 4950 5100 5700 +Wire Wire Line + 5100 4950 4950 4950 +Wire Wire Line + 3200 4800 3800 4800 +Wire Wire Line + 5000 4600 5000 5600 +Wire Wire Line + 5000 4600 4800 4600 +Wire Wire Line + 4800 4600 4800 4700 +Wire Wire Line + 4300 5400 4300 4950 +Text Label 3200 4600 0 50 ~ 0 +C_TOP +Wire Wire Line + 3900 5400 4300 5400 +Wire Wire Line + 4400 5400 4600 5400 +Wire Wire Line + 3900 4700 3900 5400 +$Comp +L RK16814MG RV1 +U 1 1 550CA765 +P 4500 4500 +F 0 "RV1" H 5850 5250 50 0000 C CNN +F 1 "RK16814MG" H 5700 3600 50 0000 C CNN +F 2 "mfk-ALPS_RK16814MG" V 4800 4900 60 0001 C CNN +F 3 "~" V 4800 4900 60 0000 C CNN + 1 4500 4500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4150 4600 4150 4700 +Text Label 3200 4700 0 50 ~ 0 +C_WIPER +Text Label 3200 4900 0 50 ~ 0 +D_TOP +Text Label 3200 5000 0 50 ~ 0 +D_WIPER +Wire Wire Line + 3900 3450 3900 4450 +Connection ~ 4400 4450 +Connection ~ 4400 5400 +Text Label 3150 3450 0 50 ~ 0 +AB_COMMON +Wire Wire Line + 3600 5000 3200 5000 +Text Label 3200 4800 0 50 ~ 0 +CD_COMMON +$Comp +L +5VD #PWR07 +U 1 1 550CE6FC +P 7600 3650 +F 0 "#PWR07" H 7600 3600 20 0001 C CNN +F 1 "+5VD" H 7600 3750 50 0000 C CNN +F 2 "" H 7600 3650 60 0000 C CNN +F 3 "" H 7600 3650 60 0000 C CNN + 1 7600 3650 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR08 +U 1 1 550CE733 +P 3650 1350 +F 0 "#PWR08" H 3650 1300 20 0001 C CNN +F 1 "+5VD" H 3650 1450 50 0000 C CNN +F 2 "" H 3650 1350 60 0000 C CNN +F 3 "" H 3650 1350 60 0000 C CNN + 1 3650 1350 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3900 3450 3150 3450 +Wire Wire Line + 4800 3850 4800 3550 +Wire Wire Line + 4800 3550 3150 3550 +Wire Wire Line + 4950 4100 5000 4100 +Wire Wire Line + 5000 4100 5000 3650 +Wire Wire Line + 5000 3650 3150 3650 +Wire Wire Line + 3600 5000 3600 5700 +Wire Wire Line + 3700 4900 3700 5600 +Wire Wire Line + 3800 4800 3800 5500 +Wire Wire Line + 3800 5500 4400 5500 +Wire Wire Line + 3700 5600 5000 5600 +Wire Wire Line + 3600 5700 5100 5700 +$Bitmap +Pos 10300 6850 +Scale 1.000000 +Data +89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 5F 00 00 00 64 08 06 00 00 00 E0 F1 EC +9B 00 00 00 04 73 42 49 54 08 08 08 08 7C 08 64 88 00 00 00 09 70 48 59 73 00 00 07 6C 00 00 07 +6C 01 9C F3 D5 25 00 00 13 B3 49 44 41 54 78 9C ED 9D 7B 7C 54 D5 B5 C7 BF EB CC 04 C2 43 1E 5A +45 D0 2A F6 FA 82 52 A0 6A D5 D6 5A B1 3E 69 21 27 40 A3 F6 E1 55 51 4E 78 5C B5 B4 DA 56 3F 7E +8A 69 BD D4 6A 6F 6F AB AD 90 13 90 48 3F B7 B6 E6 16 66 22 8A F6 65 44 AD AD A2 45 B4 A5 D6 17 +88 12 15 5A 0C F2 CA 64 E6 AC FB C7 3E 93 49 86 10 66 92 7D 48 E8 E5 F7 F9 E4 33 AF BD D7 59 FB +77 76 F6 D9 7B ED B5 D6 16 55 E5 40 80 F8 C9 7B 80 59 05 14 5D A0 9E 3B 3B 6A 7D 6C C0 E9 69 05 +8A C0 85 96 CB F5 38 E4 40 E8 F9 E2 27 0F 01 9A 00 29 A0 B8 02 83 D5 73 3F 88 56 AB EE E3 40 E9 +F9 63 29 8C 78 C2 72 63 23 D4 C5 1A 0E 14 F2 C7 45 5C BE 47 70 A0 90 3F 3E E2 F2 3D 82 83 E4 F7 +20 22 27 5F FC E4 67 C5 4F 5E DE 8D FA 31 60 4C 91 D5 C6 84 F5 BA 7A CD CB C5 4F 7E B6 AB F5 0B +45 A4 E4 8B 9F 2C 03 56 02 4B C5 4F AE 14 3F 39 A2 0B 62 4E 04 FA 15 59 A7 5F 58 AF 28 88 9F 1C +21 7E 72 25 B0 14 58 19 EA 1F 19 22 23 3F 54 BC 0E E8 13 7E 75 31 F0 92 F8 C9 CB 8A 14 75 4A 17 +55 38 B5 98 C2 A1 5E 2F 61 F4 04 A3 77 5D 94 37 20 92 79 7E 07 C4 E7 E3 01 60 B6 7A EE 3F 3A 91 +31 00 B8 0C A8 02 8E EA 82 1A 8D C0 AD C0 CF D5 73 B7 77 72 9D C3 80 7B 80 4B F6 52 24 05 54 A8 +E7 D6 77 41 87 4E 61 9D FC 02 88 CF A2 11 98 A1 9E FB 50 5E FD 31 40 25 70 39 30 D8 82 4A 1F 00 +3F 03 16 AA E7 BE 98 77 AD CF 03 35 C0 F0 7D C8 88 E4 06 58 25 BF 08 E2 DB 62 11 70 3B F0 49 60 +26 70 96 35 85 F6 C4 53 C0 42 E0 69 E0 5B C0 35 45 D4 B5 7E 03 AC 91 DF 45 E2 0F 34 58 BD 01 36 +1F B8 35 FC 6B 13 0F A6 7D 35 B6 84 D9 24 FF 4E 8B B2 7A 33 AC B5 D3 26 F9 3F 04 9E B4 28 AF 37 +E2 49 4C 3B AD C0 F6 03 F7 23 C0 0B C0 40 6B 42 7B 0F B6 03 E3 D4 73 5F B7 25 D0 EA 22 2B 54 EC +06 9B 32 7B 11 6E B0 49 3C 44 B7 C8 5A 49 6E A5 F8 AF 80 47 D4 73 27 DA 16 1A 95 79 E1 6A 60 6B +44 B2 F7 37 B6 62 DA 63 1D 91 90 AF 9E BB 09 98 13 85 EC 1E C0 9C B0 3D D6 11 E9 1E AE F8 C9 06 +E0 9C C8 2E 10 3D 1E 57 CF 9D 10 95 F0 A8 ED F9 F1 88 E5 47 8D 48 F5 8F AC E7 8B 9F 1C 07 AC 89 +44 F8 FE C5 78 F5 DC 17 A2 10 1C 65 CF BF 2E 42 D9 FB 13 91 B5 23 AA A9 E6 61 C0 5B 40 A9 75 E1 +39 BC 05 BC 0C 9C 04 1C 1D E1 75 76 03 47 77 B6 F7 D0 55 44 35 A6 CD C0 3E F1 29 E0 2E E0 31 E0 +39 F5 DC 77 B3 3F 88 9F 1C 86 D9 B9 3A 17 D3 53 6D 1A F8 4A 31 ED B9 DD A2 4C 20 9A CD 94 18 F0 +06 F0 61 8B 62 D7 00 57 A8 E7 AE 2D E0 FA 63 81 FB B0 EB C1 B0 11 38 4E 3D 37 63 51 66 24 63 FE +97 B1 4B FC 7C E0 F4 42 88 07 08 CB 9D 1E D6 B3 85 0F 63 DA 65 15 DD EA F9 E2 27 FB 03 1F C3 F4 +B2 F1 18 4F B1 D3 81 2E BB 6D E4 A1 4E 3D 77 6F 7B AB FB 84 F8 C9 07 80 0A 4B BA 64 80 67 30 86 +C3 35 E1 DF 8B EA B9 3B BB 2A B0 60 F2 C5 4F 96 00 E7 63 08 CE 92 7D 02 D1 CD 98 36 03 1F 55 CF +DD DC 55 01 E2 27 0F 07 FE 02 1C 6E 4D AB F6 08 80 57 C8 DD 8C 17 80 DF AA E7 B6 14 52 B9 98 07 +EE 95 80 5F AC 76 DD C0 9C EE 10 0F A0 9E BB 59 FC E4 1C 8C B7 44 14 70 30 B3 AD 93 80 4B C3 EF +3C 0A DC ED 2A A6 D7 0E 28 4E AF 6E A1 51 3D B7 CE 86 A0 50 4E A3 0D 59 05 A2 60 9E 7A AB AF E6 +EA 5E 2E CF 0A 7A 2B F9 CF F5 72 79 56 D0 5B C9 3F D8 F3 7B 10 7B 75 EF EB 25 F2 AC A0 B7 92 7F +5C 2F 97 67 05 BD 95 FC 13 7A B9 3C 2B E8 AD E4 5F 22 7E B2 D0 00 B8 4E 11 CA E9 F2 2A 39 4A 14 +43 FE FE 0C AD 3C 1E B3 9A B6 81 F3 43 79 FB 0B 05 F3 54 CC 0A B7 16 78 8D 9C 0D 67 1C 30 1A E8 +5B 8C 66 45 60 BE F8 C9 86 42 97 EA 1D 21 34 89 D8 34 B0 E5 A3 19 F8 2B C6 AC 90 B5 F9 3C 51 68 +E5 82 C9 0F CD A9 0D E1 1F 00 E2 27 E3 C0 C9 E4 6E C6 29 C0 79 85 CA DC 07 4E C3 10 77 63 37 64 +CC 0F E5 D8 C2 EF 80 E7 C9 91 FD 37 F5 DC 74 57 85 45 61 CF FF 09 F6 DC 46 14 F8 86 7A EE 0F BA +A0 C7 0D C0 1D 14 1E 3C BD 2F FC 54 3D F7 3F 2C C9 02 A2 21 7F 14 E6 5F D1 26 EE C5 84 11 35 17 +70 FD BE 98 30 9F E9 96 75 18 AD 9E BB CE A6 C0 A8 F6 70 57 01 67 5B 16 FB 22 50 DE 99 BF 64 E8 +A8 9B C0 EC 31 D8 C4 13 EA B9 9F B1 2C 33 B2 A9 66 14 A6 E7 8F 01 1F DD 47 99 8F 62 9F 78 88 C8 +94 1E 15 F9 FF 8B 7D 5F CD B7 31 31 BD 9D 61 65 58 CE 26 B6 62 DA 63 1D 51 F9 6A EE C6 04 12 DB +84 BF AF 99 45 F8 BB ED 5E BA 34 6C 8F 75 44 B9 C2 B5 16 BB 04 A4 8B 90 57 13 96 B7 05 9B ED 68 +87 C8 C8 57 CF FD 0B F6 86 9E 84 7A 6E 41 BB 51 61 B9 84 A5 EB 6E 0D DB 11 09 A2 0C FF BF 1C 18 +6A 49 DC 3D 11 97 DF 1B 86 76 27 69 C7 BE 10 D5 54 F3 68 4C 1E 03 1B 11 E4 7F 53 CF 1D D5 05 1D +D6 61 56 DF DD 45 13 30 46 3D F7 2D 0B B2 DA C1 7A CF 0F AD 88 4B B0 43 3C C0 82 FD 5C 2F 1F 83 +81 25 B6 AC AC 6D 11 C5 B0 33 1B 7B 16 C9 1D 18 D7 BF AE E0 BE B0 BE 0D 9C 8F 69 97 55 58 25 5F +FC E4 09 18 7B 8A 2D FC 5C 3D B7 A9 2B 15 C3 7A 3F B7 A8 CB 1D 61 FB AC C1 1A F9 A1 83 EC 52 A0 +BF 2D 99 74 FF C1 69 EB C1 0B A6 5D 4B BB 93 C1 2A 1F 36 7B FE 37 80 33 2D CA FB A3 7A 6E B7 22 +5B C2 FA 7F B4 A4 0F 98 F6 7D C3 96 30 9B E4 7F D5 A2 2C B0 D7 6B 6D F6 7E B0 D8 4E 9B E4 5F 81 +D9 D9 B1 81 2D D8 F3 AF 7C 20 94 67 03 CD 98 76 5A 81 35 F2 D5 73 1F 01 CA 29 EE 06 28 F0 3F C0 +43 79 DF DF 5B 88 ED BE 40 BD 9A 31 FB 01 6D F1 50 78 DD 62 16 39 CD 18 93 F6 23 36 F4 02 FB B9 +17 8A B9 01 6F 02 E7 A9 E7 7E 45 3D 77 12 26 C3 D4 2A 8C DB 75 B5 4D BD 42 79 41 28 FF 2C F5 DC +49 EA B9 5F C1 6C 79 BE 59 40 7D EB C4 43 74 2B DC 8B 31 F6 95 BD 6D AE D7 02 D7 AB E7 6E EB A0 +EE D1 51 AC 26 F7 26 57 FC E4 20 E0 C7 18 17 F8 8E 10 09 F1 10 6D 1C 6E 47 37 E0 3D C0 53 CF 4D +46 72 D1 6E 40 FC A4 8B 31 47 1F D1 E6 EB C8 88 87 68 AD 9A F9 43 50 02 63 23 E9 75 C4 03 84 7A +8D 21 67 11 8D 94 78 D8 0F F9 F3 C5 4F 7E 1A 18 6E 2B D8 61 7F 40 FC 64 05 26 40 23 D2 CC 59 07 +C4 E1 05 FF AA E8 AD BE 9A FF 2F 70 90 FC 1E C4 41 F2 7B 10 07 C9 EF 41 1C 24 BF 07 71 90 FC 1E +44 1C 40 FC 15 FD 91 CC 6C 94 B3 50 FA 01 7F 42 32 0B D5 9B DA 08 20 8B 96 1D 4D 26 B6 08 61 23 +E2 FC 08 74 2E AA 27 80 AE 25 16 FC 40 AF 9E BA 21 2B 50 40 A8 4E 4C C7 61 32 EA 0C 41 83 35 68 +FC 4E 9D 39 A9 D5 93 4C AA 93 8F 20 A4 08 62 B3 88 65 6E 41 39 09 E1 61 E2 A9 FB F4 AA 8A 4E A3 +CE A5 BA FE 34 24 98 08 72 2E E8 56 90 75 A4 A9 D6 D9 EE C6 D6 32 FE 8A 0F 41 7A 16 22 67 A2 64 +10 79 9A DD 25 3F D5 6B 27 6E 33 ED A9 1F 4B 46 EF 40 58 AD 9E 7B 4B 6B BD 9A E5 E7 10 38 37 21 +34 A8 E7 DE DE AE DD 8E DC 8D EA D7 51 8E 02 EA 29 49 DD AF 57 55 6C 96 EA E5 E3 10 67 16 30 0A +65 23 8E 3C CE A6 41 4B 74 DE 84 34 80 DC 5B 7F 08 69 FD 26 AA 9F 44 64 17 C8 E3 34 97 DC A5 D7 +4E 6C 16 EE 7A 78 10 7D 53 7F 04 F2 3D 04 DE 45 63 67 6B E5 A4 57 C4 5F 71 32 64 D6 61 F6 44 1D +DA 1F A3 F1 0E 64 4E 69 BD 51 7E F2 7E CC A1 03 6D B1 0D 71 CE D7 19 93 9F 0D CB 28 C6 D0 B5 85 +F6 CB F9 9D 88 73 BA CE 98 DC A1 AF 8C F8 89 AF 83 74 E4 2E BE 03 63 A4 FB 93 2C 4C 8C C4 91 A7 +80 FC 23 42 5E 25 96 3A 43 AF AE F8 A7 2C 4C 4C C0 91 C7 50 1E D5 4A B7 35 FF A7 D4 D4 5F 86 EA +FD C0 2F D5 73 2F 6B D3 EE ED 61 BB C3 5D 3A D9 4C 26 7D 26 F1 F8 79 A8 2E 20 3F D1 87 EA EF E9 +CB 34 00 52 F2 67 60 64 9E 2E 6B E9 D7 EF 53 0E A5 A9 9B 31 C4 6F 04 AE 47 F5 4B 18 8F E0 61 38 +E9 FC A4 CD 03 80 DF A3 72 0E A2 97 62 6C 35 47 42 7C 96 51 3E 31 11 43 FC 1B 88 7C 11 62 A7 A2 +F2 00 30 08 0D F2 DD 07 1D 60 13 C8 25 28 D3 41 5E 07 FA A3 C1 BC 0E C8 CD D2 73 63 D8 B8 EB 88 +65 46 12 E8 19 20 FF 85 92 C0 73 9F 31 52 E5 76 0C F1 EB 40 AE 44 65 16 B0 1E 38 9E 74 C9 B7 F7 +2E BB 53 0C 04 9E 04 BD 08 F8 1A 9A 71 D1 58 0B AA 3F 0C DB 51 8F 52 16 72 F2 32 48 23 A9 F7 76 +90 92 2A 60 24 CA A3 08 67 A1 94 61 B8 1D CB AE 5D F3 E2 A8 5C 0C 0A AA DF D4 CA F2 FB 01 A4 7A +F9 5F 11 67 8D F9 2D 0F E9 92 6B 74 F6 E7 DE 01 90 9A E4 31 28 77 82 8E 36 A4 38 E5 A1 AC FF 56 +CF FD 05 80 D4 26 2A 49 89 0B 9C 2C 0B 13 23 75 66 F9 FA 36 64 7E 4D BD B2 C7 CC 35 93 20 DC 0B +D2 E1 59 27 52 57 17 83 3E 31 20 4D 89 F3 2B 9D 5E BE 09 D8 80 49 C3 D2 16 46 67 0D AE D6 CA 29 +4F 1B D9 0F 36 22 41 02 E9 A0 3D 85 41 09 B4 32 D4 FD D7 A6 ED F5 D7 A3 3A 10 58 AD 9E EB B6 EA +79 4F DD C3 CC AE D8 A1 A0 E2 27 CB 01 08 32 B3 B5 72 EA EB 21 67 71 94 65 C0 E7 E2 A0 E6 3C 12 +47 73 21 F2 87 A6 5F 62 6B 9F 9D 40 7F F9 E9 F2 C3 28 29 C9 FE B2 2D 4B 7C 88 D7 C2 D7 21 A1 8E +C6 49 49 E4 02 F1 13 6D 49 FC 00 E8 4B 4C 8E C7 F4 42 80 16 1A FF FC 38 84 E7 C1 C4 32 BF 21 88 +01 DA 61 E2 08 AD A8 C8 88 9F 5C 02 DC 48 5A D7 8B 9F 5C 0B F2 1E 12 AC 03 7E A6 33 CA D7 C8 CF +7E 3D 00 E3 67 93 61 67 3A B7 FF 2B 2D CF 84 23 43 57 CE 5E 01 F4 D5 F6 9D 06 50 0D 87 69 6D B7 +11 A4 B3 2B B6 43 F8 1C 35 49 92 76 10 73 BE 2D 7E 68 AF 13 A7 4F B8 87 73 72 9C 6C C6 6F 4D B7 +E6 2C 0B 1B BA 19 38 96 52 1D 48 2E B9 55 7B 37 0E 71 9A D0 00 90 AC D9 F8 D0 F0 75 72 87 D1 38 +81 B4 8D 01 0B 74 DE BC A0 F5 53 AA 34 4D 7C 1F B1 6F 2D C1 F7 29 71 52 98 A8 93 53 CD 7F 99 4C +04 E6 C8 E2 FA 31 68 6B 24 E0 07 3A B7 62 57 AE E2 96 2D 30 2C 0D F4 97 AA 2A 87 61 C5 9E DE 27 +C1 9E 5F 71 98 E1 D0 79 A3 C3 2A 01 43 71 10 60 00 48 6E EB 31 67 4B 8B C5 31 E9 50 8E 43 E2 E3 +81 C7 01 4C 6F 77 8E 05 60 67 BF 77 E8 9B C9 46 70 1F 25 BE 5F A2 9E D7 12 0A 1A 19 4A 0C 6F 8A +FE 1D 64 0C 4A 99 56 BA 0F 16 D9 C2 7D 42 E7 4C F9 07 70 8B 54 55 7D 9B C3 3F 71 04 B1 F4 D1 88 +7E 0B 98 46 9A CB 78 E7 CF F3 19 3E 3E 03 0C 91 C5 CB 8E 6D 9D 85 39 47 8C 25 20 0E 34 EA BC 79 +81 D4 2C 57 54 40 F2 D2 91 69 11 E9 C9 94 97 C3 37 17 D2 91 63 D7 CC 49 9B F0 93 3B 00 A5 5F BF +23 F5 F2 0B F7 70 E0 72 00 13 66 A3 CE 54 F1 FD 12 01 A1 24 F6 C5 F0 F7 B7 F5 DA 89 CD ED CB 1F +99 3B 6F 56 35 FB FE 9F E1 6B F6 34 9E AB A4 AA CA 01 90 BB 57 0E 92 9A FA 2F 4B 5D 5D B7 32 FE +49 5D 5D 4C FC E4 0F C5 AF 3F 57 E7 CD 0B 74 F6 E7 DE D1 CA B2 D5 48 E8 1A 22 3A 3E FC 4F 5A 0F +40 10 AB 90 AA 2A 47 AA 1A E2 04 8E 09 82 96 B0 AD 69 CD 4E 4B 47 8B BF FC D3 90 1D 26 F4 2B 85 +2B D4 9A C9 E4 62 59 58 FF F1 D6 AF 6B 12 57 4A F5 F2 71 6A C6 96 97 80 81 EC DA D9 9A 9F 4D 16 +D7 1F 2F 7E FD E7 01 E2 A8 7E 0F 91 F3 80 EB 60 D8 17 F0 93 4D E4 A6 9D DF DB F3 AA FA 2B F1 93 +7F 00 8E 6C 2D A7 84 B6 FA F8 4F 20 98 8D E8 14 86 8F 7F 53 AA EB 9F A2 AF 4E 44 39 84 F7 4B AE +10 B8 48 8B DB B4 CE 61 6B 89 07 CC 05 FD AA F8 C9 E7 50 5E 02 86 23 61 AE 66 D5 95 E1 EB F7 10 +59 84 72 27 C3 C7 57 42 53 1F E0 18 F3 9B 98 F6 CC 9A FA 06 7E F2 AF C0 68 70 56 89 9F CC 4E B5 +87 14 AC CF 0C 37 41 75 F2 09 84 B3 71 F4 79 F1 13 CF 83 F4 03 19 85 C8 56 59 52 77 12 D2 67 1E +CA 23 20 D5 E2 27 2A C1 79 37 9C 31 39 E2 27 6E 70 B4 B2 FC 77 66 AA C7 36 CC 14 6D 14 D0 02 F2 +5D 1A D7 E4 3B 9B 6E 40 B9 1F 93 BF 32 7B 83 6E CF 0E 31 EA 4D DA 82 F2 05 4C B2 D1 A3 10 BD 04 +38 04 78 0D 8D 7F AB CB C4 03 EA 95 2F 08 A7 72 1B 81 D3 10 AE 44 B8 08 78 15 B8 49 2B CB 17 03 +50 59 7E 2F 22 37 63 76 A2 8E C7 10 BF 13 74 B6 7A 65 0F 81 79 52 40 6C 1A C8 4A F3 91 4F 82 B4 +80 14 1C D5 A2 A0 48 E6 52 44 C3 9D 39 39 25 E4 64 13 2A 97 EA 55 15 9B 75 86 FB 28 AA D7 01 4D +E6 77 9D 08 38 A8 AC 20 D6 B2 A4 75 33 45 AA 1A E2 1C B9 6D 3C 4E 66 00 DB D3 CF B4 7D 60 B5 59 +6C BC AC 9E 7B B2 F8 2B 8E 41 83 D1 68 E6 79 9D 39 E5 BD 7C C5 A4 AA 21 CE 51 EF 8F 23 23 23 70 +82 97 99 31 E5 95 B6 C4 CB A2 07 CF 24 9D 09 74 66 F9 33 B9 6B F8 25 38 C3 4F 25 90 94 7A 93 9E +EF AC E1 66 E5 19 1F 43 09 6B 75 7A 59 87 E9 D5 E5 EE 95 7D 29 69 39 8D B8 64 08 1A 9F 6B 7D 4E +E5 97 5B 98 18 49 4C 8F A5 74 C0 6A B6 ED 28 A5 6F FC 04 44 B7 E8 D5 65 AF 4A 6D 43 29 E9 0F C6 +93 49 EF D2 CA 29 7B CD A7 6C 64 30 8A 40 36 68 A5 BB 47 18 AC F8 75 83 71 FA 8C 25 23 03 C8 C4 +D7 B4 4E D5 0B D9 C9 CA 27 7F 9F 15 22 80 D4 26 86 90 6A 51 F5 2A BA E4 38 DB 1B 71 40 A4 58 97 +DA 86 52 52 B2 15 FA 34 13 6D 7E E6 FD 8A 83 56 CD 1E C4 41 F2 7B 10 5D 22 5F AA AA 1C 59 52 D7 +69 96 56 A9 4D 0C 91 BB 57 0E EA F0 37 DF 2F 91 DA 86 D2 D6 B5 C0 E2 BA 43 F3 D7 01 02 22 F7 3C +7C 64 87 F5 EF 5E D9 57 6A 1B 4A 25 6F 19 2D BE 5F D2 D1 7A 42 6A 1B 4A A5 B6 A1 B4 7D D9 BA C1 +E2 D7 75 18 BA D4 AA 5F 5D 5D 0C 40 16 3C 34 54 EE 5E B9 87 F7 9D DC 53 37 50 16 D5 0F EB 48 46 +21 28 F6 81 FB 77 4C 00 C4 CD 40 7F 84 06 54 7F AC 5E 79 22 57 36 F9 25 CC FA E0 18 4C FE E1 35 +C0 2A 88 CD 57 6F D2 96 B0 CC 2F 80 4B 41 6F 00 F9 22 26 FD FA 3F 81 85 78 EE 2D F8 89 5B 40 E6 +62 A2 19 DF 46 E4 86 D0 D4 DB AC 9E 5B 2A 7E 72 35 70 2A 2A 17 6A 65 D9 6F DA 5C FB 15 60 10 8D +6B 86 67 4D 17 C6 FE AF CF 02 6F E1 B9 C7 50 9D 9C 86 70 27 C6 CC 1B 00 2F A0 BA 8A 4C 9F DB 5B +67 21 7E A2 D6 98 04 E4 D6 70 7A 78 06 F0 3E 48 AD 7A 65 73 A5 66 F9 89 E0 54 A3 9C 83 E9 00 9B +40 6E 56 AF AC A8 10 A6 62 7B FE 89 C0 6D 21 A9 01 CA 04 90 5F 49 75 FD 67 20 34 4B A0 B7 62 0E +13 58 0B FA 3C 66 EE 3B 17 49 77 10 A2 23 3F C0 E4 E8 69 02 06 A3 D2 80 9F 98 09 F2 1D 0C F1 DB +81 41 21 F1 6D B1 DC BC B4 AE B0 91 EA E5 E3 30 F3 FA 23 18 31 36 97 74 C3 E1 82 B0 6C 02 BF 6E +10 C2 77 30 1D E3 45 E0 59 E0 44 44 AE 27 D6 D2 81 4B BA DE 8A 21 BE C9 E8 21 0D E2 AF E8 8F 3A +BF 35 6D 67 1B C6 B8 38 02 B4 56 6A EA 8B CA 74 52 FC B0 23 7A 1B 3B 52 C3 08 F4 DF 30 C9 42 1D +24 B8 02 B2 B6 97 96 4F A0 72 AE 7A EE 38 F5 CA 4F 87 D8 28 20 85 CA 67 43 AB 63 5B AC 27 93 39 +1E DE 3D 1C 47 4E 09 7B F1 55 E1 85 16 30 34 35 84 C6 C1 87 62 CE CC 6D A3 75 B0 CC 14 E1 A2 9C +5E B1 69 6D 0A B4 79 9F BD 41 CE 32 F5 2A 9A 48 A7 4E 07 39 5F 3D 77 AC 7A EE 99 94 A4 8E 03 76 +21 9C 2D B5 89 FC 15 EE 26 34 76 22 8D 83 3F 84 06 A7 68 E5 E4 24 9A B9 16 63 AD 4C 40 6C 04 9E +7B 02 E6 1C 5F 50 BD 23 7F 28 EC 0C C5 92 BF 8B 98 73 87 CE AD D8 A5 33 CB D7 87 BB 38 80 B4 CE +FD D5 AB 68 D2 CA B2 55 B9 CF 93 DE C4 1C 66 10 63 FB EE FC E3 35 6A 74 D6 D4 D7 D5 F3 5A F4 9A +B2 30 3F BE 7C C8 68 26 4B B5 A2 22 A3 F3 26 A4 D1 A0 9D 7F BD 5E 33 65 1D F0 37 E0 63 E2 2F 0B +4F 71 D6 69 98 5E F8 07 94 29 02 62 7A 29 9F 02 FE C1 D0 E6 55 60 4C BE D9 3D 04 00 B3 6D 29 7F +07 A0 59 8F CD D3 6F A9 56 4E 7A 45 E7 4D 48 B7 59 64 9D 11 D6 5C A0 DE A4 9D 66 F1 F8 EE BD 98 +5D B9 C3 A8 5E 51 70 3E B7 62 E7 F9 6F EA F4 B2 5C 02 B7 58 EC 2F 04 01 B4 D9 46 93 EA FA 99 88 +7A 98 21 2A 2B DF 3C 04 63 4E 5E AF D0 0E 92 22 C9 40 50 48 A7 73 79 75 94 D7 F6 E8 4F AA CB 11 +B9 09 8D 5D 20 FE 8A 67 80 D1 20 3F 42 78 0F D5 F9 2C 7A F0 0C 24 33 14 95 3E 40 BD 56 54 64 00 +A4 A6 7E 3A 1A CC 01 39 11 C8 6E 54 18 FD 1C 69 7F 15 D1 97 F7 54 2F 1B 58 2D F5 E2 67 7D 7E 87 +B5 91 D1 32 02 93 D6 7D 9F B0 BA C8 92 85 F5 67 E1 E8 02 60 37 CA B3 38 6A AC 9D 2A E7 51 F0 49 +A1 6A 6C E7 71 CD CD 5A E2 DA 87 3D 2C EA CE 32 D0 9B CC D0 93 31 A6 60 47 1E 24 9D 7E 0F C7 99 +4F 26 98 86 88 E9 14 62 86 29 59 94 38 15 95 C5 20 CD 08 AB 41 B7 84 FA 9D 0B 74 38 33 EB A0 95 +A9 D0 52 F2 24 A2 7B 66 AA CD 50 F0 C1 36 76 57 B8 4E 30 03 04 54 2E 6A 3B F4 88 9F DC 44 E1 C7 +B4 6E 07 86 41 EC 38 CC 89 40 90 89 7F 04 69 3F 2B D3 CA B2 D5 E2 27 37 62 02 94 47 03 EF F3 F6 +21 AB 74 DE 84 B4 F8 C9 0D 88 4C 05 DD 0D 6C 67 77 A9 99 11 05 32 23 AC 5D A6 33 CA 7F DD 46 BF +37 28 98 7C 5D 07 8C 43 F5 7E F5 42 63 5E 17 61 79 91 E5 1C 11 4A FD B8 D4 D5 F5 11 90 70 53 7D +78 11 42 8C 8B 49 C0 8D E2 AF 38 46 16 2F 3B 16 D1 9B C2 DF F2 E7 C5 CB 31 DE 0F E3 81 47 B2 EE +1A C0 0A D0 8F 00 A3 51 79 B8 75 4F 42 B3 9E 12 72 5A 76 9D 20 7E FD B9 EC E9 5D D0 09 E4 29 F3 +22 D7 C9 A2 07 CF 94 AA 86 B8 D4 D4 5F 26 7E B2 5E 16 D4 9F 54 44 3B 2D 93 AF 7A 5F F8 FA 23 B6 +F6 79 1F 3F B9 1D 95 87 8B 93 21 3F 0E DF 4D 86 CC 06 32 B1 F5 E4 D2 09 B4 1F 93 03 5D DE E6 53 +6E E7 4C 65 45 EB 7B 87 5C 19 D1 AC 07 C5 7F 92 6A DA 8A 9F FC 00 F4 F7 45 E9 37 B4 79 01 E8 B3 +C0 58 82 E0 69 86 37 6D 0B A7 C2 93 89 E9 5D C5 88 2A 90 FC 74 0B B0 01 D5 F6 29 B4 D2 DA 8C F1 +20 68 04 D0 4A F7 97 88 FE 3B B0 16 D3 4B DF 45 F4 36 CC D9 56 1B 42 39 80 6E 0E EB ED 71 D8 8B +56 96 2D 0B ED F6 7F C2 CC A3 57 85 CF 8C 0D E1 5F 0E 87 B5 3C 11 5E EB 0D 32 F1 5C 0A B0 54 C9 +63 98 05 E1 6B C4 72 91 8E EA 95 27 8C 4B 0B 6B 30 6B 95 2D 08 DF 47 79 14 D8 40 20 A9 90 96 2D +E1 E7 3D C6 74 F3 E0 6E B9 00 E4 0E CC EC 2A 00 9E 03 F9 2E 43 53 93 3B E7 B1 3D FE 0F E4 2C B5 +B8 3A B8 3B 5D 00 00 00 00 49 45 4E 44 AE 42 60 82 AC $EndBitmap +EndData +$EndBitmap +Wire Wire Line + 5350 4600 5250 4600 +Wire Wire Line + 5350 4400 5250 4400 +$Comp +L GND #PWR09 +U 1 1 550CF9FF +P 5350 4700 +F 0 "#PWR09" H 5350 4700 30 0001 C CNN +F 1 "GND" H 5350 4630 30 0001 C CNN +F 2 "" H 5350 4700 60 0000 C CNN +F 3 "" H 5350 4700 60 0000 C CNN + 1 5350 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 4400 5350 4700 +Connection ~ 5350 4600 +Text Notes 5050 4800 0 40 ~ 0 +chassis ground +$Comp +L GND #PWR010 +U 1 1 550CFBE5 +P 5350 6250 +F 0 "#PWR010" H 5350 6250 30 0001 C CNN +F 1 "GND" H 5350 6180 30 0001 C CNN +F 2 "" H 5350 6250 60 0000 C CNN +F 3 "" H 5350 6250 60 0000 C CNN + 1 5350 6250 + 1 0 0 -1 +$EndComp +Text Notes 5150 6400 0 40 ~ 0 +chassis ground +$Comp +L PWR_FLAG #FLG011 +U 1 1 550CFBF4 +P 5350 6150 +F 0 "#FLG011" H 5350 6245 30 0001 C CNN +F 1 "PWR_FLAG" H 5350 6330 30 0000 C CNN +F 2 "" H 5350 6150 60 0000 C CNN +F 3 "" H 5350 6150 60 0000 C CNN + 1 5350 6150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 6150 5350 6250 +$Comp +L CONN_1 P5 +U 1 1 550D1AD1 +P 5000 6150 +F 0 "P5" H 5080 6150 40 0000 L CNN +F 1 "GND" H 5000 6205 30 0001 C CNN +F 2 "mfk-AVA-20ga" H 5000 6150 60 0001 C CNN +F 3 "" H 5000 6150 60 0000 C CNN + 1 5000 6150 + -1 0 0 1 +$EndComp +Wire Wire Line + 5150 6150 5350 6150 +$Comp +L C C2 +U 1 1 550D2A54 +P 6900 5500 +F 0 "C2" H 6900 5600 40 0000 L CNN +F 1 "1u" H 6906 5415 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 6938 5350 30 0001 C CNN +F 3 "TDK FK18X5R1A105K" H 6900 5500 60 0001 C CNN + 1 6900 5500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5150 6900 5300 +$Comp +L DGND #PWR012 +U 1 1 550D2ACA +P 6900 5800 +F 0 "#PWR012" H 6900 5800 40 0001 C CNN +F 1 "DGND" H 6900 5730 40 0000 C CNN +F 2 "" H 6900 5800 60 0000 C CNN +F 3 "" H 6900 5800 60 0000 C CNN + 1 6900 5800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5800 6900 5700 +NoConn ~ 8300 4400 +NoConn ~ 8300 4850 +Connection ~ 8450 5000 +Wire Wire Line + 8450 3750 8450 4100 +Wire Wire Line + 7600 3650 7600 3750 +Connection ~ 7600 3750 +Wire Wire Line + 6900 4100 6750 4100 +Wire Wire Line + 6150 4150 6150 4400 +Connection ~ 8450 4100 +Wire Wire Line + 8300 5150 8450 5150 +Connection ~ 8450 5150 +Wire Wire Line + 6900 5000 6400 5000 +Wire Wire Line + 6400 5000 6400 6150 +$Comp +L CONN_3 P3 +U 1 1 551F2247 +P 2750 1800 +F 0 "P3" V 2700 1800 50 0000 C CNN +F 1 "PWR" V 2800 1800 40 0000 C CNN +F 2 "mfk-TE_282834-3" H 2750 1800 60 0001 C CNN +F 3 "" H 2750 1800 60 0000 C CNN + 1 2750 1800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1800 3100 1800 +Wire Wire Line + 3100 1700 3350 1700 +Wire Wire Line + 3150 1250 3150 1700 +Text Label 3150 1250 3 60 ~ 0 +V_MOT +Wire Wire Line + 6750 4100 6750 3750 +Wire Wire Line + 6750 5150 6750 6150 +Text Label 6750 6150 1 60 ~ 0 +V_MOT +$Comp +L PWR_FLAG #FLG013 +U 1 1 551F243F +P 3350 1650 +F 0 "#FLG013" H 3350 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3350 1830 30 0000 C CNN +F 2 "" H 3350 1650 60 0000 C CNN +F 3 "" H 3350 1650 60 0000 C CNN + 1 3350 1650 + -1 0 0 -1 +$EndComp +Connection ~ 3150 1700 +Wire Wire Line + 3350 1700 3350 1650 +$Comp +L JUMPER J1 +U 1 1 552023B1 +P 4750 1800 +F 0 "J1" H 4750 1950 60 0000 C CNN +F 1 "PWR_BR" H 4750 1720 40 0000 C CNN +F 2 "mfk-SIL-2" H 4750 1800 60 0001 C CNN +F 3 "~" H 4750 1800 60 0000 C CNN + 1 4750 1800 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR014 +U 1 1 552023F3 +P 4400 1450 +F 0 "#PWR014" H 4400 1400 20 0001 C CNN +F 1 "+5VD" H 4400 1550 50 0000 C CNN +F 2 "" H 4400 1450 60 0000 C CNN +F 3 "" H 4400 1450 60 0000 C CNN + 1 4400 1450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4450 1800 4400 1800 +Wire Wire Line + 4400 1800 4400 1450 +Text Label 5100 1350 3 60 ~ 0 +V_MOT +Wire Wire Line + 5050 1800 5100 1800 +Wire Wire Line + 5100 1800 5100 1350 +Text Notes 4000 2000 0 60 ~ 0 +Use jumper to power motor from +5VD. +$EndSCHEMATC diff --git a/samples/KiCad/ultimate-temp-controller.sch b/samples/KiCad/ultimate-temp-controller.sch new file mode 100644 index 00000000..8cac6465 --- /dev/null +++ b/samples/KiCad/ultimate-temp-controller.sch @@ -0,0 +1,69 @@ +EESchema Schematic File Version 2 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:relays +LIBS:w_relay +LIBS:ultimate-temp-controller-cache +EELAYER 25 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 2 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Sheet +S 1400 2100 2150 2000 +U 54E5B803 +F0 "controller" 60 +F1 "controller.sch" 60 +F2 "TC+" I L 1400 2300 60 +F3 "TC-" I L 1400 2400 60 +F4 "VCC" I L 1400 3750 60 +F5 "GND" I L 1400 3900 60 +F6 "RS485A" I R 3550 3700 60 +F7 "RS485B" I R 3550 3800 60 +F8 "DRAIN" O R 3550 3300 60 +F9 "+5V" O R 3550 2250 60 +F10 "SDA" B R 3550 2350 60 +F11 "SCL" B R 3550 2450 60 +F12 "GND" O R 3550 2550 60 +F13 "RELAY_NO" I R 3550 2850 60 +F14 "RELAY_COM" I R 3550 3050 60 +F15 "RELAY_NC" I R 3550 2950 60 +$EndSheet +$EndSCHEMATC diff --git a/samples/Limbo/cat.b b/samples/Limbo/cat.b new file mode 100644 index 00000000..5b9e3b5b --- /dev/null +++ b/samples/Limbo/cat.b @@ -0,0 +1,48 @@ +implement Cat; + +include "sys.m"; + sys: Sys; + +include "draw.m"; + +Cat: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +stdout: ref Sys->FD; + +init(nil: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + stdout = sys->fildes(1); + args = tl args; + if(args == nil) + args = "-" :: nil; + for(; args != nil; args = tl args){ + file := hd args; + if(file != "-"){ + fd := sys->open(file, Sys->OREAD); + if(fd == nil){ + sys->fprint(sys->fildes(2), "cat: cannot open %s: %r\n", file); + raise "fail:bad open"; + } + cat(fd, file); + }else + cat(sys->fildes(0), ""); + } +} + +cat(fd: ref Sys->FD, file: string) +{ + buf := array[Sys->ATOMICIO] of byte; + while((n := sys->read(fd, buf, len buf)) > 0) + if(sys->write(stdout, buf, n) < n) { + sys->fprint(sys->fildes(2), "cat: write error: %r\n"); + raise "fail:write error"; + } + if(n < 0) { + sys->fprint(sys->fildes(2), "cat: error reading %s: %r\n", file); + raise "fail:read error"; + } +} diff --git a/samples/Limbo/lock.b b/samples/Limbo/lock.b new file mode 100644 index 00000000..8b51e4f9 --- /dev/null +++ b/samples/Limbo/lock.b @@ -0,0 +1,26 @@ +implement Lock; + +include "sys.m"; + sys: Sys; +include "lock.m"; + +Semaphore.obtain(l: self ref Semaphore) +{ + l.c <-= 0; +} + +Semaphore.release(l: self ref Semaphore) +{ + <-l.c; +} + +Semaphore.new(): ref Semaphore +{ + l := ref Semaphore; + l.c = chan[1] of int; + return l; +} + +init() +{ +} diff --git a/samples/Limbo/lock.m b/samples/Limbo/lock.m new file mode 100644 index 00000000..ffd818c5 --- /dev/null +++ b/samples/Limbo/lock.m @@ -0,0 +1,13 @@ +Lock: module +{ + PATH: con "/dis/lib/lock.dis"; + + Semaphore: adt { + c: chan of int; + obtain: fn(nil: self ref Semaphore); + release: fn(nil: self ref Semaphore); + new: fn(): ref Semaphore; + }; + + init: fn(); +}; diff --git a/samples/Linker Script/filenames/ld.script b/samples/Linker Script/filenames/ld.script new file mode 100644 index 00000000..8e6b07ca --- /dev/null +++ b/samples/Linker Script/filenames/ld.script @@ -0,0 +1,50 @@ +/* + * ld.script for compressed kernel support of MIPS + * + * Copyright (C) 2009 Lemote Inc. + * Author: Wu Zhangjin + * Copyright (C) 2010 "Wu Zhangjin" + */ + +OUTPUT_ARCH(mips) +ENTRY(start) +SECTIONS +{ + /* Text and read-only data */ + /* . = VMLINUZ_LOAD_ADDRESS; */ + .text : { + *(.text) + *(.rodata) + } + /* End of text section */ + + /* Writable data */ + .data : { + *(.data) + /* Put the compressed image here */ + __image_begin = .; + *(.image) + __image_end = .; + CONSTRUCTORS + } + . = ALIGN(16); + _edata = .; + /* End of data section */ + + /* BSS */ + .bss : { + *(.bss) + } + . = ALIGN(16); + _end = .; + + /* Sections to be discarded */ + /DISCARD/ : { + *(.MIPS.options) + *(.options) + *(.pdr) + *(.reginfo) + *(.comment) + *(.note) + } +} diff --git a/samples/Linker Script/link.ld b/samples/Linker Script/link.ld new file mode 100644 index 00000000..833fe462 --- /dev/null +++ b/samples/Linker Script/link.ld @@ -0,0 +1,12 @@ +/* +* link.ld +*/ +OUTPUT_FORMAT(elf32-i386) +ENTRY(start) +SECTIONS + { + . = 0x100000; + .text : { *(.text) } + .data : { *(.data) } + .bss : { *(.bss) } + } \ No newline at end of file diff --git a/samples/Linker Script/vmlinux.lds b/samples/Linker Script/vmlinux.lds new file mode 100644 index 00000000..00bf300f --- /dev/null +++ b/samples/Linker Script/vmlinux.lds @@ -0,0 +1,373 @@ +/* + * ld script for the x86 kernel + * + * Historic 32-bit version written by Martin Mares + * + * Modernisation, unification and other changes and fixes: + * Copyright (C) 2007-2009 Sam Ravnborg + * + * + * Don't define absolute symbols until and unless you know that symbol + * value is should remain constant even if kernel image is relocated + * at run time. Absolute symbols are not relocated. If symbol value should + * change if kernel is relocated, make the symbol section relative and + * put it inside the section definition. + */ + +#ifdef CONFIG_X86_32 +#define LOAD_OFFSET __PAGE_OFFSET +#else +#define LOAD_OFFSET __START_KERNEL_map +#endif + +#include +#include +#include +#include +#include +#include + +#undef i386 /* in case the preprocessor is a 32bit one */ + +OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) + +#ifdef CONFIG_X86_32 +OUTPUT_ARCH(i386) +ENTRY(phys_startup_32) +jiffies = jiffies_64; +#else +OUTPUT_ARCH(i386:x86-64) +ENTRY(phys_startup_64) +jiffies_64 = jiffies; +#endif + +#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) +/* + * On 64-bit, align RODATA to 2MB so that even with CONFIG_DEBUG_RODATA + * we retain large page mappings for boundaries spanning kernel text, rodata + * and data sections. + * + * However, kernel identity mappings will have different RWX permissions + * to the pages mapping to text and to the pages padding (which are freed) the + * text section. Hence kernel identity mappings will be broken to smaller + * pages. For 64-bit, kernel text and kernel identity mappings are different, + * so we can enable protection checks that come with CONFIG_DEBUG_RODATA, + * as well as retain 2MB large page mappings for kernel text. + */ +#define X64_ALIGN_DEBUG_RODATA_BEGIN . = ALIGN(HPAGE_SIZE); + +#define X64_ALIGN_DEBUG_RODATA_END \ + . = ALIGN(HPAGE_SIZE); \ + __end_rodata_hpage_align = .; + +#else + +#define X64_ALIGN_DEBUG_RODATA_BEGIN +#define X64_ALIGN_DEBUG_RODATA_END + +#endif + +PHDRS { + text PT_LOAD FLAGS(5); /* R_E */ + data PT_LOAD FLAGS(6); /* RW_ */ +#ifdef CONFIG_X86_64 +#ifdef CONFIG_SMP + percpu PT_LOAD FLAGS(6); /* RW_ */ +#endif + init PT_LOAD FLAGS(7); /* RWE */ +#endif + note PT_NOTE FLAGS(0); /* ___ */ +} + +SECTIONS +{ +#ifdef CONFIG_X86_32 + . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; + phys_startup_32 = startup_32 - LOAD_OFFSET; +#else + . = __START_KERNEL; + phys_startup_64 = startup_64 - LOAD_OFFSET; +#endif + + /* Text and read-only data */ + .text : AT(ADDR(.text) - LOAD_OFFSET) { + _text = .; + /* bootstrapping code */ + HEAD_TEXT + . = ALIGN(8); + _stext = .; + TEXT_TEXT + SCHED_TEXT + LOCK_TEXT + KPROBES_TEXT + ENTRY_TEXT + IRQENTRY_TEXT + *(.fixup) + *(.gnu.warning) + /* End of text section */ + _etext = .; + } :text = 0x9090 + + NOTES :text :note + + EXCEPTION_TABLE(16) :text = 0x9090 + +#if defined(CONFIG_DEBUG_RODATA) + /* .text should occupy whole number of pages */ + . = ALIGN(PAGE_SIZE); +#endif + X64_ALIGN_DEBUG_RODATA_BEGIN + RO_DATA(PAGE_SIZE) + X64_ALIGN_DEBUG_RODATA_END + + /* Data */ + .data : AT(ADDR(.data) - LOAD_OFFSET) { + /* Start of data section */ + _sdata = .; + + /* init_task */ + INIT_TASK_DATA(THREAD_SIZE) + +#ifdef CONFIG_X86_32 + /* 32 bit has nosave before _edata */ + NOSAVE_DATA +#endif + + PAGE_ALIGNED_DATA(PAGE_SIZE) + + CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) + + DATA_DATA + CONSTRUCTORS + + /* rarely changed data like cpu maps */ + READ_MOSTLY_DATA(INTERNODE_CACHE_BYTES) + + /* End of data section */ + _edata = .; + } :data + + + . = ALIGN(PAGE_SIZE); + __vvar_page = .; + + .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) { + /* work around gold bug 13023 */ + __vvar_beginning_hack = .; + + /* Place all vvars at the offsets in asm/vvar.h. */ +#define EMIT_VVAR(name, offset) \ + . = __vvar_beginning_hack + offset; \ + *(.vvar_ ## name) +#define __VVAR_KERNEL_LDS +#include +#undef __VVAR_KERNEL_LDS +#undef EMIT_VVAR + + /* + * Pad the rest of the page with zeros. Otherwise the loader + * can leave garbage here. + */ + . = __vvar_beginning_hack + PAGE_SIZE; + } :data + + . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE); + + /* Init code and data - will be freed after init */ + . = ALIGN(PAGE_SIZE); + .init.begin : AT(ADDR(.init.begin) - LOAD_OFFSET) { + __init_begin = .; /* paired with __init_end */ + } + +#if defined(CONFIG_X86_64) && defined(CONFIG_SMP) + /* + * percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the + * output PHDR, so the next output section - .init.text - should + * start another segment - init. + */ + PERCPU_VADDR(INTERNODE_CACHE_BYTES, 0, :percpu) + ASSERT(SIZEOF(.data..percpu) < CONFIG_PHYSICAL_START, + "per-CPU data too large - increase CONFIG_PHYSICAL_START") +#endif + + INIT_TEXT_SECTION(PAGE_SIZE) +#ifdef CONFIG_X86_64 + :init +#endif + + INIT_DATA_SECTION(16) + + .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) { + __x86_cpu_dev_start = .; + *(.x86_cpu_dev.init) + __x86_cpu_dev_end = .; + } + +#ifdef CONFIG_X86_INTEL_MID + .x86_intel_mid_dev.init : AT(ADDR(.x86_intel_mid_dev.init) - \ + LOAD_OFFSET) { + __x86_intel_mid_dev_start = .; + *(.x86_intel_mid_dev.init) + __x86_intel_mid_dev_end = .; + } +#endif + + /* + * start address and size of operations which during runtime + * can be patched with virtualization friendly instructions or + * baremetal native ones. Think page table operations. + * Details in paravirt_types.h + */ + . = ALIGN(8); + .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) { + __parainstructions = .; + *(.parainstructions) + __parainstructions_end = .; + } + + /* + * struct alt_inst entries. From the header (alternative.h): + * "Alternative instructions for different CPU types or capabilities" + * Think locking instructions on spinlocks. + */ + . = ALIGN(8); + .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) { + __alt_instructions = .; + *(.altinstructions) + __alt_instructions_end = .; + } + + /* + * And here are the replacement instructions. The linker sticks + * them as binary blobs. The .altinstructions has enough data to + * get the address and the length of them to patch the kernel safely. + */ + .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { + *(.altinstr_replacement) + } + + /* + * struct iommu_table_entry entries are injected in this section. + * It is an array of IOMMUs which during run time gets sorted depending + * on its dependency order. After rootfs_initcall is complete + * this section can be safely removed. + */ + .iommu_table : AT(ADDR(.iommu_table) - LOAD_OFFSET) { + __iommu_table = .; + *(.iommu_table) + __iommu_table_end = .; + } + + . = ALIGN(8); + .apicdrivers : AT(ADDR(.apicdrivers) - LOAD_OFFSET) { + __apicdrivers = .; + *(.apicdrivers); + __apicdrivers_end = .; + } + + . = ALIGN(8); + /* + * .exit.text is discard at runtime, not link time, to deal with + * references from .altinstructions and .eh_frame + */ + .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + EXIT_TEXT + } + + .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) { + EXIT_DATA + } + +#if !defined(CONFIG_X86_64) || !defined(CONFIG_SMP) + PERCPU_SECTION(INTERNODE_CACHE_BYTES) +#endif + + . = ALIGN(PAGE_SIZE); + + /* freed after init ends here */ + .init.end : AT(ADDR(.init.end) - LOAD_OFFSET) { + __init_end = .; + } + + /* + * smp_locks might be freed after init + * start/end must be page aligned + */ + . = ALIGN(PAGE_SIZE); + .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { + __smp_locks = .; + *(.smp_locks) + . = ALIGN(PAGE_SIZE); + __smp_locks_end = .; + } + +#ifdef CONFIG_X86_64 + .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { + NOSAVE_DATA + } +#endif + + /* BSS */ + . = ALIGN(PAGE_SIZE); + .bss : AT(ADDR(.bss) - LOAD_OFFSET) { + __bss_start = .; + *(.bss..page_aligned) + *(.bss) + . = ALIGN(PAGE_SIZE); + __bss_stop = .; + } + + . = ALIGN(PAGE_SIZE); + .brk : AT(ADDR(.brk) - LOAD_OFFSET) { + __brk_base = .; + . += 64 * 1024; /* 64k alignment slop space */ + *(.brk_reservation) /* areas brk users have reserved */ + __brk_limit = .; + } + + _end = .; + + STABS_DEBUG + DWARF_DEBUG + + /* Sections to be discarded */ + DISCARDS + /DISCARD/ : { *(.eh_frame) } +} + + +#ifdef CONFIG_X86_32 +/* + * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: + */ +. = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); +#else +/* + * Per-cpu symbols which need to be offset from __per_cpu_load + * for the boot processor. + */ +#define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load +INIT_PER_CPU(gdt_page); +INIT_PER_CPU(irq_stack_union); + +/* + * Build-time check on the image size: + */ +. = ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); + +#ifdef CONFIG_SMP +. = ASSERT((irq_stack_union == 0), + "irq_stack_union is not at start of per-cpu area"); +#endif + +#endif /* CONFIG_X86_32 */ + +#ifdef CONFIG_KEXEC +#include + +. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, + "kexec control code size is too big"); +#endif + diff --git a/samples/Makefile/filenames/Makefile.boot b/samples/Makefile/filenames/Makefile.boot new file mode 100644 index 00000000..07c25c11 --- /dev/null +++ b/samples/Makefile/filenames/Makefile.boot @@ -0,0 +1,159 @@ +# $NetBSD$ + +S= ${.CURDIR}/../../../../.. + +NOMAN= +PROG?= boot +NEWVERSWHAT?= "BIOS Boot" +VERSIONFILE?= ${.CURDIR}/../version + +AFLAGS.biosboot.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} + +SOURCES?= biosboot.S boot2.c conf.c devopen.c exec.c +SRCS= ${SOURCES} +.if !make(depend) +SRCS+= vers.c +.endif + +PIE_CFLAGS= +PIE_AFLAGS= +PIE_LDFLAGS= + +.include + +STRIPFLAG= # nothing + +LIBCRT0= # nothing +LIBCRTI= # nothing +LIBCRTBEGIN= # nothing +LIBCRTEND= # nothing +LIBC= # nothing + +BINDIR=/usr/mdec +BINMODE=444 + +.PATH: ${.CURDIR}/.. ${.CURDIR}/../../lib + +LDFLAGS+= -nostdlib -Wl,-N -Wl,-e,boot_start +CPPFLAGS+= -I ${.CURDIR}/.. -I ${.CURDIR}/../../lib -I ${S}/lib/libsa +CPPFLAGS+= -I ${.OBJDIR} +# Make sure we override any optimization options specified by the user +COPTS= -Os + +.if ${MACHINE_ARCH} == "x86_64" +LDFLAGS+= -Wl,-m,elf_i386 +AFLAGS+= -m32 +CPUFLAGS= -m32 +LIBKERN_ARCH=i386 +KERNMISCMAKEFLAGS="LIBKERN_ARCH=i386" +.else +CPUFLAGS= -march=i386 -mtune=i386 +.endif + +CFLAGS+= -mno-sse -mno-sse2 -mno-sse3 + +COPTS+= -ffreestanding +CFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes +CPPFLAGS+= -nostdinc -D_STANDALONE +CPPFLAGS+= -I$S + +CPPFLAGS+= -DSUPPORT_PS2 +CPPFLAGS+= -DDIRECT_SERIAL +CPPFLAGS+= -DSUPPORT_SERIAL=boot_params.bp_consdev + +CPPFLAGS+= -DCONSPEED=boot_params.bp_conspeed +CPPFLAGS+= -DCONSADDR=boot_params.bp_consaddr +CPPFLAGS+= -DCONSOLE_KEYMAP=boot_params.bp_keymap + +CPPFLAGS+= -DSUPPORT_CD9660 +CPPFLAGS+= -DSUPPORT_USTARFS +CPPFLAGS+= -DSUPPORT_DOSFS +CPPFLAGS+= -DSUPPORT_EXT2FS +#CPPFLAGS+= -DSUPPORT_MINIXFS3 +CPPFLAGS+= -DPASS_BIOSGEOM +CPPFLAGS+= -DPASS_MEMMAP +#CPPFLAGS+= -DBOOTPASSWD +CPPFLAGS+= -DEPIA_HACK +#CPPFLAGS+= -DDEBUG_MEMSIZE +#CPPFLAGS+= -DBOOT_MSG_COM0 +CPPFLAGS+= -DLIBSA_ENABLE_LS_OP + +# The biosboot code is linked to 'virtual' address of zero and is +# loaded at physical address 0x10000. +# XXX The heap values should be determined from _end. +SAMISCCPPFLAGS+= -DHEAP_START=0x40000 -DHEAP_LIMIT=0x70000 +SAMISCCPPFLAGS+= -DLIBSA_PRINTF_LONGLONG_SUPPORT +SAMISCMAKEFLAGS+= SA_USE_CREAD=yes # Read compressed kernels +SAMISCMAKEFLAGS+= SA_INCLUDE_NET=no # Netboot via TFTP, NFS + +CPPFLAGS+= -Wno-pointer-sign + +# CPPFLAGS+= -DBOOTXX_RAID1_SUPPORT + +I386_STAND_DIR?= $S/arch/i386/stand + +### find out what to use for libi386 +I386DIR= ${I386_STAND_DIR}/lib +.include "${I386DIR}/Makefile.inc" +LIBI386= ${I386LIB} + +### find out what to use for libsa +SA_AS= library +SAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes" +SAMISCMAKEFLAGS+="SA_ENABLE_LS_OP=yes" +.include "${S}/lib/libsa/Makefile.inc" +LIBSA= ${SALIB} + +### find out what to use for libkern +KERN_AS= library +.include "${S}/lib/libkern/Makefile.inc" +LIBKERN= ${KERNLIB} + +### find out what to use for libz +Z_AS= library +.include "${S}/lib/libz/Makefile.inc" +LIBZ= ${ZLIB} + +LDSCRIPT ?= $S/arch/i386/conf/stand.ldscript + +cleandir distclean: .WAIT cleanlibdir + +cleanlibdir: + -rm -rf lib + +LIBLIST= ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} ${LIBI386} ${LIBSA} +# LIBLIST= ${LIBSA} ${LIBKERN} ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} + +CLEANFILES+= ${PROG}.tmp ${PROG}.map ${PROG}.sym vers.c + +vers.c: ${VERSIONFILE} ${SOURCES} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${HOST_SH} ${S}/conf/newvers_stand.sh ${VERSIONFILE} x86 ${NEWVERSWHAT} + +# Anything that calls 'real_to_prot' must have a %pc < 0x10000. +# We link the program, find the callers (all in libi386), then +# explicitly pull in the required objects before any other library code. +${PROG}: ${OBJS} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${_MKTARGET_LINK} + bb="$$( ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -Wl,-cref \ + ${OBJS} ${LIBLIST} | ( \ + while read symbol file; do \ + [ -z "$$file" ] && continue; \ + [ "$$symbol" = real_to_prot ] && break; \ + done; \ + while \ + oifs="$$IFS"; \ + IFS='()'; \ + set -- $$file; \ + IFS="$$oifs"; \ + [ -n "$$2" ] && echo "${I386DST}/$$2"; \ + read file rest && [ -z "$$rest" ]; \ + do :; \ + done; \ + ) )"; \ + ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -T ${LDSCRIPT} \ + -Wl,-Map,${PROG}.map -Wl,-cref ${OBJS} $$bb ${LIBLIST} + ${OBJCOPY} -O binary ${PROG}.sym ${PROG} + +.include +KLINK_MACHINE= i386 +.include diff --git a/samples/Makefile/makefile.script! b/samples/Makefile/makefile similarity index 100% rename from samples/Makefile/makefile.script! rename to samples/Makefile/makefile diff --git a/samples/Module Management System/descrip.mms b/samples/Module Management System/descrip.mms new file mode 100644 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/openvms.mmk b/samples/Module Management System/openvms.mmk new file mode 100644 index 00000000..4a48d3c1 --- /dev/null +++ b/samples/Module Management System/openvms.mmk @@ -0,0 +1,563 @@ +# Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved. +# +# This software is provided AS-IS with no warranty, either express or +# implied. +# +# This software is distributed under license and may not be copied, +# modified or distributed except as expressly authorized under the terms +# of the license contained in the file LICENSE in this distribution. +# +# For more information about licensing, please refer to +# http://www.ghostscript.com/licensing/. For information on +# commercial licensing, go to http://www.artifex.com/licensing/ or +# contact Artifex Software, Inc., 101 Lucas Valley Road #110, +# San Rafael, CA 94903, U.S.A., +1(415)492-9861. + +# $Id: openvms.mmk,v 1.31 2004/12/10 23:48:48 giles Exp $ +# makefile for OpenVMS VAX and Alpha using MMK +# +# Please contact Jim Dunham (dunham@omtool.com) if you have questions. +# Addapted for MMK by Jouk Jansen (joukj@hrem.stm.tudelft.nl) +# Support for VAX C on OpenVMS was removed in release 6.01 by Aladdin: +# DEC C is now used on both VAX and Alpha platforms. +# +# ------------------------------- Options ------------------------------- # + +###### This section is the only part of the file you should need to edit. + +# on the make command line specify: +# mmk/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2={0,1}") + +# Define the directory for the final executable, and the +# source, generated intermediate file, and object directories +# for the graphics library (GL) and the PostScript/PDF interpreter (PS). + +BINDIR=[.bin] +GLSRCDIR=[.src] +GLGENDIR=[.obj] +GLOBJDIR=[.obj] +PSSRCDIR=[.src] +PSGENDIR=[.obj] +PSOBJDIR=[.obj] +PSLIBDIR=[.lib] +# Because of OpenVMS syntactic problems, the following redundant definitions +# are necessary. If you are using more than one GENDIR and/or OBJDIR, +# you will have to edit the code below that creates these directories. +BIN_DIR=BIN.DIR +OBJ_DIR=OBJ.DIR + +# create directories +.first + if f$search("$(BIN_DIR)") .eqs. "" then create/directory/log $(BINDIR) + if f$search("$(OBJ_DIR)") .eqs. "" then create/directory/log $(GLOBJDIR) + +# Do not edit the next group of lines. + +#.include $(COMMONDIR)vmscdefs.mak +#.include $(COMMONDIR)vmsdefs.mak +#.include $(COMMONDIR)generic.mak +.include $(GLSRCDIR)version.mak +DD=$(GLGENDIR) +GLD=$(GLGENDIR) +PSD=$(PSGENDIR) + +# ------ Generic options ------ # + +# Define the directory that will hold documentation at runtime. + +GS_DOCDIR=GS_DOC +#GS_DOCDIR=SYS$COMMON:[GS] + +# Define the default directory/ies for the runtime +# initialization and font files. Separate multiple directories with ,. + +GS_LIB_DEFAULT=GS_LIB +#GS_LIB_DEFAULT=SYS$COMMON:[GS],SYS$COMMON:[GS.FONT] + +# Define whether or not searching for initialization files should always +# look in the current directory first. This leads to well-known security +# and confusion problems, but users insist on it. +# NOTE: this also affects searching for files named on the command line: +# see the "File searching" section of Use.htm for full details. +# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended. + +SEARCH_HERE_FIRST=1 + +# Define the name of the interpreter initialization file. +# (There is no reason to change this.) + +GS_INIT=GS_INIT.PS + +# Choose generic configuration options. + +# Setting DEBUG=1 includes debugging features in the code + +DEBUG=0 + +# Setting TDEBUG=1 includes symbol table information for the debugger, +# and also enables stack tracing on failure. + +TDEBUG= + +# Setting CDEBUG=1 enables 'C' compiler debugging and turns off optimization +# Code is substantially slower and larger. + +CDEBUG= + +# Define the name of the executable file. + +GS=GS + +# Define the name of a pre-built executable that can be invoked at build +# time. Currently, this is only needed for compiled fonts. The usual +# alternatives are: +# - the standard name of Ghostscript on your system (typically `gs'): +BUILD_TIME_GS=GS +# - the name of the executable you are building now. If you choose this +# option, then you must build the executable first without compiled fonts, +# and then again with compiled fonts. +#BUILD_TIME_GS=$(BINDIR)$(GS) -I$(PSLIBDIR) + +# Define the directory where the IJG JPEG library sources are stored, +# and the major version of the library that is stored there. +# You may need to change this if the IJG library version changes. +# See jpeg.mak for more information. + +.ifdef SYSLIB +JSRCDIR=sys$library: +.else +JSRCDIR=[--.jpeg-6b] +.endif +JVERSION=6 + +# Define the directory where the PNG library sources are stored, +# and the version of the library that is stored there. +# You may need to change this if the libpng version changes. +# See libpng.mak for more information. + +.ifdef SYSLIB +PSRCDIR=sys$library: +.else +PSRCDIR=[--.libpng-1_2_8] +.endif +PVERSION=10208 + +# Define the directory where the zlib sources are stored. +# See zlib.mak for more information. + +.ifdef SYSLIB +ZSRCDIR=sys$library: +.else +ZSRCDIR=[--.zlib-1_2_1] +.endif + +# Define the directory where the jbig2dec library sources are stored. +# See jbig2.mak for more information +.ifdef SYSLIB +JBIG2SRCDIR=sys$library: +.else +JBIG2SRCDIR=[--.jbig2dec-0_7] +.endif + +# Define the directory where the icclib source are stored. +# See icclib.mak for more information + +ICCSRCDIR=[.icclib] + +# IJS has not been ported to OpenVMS. If you do the port, +# you'll need to set these values. You'll also need to +# include the ijs.mak makefile (right after icclib.mak). +# +# Define the directory where the ijs source is stored, +# and the process forking method to use for the server. +# See ijs.mak for more information. + +#IJSSRCDIR=[.ijs] +#IJSEXECTYPE=unix + +# Note that built-in third-party libraries aren't available. + +SHARE_JPEG=0 +SHARE_LIBPNG=0 +SHARE_ZLIB=0 +SHARE_JBIG2=0 + +# Define the path to X11 include files + +X_INCLUDE=DECW$INCLUDE + +# ------ Platform-specific options ------ # + +# Define the drive, directory, and compiler name for the 'C' compiler. +# COMP is the full compiler path name. + +.ifdef DEBUG +SW_DEBUG=/DEBUG/NOOPTIMIZE +.else +# This should include /OPTIMIZE, but some OpenVMS compilers have an +# optimizer bug that causes them to generate incorrect code for gdevpsfx.c, +# so we must disable optimization. (Eventually we will check for the bug +# in genarch and enable optimization if it is safe.) +#SW_DEBUG=/NODEBUG/OPTIMIZE +SW_DEBUG=/NODEBUG/NOOPTIMIZE +.endif + +SW_PLATFORM=/DECC/PREFIX=ALL/NESTED_INCLUDE=PRIMARY/name=(as_is,short)/nowarn + +# Define any other compilation flags. +# Including defines for A4 paper size + +.ifdef A4_PAPER +SW_PAPER=/DEFINE=("A4","HAVE_MKSTEMP") +.else +SW_PAPER=/DEFINE=("HAVE_MKSTEMP") +.endif + +.ifdef IEEE +SW_IEEE=/float=ieee +.else +SW_IEEE= +.endif + +COMP=CC$(SW_DEBUG)$(SW_PLATFORM)$(SW_PAPER)$(SW_IEEE) + +# LINK is the full linker path name + +.ifdef TDEBUG +LINKER=LINK/DEBUG/TRACEBACK +.else +LINKER=LINK/NODEBUG/NOTRACEBACK +.endif + +# INCDIR contains the include files +INCDIR= + +# LIBDIR contains the library files +LIBDIR= + +# Define the .dev module that implements thread and synchronization +# primitives for this platform. Don't change this unless you really know +# what you're doing. + +SYNC=posync + +# ------ Devices and features ------ # + +# Choose the device(s) to include. See devs.mak for details, +# devs.mak and contrib.mak for the list of available devices. + +DEVICE_DEVS=$(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev +DEVICE_DEVS1= +DEVICE_DEVS2= +DEVICE_DEVS3=$(DD)deskjet.dev $(DD)djet500.dev $(DD)laserjet.dev $(DD)ljetplus.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev +DEVICE_DEVS4=$(DD)cdeskjet.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cdj550.dev $(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev +DEVICE_DEVS5=$(DD)uniprint.dev +DEVICE_DEVS6=$(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev +DEVICE_DEVS7=$(DD)faxg3.dev $(DD)faxg32d.dev $(DD)faxg4.dev +DEVICE_DEVS8=$(DD)pcxmono.dev $(DD)pcxgray.dev $(DD)pcx16.dev $(DD)pcx256.dev $(DD)pcx24b.dev $(DD)pcxcmyk.dev +DEVICE_DEVS9=$(DD)pbm.dev $(DD)pbmraw.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev +DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev +DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev +DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev +DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev +DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev +DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev +DEVICE_DEVS16=$(DD)bbox.dev +# Overflow from DEVS9 +DEVICE_DEVS17=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev +DEVICE_DEVS18= +DEVICE_DEVS19= +DEVICE_DEVS20= +DEVICE_DEVS21= +DEVICE_DEVS21= + +# Choose the language feature(s) to include. See gs.mak for details. + +FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)ttfont.dev $(PSD)epsf.dev $(PSD)fapi.dev $(PSD)jbig2.dev + +# Choose whether to compile the .ps initialization files into the executable. +# See gs.mak for details. + +COMPILE_INITS=0 + +# Choose whether to store band lists on files or in memory. +# The choices are 'file' or 'memory'. + +BAND_LIST_STORAGE=file + +# Choose which compression method to use when storing band lists in memory. +# The choices are 'lzw' or 'zlib'. + +BAND_LIST_COMPRESSOR=zlib + +# Choose the implementation of file I/O: 'stdio', 'fd', or 'both'. +# See gs.mak and sfxfd.c for more details. + +FILE_IMPLEMENTATION=stdio + +# Choose the implementation of stdio: '' for file I/O and 'c' for callouts +# See gs.mak and ziodevs.c/ziodevsc.c for more details. + +STDIO_IMPLEMENTATION=c + +# Define the name table capacity size of 2^(16+n). + +EXTEND_NAMES=0 + +# Define whether the system constants are writable. + +SYSTEM_CONSTANTS_ARE_WRITABLE=0 + +# Define the platform name. + +PLATFORM=openvms_ + +# Define the name of the makefile -- used in dependencies. + +MAKEFILE=$(GLSRCDIR)openvms.mmk +TOP_MAKEFILES=$(MAKEFILE) + +# Define the platform options + +PLATOPT= + +# Patch a couple of PC-specific things that aren't relevant to OpenVMS builds, +# but that cause `make' to produce warnings. + +PCFBASM= + +# It is very unlikely that anyone would want to edit the remaining +# symbols, but we describe them here for completeness: + +# Define the suffix for command files (e.g., null or .bat). + +CMD= + +# Define the directory separator character (\ for MS-DOS, / for Unix, +# nothing for OpenVMS). + +D= + +# Define the brackets for passing preprocessor definitions to the C compiler. +NULL= + +D_=/DEFINE=" +_D_=$(NULL)= +_D=" + +# Define the syntax of search paths for the C compiler. +# The OpenVMS compilers uses /INCLUDE=(dir1, dir2, ...dirn), +# and only a single /INCLUDE switch is allowed in the command line. + +I_=/INCLUDE=( +II=, +_I=) + +# Define the string for specifying the output file from the C compiler. + +O_=/OBJECT= + +# Define the quoting string for mixed-case arguments. +# (OpenVMS is the only platform where this isn't an empty string.) + +Q=" + +# Define the extension for executable files (e.g., null or .exe). + +XE=.exe + +# Define the extension for executable files for the auxiliary programs +# (e.g., null or .exe). + +XEAUX=.exe + +# Define the list of files that `make clean' removes. + +BEGINFILES=$(GLSRCDIR)OPENVMS.OPT $(GLSRCDIR)OPENVMS.COM + +# Define the C invocation for auxiliary programs (echogs, genarch). +# We don't need to define this separately. + +CCAUX= + +# Define the C invocation for normal compilation. + +CC=$(COMP) + +# Define the Link invocation. + +LINK=$(LINKER)/EXE=$@ $+,$(GLSRCDIR)OPENVMS.OPT/OPTION + +# Define the auxiliary program dependency. We don't need this. + +AK= + +# Define the syntax for command, object, and executable files. + +OBJ=obj + +# Define the prefix for image invocations. + +EXP=MCR $(NULL) + +# Define the prefix for shell invocations. + +SH= + +# Define generic commands. + +CP_=@$(GLSRCDIR)COPY_ONE + +# Define the command for deleting (a) file(s) (including wild cards) + +RM_=@$(GLSRCDIR)RM_ONE + +# Define the command for deleting multiple files / patterns. + +RMN_=@$(GLSRCDIR)RM_ALL + +# Define the arguments for genconf. + +CONFILES=-p %s +CONFLDTR=-o + +# Define the generic compilation rules. + +.suffixes : .c .obj .exe + +.obj.exe : + $(LINK) + +# ---------------------------- End of options ---------------------------- # + +# Define various incantations of the 'c' compiler. + +CC_=$(COMP) +CC_INT=$(CC_) +CC_NO_WARN=$(CC_) + +# ------------------- Include the generic makefiles ---------------------- # + +all : macro [.lib]Fontmap. $(GS_XE) + +#.include $(COMMONDIR)/ansidefs.mak +#.include $(COMMONDIR)/vmsdefs.mak +#.include $(COMMONDIR)/generic.mak +.include $(GLSRCDIR)gs.mak +.include $(GLSRCDIR)lib.mak +.include $(PSSRCDIR)int.mak +.include $(PSSRCDIR)cfonts.mak +.include $(GLSRCDIR)jpeg.mak +# zlib.mak must precede libpng.mak +.include $(GLSRCDIR)zlib.mak +.include $(GLSRCDIR)libpng.mak +JBIG2_EXTRA_OBJS=$(JBIG2OBJDIR)$(D)snprintf.$(OBJ) +.include $(GLSRCDIR)jbig2.mak +.include $(GLSRCDIR)icclib.mak +.include $(GLSRCDIR)devs.mak +.include $(GLSRCDIR)contrib.mak + + +# ----------------------------- Main program ------------------------------ + +macro : +.ifdef A4_PAPER + @ a4p = 1 +.else + @ a4p = 0 +.endif +.ifdef IEEE + @ i3e = 1 +.else + @ i3e = 0 +.endif +.ifdef SYSLIB + @ dsl = 1 +.else + @ dsl = 0 +.endif + @ decc = f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" + @ decw12 = f$search("SYS$SHARE:DECW$XTLIBSHRR5.EXE").nes."" + @ macro = "" + @ if dsl.or.a4p.or.decc.or.decw12 then macro = "/MACRO=(" + @ if decw12 then macro = macro + "DECWINDOWS1_2=1," + @ if a4p then macro = macro + "A4_PAPER=1," + @ if dsl then macro = macro + "SYSLIB=1," + @ if i3e then macro = macro + "IEEE=1," + @ if macro.nes."" then macro = f$extract(0,f$length(macro)-1,macro)+ ")" + $(MMS)$(MMSQUALIFIERS)'macro' $(GS_XE) + +$(GS_XE) : openvms $(GLGEN)arch.h $(GLOBJDIR)gs.$(OBJ) $(INT_ALL) $(LIB_ALL) + $(LINKER)/EXE=$@ $(GLOBJDIR)gs.$(OBJ),$(ld_tr)/OPTIONS,$(GLSRCDIR)OPENVMS.OPT/OPTION + @ Write Sys$Output "Build of GhostScript is complete!" + +# OpenVMS.dev + +openvms__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_vms.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) +$(GLGEN)openvms_.dev : $(openvms__) $(GLGEN)nosync.dev + $(SETMOD) $(GLGEN)openvms_ $(openvms__) -include $(GLGEN)nosync + +$(ECHOGS_XE) : $(GLOBJDIR)echogs.$(OBJ) +$(GENARCH_XE) : $(GLOBJDIR)genarch.$(OBJ) +$(GENCONF_XE) : $(GLOBJDIR)genconf.$(OBJ) +$(GENDEV_XE) : $(GLOBJDIR)gendev.$(OBJ) +$(GENHT_XE) : $(GLOBJDIR)genht.$(OBJ) +$(GENINIT_XE) : $(GLOBJDIR)geninit.$(OBJ) + +$(GLOBJDIR)echogs.$(OBJ) : $(GLSRCDIR)echogs.c +$(GLOBJDIR)genarch.$(OBJ) : $(GLSRCDIR)genarch.c $(GENARCH_DEPS) +$(GLOBJDIR)genconf.$(OBJ) : $(GLSRCDIR)genconf.c $(GENCONF_DEPS) +$(GLOBJDIR)gendev.$(OBJ) : $(GLSRCDIR)gendev.c $(GENDEV_DEPS) +# ****** NEED TO ADD $(GENHT_CFLAGS) HERE ****** +$(GLOBJDIR)genht.$(OBJ) : $(GLSRCDIR)genht.c $(GENHT_DEPS) +$(GLOBJDIR)geninit.$(OBJ) : $(GLSRCDIR)geninit.c $(GENINIT_DEPS) + +$(GLOBJ)gp_vms.$(OBJ) : $(GLSRC)gp_vms.c $(string__h) $(memory__h) $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) + $(CC_)/include=($(GLGENDIR),$(GLSRCDIR))/obj=$(GLOBJ)gp_vms.$(OBJ) $(GLSRC)gp_vms.c + +$(GLOBJ)gp_stdia.$(OBJ) : $(GLSRC)gp_stdia.c $(AK) $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) + $(CC_)/incl=$(GLOBJ)/obj=$(GLOBJ)gp_stdia.$(OBJ) $(GLSRC)gp_stdia.c + +# Preliminary definitions + +openvms : $(GLSRCDIR)openvms.com $(GLSRCDIR)openvms.opt + @$(GLSRCDIR)OPENVMS + +$(GLSRCDIR)openvms.com : $(GLSRCDIR)append_l.com + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB X11 $(X_INCLUDE)" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_LIB ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_DOC ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$USER_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$SYSTEM_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB SYS "DECC$LIBRARY_INCLUDE,SYS$LIBRARY" + +$(GLSRCDIR)openvms.opt : +.ifdef DECWINDOWS1_2 + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.else + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.endif + @$(GLSRCDIR)APPEND_L $@ ""Ident="""""GS $(GS_DOT_VERSION)""""" + +# The platform-specific makefiles must also include rules for creating +# certain dynamically generated files: +# gconfig_.h - this indicates the presence or absence of +# certain system header files that are located in different +# places on different systems. (It could be generated by +# the GNU `configure' program.) +# gconfigv.h - this indicates the status of certain machine- +# and configuration-specific features derived from definitions +# in the platform-specific makefile. + +$(gconfig__h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfig__h) -x 23 define "HAVE_SYS_TIME_H" + +$(gconfigv_h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfigv_h) -x 23 define "USE_ASM" 0 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "USE_FPU" 1 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "EXTEND_NAMES" 0$(EXTEND_NAMES) + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "SYSTEM_CONSTANTS_ARE_WRITABLE" 0$(SYSTEM_CONSTANTS_ARE_WRITABLE) diff --git a/samples/Module Management System/simh_descrip.mms b/samples/Module Management System/simh_descrip.mms new file mode 100755 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/simh_descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/spline_descrip.mms b/samples/Module Management System/spline_descrip.mms new file mode 100644 index 00000000..2f81cdb0 --- /dev/null +++ b/samples/Module Management System/spline_descrip.mms @@ -0,0 +1,31 @@ +! +! $Id: descrip.mms 35 2008-01-08 21:37:42Z tmr $ +! +! Project: LISP -- The LISP Interpreter +! Created: 22-DEC-2008 18:35 +! Author: tmr + +cc = cc +cflags = /define="_VMS_=1" - +/WARN=DISABLE=(ZERODIV,FLOATOVERFL,NOMAINUFLO) - +/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE +core = LISP_CORE +main = LISP_MAIN +exec = [.bin]LISP +clib = SYS$LIBRARY:VAXCRTL +head = LISP_CORE +objs = $(core).obj, $(main).obj + +$(exec) : $(objs) + DEFINE/NOLOG LNK$LIBRARY $(clib) + LINK/EXEC=$(exec) $(objs) + DEASSIGN LNK$LIBRARY + +$(core).obj : $(core).c, $(head).h + +$(main).obj : $(main).c, $(head).h + +clean : + del *.obj;* + del *.exe;* + diff --git a/samples/Module Management System/xv_makefile.mms b/samples/Module Management System/xv_makefile.mms new file mode 100644 index 00000000..b419dd80 --- /dev/null +++ b/samples/Module Management System/xv_makefile.mms @@ -0,0 +1,271 @@ +# MMS Description file for xv +# Written by Rick Dyson (dyson@iowasp.physics.uiowa.edu) +# Last Modified: 30-APR-1992 for v2.21 +# 5-OCT-1992 for v2.21 (export.lcs.mit.edu version +# of xv-2.21 seemed to change about +# 25-Sep-1992 without version number +# changing. +# 8-FEB-1993 for v2.21b +# ALPHA support is in ALPHA.MMS +# 2-MAR-1993 for v3.00 +# 15-APR-1993 for v3.00 (DEC C changes) +# 25-MAY-1993 merged ALPHA.MMS and MAKEFILE.MMS +# 27-APR-1994 for v3.01 +# 23-DEC-1994 for v3.10 +# +# Modeled after the original Unix Makefile for xv +# Most of the Unix comments have been left intact to help debug any +# problems. + + +# BE SURE TO SET THIS TO YOUR SITE'S DESTINATION DIRECTORY...!!! +BINDIR = Sys$Disk:[] + +# your C compiler (and options) of choice +# Remember: if you change the C compiler (to gcc, or whatever), be sure to +# do the same thing to the Makefile in the 'jpeg' and 'tiff' subdirectories +# +# For ALPHA/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("ALPHA=1") +# +# For VAX/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("DECC=1") +# +# Users still using the non-MOTIF DECWindows (i.e., XUI) should also +# add another macro of "DEC_XUI=1" + +CC = cc + + +################ CONFIGURATION OPTIONS ################# + +# if, for whatever reason, you're unable to get the JPEG library to compile +# on your machine, *COMMENT OUT* the following lines. +# +# Also, comment out the JPEGLIB dependancy below. +# +# VMS MMS USERS!!! +# +# if you don't use the JPEG package as supplied with XV, you +# will need fill in the complete directory specifications for JPEGDIR. +# +JPEG = ,HAVE_JPEG +JPEGDIR = [.JPEG] +JPEGLIB = $(JPEGDIR)LIBJPEG.OLB +JPEGINCLUDE = ,$(JPEGDIR) + + +# if, for whatever reason, you're unable to get the TIFF library to compile +# on your machine, *COMMENT OUT* the following lines +# +# Also, comment out the LIBTIFF dependancy at the end of this Makefile +# +# if you don't use the TIFF package as supplied with XV, you +# will need to fill in the complete directory specifications for TIFFDIR. +# +TIFF = ,HAVE_TIFF +TIFFDIR = [.TIFF] +TIFFLIB = $(TIFFDIR)LIBTIFF.OLB +TIFFINCLUDE = ,$(TIFFDIR) + + +# if, for whatever reason, you're unable to get the PDS/VICAR support +# to compile (xvpds.c, and vdcomp.c), *COMMENT OUT* the following line, +# and also remove 'vdcomp' from the 'all:' dependancy +PDS = ,HAVE_PDS + + +# If you are still using the DECWindows XUI interface, uncomment the +# next line. This will help stop the "window creep" problem with this +# window mananager +.ifdef DEC_XUI +XUI = ,HAVE_XUI +.endif + +DEFS = /Define = (VMS$(JPEG)$(PDS)$(TIFF)$(TIMERS)$(XUI)) +INCS = /Include = ([]$(JPEGINCLUDE)$(TIFFINCLUDE)) + +.ifdef ALPHA +OPTIMIZE = /Optimize /Standard = VAXC +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +.ifdef DECC +OPTIMIZE = /Optimize /Standard = VAXC /Warnings = NoInformationals +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +OPTIMIZE = /Optimize +OPTS = Sys$Disk:[]VAXC_OPTIONS.OPT +.endif +.endif +DEBUG = /NoDebug + +CFLAGS = $(CFLAGS) $(DEFS) $(INCS) $(DEBUG) $(OPTIMIZE) +LINKFLAGS = $(LINKFLAGS) $(DEBUG) + +XVLIB = LIBXV.OLB + +OBJS = xv.obj,xvevent.obj,xvroot.obj,xvmisc.obj,xvimage.obj,xvcolor.obj, \ + xvsmooth.obj,xv24to8.obj,xvgif.obj,xvpm.obj,xvinfo.obj,xvctrl.obj, \ + xvscrl.obj,xvalg.obj,xvgifwr.obj,xvdir.obj,xvbutt.obj,xvpbm.obj, \ + xvxbm.obj,xvgam.obj,xvbmp.obj,xvdial.obj,xvgraf.obj,xvsunras.obj, \ + xvjpeg.obj,xvps.obj,xvpopup.obj,xvdflt.obj,xvtiff.obj,xvtiffwr.obj, \ + xvpds.obj,xvrle.obj,xviris.obj,xvgrab.obj,xvbrowse.obj,xviff.obj, \ + xvtext.obj,xvpcx.obj,xvtarga.obj,xvxpm.obj,xvcut.obj,xvxwd.obj, \ + xvfits.obj,vms.obj + + +BITS = [.Bits]annot.h + +MISC = readme. changelog. ideas. + +.first +.ifdef ALPHA + @- Define /NoLog Sys DECC$Library_Include +.else +.ifdef DECC + @- Define /NoLog Sys DECC$Library_Include +.else + @- Define /NoLog Sys Sys$Library +.endif + @- Define /NoLog X11 DECW$Include + @- XVDIR = F$Environment ("Default") +.endif + +all : $(BITS) $(OPTS) lib xv bggen decompress xcmap xvpictoppm help + ! All Finished with the VMS build of XV (v3.10) + +lib : $(JPEGLIB) $(TIFFLIB) $(XVLIB) + @ Continue + +xv : xv.exe + @ Continue + +bggen : bggen.exe + @ Continue + +xcmap : xcmap.exe + @ Continue + +xvpictoppm : xvpictoppm.exe + @ Continue + +help : xv.hlb + @ Continue + +decompress : decompress.exe vdcomp.exe + @ Continue + +bggen.exe : bggen.obj $(XVLIB) $(OPTS) + $(LINK) $(LINKFLAGS) bggen.obj,$(XVLIB)/Library,$(OPTS)/Option + +xcmap.exe : xcmap.obj + $(LINK) $(LINKFLAGS) xcmap.obj,$(XVLIB)/Library,$(OPTS)/Option + +xvpictoppm.exe : xvpictoppm.obj + $(LINK) $(LINKFLAGS) xvpictoppm.obj,$(XVLIB)/Library,$(OPTS)/Option + +xv.exe : xv.obj $(XVLIB) $(JPEGLIB) $(TIFFLIB) $(OPTS) + $(LINK) $(LINKFLAGS) xv.obj,$(XVLIB)/Library,$(JPEGLIB)/Library,$(TIFFLIB)/Library,$(OPTS)/Option + +$(JPEGLIB) : + Set Default $(JPEGDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBJPEG.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBJPEG.OLB +.endif + Set Default 'XVDIR' + +$(TIFFLIB) : + Set Default $(TIFFDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else +.ifdef DECC + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBTIFF.OLB +.endif +.endif + Set Default 'XVDIR' + +$(XVLIB) : $(OBJS) + If "''F$Search ("$(XVLIB)")'" .eqs. "" Then Library /Create $(XVLIB) + Library /Replace $(XVLIB) $(OBJS) + +decompress.exe : decompress.obj + $(LINK) $(LINKFLAGS) decompress.obj,$(OPTS)/Option + +vdcomp.exe : vdcomp.obj + $(LINK) $(LINKFLAGS) vdcomp.obj,$(OPTS)/Option + +[.Bits]annot.h : + Set Default [.Bits] + Set Protection = Owner:RWED *. + Rename *. *.H + Set Protection = Owner:RWE *.H + Set Default [-] + +# various dependencies +$(OBJS) : xv.h config.h +xv.hlb : xv.hlp +vms.obj : includes.h dirent.h + +# +# Build the linker options file for OpenVMS VAX and VAX C. +# +Sys$Disk:[]VAXC_Options.opt : + @ Open /Write TMP VAXC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS VAX C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.OLB /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.OLB /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.OLB /Library" +.ifdef DEC_XUI + @ Write TMP "!" + @ Write TMP "! These were appropriate for VAX C and XUI in the past." + @ Write TMP "Sys$Library:DECW$DWTLibShr.exe /Share + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share + @ Write TMP "!You may need the next line for VAX C (v3.2-044)" + @ Write TMP "!But you don't for DEC C (v4.0-000)" + @ Write TMP "Sys$Library:VAXCRTL.EXE /Share" +.else + @ Write TMP "!" + @ Write TMP "! Some of the following libraries may not be available on" + @ Write TMP "! older systems, namely XUI or Motif v1.0/1.1" + @ Write TMP "! I know they are available for OpenVMS v6.1/Motif v1.2." + @ Write TMP "! If you get a report that they can't be found," + @ Write TMP "! comment them out and try again..." + @ Write TMP "Sys$Library:DECW$DXMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XTLibShrR5.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share +.endif + @ Close TMP + +Sys$Disk:[]DECC_Options.opt : + @ Open /Write TMP DECC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS DEC C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.olb /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.olb /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.olb /Library" + @ Write TMP "Sys$Library:DECW$XTShr.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share" + @ Close TMP + +install : xv.exe vdcomp.exe bggen.exe decompress.exe + Copy *.exe $(BINDIR) + +clean : + @- Set Protection = Owner:RWED *.obj,*.*;-1 + - Delete /NoConfirm /NoLog *.obj;*,*.exe;*,*.log;*,*.olb;*,*.hlb;* + - Purge /NoConfirm /NoLog + Set Default [.JPEG] + $(MMS) /Description = MAKEFILE.MMS clean + - Delete /NoConfirm /NoLog *.olb;* + Set Default [-.TIFF] + $(MMS) /Description = MAKEFILE.MMS clean + Set Default [-] diff --git a/samples/NetLinx+ERB/sample.axi.erb b/samples/NetLinx+ERB/sample.axi.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axi.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx+ERB/sample.axs.erb b/samples/NetLinx+ERB/sample.axs.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axs.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/projector.axi b/samples/NetLinx/projector.axi new file mode 100644 index 00000000..f4b53e20 --- /dev/null +++ b/samples/NetLinx/projector.axi @@ -0,0 +1,132 @@ +(*********************************************************** + Mock Projector + + For testing syntax highlighting +************************************************************) + +#if_not_defined MOCK_PROJECTOR +#define MOCK_PROJECTOR 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvPROJECTOR = 5001:1:0; + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Power States +POWER_STATE_ON = 0; +POWER_STATE_OFF = 1; +POWER_STATE_WARMING = 2; +POWER_STATE_COOLING = 3; + +// Inputs +INPUT_HDMI = 0; +INPUT_VGA = 1; +INPUT_COMPOSITE = 2; +INPUT_SVIDEO = 3; + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +#include 'amx-lib-log' + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +struct projector_t +{ + integer power_state; + integer input; + integer lamp_hours; +} + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +volatile projector_t proj_1; + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +define_function initialize(projector_t self) +{ + self.power_state = POWER_STATE_OFF; + self.input = INPUT_HDMI; + self.lamp_hours = 0; +} + +define_function switch_input(projector_t self, integer input) +{ + self.input = input; + print(LOG_LEVEL_INFO, "'Projector set to input: ', itoa(input)"); +} + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +initialize(proj_1); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +data_event[dvPROJECTOR] +{ + string: + { + parse_message(data.text); + } + + command: {} + online: {} + offline: {} +} + +button_event[dvTP, BTN_HDMI] +button_event[dvTP, BTN_VGA] +button_event[dvTP, BTN_COMPOSITE] +button_event[dvTP, BTN_SVIDEO] +{ + push: + { + switch (button.input.channel) + { + case BTN_HDMI: switch_input(proj_1, INPUT_HDMI); + case BTN_VGA: switch_input(proj_1, INPUT_VGA); + case BTN_COMPOSITE: switch_input(proj_1, INPUT_COMPOSITE); + case BTN_SVIDEO: switch_input(proj_1, INPUT_SVIDEO); + } + } + + release: {} +} + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +[dvTP, BTN_POWER_ON] = (proj_1.power_state == POWER_STATE_ON); +[dvTP, BTN_POWER_OFF] = (proj_1.power_state == POWER_STATE_OFF); + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/volume-array.axs b/samples/NetLinx/volume-array.axs new file mode 100644 index 00000000..902b86ac --- /dev/null +++ b/samples/NetLinx/volume-array.axs @@ -0,0 +1,158 @@ +(*********************************************************** + AMX VOLUME CONTROL + VOLUME ARRAY EXAMPLE + + Website: https://sourceforge.net/projects/amx-lib-volume/ + + + This application demonstrates the use of volume control + arrays using the amx-lib-volume library. + + Volume control operation can be viewed by watching the + master's internal diagnostic output. + + I/O PORT CONNECTIONS: + Ch 1: Volume Up Button + Ch 2: Volume Down Button +************************************************************ +Copyright 2011, 2012, 2014 Alex McLain + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +************************************************************) + +PROGRAM_NAME='volume array' +(***********************************************************) +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* REV HISTORY: *) +(***********************************************************) +(* + $History: See version control repository. +*) +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +// Include the volume control library. +#include 'amx-lib-volume' + +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvDebug = 0:0:0; // For debug output. + +dvIO = 36000:1:0; // Volume up/down button connections. + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Volume control indexes. +MIC1 = 1; // Microphone 1. +MIC2 = 2; // Microphone 2. +MIC3 = 3; // Microphone 3. +MIC4 = 4; // Microphone 4. +WLS1 = 5; // Wireless mic 1. +WLS2 = 6; // Wireless mic 2. +IPOD = 7; // iPod input. +CD = 8; // CD player input. + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +// Define a volume control array for the input devices. +volume inputs[8]; + +(***********************************************************) +(* LATCHING DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_LATCHING + +(***********************************************************) +(* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_MUTUALLY_EXCLUSIVE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) +(* EXAMPLE: DEFINE_FUNCTION () *) +(* EXAMPLE: DEFINE_CALL '' () *) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +// Initialize the array of volume controls. +volArrayInit(inputs, 0, VOL_UNMUTED, 10000, 20000, 5); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Volume Up +button_event[dvIO, 1] +{ + PUSH: + { + volArrayIncrement(inputs); // Increment the volume up a step. + send_string dvDebug, "'Volume Up MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Up MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Up MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Up MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Up WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Up WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Up IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Up CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +// Volume Down +button_event[dvIO, 2] +{ + PUSH: + { + volArrayDecrement(inputs); // Decrement the volume down a step. + send_string dvDebug, "'Volume Dn MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Dn MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Dn MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Dn MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Dn WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Dn WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Dn IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Dn CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +(***********************************************************) +(* THE ACTUAL PROGRAM GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) diff --git a/samples/Nu/nu.script! b/samples/Nu/nu similarity index 100% rename from samples/Nu/nu.script! rename to samples/Nu/nu diff --git a/samples/OCaml/cmdliner.ml b/samples/OCaml/cmdliner.ml new file mode 100644 index 00000000..71e49e85 --- /dev/null +++ b/samples/OCaml/cmdliner.ml @@ -0,0 +1,1344 @@ +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli. All rights reserved. + Distributed under a BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +(* Invalid_arg strings *) + +let err_argv = "argv array must have at least one element" +let err_not_opt = "Option argument without name" +let err_not_pos = "Positional argument with a name" +let err_help s = "term error, help requested for unknown command " ^ s +let err_empty_list = "empty list" + +(* A few useful definitions. *) + +let rev_compare n n' = compare n' n +let str = Printf.sprintf +let pr = Format.fprintf +let pr_str = Format.pp_print_string +let pr_char = Format.pp_print_char +let str_of_pp pp v = pp Format.str_formatter v; Format.flush_str_formatter () +let quote s = str "`%s'" s +let alts_str ?(quoted = true) alts = + let quote = if quoted then quote else (fun s -> s) in + match alts with + | [] -> invalid_arg err_empty_list + | [a] -> (quote a) + | [a; b] -> str "either %s or %s" (quote a) (quote b) + | alts -> + let rev_alts = List.rev alts in + str "one of %s or %s" + (String.concat ", " (List.rev_map quote (List.tl rev_alts))) + (quote (List.hd rev_alts)) + +let pr_white_str spaces ppf s = (* spaces and new lines with Format's funs *) + let left = ref 0 and right = ref 0 and len = String.length s in + let flush () = + Format.pp_print_string ppf (String.sub s !left (!right - !left)); + incr right; left := !right; + in + while (!right <> len) do + if s.[!right] = '\n' then (flush (); Format.pp_force_newline ppf ()) else + if spaces && s.[!right] = ' ' then (flush (); Format.pp_print_space ppf ()) + else incr right; + done; + if !left <> len then flush () + +let pr_text = pr_white_str true +let pr_lines = pr_white_str false +let pr_to_temp_file pr v = try + let exec = Filename.basename Sys.argv.(0) in + let file, oc = Filename.open_temp_file exec "out" in + let ppf = Format.formatter_of_out_channel oc in + pr ppf v; Format.pp_print_flush ppf (); close_out oc; + at_exit (fun () -> try Sys.remove file with Sys_error e -> ()); + Some file +with Sys_error _ -> None + +(* Levenshtein distance, for making spelling suggestions in case of error. *) + +let levenshtein_distance s t = + (* As found here http://rosettacode.org/wiki/Levenshtein_distance#OCaml *) + let minimum a b c = min a (min b c) in + let m = String.length s in + let n = String.length t in + (* for all i and j, d.(i).(j) will hold the Levenshtein distance between + the first i characters of s and the first j characters of t *) + let d = Array.make_matrix (m+1) (n+1) 0 in + for i = 0 to m do d.(i).(0) <- i done; + for j = 0 to n do d.(0).(j) <- j done; + for j = 1 to n do + for i = 1 to m do + if s.[i-1] = t.[j-1] then + d.(i).(j) <- d.(i-1).(j-1) (* no operation required *) + else + d.(i).(j) <- minimum + (d.(i-1).(j) + 1) (* a deletion *) + (d.(i).(j-1) + 1) (* an insertion *) + (d.(i-1).(j-1) + 1) (* a substitution *) + done; + done; + d.(m).(n) + +let suggest s candidates = + let add (min, acc) name = + let d = levenshtein_distance s name in + if d = min then min, (name :: acc) else + if d < min then d, [name] else + min, acc + in + let dist, suggs = List.fold_left add (max_int, []) candidates in + if dist < 3 (* suggest only if not too far *) then suggs else [] + +(* Tries. This implementation also maps any non ambiguous prefix of a + key to its value. *) + +module Trie : sig + type 'a t + val empty : 'a t + val is_empty : 'a t -> bool + val add : 'a t -> string -> 'a -> 'a t + val find : 'a t -> string -> [ `Ok of 'a | `Ambiguous | `Not_found ] + val ambiguities : 'a t -> string -> string list + val of_list : (string * 'a) list -> 'a t +end = struct + module Cmap = Map.Make (Char) (* character maps. *) + type 'a value = (* type for holding a bound value. *) + | Pre of 'a (* value is bound by the prefix of a key. *) + | Key of 'a (* value is bound by an entire key. *) + | Amb (* no value bound because of ambiguous prefix. *) + | Nil (* not bound (only for the empty trie). *) + + type 'a t = { v : 'a value; succs : 'a t Cmap.t } + let empty = { v = Nil; succs = Cmap.empty } + let is_empty t = t = empty + + (* N.B. If we replace a non-ambiguous key, it becomes ambiguous but it's + not important for our use. Also the following is not tail recursive but + the stack is bounded by key length. *) + let add t k d = + let rec aux t k len i d pre_d = + if i = len then { v = Key d; succs = t.succs } else + let v = match t.v with + | Amb | Pre _ -> Amb | Key _ as v -> v | Nil -> pre_d + in + let succs = + let t' = try Cmap.find k.[i] t.succs with Not_found -> empty in + Cmap.add k.[i] (aux t' k len (i + 1) d pre_d) t.succs + in + { v; succs } + in + aux t k (String.length k) 0 d (Pre d (* allocate less *)) + + let find_node t k = + let rec aux t k len i = + if i = len then t else + aux (Cmap.find k.[i] t.succs) k len (i + 1) + in + aux t k (String.length k) 0 + + let find t k = + try match (find_node t k).v with + | Key v | Pre v -> `Ok v | Amb -> `Ambiguous | Nil -> `Not_found + with Not_found -> `Not_found + + let ambiguities t p = (* ambiguities of [p] in [t]. *) + try + let t = find_node t p in + match t.v with + | Key _ | Pre _ | Nil -> [] + | Amb -> + let add_char s c = s ^ (String.make 1 c) in + let rem_char s = String.sub s 0 ((String.length s) - 1) in + let to_list m = Cmap.fold (fun k t acc -> (k,t) :: acc) m [] in + let rec aux acc p = function + | ((c, t) :: succs) :: rest -> + let p' = add_char p c in + let acc' = match t.v with + | Pre _ | Amb -> acc + | Key _ -> (p' :: acc) + | Nil -> assert false + in + aux acc' p' ((to_list t.succs) :: succs :: rest) + | [] :: [] -> acc + | [] :: rest -> aux acc (rem_char p) rest + | [] -> assert false + in + aux [] p (to_list t.succs :: []) + with Not_found -> [] + + let of_list l = List.fold_left (fun t (s, v) -> add t s v) empty l +end + +(* The following types keep untyped information about arguments and + terms. This data is used to parse the command line, report errors + and format man page information. *) + +type absence = (* what happens if the argument is absent from the cl. *) + | Error (* an error is reported. *) + | Val of string Lazy.t (* if <> "", takes the given default value. *) + +type opt_kind = (* kinds of optional arguments. *) + | Flag (* just a flag, without value. *) + | Opt (* value is required. *) + | Opt_vopt of string (* option value is optional, takes given default. *) + +type pos_kind = (* kinds of positional arguments. *) + | All (* all positional arguments. *) + | Nth of bool * int (* specific position. *) + | Left of bool * int (* all args on the left of a position. *) + | Right of bool * int (* all args on the right of a position. *) + +type arg_info = (* information about a command line argument. *) + { id : int; (* unique id for the argument. *) + absent : absence; (* behaviour if absent. *) + doc : string; (* help. *) + docv : string; (* variable name for the argument in help. *) + docs : string; (* title of help section where listed. *) + p_kind : pos_kind; (* positional arg kind. *) + o_kind : opt_kind; (* optional arg kind. *) + o_names : string list; (* names (for opt args). *) + o_all : bool; } (* repeatable (for opt args). *) + +let arg_id = (* thread-safe UIDs, Oo.id (object end) was used before. *) + let c = ref 0 in + fun () -> + let id = !c in + incr c; if id > !c then assert false (* too many ids *) else id + +let is_opt a = a.o_names <> [] +let is_pos a = a.o_names = [] + +module Amap = Map.Make (* arg info maps. *) + (struct type t = arg_info let compare a a' = compare a.id a'.id end) + +type arg = (* unconverted argument data as found on the command line. *) + | O of (int * string * (string option)) list (* (pos, name, value) of opt. *) + | P of string list + +type cmdline = arg Amap.t (* command line, maps arg_infos to arg value. *) + +type man_block = [ (* block of manpage text. *) + | `S of string | `P of string | `I of string * string | `Noblank ] + +type term_info = + { name : string; (* name of the term. *) + version : string option; (* version (for --version). *) + tdoc : string; (* one line description of term. *) + tdocs : string; (* title of man section where listed (commands). *) + sdocs : string; (* standard options, title of section where listed. *) + man : man_block list; } (* man page text. *) + +type eval_info = (* information about the evaluation context. *) + { term : term_info * arg_info list; (* term being evaluated. *) + main : term_info * arg_info list; (* main term. *) + choices : (term_info * arg_info list) list} (* all term choices. *) + +let eval_kind ei = (* evaluation with multiple terms ? *) + if ei.choices = [] then `Simple else + if (fst ei.term) == (fst ei.main) then `M_main else `M_choice + +module Manpage = struct + type title = string * int * string * string * string + type block = man_block + type t = title * block list + + let p_indent = 7 (* paragraph indentation. *) + let l_indent = 4 (* label indentation. *) + let escape subst esc buf s = + let subst s = + let len = String.length s in + if not (len > 1 && s.[1] = ',') then (subst s) else + if len = 2 then "" else + esc s.[0] (String.sub s 2 (len - 2)) + in + Buffer.clear buf; Buffer.add_substitute buf subst s; + let s = Buffer.contents buf in (* twice for $(i,$(mname)). *) + Buffer.clear buf; Buffer.add_substitute buf subst s; + Buffer.contents buf + + let pr_tokens ?(groff = false) ppf s = + let is_space = function ' ' | '\n' | '\r' | '\t' -> true | _ -> false in + let len = String.length s in + let i = ref 0 in + try while (true) do + while (!i < len && is_space s.[!i]) do incr i done; + let start = !i in + if start = len then raise Exit; + while (!i < len && not (is_space s.[!i]) && not (s.[!i] = '-')) do + incr i + done; + pr_str ppf (String.sub s start (!i - start)); + if !i = len then raise Exit; + if s.[!i] = '-' then + (incr i; if groff then pr_str ppf "\\-" else pr_char ppf '-'); + if (!i < len && is_space s.[!i]) then + (if groff then pr_char ppf ' ' else Format.pp_print_space ppf ()) + done with Exit -> () + + (* Plain text output *) + + let plain_esc c s = match c with 'g' -> "" (* groff specific *) | _ -> s + let pr_indent ppf c = for i = 1 to c do pr_char ppf ' ' done + let pr_plain_blocks subst ppf ts = + let buf = Buffer.create 1024 in + let escape t = escape subst plain_esc buf t in + let pr_tokens ppf t = pr_tokens ppf (escape t) in + let rec aux = function + | [] -> () + | t :: ts -> + begin match t with + | `Noblank -> () + | `P s -> pr ppf "%a@[%a@]@," pr_indent p_indent pr_tokens s + | `S s -> pr ppf "@[%a@]" pr_tokens s + | `I (label, s) -> + let label = escape label in + let ll = String.length label in + pr ppf "@[%a@[%a@]" pr_indent p_indent pr_tokens label; + if s = "" then () else + if ll < l_indent then + pr ppf "%a@[%a@]@]@," pr_indent (l_indent - ll) pr_tokens s + else + pr ppf "@\n%a@[%a@]@]@," + pr_indent (p_indent + l_indent) pr_tokens s + end; + begin match ts with + | `Noblank :: ts -> aux ts + | ts -> Format.pp_print_cut ppf (); aux ts + end + in + aux ts + + let pr_plain_page subst ppf (_, text) = + pr ppf "@[%a@]" (pr_plain_blocks subst) text + + (* Groff output *) + + let groff_esc c s = match c with + | 'i' -> (str "\\fI%s\\fR" s) + | 'b' -> (str "\\fB%s\\fR" s) + | 'p' -> "" (* plain text specific *) + | _ -> s + + let pr_groff_blocks subst ppf text = + let buf = Buffer.create 1024 in + let escape t = escape subst groff_esc buf t in + let pr_tokens ppf t = pr_tokens ~groff:true ppf (escape t) in + let pr_block = function + | `P s -> pr ppf "@\n.P@\n%a" pr_tokens s + | `S s -> pr ppf "@\n.SH %a" pr_tokens s + | `Noblank -> pr ppf "@\n.sp -1" + | `I (l, s) -> pr ppf "@\n.TP 4@\n%a@\n%a" pr_tokens l pr_tokens s + in + List.iter pr_block text + + let pr_groff_page subst ppf ((n, s, a1, a2, a3), t) = + pr ppf ".\\\" Pipe this output to groff -man -Tutf8 | less@\n\ + .\\\"@\n\ + .TH \"%s\" %d \"%s\" \"%s\" \"%s\"@\n\ + .\\\" Disable hyphenantion and ragged-right@\n\ + .nh@\n\ + .ad l\ + %a@?" + n s a1 a2 a3 (pr_groff_blocks subst) t + + (* Printing to a pager *) + + let find_cmd cmds = + let test, null = match Sys.os_type with + | "Win32" -> "where", " NUL" + | _ -> "type", "/dev/null" + in + let cmd c = Sys.command (str "%s %s 1>%s 2>%s" test c null null) = 0 in + try Some (List.find cmd cmds) with Not_found -> None + + let pr_to_pager print ppf v = + let pager = + let cmds = ["less"; "more"] in + let cmds = try (Sys.getenv "PAGER") :: cmds with Not_found -> cmds in + let cmds = try (Sys.getenv "MANPAGER") :: cmds with Not_found -> cmds in + find_cmd cmds + in + match pager with + | None -> print `Plain ppf v + | Some pager -> + let cmd = match (find_cmd ["groff"; "nroff"]) with + | None -> + begin match pr_to_temp_file (print `Plain) v with + | None -> None + | Some f -> Some (str "%s < %s" pager f) + end + | Some c -> + begin match pr_to_temp_file (print `Groff) v with + | None -> None + | Some f -> + (* TODO use -Tutf8, but annoyingly maps U+002D to U+2212. *) + let xroff = if c = "groff" then c ^ " -Tascii -P-c" else c in + Some (str "%s -man < %s | %s" xroff f pager) + end + in + match cmd with + | None -> print `Plain ppf v + | Some cmd -> if (Sys.command cmd) <> 0 then print `Plain ppf v + + let rec print ?(subst = fun x -> x) fmt ppf page = match fmt with + | `Pager -> pr_to_pager (print ~subst) ppf page + | `Plain -> pr_plain_page subst ppf page + | `Groff -> pr_groff_page subst ppf page +end + +module Help = struct + let invocation ?(sep = ' ') ei = match eval_kind ei with + | `Simple | `M_main -> (fst ei.main).name + | `M_choice -> str "%s%c%s" (fst ei.main).name sep (fst ei.term).name + + let title ei = + let prog = String.capitalize (fst ei.main).name in + let name = String.uppercase (invocation ~sep:'-' ei) in + let left_footer = prog ^ match (fst ei.main).version with + | None -> "" | Some v -> str " %s" v + in + let center_header = str "%s Manual" prog in + name, 1, "", left_footer, center_header + + let name_section ei = + let tdoc d = if d = "" then "" else (str " - %s" d) in + [`S "NAME"; `P (str "%s%s" (invocation ~sep:'-' ei) + (tdoc (fst ei.term).tdoc)); ] + + let synopsis ei = match eval_kind ei with + | `M_main -> str "$(b,%s) $(i,COMMAND) ..." (invocation ei) + | `Simple | `M_choice -> + let rev_cmp (p, _) (p', _) = match p', p with (* best effort. *) + | p, All -> -1 | All, p -> 1 + | Left _, Right _ -> -1 | Right _, Left _ -> 1 + | Left (false, k), Nth (false, k') + | Nth (false, k), Nth (false, k') + | Nth (false, k), Right (false, k') -> if k <= k' then -1 else 1 + | Nth (false, k), Left (false, k') + | Right (false, k), Nth (false, k') -> if k >= k' then 1 else -1 + | Left (true, k), Nth (true, k') + | Nth (true, k), Nth (true, k') + | Nth (true, k), Right (true, k') -> if k >= k' then -1 else 1 + | Nth (true, k), Left (true, k') + | Right (true, k), Nth (true, k') -> if k <= k' then 1 else -1 + | p, p' -> compare p p' + in + let rec format_pos acc = function + | a :: al -> + if is_opt a then format_pos acc al else + let v = if a.docv = "" then "$(i,ARG)" else str "$(i,%s)" a.docv in + let v = if a.absent = Error then str "%s" v else str "[%s]" v in + let v = v ^ match a.p_kind with Nth _ -> "" | _ -> "..." in + format_pos ((a.p_kind, v) :: acc) al + | [] -> acc + in + let args = List.sort rev_cmp (format_pos [] (snd ei.term)) in + let args = String.concat " " (List.rev_map snd args) in + str "$(b,%s) [$(i,OPTION)]... %s" (invocation ei) args + + let get_synopsis_section ei = + let rec extract_synopsis syn = function + | `S _ :: _ as man -> List.rev syn, man + | block :: rest -> extract_synopsis (block :: syn) rest + | [] -> List.rev syn, [] + in + match (fst ei.term).man with + | `S "SYNOPSIS" as s :: rest -> extract_synopsis [s] rest (* user-defined *) + | man -> [ `S "SYNOPSIS"; `P (synopsis ei); ], man (* automatic *) + + let make_arg_label a = + if is_pos a then str "$(i,%s)" a.docv else + let fmt_name var = match a.o_kind with + | Flag -> fun n -> str "$(b,%s)" n + | Opt -> + fun n -> + if String.length n > 2 then str "$(b,%s)=$(i,%s)" n var else + str "$(b,%s) $(i,%s)" n var + | Opt_vopt _ -> + fun n -> + if String.length n > 2 then str "$(b,%s)[=$(i,%s)]" n var else + str "$(b,%s) [$(i,%s)]" n var + in + let var = if a.docv = "" then "VAL" else a.docv in + let names = List.sort compare a.o_names in + let s = String.concat ", " (List.rev_map (fmt_name var) names) in + s + + let make_arg_items ei = + let buf = Buffer.create 200 in + let subst_docv docv d = + let subst = function "docv" -> str "$(i,%s)" docv | s -> str "$(%s)" s in + Buffer.clear buf; Buffer.add_substitute buf subst d; Buffer.contents buf + in + let rev_cmp a' a = + let c = compare a.docs a'.docs in + if c <> 0 then c else + match is_opt a, is_opt a' with + | true, true -> + let key names = + let k = String.lowercase (List.hd (List.sort rev_compare names)) in + if k.[1] = '-' then String.sub k 1 (String.length k - 1) else k + in + compare (key a.o_names) (key a'.o_names) + | false, false -> + compare (String.lowercase a.docv) (String.lowercase a'.docv) + | true, false -> -1 + | false, true -> 1 + in + let format a = + let absent = match a.absent with + | Error -> "" + | Val v -> match Lazy.force v with "" -> "" | v -> str "absent=%s" v + in + let optvopt = match a.o_kind with + | Opt_vopt v -> str "default=%s" v + | _ -> "" + in + let argvdoc = match absent, optvopt with + | "", "" -> "" + | s, "" | "", s -> str " (%s)" s + | s, s' -> str " (%s, %s)" s s' + in + (a.docs, `I (make_arg_label a ^ argvdoc, (subst_docv a.docv a.doc))) + in + let is_arg_item a = not (is_pos a && (a.docv = "" || a.doc = "")) in + let l = List.sort rev_cmp (List.filter is_arg_item (snd ei.term)) in + List.rev_map format l + + let make_cmd_items ei = match eval_kind ei with + | `Simple | `M_choice -> [] + | `M_main -> + let add_cmd acc (ti, _) = + (ti.tdocs, `I ((str "$(b,%s)" ti.name), ti.tdoc)) :: acc + in + List.sort rev_compare (List.fold_left add_cmd [] ei.choices) + + let text ei = (* man that code is particulary unreadable. *) + let rec merge_items acc to_insert mark il = function + | `S s as sec :: ts -> + let acc = List.rev_append to_insert acc in + let acc = if mark then sec :: `Orphan_mark :: acc else sec :: acc in + let to_insert, il = List.partition (fun (n, _) -> n = s) il in + let to_insert = List.rev_map (fun (_, i) -> i) to_insert in + let to_insert = (to_insert :> [ `Orphan_mark | Manpage.block] list) in + merge_items acc to_insert (s = "DESCRIPTION") il ts + | t :: ts -> + let t = (t :> [`Orphan_mark | Manpage.block]) in + merge_items (t :: acc) to_insert mark il ts + | [] -> + let acc = List.rev_append to_insert acc in + (if mark then `Orphan_mark :: acc else acc), il + in + let rec merge_orphans acc orphans = function + | `Orphan_mark :: ts -> + let rec merge acc s = function + | [] -> (`S s) :: acc + | (s', i) :: ss -> + let i = (i :> Manpage.block) in + if s = s' then merge (i :: acc) s ss else + merge (i :: (`S s) :: acc) s' ss + in + let acc = match orphans with + | [] -> acc | (s, _) :: _ -> merge acc s orphans + in + merge_orphans acc [] ts + | (#Manpage.block as e) :: ts -> merge_orphans (e :: acc) orphans ts + | [] -> acc + in + let cmds = make_cmd_items ei in + let args = make_arg_items ei in + let cmp (s, _) (s', _) = compare s s' in + let items = List.rev (List.stable_sort cmp (List.rev_append cmds args)) in + let synopsis, man = get_synopsis_section ei in + let rev_text, orphans = + merge_items [`Orphan_mark] [] false items man + in + synopsis @ merge_orphans [] orphans rev_text + + let ei_subst ei = function + | "tname" -> (fst ei.term).name + | "mname" -> (fst ei.main).name + | s -> s + + let man ei = + title ei, (name_section ei) @ (text ei) + + let print fmt ppf ei = Manpage.print ~subst:(ei_subst ei) fmt ppf (man ei) + let pr_synopsis ppf ei = + pr ppf "@[%s@]" + (Manpage.escape (ei_subst ei) + Manpage.plain_esc (Buffer.create 100) (synopsis ei)) + + let pr_version ppf ei = match (fst ei.main).version with + | None -> assert false + | Some v -> pr ppf "@[%a@]@." pr_text v +end + +(* Errors for the command line user *) + +module Err = struct + let invalid kind s exp = str "invalid %s %s, %s" kind (quote s) exp + let invalid_val = invalid "value" + let no kind s = str "no %s %s" (quote s) kind + let not_dir s = str "%s is not a directory" (quote s) + let is_dir s = str "%s is a directory" (quote s) + let element kind s exp = str "invalid element in %s (`%s'): %s" kind s exp + let sep_miss sep s = invalid_val s (str "missing a `%c' separator" sep) + let unknown kind ?(hints = []) v = + let did_you_mean s = str ", did you mean %s ?" s in + let hints = match hints with [] -> "." | hs -> did_you_mean (alts_str hs) in + str "unknown %s %s%s" kind (quote v) hints + + let ambiguous kind s ambs = + str "%s %s ambiguous and could be %s" kind (quote s) (alts_str ambs) + + let pos_excess excess = + str "too many arguments, don't know what to do with %s" + (String.concat ", " (List.map quote excess)) + + let flag_value f v = + str "option %s is a flag, it cannot take the argument %s" + (quote f) (quote v) + + let opt_value_missing f = str "option %s needs an argument" (quote f) + let opt_parse_value f e = str "option %s: %s" (quote f) e + let opt_repeated f f' = + if f = f' then str "option %s cannot be repeated" (quote f) else + str "options %s and %s cannot be present at the same time" (quote f) + (quote f') + + let pos_parse_value a e = + if a.docv = "" then e else match a.p_kind with + | Nth _ -> str "%s argument: %s" a.docv e + | _ -> str "%s... arguments: %s" a.docv e + + let arg_missing a = + if is_opt a then + let rec long_name = function + | n :: l -> if (String.length n) > 2 || l = [] then n else long_name l + | [] -> assert false + in + str "required option %s is missing" (long_name a.o_names) + else + if a.docv = "" then str "a required argument is missing" else + str "required argument %s is missing" a.docv + + (* Error printers *) + + let print ppf ei e = pr ppf "%s: @[%a@]@." (fst ei.main).name pr_text e + let pr_backtrace err ei e bt = + let bt = + let len = String.length bt in + if len > 0 then String.sub bt 0 (len - 1) (* remove final '\n' *) else bt + in + pr err + "%s: @[internal error, uncaught exception:@\n%a@]@." + (fst ei.main).name pr_lines (str "%s\n%s" (Printexc.to_string e) bt) + + let pr_try_help ppf ei = + let exec = Help.invocation ei in + let main = (fst ei.main).name in + if exec = main then + pr ppf "@[<2>Try `%s --help' for more information.@]" exec + else + pr ppf "@[<2>Try `%s --help' or `%s --help' for more information.@]" + exec main + + let pr_usage ppf ei e = + pr ppf "@[%s: @[%a@]@,@[Usage: @[%a@]@]@,%a@]@." + (fst ei.main).name pr_text e Help.pr_synopsis ei pr_try_help ei +end + +(* Command lines. A command line stores pre-parsed information about + the command line's arguments in a more structured way. Given the + [arg_info] values mentionned in a term and Sys.argv (whithout exec + name) we parse the command line into a map of [arg_info] values to + [arg] values. This map is used by the term's closures to retrieve + and convert command line arguments (see the Arg module). *) + +module Cmdline :sig + exception Error of string + val choose_term : term_info -> (term_info * 'a) list -> string list -> + term_info * string list + val create : ?peek_opts:bool -> arg_info list -> string list -> cmdline + val opt_arg : cmdline -> arg_info -> (int * string * (string option)) list + val pos_arg : cmdline -> arg_info -> string list +end = struct + exception Error of string + + let opt_arg cl a = match try Amap.find a cl with Not_found -> assert false + with O l -> l | _ -> assert false + + let pos_arg cl a = match try Amap.find a cl with Not_found -> assert false + with P l -> l | _ -> assert false + + let choose_term ti choices = function + | [] -> ti, [] + | maybe :: args' as args -> + if String.length maybe > 1 && maybe.[0] = '-' then ti, args else + let index = + let add acc (choice, _) = Trie.add acc choice.name choice in + List.fold_left add Trie.empty choices + in + match Trie.find index maybe with + | `Ok choice -> choice, args' + | `Not_found -> + let all = Trie.ambiguities index "" in + let hints = suggest maybe all in + raise (Error (Err.unknown "command" ~hints maybe)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities index maybe) in + raise (Error (Err.ambiguous "command" maybe ambs)) + + let arg_info_indexes al = + (* from [al] returns a trie mapping the names of optional arguments to + their arg_info, a list with all arg_info for positional arguments and + a cmdline mapping each arg_info to an empty [arg]. *) + let rec aux opti posi cl = function + | a :: l -> + if is_pos a then aux opti (a :: posi) (Amap.add a (P []) cl) l else + let add t name = Trie.add t name a in + aux (List.fold_left add opti a.o_names) posi (Amap.add a (O []) cl) l + | [] -> opti, posi, cl + in + aux Trie.empty [] Amap.empty al + + let parse_opt_arg s = (* (name,value) of opt arg, assert len > 1. *) + let l = String.length s in + if s.[1] <> '-' then + if l = 2 then s, None else + String.sub s 0 2, Some (String.sub s 2 (l - 2)) + else try + let i = String.index s '=' in + String.sub s 0 i, Some (String.sub s (i + 1) (l - i - 1)) + with Not_found -> s, None + + let parse_args ~peek_opts opti cl args = + (* returns an updated [cl] cmdline according to the options found in [args] + with the trie index [opti]. Positional arguments are returned in order + in a list. *) + let rec aux k opti cl pargs = function + | [] -> cl, (List.rev pargs) + | "--" :: args -> cl, (List.rev_append pargs args) + | s :: args -> + let is_opt s = String.length s > 1 && s.[0] = '-' in + let is_short_opt s = String.length s = 2 && s.[0] = '-' in + if not (is_opt s) then aux (k+1) opti cl (s :: pargs) args else + let name, value = parse_opt_arg s in + match Trie.find opti name with + | `Ok a -> + let value, args = match value, a.o_kind with + | Some v, Flag when is_short_opt name -> None, ("-" ^ v) :: args + | Some v, _ -> value, args + | None, Flag -> value, args + | None, _ -> + match args with + | v :: rest -> if is_opt v then None, args else Some v, rest + | [] -> None, args + in + let arg = O ((k, name, value) :: opt_arg cl a) in + aux (k+1) opti (Amap.add a arg cl) pargs args + | `Not_found when peek_opts -> aux (k+1) opti cl pargs args (* skip *) + | `Not_found -> + let hints = + if String.length s <= 2 then [] else + let short_opt, long_opt = + if s.[1] <> '-' + then s, Printf.sprintf "-%s" s + else String.sub s 1 (String.length s - 1), s + in + let short_opt, _ = parse_opt_arg short_opt in + let long_opt, _ = parse_opt_arg long_opt in + let all = Trie.ambiguities opti "-" in + match List.mem short_opt all, suggest long_opt all with + | false, [] -> [] + | false, l -> l + | true, [] -> [short_opt] + | true, l -> if List.mem short_opt l then l else short_opt :: l + in + raise (Error (Err.unknown "option" ~hints name)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities opti name) in + raise (Error (Err.ambiguous "option" name ambs)) + in + aux 0 opti cl [] args + + let process_pos_args posi cl pargs = + (* returns an updated [cl] cmdline in which each positional arg mentionned + in the list index posi, is given a value according the list + of positional arguments values [pargs]. *) + if pargs = [] then cl else + let rec take n acc l = + if n = 0 then List.rev acc else + take (n - 1) (List.hd l :: acc) (List.tl l) + in + let rec aux pargs last cl max_spec = function + | a :: al -> + let arg, max_spec = match a.p_kind with + | All -> P pargs, last + | Nth (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k < 0 || k > last then P [], max_spec else + P ([List.nth pargs k]), max_spec + | Left (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k <= 0 || k > last then P [], max_spec else + P (take k [] pargs), max_spec + | Right (rev, k) -> + let k = if rev then last - k else k in + if k < 0 || k >= last then P [], last else + P (List.rev (take (last - k) [] (List.rev pargs))), last + in + aux pargs last (Amap.add a arg cl) max_spec al + | [] -> cl, max_spec + in + let last = List.length pargs - 1 in + let cl, max_spec = aux pargs last cl (-1) posi in + if last <= max_spec then cl else + let excess = List.rev (take (last - max_spec) [] (List.rev pargs)) in + raise (Error (Err.pos_excess excess)) + + let create ?(peek_opts = false) al args = + let opti, posi, cl = arg_info_indexes al in + let cl, pargs = parse_args ~peek_opts opti cl args in + if peek_opts then cl (* skip positional arguments *) else + process_pos_args posi cl pargs +end + +module Arg = struct + type 'a parser = string -> [ `Ok of 'a | `Error of string ] + type 'a printer = Format.formatter -> 'a -> unit + type 'a converter = 'a parser * 'a printer + type 'a arg_converter = (eval_info -> cmdline -> 'a) + type 'a t = arg_info list * 'a arg_converter + type info = arg_info + + let ( & ) f x = f x + let parse_error e = raise (Cmdline.Error e) + let some ?(none = "") (parse, print) = + (fun s -> match parse s with `Ok v -> `Ok (Some v) | `Error _ as e -> e), + (fun ppf v -> match v with None -> pr_str ppf none| Some v -> print ppf v) + + let info ?docs ?(docv = "") ?(doc = "") names = + let dash n = if String.length n = 1 then "-" ^ n else "--" ^ n in + let docs = match docs with + | None -> if names = [] then "ARGUMENTS" else "OPTIONS" + | Some s -> s + in + { id = arg_id (); absent = Val (Lazy.from_val ""); + doc = doc; docv = docv; docs = docs; + p_kind = All; o_kind = Flag; o_names = List.rev_map dash names; + o_all = false; } + + let flag a = + if is_pos a then invalid_arg err_not_opt else + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> false + | [_, _, None] -> true + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_ ,g, _) :: _ -> parse_error (Err.opt_repeated f g) + in + [a], convert + + let flag_all a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with o_all = true } in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> [] + | l -> + let truth (_, f, v) = match v with + | None -> true | Some v -> parse_error (Err.flag_value f v) + in + List.rev_map truth l + in + [a], convert + + let vflag v l = + let convert _ cl = + let rec aux fv = function + | (v, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux fv rest + | [_, f, None] -> + begin match fv with + | None -> aux (Some (f, v)) rest + | Some (g, _) -> parse_error (Err.opt_repeated g f) + end + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + end + | [] -> match fv with None -> v | Some (_, v) -> v + in + aux None l + in + let flag (_, a) = if is_pos a then invalid_arg err_not_opt else a in + List.rev_map flag l, convert + + let vflag_all v l = + let convert _ cl = + let rec aux acc = function + | (fv, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux acc rest + | l -> + let fval (k, f, v) = match v with + | None -> (k, fv) | Some v -> parse_error (Err.flag_value f v) + in + aux (List.rev_append (List.rev_map fval l) acc) rest + end + | [] -> + if acc = [] then v else List.rev_map snd (List.sort rev_compare acc) + in + aux [] l + in + let flag (_, a) = + if is_pos a then invalid_arg err_not_opt else { a with o_all = true } + in + List.rev_map flag l, convert + + let parse_opt_value parse f v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.opt_parse_value f e) + + let opt ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (lazy (str_of_pp print v)); + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | [_, f, Some v] -> parse_opt_value parse f v + | [_, f, None] -> + begin match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some optv -> optv + end + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + in + [a], convert + + let opt_all ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (Lazy.from_val ""); o_all = true; + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | l -> + let parse (k, f, v) = match v with + | Some v -> (k, parse_opt_value parse f v) + | None -> match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some dv -> (k, dv) + in + List.rev_map snd (List.sort rev_compare (List.rev_map parse l)) + in + [a], convert + + (* Positional arguments *) + + let parse_pos_value parse a v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.pos_parse_value a e) + + let pos ?(rev = false) k (parse, print) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = Nth (rev, k); + absent = Val (Lazy.from_val (str_of_pp print v)) } + in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | [v] -> parse_pos_value parse a v + | _ -> assert false + in + [a], convert + + let pos_list kind (parse, _) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = kind } in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | l -> List.rev (List.rev_map (parse_pos_value parse a) l) + in + [a], convert + + let pos_all c v a = pos_list All c v a + let pos_left ?(rev = false) k = pos_list (Left (rev, k)) + let pos_right ?(rev = false) k = pos_list (Right (rev, k)) + + (* Arguments as terms *) + + let absent_error al = List.rev_map (fun a -> { a with absent = Error }) al + let value a = a + let required (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | Some v -> v + | None -> parse_error (Err.arg_missing (List.hd al)) + in + al, convert + + let non_empty (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> l + in + al, convert + + let last (al, convert) = + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> List.hd (List.rev l) + in + al, convert + + (* Predefined converters. *) + + let bool = + (fun s -> try `Ok (bool_of_string s) with Invalid_argument _ -> + `Error (Err.invalid_val s (alts_str ["true"; "false"]))), + Format.pp_print_bool + + let char = + (fun s -> if String.length s = 1 then `Ok s.[0] else + `Error (Err.invalid_val s "expected a character")), + pr_char + + let parse_with t_of_str exp s = + try `Ok (t_of_str s) with Failure _ -> `Error (Err.invalid_val s exp) + + let int = + parse_with int_of_string "expected an integer", Format.pp_print_int + + let int32 = + parse_with Int32.of_string "expected a 32-bit integer", + (fun ppf -> pr ppf "%ld") + + let int64 = + parse_with Int64.of_string "expected a 64-bit integer", + (fun ppf -> pr ppf "%Ld") + + let nativeint = + parse_with Nativeint.of_string "expected a processor-native integer", + (fun ppf -> pr ppf "%nd") + + let float = + parse_with float_of_string "expected a floating point number", + Format.pp_print_float + + let string = (fun s -> `Ok s), pr_str + let enum sl = + if sl = [] then invalid_arg err_empty_list else + let sl_inv = List.rev_map (fun (s,v) -> (v,s)) sl in + let print ppf v = pr_str ppf (List.assoc v sl_inv) in + let t = Trie.of_list sl in + let parse s = match Trie.find t s with + | `Ok _ as r -> r + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities t s) in + `Error (Err.ambiguous "enum value" s ambs) + | `Not_found -> + let alts = List.rev (List.rev_map (fun (s, _) -> s) sl) in + `Error (Err.invalid_val s ("expected " ^ (alts_str alts))) + in + parse, print + + let file = + (fun s -> if Sys.file_exists s then `Ok s else + `Error (Err.no "file or directory" s)), + pr_str + + let dir = + (fun s -> + if Sys.file_exists s then + if Sys.is_directory s then `Ok s else `Error (Err.not_dir s) + else + `Error (Err.no "directory" s)), + pr_str + + let non_dir_file = + (fun s -> + if Sys.file_exists s then + if not (Sys.is_directory s) then `Ok s else `Error (Err.is_dir s) + else + `Error (Err.no "file" s)), + pr_str + + let split_and_parse sep parse s = + let parse sub = match parse sub with + | `Error e -> failwith e | `Ok v -> v in + let rec split accum j = + let i = try String.rindex_from s j sep with Not_found -> -1 in + if (i = -1) then + let p = String.sub s 0 (j + 1) in + if p <> "" then parse p :: accum else accum + else + let p = String.sub s (i + 1) (j - i) in + let accum' = if p <> "" then parse p :: accum else accum in + split accum' (i - 1) + in + split [] (String.length s - 1) + + let list ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (split_and_parse sep parse s) with + | Failure e -> `Error (Err.element "list" s e) + in + let rec print ppf = function + | v :: l -> pr_e ppf v; if (l <> []) then (pr_char ppf sep; print ppf l) + | [] -> () + in + parse, print + + let array ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (Array.of_list (split_and_parse sep parse s)) with + | Failure e -> `Error (Err.element "array" s e) + in + let print ppf v = + let max = Array.length v - 1 in + for i = 0 to max do pr_e ppf v.(i); if i <> max then pr_char ppf sep done + in + parse, print + + let split_left sep s = + try + let i = String.index s sep in + let len = String.length s in + Some ((String.sub s 0 i), (String.sub s (i + 1) (len - i - 1))) + with Not_found -> None + + let pair ?(sep = ',') (pa0, pr0) (pa1, pr1) = + let parser s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, v1) -> + match pa0 v0, pa1 v1 with + | `Ok v0, `Ok v1 -> `Ok (v0, v1) + | `Error e, _ | _, `Error e -> `Error (Err.element "pair" s e) + in + let printer ppf (v0, v1) = pr ppf "%a%c%a" pr0 v0 sep pr1 v1 in + parser, printer + + let t2 = pair + let t3 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, v2) -> + match pa0 v0, pa1 v1, pa2 v2 with + | `Ok v0, `Ok v1, `Ok v2 -> `Ok (v0, v1, v2) + | `Error e, _, _ | _, `Error e, _ | _, _, `Error e -> + `Error (Err.element "triple" s e) + in + let print ppf (v0, v1, v2) = + pr ppf "%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 + in + parse, print + + let t4 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) (pa3, pr3) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some(v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v2, v3) -> + match pa0 v0, pa1 v1, pa2 v2, pa3 v3 with + | `Ok v1, `Ok v2, `Ok v3, `Ok v4 -> `Ok (v1, v2, v3, v4) + | `Error e, _, _, _ | _, `Error e, _, _ | _, _, `Error e, _ + | _, _, _, `Error e -> `Error (Err.element "quadruple" s e) + in + let print ppf (v0, v1, v2, v3) = + pr ppf "%a%c%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 sep pr3 v3 + in + parse, print + + (* Documentation formatting helpers *) + + let doc_quote = quote + let doc_alts = alts_str + let doc_alts_enum ?quoted enum = alts_str ?quoted (List.map fst enum) +end + +module Term = struct + type info = term_info + type +'a t = arg_info list * (eval_info -> cmdline -> 'a) + type 'a result = [ + | `Ok of 'a | `Error of [`Parse | `Term | `Exn ] | `Version | `Help ] + + exception Term of + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of bool * string ] + + let info ?(sdocs = "OPTIONS") ?(man = []) ?(docs = "COMMANDS") ?(doc = "") + ?version name = + { name = name; version = version; tdoc = doc; tdocs = docs; sdocs = sdocs; + man = man } + + let name ti = ti.name + let pure v = [], (fun _ _ -> v) + let app (al, f) (al', v) = + List.rev_append al al', + fun ei cl -> (f ei cl) (v ei cl) + + let ( $ ) = app + + type 'a ret = + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of (bool * string) + | `Ok of 'a ] + + let ret (al, v) = + al, fun ei cl -> match v ei cl with + | `Ok v -> v + | `Error (u,e) -> raise (Term (`Error (u,e))) + | `Help h -> raise (Term (`Help h)) + + let main_name = [], (fun ei _ -> (fst ei.main).name) + let choice_names = + [], fun ei _ -> List.rev_map (fun e -> (fst e).name) ei.choices + + let man_format = + let fmts = ["pager", `Pager; "groff", `Groff; "plain", `Plain] in + let doc = "Show output in format $(docv) (pager, plain or groff)."in + Arg.(value & opt (enum fmts) `Pager & info ["man-format"] ~docv:"FMT" ~doc) + + (* Evaluation *) + + let remove_exec argv = + try List.tl (Array.to_list argv) with Failure _ -> invalid_arg err_argv + + let add_std_opts ei = + let docs = (fst ei.term).sdocs in + let args, v_lookup = + if (fst ei.main).version = None then [], None else + let (a, lookup) = + Arg.flag (Arg.info ["version"] ~docs ~doc:"Show version information.") + in + a, Some lookup + in + let args, h_lookup = + let (a, lookup) = + let fmt = Arg.enum ["pager",`Pager; "groff",`Groff; "plain",`Plain] in + let doc = "Show this help in format $(docv) (pager, plain or groff)."in + let a = Arg.info ["help"] ~docv:"FMT" ~docs ~doc in + Arg.opt ~vopt:(Some `Pager) (Arg.some fmt) None a + in + List.rev_append a args, lookup + in + h_lookup, v_lookup, + { ei with term = (fst ei.term), List.rev_append args (snd ei.term) } + + let eval_term help err ei f args = + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> Help.print fmt help ei; `Help + | None, Some v_arg when v_arg ei cl -> Help.pr_version help ei; `Version + | _ -> `Ok (f ei cl) + with + | Cmdline.Error e -> Err.pr_usage err ei e; `Error `Parse + | Term (`Error (usage, e)) -> + if usage then Err.pr_usage err ei e else Err.print err ei e; + `Error `Term + | Term (`Help (fmt, cmd)) -> + let ei = match cmd with + | Some cmd -> + let cmd = + try List.find (fun (i, _) -> i.name = cmd) ei.choices + with Not_found -> invalid_arg (err_help cmd) + in + {ei with term = cmd } + | None -> { ei with term = ei.main } + in + let _, _, ei = add_std_opts ei in + Help.print fmt help ei; `Help + + let eval ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) ((al, f), ti) = + let term = ti, al in + let ei = { term = term; main = term; choices = [] } in + try eval_term help err ei f (remove_exec argv) with + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_choice ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) (((al, f) as t), ti) choices = + let ei_choices = List.rev_map (fun ((al, _), ti) -> ti, al) choices in + let main = (ti, al) in + let ei = { term = main; main = main; choices = ei_choices } in + try + let chosen, args = Cmdline.choose_term ti ei_choices (remove_exec argv) in + let find_chosen (_, ti) = ti = chosen in + let (al, f), _ = List.find find_chosen ((t, ti) :: choices) in + let ei = { ei with term = (chosen, al) } in + eval_term help err ei f args + with + | Cmdline.Error e -> (* may be raised by choose_term. *) + Err.pr_usage err ei e; `Error `Parse + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_peek_opts ?(version_opt = false) ?(argv = Sys.argv) (al, f) = + let args = remove_exec argv in + let version = if version_opt then Some "dummy" else None in + let term = info ?version "dummy", al in + let ei = { term = term; main = term; choices = [] } in + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create ~peek_opts:true (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> + (try (Some (f ei cl), `Help) with e -> None, `Help) + | None, Some v_arg when v_arg ei cl -> + (try (Some (f ei cl), `Version) with e -> None, `Version) + | _ -> + let v = f ei cl in + Some v, `Ok v + with + | Cmdline.Error _ -> None, (`Error `Parse) + | Term _ -> None, (`Error `Term) + | e -> None, (`Error `Exn) +end + +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/OCaml/common.ml b/samples/OCaml/common.ml new file mode 100644 index 00000000..8f3a9260 --- /dev/null +++ b/samples/OCaml/common.ml @@ -0,0 +1,14 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +let string_of format v = + let buf = Buffer.create 100 in + let fmt = Format.formatter_of_buffer buf in begin + format fmt v; + Format.pp_print_flush fmt (); + Buffer.contents buf + end diff --git a/samples/OCaml/date.ml b/samples/OCaml/date.ml new file mode 100644 index 00000000..70f46d3c --- /dev/null +++ b/samples/OCaml/date.ml @@ -0,0 +1,40 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open Ctypes +open PosixTypes +open Foreign + +type tm +let tm = structure "tm" +let (-:) ty label = field tm label ty +let tm_sec = int -: "tm_sec" (* seconds *) +let tm_min = int -: "tm_min" (* minutes *) +let tm_hour = int -: "tm_hour" (* hours *) +let tm_mday = int -: "tm_mday" (* day of the month *) +let tm_mon = int -: "tm_mon" (* month *) +let tm_year = int -: "tm_year" (* year *) +let tm_wday = int -: "tm_wday" (* day of the week *) +let tm_yday = int -: "tm_yday" (* day in the year *) +let tm_isdst = int -: "tm_isdst" (* daylight saving time *) +let () = seal (tm : tm structure typ) + +let time = foreign "time" ~check_errno:true (ptr time_t @-> returning time_t) + +let asctime = foreign "asctime" (ptr tm @-> returning string) + +let localtime = foreign "localtime" (ptr time_t @-> returning (ptr tm)) + +let () = begin + let timep = allocate_n ~count:1 time_t in + let time = time timep in + assert (time = !@timep); + let tm = localtime timep in + Printf.printf "tm.tm_mon = %d\n" (getf !@tm tm_mon); + Printf.printf "tm.tm_year = %d\n" (getf !@tm tm_year); + print_endline (asctime tm) +end diff --git a/samples/OCaml/map.ml b/samples/OCaml/map.ml new file mode 100644 index 00000000..7d65bc6b --- /dev/null +++ b/samples/OCaml/map.ml @@ -0,0 +1,337 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the GNU Library General Public License, with *) +(* the special exception on linking described in file ../LICENSE. *) +(* *) +(***********************************************************************) + +module type OrderedType = + sig + type t + val compare: t -> t -> int + end + +module type S = + sig + type key + type +'a t + val empty: 'a t + val is_empty: 'a t -> bool + val mem: key -> 'a t -> bool + val add: key -> 'a -> 'a t -> 'a t + val singleton: key -> 'a -> 'a t + val remove: key -> 'a t -> 'a t + val merge: + (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t + val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int + val equal: ('a -> 'a -> bool) -> 'a t -> 'a t -> bool + val iter: (key -> 'a -> unit) -> 'a t -> unit + val fold: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b + val for_all: (key -> 'a -> bool) -> 'a t -> bool + val exists: (key -> 'a -> bool) -> 'a t -> bool + val filter: (key -> 'a -> bool) -> 'a t -> 'a t + val partition: (key -> 'a -> bool) -> 'a t -> 'a t * 'a t + val cardinal: 'a t -> int + val bindings: 'a t -> (key * 'a) list + val min_binding: 'a t -> (key * 'a) + val max_binding: 'a t -> (key * 'a) + val choose: 'a t -> (key * 'a) + val split: key -> 'a t -> 'a t * 'a option * 'a t + val find: key -> 'a t -> 'a + val map: ('a -> 'b) -> 'a t -> 'b t + val mapi: (key -> 'a -> 'b) -> 'a t -> 'b t + end + +module Make(Ord: OrderedType) = struct + + type key = Ord.t + + type 'a t = + Empty + | Node of 'a t * key * 'a * 'a t * int + + let height = function + Empty -> 0 + | Node(_,_,_,_,h) -> h + + let create l x d r = + let hl = height l and hr = height r in + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let singleton x d = Node(Empty, x, d, Empty, 1) + + let bal l x d r = + let hl = match l with Empty -> 0 | Node(_,_,_,_,h) -> h in + let hr = match r with Empty -> 0 | Node(_,_,_,_,h) -> h in + if hl > hr + 2 then begin + match l with + Empty -> invalid_arg "Map.bal" + | Node(ll, lv, ld, lr, _) -> + if height ll >= height lr then + create ll lv ld (create lr x d r) + else begin + match lr with + Empty -> invalid_arg "Map.bal" + | Node(lrl, lrv, lrd, lrr, _)-> + create (create ll lv ld lrl) lrv lrd (create lrr x d r) + end + end else if hr > hl + 2 then begin + match r with + Empty -> invalid_arg "Map.bal" + | Node(rl, rv, rd, rr, _) -> + if height rr >= height rl then + create (create l x d rl) rv rd rr + else begin + match rl with + Empty -> invalid_arg "Map.bal" + | Node(rll, rlv, rld, rlr, _) -> + create (create l x d rll) rlv rld (create rlr rv rd rr) + end + end else + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let empty = Empty + + let is_empty = function Empty -> true | _ -> false + + let rec add x data = function + Empty -> + Node(Empty, x, data, Empty, 1) + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + Node(l, x, data, r, h) + else if c < 0 then + bal (add x data l) v d r + else + bal l v d (add x data r) + + let rec find x = function + Empty -> + raise Not_found + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then d + else find x (if c < 0 then l else r) + + let rec mem x = function + Empty -> + false + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + c = 0 || mem x (if c < 0 then l else r) + + let rec min_binding = function + Empty -> raise Not_found + | Node(Empty, x, d, r, _) -> (x, d) + | Node(l, x, d, r, _) -> min_binding l + + let rec max_binding = function + Empty -> raise Not_found + | Node(l, x, d, Empty, _) -> (x, d) + | Node(l, x, d, r, _) -> max_binding r + + let rec remove_min_binding = function + Empty -> invalid_arg "Map.remove_min_elt" + | Node(Empty, x, d, r, _) -> r + | Node(l, x, d, r, _) -> bal (remove_min_binding l) x d r + + let merge t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + bal t1 x d (remove_min_binding t2) + + let rec remove x = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + merge l r + else if c < 0 then + bal (remove x l) v d r + else + bal l v d (remove x r) + + let rec iter f = function + Empty -> () + | Node(l, v, d, r, _) -> + iter f l; f v d; iter f r + + let rec map f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = map f l in + let d' = f d in + let r' = map f r in + Node(l', v, d', r', h) + + let rec mapi f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = mapi f l in + let d' = f v d in + let r' = mapi f r in + Node(l', v, d', r', h) + + let rec fold f m accu = + match m with + Empty -> accu + | Node(l, v, d, r, _) -> + fold f r (f v d (fold f l accu)) + + let rec for_all p = function + Empty -> true + | Node(l, v, d, r, _) -> p v d && for_all p l && for_all p r + + let rec exists p = function + Empty -> false + | Node(l, v, d, r, _) -> p v d || exists p l || exists p r + + (* Beware: those two functions assume that the added k is *strictly* + smaller (or bigger) than all the present keys in the tree; it + does not test for equality with the current min (or max) key. + + Indeed, they are only used during the "join" operation which + respects this precondition. + *) + + let rec add_min_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal (add_min_binding k v l) x d r + + let rec add_max_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal l x d (add_max_binding k v r) + + (* Same as create and bal, but no assumptions are made on the + relative heights of l and r. *) + + let rec join l v d r = + match (l, r) with + (Empty, _) -> add_min_binding v d r + | (_, Empty) -> add_max_binding v d l + | (Node(ll, lv, ld, lr, lh), Node(rl, rv, rd, rr, rh)) -> + if lh > rh + 2 then bal ll lv ld (join lr v d r) else + if rh > lh + 2 then bal (join l v d rl) rv rd rr else + create l v d r + + (* Merge two trees l and r into one. + All elements of l must precede the elements of r. + No assumption on the heights of l and r. *) + + let concat t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + join t1 x d (remove_min_binding t2) + + let concat_or_join t1 v d t2 = + match d with + | Some d -> join t1 v d t2 + | None -> concat t1 t2 + + let rec split x = function + Empty -> + (Empty, None, Empty) + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then (l, Some d, r) + else if c < 0 then + let (ll, pres, rl) = split x l in (ll, pres, join rl v d r) + else + let (lr, pres, rr) = split x r in (join l v d lr, pres, rr) + + let rec merge f s1 s2 = + match (s1, s2) with + (Empty, Empty) -> Empty + | (Node (l1, v1, d1, r1, h1), _) when h1 >= height s2 -> + let (l2, d2, r2) = split v1 s2 in + concat_or_join (merge f l1 l2) v1 (f v1 (Some d1) d2) (merge f r1 r2) + | (_, Node (l2, v2, d2, r2, h2)) -> + let (l1, d1, r1) = split v2 s1 in + concat_or_join (merge f l1 l2) v2 (f v2 d1 (Some d2)) (merge f r1 r2) + | _ -> + assert false + + let rec filter p = function + Empty -> Empty + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let l' = filter p l in + let pvd = p v d in + let r' = filter p r in + if pvd then join l' v d r' else concat l' r' + + let rec partition p = function + Empty -> (Empty, Empty) + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let (lt, lf) = partition p l in + let pvd = p v d in + let (rt, rf) = partition p r in + if pvd + then (join lt v d rt, concat lf rf) + else (concat lt rt, join lf v d rf) + + type 'a enumeration = End | More of key * 'a * 'a t * 'a enumeration + + let rec cons_enum m e = + match m with + Empty -> e + | Node(l, v, d, r, _) -> cons_enum l (More(v, d, r, e)) + + let compare cmp m1 m2 = + let rec compare_aux e1 e2 = + match (e1, e2) with + (End, End) -> 0 + | (End, _) -> -1 + | (_, End) -> 1 + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + let c = Ord.compare v1 v2 in + if c <> 0 then c else + let c = cmp d1 d2 in + if c <> 0 then c else + compare_aux (cons_enum r1 e1) (cons_enum r2 e2) + in compare_aux (cons_enum m1 End) (cons_enum m2 End) + + let equal cmp m1 m2 = + let rec equal_aux e1 e2 = + match (e1, e2) with + (End, End) -> true + | (End, _) -> false + | (_, End) -> false + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + Ord.compare v1 v2 = 0 && cmp d1 d2 && + equal_aux (cons_enum r1 e1) (cons_enum r2 e2) + in equal_aux (cons_enum m1 End) (cons_enum m2 End) + + let rec cardinal = function + Empty -> 0 + | Node(l, _, _, r, _) -> cardinal l + 1 + cardinal r + + let rec bindings_aux accu = function + Empty -> accu + | Node(l, v, d, r, _) -> bindings_aux ((v, d) :: bindings_aux accu r) l + + let bindings s = + bindings_aux [] s + + let choose = min_binding + +end diff --git a/samples/OCaml/mirage.ml b/samples/OCaml/mirage.ml new file mode 100644 index 00000000..4878abed --- /dev/null +++ b/samples/OCaml/mirage.ml @@ -0,0 +1,2503 @@ +(* + * Copyright (c) 2013 Thomas Gazagnaire + * Copyright (c) 2013 Anil Madhavapeddy + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + *) + +open Mirage_misc + +module StringSet = struct + + include Set.Make(String) + + let of_list l = + let s = ref empty in + List.iter (fun e -> s := add e !s) l; + !s + +end + +let main_ml = ref None + +let append_main fmt = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> append oc fmt + +let newline_main () = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> newline oc + +let set_main_ml file = + let oc = open_out file in + main_ml := Some oc + +type mode = [ + | `Unix + | `Xen + | `MacOSX +] + +let string_of_mode = + function + | `Unix -> "Unix" + | `Xen -> "Xen" + | `MacOSX -> "MacOS X" + +let mode : mode ref = ref `Unix + +let set_mode m = + mode := m + +let get_mode () = + !mode + +type _ typ = + | Type: 'a -> 'a typ + | Function: 'a typ * 'b typ -> ('a -> 'b) typ + +let (@->) f t = + Function (f, t) + +module type CONFIGURABLE = sig + type t + val name: t -> string + val module_name: t -> string + val packages: t -> string list + val libraries: t -> string list + val configure: t -> unit + val clean: t -> unit + val update_path: t -> string -> t +end + + +module TODO (N: sig val name: string end) = struct + + let todo str = + failwith (Printf.sprintf "TODO: %s.%s" N.name str) + + let name _ = + todo "name" + + let module_name _ = + todo "module_name" + + let packages _ = + todo "packages" + + let libraries _ = + todo "libraries" + + let configure _ = + todo "configure" + + let clean _ = + todo "clean" + + let update_path _ = + todo "update_path" + +end + +type ('a, 'b) base = { + typ: 'a typ; + t: 'b; + m: (module CONFIGURABLE with type t = 'b); +} + +type 'a foreign = { + name: string; + ty: 'a typ; + libraries: string list; + packages: string list; +} + +type _ impl = + | Impl: ('a, 'b) base -> 'a impl (* base implementation *) + | App: ('a, 'b) app -> 'b impl (* functor application *) + | Foreign: 'a foreign -> 'a impl (* foreign functor implementation *) + +and ('a, 'b) app = { + f: ('a -> 'b) impl; (* functor *) + x: 'a impl; (* parameter *) +} + +let rec string_of_impl: type a. a impl -> string = function + | Impl { t; m = (module M) } -> Printf.sprintf "Impl (%s)" (M.module_name t) + | Foreign { name } -> Printf.sprintf "Foreign (%s)" name + | App { f; x } -> Printf.sprintf "App (%s, %s)" (string_of_impl f) (string_of_impl x) + +type 'a folder = { + fn: 'b. 'a -> 'b impl -> 'a +} + +let rec fold: type a. 'b folder -> a impl -> 'b -> 'b = + fun fn t acc -> + match t with + | Impl _ + | Foreign _ -> fn.fn acc t + | App {f; x} -> fold fn f (fn.fn acc x) + +type iterator = { + i: 'b. 'b impl -> unit +} + +let rec iter: type a. iterator -> a impl -> unit = + fun fn t -> + match t with + | Impl _ + | Foreign _ -> fn.i t + | App {f; x} -> iter fn f; iter fn x; fn.i x + +let driver_initialisation_error name = + Printf.sprintf "fail (Failure %S)" name + +module Name = struct + + let ids = Hashtbl.create 1024 + + let names = Hashtbl.create 1024 + + let create name = + let n = + try 1 + Hashtbl.find ids name + with Not_found -> 1 in + Hashtbl.replace ids name n; + Printf.sprintf "%s%d" name n + + let of_key key ~base = + find_or_create names key (fun () -> create base) + +end + +module Impl = struct + + (* get the left-most module name (ie. the name of the functor). *) + let rec functor_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f } -> functor_name f + + (* return a unique variable name holding the state of the given + module construction. *) + let rec name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.name t + | Foreign { name } -> Name.of_key ("f" ^ name) ~base:"f" + | App _ as t -> Name.of_key (module_name t) ~base:"t" + + (* return a unique module name holding the implementation of the + given module construction. *) + and module_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f; x } -> + let name = match module_names f @ [module_name x] with + | [] -> assert false + | [m] -> m + | h::t -> h ^ String.concat "" (List.map (Printf.sprintf "(%s)") t) + in + Name.of_key name ~base:"M" + + and module_names: type a. a impl -> string list = + function t -> + let fn = { + fn = fun acc t -> module_name t :: acc + } in + fold fn t [] + + let rec names: type a. a impl -> string list = function + | Foreign _ -> [] + | Impl _ as t -> [name t] + | App {f=Foreign f; x} -> names x + | App {f; x} -> (names f) @ [name x] + + let configured = Hashtbl.create 31 + + let rec configure: type a. a impl -> unit = + fun t -> + let name = name t in + if not (Hashtbl.mem configured name) then ( + Hashtbl.add configured name true; + match t with + | Impl { t; m = (module M) } -> M.configure t + | Foreign _ -> () + | App {f; x} as app -> + configure_app f; + configure_app x; + iter { i=configure } app; + let name = module_name app in + let body = cofind Name.names name in + append_main "module %s = %s" name body; + newline_main (); + ) + + and configure_app: type a. a impl -> unit = function + | Impl _ + | Foreign _ -> () + | App _ as t -> + let name = name t in + configure t; + begin match names t with + | [n] -> append_main "let %s = %s" name n + | names -> + append_main "let %s () =" name; + List.iter (fun n -> + append_main " %s () >>= function" n; + append_main " | `Error e -> %s" (driver_initialisation_error n); + append_main " | `Ok %s ->" n; + ) names; + append_main " return (`Ok (%s))" (String.concat ", " names) + end; + newline_main () + + let rec packages: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.packages t + | Foreign { packages } -> packages + | App {f; x} -> packages f @ packages x + + let rec libraries: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.libraries t + | Foreign { libraries } -> libraries + | App {f; x} -> libraries f @ libraries x + + let rec clean: type a. a impl -> unit = function + | Impl { t; m = (module M) } -> M.clean t + | Foreign _ -> () + | App {f; x} -> clean f; clean x + + let rec update_path: type a. a impl -> string -> a impl = + fun t root -> match t with + | Impl b -> + let module M = (val b.m) in Impl { b with t = M.update_path b.t root } + | Foreign _ -> t + | App {f; x} -> App { f = update_path f root; x = update_path x root } + +end + +let impl typ t m = + Impl { typ; t; m } + +let implementation typ t m = + let typ = Type typ in + Impl { typ; t; m } + +let ($) f x = + App { f; x } + +let foreign name ?(libraries=[]) ?(packages=[]) ty = + Foreign { name; ty; libraries; packages } + +let rec typ: type a. a impl -> a typ = function + | Impl { typ } -> typ + | Foreign { ty } -> ty + | App { f } -> match typ f with Function (_, b) -> b | _ -> assert false + + +module Io_page = struct + + (** Memory allocation interface. *) + + type t = unit + + let name () = + "io_page" + + let module_name () = + "Io_page" + + let packages () = [ + "io-page" + ] + + let libraries () = + match !mode with + | `Xen -> ["io-page"] + | `Unix | `MacOSX -> ["io-page"; "io-page.unix"] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type io_page = IO_PAGE + +let io_page = Type IO_PAGE + +let default_io_page: io_page impl = + impl io_page () (module Io_page) + +module Time = struct + + (** OS Timer. *) + + type t = unit + + let name () = + "time" + + let module_name () = + "OS.Time" + + let packages () = [] + + let libraries () = [] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type time = TIME + +let time = Type TIME + +let default_time: time impl = + impl time () (module Time) + +module Clock = struct + + (** Clock operations. *) + + type t = unit + + let name () = + "clock" + + let module_name () = + "Clock" + + let packages () = [ + match !mode with + | `Unix | `MacOSX -> "mirage-clock-unix" + | `Xen -> "mirage-clock-xen" + ] + + let libraries () = packages () + + let configure () = + append_main "let clock () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type clock = CLOCK + +let clock = Type CLOCK + +let default_clock: clock impl = + impl clock () (module Clock) + +module Random = struct + + type t = unit + + let name () = + "random" + + let module_name () = + "Random" + + let packages () = [] + + let libraries () = [] + + let configure () = + append_main "let random () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type random = RANDOM + +let random = Type RANDOM + +let default_random: random impl = + impl random () (module Random) + +module Entropy = struct + + type t = unit + + let name _ = + "entropy" + + let module_name () = "Entropy" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Entropy_unix.Make (OS.Time)" + | `Xen -> "Entropy_xen" + + let packages () = + match !mode with + | `Unix | `MacOSX -> [ "mirage-entropy-unix" ] + | `Xen -> [ "mirage-entropy-xen" ] + + let libraries = packages + + let configure t = + append_main "module %s = %s" (module_name t) (construction t) ; + newline_main () ; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean () = () + + let update_path t _ = t + +end + +type entropy = ENTROPY + +let entropy = Type ENTROPY + +let default_entropy: entropy impl = + impl entropy () (module Entropy) + +module Console = struct + + type t = string + + let name t = + Name.of_key ("console" ^ t) ~base:"console" + + let module_name t = + "Console" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Console_unix" + | `Xen -> "Console_xen" + + let packages _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console"; "mirage-unix"] + | `Xen -> ["mirage-console"; "xenstore"; "mirage-xen"; "xen-gnt"; "xen-evtchn"] + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console.unix"] + | `Xen -> ["mirage-console.xen"] + + let configure t = + append_main "module %s = %s" (module_name t) (construction ()); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type console = CONSOLE + +let console = Type CONSOLE + +let default_console: console impl = + impl console "0" (module Console) + +let custom_console: string -> console impl = + fun str -> + impl console str (module Console) + +module Crunch = struct + + type t = string + + let name t = + Name.of_key ("static" ^ t) ~base:"static" + + let module_name t = + String.capitalize (name t) + + let packages _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + "crunch"; + ] @ Io_page.packages () + + let libraries _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + ] @ Io_page.libraries () + + let ml t = + Printf.sprintf "%s.ml" (name t) + + let mli t = + Printf.sprintf "%s.mli" (name t) + + let configure t = + if not (command_exists "ocaml-crunch") then + error "ocaml-crunch not found, stopping."; + let file = ml t in + if Sys.file_exists t then ( + info "%s %s" (blue_s "Generating:") (Sys.getcwd () / file); + command "ocaml-crunch -o %s %s" file t + ) else + error "The directory %s does not exist." t; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean t = + remove (ml t); + remove (mli t) + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type kv_ro = KV_RO + +let kv_ro = Type KV_RO + +let crunch dirname = + impl kv_ro dirname (module Crunch) + +module Direct_kv_ro = struct + + include Crunch + + let module_name t = + match !mode with + | `Xen -> Crunch.module_name t + | `Unix | `MacOSX -> "Kvro_fs_unix" + + let packages t = + match !mode with + | `Xen -> Crunch.packages t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.packages t + + let libraries t = + match !mode with + | `Xen -> Crunch.libraries t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.libraries t + + let configure t = + match !mode with + | `Xen -> Crunch.configure t + | `Unix | `MacOSX -> + append_main "let %s () =" (name t); + append_main " Kvro_fs_unix.connect %S" t + +end + +let direct_kv_ro dirname = + impl kv_ro dirname (module Direct_kv_ro) + +module Block = struct + + type t = string + + let name t = + Name.of_key ("block" ^ t) ~base:"block" + + let module_name _ = + "Block" + + let packages _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen" + ] + + let libraries _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen.front" + ] + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean t = + () + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type block = BLOCK + +let block = Type BLOCK + +let block_of_file filename = + impl block filename (module Block) + +module Fat = struct + + type t = { + io_page: io_page impl; + block : block impl; + } + + let name t = + let key = "fat" ^ Impl.name t.io_page ^ Impl.name t.block in + Name.of_key key ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let packages t = + "fat-filesystem" + :: Impl.packages t.io_page + @ Impl.packages t.block + + let libraries t = + "fat-filesystem" + :: Impl.libraries t.io_page + @ Impl.libraries t.block + + let configure t = + Impl.configure t.io_page; + Impl.configure t.block; + append_main "module %s = Fat.Fs.Make(%s)(%s)" + (module_name t) + (Impl.module_name t.block) + (Impl.module_name t.io_page); + newline_main (); + let name = name t in + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.block); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok dev -> %s.connect dev" (module_name t); + newline_main () + + let clean t = + Impl.clean t.block; + Impl.clean t.io_page + + let update_path t root = + { io_page = Impl.update_path t.io_page root; + block = Impl.update_path t.block root; + } + +end + +type fs = FS + +let fs = Type FS + +let fat ?(io_page=default_io_page) block: fs impl = + let t = { Fat.block; io_page } in + impl fs t (module Fat) + +(* This would deserve to be in its own lib. *) +let kv_ro_of_fs x: kv_ro impl = + let dummy_fat = fat (block_of_file "xx") in + let libraries = Impl.libraries dummy_fat in + let packages = Impl.packages dummy_fat in + let fn = foreign "Fat.KV_RO.Make" ~libraries ~packages (fs @-> kv_ro) in + fn $ x + +module Fat_of_files = struct + + type t = { + dir : string option; + regexp: string; + } + + let name t = + Name.of_key + ("fat" ^ (match t.dir with None -> "." | Some d -> d) ^ ":" ^ t.regexp) + ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let block_file t = + name t ^ ".img" + + let block t = + block_of_file (block_file t) + + let packages t = + Impl.packages (fat (block t)) + + let libraries t = + Impl.libraries (fat (block t)) + + let configure t = + let fat = fat (block t) in + Impl.configure fat; + append_main "module %s = %s" (module_name t) (Impl.module_name fat); + append_main "let %s = %s" (name t) (Impl.name fat); + newline_main (); + let file = Printf.sprintf "make-%s-image.sh" (name t) in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc ""; + append oc "echo This uses the 'fat' command-line tool to build a simple FAT"; + append oc "echo filesystem image."; + append oc ""; + append oc "FAT=$(which fat)"; + append oc "if [ ! -x \"${FAT}\" ]; then"; + append oc " echo I couldn\\'t find the 'fat' command-line tool."; + append oc " echo Try running 'opam install fat-filesystem'"; + append oc " exit 1"; + append oc "fi"; + append oc ""; + append oc "IMG=$(pwd)/%s" (block_file t); + append oc "rm -f ${IMG}"; + (match t.dir with None -> () | Some d -> append oc "cd %s/" d); + append oc "SIZE=$(du -s . | cut -f 1)"; + append oc "${FAT} create ${IMG} ${SIZE}KiB"; + append oc "${FAT} add ${IMG} %s" t.regexp; + append oc "echo Created '%s'" (block_file t); + + close_out oc; + Unix.chmod file 0o755; + command "./make-%s-image.sh" (name t) + + let clean t = + command "rm -f make-%s-image.sh %s" (name t) (block_file t); + Impl.clean (block t) + + let update_path t root = + match t.dir with + | None -> t + | Some d -> { t with dir = Some (root / d) } + +end + +let fat_of_files: ?dir:string -> ?regexp:string -> unit -> fs impl = + fun ?dir ?regexp () -> + let regexp = match regexp with + | None -> "*" + | Some r -> r in + impl fs { Fat_of_files.dir; regexp } (module Fat_of_files) + +type network_config = Tap0 | Custom of string + +module Network = struct + + type t = network_config + + let name t = + "net_" ^ match t with + | Tap0 -> "tap0" + | Custom s -> s + + let module_name _ = + "Netif" + + let packages t = + match !mode with + | `Unix -> ["mirage-net-unix"] + | `MacOSX -> ["mirage-net-macosx"] + | `Xen -> ["mirage-net-xen"] + + let libraries t = + packages t + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" + (module_name t) + (match t with Tap0 -> "tap0" | Custom s -> s); + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type network = NETWORK + +let network = Type NETWORK + +let tap0 = + impl network Tap0 (module Network) + +let netif dev = + impl network (Custom dev) (module Network) + +module Ethif = struct + + type t = network impl + + let name t = + Name.of_key ("ethif" ^ Impl.name t) ~base:"ethif" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ ["tcpip"] + + let libraries t = + Impl.libraries t @ + match !mode with + | `Unix | `MacOSX -> [ "tcpip.ethif-unix" ] + | `Xen -> [ "tcpip.ethif" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Ethif.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth -> %s.connect eth" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type ethernet = ETHERNET + +let ethernet = Type ETHERNET + +let etif network = + impl ethernet network (module Ethif) + +type ('ipaddr, 'prefix) ip_config = { + address: 'ipaddr; + netmask: 'prefix; + gateways: 'ipaddr list; +} + +type ipv4_config = (Ipaddr.V4.t, Ipaddr.V4.t) ip_config + +let meta_ipv4_config t = + Printf.sprintf "(Ipaddr.V4.of_string_exn %S, Ipaddr.V4.of_string_exn %S, [%s])" + (Ipaddr.V4.to_string t.address) + (Ipaddr.V4.to_string t.netmask) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V4.of_string_exn %S") + (List.map Ipaddr.V4.to_string t.gateways))) + +module IPV4 = struct + + type t = { + ethernet: ethernet impl; + config : ipv4_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv4" ^ Impl.name t.ethernet ^ meta_ipv4_config t.config in + Name.of_key key ~base:"ipv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv4-unix" ] + | `Xen -> [ "tcpip.ipv4" ]) + @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv4.Make(%s)" + (module_name t) (Impl.module_name t.ethernet); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error "IPV4"); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V4.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.address); + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.netmask); + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V4.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.ethernet + + let update_path t root = + { t with ethernet = Impl.update_path t.ethernet root } + +end + +type ipv6_config = (Ipaddr.V6.t, Ipaddr.V6.Prefix.t list) ip_config + +let meta_ipv6_config t = + Printf.sprintf "(Ipaddr.V6.of_string_exn %S, [%s], [%s])" + (Ipaddr.V6.to_string t.address) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.Prefix.of_string_exn %S") + (List.map Ipaddr.V6.Prefix.to_string t.netmask))) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.of_string_exn %S") + (List.map Ipaddr.V6.to_string t.gateways))) + +module IPV6 = struct + + type t = { + time : time impl; + clock : clock impl; + ethernet: ethernet impl; + config : ipv6_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv6" ^ Impl.name t.time ^ Impl.name t.clock ^ Impl.name t.ethernet ^ meta_ipv6_config t.config in + Name.of_key key ~base:"ipv6" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.time @ Impl.packages t.clock @ Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv6-unix" ] + | `Xen -> [ "tcpip.ipv6" ]) + @ Impl.libraries t.time @ Impl.libraries t.clock @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv6.Make(%s)(%s)(%s)" + (module_name t) (Impl.module_name t.ethernet) (Impl.module_name t.time) (Impl.module_name t.clock); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V6.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.to_string t.config.address); + List.iter begin fun netmask -> + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.Prefix.to_string netmask) + end t.config.netmask; + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V6.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.time; + Impl.clean t.clock; + Impl.clean t.ethernet + + let update_path t root = + { t with + time = Impl.update_path t.time root; + clock = Impl.update_path t.clock root; + ethernet = Impl.update_path t.ethernet root } + +end + +type v4 +type v6 + +type 'a ip = IP + +let ip = Type IP + +type ipv4 = v4 ip +type ipv6 = v6 ip + +let ipv4 : ipv4 typ = ip +let ipv6 : ipv6 typ = ip + +let create_ipv4 net config = + let etif = etif net in + let t = { + IPV4.ethernet = etif; + config } in + impl ipv4 t (module IPV4) + +let default_ipv4_conf = + let i = Ipaddr.V4.of_string_exn in + { + address = i "10.0.0.2"; + netmask = i "255.255.255.0"; + gateways = [i "10.0.0.1"]; + } + +let default_ipv4 net = + create_ipv4 net default_ipv4_conf + +let create_ipv6 + ?(time = default_time) + ?(clock = default_clock) + net config = + let etif = etif net in + let t = { + IPV6.ethernet = etif; + time; clock; + config + } in + impl ipv6 t (module IPV6) + +module UDP_direct (V : sig type t end) = struct + + type t = V.t ip impl + + let name t = + Name.of_key ("udp" ^ Impl.name t) ~base:"udp" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ [ "tcpip" ] + + let libraries t = + Impl.libraries t @ [ "tcpip.udp" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Udp.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +module UDPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "udpv4_socket" + + let module_name _ = "Udpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.udpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a udp = UDP + +type udpv4 = v4 udp +type udpv6 = v6 udp + +let udp = Type UDP +let udpv4 : udpv4 typ = udp +let udpv6 : udpv6 typ = udp + +let direct_udp (type v) (ip : v ip impl) = + impl udp ip (module UDP_direct (struct type t = v end)) + +let socket_udpv4 ip = + impl udpv4 ip (module UDPV4_socket) + +module TCP_direct (V : sig type t end) = struct + + type t = { + clock : clock impl; + time : time impl; + ip : V.t ip impl; + random: random impl; + } + + let name t = + let key = "tcp" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.ip in + Name.of_key key ~base:"tcp" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.ip + @ Impl.packages t.random + + let libraries t = + "tcpip.tcp" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.ip + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.ip; + Impl.configure t.random; + append_main "module %s = Tcp.Flow.Make(%s)(%s)(%s)(%s)" + (module_name t) + (Impl.module_name t.ip) + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ip); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t.ip)); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.ip; + Impl.clean t.random + + let update_path t root = + { clock = Impl.update_path t.clock root; + ip = Impl.update_path t.ip root; + time = Impl.update_path t.time root; + random = Impl.update_path t.random root; + } + +end + +module TCPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "tcpv4_socket" + + let module_name _ = "Tcpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.tcpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a tcp = TCP + +type tcpv4 = v4 tcp +type tcpv6 = v6 tcp + +let tcp = Type TCP +let tcpv4 : tcpv4 typ = tcp +let tcpv6 : tcpv6 typ = tcp + +let direct_tcp (type v) + ?(clock=default_clock) ?(random=default_random) ?(time=default_time) (ip : v ip impl) = + let module TCP_direct = TCP_direct (struct type t = v end) in + let t = { TCP_direct.clock; random; time; ip } in + impl tcp t (module TCP_direct) + +let socket_tcpv4 ip = + impl tcpv4 ip (module TCPV4_socket) + +module STACKV4_direct = struct + + type t = { + clock : clock impl; + time : time impl; + console: console impl; + network: network impl; + random : random impl; + config : [`DHCP | `IPV4 of ipv4_config]; + } + + let name t = + let key = "stackv4" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.console + ^ Impl.name t.network + ^ Impl.name t.random + ^ match t.config with + | `DHCP -> "dhcp" + | `IPV4 i -> meta_ipv4_config i in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.console + @ Impl.packages t.network + @ Impl.packages t.random + + let libraries t = + "tcpip.stack-direct" + :: "mirage.runtime" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.console + @ Impl.libraries t.network + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.console; + Impl.configure t.network; + Impl.configure t.random; + append_main "module %s = struct" (module_name t); + append_main " module E = Ethif.Make(%s)" (Impl.module_name t.network); + append_main " module I = Ipv4.Make(E)"; + append_main " module U = Udp.Make(I)"; + append_main " module T = Tcp.Flow.Make(I)(%s)(%s)(%s)" + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + append_main " module S = Tcpip_stack_direct.Make(%s)(%s)(%s)(%s)(E)(I)(U)(T)" + (Impl.module_name t.console) + (Impl.module_name t.time) + (Impl.module_name t.random) + (Impl.module_name t.network); + append_main " include S"; + append_main "end"; + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " %s () >>= function" (Impl.name t.network); + append_main " | `Error e ->"; + let net_init_error_msg_fn = "Mirage_runtime.string_of_network_init_error" in + append_main " fail (Failure (%s %S e))" + net_init_error_msg_fn (Impl.name t.network); + append_main " | `Ok interface ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface;"; + begin match t.config with + | `DHCP -> append_main " mode = `DHCP;" + | `IPV4 i -> append_main " mode = `IPv4 %s;" (meta_ipv4_config i); + end; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.console; + Impl.clean t.network; + Impl.clean t.random + + let update_path t root = + { t with + clock = Impl.update_path t.clock root; + time = Impl.update_path t.time root; + console = Impl.update_path t.console root; + network = Impl.update_path t.network root; + random = Impl.update_path t.random root; + } + +end + +module STACKV4_socket = struct + + type t = { + console: console impl; + ipv4s : Ipaddr.V4.t list; + } + + let meta_ips ips = + String.concat "; " + (List.map (fun x -> + Printf.sprintf "Ipaddr.V4.of_string_exn %S" (Ipaddr.V4.to_string x) + ) ips) + + let name t = + let key = "stackv4" ^ Impl.name t.console ^ meta_ips t.ipv4s in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.console + + let libraries t = + "tcpip.stack-socket" :: Impl.libraries t.console + + let configure t = + let name = name t in + Impl.configure t.console; + append_main "module %s = Tcpip_stack_socket.Make(%s)" + (module_name t) (Impl.module_name t.console); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface = [%s];" (meta_ips t.ipv4s); + append_main " mode = ();"; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.console + + let update_path t root = + { t with console = Impl.update_path t.console root } + +end + +type stackv4 = STACKV4 + +let stackv4 = Type STACKV4 + +let direct_stackv4_with_dhcp + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; time; clock; random; + config = `DHCP } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_default_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 default_ipv4_conf; + } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_static_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network ipv4 = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 ipv4; + } in + impl stackv4 t (module STACKV4_direct) + +let socket_stackv4 console ipv4s = + impl stackv4 { STACKV4_socket.console; ipv4s } (module STACKV4_socket) + +module Channel_over_TCP (V : sig type t end) = struct + + type t = V.t tcp impl + + let name t = + let key = "channel" ^ Impl.name t in + Name.of_key key ~base:"channel" + + let module_name t = + String.capitalize (name t) + + let packages _ = + [ "mirage-tcpip" ] + + let libraries _ = + [ "tcpip.channel" ] + + let configure t = + Impl.configure t; + append_main "module %s = Channel.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t)); + append_main " | `Ok console ->"; + append_main " let flow = %s.create config in" (module_name t); + append_main " return (`Ok flow)"; + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type channel = CHANNEL + +let channel = Type CHANNEL + +let channel_over_tcp (type v) (flow : v tcp impl) = + impl channel flow (module Channel_over_TCP (struct type t = v end)) + +module VCHAN_localhost = struct + + type uuid = string + type t = uuid + + let name t = + let key = "in_memory" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + [ "mirage-conduit" ] + + let libraries t = + [ "conduit.mirage" ] + + let configure t = + append_main "module %s = Conduit_localhost" (module_name t); + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module VCHAN_xenstore = struct + + type uuid = string + type t = string + + let name t = + let key = "xen" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + match !mode with + |`Xen -> [ "vchan"; "mirage-xen"; "xen-evtchn"; "xen-gnt" ] + |`Unix | `MacOSX -> [ "vchan"; "xen-evtchn"; "xen-gnt"] + (* TODO: emit a failure on MacOSX? *) + + let libraries t = + match !mode with + |`Xen -> [ "conduit.mirage-xen" ] + |`Unix | `MacOSX-> [ "vchan" ] + + let configure t = + let m = + match !mode with + |`Xen -> "Conduit_xenstore" + |`Unix | `MacOSX -> "Vchan_lwt_unix.M" + in + append_main "module %s = %s" (module_name t) m; + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +type vchan = STACK4 + +let vchan = Type STACK4 + +let vchan_localhost ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_localhost) + +let vchan_xen ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_xenstore) + +let vchan_default ?uuid () = + match !mode with + | `Xen -> vchan_xen ?uuid () + | `Unix | `MacOSX -> vchan_localhost ?uuid () + +module Conduit = struct + type t = + [ `Stack of stackv4 impl * vchan impl ] + + let name t = + let key = "conduit" ^ match t with + | `Stack (s,v) -> + Printf.sprintf "%s_%s" (Impl.name s) (Impl.name v) in + Name.of_key key ~base:"conduit" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + [ "conduit"; "mirage-types"; "vchan" ] @ + match t with + | `Stack (s,v) -> Impl.packages s @ (Impl.packages v) + + let libraries t = + [ "conduit.mirage" ] @ + match t with + | `Stack (s,v) -> Impl.libraries s @ (Impl.libraries v) + + let configure t = + begin match t with + | `Stack (s,v) -> + Impl.configure s; + Impl.configure v; + append_main "module %s = Conduit_mirage.Make(%s)(%s)" + (module_name_core t) (Impl.module_name s) (Impl.module_name v); + end; + newline_main (); + append_main "let %s () =" (name t); + let (stack_subname, vchan_subname) = match t with + | `Stack (s,v) -> Impl.name s, Impl.name v in + + append_main " %s () >>= function" stack_subname; + append_main " | `Error _ -> %s" (driver_initialisation_error stack_subname); + append_main " | `Ok %s ->" stack_subname; + append_main " %s >>= fun %s ->" vchan_subname vchan_subname; + append_main " %s.init ~peer:%s ~stack:%s () >>= fun %s ->" + (module_name_core t) vchan_subname stack_subname (name t); + append_main " return (`Ok %s)" (name t); + newline_main () + + let clean = function + | `Stack (s,v) -> Impl.clean s; Impl.clean v + + let update_path t root = + match t with + | `Stack (s,v) -> + `Stack ((Impl.update_path s root), (Impl.update_path v root)) + +end + +type conduit = Conduit + +let conduit = Type Conduit + +let conduit_direct ?(vchan=vchan_localhost ()) stack = + impl conduit (`Stack (stack,vchan)) (module Conduit) + +type conduit_client = [ + | `TCP of Ipaddr.t * int + | `Vchan of string list +] + +type conduit_server = [ + | `TCP of [ `Port of int ] + | `Vchan of string list +] + +module Resolver_unix = struct + type t = unit + + let name t = + let key = "resolver_unix" in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + match !mode with + |`Unix | `MacOSX -> [ "mirage-conduit" ] + |`Xen -> failwith "Resolver_unix not supported on Xen" + + let libraries t = + [ "conduit.mirage"; "conduit.lwt-unix" ] + + let configure t = + append_main "module %s = Resolver_lwt" (module_name t); + append_main "let %s () =" (name t); + append_main " return (`Ok Resolver_lwt_unix.system)"; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module Resolver_direct = struct + type t = + [ `DNS of stackv4 impl * Ipaddr.V4.t option * int option ] + + let name t = + let key = "resolver" ^ match t with + | `DNS (s,_,_) -> Impl.name s in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + (module_name_core t) ^ "_res" + + let packages t = + [ "dns"; "tcpip" ] @ + match t with + | `DNS (s,_,_) -> Impl.packages s + + let libraries t = + [ "dns.mirage" ] @ + match t with + | `DNS (s,_,_) -> Impl.libraries s + + let configure t = + begin match t with + | `DNS (s,_,_) -> + Impl.configure s; + append_main "module %s = Resolver_lwt" (module_name t); + append_main "module %s_dns = Dns_resolver_mirage.Make(OS.Time)(%s)" + (module_name_core t) (Impl.module_name s); + append_main "module %s = Resolver_mirage.Make(%s_dns)" + (module_name_core t) (module_name_core t); + end; + newline_main (); + append_main "let %s () =" (name t); + let subname = match t with + | `DNS (s,_,_) -> Impl.name s in + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + let res_ns = match t with + | `DNS (_,None,_) -> "None" + | `DNS (_,Some ns,_) -> + Printf.sprintf "Ipaddr.V4.of_string %S" (Ipaddr.V4.to_string ns) in + append_main " let ns = %s in" res_ns; + let res_ns_port = match t with + | `DNS (_,_,None) -> "None" + | `DNS (_,_,Some ns_port) -> Printf.sprintf "Some %d" ns_port in + append_main " let ns_port = %s in" res_ns_port; + append_main " let res = %s.init ?ns ?ns_port ~stack:%s () in" (module_name_core t) subname; + append_main " return (`Ok res)"; + newline_main () + + let clean = function + | `DNS (s,_,_) -> Impl.clean s + + let update_path t root = + match t with + | `DNS (s,a,b) -> `DNS (Impl.update_path s root, a, b) + +end + +type resolver = Resolver + +let resolver = Type Resolver + +let resolver_dns ?ns ?ns_port stack = + impl resolver (`DNS (stack, ns, ns_port)) (module Resolver_direct) + +let resolver_unix_system = + impl resolver () (module Resolver_unix) + +module HTTP = struct + + type t = + [ `Channel of channel impl + | `Stack of conduit_server * conduit impl ] + + let name t = + let key = "http" ^ match t with + | `Channel c -> Impl.name c + | `Stack (_, c) -> Impl.name c in + Name.of_key key ~base:"http" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t ^ ".Server" + + let packages t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.packages c + | `Stack (_, c) -> Impl.packages c + + let libraries t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.libraries c + | `Stack (_, c) -> Impl.libraries c + + let configure t = + begin match t with + | `Channel c -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + | `Stack (_, c) -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + end; + newline_main (); + let subname = match t with + | `Channel c -> Impl.name c + | `Stack (_,c) -> Impl.name c in + append_main "let %s () =" (name t); + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + begin match t with + | `Channel c -> failwith "TODO" + | `Stack (m,c) -> + append_main " let listen spec ="; + append_main " let ctx = %s in" (Impl.name c); + append_main " let mode = %s in" + (match m with + |`TCP (`Port port) -> Printf.sprintf "`TCP (`Port %d)" port + |`Vchan l -> failwith "Vchan not supported yet in server" + ); + append_main " %s.serve ~ctx ~mode (%s.Server.listen spec)" (Impl.module_name c) (module_name_core t); + append_main " in"; + append_main " return (`Ok listen)"; + end; + newline_main () + + let clean = function + | `Channel c -> Impl.clean c + | `Stack (_,c) -> Impl.clean c + + let update_path t root = + match t with + | `Channel c -> `Channel (Impl.update_path c root) + | `Stack (m, c) -> `Stack (m, Impl.update_path c root) + +end + +type http = HTTP + +let http = Type HTTP + +let http_server_of_channel chan = + impl http (`Channel chan) (module HTTP) + +let http_server mode conduit = + impl http (`Stack (mode, conduit)) (module HTTP) + +type job = JOB + +let job = Type JOB + +module Job = struct + + type t = { + name: string; + impl: job impl; + } + + let create impl = + let name = Name.create "job" in + { name; impl } + + let name t = + t.name + + let module_name t = + "Job_" ^ t.name + + let packages t = + Impl.packages t.impl + + let libraries t = + Impl.libraries t.impl + + let configure t = + Impl.configure t.impl; + newline_main () + + let clean t = + Impl.clean t.impl + + let update_path t root = + { t with impl = Impl.update_path t.impl root } + +end + +module Tracing = struct + type t = { + size : int; + } + + let unix_trace_file = "trace.ctf" + + let packages _ = StringSet.singleton "mirage-profile" + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> StringSet.singleton "mirage-profile.unix" + | `Xen -> StringSet.singleton "mirage-profile.xen" + + let configure t = + if Sys.command "ocamlfind query lwt.tracing 2>/dev/null" <> 0 then ( + flush stdout; + error "lwt.tracing module not found. Hint:\n\ + opam pin add lwt 'https://github.com/mirage/lwt.git#tracing'" + ); + + append_main "let () = "; + begin match !mode with + | `Unix | `MacOSX -> + append_main " let buffer = MProf_unix.mmap_buffer ~size:%d %S in" t.size unix_trace_file; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_unix.timestamper in"; + append_main " MProf.Trace.Control.start trace_config"; + | `Xen -> + append_main " let trace_pages = MProf_xen.make_shared_buffer ~size:%d in" t.size; + append_main " let buffer = trace_pages |> Io_page.to_cstruct |> Cstruct.to_bigarray in"; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_xen.timestamper in"; + append_main " MProf.Trace.Control.start trace_config;"; + append_main " MProf_xen.share_with (module Gnt.Gntshr) (module OS.Xs) ~domid:0 trace_pages"; + append_main " |> OS.Main.run"; + end; + newline_main () +end + +type tracing = Tracing.t + +let mprof_trace ~size () = + { Tracing.size } + +type t = { + name: string; + root: string; + jobs: job impl list; + tracing: tracing option; +} + +let t = ref None + +let config_file = ref None + +let reset () = + config_file := None; + t := None + +let set_config_file f = + config_file := Some f + +let get_config_file () = + match !config_file with + | None -> Sys.getcwd () / "config.ml" + | Some f -> f + +let update_path t root = + { t with jobs = List.map (fun j -> Impl.update_path j root) t.jobs } + +let register ?tracing name jobs = + let root = match !config_file with + | None -> failwith "no config file" + | Some f -> Filename.dirname f in + t := Some { name; jobs; root; tracing } + +let registered () = + match !t with + | None -> { name = "empty"; jobs = []; root = Sys.getcwd (); tracing = None } + | Some t -> t + +let ps = ref StringSet.empty + +let add_to_opam_packages p = + ps := StringSet.union (StringSet.of_list p) !ps + +let packages t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-unix" + | `Xen -> "mirage-xen" in + let ps = StringSet.add m !ps in + let ps = match t.tracing with + | None -> ps + | Some tracing -> StringSet.union (Tracing.packages tracing) ps in + let ps = List.fold_left (fun set j -> + let ps = StringSet.of_list (Impl.packages j) in + StringSet.union ps set + ) ps t.jobs in + StringSet.elements ps + +let ls = ref StringSet.empty + +let add_to_ocamlfind_libraries l = + ls := StringSet.union !ls (StringSet.of_list l) + +let libraries t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-types.lwt" + | `Xen -> "mirage-types.lwt" in + let ls = StringSet.add m !ls in + let ls = match t.tracing with + | None -> ls + | Some tracing -> StringSet.union (Tracing.libraries tracing) ls in + let ls = List.fold_left (fun set j -> + let ls = StringSet.of_list (Impl.libraries j) in + StringSet.union ls set + ) ls t.jobs in + StringSet.elements ls + +let configure_myocamlbuild_ml t = + let minor, major = ocaml_version () in + if minor < 4 || major < 1 then ( + (* Previous ocamlbuild versions weren't able to understand the + --output-obj rules *) + let file = t.root / "myocamlbuild.ml" in + let oc = open_out file in + append oc "(* %s *)" generated_by_mirage; + newline oc; + append oc + "open Ocamlbuild_pack;;\n\ + open Ocamlbuild_plugin;;\n\ + open Ocaml_compiler;;\n\ + \n\ + let native_link_gen linker =\n\ + \ link_gen \"cmx\" \"cmxa\" !Options.ext_lib [!Options.ext_obj; \"cmi\"] linker;;\n\ + \n\ + let native_output_obj x = native_link_gen ocamlopt_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"native\"++\"output_obj\") x;;\n\ + \n\ + rule \"ocaml: cmx* & o* -> native.o\"\n\ + \ ~tags:[\"ocaml\"; \"native\"; \"output_obj\" ]\n\ + \ ~prod:\"%%.native.o\" ~deps:[\"%%.cmx\"; \"%%.o\"]\n\ + \ (native_output_obj \"%%.cmx\" \"%%.native.o\");;\n\ + \n\ + \n\ + let byte_link_gen = link_gen \"cmo\" \"cma\" \"cma\" [\"cmo\"; \"cmi\"];;\n\ + let byte_output_obj = byte_link_gen ocamlc_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"byte\"++\"output_obj\");;\n\ + \n\ + rule \"ocaml: cmo* -> byte.o\"\n\ + \ ~tags:[\"ocaml\"; \"byte\"; \"link\"; \"output_obj\" ]\n\ + ~prod:\"%%.byte.o\" ~dep:\"%%.cmo\"\n\ + \ (byte_output_obj \"%%.cmo\" \"%%.byte.o\");;"; + close_out oc + ) + +let clean_myocamlbuild_ml t = + remove (t.root / "myocamlbuild.ml") + +let configure_main_libvirt_xml t = + let file = t.root / t.name ^ "_libvirt.xml" in + let oc = open_out file in + append oc "" generated_by_mirage; + append oc ""; + append oc " %s" t.name; + append oc " 262144"; + append oc " 262144"; + append oc " 1"; + append oc " "; + append oc " linux"; + append oc " %s/mir-%s.xen" t.root t.name; + append oc " "; (* the libxl driver currently needs an empty cmdline to be able to start the domain on arm - due to this? http://lists.xen.org/archives/html/xen-devel/2014-02/msg02375.html *) + append oc " "; + append oc " "; + append oc " preserve"; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc ""; + close_out oc + +let clean_main_libvirt_xml t = + remove (t.root / t.name ^ "_libvirt.xml") + +let configure_main_xl t = + let file = t.root / t.name ^ ".xl" in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "name = '%s'" t.name; + append oc "kernel = '%s/mir-%s.xen'" t.root t.name; + append oc "builder = 'linux'"; + append oc "memory = 256"; + append oc "on_crash = 'preserve'"; + newline oc; + append oc "# You must define the network and block interfaces manually."; + newline oc; + append oc "# The disk configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-disk-configuration.txt"; + append oc "# An example would look like:"; + append oc "# disk = [ '/dev/loop0,,xvda' ]"; + newline oc; + append oc "# The network configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-network-configuration.html"; + append oc "# An example would look like:"; + append oc "# vif = [ 'mac=c0:ff:ee:c0:ff:ee,bridge=br0' ]"; + close_out oc + +let clean_main_xl t = + remove (t.root / t.name ^ ".xl") + +let configure_main_xe t = + let file = t.root / t.name ^ ".xe" in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc "# %s" generated_by_mirage; + newline oc; + append oc "set -e"; + newline oc; + append oc "# Dependency: xe"; + append oc "command -v xe >/dev/null 2>&1 || { echo >&2 \"I require xe but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: xe-unikernel-upload"; + append oc "command -v xe-unikernel-upload >/dev/null 2>&1 || { echo >&2 \"I require xe-unikernel-upload but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: a $HOME/.xe"; + append oc "if [ ! -e $HOME/.xe ]; then"; + append oc " echo Please create a config file for xe in $HOME/.xe which contains:"; + append oc " echo server=''"; + append oc " echo username=root"; + append oc " echo password=password"; + append oc " exit 1"; + append oc "fi"; + newline oc; + append oc "echo Uploading VDI containing unikernel"; + append oc "VDI=$(xe-unikernel-upload --path %s/mir-%s.xen)" t.root t.name; + append oc "echo VDI=$VDI"; + append oc "echo Creating VM metadata"; + append oc "VM=$(xe vm-create name-label=%s)" t.name; + append oc "echo VM=$VM"; + append oc "xe vm-param-set uuid=$VM PV-bootloader=pygrub"; + append oc "echo Adding network interface connected to xenbr0"; + append oc "ETH0=$(xe network-list bridge=xenbr0 params=uuid --minimal)"; + append oc "VIF=$(xe vif-create vm-uuid=$VM network-uuid=$ETH0 device=0)"; + append oc "echo Atting block device and making it bootable"; + append oc "VBD=$(xe vbd-create vm-uuid=$VM vdi-uuid=$VDI device=0)"; + append oc "xe vbd-param-set uuid=$VBD bootable=true"; + append oc "xe vbd-param-set uuid=$VBD other-config:owner=true"; + append oc "echo Starting VM"; + append oc "xe vm-start vm=%s" t.name; + close_out oc; + Unix.chmod file 0o755 + +let clean_main_xe t = + remove (t.root / t.name ^ ".xe") + +(* Get the linker flags for any extra C objects we depend on. + * This is needed when building a Xen image as we do the link manually. *) +let get_extra_ld_flags ~filter pkgs = + let output = read_command + "ocamlfind query -r -format '%%d\t%%(xen_linkopts)' -predicates native %s" + (String.concat " " pkgs) in + split output '\n' + |> List.fold_left (fun acc line -> + match cut_at line '\t' with + | None -> acc + | Some (dir, ldflags) -> Printf.sprintf "-L%s %s" dir ldflags :: acc + ) [] + +let configure_makefile t = + let file = t.root / "Makefile" in + let pkgs = "lwt.syntax" :: libraries t in + let libraries_str = + match pkgs with + | [] -> "" + | ls -> "-pkgs " ^ String.concat "," ls in + let packages = String.concat " " (packages t) in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "LIBS = %s" libraries_str; + append oc "PKGS = %s" packages; + begin match !mode with + | `Xen -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg,-dontlink,unix\n"; + append oc "XENLIB = $(shell ocamlfind query mirage-xen)\n" + | `Unix -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + | `MacOSX -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal,thread\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + end; + append oc "BUILD = ocamlbuild -use-ocamlfind $(LIBS) $(SYNTAX) $(FLAGS)\n\ + OPAM = opam\n\n\ + export PKG_CONFIG_PATH=$(shell opam config var prefix)/lib/pkgconfig\n\n\ + export OPAMVERBOSE=1\n\ + export OPAMYES=1"; + newline oc; + append oc ".PHONY: all depend clean build main.native\n\ + all: build\n\ + \n\ + depend:\n\ + \t$(OPAM) install $(PKGS) --verbose\n\ + \n\ + main.native:\n\ + \t$(BUILD) main.native\n\ + \n\ + main.native.o:\n\ + \t$(BUILD) main.native.o"; + newline oc; + + (* On ARM, we must convert the ELF image to an ARM boot executable zImage, + * while on x86 we leave it as it is. *) + let generate_image = + let need_zImage = + match uname_m () with + | Some machine -> String.length machine > 2 && String.sub machine 0 3 = "arm" + | None -> failwith "uname -m failed; can't determine target machine type!" in + if need_zImage then ( + Printf.sprintf "\t -o mir-%s.elf\n\ + \tobjcopy -O binary mir-%s.elf mir-%s.xen" + t.name t.name t.name + ) else ( + Printf.sprintf "\t -o mir-%s.xen" t.name + ) in + + begin match !mode with + | `Xen -> + let filter = function + | "unix" | "bigarray" |"shared_memory_ring_stubs" -> false (* Provided by mirage-xen instead. *) + | _ -> true in + let extra_c_archives = + get_extra_ld_flags ~filter pkgs + |> String.concat " \\\n\t " in + + append oc "build: main.native.o"; + let pkg_config_deps = "mirage-xen" in + append oc "\tpkg-config --print-errors --exists %s" pkg_config_deps; + append oc "\tld -d -static -nostdlib \\\n\ + \t _build/main.native.o \\\n\ + \t %s \\\n\ + \t $$(pkg-config --static --libs %s) \\\n\ + \t $(shell gcc -print-libgcc-file-name) \\\n\ + %s" + extra_c_archives pkg_config_deps generate_image; + | `Unix | `MacOSX -> + append oc "build: main.native"; + append oc "\tln -nfs _build/main.native mir-%s" t.name; + end; + newline oc; + append oc "run: build"; + begin match !mode with + | `Xen -> + append oc "\t@echo %s.xl has been created. Edit it to add VIFs or VBDs" t.name; + append oc "\t@echo Then do something similar to: xl create -c %s.xl\n" t.name + | `Unix | `MacOSX -> + append oc "\t$(SUDO) ./mir-%s\n" t.name + end; + append oc "clean:\n\ + \tocamlbuild -clean"; + close_out oc + +let clean_makefile t = + remove (t.root / "Makefile") + +let no_opam_version_check_ = ref false +let no_opam_version_check b = no_opam_version_check_ := b + +let configure_opam t = + info "Installing OPAM packages."; + match packages t with + | [] -> () + | ps -> + if command_exists "opam" then + if !no_opam_version_check_ then () + else ( + let opam_version = read_command "opam --version" in + let version_error () = + error "Your version of opam: %s is not up-to-date. \ + Please update to (at least) 1.2." opam_version + in + match split opam_version '.' with + | major::minor::_ -> + let major = try int_of_string major with Failure _ -> 0 in + let minor = try int_of_string minor with Failure _ -> 0 in + if (major, minor) >= (1, 2) then opam "install" ps else version_error () + | _ -> version_error () + ) + else error "OPAM is not installed." + +let clean_opam t = + () +(* This is a bit too agressive, disabling for now on. + let (++) = StringSet.union in + let set mode = StringSet.of_list (packages t mode) in + let packages = + set (`Unix `Socket) ++ set (`Unix `Direct) ++ set `Xen in + match StringSet.elements packages with + | [] -> () + | ps -> + if cmd_exists "opam" then opam "remove" ps + else error "OPAM is not installed." +*) + +let manage_opam_packages_ = ref true +let manage_opam_packages b = manage_opam_packages_ := b + +let configure_job j = + let name = Impl.name j in + let module_name = Impl.module_name j in + let param_names = Impl.names j in + append_main "let %s () =" name; + List.iter (fun p -> + append_main " %s () >>= function" p; + append_main " | `Error e -> %s" (driver_initialisation_error p); + append_main " | `Ok %s ->" p; + ) (dedup param_names); + append_main " %s.start %s" module_name (String.concat " " param_names); + newline_main () + +let configure_main t = + info "%s main.ml" (blue_s "Generating:"); + set_main_ml (t.root / "main.ml"); + append_main "(* %s *)" generated_by_mirage; + newline_main (); + append_main "open Lwt"; + newline_main (); + append_main "let _ = Printexc.record_backtrace true"; + newline_main (); + begin match t.tracing with + | None -> () + | Some tracing -> Tracing.configure tracing end; + List.iter (fun j -> Impl.configure j) t.jobs; + List.iter configure_job t.jobs; + let names = List.map (fun j -> Printf.sprintf "%s ()" (Impl.name j)) t.jobs in + append_main "let () ="; + append_main " OS.Main.run (join [%s])" (String.concat "; " names) + +let clean_main t = + List.iter Impl.clean t.jobs; + remove (t.root / "main.ml") + +let configure t = + info "%s %s" (blue_s "Using configuration:") (get_config_file ()); + info "%d job%s [%s]" + (List.length t.jobs) + (if List.length t.jobs = 1 then "" else "s") + (String.concat ", " (List.map Impl.functor_name t.jobs)); + in_dir t.root (fun () -> + if !manage_opam_packages_ then configure_opam t; + configure_myocamlbuild_ml t; + configure_makefile t; + configure_main_xl t; + configure_main_xe t; + configure_main_libvirt_xml t; + configure_main t + ) + +let make () = + match uname_s () with + | Some ("FreeBSD" | "OpenBSD" | "NetBSD" | "DragonFly") -> "gmake" + | _ -> "make" + +let build t = + info "Build: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s build" (make ()) + ) + +let run t = + info "Run: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s run" (make ()) + ) + +let clean t = + info "Clean: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + if !manage_opam_packages_ then clean_opam t; + clean_myocamlbuild_ml t; + clean_makefile t; + clean_main_xl t; + clean_main_xe t; + clean_main_libvirt_xml t; + clean_main t; + command "rm -rf %s/_build" t.root; + command "rm -rf log %s/main.native.o %s/main.native %s/mir-%s %s/*~" + t.root t.root t.root t.name t.root; + ) + +(* Compile the configuration file and attempt to dynlink it. + * It is responsible for registering an application via + * [Mirage_config.register] in order to have an observable + * side effect to this command. *) +let compile_and_dynlink file = + info "%s %s" (blue_s "Processing:") file; + let root = Filename.dirname file in + let file = Filename.basename file in + let file = Dynlink.adapt_filename file in + command "rm -rf %s/_build/%s.*" root (Filename.chop_extension file); + command "cd %s && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage %s" root file; + try Dynlink.loadfile (String.concat "/" [root; "_build"; file]) + with Dynlink.Error err -> error "Error loading config: %s" (Dynlink.error_message err) + +(* If a configuration file is specified, then use that. + * If not, then scan the curdir for a `config.ml` file. + * If there is more than one, then error out. *) +let scan_conf = function + | Some f -> + info "%s %s" (blue_s "Using specified config file:") f; + if not (Sys.file_exists f) then error "%s does not exist, stopping." f; + realpath f + | None -> + let files = Array.to_list (Sys.readdir ".") in + match List.filter ((=) "config.ml") files with + | [] -> error "No configuration file config.ml found.\n\ + You'll need to create one to let Mirage know what to do." + | [f] -> + info "%s %s" (blue_s "Using scanned config file:") f; + realpath f + | _ -> error "There is more than one config.ml in the current working directory.\n\ + Please specify one explictly on the command-line." + +let load file = + reset (); + let file = scan_conf file in + let root = realpath (Filename.dirname file) in + let file = root / Filename.basename file in + info "%s %s" (blue_s "Compiling for target:") (string_of_mode !mode); + set_config_file file; + compile_and_dynlink file; + let t = registered () in + set_section t.name; + update_path t root diff --git a/samples/OCaml/reload.ml b/samples/OCaml/reload.ml new file mode 100644 index 00000000..510f201f --- /dev/null +++ b/samples/OCaml/reload.ml @@ -0,0 +1,125 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 2000 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the Q Public License version 1.0. *) +(* *) +(***********************************************************************) + +open Cmm +open Arch +open Reg +open Mach + +(* Reloading for the AMD64 *) + +(* Summary of instruction set constraints: + "S" means either stack or register, "R" means register only. + Operation Res Arg1 Arg2 + Imove R S + or S R + Iconst_int S if 32-bit signed, R otherwise + Iconst_float R + Iconst_symbol (not PIC) S + Iconst_symbol (PIC) R + Icall_ind R + Itailcall_ind R + Iload R R R + Istore R R + Iintop(Icomp) R R S + or S S R + Iintop(Imul|Idiv|mod) R R S + Iintop(shift) S S R + Iintop(others) R R S + or S S R + Iintop_imm(Iadd, n)/lea R R + Iintop_imm(others) S S + Inegf...Idivf R R S + Ifloatofint R S + Iintoffloat R S + Ispecific(Ilea) R R R + Ispecific(Ifloatarithmem) R R R + + Conditional branches: + Iinttest S R + or R S + Ifloattest R S (or S R if swapped test) + other tests S +*) + +let stackp r = + match r.loc with + Stack _ -> true + | _ -> false + +class reload = object (self) + +inherit Reloadgen.reload_generic as super + +method! reload_operation op arg res = + match op with + | Iintop(Iadd|Isub|Iand|Ior|Ixor|Icomp _|Icheckbound) -> + (* One of the two arguments can reside in the stack, but not both *) + if stackp arg.(0) && stackp arg.(1) + then ([|arg.(0); self#makereg arg.(1)|], res) + else (arg, res) + | Iintop_imm(Iadd, _) when arg.(0).loc <> res.(0).loc -> + (* This add will be turned into a lea; args and results must be + in registers *) + super#reload_operation op arg res + | Iintop(Idiv | Imod | Ilsl | Ilsr | Iasr) + | Iintop_imm(_, _) -> + (* The argument(s) and results can be either in register or on stack *) + (* Note: Idiv, Imod: arg(0) and res(0) already forced in regs + Ilsl, Ilsr, Iasr: arg(1) already forced in regs *) + (arg, res) + | Iintop(Imul) | Iaddf | Isubf | Imulf | Idivf -> + (* First argument (= result) must be in register, second arg + can reside in the stack *) + if stackp arg.(0) + then (let r = self#makereg arg.(0) in ([|r; arg.(1)|], [|r|])) + else (arg, res) + | Ifloatofint | Iintoffloat -> + (* Result must be in register, but argument can be on stack *) + (arg, (if stackp res.(0) then [| self#makereg res.(0) |] else res)) + | Iconst_int n -> + if n <= 0x7FFFFFFFn && n >= -0x80000000n + then (arg, res) + else super#reload_operation op arg res + | Iconst_symbol _ -> + if !pic_code || !Clflags.dlcode + then super#reload_operation op arg res + else (arg, res) + | _ -> (* Other operations: all args and results in registers *) + super#reload_operation op arg res + +method! reload_test tst arg = + match tst with + Iinttest cmp -> + (* One of the two arguments can reside on stack *) + if stackp arg.(0) && stackp arg.(1) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | Ifloattest((Clt|Cle), _) -> + (* Cf. emit.mlp: we swap arguments in this case *) + (* First argument can be on stack, second must be in register *) + if stackp arg.(1) + then [| arg.(0); self#makereg arg.(1) |] + else arg + | Ifloattest((Ceq|Cne|Cgt|Cge), _) -> + (* Second argument can be on stack, first must be in register *) + if stackp arg.(0) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | _ -> + (* The argument(s) can be either in register or on stack *) + arg + +end + +let fundecl f = + (new reload)#fundecl f diff --git a/samples/OCaml/sigset.ml b/samples/OCaml/sigset.ml new file mode 100644 index 00000000..ba5e1092 --- /dev/null +++ b/samples/OCaml/sigset.ml @@ -0,0 +1,70 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open PosixTypes +open Ctypes +open Foreign + +type t = sigset_t ptr + +let t = ptr sigset_t + +(* This function initializes the signal set set to exclude all of the defined + signals. It always returns 0. *) +let sigemptyset = foreign "sigemptyset" (ptr sigset_t @-> returning int) + +let empty () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigemptyset setp); + setp + end + +(* This function initializes the signal set set to include all of the defined + signals. Again, the return value is 0. *) +let sigfillset = foreign "sigfillset" (ptr sigset_t @-> returning int) + +let full () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigfillset setp); + setp + end + +(* This function adds the signal signum to the signal set set. All sigaddset + does is modify set; it does not block or unblock any signals. + + The return value is 0 on success and -1 on failure. The following errno + error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigaddset = foreign "sigaddset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let add set signal = ignore (sigaddset set signal) + +(* This function removes the signal signum from the signal set set. All + sigdelset does is modify set; it does not block or unblock any signals. + + The return value and error conditions are the same as for + sigaddset. *) +let sigdelset = foreign "sigdelset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let del set signal = ignore (sigdelset set signal) + +(* The sigismember function tests whether the signal signum is a member of the + signal set set. It returns 1 if the signal is in the set, 0 if not, and -1 if + there is an error. + + The following errno error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigismember = foreign "sigismember" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let mem set signal = sigismember set signal <> 0 diff --git a/samples/OCaml/uutf.ml b/samples/OCaml/uutf.ml new file mode 100644 index 00000000..ff12d954 --- /dev/null +++ b/samples/OCaml/uutf.ml @@ -0,0 +1,810 @@ +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli. All rights reserved. + Distributed under the BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +let io_buffer_size = 65536 (* IO_BUFFER_SIZE 4.0.0 *) + +let pp = Format.fprintf +let invalid_encode () = invalid_arg "expected `Await encode" +let invalid_bounds j l = + invalid_arg (Printf.sprintf "invalid bounds (index %d, length %d)" j l) + +(* Unsafe string byte manipulations. If you don't believe the author's + invariants, replacing with safe versions makes everything safe in + the module. He won't be upset. *) + +let unsafe_chr = Char.unsafe_chr +let unsafe_blit = String.unsafe_blit +let unsafe_array_get = Array.unsafe_get +let unsafe_byte s j = Char.code (String.unsafe_get s j) +let unsafe_set_byte s j byte = String.unsafe_set s j (Char.unsafe_chr byte) + +(* Unicode characters *) + +type uchar = int +let u_bom = 0xFEFF (* BOM. *) +let u_rep = 0xFFFD (* replacement character. *) +let is_uchar cp = + (0x0000 <= cp && cp <= 0xD7FF) || (0xE000 <= cp && cp <= 0x10FFFF) + +let pp_cp ppf cp = + if cp < 0 || cp > 0x10FFFF then pp ppf "U+Invalid(%X)" cp else + if cp <= 0xFFFF then pp ppf "U+%04X" cp else + pp ppf "U+%X" cp + +let cp_to_string cp = (* NOT thread safe. *) + pp Format.str_formatter "%a" pp_cp cp; Format.flush_str_formatter () + +(* Unicode encoding schemes *) + +type encoding = [ `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE ] +type decoder_encoding = [ encoding | `US_ASCII | `ISO_8859_1 ] + +let encoding_of_string s = match String.uppercase s with (* IANA names. *) +| "UTF-8" -> Some `UTF_8 +| "UTF-16" -> Some `UTF_16 +| "UTF-16LE" -> Some `UTF_16LE +| "UTF-16BE" -> Some `UTF_16BE +| "ANSI_X3.4-1968" | "ISO-IR-6" | "ANSI_X3.4-1986" | "ISO_646.IRV:1991" +| "ASCII" | "ISO646-US" | "US-ASCII" | "US" | "IBM367" | "CP367" | "CSASCII" -> + Some `US_ASCII +| "ISO_8859-1:1987" | "ISO-IR-100" | "ISO_8859-1" | "ISO-8859-1" +| "LATIN1" | "L1" | "IBM819" | "CP819" | "CSISOLATIN1" -> + Some `ISO_8859_1 +| _ -> None + +let encoding_to_string = function +| `UTF_8 -> "UTF-8" | `UTF_16 -> "UTF-16" | `UTF_16BE -> "UTF-16BE" +| `UTF_16LE -> "UTF-16LE" | `US_ASCII -> "US-ASCII" +| `ISO_8859_1 -> "ISO-8859-1" + +(* Base character decoders. They assume enough data. *) + +let malformed s j l = `Malformed (String.sub s j l) +let malformed_pair be hi s j l = (* missing or half low surrogate at eoi. *) + let bs1 = String.sub s j l in + let bs0 = String.create 2 in + let j0, j1 = if be then (0, 1) else (1, 0) in + unsafe_set_byte bs0 j0 (hi lsr 8); + unsafe_set_byte bs0 j1 (hi land 0xFF); + `Malformed (bs0 ^ bs1) + +let r_us_ascii s j = + (* assert (0 <= j && j < String.length s); *) + let b0 = unsafe_byte s j in + if b0 <= 127 then `Uchar b0 else malformed s j 1 + +let r_iso_8859_1 s j = + (* assert (0 <= j && j < String.length s); *) + `Uchar (unsafe_byte s j) + +let utf_8_len = [| (* uchar byte length according to first UTF-8 byte. *) + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; + 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; + 4; 4; 4; 4; 4; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0 |] + +let r_utf_8 s j l = + (* assert (0 <= j && 0 <= l && j + l <= String.length s); *) + match l with + | 1 -> `Uchar (unsafe_byte s j) + | 2 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + if b1 lsr 6 != 0b10 then malformed s j l else + `Uchar (((b0 land 0x1F) lsl 6) lor (b1 land 0x3F)) + | 3 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in + let c = `Uchar (((b0 land 0x0F) lsl 12) lor + ((b1 land 0x3F) lsl 6) lor + (b2 land 0x3F)) + in + if b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xE0 -> if b1 < 0xA0 || 0xBF < b1 then malformed s j l else c + | 0xED -> if b1 < 0x80 || 0x9F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | 4 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in let b3 = unsafe_byte s (j + 3) in + let c = `Uchar (((b0 land 0x07) lsl 18) lor + ((b1 land 0x3F) lsl 12) lor + ((b2 land 0x3F) lsl 6) lor + (b3 land 0x3F)) + in + if b3 lsr 6 != 0b10 || b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xF0 -> if b1 < 0x90 || 0xBF < b1 then malformed s j l else c + | 0xF4 -> if b1 < 0x80 || 0x8F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | _ -> assert false + +let r_utf_16 s j0 j1 = (* May return a high surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in let b1 = unsafe_byte s j1 in + let u = (b0 lsl 8) lor b1 in + if u < 0xD800 || u > 0xDFFF then `Uchar u else + if u > 0xDBFF then malformed s (min j0 j1) 2 else `Hi u + +let r_utf_16_lo hi s j0 j1 = (* Combines [hi] with a low surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in + let b1 = unsafe_byte s j1 in + let lo = (b0 lsl 8) lor b1 in + if lo < 0xDC00 || lo > 0xDFFF + then malformed_pair (j0 < j1 (* true => be *)) hi s (min j0 j1) 2 + else `Uchar ((((hi land 0x3FF) lsl 10) lor (lo land 0x3FF)) + 0x10000) + +let r_encoding s j l = (* guess encoding with max. 3 bytes. *) + (* assert (0 <= j && 0 <= l && j + l <= String.length s) *) + let some i = if i < l then Some (unsafe_byte s (j + i)) else None in + match (some 0), (some 1), (some 2) with + | Some 0xEF, Some 0xBB, Some 0xBF -> `UTF_8 `BOM + | Some 0xFE, Some 0xFF, _ -> `UTF_16BE `BOM + | Some 0xFF, Some 0xFE, _ -> `UTF_16LE `BOM + | Some 0x00, Some p, _ when p > 0 -> `UTF_16BE (`ASCII p) + | Some p, Some 0x00, _ when p > 0 -> `UTF_16LE (`ASCII p) + | Some u, _, _ when utf_8_len.(u) <> 0 -> `UTF_8 `Decode + | Some _, Some _, _ -> `UTF_16BE `Decode + | Some _, None , None -> `UTF_8 `Decode + | None , None , None -> `UTF_8 `End + | None , Some _, _ -> assert false + | Some _, None , Some _ -> assert false + | None , None , Some _ -> assert false + +(* Decode *) + +type src = [ `Channel of in_channel | `String of string | `Manual ] +type nln = [ `ASCII of uchar | `NLF of uchar | `Readline of uchar ] +type decode = [ `Await | `End | `Malformed of string | `Uchar of uchar] + +let pp_decode ppf = function +| `Uchar u -> pp ppf "@[`Uchar %a@]" pp_cp u +| `End -> pp ppf "`End" +| `Await -> pp ppf "`Await" +| `Malformed bs -> + let l = String.length bs in + pp ppf "@[`Malformed ("; + if l > 0 then pp ppf "%02X" (Char.code (bs.[0])); + for i = 1 to l - 1 do pp ppf " %02X" (Char.code (bs.[i])) done; + pp ppf ")@]" + +type decoder = + { src : src; (* input source. *) + mutable encoding : decoder_encoding; (* decoded encoding. *) + nln : nln option; (* newline normalization (if any). *) + nl : int; (* newline normalization character. *) + mutable i : string; (* current input chunk. *) + mutable i_pos : int; (* input current position. *) + mutable i_max : int; (* input maximal position. *) + t : string; (* four bytes temporary buffer for overlapping reads. *) + mutable t_len : int; (* current byte length of [t]. *) + mutable t_need : int; (* number of bytes needed in [t]. *) + mutable removed_bom : bool; (* [true] if an initial BOM was removed. *) + mutable last_cr : bool; (* [true] if last char was CR. *) + mutable line : int; (* line number. *) + mutable col : int; (* column number. *) + mutable byte_count : int; (* byte count. *) + mutable count : int; (* char count. *) + mutable pp : (* decoder post-processor for BOM, position and nln. *) + decoder -> [ `Malformed of string | `Uchar of uchar ] -> decode; + mutable k : decoder -> decode } (* decoder continuation. *) + +(* On decodes that overlap two (or more) [d.i] buffers, we use [t_fill] to copy + the input data to [d.t] and decode from there. If the [d.i] buffers are not + too small this is faster than continuation based byte per byte writes. + + End of input (eoi) is signalled by [d.i_pos = 0] and [d.i_max = min_int] + which implies that [i_rem d < 0] is [true]. *) + +let i_rem d = d.i_max - d.i_pos + 1 (* remaining bytes to read in [d.i]. *) +let eoi d = d.i <- ""; d.i_pos <- 0; d.i_max <- min_int (* set eoi in [d]. *) +let src d s j l = (* set [d.i] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l else + if (l = 0) then eoi d else + (d.i <- s; d.i_pos <- j; d.i_max <- j + l - 1) + +let refill k d = match d.src with (* get new input in [d.i] and [k]ontinue. *) +| `Manual -> d.k <- k; `Await +| `String _ -> eoi d; k d +| `Channel ic -> + let rc = input ic d.i 0 (String.length d.i) in + (src d d.i 0 rc; k d) + +let t_need d need = d.t_len <- 0; d.t_need <- need +let rec t_fill k d = (* get [d.t_need] bytes (or less if eoi) in [i.t]. *) + let blit d l = + unsafe_blit d.i d.i_pos d.t d.t_len (* write pos. *) l; + d.i_pos <- d.i_pos + l; d.t_len <- d.t_len + l; + in + let rem = i_rem d in + if rem < 0 (* eoi *) then k d else + let need = d.t_need - d.t_len in + if rem < need then (blit d rem; refill (t_fill k) d) else (blit d need; k d) + +let ret k v byte_count d = (* return post-processed [v]. *) + d.k <- k; d.byte_count <- d.byte_count + byte_count; d.pp d v + +(* Decoders. *) + +let rec decode_us_ascii d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_us_ascii d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_us_ascii (r_us_ascii d.i j) 1 d + +let rec decode_iso_8859_1 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_iso_8859_1 d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_iso_8859_1 (r_iso_8859_1 d.i j) 1 d + +(* UTF-8 decoder *) + +let rec t_decode_utf_8 d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 d.t_len) d.t_len d + +and decode_utf_8 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_8 d) else + let need = unsafe_array_get utf_8_len (unsafe_byte d.i d.i_pos) in + if rem < need then (t_need d need; t_fill t_decode_utf_8 d) else + let j = d.i_pos in + if need = 0 + then (d.i_pos <- d.i_pos + 1; ret decode_utf_8 (malformed d.i j 1) 1 d) + else (d.i_pos <- d.i_pos + need; ret decode_utf_8 (r_utf_8 d.i j need) need d) + +(* UTF-16BE decoder *) + +let rec t_decode_utf_16be_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16be (malformed_pair true hi d.t 0 d.t_len) bcount d + else ret decode_utf_16be (r_utf_16_lo hi d.t 0 1) bcount d + +and t_decode_utf_16be d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16be (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16be_lo (r_utf_16 d.t 0 1) d + +and decode_utf_16be_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16be v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16be_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16be (r_utf_16_lo hi d.i j (j + 1)) 4 d + +and decode_utf_16be d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16be d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16be d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16be_lo (r_utf_16 d.i j (j + 1)) d + +(* UTF-16LE decoder, same as UTF-16BE with byte swapped. *) + +let rec t_decode_utf_16le_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16le (malformed_pair false hi d.t 0 d.t_len) bcount d + else ret decode_utf_16le (r_utf_16_lo hi d.t 1 0) bcount d + +and t_decode_utf_16le d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16le (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16le_lo (r_utf_16 d.t 1 0) d + +and decode_utf_16le_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16le v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16le_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16le (r_utf_16_lo hi d.i (j + 1) j) 4 d + +and decode_utf_16le d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16le d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16le d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16le_lo (r_utf_16 d.i (j + 1) j) d + +(* Encoding guessing. The guess is simple but starting the decoder + after is tedious, uutf's decoders are not designed to put bytes + back in the stream. *) + +let guessed_utf_8 d = (* start decoder after `UTF_8 guess. *) + let b3 d = (* handles the third read byte. *) + let b3 = unsafe_byte d.t 2 in + match utf_8_len.(b3) with + | 0 -> ret decode_utf_8 (malformed d.t 2 1) 1 d + | n -> + d.t_need <- n; d.t_len <- 1; unsafe_set_byte d.t 0 b3; + t_fill t_decode_utf_8 d + in + let b2 d = (* handle second read byte. *) + let b2 = unsafe_byte d.t 1 in + let b3 = if d.t_len > 2 then b3 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b2) with + | 0 -> ret b3 (malformed d.t 1 1) 1 d + | 1 -> ret b3 (r_utf_8 d.t 1 1) 1 d + | n -> (* copy d.t.(1-2) to d.t.(0-1) and decode *) + d.t_need <- n; + unsafe_set_byte d.t 0 b2; + if (d.t_len < 3) then d.t_len <- 1 else + (d.t_len <- 2; unsafe_set_byte d.t 1 (unsafe_byte d.t 2); ); + t_fill t_decode_utf_8 d + in + let b1 = unsafe_byte d.t 0 in (* handle first read byte. *) + let b2 = if d.t_len > 1 then b2 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b1) with + | 0 -> ret b2 (malformed d.t 0 1) 1 d + | 1 -> ret b2 (r_utf_8 d.t 0 1) 1 d + | 2 -> + if d.t_len < 2 then ret decode_utf_8 (malformed d.t 0 1) 1 d else + if d.t_len < 3 then ret decode_utf_8 (r_utf_8 d.t 0 2) 2 d else + ret b3 (r_utf_8 d.t 0 2) 2 d + | 3 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 3) 3 d + | 4 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else (d.t_need <- 4; t_fill t_decode_utf_8 d) + | n -> assert false + +let guessed_utf_16 d be v = (* start decoder after `UTF_16{BE,LE} guess. *) + let decode_utf_16, t_decode_utf_16, t_decode_utf_16_lo, j0, j1 = + if be then decode_utf_16be, t_decode_utf_16be, t_decode_utf_16be_lo, 0, 1 + else decode_utf_16le, t_decode_utf_16le, t_decode_utf_16le_lo, 1, 0 + in + let b3 k d = + if d.t_len < 3 then decode_utf_16 d (* decodes `End *) else + begin (* copy d.t.(2) to d.t.(0) and decode. *) + d.t_need <- 2; d.t_len <- 1; + unsafe_set_byte d.t 0 (unsafe_byte d.t 2); + t_fill k d + end + in + match v with + | `BOM -> ret (b3 t_decode_utf_16) (`Uchar u_bom) 2 d + | `ASCII u -> ret (b3 t_decode_utf_16) (`Uchar u) 2 d + | `Decode -> + match r_utf_16 d.t j0 j1 with + | `Malformed _ | `Uchar _ as v -> ret (b3 t_decode_utf_16) v 2 d + | `Hi hi -> + if d.t_len < 3 + then ret decode_utf_16 (malformed_pair be hi "" 0 0) d.t_len d + else (b3 (t_decode_utf_16_lo hi)) d + +let guess_encoding d = (* guess encoding and start decoder. *) + let setup d = match r_encoding d.t 0 d.t_len with + | `UTF_8 r -> + d.encoding <- `UTF_8; d.k <- decode_utf_8; + begin match r with + | `BOM -> ret decode_utf_8 (`Uchar u_bom) 3 d + | `Decode -> guessed_utf_8 d + | `End -> `End + end + | `UTF_16BE r -> + d.encoding <- `UTF_16BE; d.k <- decode_utf_16be; guessed_utf_16 d true r + | `UTF_16LE r -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; guessed_utf_16 d false r + + in + (t_need d 3; t_fill setup d) + +(* Character post-processors. Used for BOM handling, newline + normalization and position tracking. The [pp_remove_bom] is only + used for the first character to remove a possible initial BOM and + handle UTF-16 endianness recognition. *) + +let nline d = d.col <- 0; d.line <- d.line + 1 (* inlined. *) +let ncol d = d.col <- d.col + 1 (* inlined. *) +let ncount d = d.count <- d.count + 1 (* inlined. *) +let cr d b = d.last_cr <- b (* inlined. *) + +let pp_remove_bom utf16 pp d = function(* removes init. BOM, handles UTF-16. *) +| `Uchar 0xFEFF (* BOM *) -> + if utf16 then (d.encoding <- `UTF_16BE; d.k <- decode_utf_16be); + d.removed_bom <- true; d.pp <- pp; d.k d +| `Uchar 0xFFFE (* BOM reversed from decode_utf_16be *) when utf16 -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; + d.removed_bom <- true; d.pp <- pp; d.k d +| `Malformed _ | `Uchar _ as v -> + d.removed_bom <- false; d.pp <- pp; d.pp d v + +let pp_nln_none d = function +| `Uchar 0x000A (* LF *) as v -> + let last_cr = d.last_cr in + cr d false; ncount d; if last_cr then v else (nline d; v) +| `Uchar 0x000D (* CR *) as v -> cr d true; ncount d; nline d; v +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) as v -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_readline d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_nlf d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar 0x0085 (* NEL *) -> cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar (0x000C | 0x2028 | 0x2029) as v (* FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_ascii d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) as v (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let decode_fun = function +| `UTF_8 -> decode_utf_8 +| `UTF_16 -> decode_utf_16be (* see [pp_remove_bom]. *) +| `UTF_16BE -> decode_utf_16be +| `UTF_16LE -> decode_utf_16le +| `US_ASCII -> decode_us_ascii +| `ISO_8859_1 -> decode_iso_8859_1 + +let decoder ?nln ?encoding src = + let pp, nl = match nln with + | None -> pp_nln_none, 0x000A (* not used. *) + | Some (`ASCII nl) -> pp_nln_ascii, nl + | Some (`NLF nl) -> pp_nln_nlf, nl + | Some (`Readline nl) -> pp_nln_readline, nl + in + let encoding, k = match encoding with + | None -> `UTF_8, guess_encoding + | Some e -> (e :> decoder_encoding), decode_fun e + in + let i, i_pos, i_max = match src with + | `Manual -> "", 1, 0 (* implies src_rem d = 0. *) + | `Channel _ -> String.create io_buffer_size, 1, 0 (* idem. *) + | `String s -> s, 0, String.length s - 1 + in + { src = (src :> src); encoding; nln = (nln :> nln option); nl; + i; i_pos; i_max; t = String.create 4; t_len = 0; t_need = 0; + removed_bom = false; last_cr = false; line = 1; col = 0; + byte_count = 0; count = 0; + pp = pp_remove_bom (encoding = `UTF_16) pp; k } + +let decode d = d.k d +let decoder_line d = d.line +let decoder_col d = d.col +let decoder_byte_count d = d.byte_count +let decoder_count d = d.count +let decoder_removed_bom d = d.removed_bom +let decoder_src d = d.src +let decoder_nln d = d.nln +let decoder_encoding d = d.encoding +let set_decoder_encoding d e = + d.encoding <- (e :> decoder_encoding); d.k <- decode_fun e + +(* Encode *) + +type dst = [ `Channel of out_channel | `Buffer of Buffer.t | `Manual ] +type encode = [ `Await | `End | `Uchar of uchar ] +type encoder = + { dst : dst; (* output destination. *) + encoding : encoding; (* encoded encoding. *) + mutable o : string; (* current output chunk. *) + mutable o_pos : int; (* next output position to write. *) + mutable o_max : int; (* maximal output position to write. *) + t : string; (* four bytes buffer for overlapping writes. *) + mutable t_pos : int; (* next position to read in [t]. *) + mutable t_max : int; (* maximal position to read in [t]. *) + mutable k : (* encoder continuation. *) + encoder -> encode -> [ `Ok | `Partial ] } + +(* On encodes that overlap two (or more) [e.o] buffers, we encode the + character to the temporary buffer [o.t] and continue with + [tmp_flush] to write this data on the different [e.o] buffers. If + the [e.o] buffers are not too small this is faster than + continuation based byte per byte writes. *) + +let o_rem e = e.o_max - e.o_pos + 1 (* remaining bytes to write in [e.o]. *) +let dst e s j l = (* set [e.o] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l; + e.o <- s; e.o_pos <- j; e.o_max <- j + l - 1 + +let partial k e = function `Await -> k e | `Uchar _ | `End -> invalid_encode () +let flush k e = match e.dst with(* get free storage in [d.o] and [k]ontinue. *) +| `Manual -> e.k <- partial k; `Partial +| `Buffer b -> Buffer.add_substring b e.o 0 e.o_pos; e.o_pos <- 0; k e +| `Channel oc -> output oc e.o 0 e.o_pos; e.o_pos <- 0; k e + +let t_range e max = e.t_pos <- 0; e.t_max <- max +let rec t_flush k e = (* flush [d.t] up to [d.t_max] in [d.i]. *) + let blit e l = + unsafe_blit e.t e.t_pos e.o e.o_pos l; + e.o_pos <- e.o_pos + l; e.t_pos <- e.t_pos + l + in + let rem = o_rem e in + let len = e.t_max - e.t_pos + 1 in + if rem < len then (blit e rem; flush (t_flush k) e) else (blit e len; k e) + +(* Encoders. *) + +let rec encode_utf_8 e v = + let k e = e.k <- encode_utf_8; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u as v -> + let rem = o_rem e in + if u <= 0x007F then + if rem < 1 then flush (fun e -> encode_utf_8 e v) e else + (unsafe_set_byte e.o e.o_pos u; e.o_pos <- e.o_pos + 1; k e) + else if u <= 0x07FF then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (0xC0 lor (u lsr 6)); + unsafe_set_byte s (j + 1) (0x80 lor (u land 0x3F)); + k e + end + else if u <= 0xFFFF then + begin + let s, j, k = + if rem < 3 then (t_range e 2; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 3; e.o, j, k) + in + unsafe_set_byte s j (0xE0 lor (u lsr 12)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor (u land 0x3F)); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + unsafe_set_byte s j (0xF0 lor (u lsr 18)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 12) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 3) (0x80 lor (u land 0x3F)); + k e + end + +let rec encode_utf_16be e v = + let k e = e.k <- encode_utf_16be; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u lsr 8); + unsafe_set_byte s (j + 1) (u land 0xFF); + k e + end else begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi lsr 8); + unsafe_set_byte s (j + 1) (hi land 0xFF); + unsafe_set_byte s (j + 2) (lo lsr 8); + unsafe_set_byte s (j + 3) (lo land 0xFF); + k e + end + +let rec encode_utf_16le e v = (* encode_uft_16be with bytes swapped. *) + let k e = e.k <- encode_utf_16le; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u land 0xFF); + unsafe_set_byte s (j + 1) (u lsr 8); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi land 0xFF); + unsafe_set_byte s (j + 1) (hi lsr 8); + unsafe_set_byte s (j + 2) (lo land 0xFF); + unsafe_set_byte s (j + 3) (lo lsr 8); + k e + end + +let encode_fun = function +| `UTF_8 -> encode_utf_8 +| `UTF_16 -> encode_utf_16be +| `UTF_16BE -> encode_utf_16be +| `UTF_16LE -> encode_utf_16le + +let encoder encoding dst = + let o, o_pos, o_max = match dst with + | `Manual -> "", 1, 0 (* implies o_rem e = 0. *) + | `Buffer _ + | `Channel _ -> String.create io_buffer_size, 0, io_buffer_size - 1 + in + { dst = (dst :> dst); encoding = (encoding :> encoding); o; o_pos; o_max; + t = String.create 4; t_pos = 1; t_max = 0; k = encode_fun encoding} + +let encode e v = e.k e (v :> encode) +let encoder_encoding e = e.encoding +let encoder_dst e = e.dst + +(* Manual sources and destinations. *) + +module Manual = struct + let src = src + let dst = dst + let dst_rem = o_rem +end + +(* Strings folders and Buffer encoders *) + +module String = struct + let encoding_guess s = match r_encoding s 0 (max (String.length s) 3) with + | `UTF_8 d -> `UTF_8, (d = `BOM) + | `UTF_16BE d -> `UTF_16BE, (d = `BOM) + | `UTF_16LE d -> `UTF_16LE, (d = `BOM) + + type 'a folder = + 'a -> int -> [ `Uchar of uchar | `Malformed of string ] -> 'a + + let fold_utf_8 f acc s = + let rec loop acc f s i l = + if i = l then acc else + let need = unsafe_array_get utf_8_len (unsafe_byte s i) in + if need = 0 then loop (f acc i (malformed s i 1)) f s (i + 1) l else + let rem = l - i in + if rem < need then f acc i (malformed s i rem) else + loop (f acc i (r_utf_8 s i need)) f s (i + need) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16be f acc s = + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s i (i + 1) with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 2) (i + 3))) f s (i + 4) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16le f acc s = (* [fold_utf_16be], bytes swapped. *) + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s (i + 1) i with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 3) (i + 2))) f s (i + 4) l + in + loop acc f s 0 (String.length s) +end + +module Buffer = struct + let add_utf_8 b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u <= 0x007F then + (w u) + else if u <= 0x07FF then + (w (0xC0 lor (u lsr 6)); + w (0x80 lor (u land 0x3F))) + else if u <= 0xFFFF then + (w (0xE0 lor (u lsr 12)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + else + (w (0xF0 lor (u lsr 18)); + w (0x80 lor ((u lsr 12) land 0x3F)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + + let add_utf_16be b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u lsr 8); w (u land 0xFF)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi lsr 8); w (hi land 0xFF); + w (lo lsr 8); w (lo land 0xFF) + + let add_utf_16le b u = (* swapped add_utf_16be. *) + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u land 0xFF); w (u lsr 8)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi land 0xFF); w (hi lsr 8); + w (lo land 0xFF); w (lo lsr 8) +end + +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/PHP/drupal.script! b/samples/PHP/drupal.php similarity index 100% rename from samples/PHP/drupal.script! rename to samples/PHP/drupal.php diff --git a/samples/PHP/php.script! b/samples/PHP/php similarity index 100% rename from samples/PHP/php.script! rename to samples/PHP/php diff --git a/samples/PHP/php-script.script! b/samples/PHP/php-script similarity index 100% rename from samples/PHP/php-script.script! rename to samples/PHP/php-script diff --git a/samples/PHP/php2.script! b/samples/PHP/php2 similarity index 100% rename from samples/PHP/php2.script! rename to samples/PHP/php2 diff --git a/samples/PLSQL/prime#.plsql b/samples/PLSQL/prime#.plsql new file mode 100644 index 00000000..1a4785a1 --- /dev/null +++ b/samples/PLSQL/prime#.plsql @@ -0,0 +1,93 @@ +create or replace package prime# +is + invalid_argument_error exception; + + function nth ( + i_num pls_integer + ) return number; +end prime#; +/ + +create or replace package body prime# +is + type t_primes is table of number index by pls_integer; + b_primes t_primes; + + function is_prime( + i_candidate number + ) return boolean + is + l_num number := 1; + l_prime number; + l_result number; + begin + if i_candidate < 2 then + return false; + end if; + + loop + l_prime := nth(l_num); + if l_prime = i_candidate then + return true; + end if; + + l_result := i_candidate / l_prime; + if l_result = ceil(l_result) then + return false; + end if; + + l_num := l_num + 1; + exit when l_result <= l_prime; + end loop; + + return true; + end is_prime; + + function next ( + i_prime pls_integer + ) return number + is + l_next number; + begin + l_next := i_prime + case mod(i_prime, 2) when 0 then 1 else 2 end; + + while not is_prime(l_next) loop + l_next := l_next + 2; + end loop; + return l_next; + end next; + + function nth ( + i_num pls_integer + ) return number + is + l_index number := 2; + l_prime number := 3; + begin + if i_num < 1 + or ceil(i_num) != i_num + then + raise invalid_argument_error; + end if; + + case i_num + when 1 then return 2; + else + if b_primes.exists(i_num) then + return b_primes(i_num); + end if; + while l_index < i_num loop + l_index := l_index + 1; + if b_primes.exists(l_index) then + l_prime := b_primes(l_index); + else + l_prime := next(l_prime); + b_primes(l_index) := l_prime; + end if; + end loop; + return l_prime; + end case; + end nth; + +end prime#; +/ \ No newline at end of file diff --git a/samples/Perl/perl.script! b/samples/Perl/perl similarity index 100% rename from samples/Perl/perl.script! rename to samples/Perl/perl diff --git a/samples/Prolog/dleak-report.script! b/samples/Prolog/dleak-report similarity index 100% rename from samples/Prolog/dleak-report.script! rename to samples/Prolog/dleak-report diff --git a/samples/Public Key/id_dsa.asc b/samples/Public Key/id_dsa.asc new file mode 100644 index 00000000..dc568f9d --- /dev/null +++ b/samples/Public Key/id_dsa.asc @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAIXi8hv+I7/bYzbve0Wg/Gv9yeZX0H/qON6rwJTPFICTncfK2t/Kc2Ec7+GYSkEIj7ok5wzHgv51SFTM6dvK/8hrjFE8frNztRK2TwZCvgYkbcBoprUstE86ZHBA1pAVPfHAOcF708Yk+KsxDONxkzu7FWw4HWqycqPtaavdcgsZAAAAFQC0uvetk3WY9sFNU71a32JKjkmTnwAAAIBlm1eGuATcZJvlk2jerZnTO54MlO/htWQrI4pZGLdhukOPgF1lsTUSwmCN8k8xxkyRL5Yl/8GUcdUfC4gbZvsbZGtvq5gFZSVTfkKJrlwykpZcaijWXtDiWSpqszs0MfexLMdpZSkNsWp7TEoWcqNLN8X7ohlsLAhcdrAbGqFblAAAAIBgW12r208h9AA3rH3t+6HKLXuPO1BQPuE+fKQg1Aet40c1gxUkCF/J+xdAITE1v7kmssZxBvDqUPgpvYCm+ZfA0j712pvt4JmQcfPn9Go003kq6/cgI4tCOy1dgQDLr0E5Jd7YqIglkr25fkDtKRFBRue3FmCGOdaM4NAAdYU48Q== lars@junk diff --git a/samples/Public Key/id_rsa.asc b/samples/Public Key/id_rsa.asc new file mode 100644 index 00000000..4c936646 --- /dev/null +++ b/samples/Public Key/id_rsa.asc @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw3QQtYgRViVH8ZpkQ2A7BuCeyPYC4hB9kKNhxwUfJ2hFgW8soGMBhsLN+vOeAJ2IXDMsezJO2/qhoZFQMvHoWpWTRTLPeNtBsKD+nhOZX28A4D+QRzVZ6hdWoh9W+mIP69MIT3aX35oLb86IycbNdRJlEK4FAUt7tjezNkU7boQ== root@use1-2.nitrousbox.com diff --git a/samples/Public Key/sshkey1.asc b/samples/Public Key/sshkey1.asc new file mode 100644 index 00000000..ce491bc3 --- /dev/null +++ b/samples/Public Key/sshkey1.asc @@ -0,0 +1,7 @@ +---- BEGIN SSH2 PUBLIC KEY ---- +Subject: galb +Comment: 1024-bit rsa, created by galb@shimi Mon Jan 15 08:31:24 2001 +AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt459 +6k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6 +NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= +---- END SSH2 PUBLIC KEY ---- diff --git a/samples/Puppet/apacheinit.pp b/samples/Puppet/apacheinit.pp new file mode 100644 index 00000000..37d866ad --- /dev/null +++ b/samples/Puppet/apacheinit.pp @@ -0,0 +1,378 @@ +# Class: apache +# +# This class installs Apache +# +# Parameters: +# +# Actions: +# - Install Apache +# - Manage Apache service +# +# Requires: +# +# Sample Usage: +# +class apache ( + $apache_name = $::apache::params::apache_name, + $service_name = $::apache::params::service_name, + $default_mods = true, + $default_vhost = true, + $default_charset = undef, + $default_confd_files = true, + $default_ssl_vhost = false, + $default_ssl_cert = $::apache::params::default_ssl_cert, + $default_ssl_key = $::apache::params::default_ssl_key, + $default_ssl_chain = undef, + $default_ssl_ca = undef, + $default_ssl_crl_path = undef, + $default_ssl_crl = undef, + $default_ssl_crl_check = undef, + $default_type = 'none', + $ip = undef, + $service_enable = true, + $service_manage = true, + $service_ensure = 'running', + $purge_configs = true, + $purge_vhost_dir = undef, + $purge_vdir = false, + $serveradmin = 'root@localhost', + $sendfile = 'On', + $error_documents = false, + $timeout = '120', + $httpd_dir = $::apache::params::httpd_dir, + $server_root = $::apache::params::server_root, + $conf_dir = $::apache::params::conf_dir, + $confd_dir = $::apache::params::confd_dir, + $vhost_dir = $::apache::params::vhost_dir, + $vhost_enable_dir = $::apache::params::vhost_enable_dir, + $mod_dir = $::apache::params::mod_dir, + $mod_enable_dir = $::apache::params::mod_enable_dir, + $mpm_module = $::apache::params::mpm_module, + $lib_path = $::apache::params::lib_path, + $conf_template = $::apache::params::conf_template, + $servername = $::apache::params::servername, + $manage_user = true, + $manage_group = true, + $user = $::apache::params::user, + $group = $::apache::params::group, + $keepalive = $::apache::params::keepalive, + $keepalive_timeout = $::apache::params::keepalive_timeout, + $max_keepalive_requests = $::apache::params::max_keepalive_requests, + $logroot = $::apache::params::logroot, + $logroot_mode = $::apache::params::logroot_mode, + $log_level = $::apache::params::log_level, + $log_formats = {}, + $ports_file = $::apache::params::ports_file, + $docroot = $::apache::params::docroot, + $apache_version = $::apache::version::default, + $server_tokens = 'OS', + $server_signature = 'On', + $trace_enable = 'On', + $allow_encoded_slashes = undef, + $package_ensure = 'installed', + $use_optional_includes = $::apache::params::use_optional_includes, +) inherits ::apache::params { + validate_bool($default_vhost) + validate_bool($default_ssl_vhost) + validate_bool($default_confd_files) + # true/false is sufficient for both ensure and enable + validate_bool($service_enable) + validate_bool($service_manage) + validate_bool($use_optional_includes) + + $valid_mpms_re = $apache_version ? { + '2.4' => '(event|itk|peruser|prefork|worker)', + default => '(event|itk|prefork|worker)' + } + + if $mpm_module { + validate_re($mpm_module, $valid_mpms_re) + } + + if $allow_encoded_slashes { + validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.") + } + + # NOTE: on FreeBSD it's mpm module's responsibility to install httpd package. + # NOTE: the same strategy may be introduced for other OSes. For this, you + # should delete the 'if' block below and modify all MPM modules' manifests + # such that they include apache::package class (currently event.pp, itk.pp, + # peruser.pp, prefork.pp, worker.pp). + if $::osfamily != 'FreeBSD' { + package { 'httpd': + ensure => $package_ensure, + name => $apache_name, + notify => Class['Apache::Service'], + } + } + validate_re($sendfile, [ '^[oO]n$' , '^[oO]ff$' ]) + + # declare the web server user and group + # Note: requiring the package means the package ought to create them and not puppet + validate_bool($manage_user) + if $manage_user { + user { $user: + ensure => present, + gid => $group, + require => Package['httpd'], + } + } + validate_bool($manage_group) + if $manage_group { + group { $group: + ensure => present, + require => Package['httpd'] + } + } + + validate_apache_log_level($log_level) + + class { '::apache::service': + service_name => $service_name, + service_enable => $service_enable, + service_manage => $service_manage, + service_ensure => $service_ensure, + } + + # Deprecated backwards-compatibility + if $purge_vdir { + warning('Class[\'apache\'] parameter purge_vdir is deprecated in favor of purge_configs') + $purge_confd = $purge_vdir + } else { + $purge_confd = $purge_configs + } + + # Set purge vhostd appropriately + if $purge_vhost_dir == undef { + $purge_vhostd = $purge_confd + } else { + $purge_vhostd = $purge_vhost_dir + } + + Exec { + path => '/bin:/sbin:/usr/bin:/usr/sbin', + } + + exec { "mkdir ${confd_dir}": + creates => $confd_dir, + require => Package['httpd'], + } + file { $confd_dir: + ensure => directory, + recurse => true, + purge => $purge_confd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + if ! defined(File[$mod_dir]) { + exec { "mkdir ${mod_dir}": + creates => $mod_dir, + require => Package['httpd'], + } + # Don't purge available modules if an enable dir is used + $purge_mod_dir = $purge_configs and !$mod_enable_dir + file { $mod_dir: + ensure => directory, + recurse => true, + purge => $purge_mod_dir, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $mod_enable_dir and ! defined(File[$mod_enable_dir]) { + $mod_load_dir = $mod_enable_dir + exec { "mkdir ${mod_enable_dir}": + creates => $mod_enable_dir, + require => Package['httpd'], + } + file { $mod_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_configs, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $mod_load_dir = $mod_dir + } + + if ! defined(File[$vhost_dir]) { + exec { "mkdir ${vhost_dir}": + creates => $vhost_dir, + require => Package['httpd'], + } + file { $vhost_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $vhost_enable_dir and ! defined(File[$vhost_enable_dir]) { + $vhost_load_dir = $vhost_enable_dir + exec { "mkdir ${vhost_load_dir}": + creates => $vhost_load_dir, + require => Package['httpd'], + } + file { $vhost_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $vhost_load_dir = $vhost_dir + } + + concat { $ports_file: + owner => 'root', + group => $::apache::params::root_group, + mode => '0644', + notify => Class['Apache::Service'], + require => Package['httpd'], + } + concat::fragment { 'Apache ports header': + ensure => present, + target => $ports_file, + content => template('apache/ports_header.erb') + } + + if $::apache::conf_dir and $::apache::params::conf_file { + case $::osfamily { + 'debian': { + $pidfile = "\${APACHE_PID_FILE}" + $error_log = 'error.log' + $scriptalias = '/usr/lib/cgi-bin' + $access_log_file = 'access.log' + } + 'redhat': { + $pidfile = 'run/httpd.pid' + $error_log = 'error_log' + $scriptalias = '/var/www/cgi-bin' + $access_log_file = 'access_log' + } + 'freebsd': { + $pidfile = '/var/run/httpd.pid' + $error_log = 'httpd-error.log' + $scriptalias = '/usr/local/www/apache24/cgi-bin' + $access_log_file = 'httpd-access.log' + } 'gentoo': { + $pidfile = '/run/apache2.pid' + $error_log = 'error.log' + $error_documents_path = '/usr/share/apache2/error' + $scriptalias = '/var/www/localhost/cgi-bin' + $access_log_file = 'access.log' + + ::portage::makeconf { 'apache2_modules': + content => $default_mods, + } + file { [ + '/etc/apache2/modules.d/.keep_www-servers_apache-2', + '/etc/apache2/vhosts.d/.keep_www-servers_apache-2' + ]: + ensure => absent, + require => Package['httpd'], + } + } + default: { + fail("Unsupported osfamily ${::osfamily}") + } + } + + $apxs_workaround = $::osfamily ? { + 'freebsd' => true, + default => false + } + + # Template uses: + # - $pidfile + # - $user + # - $group + # - $logroot + # - $error_log + # - $sendfile + # - $mod_dir + # - $ports_file + # - $confd_dir + # - $vhost_dir + # - $error_documents + # - $error_documents_path + # - $apxs_workaround + # - $keepalive + # - $keepalive_timeout + # - $max_keepalive_requests + # - $server_root + # - $server_tokens + # - $server_signature + # - $trace_enable + file { "${::apache::conf_dir}/${::apache::params::conf_file}": + ensure => file, + content => template($conf_template), + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + # preserve back-wards compatibility to the times when default_mods was + # only a boolean value. Now it can be an array (too) + if is_array($default_mods) { + class { '::apache::default_mods': + all => false, + mods => $default_mods, + } + } else { + class { '::apache::default_mods': + all => $default_mods, + } + } + class { '::apache::default_confd_files': + all => $default_confd_files + } + if $mpm_module { + class { "::apache::mod::${mpm_module}": } + } + + $default_vhost_ensure = $default_vhost ? { + true => 'present', + false => 'absent' + } + $default_ssl_vhost_ensure = $default_ssl_vhost ? { + true => 'present', + false => 'absent' + } + + ::apache::vhost { 'default': + ensure => $default_vhost_ensure, + port => 80, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_vhost, + } + $ssl_access_log_file = $::osfamily ? { + 'freebsd' => $access_log_file, + default => "ssl_${access_log_file}", + } + ::apache::vhost { 'default-ssl': + ensure => $default_ssl_vhost_ensure, + port => 443, + ssl => true, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $ssl_access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_ssl_vhost, + } + } +} diff --git a/samples/Python/python.script! b/samples/Python/python similarity index 100% rename from samples/Python/python.script! rename to samples/Python/python diff --git a/samples/Python/python2.script! b/samples/Python/python2 similarity index 100% rename from samples/Python/python2.script! rename to samples/Python/python2 diff --git a/samples/Python/python3.script! b/samples/Python/python3 similarity index 100% rename from samples/Python/python3.script! rename to samples/Python/python3 diff --git a/samples/QMake/qmake.script! b/samples/QMake/qmake similarity index 100% rename from samples/QMake/qmake.script! rename to samples/QMake/qmake diff --git a/samples/R/git-punchcard.script! b/samples/R/git-punchcard similarity index 100% rename from samples/R/git-punchcard.script! rename to samples/R/git-punchcard diff --git a/samples/RenderScript/convolve3x3.rs b/samples/RenderScript/convolve3x3.rs new file mode 100644 index 00000000..2acffab0 --- /dev/null +++ b/samples/RenderScript/convolve3x3.rs @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma version(1) +#pragma rs java_package_name(com.android.gallery3d.filtershow.filters) +#pragma rs_fp_relaxed + +int32_t gWidth; +int32_t gHeight; +const uchar4 *gPixels; +rs_allocation gIn; + +float gCoeffs[9]; + +void root(const uchar4 *in, uchar4 *out, const void *usrData, uint32_t x, uint32_t y) { + uint32_t x1 = min((int32_t)x+1, gWidth-1); + uint32_t x2 = max((int32_t)x-1, 0); + uint32_t y1 = min((int32_t)y+1, gHeight-1); + uint32_t y2 = max((int32_t)y-1, 0); + + float4 p00 = rsUnpackColor8888(gPixels[x1 + gWidth * y1]); + float4 p01 = rsUnpackColor8888(gPixels[x + gWidth * y1]); + float4 p02 = rsUnpackColor8888(gPixels[x2 + gWidth * y1]); + float4 p10 = rsUnpackColor8888(gPixels[x1 + gWidth * y]); + float4 p11 = rsUnpackColor8888(gPixels[x + gWidth * y]); + float4 p12 = rsUnpackColor8888(gPixels[x2 + gWidth * y]); + float4 p20 = rsUnpackColor8888(gPixels[x1 + gWidth * y2]); + float4 p21 = rsUnpackColor8888(gPixels[x + gWidth * y2]); + float4 p22 = rsUnpackColor8888(gPixels[x2 + gWidth * y2]); + + p00 *= gCoeffs[0]; + p01 *= gCoeffs[1]; + p02 *= gCoeffs[2]; + p10 *= gCoeffs[3]; + p11 *= gCoeffs[4]; + p12 *= gCoeffs[5]; + p20 *= gCoeffs[6]; + p21 *= gCoeffs[7]; + p22 *= gCoeffs[8]; + + p00 += p01; + p02 += p10; + p11 += p12; + p20 += p21; + + p22 += p00; + p02 += p11; + + p20 += p22; + p20 += p02; + + p20 = clamp(p20, 0.f, 1.f); + *out = rsPackColorTo8888(p20.r, p20.g, p20.b); +} diff --git a/samples/RenderScript/scenegraph_objects.rsh b/samples/RenderScript/scenegraph_objects.rsh new file mode 100644 index 00000000..bdca3ab1 --- /dev/null +++ b/samples/RenderScript/scenegraph_objects.rsh @@ -0,0 +1,323 @@ +// Copyright (C) 2011-2012 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma version(1) + +#pragma rs java_package_name(com.android.scenegraph) + +#ifndef _TRANSFORM_DEF_ +#define _TRANSFORM_DEF_ + +#include "rs_graphics.rsh" + +#define TRANSFORM_NONE 0 +#define TRANSFORM_TRANSLATE 1 +#define TRANSFORM_ROTATE 2 +#define TRANSFORM_SCALE 3 + +#define CULL_FRUSTUM 0 +#define CULL_ALWAYS 2 + +#define LIGHT_POINT 0 +#define LIGHT_DIRECTIONAL 1 + +// Shader params that involve only data +#define SHADER_PARAM_DATA_ONLY 10000 +#define SHADER_PARAM_FLOAT4_DATA 10001 +#define SHADER_PARAM_TRANSFORM_DATA 10002 +#define SHADER_PARAM_TRANSFORM_MODEL 10003 + +// Shader params that involve camera +#define SHADER_PARAM_CAMERA 1000 +#define SHADER_PARAM_FLOAT4_CAMERA_POS 1001 +#define SHADER_PARAM_FLOAT4_CAMERA_DIR 1002 +#define SHADER_PARAM_TRANSFORM_VIEW 1003 +#define SHADER_PARAM_TRANSFORM_PROJ 1004 +#define SHADER_PARAM_TRANSFORM_VIEW_PROJ 1005 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW 1006 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW_PROJ 1007 + +// Shader Params that only involve lights +#define SHADER_PARAM_LIGHT 100 +#define SHADER_PARAM_FLOAT4_LIGHT_COLOR 103 +#define SHADER_PARAM_FLOAT4_LIGHT_POS 104 +#define SHADER_PARAM_FLOAT4_LIGHT_DIR 105 + +#define SHADER_PARAM_TEXTURE 10 + +#define TEXTURE_NONE 0 +#define TEXTURE_2D 1 +#define TEXTURE_CUBE 2 +#define TEXTURE_RENDER_TARGET 3 + +typedef struct TransformComponent_s { + float4 value; + int type; + rs_allocation name; +} SgTransformComponent; + +typedef struct __attribute__((packed, aligned(4))) SgTransform { + rs_matrix4x4 globalMat; + rs_matrix4x4 localMat; + + rs_allocation components; + int isDirty; + + rs_allocation children; + rs_allocation name; + + // Used to check whether transform params need to be updated + uint32_t timestamp; +} SgTransform; + +typedef struct VertexShader_s { + rs_program_vertex program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgVertexShader; + +typedef struct FragmentShader_s { + rs_program_fragment program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // ShaderParam's that set textures + rs_allocation shaderTextureParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgFragmentShader; + +typedef struct RenderState_s { + rs_allocation pv; // VertexShader struct + rs_allocation pf; // FragmentShader struct + rs_program_store ps; + rs_program_raster pr; +} SgRenderState; + +typedef struct Renderable_s { + rs_allocation render_state; + // Buffer with vertex constant data + rs_allocation pv_const; + // ShaderParam's that populate data + rs_allocation pv_constParams; + // Buffer with fragment constant data + rs_allocation pf_const; + // ShaderParam's that populate data + rs_allocation pf_constParams; + rs_allocation pf_textures[8]; + int pf_num_textures; + rs_mesh mesh; + int meshIndex; + rs_allocation transformMatrix; + rs_allocation name; + float4 boundingSphere; + float4 worldBoundingSphere; + int bVolInitialized; + int cullType; // specifies whether to frustum cull + int isVisible; +} SgRenderable; + +typedef struct RenderPass_s { + rs_allocation color_target; + rs_allocation depth_target; + rs_allocation camera; + rs_allocation objects; + + float4 clear_color; + float clear_depth; + bool should_clear_color; + bool should_clear_depth; +} SgRenderPass; + +typedef struct Camera_s { + rs_matrix4x4 proj; + rs_matrix4x4 view; + rs_matrix4x4 viewProj; + float4 position; + float near; + float far; + float horizontalFOV; + float aspect; + rs_allocation name; + rs_allocation transformMatrix; + float4 frustumPlanes[6]; + + int isDirty; + // Timestamp of the camera itself to signal params if anything changes + uint32_t timestamp; + // Timestamp of our transform + uint32_t transformTimestamp; +} SgCamera; + +typedef struct Light_s { + float4 position; + float4 color; + float intensity; + int type; + rs_allocation name; + rs_allocation transformMatrix; +} SgLight; + +// This represents the shader parameter data needed to set a float or transform data +typedef struct ShaderParamData_s { + int type; + float4 float_value; + uint32_t timestamp; + rs_allocation paramName; + rs_allocation camera; + rs_allocation light; + rs_allocation transform; + rs_allocation texture; +} SgShaderParamData; + +// This represents a shader parameter that knows how to update itself for a given +// renderable or shader and contains a timestamp for the last time this buffer was updated +typedef struct ShaderParam_s { + // Used to check whether transform params need to be updated + uint32_t transformTimestamp; + // Used to check whether data params need to be updated + // These are used when somebody set the matrix of float value directly in java + uint32_t dataTimestamp; + // Specifies where in the constant buffer data gets written to + int bufferOffset; + // An instance of SgShaderParamData that could be shared by multiple objects + rs_allocation data; + // How many components of the vector we need to write + int float_vecSize; +} SgShaderParam; + +// This represents a texture object +typedef struct Texture_s { + uint32_t type; + rs_allocation texture; +} SgTexture; + +static void printName(rs_allocation name) { + if (!rsIsObject(name)) { + rsDebug("no name", 0); + return; + } + + rsDebug((const char*)rsGetElementAt(name, 0), 0); +} + +static void printCameraInfo(const SgCamera *cam) { + rsDebug("***** Camera information. ptr:", cam); + printName(cam->name); + const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0); + rsDebug("Transform name:", camTransform); + printName(camTransform->name); + + rsDebug("Aspect: ", cam->aspect); + rsDebug("Near: ", cam->near); + rsDebug("Far: ", cam->far); + rsDebug("Fov: ", cam->horizontalFOV); + rsDebug("Position: ", cam->position); + rsDebug("Proj: ", &cam->proj); + rsDebug("View: ", &cam->view); +} + +static void printLightInfo(const SgLight *light) { + rsDebug("***** Light information. ptr:", light); + printName(light->name); + const SgTransform *lTransform = (const SgTransform *)rsGetElementAt(light->transformMatrix, 0); + rsDebug("Transform name:", lTransform); + printName(lTransform->name); + + rsDebug("Position: ", light->position); + rsDebug("Color : ", light->color); + rsDebug("Intensity: ", light->intensity); + rsDebug("Type: ", light->type); +} + +static void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) { + rsDebug("=================================", screenX); + rsDebug("Point X", screenX); + rsDebug("Point Y", screenY); + + rs_matrix4x4 mvpInv; + rsMatrixLoad(&mvpInv, &cam->viewProj); + rsMatrixInverse(&mvpInv); + + float width = (float)rsgGetWidth(); + float height = (float)rsgGetHeight(); + + float4 pos = {(float)screenX, height - (float)screenY, 0.0f, 1.0f}; + + pos.x /= width; + pos.y /= height; + + rsDebug("Pre Norm X", pos.x); + rsDebug("Pre Norm Y", pos.y); + + pos.xy = pos.xy * 2.0f - 1.0f; + + rsDebug("Norm X", pos.x); + rsDebug("Norm Y", pos.y); + + pos = rsMatrixMultiply(&mvpInv, pos); + float oneOverW = 1.0f / pos.w; + pos.xyz *= oneOverW; + + rsDebug("World X", pos.x); + rsDebug("World Y", pos.y); + rsDebug("World Z", pos.z); + + rsDebug("Cam X", cam->position.x); + rsDebug("Cam Y", cam->position.y); + rsDebug("Cam Z", cam->position.z); + + *vec = normalize(pos.xyz - cam->position.xyz); + rsDebug("Vec X", vec->x); + rsDebug("Vec Y", vec->y); + rsDebug("Vec Z", vec->z); + *pnt = cam->position.xyz; +} + +static bool intersect(const SgRenderable *obj, float3 pnt, float3 vec) { + // Solving for t^2 + Bt + C = 0 + float3 originMinusCenter = pnt - obj->worldBoundingSphere.xyz; + float B = dot(originMinusCenter, vec) * 2.0f; + float C = dot(originMinusCenter, originMinusCenter) - + obj->worldBoundingSphere.w * obj->worldBoundingSphere.w; + + float discriminant = B * B - 4.0f * C; + if (discriminant < 0.0f) { + return false; + } + discriminant = sqrt(discriminant); + + float t0 = (-B - discriminant) * 0.5f; + float t1 = (-B + discriminant) * 0.5f; + + if (t0 > t1) { + float temp = t0; + t0 = t1; + t1 = temp; + } + + // The sphere is behind us + if (t1 < 0.0f) { + return false; + } + return true; +} + + +#endif // _TRANSFORM_DEF_ diff --git a/samples/Ruby/index.json.jbuilder b/samples/Ruby/index.json.jbuilder new file mode 100644 index 00000000..26c7bc67 --- /dev/null +++ b/samples/Ruby/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@courts) do |court| + json.extract! court, :id, :name_r, :region, :region_r, :email, :website + json.url court_url(court, format: :json) +end diff --git a/samples/Ruby/macruby.script! b/samples/Ruby/macruby similarity index 100% rename from samples/Ruby/macruby.script! rename to samples/Ruby/macruby diff --git a/samples/Ruby/ruby.script! b/samples/Ruby/ruby similarity index 100% rename from samples/Ruby/ruby.script! rename to samples/Ruby/ruby diff --git a/samples/Ruby/ruby2.script! b/samples/Ruby/ruby2 similarity index 100% rename from samples/Ruby/ruby2.script! rename to samples/Ruby/ruby2 diff --git a/samples/SaltStack/gimp.sls b/samples/SaltStack/gimp.sls new file mode 100644 index 00000000..392a0c66 --- /dev/null +++ b/samples/SaltStack/gimp.sls @@ -0,0 +1,7 @@ +gimp: + 2.8.14: + installer: 'http://gimper.net/downloads/pub/gimp/stable/windows/gimp-2.8.14-setup-1.exe' + install_flags: 'SP- /SILENT /NORESTART' + full_name: 'GIMP 2.8.14' + uninstaller: '%ProgramFiles%\Gimp 2\uninst\unins000.exe' + uninstall_flags: 'SP- /SILENT /NORESTART' diff --git a/samples/SaltStack/gpg4win-light.sls b/samples/SaltStack/gpg4win-light.sls new file mode 100644 index 00000000..fb2db20e --- /dev/null +++ b/samples/SaltStack/gpg4win-light.sls @@ -0,0 +1,13 @@ +gpg4win-light: + 2.2.3: + installer: 'http://files.gpg4win.org/gpg4win-light-2.2.3.exe' + full_name: 'Gpg4Win (2.2.3)' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles%\GNU\GnuPG\gpg4win-uninstall.exe' + uninstall_flags: '/S' +# +# Note: this 2.2.3 light installer has a bug and it needs to be fixed upstream +# Here are work around instructions under Issue #113 in the meantime +# https://github.com/saltstack/salt-winrepo/issues/113#issuecomment-72837987 +# diff --git a/samples/SaltStack/openoffice.sls b/samples/SaltStack/openoffice.sls new file mode 100644 index 00000000..6956858b --- /dev/null +++ b/samples/SaltStack/openoffice.sls @@ -0,0 +1,21 @@ +openoffice: + 4.1.1: + installer: 'http://downloads.sourceforge.net/project/openofficeorg.mirror/4.1.1/binaries/en-US/Apache_OpenOffice_4.1.1_Win_x86_install_en-US.exe' + full_name: 'OpenOffice 4.1.1' + reboot: False + install_flags: '/S' + uninstaller: 'msiexec.exe' + uninstall_flags: '/qn /x {9395F41D-0F80-432E-9A59-B8E477E7E163}' + +# +# for other languages replace the two occurrences of 'en-US' +# in the download URL with your local two or four letter code below: +# +# 'el', 'en-GB', 'es', 'eu', 'ca', +# 'ca-XR', 'ca-XV', 'cs', 'ru', 'zh-CN', +# 'zh-TW', 'vi', 'ta', 'th', 'tr', 'sk', +# 'sl', 'sr', 'sv', 'pl', 'pt', 'pt-BR', +# 'nb', 'nl', 'lt', 'km', 'ko', 'ja', +# 'it', 'he', 'hi', 'hu', 'gd', 'gl', +# 'fi', 'fr', 'da', 'de', 'bg', 'ast' +# diff --git a/samples/SaltStack/truecrypt.sls b/samples/SaltStack/truecrypt.sls new file mode 100644 index 00000000..0ca99f51 --- /dev/null +++ b/samples/SaltStack/truecrypt.sls @@ -0,0 +1,9 @@ +truecrypt: + 7.1a: + installer: 'https://download.truecrypt.ch/current/TrueCrypt%20Setup%207.1a.exe' + full_name: 'TrueCrypt 7.1a' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles(x86)%\Truecrypt\uninstall.exe' + uninstall_flags: '/S' + diff --git a/samples/Scala/99-bottles-of-beer.script! b/samples/Scala/99-bottles-of-beer similarity index 100% rename from samples/Scala/99-bottles-of-beer.script! rename to samples/Scala/99-bottles-of-beer diff --git a/samples/Scala/scala.script! b/samples/Scala/scala similarity index 100% rename from samples/Scala/scala.script! rename to samples/Scala/scala diff --git a/samples/Shell/99-bottles-of-beer.script! b/samples/Shell/99-bottles-of-beer similarity index 100% rename from samples/Shell/99-bottles-of-beer.script! rename to samples/Shell/99-bottles-of-beer diff --git a/samples/Shell/bash.script! b/samples/Shell/bash similarity index 100% rename from samples/Shell/bash.script! rename to samples/Shell/bash diff --git a/samples/Shell/plugin.script! b/samples/Shell/plugin similarity index 100% rename from samples/Shell/plugin.script! rename to samples/Shell/plugin diff --git a/samples/Shell/sbt.script! b/samples/Shell/sbt similarity index 100% rename from samples/Shell/sbt.script! rename to samples/Shell/sbt diff --git a/samples/Shell/sh.script! b/samples/Shell/sh similarity index 100% rename from samples/Shell/sh.script! rename to samples/Shell/sh diff --git a/samples/Shell/string-chopping.script! b/samples/Shell/string-chopping similarity index 100% rename from samples/Shell/string-chopping.script! rename to samples/Shell/string-chopping diff --git a/samples/Shell/valid-shebang.tool b/samples/Shell/valid-shebang.tool new file mode 100755 index 00000000..8af3a6b2 --- /dev/null +++ b/samples/Shell/valid-shebang.tool @@ -0,0 +1,280 @@ +#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh -x +$I -n+$A $0 | $H -n+$B |$E -D |$F -x; $I -n+$C $0 |$E -D | ./$D | $F -x && exit +H4sICHMSq1ECA3h6ZC50YXIA7Fp9cFRVln+v+yV5gZbXQsToRI1u6xCJmoagZBO1m053B/KJIYF1CBE +EBTdCTPebEPmYhtedcL02UruMzh+KOKJLlc4OZTHZjFDaDSwdPhYTcCSKJRlltNuOTkQlhGh6z7m3ux +M+a//Zrdqq3KrX57577zn33HPPPed3X/XqZ5cK/9slLy/vgRkzshm9n1MoCTrDPH16XrZ5mnnGtPvNZ +vO0Gdl55mnTzGYhO0/4Pyiqy724CVRpWLz06RUrrz6uefmyZQ3XXuSoRWUL/0/KsQvfDKcB1cOjg2cC +PFtTBMEnCKII9Znw1NdXWZ32R+2PVI5iNF5dJvJ1icg3z75g3iU8lngdKM4LUwmp8ab6evey1e6R4Zf +yf3i7ICzNBXo91zVZJMEzwuNqeXrJqoZ6l1tdcgUZMysEAV9nPsT1TBQ5LiOVywDm+uXLGhqXNV1Bxv +Mg402kD11Lj8dd7qYVK5+8ylrywZZPIX34Yhmj6yBj1UqX+6r22A4yMpE+jFNfudTXqyubV6xcWr9i5 +ROrriCjA2SUIH34f7KfxdZ51lEdVfBkx/fUyPdTf9F+Lm1pWDpal8v55bgv6K6q/8qGxJY2upsukyFX +cbeSL5GRGvdlLqNh8bVkZFZxP8+8RAauZ+LIWha7F199LVVxPaquuZYlLpdwdRmPoT0zLvcD8RKfePr +pVSuvKgPsnS9cW8bIuS6bXVFqL56d8IdGQejR8X1BmnYJH3ahv+VWcXp0riAYYMD4uCskZIujzvXEa8 +SesrncfS4tuG9Z8BjguU91Nd3XsGLJfXFX+kVch5fXTJ6SNr5o4q4dP/xhWvSTfzYlQpI0jj0pcZ3Ea +4eqywrGmCsV1CU/PjfaYbx+AZOe1A+e6haXe9nT9866F3RdseRynoR1RvM8+fjj9a57zQkW4a6EvqA8 +hDohJ/6eWyWMlbEyVsbKWBkrY2WsjJWxMlbGymXlKYH8TTvTr/UZaZ1EFpoEf7lMykyStl8MfqETj0C +THMaryA815G/za6u1vly6zkDrjNQuv74QLhrkwQX4e8s8+KWK75Ca9mf8XhG9iRyOTii6z52i7ROj+E +O6lXadN6BGyXV4ASY9Ub0WkKjRd1wd8DdKr+HtnAq+gFsX63rNOOolvHeqIPjtvaTYJIUk00yQHq4Dj +WI1vX77mXjrcmx1Qiu1nwE2mUim8HPA95oBJIXYUonbZMDlkLUmCbTHEd9PgWagT8DILVuW4+0pdide +p7bE7pSAsDWHkXmB+dC7+P2BHCMD3X/XvhQHPtvwZbbW8Y15eI7aR3ZvWnqPIFg3DOK1Tf3Lovq6/cB +bPb+W2o0DXbTc4Dvkvo0JepSqstJ+q9J+3nw6GJane9/9BXA6ZqtfD3Qtqv9Vgq+Kz0rs/cmJzTEypO +z4/jY2eQd2az3Chi9nKW0nzZ/d+dv5DYe6/24OzVE/pvZ+srvz2zxg2tt5Nm9Er3btgDRqDq1Pxo2sy +Rg4PnCC6/iPbNpFdJ1M6vpIl7KjJ1Npv43U9dO6PqX91PS6/unez5pBZPBrefrWz9ZAzTmb7Fe7ozrS +M9A1cFw7IF80w8LEOj6ECWiNrD1rEtxZ/lkSsYf9szKJvcu/8Xe4PPunVBfpg1qIXX8PzpoihGaxL1W +hWVmcZHJSzImFkzJOSjiZx0kVJws5WcDJUk4e46SBk+WcuDlp5GQtJ6sZ2eiNH5XQRk+y9nyytilZ25 +qsbUnWfhf/HJBcZHzNbP3mAG2RyLpd9BkjUd8mzxr9TQuI2uFvshC1z/8OyiNqr/+dN1llp/+d37PKU +f+/vIyVmh7/bImU99PyD/3ECR5MyndHUyicX1E7n660rU+F01D+IfVuuHW8IIidsV7oozWGcDZoZD7l +DSjeFTjELofYxwZq342Hidp74EiEik0yfpMJq3BE9uAXEl9A8RWw8Ufj/WyJwIEbFr7u51iMufaLO+B +Vad/8BpDgX+V0OPYv4gqCnxvTD0P7v7H2zPTuPfjNqKBT8X0B4vekMg2OemYKiu94CmoOsja8jgu1Zm +vnFaVtLw7DuYokpe2PKThJ4M+TcLLXg4q2jfEYqFUynyq0yorXH29IV9oNIsSlTH+JSGv6yTi0kNXYg +RNGjg3HYn7Jj37GmovIBtyo0IbkZoo63oeG+2pcwnB5KFz9lKZqgZ9I6sVmQ7bw8BCYYwKcI6V9t/Iy +s8hW5RVmBjn9LDZuw5cvjekfYc+rrCcz/WxBl+I7BuqE2rbGvwQ91/YKY+86t+8hxfcW9J3bZ1GNIWd +eDErImYskeg8GbQpBUjKRQVrTE3bBnmvnRcXnAY6zitEpn1Wud+Zyad5Aywzaxlyy+GK2ogTb7NFs+Z +wtOiHknMlnzUdiEje17YBxahqIoEJ0CSO0/FOanhPUBnXKxp/0YKcXtsMYf5VIXtrKVuJNezk+MzGYw +uZ/gPp+3ynFdwoHr5PpCzjMbxUJs4FnL7MfuMUfsR+Fk8M5+7QLIH6HfpRgz14m93bF18qadclm1B2W +tAqaC7jbKd6VKEyV6eaXQTktoCetceUmj1ZuwsSEcg/heAhSoEEvTQfOgqDrZv9ckbzIJ5nAlCTd7q8 +iaTA01JrwIGrvC1l4IOMeZTFwws9Pqp6N6ae4dOI0UtVAHUbizPC8j6YV1AzahipC9pIwVTnBB6NZvI +1bFnrkhL67b0F9CcSEfmqe2myklcX6ZgtptmjdEB72kspiOj+D1JyhlWXUYszpIvZOOr9E3EdqAmR+C +Rt0gFSWFTbnKi8FaPnewso8Mqy8dMCt29QLfu+brkNlA4WOfNZ/oLBipvJSEHo7vQEW4M/QdXCiDTjM +AcdWUu/SzzVQtYum0goJfNQAmrIMTDJMYXUwFiO1EkmN3gU+p96eGDp6zJ/Ow5jUkINZUBuCbdwtcjd +x5lLQbt/th7ULMTeksb7puulzpPSg4vPjiPlltLmEOvNp5UwSuv0DLRZTU0k/6Y5ebz5oPpx+lvuB7w +kRA2cnrZNpdTF1ZRP1DHUV6V0W7bigdy2YVL2QroPcdUZp36sgTBAHyJoF0Eego3qp3vYYsT02qaaTV +C+ltuWoOLV38EAg4ef58I8DoL9tOS2torZ5WlAkpVVal0Bs80J6iXsHFXbq3aW0vI/OliDK0CaJPiLD +HplPFahnFO9/4mFYD6HLQJ6V6ESmtqdoGqj+FlokAD19RIdbN0faqSfDaohF9JR42LKyXUgHiIQJM2p +ghoY3/JiOMc2bih7TIcat690LexKdB3kDjoKIC6blYZoOzn4bematRH8tg2Ifuc2z6Lp+cqOVrgsTpS +DY9DW1h7mDM1kRN8oZZmE9msKUBm20FhNM+rb7Pt8pajeod1B1F0gpfEDNLKwyqpM8LVOEg9YpovLbg +NLeE/xCH50Br0IUh5cb3BNAQdKzB8W7s6IKhHoM9Dg2oAXSQBZ5RiJzjeD/PdqBhQyG4Jka1r71wGzU +SC0yD3f9LNyFq9jSmU+loMc4G7TzOncuWqiFtmGypy9g8tc75UmVBsLqhLWHnA0YmqO/oW2b2LDnRw1 +7ng1j7W1beCyRSf6IR3zxI3gE66GVq6lzrRaMkcrVWleMONdG7/IF1BzqlClIqlxLnKunV86b7qxiBk +yHk/UfkLBgUaAAS9nO1eOdaxXfLRiT05iR7TK1NOLxT2c85DCEqqm1RnHfuX16dx7seOEcSI7PAre/R +USPmuYpmiCQQfdfIr8C2ZgFDOEouGakDF+/w9dPMcr0a2EPN1/cv2W2mhpwJDYT4oObUDv0PoxtCSfj +uTNLShr7+5/5KE8CHYWE9JGBG/WJJHsExnHPse98YsPMf3pU8XVwlOFv3S4w5D4ahjC40vpDLAaAg2f +cza+MwiDbRmGQVxMYBOHH0p+RZfN2xtL6Gnb1ymDr9s2/Z8OMEFLaW19n7ZnpnbSikda6lbe7deZg8G +sdyPPdARI87+3gWeoGVLEG8v5zbyQOA1tE4Zxspbgncu4ntGqYsFVGwvC2pQ3GPAn+FIAnG87tzTC8G +Z4WWNpTYJkf4blzHLuNMOMyfGwBfBxPKxaOjy0cH1s4PrZwfGzh+NjC8bGF42MLx8cWjo8tHB9bOD62 +cHxs4fjYwvGxheNjC8fHFo6PLRwfe5L42JPEx54kPvYk8bEnCak8SXyc9ICRC4MB3GYnrCt8DlPZQXP +Ad07x3stDPllv8sWUrXjgMRV+dDNLdtswCUKK9g4zVzGwXFhkCv8AZiOtmCfBNb0fs2TLTOcA0/F8En +Jw0zm46RzcdA5uOgc3nYObzsFN5+Cmc3DTObjpHNx0Dm46Bzedg5vOwU3n4KZzcNM5uOlak6ZrTZquN +Wm61qTpklgi1Jo0XWvCdKQ/OpFkmcLvwlIgzITfAWoOaAcMiXtYbRWcGN85912UGQMtdxRMQ1u3x988 +wIE3w7rIrxO1ke0gJ8kx6pTofDlnnz6NbkZV6DacPOdIwSfKrE/YlRpM7vcyCMQwCogR6yX9NnaFYb9 +5gULGpBpGVrNLxMg9omh8Qkhnx4jaTyE2zZLZNalgXdhdTRdlAYSgjkz/fJHClbtWUv7QcyJ6LojHit +7fgWdsZtZDVO1Xf6kFZVIhFQKiP9kUuHSTpWSSunzuY4C96Ho3nSPlBOmiRvEIWdSonRTIerdeR2szy +TwT+zqCi8zqh4PsyIxLv8IywgRSeovki6kTQlaO+awsWGmhNAzTmYV1Btcj/spByJxKe0Ymqem34XeJ +TNKl9f7GfE554+CJXlgeIAPF3v8uiy72feOfMaRbZcxhzxh2etyTSYsE8tjqtZhDfSt6qzkQvdkbUMf +F29LA5NbL17xly5aErrmJO3ovoCC/Fl6JN9Ww35ZF7H3RtJCNHQdabeHXKzpbhqip7UJZF+Tmr6jaS7 +e+WAtHSzwb+5xdsgwAReg4vHexKX2HFG8U4ppn8HRzumcQMsAxeHsiZKsSRG1NkaBO5qCX1hoAiVZn0 +tqMHKC510bO3kMKyQc5pFPrvS3YayS2ElAV5/MMBpSNxdB10DZXCNmwJkSKIEXCsbiQpvjq8fK2zkCd +GVMBb5eWwHJsQVqaTatzyUc5x8RgwUEAvY7DpHQKLS1DzLNeptoZZpZ+yM8GCEqHINnBXFEd6cw5qZ8 +MjgHYrd///CRmPYMJoPVne+7GU3KiYL/i7CkYUpyn2ce0u2+C2TejNL80vtBRpt7r96YyLsnE/lmT05 +nTg5gBcxq7S0rI0YocYk/0Fu18RvMNhL1CsBMXSOR7cjAyWUQsGCWODPAm4jCEHOyfAZBp9LAzm4LMG +cBk3iV4b3iPCRuitcaCT8j3Sls5NpaW5XST0jLSlXPBdXdOiOxhK15rkv1ePdOPJf8w+n5DJl6eDBHM +mUD1gOFrpRAzEfOV9TI5n9Olnb+hqYYM0AeIy0Cqjf65NxR0uQDZyFowGtXrKyVSmkE+Di9JuUjBIF6 +0qmFfyshHU5ulgmNK279DU853qNswYbuRc1KLZTTfWfCB4hyE6wLoKHaNUi90I2jL1BfXS9SWBXtLPs +gJoa+5pxSW5qrg1OzPJLTCoK8w6m2ZKCJxhyI3ojGywfuITCuM4iCpMFJbSc558DC1iJ+qNWWQ6W/UY +2051K5jNQlqerz76dkd2cZd1yYz//vTT+h/hRUZivc03o4gPFXIiu8NaKYUVS0sLVO0F+E18j70X3SO +JBEQicj8G2FnpBFGXTIA3NhfLIv8EOCVMlJ6+SCQQmxlMAA1i9x9JSllXEoZtRUTmyWSimjl9KhRz2W +JzAKeoV6lbbIOoTBLcObjnqF7SHeTwerZf8IzlNs8QCrd7+FpPPFlBWl2h5wsAZJhz1B6k2GWZ/+AZ0 +iGQbWNSvsR8ODSBrFbG5SUtn3As6mbxY0TvSXE1ggeckpEO1rYJyJwgvIzfBMGU5SN/4rIoFr2HXdb5 +yDIb5QQ5dv7IWmo/YrXjbe707Re8jtECF8Ewle60p5vDn4hp39P6iUyRKrlOXCBJAfVo9R+RgsMcQvh +BJGT+BGnusx3XPGeuwDXGRlnKAHfhgkK4MpoID2K9l+o1WojbcwoGFC09/EAD08t7y/4TrEdw1ulK5u +uyc0ZKBhUHIMFJxXnhZwLpLpM78oEkK6XmeNhRoHMbbwBJNmyRXC07AKbyaUnNhOLjylwxqL3FNpygY +747gTqMOgdRj3cq9eOpKUjGUwIJA0iiuuN+vUSgTPAF2GGRUTwAw7fwkFd8/y4t0CUxKAamXwBvdR3H +BRXCyPihcTQNXMFdSoMSmV825WN3+DV/eMw/pss8tfB5LAqQfE+DlzagVyeZRzQvBlmwG83H8LzIzw3 +gfu9Cc+30HdjCsO1IStHUlaOsqwcSVk5yrIyeNVRJGDSkKyCZHmw6QGAEmdDIjtoPLtBck1JIMnaKkC +RU1ZB7Nw1CVEkoJ8Hce8AEFQUEUe+NqhTjUlAgP9vE6K3aoOiehOacC3yODIh0o/DbVkMr+ZzcP9JAK +PaKvbxUGkvN2iDv2xeCfCKHNY+F7XDuu6IFhx/4nNSm0crinyH3PkdqFthbX5zCanNxWnvKKid6boFY +AzOlDoJv5PkYTUtManblISOFg5Xq8RQayK0IrJDNeJad+DmRftAKfyYb5e11RDixlMLk75zIqZ7uS7y +6kRmZJ7syTE/TG7/73aONiaqKzt35s044NT3bKeILa1Y0TCtXYXS1SnogjoD/WBcU0C0ypSFGaHlQ+d +DpCms+kC5Pl+6abrZZtNNs9km22Sb0mZdtcZYRwz40bgIREfqWlxJO+OQFiEpqCuz59z3wEGb1GT/7I ++5yXvvzH333XveOeeer3vfXJZKUiVHuvWM9wmxuUrjmyOXVEn2InhOKrwcug7SMNmAFz+CX/KegUQ0g +EHZXkVtffKeyxg927qlMiG7zMzv3QltFpT4wInBVE9l4Kqe3JBfWbdjBebevPNQ9RikZk5+ldAStPTg +8TwW+M6YcBHEM6KDO/RE4PpM/tBcvr3XcpEX76C2SDqMkaQlGAjpSdBNidScKudHwaPS6eyLJUcaLRz +O6AEyz5AcydAhAZdt/m3JXgnui+So6b122MjsaVug9zrpB8eS5Q7EppCB34s+T7VtCDcekmG5pXRwFj +PvkkFBeJGCMFgbh0DH5G2ENghSA2BtmkUnMId7BiwR4A2WLxAIz5SahvlDv+Lb/2k5432UzvqCoX0zE +NaTm0dwzMgjllPUgLmucXgXS1dGjxsibduwmxrJ1wm94ijZdRuT8PzuKpDo8PMAggdhANpQfHlLh5vO +lZKArrtusVymaCMslUyTgHKYLxyVtxLqFSQvoMgZ6BUkbRc8Hp6HChL4etMSeNHa1aDTORYfxpEyer5 +UiDGsAfKVIPkSadOgbFpOesB3nX+CFg+Q89XFCoVG5P0vMQoVDqNB3zXBiPRU4FsjXSat56S1gryBUK +cgOZFEMxUCrUcCrefoDSTQZiDQ43z7WSCQGcz4rCOMRP2B63rS/zmJPGo5R5cx804vAdksZ5eedtN+I +Kubzmk5rTi/a048By5q8SDp4Q9eiiEaKPjiEL97JVBOsqeCsaIOkNzkthQCImwtQUVakga0E2/q+L27 +yVTAFu5AR7CZ4w994BjHfroDoZl8e4elixdn4m/DdPFrYa3E5koD/weMQeU1uTOovVKyb6L21yV7KbV +vQkrbS9UM0w2puDtUgEsm9ipx3CAXTLDpyq8+BZHBEWXJZSgwMAPl79dBnSJ/K3dFGW3TgIN0pVTGuH +sDubtNkLYx7qLx6qAbuIgebtMbII/fz4Qh+UMavn3YMuqdQzPouS8Z6l2BH/Ski4k9kHiMWuEx2hn4X +m8ZpucyvnbTLiaEwPOEfnGEiLdy+d1bgI7yquPiuK6hhtqLwiKoMPDHk2KFUSHYNIlc8KASeYfZ7gR+ +7xakZuAOdVSGrUp26BoRz2ppWRENgCIdf4jf+yE0eZEWhnqvQa3iHXeTILUNZpxmBARCosaxgdwKU6R +bpJDOzoF/C2h4ptAwJwEaA8aEbmpH0bQD599zBDGGGGVE5NtHLMPep+hzCt+7ke/dwPeXsQ249zAzro +BhjYA5p9l0NYcCo7eccNP3lBaFQ6rfQlYXYTRQ9DChV/KyC0E4X8VpbdVNyZugjZU37xv3yxq2AALbK +wMDeoIJfXl/QSnUTdL7vQeldx0j8y0kc4/2p1ipjnSXlY0P2vWr0PAIWl3LGXDDi4dXqGrhru7EJGMz +hNSoFvhpevN8iBoAlzF6ITAxT95URuZ3kgu0gQMlUIbUW+X/NHCNA1hldUSXB2OA/jk/TUPDm4xIHkE +uI3SjIG2EcbKeQ/yg3ynLcgYoXnIU7dUNFH6g+ahlzDuPZtxD83XYBph8DqgdscAUIRBd3yUUu81uTr +LZXoQ8Rr3SshmqwhtRBTVzCmPRlCFvK+7lLYlVIZoEUCFg8VnSPJlMCUj6dAFZdr+ApLMwojT8heZ+p +s4FAoY/0fwUt9Oncxvo+ACcZnREtHKno/X4/WjlMrQ2RebdPzS7BUrS8fpdhQmzl+lM6iiaplmNQBZq +Zko0GNKpRow5J1JxX+glTCmdbjnus4KKzy5J53f7xoD0hs/JCmCBpkEVQUUFjKEKUM23OUlRAPkcfzA +w6aVObYdAXbLNtPS4VGy0XuD37MIF6nXJ29+WGo3SBgG3REBYW4A4Z1puW0f51VfoiKU/u8kI5o0+As +Y1zyyvjz5TPDR2wTrC54/Y6Whktj17m1k1YCPQER2WZmOOq3Mfl9kGhuKW/BaImXEf6P6moTZuzmr/O +Wmd8TNiXWcCw7XOxHJk0zdVmCEEkkjMZCNSIwcIyt4pK5H1pDIJGpF1IMQdgQhIZCbffsXyjTeLzlW4 +NoxcA/2v7cqr0iqrB4EBTi7ScnIeB9aoyzbAwoLPUZKCynTAZyydbppJL0Ajyaoq3YXQHPWuVdrASXk +CrsquEyREn9PGGCzwPOGVAz8AMnYt3z5uue1dQq2KM3ACnQHQpiWITuJddA4YODTaCi6RRRA/zUYzhs +0toJ7t2By/HdnViVsRoB1zCkbAi2EujjRblfTFKOmzca11qcJNafOQ/BqhGwRpgwmzbOi5fGtMOEeXA +qasmS3EH+J20F6kXnvQcgWjtkE69xjDF+0o6VSM62OWfmnzIH0ElANY30sqcmhhO6ETN83aQaIJ34hj +hI4/YxtQjCzJqxJPmqdxNgWXpJsEsTlV4wPZp7dClDCnHyr4Vj+ZTOI1c4RvwaVL2Z5KbUNSWRq4YLi +02205Ze3wGHHF+h/MPg5L+WzXk1ySjinJojSOnMLg4C/ML0kj+YKyH8qEldcjmNPkxHHiM+N6DscG39 +lshMHHkZTrTRI8gNle1cUJvTIdpx62rCVAAEwdadAW3N58QZdvAgwnE8VqkuYpA2sJSMs5MyFcvwjvz +e9+F6fceV5sZatbJmo3U0eylG+m9hTZng5+PYVKp9CVb8b8VgzqSxTUoUcc2GGma03gA1IYwJFC15rh +lRqs8L4KAkOqexYKySrmfgPeBGIizR/VTNLcrxc7OckgnkyZziYlKw7urtnSgW/nSLVe4lddYoR2pKO +VUsPxHD2mwgVLWSr0D1OIYWCU1zyZfncpMvSEHgO16UPkoo4o7MZE8VLq/yojKlo5vvU8YZtaLDdY8q +MDf0EIViocxkAY2gT+QwtP8S172Hw5wLKHam43JNthRp+U7TpqOy7btdR2VLYTajusPiqblu0zJe68O +rHzZohvteIMgpChyzbMMtY3dQ05L/ZeE6/NgJB2DttzE/Q+KUF/3HIJ/JuD++f+qMdQax+nBa3M5UT9 +CfKmx0kYY3y6eVheswxGH0BlgLvzcqJ8K8ubFB6WTVZaeBmmXqKyulZ4lNUEWc1VY0JAAnS55RBy8gd +TQJMICWeP3QaMLRPw5s9sNZFRmHKtp/16qXgosgYiGJZNbzEiOoEB3ZFkZgS/wJSJJcD0Qe93ayNcxm +0y2naeBntDgO5ITtT3vQSPFg/hyqntcluKVrIF23K0aLwEyd/XxmXuuoZKhAbHgglQmSz5B6CSnqXj8 +m85yf9VJAGYKW+CFuP52U2n+N1/m4hGIzNULiAtkYgGICLdfACZVniAFgiMvWSCgqbpJjtM4sncSSEA +a4SbHZGDQ1pcwvIZ9hUa2wqMGNFjA5aD2Nlk4vy/YKuCHEuNc9MS5YJySVUuaUoC4a6M5TDheA1mkNh +k1L79hJTLydJnGIio0vs7rbJ4podr6IcL0Wio7GI0qiamcdsl2/qVNwhTz9aHDd9AlSRSgWUKumyX2c +CgkDWs2ozVg122kFI9hDhnHD+GSwm6v6/AH6cjBrTwtgFrwJ8piVgH88Skdqmu93LKei/yMoQpRhAsd +SjZFlSmVR9ivwNwxQAntAIf8a9Q+hOPl6pdmn+6ywY4Z4MQtf6JYRlSqNYa5VvKQe7EqNa/HHNJUzty +MFjHvaWyeEw31SOJ3Ru3EH3DNPQN2VuKnaVsLyoqghgslNFvatjo/gWYeupj6+r+OWKU+B9W3+rpQUz +RhT9k9pHVJA/iejpgFEPJSeTe1/wccm1TLQL3t0DfPuSeXDuKPHsPCQ/d/wRbhc9SM1U5TJqjC/Gr2e +jCFHZOZec0dk5n58XsvJSds9h5OTvnsHMuO69h5wJ2fgXOVdhl+KU+cPY0VdhxeKUCY/fhTAXGQcKLF +BiHCj+mwDhgeJYC47BhrQLj4OEfexmMKISvKzAiEr6iwIhOuEeBEalwpwIjauEjCowIhj9lsPo9cGNN +pbO2/E2Xs9JVU97ogh/1lf4al7O6rtpXXV5T/ZbL46wor6nxxravr3T6XJ5ap9tfV+HVbNioubPsrdK +Nmmefxa/NNQVwmp+oeSFVs8q/ZX4i+56V44xGoyAIqampubm5GqLV6qAQ9RtZzT1XZD9+H5+lfntqXa +ncQ1jHVpeJRoj9qlcYeMcIx717yPEb9/fh+AiOz+A4CscpOPrgGIBjCI5xOLi10AUcKXCkr43vvY+Xe +ImXeImXeImXeImXeImXeImXePl/LH0Lnv43MRlyllf+pi/pX+Sidvm2t1/+hLQ9tLbs92TBBw9/TPp1 +f9VVtHLzV2pwxQU3bK2ylesxWcgnChr8XNykwvjRuFmF8XPwVMw5EIH9gVWWWo+flLNFLvWvxV6Pgd0 +xcFMM3BoD74+B342B/xgD/zkG/jgG/jQGPhgDn46Bz8fAl2LgqzHw9Rh4JAbGNBl+9IL/h4Y0eUij/J +cZr1H+wwvXs/DbVqQRLkckwYF599lwYK4Hl8Jm/A/9YHE6SvM8WyrU63aN0+nc6qnfUlde6wK4tsrp2 +uGq8PtczipXeaXLo3G66rZXe+rrsOGbrsbaLR5nZUO5x53p9Li2VHt9Lo/T66rwVdfXebGJ147/QOer +8sDTLNHl9NT7fdV10Hm5z7Wj2gcdejx19XBhP9wVNfVeuOne6vdBB258jl2wrsFT7YNrbXlF1T191Zb +X1NTDS9S6aitqtyrXrY3sWlu/3cUArwv69/o82MBTXul5YcmS53+ZkfV8VmZ8VsdLvMRLvPx8+S8PzQ +WAAFoAAA== +/Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4Fn/HkJdADweiKUCtAHJSsuY4Z2yMys5o8xm6NANjJaLd9Je +uzPe3CPGyeEsOOn0n54/ntu5saYNSd2BLMsLKUTYclNJ7tTrqjHRTkSQbw0cPQqf1yF/3PuH3olaHnJt +bIAuDJfFDGih2/s3duWBbHAsVpnhC/AtTvipjEHx+dTsX9dtgAy6QHwYNVP++d6vrnnxPX/q+gUugFwR +SC017rBvquqlXlAw65oSGjKcLD8j+Q0IJzrhiGuGfwUO2xyfCjKjARYpoVYbN3yF9BanN/IvQxxpSfwj +MlWFHgRkIz3CjInOUxv9dN4RTC7fcoxWa5GAjKCGjUtEIIYFsekq1bs1Ab1Ens/nWw/fpb/2IhO5fPu3 +QV6p6mDC0Y6sumRXhcPA5IwDHlwiP6EjtojePYQ26FDeSbRKiQ3vgMeIEHiYlCvzKf1H7DRE6YF4UB7v +Rpnt4KdQQ+tlbgSp5qd+Sp/MzBaYsY0ChBl2Wnssg0a65yP8/25/hRHaWEezzw3ZGN+fosVcH1Dfso6E +YYDdRS8Qzwhm7y6VjViJngFIfUtArBLFY3hlSMcfq/1Pyjf5qCiU0+NA1SMflfiy5BtveMkMQvdrK0qX +3dnsL00I21gi6CcmLzieFKf53e8YBOmBdhkq6cIt0cNtjrGlYf2zj13M1aLBKdSGNVpHqPwdbR3nWGNb +znHNXbTE934PP6tgQeeAsurSlT6a0yayqiWeY476ge+tRFjlyLrzK5S+b8E5pTfBNjIKvi4i4K+YEB5V +cA0pFRJX3mOZQxM3Cx25sffavAZPB+SB2fyrah44svqNWFz8tLECcOYOoDpvxlCEnbxtrt44H1dFmRhw +o4aF1kuZi9Xulz+2qnjxI1ovlI+3UhhnhHL9eUIx1DBe2nc4Iefv4CiaxvCincy7qqpqX3H7eY5d/Jkr +7K5uLourbB3yzvdImA6sU4vg0mFiCvL9qv2B+qeOWFpc/FQFgzUepdYD8/bjtOcWm4HJ36FGNZ4fmuOd +eYlg349iAKUEqpeaN+89XeYCGI/RxbZ3wp+pEegVd6bqRwxqK4B19U0FWqgSWMgAY6eQyFXnfE5vbt1Y +cCWWMcwiUy3uXKpyzGejc9xtcM6fluSDSPCiLHxnril1L8irRPRO8axKYbGRP3JvddjbV2YyY04obtgl ++ZcKioc17QuNLjkEQlSaJfAul81NUFjCIqRhGU08AGYxFjJr11cljAmU5oVtadMvayTQZ/CEfXc/iXQJ +okC0v8GNYkJeOxzvqayhqL+i4wBEgvhGcn4NBeaPxfsK/KNGfZz5HaEg2mFIzPFCWb6+VQgUT9PZjbcY +7v7+s24QKFNFGI/2RW4BDDxau3Tcv+MprCdZKnxPep3Mq8vF3VqHLwxmZ39b0Z5f+NPgDOxuLqSdQ7Z1 +L/febGOpRO/QKUyEduPb90aqxlNTVhGeepfYGJ6j8XgJuBax0m2lZgPDQ3/Iu8n1AswW7PCNE0vzu7Ox +5QEGVovRp5IeVwFM6nKoir0fUCL7j8FcUuGkeNWmrbU1IxpL/aAZGXwVuaB//1w6umxysxkJxfLGpmbp +1MpDrJoMMnkOj0q71WuslegiREhKuplHVWcZjitZ/F3kczhcfAensNUuiLAl5rp0yATDyCs69acgsR+3 +BQEXW4r6a2rOpvWs78gadAlPOxEqCgTBVE6BUsMzLXIZH0ybKHckMYySx5amVzNRJwER7/kduASSb0JC +YF6FubHGY/q4jnGHA03wziA9ObjXTvVRu0R8aXSLzgbtyNKVKd84xeo9zca5EuWttPcRuEAxOubvzj2B +r/XvFt8CHYiPem0nu1DB6bzbjycsKfKHTRQwaF2wAzVhjztfQH1LkI2++iYXoF3HCR6rSv+00G4mmm5D +jCfunzxZYpg56I3Nwocnsxbt/pCxZK5YTxCMO+HkvjJLES2lP6kkX1cNIRgK6piZ2117iTXvjnxMtTgi +pnunM4Ye4bXXtZprO6W71LySIr4m0ZQxID5nLfBMGu9Bj3VIlAX3xmkdFwO8rPRVLlj24UxaWuevgEPh +ygSF13muUlkwB64YSq/bHJAhdf51IkDO+b3YuJBvUBsguFuV+ZhQ9D5bWKmVvUd1HZwqWAgd3C3L4Mrr +TMDRC3c8EgwougkKTm2CjtWRGlvuz2zjnAsTWpmbl49XgXj4CR7tOnED+JAja8QttBH1MfToQ04Ezfez +8mNq+5uykr8y7vGvV/w4YNYa41IFvUJgxuDn9aOXvv/qh68JfTS+TnRf8T0tDOgS+Imr/gi7q4l/PrAI +0RDAYIQl6GzjBJQ2LoqgJUQVaLF6qQij1+O5O2ITw2B2Vq0w+FTUjJny2+j1gKvsYreYlj6Gu7IrsrMe +sB1B/MIA65ISmgKNvPcCXI0MYMMvceMEPLrpvx3/qoVc6EqP01zKtAMH7AcOdeHj3ghvVaJcCDSfZXoj +Xrs1p5sll2vcxyrs1e6Ne0OhTjo+E9wf2ivLApfU5ZoJ+yWu7VLTLAggv6VgHo/gnsqWhUAC/x3nenAA +kjVOdoyUrjOkaP0rJlVB71jhKu7heaAKlBmT7hVw6PC5Jd3WwcumHK0mqTSekL2kMDjCs9GcHAZvT+Ec +WkzXYTMr9ej6C3GOa+AmHFK3YZaRvVA46Bhw0J8XTMLqI38Y+yytaWb2SDppzBF9WM4UsEeAu1iXkjkh +Wp60VEcSwy004DW4+sQr4/DmKjAW0j6twTYYfiEpesSn788iTRgFuI1jPfEqK8Oqv1gWD1zTggEIsdr2 +eoni1X1LqzAasgPBrvWJtn9YHPVnV3lMp5mqSPLyDZm1uKwledV3o3QAI/PjyORym+9S4dt6ncNk/uI0 +cy3gy6zZnKokeDtCcWJnoeyf1Yy8od3k9Zhqjp2g6JuhRcBEfXXSNlzPIcTzg7dUL0cF4K57R7d+RYqC +yWCvs+wuD+cG3WUGdLEz32Tc2gtHwcAeeMuCURFNnZDN0mPkHNWzSXOI/dtOzRTYM/G9aTnRu7J5Y4uv +y3EJwaa0PTJJ2I2GgQ6JBUeZJv25Zenb1TYMLk10UBr2Kuy9ez74h20yX9tkVXfSc9g/vTLUFMCXFGCf +/HrlJ6f4XBQNa9tpJUe5yvyI7De+K6/73KqKfW08wPPJkoinlCNOyyWvRLw94JwGS9YA5JiFVbqXgpmi +5RdwpSQ8zRFVTm6lzPiR3yTVpyqz2oJWqLKrGddPxz4HK3jeG6D6PWH2mDaCqSceEMz/SKJ5DGrO45Pv +kFC26lOrko4UiFDvfjsnGDD7OuYUcACdtcPeIfrNdiqz/wT9KQ/yNZR2VYIPWOxcsRCSyTQVUj3wTuPO +Nooh4gAXlgVJSvV5efTXe/mUFbFisxet/fAQYdHQmH0QS6GdzWamXkyY4gDYsG6JZZ/G2Yjusqbj/1UB +uZW616MQ5oLxTPG6dJrzfOUkukDI//SSduKpINv4ZTMFdx9qdcc3+V9f9cD5Ycb63fkJbJ8XTUIfl30M +cHOcx+2YIKGtsyYpRMl3+4V7/Gc6S/de14RV8R/HkiMq+10a51JNupa8jHVye66Ga0W19EY/md6Z3rqz +ZZgAJLgl+/KinLCSvjRNBVzMUv8JGSAMcFCxkAb1oQNhz3A2G6gpaU6pRKqvLb+zJc+CNgUDc2017UV2 +X39LnMiP+GqnC+ucgZlb3HM5k3l1xX9VpfKr5TFLNA7gZT38GePtlaMDQ/9GEKBPndM1Xm1KeWB0TYTP +659NVAkOLDiDi0dGtmzELZiGVYYUS2p+mtk77VprwgmRPvqHzr76Mk+U6T1+YXIp3OvfuG/ue2JHeNIn +6LLYcVhpByaWHowUxmg3vbW7Fu1jv7Ink6wpSbdLRLCixP7+upKbLj/sRWnz4QU9Hr2SVoqK/guvXQ+b +7FJFfHQZL87p77gaduYI0BaxPVrf+hOYk/+GTZnQXtd3aLEbifrm4jklxzRwzCHYuiZKJMZy0P4BzqCb +K0tnXscSRN4V7QNinm+O+62cwzT8zvReuPR9hZ4g2j8J70NFhsR/g7krnibrt8OY4YL2QjbY5Y6Atscj +nmrWvHrxd7b9+fxMTgT89eftXQmQXynnOGtNPHBKW+DQSu/hsxZC1TAE6fBjadbwMRe+U8As1clN73rO +svWHhQa3xFii69Y8m7+1BnN3wsGw+8y97n2/HzX52NfyQMR5coRCTIFoiEhtJW6pqYJXCSuuVJCSGpR+ +WlI2s9oSUr8wbcVL2ujSBGknIvgF+sRYzH3+Pcpxq5Ty8jbwEDIh9lt5qh2/kj6uSc23gxFOBAIdrY47 +8y7t/ewXGFDf/MsHbuj2sez9CT/WG6clYltBOtpPnmBbbcIF1oFx9gKQUujW4I37T6GUL517x+bvN9dF +LBgbVSluPTrqqShkOwEUIQ7ufYze09/X6B+lqhYXXA3ptXGfbQIuBozZeUz/2ew9gj7QQQ5IRSAZOAE0 +In/qjrMO6Mopj0EagscUiByVN3wOVtn7zH17tPBHUJt2ilTy+vriHa9cxzZ/w4DzutDCuxU0cgUtwP6b +6Mm0ZGniGE3PMbjgAMTZQqKrgFzKzm3aIE7hI03OUwc+HR6TtYy72zLgI5S829Fky0/+lc98VChKnOjo +Rb33Fq3fWRHCR4XpvM00mKgeoUqx38kRqYfuvo1ZtFt+u3gFR5MMKqgfiXSh8gMbn59vKoTf8jmELEWV +7AFoxyZJjLuj5HObwpJ4nN2zwevglUxtXTellcCExpaKXv6Ym+cXtycdLd96w1x3Q/+W03NeuNXugCjI ++0E1aBG/Dwc1/3B67lxjk6aY88RgxkfgnHgiwr3OdOeUlcogbDR+N84nOmeOi8TVRerS+z0Pcs5Hve81 +2NskZqi0QVLdW28GiQHtodfLG+RnR+t3PyRNIYZ5wHzd4TgR/sEE40sCHb9LpemKpRG2wifooev/1eR0 +Pq5areOWJzCaP7Kj0zEEGVuOXo6Pk6JBsA5dYic/TR1kBtw8WSO7rFxVfZHdbr/tcCHnb0U7MbuaZN/Z +gZd/NlzQvktLk3TThcDiCQYaa8rL5JwJspATXEPFy87H93w//8ZYjEgvXdsT2QntlaMa1ATz+Q6XBHFu +AsBgs90jYQtFndXBToD2aduSn3Cm2OfvNKQaCuohNIxIuA5L3pkhbK77TM72WS6407J2wgn98ipvLYU6 +5NhwcIXqONCI9lI8MdpaEhCWevIj5otQGsYX6YUqBvd91na0HoWrKv0UCZ5TGhZhuQqir3ISdId/INxb +a4byXG0CuVNXnGptNSgEcqkfYvzzJcrq2VSZyFcxH4hvT22+iajMmr9TFl95X3peYJdF5UuHKXmCL2LA +fZJQJcuRc1Fs3shTPQ1Icbz84B0LP0S7WfQN87ph5o/U0Ov+tTcviIwpdwmonpSwY3C9wDTAq1bjZhBY +hqcUbuI4pvmxxUMhvQfIGY7rtECqzmdq5RbkUT8C0rx7JMG/WFqL1Pk9faRDRHvjXsZwDOb1v01x3mUG +7jGrCg0A8zxT8KnvqjFuTBr5XyC3wgeCLSeBLG8WpGRgHCRRjo+WBA4VvBiC4qgLLHYROhflteDmKKVn +qUAgL+TYfxv22cNeEruRVcuz5mrhIKdGsyMuI7wPlhgp69/s0kwBZ+KkukPUXa92qQbzmiKvfvur/BLx +bh+L25H2DsrwiYafzPgga0ivDF7Qe9IPZo6nTBrXyz0dmAgzT0HLIHI7FnUd0mlX7fkfkXlSebtQzOJz +5bcKbVL8ZZSuh42aerAn1BLmi7GiKHpDq/xuhXM7yeCBqPutYp8slghgU0ahh9jwiUVx3JXGUH6DTWnm +8vJbXhtf/Ybjq3ibElDQwtAvkQpL/IuT5pnVos3c3B7ray9CW6PqAg2obBcjreNoshlDjVL2Osnmm5wv +cf/B+9TfV+qCXqM/r3XblImKcB0a/4hvq7LMwV+OxyMOUTnYPp0yeU7kwBT42gBKimHCLNYIVbRSEKnN +yLpCVumw8TrpOE6O4gETzIkSSLoDLwEldveND5Vg93RByhF94Z+TEh+nnKEnSN2fwnJBxK4nR+nvCyun +CYlQwM4MNCIXLf7x0XBEkBa4og+B9EdOdIiF8yCkcKJEWiVfO7ftpOyTkboo4g8DYuOZBZIEodzHsrDw +TvLzfJxiEQdSvXmjiBK0GDE4JOtq3Hfkdmiknb3/RyBXI1ZgwULu8Ic+NLMIeYjuMOvN1lsNLmGNfekl +NtaDB7y1iYVfCMtD7iKOJgi9MHAp0YdYacrh8bejLQXtltlP6CoKKzqqHxVBs6s4W7Tzf19n4xp9RPuo +xAgfNToz+pZAG/tPWglviGHd/jKNKmNz2cWLiFnVYYkeoX48W8e6c3Kp6yAudU9wAeC+NF4J3WpXeOUG +5//LVgGf/suzAzqkJt4P4oVBH1eXKtcfcWFlVKbmGYDrjGnXfGum7TgX1d83HYq1q1m3ZMUMk7o5InnV +4BdfFdmh2Cs69Yb0Bbl+Uwg542kN9kLhRBSVAuKdjTS+UbkEtk/Y/uKoX91LhOp4A6SSIVORcM/EZxyR ++L0BctAazUoUTPvPmdPwhtEDQ4OlbTpiBZVmmCB8dE5i+P9gctAqV1q9gXdTH/zy36xoD2UVq5NyTAlv +Wm7sWqrLVUdKewCWsZ6G2RNef+g07qoLlun5mWucvu9KDRkJ0zQsdQ7+HNcwQoeYU3Ns33T8IGLy9CX8 +liIPE2NkItiHgYGO9afNkmt3Bb4mWj1937LAk6UOjyU9K3SQFBHRCDUf5BocztwT2YJPSKYO1ZS/2Ow1 +W7mj2LyZ/mObyoidqEH5rrX2kh7ATB1GscaUBi9qXJiM/ePDYwPcq15P16Zwo1lVPF/X0k3+XKQOeRbu +W7VGGzPv1OQ+j0wASbUq3S9/3j4B1g4s08f0cAvnm5by6keBPODX/htHuWASARtQvcJlFa6NyDewiogE +t2JGvi6+AzDJ071ES2gcbtVjCEFV0FROII1ahnkVYgybH2CrLEM1zJRG0tYebd4Kjd568fTMaEDwlPKP +oG8xond+bCi2BWwGS29LK0zt1Y3U/JOyrWKjy06B+adWx3vDRI5PERg8bdBBYBJgdTp16cnre2Ui/PNm +zVS0+41AIjZxXeciFHOXQvsGWdNDpp3b7T1r0xxK3qCQfl5vxK24hftpk4neCPVN0oP8fsncr8MAq0M4 +zZqClAGYr7XEBCyqd7an+AT5TTaXdfxs4oKJFVFpPTLyEoB7AVlJa44E+F7ojNY3iThtSKOyusrzbM5I +6KMivoNJ/JIxy6MZ6E17ulIn4oTl64dU4f4O50B+K3SjkQGNvkq/Xu9L+E9nNO9nw/UgmVGFZDxujrbk +gECnVqaamiOldHqWxA2im+2JB1oXhJmIH+ksook0hebaq1SfmkCFtMNlMx7qxhuNssfirqXrkLJAyPW9 +9WocVqx9OPtp1MB4wxIDS7bCUccssqyusXAwTySQSyekZyWNZmhgna9wDJ5MQNZKMKDG+LTLUBG1g6+R +u2EyRsB6NZTTcQtxBK5wcG2JSEKZlu367G+9CevvvKLJNI1MMAdFeeSJAw9OcvXSxBGjsq1XIUGYqs+M +4VZQOaURbCVXj+tP2fWQdzSru7gauYFf5ZWfmj5YMO6Pxpw18aI3ci5509VCA/uERcvzYPQEGcyBbPAq +jLrj2jZdktuOZkYwC0rctHO2kJ1GXXyJnoNhQk2FWwmYA8pYjaN2HRRg7nYZG63BkpwnYlZxvBqGGv3+ +cZlv7vhOUMmqAnZ5HkvjYioBQYHkfnwYSiJ7Zt1zQj6JdlDmckFeUl1R8zTh5L9jK8fpcletmxUKcC8A +RLtk3AVXz7BSYlfXmfqZnZ/lCZK7kNNi/1hV0Aavlyf5TCKuoAXkvpG2siQ2bMe6c9g+JnH1QLTjBAUl +kLzuBLrzkQmSsIfHOdxtNsIvz8fDfWunRn0u5oKs8/55msDzUugWLkoo8gYeDST0Q7byiefmwKixcfEy +igUU10dy6xQG8gw6cMtg6DY8cQz1ux0rdMFuvfp10kfVebZDkAbFXpew7EZaGVi02LtXC29I2BisSSeX +BM9MH2hgi4CA8qyU5wi4fNz35Y5giVI1drg+o9VtzHs3q8UafsgiF/uNyCUcYv4MRn1zw/bhfp44U+Js +bTFdshisX2m1Ld0EL5Ev1Z679qOyvJrEoflj7JGCuAf/k2bQpipn3uyoQcUHIDBvr6jrXcLTdQBnfO/F +VTZdpIn3jfpuX5taIOCG9c1EEwHbSrQPtxLlx85V+/ShZrj8FL07cB1x6vzaNVCD/Y9sIHKdi6ZgHhwB +B9oWC9/hV59TREfiLuNzaO4ljOUz9gpxM06fTlP71qETRkiIV30aKiWDppD5P9MxU0zXgSReFP3T2ylO +tMwgfO/CgWgkGXkd4+XAd3KxNRkU38ol2A+VTW3Kgwy4eAttFwTztgJ1+yv+CghdZC03rjlJdP5O3/aH +N/baMSwUuJ0kOEWLh5ouQwziM0kMDJGJaHetO68lznzaTTi683VNMT/P2QU/vug8JaSM5AAmD2CR0pFL +jAWtIvB/n+j2fAGPjqrm6C23buiLa5/QK69C8R9McxhKqWIwY4o+ZIWnmGnmIYo+ccxwW4iYtvqqEyhr +OnF/7jFtP/DfdvImYazIHl2kopJfsCUxYipKrMgdCNM4F5rzr/6UIz33n73Hx8Qyl2k84jDpw5XxiB0Z +aFvDEkgyVNrHt4DdOe+4g6a/+yHtG/ONcEQVQa+vq5e79YbP7Hj4UEycMyYcfMVWwoKfubI160mRg7Zw +ZqEOdYuObmLeqBfgNIb3IIUc1pFAMpbZhvfGO19MhjOA5RDkRbcHxGjPifJruygA668UTQGs/0osaVR2 +8OyFruT+Hh9xe0jyqLTGq93xx28ecwT10p71+CFVxfwcGoE7bsPCVB3C5DOxZ69c+5X1owpQqI2tL4vc +ABDLgFvC3FvR2o2Fnp+TXnwa3aT8TkrYL6U3Z2/lnJ+lKPZbfqsmGpPiAN0ekB/V0Rws5wjPnwLp6MoZ +vekRCGiLdMRfB4Qh8eNULX9SFypF48XqbUpcRSR2iMkqbiprjoxvKMMqgnt552bONmEKZm/ZGpHSTuJM +hfyii8gPt+IQynHn/p3h9hpCIARXsiJ/HVZi8FHiQypOoqwANP6yFiJAKj9jthlOdm+Rs9xnP9gpY0Zp +4QArvTPAzKDot+JwFQpoF87ns4BEBIaaIeV6yCjiZHKx9H5iTXOxatQo46+eEfaOQ5vUZA88xr6qjNAV +k3SMIZMwuH6WdYfmPxj+6z8+0PQ+aCe3a4+FlqXVhh8hJXg/ylr5NtYvFQiG7+cX9oHSneya0vjPYQO3 +vSTfyJgjVS1zTaBRrPo9lVFJ+yI/8e3To3OyrboOk23L8qMFyUP6mCK8rt90wViBIwQ5x4rDfRXMhZSS +FShEBmy+c3y4eS4IuyDUf2USaUnGg9TAStl7+/7Pvzw/5d/Q8JKLgKksj/MVgCZcGPhLoFFGzrHIYVVl +Iew5sRlPgvdfAFtLIveNievHwSVrdj3Tdt8YcXxz/S1iRLk1MQHqJyjw0kGXhZy2It83ctSvevDf/6w6 +szETjtHhwYNv9l6KZQxIfwwwO/iDI8af6SauWLEMco8L3tloBApM3jUIwdXelXGiw2TnYlW4t1QIsfO1 +49ass28OFuyRTZeTgtIzgggiqrqv04Af7i60e7HJWSIc6onHzvAJhJ57UBTUkxjyShVbMbe2ZOkW7TEB +1tn8awzy2VzQfnMcq11XOqJVcAisOU5O0y6EkQffzQYoQNjHnbK3JM8HFvcgBEDZoqyNfSfcCEEyxaai +fxMFEBEP9LNI0Y6j/l7Dj3vrLPZ5ZlJGXMmiMw2tmrLFfs0rjvWPkvIpXBKBqMd+dzt78o4V19QzFCfm +3K0xK9ZCxHljbiqwR2abHvan2Fku9R/ULKXB4dw5o3umQs9pMbLBR+DNfvYP0S0MQLC3Ec/hAiE6AXRB +httMQi5OYn6yZ3YnR1fjNZeN2ga9QDziM9DyCd2+gEvzDLftJlSSp1tAkAE+b8LIYFKEHxGrvfNx+NPW +2G9H6c2q1ZbGidQ6YhIrpgBbgk/BFlXRUrDs0g1YJJN57p2k7V0Q1bgQVCeBNlUHqLPfFyYr7llOhxib +hFmjs5tqJpS/4YWsXJgKgZSnSI4wdFhGnI+3zMEcTgV09R9DrqrN55zbbOyHoUBA95f8d+IQ5+PqG269 +B9vAUObvi9KRQjwFpLKnQE0m75Kd46+DaNv1Z126ugnE/+R+bZS4QhG/NAjqJoIQntOKRgHO/eS7kdVr +UUiNCfgpHvbOhdt/cQl5I5N6ooZU0fVM36OX1ugK5oWUOGRYAAAAAAs+rk4I5fZyAAHePIC0AQCzLaW5 +scRn+wIAAAAABFla diff --git a/samples/Shell/zsh.script! b/samples/Shell/zsh similarity index 100% rename from samples/Shell/zsh.script! rename to samples/Shell/zsh diff --git a/samples/SourcePawn/foo.sma b/samples/SourcePawn/foo.sma new file mode 100644 index 00000000..e03b77a2 --- /dev/null +++ b/samples/SourcePawn/foo.sma @@ -0,0 +1,272 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TimeLeft Plugin +// + +#include + +const TASK_TIMEREMAIN_SHORT = 8648458 // 0.8s repeat task +const TASK_TIMEREMAIN_LARGE = 34543 // 1.0s repeat task + +// time display flags +const TD_BOTTOM_WHITE_TEXT = 1 // a - display white text on bottom +const TD_USE_VOICE = 2 // b - use voice +const TD_NO_REMAINING_VOICE = 4 // c - don't add "remaining" (only in voice) +const TD_NO_HOURS_MINS_SECS_VOICE = 8 // d - don't add "hours/minutes/seconds" (only in voice) +const TD_SHOW_SPEAK_VALUES_BELOW = 16 // e - show/speak if current time is less than this set in parameter + +new g_TimeSet[32][2] +new g_LastTime +new g_CountDown +new g_Switch + +// pcvars +new g_amx_time_voice, g_amx_timeleft +new g_mp_timelimit + +public plugin_init() +{ + register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("timeleft.txt") + g_amx_time_voice = register_cvar("amx_time_voice", "1") + register_srvcmd("amx_time_display", "setDisplaying") + g_amx_timeleft = register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) + register_clcmd("say timeleft", "sayTimeLeft", 0, "- displays timeleft") + register_clcmd("say thetime", "sayTheTime", 0, "- displays current time") + + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + g_mp_timelimit = get_cvar_pointer("mp_timelimit") +} + +public sayTheTime(id) +{ + if (get_pcvar_num(g_amx_time_voice)) + { + new mhours[6], mmins[6], whours[32], wmins[32], wpm[6] + + get_time("%H", mhours, charsmax(mhours)) + get_time("%M", mmins, charsmax(mmins)) + + new mins = str_to_num(mmins) + new hrs = str_to_num(mhours) + + if (mins) + num_to_word(mins, wmins, charsmax(wmins)) + else + wmins[0] = EOS + + if (hrs < 12) + wpm = "am " + else + { + if (hrs > 12) hrs -= 12 + wpm = "pm " + } + + if (hrs) + num_to_word(hrs, whours, charsmax(whours)) + else + whours = "twelve " + + client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm) + } + + new ctime[64] + + get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime)) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "THE_TIME", ctime) + + return PLUGIN_CONTINUE +} + +public sayTimeLeft(id) +{ + if (get_pcvar_float(g_mp_timelimit)) + { + new a = get_timeleft() + + if (get_pcvar_num(g_amx_time_voice)) + { + new svoice[128] + setTimeVoice(svoice, charsmax(svoice), 0, a) + client_cmd(id, "%s", svoice) + } + client_print(0, print_chat, "%L: %d:%02d", LANG_PLAYER, "TIME_LEFT", (a / 60), (a % 60)) + } + else + client_print(0, print_chat, "%L", LANG_PLAYER, "NO_T_LIMIT") + + return PLUGIN_CONTINUE +} + +setTimeText(text[], len, tmlf, id) +{ + new secs = tmlf % 60 + new mins = tmlf / 60 + + if (secs == 0) + formatex(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE") + else if (mins == 0) + formatex(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND") + else + formatex(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND") +} + +setTimeVoice(text[], len, flags, tmlf) +{ + new temp[7][32] + new secs = tmlf % 60 + new mins = tmlf / 60 + + // for (new a = 0;a < 7;++a) // we just created it, already null + // temp[a][0] = 0 + + if (secs > 0) + { + num_to_word(secs, temp[4], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[5] = "seconds " /* there is no "second" in default hl */ + } + + if (mins > 59) + { + new hours = mins / 60 + + num_to_word(hours, temp[0], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[1] = "hours " + + mins = mins % 60 + } + + if (mins > 0) + { + num_to_word(mins, temp[2], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[3] = "minutes " + } + + if ( ~flags & TD_NO_REMAINING_VOICE ) + temp[6] = "remaining " + + return formatex(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6]) +} + +findDispFormat(_time) +{ + // it is important to check i _time) + { + if (!g_Switch) + { + g_CountDown = g_Switch = _time + remove_task(TASK_TIMEREMAIN_SHORT) + set_task(1.0, "timeRemain", TASK_TIMEREMAIN_LARGE, "", 0, "b") + } + + return i + } + } + else if (g_TimeSet[i][0] == _time) + { + return i + } + } + + return -1 +} + +public setDisplaying() +{ + new arg[32], flags[32], num[32] + new argc = read_argc() - 1 + new i = 0 + + while (i < argc && i < sizeof(g_TimeSet)) + { + read_argv(i + 1, arg, charsmax(arg)) + parse(arg, flags, charsmax(flags), num, charsmax(num)) + + g_TimeSet[i][0] = str_to_num(num) + g_TimeSet[i][1] = read_flags(flags) + + i++ + } + + if( i < sizeof(g_TimeSet) ) + g_TimeSet[i][0] = 0 // has to be zeroed in case command is sent twice + + return PLUGIN_HANDLED +} + +public timeRemain(param[]) +{ + new gmtm = get_timeleft() + new tmlf = g_Switch ? --g_CountDown : gmtm + new stimel[12] + + formatex(stimel, charsmax(stimel), "%02d:%02d", gmtm / 60, gmtm % 60) + set_pcvar_string(g_amx_timeleft, stimel) + + if (g_Switch && gmtm > g_Switch) + { + remove_task(TASK_TIMEREMAIN_LARGE) + g_Switch = 0 + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + return + } + + if (tmlf > 0 && g_LastTime != tmlf) + { + g_LastTime = tmlf + new tm_set = findDispFormat(tmlf) + + if (tm_set != -1) + { + new flags = g_TimeSet[tm_set][1] + new arg[128] + + if (flags & TD_BOTTOM_WHITE_TEXT) + { + new players[MAX_PLAYERS], pnum, plr + + get_players(players, pnum, "c") + + if (flags & TD_SHOW_SPEAK_VALUES_BELOW) // yes this is correct flag, just because message should be shorter if it is shown every seconds + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1) + else + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1) + + for (new i = 0; i < pnum; i++) + { + plr = players[i] + setTimeText(arg, charsmax(arg), tmlf, plr) + show_hudmessage(plr, "%s", arg) + } + } + + if (flags & TD_USE_VOICE) + { + setTimeVoice(arg, charsmax(arg), flags, tmlf) + client_cmd(0, "%s", arg) + } + } + } +} diff --git a/samples/VimL/filenames/.nvimrc b/samples/VimL/filenames/.nvimrc new file mode 100644 index 00000000..53a65ade --- /dev/null +++ b/samples/VimL/filenames/.nvimrc @@ -0,0 +1,10 @@ +set nocompatible +set ignorecase +set smartcase +set showmatch +set showcmd + +syntax on + +set hlsearch " Highlight searches +set incsearch " Do incremental searching diff --git a/samples/VimL/solarized.vim b/samples/VimL/solarized.vim new file mode 100644 index 00000000..70f52238 --- /dev/null +++ b/samples/VimL/solarized.vim @@ -0,0 +1,1117 @@ +" Name: Solarized vim colorscheme +" Author: Ethan Schoonover +" URL: http://ethanschoonover.com/solarized +" (see this url for latest release & screenshots) +" License: OSI approved MIT license (see end of this file) +" Created: In the middle of the night +" Modified: 2011 May 05 +" +" Usage "{{{ +" +" --------------------------------------------------------------------- +" ABOUT: +" --------------------------------------------------------------------- +" Solarized is a carefully designed selective contrast colorscheme with dual +" light and dark modes that runs in both GUI, 256 and 16 color modes. +" +" See the homepage above for screenshots and details. +" +" --------------------------------------------------------------------- +" OPTIONS: +" --------------------------------------------------------------------- +" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized" +" +" --------------------------------------------------------------------- +" INSTALLATION: +" --------------------------------------------------------------------- +" Two options for installation: manual or pathogen +" +" MANUAL INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download the solarized distribution (available on the homepage above) +" and unarchive the file. +" 2. Move `solarized.vim` to your `.vim/colors` directory. +" 3. Move each of the files in each subdirectories to the corresponding .vim +" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +" directory as .vim/autoload/togglebg.vim). +" +" RECOMMENDED PATHOGEN INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download and install Tim Pope's Pathogen from: +" https://github.com/tpope/vim-pathogen +" +" 2. Next, move or clone the `vim-colors-solarized` directory so that it is +" a subdirectory of the `.vim/bundle` directory. +" +" a. **clone with git:** +" +" $ cd ~/.vim/bundle +" $ git clone git://github.com/altercation/vim-colors-solarized.git +" +" b. **or move manually into the pathogen bundle directory:** +" In the parent directory of vim-colors-solarized: +" +" $ mv vim-colors-solarized ~/.vim/bundle/ +" +" MODIFY VIMRC: +" +" After either Option 1 or Option 2 above, put the following two lines in your +" .vimrc: +" +" syntax enable +" set background=dark +" colorscheme solarized +" +" or, for the light background mode of Solarized: +" +" syntax enable +" set background=light +" colorscheme solarized +" +" I like to have a different background in GUI and terminal modes, so I can use +" the following if-then. However, I find vim's background autodetection to be +" pretty good and, at least with MacVim, I can leave this background value +" assignment out entirely and get the same results. +" +" if has('gui_running') +" set background=light +" else +" set background=dark +" endif +" +" See the Solarized homepage at http://ethanschoonover.com/solarized for +" screenshots which will help you select either the light or dark background. +" +" --------------------------------------------------------------------- +" COLOR VALUES +" --------------------------------------------------------------------- +" Download palettes and files from: http://ethanschoonover.com/solarized +" +" L\*a\*b values are canonical (White D65, Reference D50), other values are +" matched in sRGB space. +" +" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB +" --------- ------- ---- ------- ----------- ---------- ----------- ----------- +" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 +" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 +" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 +" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 +" +" --------------------------------------------------------------------- +" COLORSCHEME HACKING +" --------------------------------------------------------------------- +" +" Useful commands for testing colorschemes: +" :source $VIMRUNTIME/syntax/hitest.vim +" :help highlight-groups +" :help cterm-colors +" :help group-name +" +" Useful links for developing colorschemes: +" http://www.vim.org/scripts/script.php?script_id=2937 +" http://vimcasts.org/episodes/creating-colorschemes-for-vim/ +" http://www.frexx.de/xterm-256-notes/" +" +" }}} +" Environment Specific Overrides "{{{ +" Allow or disallow certain features based on current terminal emulator or +" environment. + +" Terminals that support italics +let s:terms_italic=[ + \"rxvt", + \"gnome-terminal" + \] +" For reference only, terminals are known to be incomptible. +" Terminals that are in neither list need to be tested. +let s:terms_noitalic=[ + \"iTerm.app", + \"Apple_Terminal" + \] +if has("gui_running") + let s:terminal_italic=1 " TODO: could refactor to not require this at all +else + let s:terminal_italic=0 " terminals will be guilty until proven compatible + for term in s:terms_italic + if $TERM_PROGRAM =~ term + let s:terminal_italic=1 + endif + endfor +endif + +" }}} +" Default option values"{{{ +" --------------------------------------------------------------------- +" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself. +let s:options_list=[ + \'" this block of commands has been autogenerated by solarized.vim and', + \'" includes the current, non-default Solarized option values.', + \'" To use, place these commands in your .vimrc file (replacing any', + \'" existing colorscheme commands). See also ":help solarized"', + \'', + \'" ------------------------------------------------------------------', + \'" Solarized Colorscheme Config', + \'" ------------------------------------------------------------------', + \] +let s:colorscheme_list=[ + \'syntax enable', + \'set background='.&background, + \'colorscheme solarized', + \] +let s:defaults_list=[ + \'" ------------------------------------------------------------------', + \'', + \'" The following items are available options, but do not need to be', + \'" included in your .vimrc as they are currently set to their defaults.', + \'' + \] +let s:lazycat_list=[ + \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"', + \'" ------------------------------------------------------------------', + \] + +function! s:SetOption(name,default) + if type(a:default) == type(0) + let l:wrap='' + let l:ewrap='' + else + let l:wrap='"' + let l:ewrap='\"' + endif + if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default + exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"' + exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")' + else + exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")' + endif +endfunction + +if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) + let s:solarized_termtrans_default = 1 +else + let s:solarized_termtrans_default = 0 +endif +call s:SetOption("termtrans",s:solarized_termtrans_default) +call s:SetOption("degrade",0) +call s:SetOption("bold",1) +call s:SetOption("underline",1) +call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support +call s:SetOption("termcolors",16) +call s:SetOption("contrast","normal") +call s:SetOption("visibility","normal") +call s:SetOption("diffmode","normal") +call s:SetOption("hitrail",0) +call s:SetOption("menu",1) + +"}}} +" Colorscheme initialization "{{{ +" --------------------------------------------------------------------- +hi clear +if exists("syntax_on") + syntax reset +endif +let colors_name = "solarized" + +"}}} +" GUI & CSApprox hexadecimal palettes"{{{ +" --------------------------------------------------------------------- +" +" Set both gui and terminal color values in separate conditional statements +" Due to possibility that CSApprox is running (though I suppose we could just +" leave the hex values out entirely in that case and include only cterm colors) +" We also check to see if user has set solarized (force use of the +" neutral gray monotone palette component) +if (has("gui_running") && g:solarized_degrade == 0) + let s:vmode = "gui" + let s:base03 = "#002b36" + let s:base02 = "#073642" + let s:base01 = "#586e75" + let s:base00 = "#657b83" + let s:base0 = "#839496" + let s:base1 = "#93a1a1" + let s:base2 = "#eee8d5" + let s:base3 = "#fdf6e3" + let s:yellow = "#b58900" + let s:orange = "#cb4b16" + let s:red = "#dc322f" + let s:magenta = "#d33682" + let s:violet = "#6c71c4" + let s:blue = "#268bd2" + let s:cyan = "#2aa198" + "let s:green = "#859900" "original + let s:green = "#719e07" "experimental +elseif (has("gui_running") && g:solarized_degrade == 1) + " These colors are identical to the 256 color mode. They may be viewed + " while in gui mode via "let g:solarized_degrade=1", though this is not + " recommened and is for testing only. + let s:vmode = "gui" + let s:base03 = "#1c1c1c" + let s:base02 = "#262626" + let s:base01 = "#4e4e4e" + let s:base00 = "#585858" + let s:base0 = "#808080" + let s:base1 = "#8a8a8a" + let s:base2 = "#d7d7af" + let s:base3 = "#ffffd7" + let s:yellow = "#af8700" + let s:orange = "#d75f00" + let s:red = "#af0000" + let s:magenta = "#af005f" + let s:violet = "#5f5faf" + let s:blue = "#0087ff" + let s:cyan = "#00afaf" + let s:green = "#5f8700" +elseif g:solarized_termcolors != 256 && &t_Co >= 16 + let s:vmode = "cterm" + let s:base03 = "8" + let s:base02 = "0" + let s:base01 = "10" + let s:base00 = "11" + let s:base0 = "12" + let s:base1 = "14" + let s:base2 = "7" + let s:base3 = "15" + let s:yellow = "3" + let s:orange = "9" + let s:red = "1" + let s:magenta = "5" + let s:violet = "13" + let s:blue = "4" + let s:cyan = "6" + let s:green = "2" +elseif g:solarized_termcolors == 256 + let s:vmode = "cterm" + let s:base03 = "234" + let s:base02 = "235" + let s:base01 = "239" + let s:base00 = "240" + let s:base0 = "244" + let s:base1 = "245" + let s:base2 = "187" + let s:base3 = "230" + let s:yellow = "136" + let s:orange = "166" + let s:red = "124" + let s:magenta = "125" + let s:violet = "61" + let s:blue = "33" + let s:cyan = "37" + let s:green = "64" +else + let s:vmode = "cterm" + let s:bright = "* term=bold cterm=bold" +" let s:base03 = "0".s:bright +" let s:base02 = "0" +" let s:base01 = "2".s:bright +" let s:base00 = "3".s:bright +" let s:base0 = "4".s:bright +" let s:base1 = "6".s:bright +" let s:base2 = "7" +" let s:base3 = "7".s:bright +" let s:yellow = "3" +" let s:orange = "1".s:bright +" let s:red = "1" +" let s:magenta = "5" +" let s:violet = "5".s:bright +" let s:blue = "4" +" let s:cyan = "6" +" let s:green = "2" + let s:base03 = "DarkGray" " 0* + let s:base02 = "Black" " 0 + let s:base01 = "LightGreen" " 2* + let s:base00 = "LightYellow" " 3* + let s:base0 = "LightBlue" " 4* + let s:base1 = "LightCyan" " 6* + let s:base2 = "LightGray" " 7 + let s:base3 = "White" " 7* + let s:yellow = "DarkYellow" " 3 + let s:orange = "LightRed" " 1* + let s:red = "DarkRed" " 1 + let s:magenta = "DarkMagenta" " 5 + let s:violet = "LightMagenta" " 5* + let s:blue = "DarkBlue" " 4 + let s:cyan = "DarkCyan" " 6 + let s:green = "DarkGreen" " 2 + +endif +"}}} +" Formatting options and null values for passthrough effect "{{{ +" --------------------------------------------------------------------- + let s:none = "NONE" + let s:none = "NONE" + let s:t_none = "NONE" + let s:n = "NONE" + let s:c = ",undercurl" + let s:r = ",reverse" + let s:s = ",standout" + let s:ou = "" + let s:ob = "" +"}}} +" Background value based on termtrans setting "{{{ +" --------------------------------------------------------------------- +if (has("gui_running") || g:solarized_termtrans == 0) + let s:back = s:base03 +else + let s:back = "NONE" +endif +"}}} +" Alternate light scheme "{{{ +" --------------------------------------------------------------------- +if &background == "light" + let s:temp03 = s:base03 + let s:temp02 = s:base02 + let s:temp01 = s:base01 + let s:temp00 = s:base00 + let s:base03 = s:base3 + let s:base02 = s:base2 + let s:base01 = s:base1 + let s:base00 = s:base0 + let s:base0 = s:temp00 + let s:base1 = s:temp01 + let s:base2 = s:temp02 + let s:base3 = s:temp03 + if (s:back != "NONE") + let s:back = s:base03 + endif +endif +"}}} +" Optional contrast schemes "{{{ +" --------------------------------------------------------------------- +if g:solarized_contrast == "high" + let s:base01 = s:base00 + let s:base00 = s:base0 + let s:base0 = s:base1 + let s:base1 = s:base2 + let s:base2 = s:base3 + let s:back = s:back +endif +if g:solarized_contrast == "low" + let s:back = s:base02 + let s:ou = ",underline" +endif +"}}} +" Overrides dependent on user specified values and environment "{{{ +" --------------------------------------------------------------------- +if (g:solarized_bold == 0 || &t_Co == 8 ) + let s:b = "" + let s:bb = ",bold" +else + let s:b = ",bold" + let s:bb = "" +endif + +if g:solarized_underline == 0 + let s:u = "" +else + let s:u = ",underline" +endif + +if g:solarized_italic == 0 || s:terminal_italic == 0 + let s:i = "" +else + let s:i = ",italic" +endif +"}}} +" Highlighting primitives"{{{ +" --------------------------------------------------------------------- + +exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" +exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" +exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" +exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" +exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" +exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" +exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" +exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" +exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" +exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" +exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" +exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" +exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" +exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" +exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" +exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" +exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" +exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" + +exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" +exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" +exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" +exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" +exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" +exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" +exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" +exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" +exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" +exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" +exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" +exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" +exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" +exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" +exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" +exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" +exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" +exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" + +exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" +exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" +exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" +exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" +exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'" +exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" +exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" +exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'" +" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15. +exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'" +exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'" + +if has("gui_running") + exe "let s:sp_none = ' guisp=".s:none ."'" + exe "let s:sp_back = ' guisp=".s:back ."'" + exe "let s:sp_base03 = ' guisp=".s:base03 ."'" + exe "let s:sp_base02 = ' guisp=".s:base02 ."'" + exe "let s:sp_base01 = ' guisp=".s:base01 ."'" + exe "let s:sp_base00 = ' guisp=".s:base00 ."'" + exe "let s:sp_base0 = ' guisp=".s:base0 ."'" + exe "let s:sp_base1 = ' guisp=".s:base1 ."'" + exe "let s:sp_base2 = ' guisp=".s:base2 ."'" + exe "let s:sp_base3 = ' guisp=".s:base3 ."'" + exe "let s:sp_green = ' guisp=".s:green ."'" + exe "let s:sp_yellow = ' guisp=".s:yellow ."'" + exe "let s:sp_orange = ' guisp=".s:orange ."'" + exe "let s:sp_red = ' guisp=".s:red ."'" + exe "let s:sp_magenta = ' guisp=".s:magenta."'" + exe "let s:sp_violet = ' guisp=".s:violet ."'" + exe "let s:sp_blue = ' guisp=".s:blue ."'" + exe "let s:sp_cyan = ' guisp=".s:cyan ."'" +else + let s:sp_none = "" + let s:sp_back = "" + let s:sp_base03 = "" + let s:sp_base02 = "" + let s:sp_base01 = "" + let s:sp_base00 = "" + let s:sp_base0 = "" + let s:sp_base1 = "" + let s:sp_base2 = "" + let s:sp_base3 = "" + let s:sp_green = "" + let s:sp_yellow = "" + let s:sp_orange = "" + let s:sp_red = "" + let s:sp_magenta = "" + let s:sp_violet = "" + let s:sp_blue = "" + let s:sp_cyan = "" +endif + +"}}} +" Basic highlighting"{{{ +" --------------------------------------------------------------------- +" note that link syntax to avoid duplicate configuration doesn't work with the +" exe compiled formats + +exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back + +exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none +" *Comment any comment + +exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none +" *Constant any constant +" String a string constant: "this is a string" +" Character a character constant: 'c', '\n' +" Number a number constant: 234, 0xff +" Boolean a boolean constant: TRUE, false +" Float a floating point constant: 2.3e10 + +exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none +" *Identifier any variable name +" Function function name (also: methods for classes) +" +exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none +" *Statement any statement +" Conditional if, then, else, endif, switch, etc. +" Repeat for, do, while, etc. +" Label case, default, etc. +" Operator "sizeof", "+", "*", etc. +" Keyword any other keyword +" Exception try, catch, throw + +exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none +" *PreProc generic Preprocessor +" Include preprocessor #include +" Define preprocessor #define +" Macro same as Define +" PreCondit preprocessor #if, #else, #endif, etc. + +exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none +" *Type int, long, char, etc. +" StorageClass static, register, volatile, etc. +" Structure struct, union, enum, etc. +" Typedef A typedef + +exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none +" *Special any special symbol +" SpecialChar special character in a constant +" Tag you can use CTRL-] on this +" Delimiter character that needs attention +" SpecialComment special things inside a comment +" Debug debugging statements + +exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none +" *Underlined text that stands out, HTML links + +exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none +" *Ignore left blank, hidden |hl-Ignore| + +exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none +" *Error any erroneous construct + +exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none +" *Todo anything that needs extra attention; mostly the +" keywords TODO FIXME and XXX +" +"}}} +" Extended highlighting "{{{ +" --------------------------------------------------------------------- +if (g:solarized_visibility=="high") + exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none +elseif (g:solarized_visibility=="low") + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none +else + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02 + exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none +endif +exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb +exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb +exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb +exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none +exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 +exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none +if ( has("gui_running") || &t_Co > 8 ) + exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00 +else + exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02 +endif +exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none +exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb +exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb +exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 +exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 +if (g:solarized_diffmode=="high") +exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none +exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none +elseif (g:solarized_diffmode=="low") +exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green +exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue +else " normal + if has("gui_running") +exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue + else +exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue + endif +endif +exe "hi! SignColumn" .s:fmt_none .s:fg_base0 +exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red +exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet +exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan +exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow +exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb +exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb +exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb +exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb +exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu +exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 +exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 +hi! link lCursor Cursor +exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 + +"}}} +" vim syntax highlighting "{{{ +" --------------------------------------------------------------------- +"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital +"hi! link vimComment Comment +"hi! link vimLineComment Comment +hi! link vimVar Identifier +hi! link vimFunc Function +hi! link vimUserFunc Function +hi! link helpSpecial Special +hi! link vimSet Normal +hi! link vimSetEqual Normal +exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none +exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none +exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none +exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none +exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none +"}}} +" diff highlighting "{{{ +" --------------------------------------------------------------------- +hi! link diffAdded Statement +hi! link diffLine Identifier +"}}} +" git & gitcommit highlighting "{{{ +"git +"exe "hi! gitDateHeader" +"exe "hi! gitIdentityHeader" +"exe "hi! gitIdentityKeyword" +"exe "hi! gitNotesHeader" +"exe "hi! gitReflogHeader" +"exe "hi! gitKeyword" +"exe "hi! gitIdentity" +"exe "hi! gitEmailDelimiter" +"exe "hi! gitEmail" +"exe "hi! gitDate" +"exe "hi! gitMode" +"exe "hi! gitHashAbbrev" +"exe "hi! gitHash" +"exe "hi! gitReflogMiddle" +"exe "hi! gitReference" +"exe "hi! gitStage" +"exe "hi! gitType" +"exe "hi! gitDiffAdded" +"exe "hi! gitDiffRemoved" +"gitcommit +"exe "hi! gitcommitSummary" +exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none +hi! link gitcommitUntracked gitcommitComment +hi! link gitcommitDiscarded gitcommitComment +hi! link gitcommitSelected gitcommitComment +exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none +exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none +hi! link gitcommitNoBranch gitcommitBranch +exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none +"exe "hi! gitcommitUnmergedType" +"exe "hi! gitcommitType" +"exe "hi! gitcommitNoChanges" +"exe "hi! gitcommitHeader" +exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none +exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none +exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none +hi! link gitcommitDiscardedArrow gitcommitDiscardedFile +hi! link gitcommitSelectedArrow gitcommitSelectedFile +hi! link gitcommitUnmergedArrow gitcommitUnmergedFile +"exe "hi! gitcommitArrow" +"exe "hi! gitcommitOverflow" +"exe "hi! gitcommitBlank" +" }}} +" html highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none +exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none +exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none +"}}} +" perl highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none +exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none + +"}}} +" tex highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none +exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none +"}}} +" ruby highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold +"rubyInclude +"rubySharpBang +"rubyAccess +"rubyPredefinedVariable +"rubyBoolean +"rubyClassVariable +"rubyBeginEnd +"rubyRepeatModifier +"hi! link rubyArrayDelimiter Special " [ , , ] +"rubyCurlyBlock { , , } + +"hi! link rubyClass Keyword +"hi! link rubyModule Keyword +"hi! link rubyKeyword Keyword +"hi! link rubyOperator Operator +"hi! link rubyIdentifier Identifier +"hi! link rubyInstanceVariable Identifier +"hi! link rubyGlobalVariable Identifier +"hi! link rubyClassVariable Identifier +"hi! link rubyConstant Type +"}}} +" haskell syntax highlighting"{{{ +" --------------------------------------------------------------------- +" For use with syntax/haskell.vim : Haskell Syntax File +" http://www.vim.org/scripts/script.php?script_id=3034 +" See also Steffen Siering's github repository: +" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim +" --------------------------------------------------------------------- +" +" Treat True and False specially, see the plugin referenced above +let hs_highlight_boolean=1 +" highlight delims, see the plugin referenced above +let hs_highlight_delimiters=1 + +exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none + +exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none +exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none + +exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none +exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none +exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr +exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none +hi! link hsImportParams Delimiter +hi! link hsDelimTypeExport Delimiter +hi! link hsModuleStartLabel hsStructure +hi! link hsModuleWhereLabel hsModuleStartLabel + +" following is for the haskell-conceal plugin +" the first two items don't have an impact, but better safe +exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none + +"}}} +" pandoc markdown syntax highlighting "{{{ +" --------------------------------------------------------------------- + +"PandocHiLink pandocNormalBlock +exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital +exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none +hi! link pandocVerbatimBlockDeep pandocVerbatimBlock +hi! link pandocCodeBlock pandocVerbatimBlock +hi! link pandocCodeBlockDelim pandocVerbatimBlock +exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr + +" Definitions +" --------------------------------------------------------------------- +let s:fg_pdef = s:fg_violet +exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd +exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none + +" Tables +" --------------------------------------------------------------------- +let s:fg_ptable = s:fg_blue +exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none +hi! link pandocTableStructureTop pandocTableStructre +hi! link pandocTableStructureEnd pandocTableStructre +exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none +exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none +exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none + +" Headings +" --------------------------------------------------------------------- +let s:fg_phead = s:fg_orange +exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold +exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr +exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold + +" Links +" --------------------------------------------------------------------- +exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr +exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb +exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr +exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi +exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 +exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 +exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb +exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr +exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold +exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb +exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none +exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none + +" Main Styles +" --------------------------------------------------------------------- +exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none +exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none + +exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr +hi! link pandocEscapedCharacter pandocEscapePair +hi! link pandocLineBreak pandocEscapePair + +" Embedded Code +" --------------------------------------------------------------------- +exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold +hi! link pandocMetadataTitle pandocMetadata + +"}}} +" Utility autocommand "{{{ +" --------------------------------------------------------------------- +" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed. +" +" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped. +" +" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal. +" +autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif +"}}} +" Highlight Trailing Space {{{ +" Experimental: Different highlight when on cursorline +function! s:SolarizedHiTrail() + if g:solarized_hitrail==0 + hi! clear solarizedTrailingSpace + else + syn match solarizedTrailingSpace "\s*$" + exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red + endif +endfunction +augroup SolarizedHiTrail + autocmd! + if g:solarized_hitrail==1 + autocmd! Syntax * call s:SolarizedHiTrail() + autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif + endif +augroup END +" }}} +" Menus "{{{ +" --------------------------------------------------------------------- +" Turn off Solarized menu by including the following assignment in your .vimrc: +" +" let g:solarized_menu=0 + +function! s:SolarizedOptions() + new "new buffer + setf vim "vim filetype + let failed = append(0, s:defaults_list) + let failed = append(0, s:colorscheme_list) + let failed = append(0, s:options_list) + let failed = append(0, s:lazycat_list) + 0 "jump back to the top +endfunction +if !exists(":SolarizedOptions") + command SolarizedOptions :call s:SolarizedOptions() +endif + +function! SolarizedMenu() + if exists("g:loaded_solarized_menu") + try + silent! aunmenu Solarized + endtry + endif + let g:loaded_solarized_menu = 1 + + if g:colors_name == "solarized" && g:solarized_menu != 0 + + amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized + amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized + amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized + an &Solarized.&Contrast.-sep- + amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast' + + amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized + amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized + amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized + an &Solarized.&Visibility.-sep- + amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility' + + amenu &Solarized.&Background.&Toggle\ Background :ToggleBG + amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized + amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized + an &Solarized.&Background.-sep- + amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg + + if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized" + if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized" + if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized" + + amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized + + if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif + exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized" + an &Solarized.&Experimental.-sep- + amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail' + + an &Solarized.-sep1- + + amenu &Solarized.&Autogenerate\ options :SolarizedOptions + + an &Solarized.-sep2- + + amenu &Solarized.&Help.&Solarized\ Help :help solarized + amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg + amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu + + an 9999.77 &Help.&Solarized\ Colorscheme :help solarized + an 9999.78 &Help.&Toggle\ Background :help togglebg + an 9999.79 &Help.-sep3- + + endif +endfunction + +autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif + +"}}} +" License "{{{ +" --------------------------------------------------------------------- +" +" Copyright (c) 2011 Ethan Schoonover +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to deal +" in the Software without restriction, including without limitation the rights +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +" copies of the Software, and to permit persons to whom the Software is +" furnished to do so, subject to the following conditions: +" +" The above copyright notice and this permission notice shall be included in +" all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +" THE SOFTWARE. +" +" vim:foldmethod=marker:foldlevel=0 +"}}} diff --git a/samples/WebIDL/AnimationEvent.webidl b/samples/WebIDL/AnimationEvent.webidl index e48ed571..5dbc2752 100644 --- a/samples/WebIDL/AnimationEvent.webidl +++ b/samples/WebIDL/AnimationEvent.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/WebIDL/Fetch.webidl b/samples/WebIDL/Fetch.webidl index fb022126..87a4e957 100644 --- a/samples/WebIDL/Fetch.webidl +++ b/samples/WebIDL/Fetch.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/XML/Application.xib b/samples/XML/Application.xib new file mode 100644 index 00000000..6c2e5f4d --- /dev/null +++ b/samples/XML/Application.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/Storyboard.storyboard b/samples/XML/Storyboard.storyboard new file mode 100644 index 00000000..673e0f7e --- /dev/null +++ b/samples/XML/Storyboard.storyboard @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/XML/tei-odd-sample.odd b/samples/XML/tei-odd-sample.odd new file mode 100644 index 00000000..a6a736c4 --- /dev/null +++ b/samples/XML/tei-odd-sample.odd @@ -0,0 +1,1304 @@ + + + + + + + TEI Simple + + + TEI Consortium + + Distributed under a + Creative Commons Attribution-ShareAlike 3.0 Unported License + +

Copyright 2014 TEI Consortium.

+

All rights reserved.

+

Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met:

+ + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +

This software is provided by the copyright holders and contributors "as is" and + any express or implied warranties, including, but not limited to, the implied + warranties of merchantability and fitness for a particular purpose are + disclaimed. In no event shall the copyright holder or contributors be liable + for any direct, indirect, incidental, special, exemplary, or consequential + damages (including, but not limited to, procurement of substitute goods or + services; loss of use, data, or profits; or business interruption) however + caused and on any theory of liability, whether in contract, strict liability, + or tort (including negligence or otherwise) arising in any way out of the use + of this software, even if advised of the possibility of such damage.

+
+

TEI material can be licensed differently depending on the use you intend to make + of it. Hence it is made available under both the CC+BY and BSD-2 licences. The + CC+BY licence is generally appropriate for usages which treat TEI content as data + or documentation. The BSD-2 licence is generally appropriate for usage of TEI + content in a software environment. For further information or clarification, + please contact the TEI Consortium.

+
+
+ +

created ab initio during a meeting in Oxford

+
+
+
+ + + + + TEI Simple + + Sebastian Rahtz + Brian Pytlik Zillig + Martin Mueller + Version 0.1: 30th November 2014 + + + +
+ Summary +

The TEI Simple project aims to define a highly-constrained and prescriptive subset of the Text Encoding Initiative (TEI) Guidelines + suited to the representation of early modern and modern books, a formally-defined set of + processing rules which permit modern web applications to easily present and analyze the + encoded texts, mapping to other ontologies, and processes to describe the encoding status + and richness of a TEI digital text. This document describes + the constrained subset

+
+
+ + Background +

The Text Encoding Initiative (TEI) has developed over 20 years into a key technology in + text-centric humanities disciplines, with an extremely wide range of applications, from + diplomatic editions to dictionaries, from prosopography to speech transcription and + linguistic analysis. It has been able to achieve its range of use by adopting a descriptive rather than prescriptive approach + , by recommending customization to suit particular projects, and by + eschewing any attempt to dictate how the digital texts should be rendered or exchanged. + However, this flexibility has come at the cost of relatively limited success in + interoperability. In our view there is a distinct set of uses (primarily in the area of + digitized ‘European’-style books) that would benefit from a prescriptive recipe for digital text; this will sit alongside other + domain-specific, constrained TEI customizations, such as the very successful Epidoc in the epigraphic community. TEI-Simple may become a prototype + for a new family of constrained customizations. For instance, a TEI Simple MS for + manuscript based work could be built on top of the ENRICH project, drawing on many of the + lessons and some of the code for TEI Simple.

+

The TEI has long maintained an introductory subset (TEI Lite), and a constrained + customization for use in outsourcing production to commercial vendors (TEI Tite), but both + of these permit enormous variation, and have nothing to say about processing. The present + project can be viewed in some ways as a revision of TEI Lite, re-examining the basis of + the choices therein, focusing it for a more specific area, and adding a "cradle to grave" + processing model that associates the TEI Simple schema with explicit and standardized + options for displaying and querying texts. This means being able to specify what a + programmer should do with particular TEI elements when they are encountered, allowing + programmers to build stylesheets that work for everybody and to query a corpus of + documents reliably.

+

This project, TEI Simple, focuses on interoperability, machine generation, and + low-cost integration. The TEI architecture facilitates customizations of many kinds; TEI + Simple aims to produce a complete 'out of the box' customization which meets the needs of + the many users for whom the task of creating a customization is daunting or seems + irrelevant. TEI Simple in no way intends to constrain the expressive liberty of encoders + who do not think that it is either possible or desirable to follow this path. It does, + however, promise to make life easier for those who think there is some virtue in + travelling that path as far as it will take you, which for quite a few projects will be + far enough. Some users will never feel the need to move beyond it, others will outgrow it, + and when they do they will have learned enough to do so.

+

A major driver for this project is the texts created by phase 1 of the EEBO-TCP project, + which were placed in the public domain on 1 January 2015. Another 45,000 texts will + join over the following five years, creating by 2020 an archive of 70,000 consistently + encoded books published in England from 1475 to 1700, including works of literature, + philosophy, politics, religion, geography, science and all other areas of human endeavor. + When we compare the query potential of the EEBO TCP texts in their current and quite + simple encoding with flat file versions of those text, it is clear that the difference in + query potential is very high, especially if you add to that coarse encoding simple forms + of linguistic annotation or named entity tagging that can be added in a largely + algorithmic fashion. During 2012 and 2013 extensive work has been undertaken at + Northwestern, Michigan and Oxford to enrich these texts and bring them into line with the + current TEI Guidelines (where necessary working with the TEI to modify the Guidelines). + TEI Simple uses this corpus as a point of departure and will provide its users with a + friendlier environment for manipulating EEBO texts in various projects. But TEI Simple + should not be understood as an EEBO specific project. We believe that, given the + extraordinary degree of internal diversity in the EEBO source files, a project that starts + from them can, with appropriate modifications, accommodate a wide range of printed texts + differing in language, genre, or time and place of origin.

+
+
+ The TEI Simple schema + + + + + + + + + + + + +
+ The TEI infrastructure + + + +
+
+ The header +

The default set of elements for the header are loaded using the + header module. In addition, elements from other modules are + loaded, if they are tagged in the classification as being needed for the header + only.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Elements which are only intended to be used in the header are banned from the + text, using a Schematron rule.

+ + + +
+
+
+ Transcription +

In order to support the sourcedoc and facsimile elements, the + basic transcriptional elements are loaded, and two attribute classes.

+ + + + + + + + + + + + + + + + + + + + + +
+
+ Attribute classes + +

The tei module brings with it a default set of attribute classes. + We need some more specialist ones from other modules, and to delete some + default ones which we don't plan to use.

+ + + + + + + +

Some uncommon attributes are removed from global linking.

+ + + + + + + + +

URLs have a constraint that a local pointer must have a corresponding ID.

+ + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + +

Constrained value lists are added to attribute classes where possible.

+ + + + + + + above the line + + + below the line + + + + at the top of the page + + + at the top right of the page + + + at the top left of the page + + + at the top center of the page + + + + at the bottom right of the page + + + + at the bottom left of the page + + + + at the bottom center of the page + + + + at the foot of the page + + + underneath a table + + + + + + + + in the outer margin + + + + in the left margin + + + + in the right margin + + + on the opposite, i.e. facing, page. + + + on the other side of the leaf. + + + at the end of the volume. + + + at the end the current division. + + + at the end the current paragraph. + + + + within the body of the text. + + + in a predefined space, for example left by an earlier + scribe. + + + formatted like a quotation + + + + + + + + + + + characters + + + + + lines + + + + pages + + + + words + + + + centimetres + + + millimetre + + + inches + + + + + + + + + + + Error: Each of + the rendition values in "" + must point to a local ID or to a token in the Simple scheme + () + + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + + + + + + + all capitals + + + + + + + black letter or gothic typeface + + + + + + + bold typeface + + + marked with a brace under the bottom of the text + + + + border around the text + + + + centred + + + cursive typeface + + + block display + + + strikethrough with double line + + + underlined with double line + + + + initial letter larger or decorated + + + floated out of main flow + + + with a hyphen here (eg in line break) + + + inline rendering + + + + + + + + italic typeface + + + + larger type + + + + aligned to the left or left-justified + + + + marked with a brace on the left side of the text + + + + letter-spaced + + + upright shape and default weight of typeface + + + + normal typeface weight + + + + aligned to the right or right-justified + + + marked with a brace to the right of the text + + + + rotated to the left + + + + rotated to the right + + + + + small caps + + + + smaller type + + + strike through + + + + subscript + + + + + superscript + + + marked with a brace above the text + + + fixed-width typeface, like typewriter + + + + underlined with single line + + + underlined with wavy line + + + + + +
+
+
+ Model classes + +

A set of unused model classes are removed.

+ + + + + + + + + + + + + +
+
+
+ Elements +

The main part of Simple is the set of selected elements.

+ + + + + + + + + + + + + + + color: green; text-decoration: underline; + + + + + margin-top: 2em; margin-left: 2em; margin-right: 2em; margin-bottom: + 2em; + + + + + white-space: nowrap; + + + + + + + + + + + + + + margin-bottom: 0.5em; + + + + + + + + + + + + + + Element "" may not be empty. + + + + + + + + + + + + + + + + + + + + Insert list. + + + + + Insert item, rendered as described in parent list rendition. + + + + + list-style: ordered; + + + + + + + + Insert table cell. + + + + + + + Element "" must have at least two child + elements. + + + + + + Element "" must have corresponding corr/sic, expand/abbr, reg/orig + + + + + + + + + + + + Insert cit. + + + + + margin-top: 1em; margin-left: 1em; margin-left: 1em; + + + + + Omit, if handled in parent choice. + + + content: '['; + content: ']'; + + + + + + + + + + + + + + text-decoration: line-through; + + + + + + + + border: 1px solid black; padding: 5px; + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + font-size: large; + + + + + + + + + + + + + + + content: '[..'; + content: '..]'; + color: grey;font-style:italic; + + + + + + +display: block; +border-top: solid 1pt blue; +border-bottom: solid 1pt blue; + + + + + + + margin: 6pt; + border: solid black 1pt; + + + + + + font-style:italic; + + + + + + + + + + + + + + + + + + + + color: grey; + + + content: '[..'; + content: '..]'; + color: grey; + + + content: '[...]'; + + + + + + + + + + + + + + font-style: italic; + + + font-style: italic; + + + font-style: italic; + + + font-weight: bold; + + + + + + + font-style: italic; + + + font-style: italic; + + + + + + + + + + + + margin-left: 1em; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + margin-left: 10px;margin-right: 10px; font-size:smaller; + + + content:" ["; + content:"] "; + font-size:small; + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + text-align: justify; + + + + + + please make sure pb elements are not at the start or end of mixed content + + + + + display: block; + color: grey; + float: right; + + content: '[Page '; + content: ']'; + + + + + + + + + + + Omit if located in teiHeader. + + + + + Omit if located in teiHeader. + + + + + margin-left: 10px; margin-right: 10px; + + + + content: '‘'; + content: '’'; + + + margin-left: 10px; margin-right: 10px; + + + + + + If it is inside a paragraph then it is inline, otherwise it is block level + content: '‘'; + content: '’'; + + + If it is inside a paragraph then it is inline, otherwise it is block level + margin-left: 10px; margin-right: 10px; + + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + + + + + + + + + + font-weight: bold; + + + Insert table row. + + + + + + + + + + + + + + + + + + + content: '{'; + content: '}'; + + + + + + text-align: right; + + + + + font-style: italic; + + + + + + + + + + + + font-style:italic; + + + + + + + + font-style: italic; + + + + + + + + + content:"<"; + content:">"; + + + content:"["; + content:"]"; + + + content:"("; + content:")"; + + + content:"{"; + content:"}"; + + + + + + font-size: smaller; + background-color: #F0F0F0; + + + + + + + + + + + + + + + + + + + + + + + + + max-width: 80%; + margin: auto; + font-family: Verdana, Tahoma, Geneva, Arial, Helvetica, sans-serif; + + + + + + + + + + + color: red; font-size: 2em; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + font-style: italic; + + + + + text-align: center; + + + + + + + + color: green; + + + + + content: ' [?] '; + + + + + + + +

A small number of elements have constrained value lists added.

+ + + + + + Using TeX or LaTeX notation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + data cell + + + label cell + + + + row or column sum data + + + table total data + + + + + + + + + + + data cell + + + label cell + + + row or column sum data + + + table total data + + + + + +
+ + text-transform: uppercase; + font-family: fantasy; + font-weight: bold; + padding-bottom: 2pt; border-bottom: dashed gray 2pt; + padding: 2pt; border: solid black 1pt; + text-align: center; + font-family: cursive; + text-decoration: line-through; color: red; + text-decoration: underline; color: red; + font-size : 6em; + font-family: cursive; + font-weight : bold; + vertical-align: top; + height: 1em; + line-height: 1em; + float : left; + width : 1em; + color : #c00; + margin: 0em; + padding: 0px; + float:right; display: block; + font-size: smaller; + clear: right; + padding: 4pt; + width: 15%; + + + display:inline; + display:block; + font-style: italic; + font-size: larger; + text-align: left; + padding-left: 2pt; border-left: dotted gray 2pt; + letter-spacing: 0.5em; + font-style:roman; + font-weight:normal; + text-align: right; + padding-right: 2pt; border-right: dotted gray 2pt; + -webkit-transform: rotate(90deg); transform: rotate(90deg); + -webkit-transform: rotate(-90deg); transform: rotate(-90deg); + font-variant: small-caps; + font-size: smaller; + text-decoration: line-through; + vertical-align: bottom; font-size: smaller; + vertical-align: super; font-size: smaller; + padding-top: 2pt; border-top: dotted gray 2pt; + font-family:monospace; + text-decoration: underline; + text-decoration: underline; text-decoration-style: wavy; + +
+
+ +
+
diff --git a/samples/wisp/intro.wisp b/samples/wisp/intro.wisp index 6b817dac..b222b6e2 100644 --- a/samples/wisp/intro.wisp +++ b/samples/wisp/intro.wisp @@ -258,7 +258,7 @@ My name is wisp!" ;; evaluating the reference to the value of the corresponding variable. foo -;; If you wish to refer to the literal symbol, rather then reference you +;; If you wish to refer to the literal symbol, rather than reference you ;; could use (quote foo) ;; or more usually diff --git a/script/travis/before_install b/script/travis/before_install index 442f6718..516ec956 100755 --- a/script/travis/before_install +++ b/script/travis/before_install @@ -5,6 +5,8 @@ set -ex # Fetch all commits/refs needed to run our tests. git fetch origin master:master v2.0.0:v2.0.0 test/attributes:test/attributes test/master:test/master +sudo apt-get update + script/vendor-deb libicu48 libicu-dev if ruby -e 'exit RUBY_VERSION >= "2.0" && RUBY_VERSION < "2.1"'; then # Workaround for https://bugs.ruby-lang.org/issues/8074. We can't use this @@ -15,6 +17,9 @@ else bundle config build.charlock_holmes --with-icu-dir=$(pwd)/vendor/debs fi +# Replace SSH links to submodules by HTTPS links. +sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules + git submodule init git submodule sync --quiet script/fast-submodule-update diff --git a/test/fixtures/Data/Modelines/fundamentalEmacs.c b/test/fixtures/Data/Modelines/fundamentalEmacs.c new file mode 100644 index 00000000..b384bc79 --- /dev/null +++ b/test/fixtures/Data/Modelines/fundamentalEmacs.c @@ -0,0 +1,6 @@ +// -*- fundamental -*- + +int main(int argc, char * argc[]) +{ + this should not be syntax highlighted, even though it looks like c. +} diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs1 b/test/fixtures/Data/Modelines/seeplusplusEmacs1 new file mode 100644 index 00000000..6c1b6e80 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs1 @@ -0,0 +1,2 @@ +// -*-c++-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs2 b/test/fixtures/Data/Modelines/seeplusplusEmacs2 new file mode 100644 index 00000000..3756149c --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs2 @@ -0,0 +1,2 @@ +// -*- c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs3 b/test/fixtures/Data/Modelines/seeplusplusEmacs3 new file mode 100644 index 00000000..7a871e6a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs3 @@ -0,0 +1,2 @@ +// -*- mode:C++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs4 b/test/fixtures/Data/Modelines/seeplusplusEmacs4 new file mode 100644 index 00000000..f020eb5a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs4 @@ -0,0 +1,2 @@ +// -*- font:bar;mode:c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs5 b/test/fixtures/Data/Modelines/seeplusplusEmacs5 new file mode 100644 index 00000000..49e9a7d6 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs5 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs6 b/test/fixtures/Data/Modelines/seeplusplusEmacs6 new file mode 100644 index 00000000..305f7f77 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs6 @@ -0,0 +1,2 @@ +// -*- foo : bar ; mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs7 b/test/fixtures/Data/Modelines/seeplusplusEmacs7 new file mode 100644 index 00000000..236c3b8e --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs7 @@ -0,0 +1,2 @@ +// -*- mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs8 b/test/fixtures/Data/Modelines/seeplusplusEmacs8 new file mode 100644 index 00000000..f502058a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs8 @@ -0,0 +1,2 @@ +// -*- font:x;foo : bar ; mode : C++ ; bar : foo ; foooooo:baaaaar;fo:ba-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs9 b/test/fixtures/Data/Modelines/seeplusplusEmacs9 new file mode 100644 index 00000000..953ca220 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs9 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo;tyrell:corp-*- +template class { X i; }; diff --git a/test/fixtures/Data/sourcemap.v1.map b/test/fixtures/Data/sourcemap.v1.map new file mode 100644 index 00000000..35c9b29f --- /dev/null +++ b/test/fixtures/Data/sourcemap.v1.map @@ -0,0 +1,12 @@ +/** Begin line maps. **/{ “file”:”out.js”, "count": 2 } +[0,0,0,0,0,0,1,1,1,1,2] +[2,2,2,2,2,2,3,4,4,4,4,4] +/** Begin file information. **/ +[“a.js”, “b.js”] +[“b.js”, “c.js”, “d.js”] +/** Begin mapping definitions. **/ +["a.js", 1, 34] +["a.js", 5, 2] +["b.js", 1, 3, "event"] +["c.js", 1, 4] +["d.js", 3, 78, "foo"] diff --git a/test/fixtures/Data/sourcemap.v3.map b/test/fixtures/Data/sourcemap.v3.map new file mode 100644 index 00000000..7acd1b9d --- /dev/null +++ b/test/fixtures/Data/sourcemap.v3.map @@ -0,0 +1 @@ +{"version":3,"file":"out.js","sourceRoot":"","sources":["foo.js","bar.js"],"sourcesContent":[null,null],"names":["src","maps","are","fun"],"mappings":"A,AAAB;;ABCDE;"} diff --git a/test/helper.rb b/test/helper.rb index a6a03672..ab3cc8fa 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -2,6 +2,7 @@ require "bundler/setup" require "minitest/autorun" require "mocha/setup" require "linguist" +require 'color-proximity' def fixtures_path File.expand_path("../fixtures", __FILE__) diff --git a/test/test_blob.rb b/test/test_blob.rb index 7c8fddc1..138eef8e 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -234,12 +234,15 @@ class TestBlob < Minitest::Test assert sample_blob("Zephir/filenames/exception.zep.php").generated? assert !sample_blob("Zephir/Router.zep").generated? - - assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil) + assert sample_blob("node_modules/grunt/lib/grunt.js").generated? # Godep saved dependencies assert sample_blob("Godeps/Godeps.json").generated? assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + + # Cython-generated C/C++ + assert sample_blob("C/sgd_fast.c").generated? + assert sample_blob("C++/wrapper_inner.cpp").generated? end def test_vendored @@ -275,6 +278,8 @@ class TestBlob < Minitest::Test assert sample_blob("deps/http_parser/http_parser.c").vendored? assert sample_blob("deps/v8/src/v8.h").vendored? + assert sample_blob("tools/something/else.c").vendored? + # Chart.js assert sample_blob("some/vendored/path/Chart.js").vendored? assert !sample_blob("some/vendored/path/chart.js").vendored? @@ -285,6 +290,9 @@ class TestBlob < Minitest::Test # Debian packaging assert sample_blob("debian/cron.d").vendored? + # Erlang + assert sample_blob("rebar").vendored? + # Minified JavaScript and CSS assert sample_blob("foo.min.js").vendored? assert sample_blob("foo.min.css").vendored? @@ -293,6 +301,9 @@ class TestBlob < Minitest::Test assert !sample_blob("foomin.css").vendored? assert !sample_blob("foo.min.txt").vendored? + #.osx + assert sample_blob(".osx").vendored? + # Prototype assert !sample_blob("public/javascripts/application.js").vendored? assert sample_blob("public/javascripts/prototype.js").vendored? @@ -300,6 +311,9 @@ class TestBlob < Minitest::Test assert sample_blob("public/javascripts/controls.js").vendored? assert sample_blob("public/javascripts/dragdrop.js").vendored? + # Samples + assert sample_blob("Samples/Ruby/foo.rb").vendored? + # jQuery assert sample_blob("jquery.js").vendored? assert sample_blob("public/javascripts/jquery.js").vendored? @@ -407,6 +421,7 @@ class TestBlob < Minitest::Test # Test fixtures assert sample_blob("test/fixtures/random.rkt").vendored? assert sample_blob("Test/fixtures/random.rkt").vendored? + assert sample_blob("tests/fixtures/random.rkt").vendored? # Cordova/PhoneGap assert sample_blob("cordova.js").vendored? @@ -443,6 +458,13 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored? assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored? + + # Sphinx docs + assert sample_blob("docs/_build/asset.doc").vendored? + assert sample_blob("docs/theme/file.css").vendored? + + # Vagrant + assert sample_blob("puphpet/file.pp").vendored? end def test_documentation diff --git a/test/test_color_proximity.rb b/test/test_color_proximity.rb new file mode 100644 index 00000000..2356e74a --- /dev/null +++ b/test/test_color_proximity.rb @@ -0,0 +1,23 @@ +require_relative "./helper" + +class TestColorProximity < Minitest::Test + include Linguist + + def cut_hash(color) + color[1..-1] if color.start_with?('#') + end + + def test_color_proximity + langs_with_colors = Language.all.reject { |language| language.color.nil? } + cp = ColorProximity.new(0.05, langs_with_colors.map { |lang| cut_hash(lang.color) }) + failing_threshold = langs_with_colors.map do |lang| + state = cp.past_threshold?(cut_hash(lang.color)) + if !state.first && lang.color != "##{state.last.first}" + "- #{lang} (#{lang.color}) is too close to #{state.last}" + end + end.compact + message = "The following #{failing_threshold.length} languages have failing color thresholds. Please modify the hex color.\n#{failing_threshold.join("\n")}" + + assert failing_threshold.empty?, message + end +end diff --git a/test/test_generated.rb b/test/test_generated.rb index b714e19e..164e1fc2 100644 --- a/test/test_generated.rb +++ b/test/test_generated.rb @@ -5,47 +5,69 @@ class TestGenerated < Minitest::Test class DataLoadedError < StandardError; end - def generated_without_loading_data(name) - blob = File.join(samples_path, name) + def generated_without_loading_data(blob) begin - assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{name} was not recognized as a generated file" + assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{blob} was not recognized as a generated file" rescue DataLoadedError - assert false, "Data was loaded when calling generated? on #{name}" + assert false, "Data was loaded when calling generated? on #{blob}" end end - def generated_loading_data(name) - blob = File.join(samples_path, name) - assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{name}") do + def generated_loading_data(blob) + assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{blob}") do Generated.generated?(blob, lambda { raise DataLoadedError.new }) end end - def test_check_generated_without_loading_data + def generated_fixture_without_loading_data(name) + generated_without_loading_data(File.join(fixtures_path, name)) + end + + def generated_fixture_loading_data(name) + generated_loading_data(File.join(fixtures_path, name)) + end + + def generated_sample_without_loading_data(name) + generated_without_loading_data(File.join(samples_path, name)) + end + + def generated_sample_loading_data(name) + generated_loading_data(File.join(samples_path, name)) + end + + def test_check_generated # Xcode project files - generated_without_loading_data("Binary/MainMenu.nib") - generated_without_loading_data("Dummy/foo.xcworkspacedata") - generated_without_loading_data("Dummy/foo.xcuserstate") + generated_sample_without_loading_data("Binary/MainMenu.nib") + generated_sample_without_loading_data("Dummy/foo.xcworkspacedata") + generated_sample_without_loading_data("Dummy/foo.xcuserstate") # .NET designer file - generated_without_loading_data("Dummu/foo.designer.cs") + generated_sample_without_loading_data("Dummu/foo.designer.cs") # Composer generated composer.lock file - generated_without_loading_data("JSON/composer.lock") + generated_sample_without_loading_data("JSON/composer.lock") # Node modules - generated_without_loading_data("Dummy/node_modules/foo.js") + generated_sample_without_loading_data("Dummy/node_modules/foo.js") # Godep saved dependencies - generated_without_loading_data("Godeps/Godeps.json") - generated_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") + generated_sample_without_loading_data("Godeps/Godeps.json") + generated_sample_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") # Generated by Zephir - generated_without_loading_data("C/exception.zep.c") - generated_without_loading_data("C/exception.zep.h") - generated_without_loading_data("PHP/exception.zep.php") + generated_sample_without_loading_data("C/exception.zep.c") + generated_sample_without_loading_data("C/exception.zep.h") + generated_sample_without_loading_data("PHP/exception.zep.php") # Minified files - generated_loading_data("JavaScript/jquery-1.6.1.min.js") + generated_sample_loading_data("JavaScript/jquery-1.6.1.min.js") + + # Source Map + generated_fixture_without_loading_data("Data/bootstrap.css.map") + generated_fixture_loading_data("Data/sourcemap.v3.map") + generated_fixture_loading_data("Data/sourcemap.v1.map") + + # Specflow + generated_fixture_without_loading_data("Features/BindingCulture.feature.cs") end end diff --git a/test/test_grammars.rb b/test/test_grammars.rb index c5fbee4e..88624ae8 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -13,7 +13,6 @@ class TestGrammars < Minitest::Test # These grammars have no license but have been grandfathered in. New grammars # must have a license that allows redistribution. "vendor/grammars/Sublime-Lasso", - "vendor/grammars/Sublime-REBOL", "vendor/grammars/x86-assembly-textmate-bundle" ].freeze diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index b3197c69..4a156445 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -77,7 +77,7 @@ class TestHeuristcs < Minitest::Test assert_heuristics({ "AsciiDoc" => "AsciiDoc/list.asc", "AGS Script" => "AGS Script/GlobalScript.asc", - "Public Key" => "Public Key/sunCert.asc" + "Public Key" => all_fixtures("Public Key", "*.asc") }) end diff --git a/test/test_language.rb b/test/test_language.rb index f3847a77..3c204c0a 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -79,7 +79,6 @@ class TestLanguage < Minitest::Test assert_equal Language['Java'], Language['Java Server Pages'].group assert_equal Language['Python'], Language['Cython'].group assert_equal Language['Python'], Language['NumPy'].group - assert_equal Language['Shell'], Language['Batchfile'].group assert_equal Language['Shell'], Language['Gentoo Ebuild'].group assert_equal Language['Shell'], Language['Gentoo Eclass'].group assert_equal Language['Shell'], Language['Tcsh'].group @@ -188,7 +187,7 @@ class TestLanguage < Minitest::Test assert_equal [], Language.find_by_extension('foo.rb') assert_equal [Language['Ruby']], Language.find_by_extension('rb') assert_equal [Language['Ruby']], Language.find_by_extension('.rb') - assert_equal [Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') + assert_equal [Language['Limbo'], Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') end def test_find_all_by_extension @@ -286,9 +285,9 @@ class TestLanguage < Minitest::Test def test_color assert_equal '#701516', Language['Ruby'].color - assert_equal '#3581ba', Language['Python'].color + assert_equal '#3572A5', Language['Python'].color assert_equal '#f1e05a', Language['JavaScript'].color - assert_equal '#31859c', Language['TypeScript'].color + assert_equal '#2b7489', Language['TypeScript'].color assert_equal '#3d9970', Language['LSL'].color end diff --git a/test/test_modelines.rb b/test/test_modelines.rb index 6c68cc87..a2be5d3b 100644 --- a/test/test_modelines.rb +++ b/test/test_modelines.rb @@ -10,6 +10,16 @@ class TestModelines < Minitest::Test def test_modeline_strategy assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby") assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9") + assert_modeline Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c") assert_modeline Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl") assert_modeline Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md") assert_modeline Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc") @@ -18,6 +28,16 @@ class TestModelines < Minitest::Test def test_modeline_languages assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby").language assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplus").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9").language + assert_equal Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c").language assert_equal Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl").language assert_equal Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md").language assert_equal Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc").language diff --git a/test/test_samples.rb b/test/test_samples.rb index 6de1c7e9..dc3524c2 100644 --- a/test/test_samples.rb +++ b/test/test_samples.rb @@ -34,6 +34,14 @@ class TestSamples < Minitest::Test assert !data["interpreters"].empty? end + def test_ext_or_shebang + Samples.each do |sample| + if sample[:extname].to_s.empty? && !sample[:filename] + assert sample[:interpreter], "#{sample[:path]} should have a file extension or a shebang, maybe it belongs in filenames/ subdir" + end + end + end + # Check that there aren't samples with extensions or interpreters that # aren't explicitly defined in languages.yml languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) @@ -42,7 +50,6 @@ class TestSamples < Minitest::Test options['extensions'] ||= [] if extnames = Samples.cache['extnames'][name] extnames.each do |extname| - next if extname == '.script!' assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" end end @@ -50,8 +57,8 @@ class TestSamples < Minitest::Test options['interpreters'] ||= [] if interpreters = Samples.cache['interpreters'][name] interpreters.each do |interpreter| - # next if extname == '.script!' - assert options['interpreters'].include?(interpreter), "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" + assert options['interpreters'].include?(interpreter), + "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" end end end diff --git a/test/test_shebang.rb b/test/test_shebang.rb index a2d25117..de3344ec 100644 --- a/test/test_shebang.rb +++ b/test/test_shebang.rb @@ -38,6 +38,7 @@ class TestShebang < Minitest::Test assert_interpreter "perl", "#! perl" assert_interpreter "ruby", "#!/bin/sh\n\n\nexec ruby $0 $@" - end + assert_interpreter "sh", "#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh" + end end diff --git a/test/test_tokenizer.rb b/test/test_tokenizer.rb index 780db019..75f854a9 100644 --- a/test/test_tokenizer.rb +++ b/test/test_tokenizer.rb @@ -31,6 +31,8 @@ class TestTokenizer < Minitest::Test assert_equal %w(foo), tokenize("foo\n# Comment") assert_equal %w(foo bar), tokenize("foo\n# Comment\nbar") assert_equal %w(foo), tokenize("foo\n// Comment") + assert_equal %w(foo), tokenize("foo\n-- Comment") + assert_equal %w(foo), tokenize("foo\n\" Comment") assert_equal %w(foo), tokenize("foo /* Comment */") assert_equal %w(foo), tokenize("foo /* \nComment\n */") assert_equal %w(foo), tokenize("foo ") @@ -82,16 +84,16 @@ class TestTokenizer < Minitest::Test end def test_shebang - assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh.script!")[0] - assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash.script!")[0] - assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh.script!")[0] - assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl.script!")[0] - assert_equal "SHEBANG#!python", tokenize(:"Python/python.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] - assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] - assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0] - assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial.script!")[0] + assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh")[0] + assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash")[0] + assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh")[0] + assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl")[0] + assert_equal "SHEBANG#!python", tokenize(:"Python/python")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2")[0] + assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js")[0] + assert_equal "SHEBANG#!php", tokenize(:"PHP/php")[0] + assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial")[0] assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] end diff --git a/vendor/grammars/CLIPS-sublime b/vendor/grammars/CLIPS-sublime index f6904baa..6a11bc51 160000 --- a/vendor/grammars/CLIPS-sublime +++ b/vendor/grammars/CLIPS-sublime @@ -1 +1 @@ -Subproject commit f6904baa78b8b918a7815f4f467fe0ab51c38972 +Subproject commit 6a11bc512e3f22ae9636e64bc101e79334501089 diff --git a/vendor/grammars/ColdFusion b/vendor/grammars/ColdFusion index ee54c805..3e7e68b1 160000 --- a/vendor/grammars/ColdFusion +++ b/vendor/grammars/ColdFusion @@ -1 +1 @@ -Subproject commit ee54c80589c1618c5a8c55afdc83f770d7bdf44b +Subproject commit 3e7e68b14dc3f55082e4d449666d3fde3f024a02 diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index 1d2e0963..f52478b0 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit 1d2e0963012d4959d5517c3dd0dcf486b1ded74b +Subproject commit f52478b0b66d3b9aa90dbaa8cac912d87cc28a7b diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 7bbedb02..35d82156 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 7bbedb02585912c6e89bec59621aaf2950c28a09 +Subproject commit 35d821569d562403af8b85a4e8d9acc841656b41 diff --git a/vendor/grammars/Julia.tmbundle b/vendor/grammars/Julia.tmbundle index 6541d86c..e2918776 160000 --- a/vendor/grammars/Julia.tmbundle +++ b/vendor/grammars/Julia.tmbundle @@ -1 +1 @@ -Subproject commit 6541d86c1f6f19a3a0a26917e9dd81b043b37bc3 +Subproject commit e2918776e14506e0bc100c2501c56188acfc2bd3 diff --git a/vendor/grammars/Modelica b/vendor/grammars/Modelica index e1fd8532..10c5dc64 160000 --- a/vendor/grammars/Modelica +++ b/vendor/grammars/Modelica @@ -1 +1 @@ -Subproject commit e1fd853290e4a560f20383103c786334da505772 +Subproject commit 10c5dc6484b6d851a109025af64a83ae0e6a6c73 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index ae0b75d9..e31e1f53 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit ae0b75d99a60f555e1b5cbab53eaed2ca9ca9101 +Subproject commit e31e1f5329b420879c50f230118cc81972710c71 diff --git a/vendor/grammars/Stylus b/vendor/grammars/Stylus index c060554e..8b1c77d0 160000 --- a/vendor/grammars/Stylus +++ b/vendor/grammars/Stylus @@ -1 +1 @@ -Subproject commit c060554eb82ed253969457b2609d9eb5c7739c6e +Subproject commit 8b1c77d0543d12984ebb872180d942629edc31ac diff --git a/vendor/grammars/Sublime-Logos b/vendor/grammars/Sublime-Logos index 9a7aa2fb..5375dc53 160000 --- a/vendor/grammars/Sublime-Logos +++ b/vendor/grammars/Sublime-Logos @@ -1 +1 @@ -Subproject commit 9a7aa2fb92b52f0e422f50b60fd5608d935ef69b +Subproject commit 5375dc5394d72c36088d6eb1304f632bea232d83 diff --git a/vendor/grammars/Sublime-REBOL b/vendor/grammars/Sublime-REBOL index 977ba9bb..102402f7 160000 --- a/vendor/grammars/Sublime-REBOL +++ b/vendor/grammars/Sublime-REBOL @@ -1 +1 @@ -Subproject commit 977ba9bb5881e4eec0f144f9f8dc23b0137cae00 +Subproject commit 102402f71aa3a7770b0c06c0183eff1be78e7280 diff --git a/vendor/grammars/Sublime-Red b/vendor/grammars/Sublime-Red new file mode 160000 index 00000000..085e0f43 --- /dev/null +++ b/vendor/grammars/Sublime-Red @@ -0,0 +1 @@ +Subproject commit 085e0f43b3b829ec63a3cedaa1b87c85275d526f diff --git a/vendor/grammars/SublimeClarion b/vendor/grammars/SublimeClarion new file mode 160000 index 00000000..f070aadd --- /dev/null +++ b/vendor/grammars/SublimeClarion @@ -0,0 +1 @@ +Subproject commit f070aadd26c5376be522bd0c9a135ff85bb76f13 diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus index 6f4e954f..9ae03977 160000 --- a/vendor/grammars/SublimePapyrus +++ b/vendor/grammars/SublimePapyrus @@ -1 +1 @@ -Subproject commit 6f4e954f35976f72f2a620af68aa0ba73e48478b +Subproject commit 9ae03977b68314597cc585ffada1998b3b1ef3be diff --git a/vendor/grammars/api-blueprint-sublime-plugin b/vendor/grammars/api-blueprint-sublime-plugin new file mode 160000 index 00000000..4713b0e8 --- /dev/null +++ b/vendor/grammars/api-blueprint-sublime-plugin @@ -0,0 +1 @@ +Subproject commit 4713b0e8248b63d993ec5bcaf3d70051e56acec2 diff --git a/vendor/grammars/css.tmbundle b/vendor/grammars/css.tmbundle index bef87ff9..2ce91736 160000 --- a/vendor/grammars/css.tmbundle +++ b/vendor/grammars/css.tmbundle @@ -1 +1 @@ -Subproject commit bef87ff98730f62cee3bb470f63bd2eb3fb2e4f9 +Subproject commit 2ce91736ca17bbf72ca13ef82ff23c90cc01bf8f diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index 65c9cd9a..2914099c 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit 65c9cd9a6540f6e47e5770314e13de7df05b2d2b +Subproject commit 2914099c31092978a631953704031d3a6e028125 diff --git a/vendor/grammars/elixir-tmbundle b/vendor/grammars/elixir-tmbundle index 99910870..9542bbb6 160000 --- a/vendor/grammars/elixir-tmbundle +++ b/vendor/grammars/elixir-tmbundle @@ -1 +1 @@ -Subproject commit 99910870bb1cd095fc0af9010f018f1ae9e95b4e +Subproject commit 9542bbb684b7241fc39e15af998344fea22b5dde diff --git a/vendor/grammars/factor b/vendor/grammars/factor index e237b49f..1d1ef907 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit e237b49f83c12aff3070c570404ef6bb19d1cc95 +Subproject commit 1d1ef9079cb9af228fc1b3e95720e3fc2e73d3bf diff --git a/vendor/grammars/fsharpbinding b/vendor/grammars/fsharpbinding index 513db1c4..e64619da 160000 --- a/vendor/grammars/fsharpbinding +++ b/vendor/grammars/fsharpbinding @@ -1 +1 @@ -Subproject commit 513db1c44390c4967afe4dd220b9ec4f6a52cc3e +Subproject commit e64619da3c08576ac468a2bac7477e6e537ddf22 diff --git a/vendor/grammars/haskell.tmbundle b/vendor/grammars/haskell.tmbundle index 30fa1e28..c3137ccc 160000 --- a/vendor/grammars/haskell.tmbundle +++ b/vendor/grammars/haskell.tmbundle @@ -1 +1 @@ -Subproject commit 30fa1e283244960e520694d8db6189d9b2bde9f5 +Subproject commit c3137ccc287c096f6436a80d71b32348df1102cc diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 84a4fab1..de60e51d 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 84a4fab144c185f4430f68cf10de35a7dfc79cb7 +Subproject commit de60e51dc1bfcb66ccf0c3b481c180c4674656b0 diff --git a/vendor/grammars/html.tmbundle b/vendor/grammars/html.tmbundle index 4831b07b..d1231e3d 160000 --- a/vendor/grammars/html.tmbundle +++ b/vendor/grammars/html.tmbundle @@ -1 +1 @@ -Subproject commit 4831b07b7211d34ab5570bbf877690cf4fefc9ef +Subproject commit d1231e3da1c22d3a5310223881b89c311aec9f04 diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index b061f52f..4197de8b 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit b061f52fb369cc0b483cc1ddc4cd0fc088615754 +Subproject commit 4197de8b70bce0b58202d28f5f824b3ba1cec5a7 diff --git a/vendor/grammars/java.tmbundle b/vendor/grammars/java.tmbundle index ccdebdf8..bed5760a 160000 --- a/vendor/grammars/java.tmbundle +++ b/vendor/grammars/java.tmbundle @@ -1 +1 @@ -Subproject commit ccdebdf888400c492ea55884e03a8f9d1b61de8b +Subproject commit bed5760ae0ca4784fc153e0323978a096ea656dc diff --git a/vendor/grammars/jflex.tmbundle b/vendor/grammars/jflex.tmbundle new file mode 160000 index 00000000..12a7a88b --- /dev/null +++ b/vendor/grammars/jflex.tmbundle @@ -0,0 +1 @@ +Subproject commit 12a7a88b7a34bb9490b6077ad743332acf66a456 diff --git a/vendor/grammars/kotlin-sublime-package b/vendor/grammars/kotlin-sublime-package index e8e18955..3ddc52e8 160000 --- a/vendor/grammars/kotlin-sublime-package +++ b/vendor/grammars/kotlin-sublime-package @@ -1 +1 @@ -Subproject commit e8e18955d7f18d42574dc55a37e6f31339036800 +Subproject commit 3ddc52e8dbc8bef1f1a534b94bd0f688bc2a4422 diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index 51978f7d..b8dfdf5d 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit 51978f7d1b1a7b92f77ccf02b042b768946844bd +Subproject commit b8dfdf5dceeff927406dd5ff72246a60f9d16dfa diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index da1fdb69..3028ec95 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit da1fdb6949eea5d107c8f30063437d14a3c3a677 +Subproject commit 3028ec95a23ccf3cc4899646f9387a79db713b11 diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 8daa1008..00529e69 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 8daa10089a14bacf2346bb16f31d1189489696e0 +Subproject commit 00529e691575496eb82e5a154b592b5a2616e57f diff --git a/vendor/grammars/language-shellscript b/vendor/grammars/language-shellscript index 98397197..2163c458 160000 --- a/vendor/grammars/language-shellscript +++ b/vendor/grammars/language-shellscript @@ -1 +1 @@ -Subproject commit 9839719721e3fb67c2df8461b2b296e6ff027e7f +Subproject commit 2163c45828d825b6142d6d5785b9333965bea98d diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 610ee6ef..52bed0cd 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 610ee6ef0d6162249374a480c1209c1ddd46a955 +Subproject commit 52bed0cd3a455500ef620f083a3d2b78b789bdd4 diff --git a/vendor/grammars/oracle.tmbundle b/vendor/grammars/oracle.tmbundle index b41e6d33..1da31563 160000 --- a/vendor/grammars/oracle.tmbundle +++ b/vendor/grammars/oracle.tmbundle @@ -1 +1 @@ -Subproject commit b41e6d33d6a71649d97e497fb1504aa01e7ceb41 +Subproject commit 1da315635f75d1af57056c5c13221d4a95264e6f diff --git a/vendor/grammars/perl.tmbundle b/vendor/grammars/perl.tmbundle index 3396190b..b1f624ee 160000 --- a/vendor/grammars/perl.tmbundle +++ b/vendor/grammars/perl.tmbundle @@ -1 +1 @@ -Subproject commit 3396190be167310600d00da6ff9af7807cea4b12 +Subproject commit b1f624ee3a3825f6dd1233f6379cc4d0deaac4e0 diff --git a/vendor/grammars/powershell b/vendor/grammars/powershell index 0d9478d1..18c9f0e5 160000 --- a/vendor/grammars/powershell +++ b/vendor/grammars/powershell @@ -1 +1 @@ -Subproject commit 0d9478d1175969291741ee46a85445dd34f38d04 +Subproject commit 18c9f0e553f68053713503b8dcca2c4712381ad6 diff --git a/vendor/grammars/sublime-idris b/vendor/grammars/sublime-idris index 5e936d1c..77166c0a 160000 --- a/vendor/grammars/sublime-idris +++ b/vendor/grammars/sublime-idris @@ -1 +1 @@ -Subproject commit 5e936d1c924c0edaead59a82bd9e9c1456eef61b +Subproject commit 77166c0ac40fbb9744b467976efa4969d9a7a65c diff --git a/vendor/grammars/sublime-netlinx b/vendor/grammars/sublime-netlinx new file mode 160000 index 00000000..2bdcfad2 --- /dev/null +++ b/vendor/grammars/sublime-netlinx @@ -0,0 +1 @@ +Subproject commit 2bdcfad2a5b2f04e459db5a2edb8ef33f74c1994 diff --git a/vendor/grammars/sublime-nginx b/vendor/grammars/sublime-nginx index 872afddd..ba28d29d 160000 --- a/vendor/grammars/sublime-nginx +++ b/vendor/grammars/sublime-nginx @@ -1 +1 @@ -Subproject commit 872afddd2d61acae85560fa009658257f4030244 +Subproject commit ba28d29de729f01d39a29fa214a6818112b48803 diff --git a/vendor/grammars/sublime-rust b/vendor/grammars/sublime-rust index 40df3591..a1c3d2dc 160000 --- a/vendor/grammars/sublime-rust +++ b/vendor/grammars/sublime-rust @@ -1 +1 @@ -Subproject commit 40df35916158b680eb3d9acb9080a03f7799144c +Subproject commit a1c3d2dc96c68326416c3b8c8402a8020d29b94d diff --git a/vendor/grammars/sublime-tea b/vendor/grammars/sublime-tea index b5f1025e..62b508c9 160000 --- a/vendor/grammars/sublime-tea +++ b/vendor/grammars/sublime-tea @@ -1 +1 @@ -Subproject commit b5f1025e074a29d3d1e133fc0e1b59b1adec986c +Subproject commit 62b508c948bd7c500a80a898a8fa05bdc311c9d1 diff --git a/vendor/grammars/sublime-varnish b/vendor/grammars/sublime-varnish index 9f0710bc..4915dcb3 160000 --- a/vendor/grammars/sublime-varnish +++ b/vendor/grammars/sublime-varnish @@ -1 +1 @@ -Subproject commit 9f0710bc4ea5f2915a2ff9c34977a57904a4a0c6 +Subproject commit 4915dcb3f130b0aedb96badffd963294194f1efe diff --git a/vendor/grammars/sublime_cobol b/vendor/grammars/sublime_cobol index 4be198de..b848a101 160000 --- a/vendor/grammars/sublime_cobol +++ b/vendor/grammars/sublime_cobol @@ -1 +1 @@ -Subproject commit 4be198de811d856e3f67ea04d7626ce82aff3dcb +Subproject commit b848a101048aaf9582d95868983386a3e8e39896 diff --git a/vendor/grammars/xc.tmbundle b/vendor/grammars/xc.tmbundle index 7239c92b..309d1f66 160000 --- a/vendor/grammars/xc.tmbundle +++ b/vendor/grammars/xc.tmbundle @@ -1 +1 @@ -Subproject commit 7239c92bd612b01fc5bfea36056d530db78d6c64 +Subproject commit 309d1f662ca32513d3eed19f44ce4ef1d6f5f611