diff --git a/.gitignore b/.gitignore
index b844b143..97ef7367 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
Gemfile.lock
+.bundle/
+vendor/
diff --git a/.travis.yml b/.travis.yml
index 943c1b12..83880550 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,10 +2,8 @@ before_install:
- sudo apt-get install libicu-dev -y
- gem update --system 2.1.11
rvm:
- - 1.8.7
- - 1.9.2
- 1.9.3
- 2.0.0
- - ree
+ - 2.1.1
notifications:
disabled: true
diff --git a/Gemfile b/Gemfile
index 3df9dcfc..851fabc2 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,7 +1,2 @@
source 'https://rubygems.org'
gemspec
-
-if RUBY_VERSION < "1.9.3"
- # escape_utils 1.0.0 requires 1.9.3 and above
- gem "escape_utils", "0.3.2"
-end
diff --git a/README.md b/README.md
index 1ff2ed8f..660ac00c 100644
--- a/README.md
+++ b/README.md
@@ -106,8 +106,50 @@ To update the `samples.json` after adding new files to [`samples/`](https://gith
bundle exec rake samples
+### A note on language extensions
+
+Linguist has a number of methods available to it for identifying the language of a particular file. The initial lookup is based upon the extension of the file, possible file extensions are defined in an array called `extensions`. Take a look at this example for example for `Perl`:
+
+```
+Perl:
+ type: programming
+ ace_mode: perl
+ color: "#0298c3"
+ extensions:
+ - .pl
+ - .PL
+ - .perl
+ - .ph
+ - .plx
+ - .pm
+ - .pod
+ - .psgi
+ interpreters:
+ - perl
+```
+Any of the extensions defined are valid but the first in this array should be the most popular.
+
### Testing
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
Here's our current build status, which is hopefully green: [](http://travis-ci.org/github/linguist)
+
+### Releasing
+
+If you are the current maintainer of this gem:
+
+ 0. Create a branch for the release: `git checkout -b cut-release-vxx.xx.xx`
+ 0. Make sure your local dependencies are up to date: `bundle install`
+ 0. Ensure that samples are updated: `bundle exec rake samples`
+ 0. Ensure that tests are green: `bundle exec rake test`
+ 0. Bump gem version in `lib/linguist/version.rb`. For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985).
+ 0. Make a PR to github/linguist. For example, [#1238](https://github.com/github/linguist/pull/1238).
+ 0. Build a local gem: `gem build github-linguist.gemspec`
+ 0. Testing:
+ 0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem
+ 0. Install the new gem locally
+ 0. Test behavior locally, branch deploy, whatever needs to happen
+ 0. Merge github/linguist PR
+ 0. Tag and push: `git tag vx.xx.xx; git push --tags`
+ 0. Push to rubygems.org -- `gem push github-linguist-2.10.12.gem`
diff --git a/github-linguist.gemspec b/github-linguist.gemspec
index f10f8d1f..d4c2337a 100644
--- a/github-linguist.gemspec
+++ b/github-linguist.gemspec
@@ -1,6 +1,8 @@
+require File.expand_path('../lib/linguist/version', __FILE__)
+
Gem::Specification.new do |s|
s.name = 'github-linguist'
- s.version = '2.10.11'
+ s.version = Linguist::VERSION
s.summary = "GitHub Language detection"
s.description = 'We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs.'
@@ -11,10 +13,10 @@ Gem::Specification.new do |s|
s.files = Dir['lib/**/*']
s.executables << 'linguist'
- s.add_dependency 'charlock_holmes', '~> 0.6.6'
- s.add_dependency 'escape_utils', '>= 0.3.1'
+ s.add_dependency 'charlock_holmes', '~> 0.7.3'
+ s.add_dependency 'escape_utils', '~> 1.0.1'
s.add_dependency 'mime-types', '~> 1.19'
- s.add_dependency 'pygments.rb', '~> 0.5.4'
+ s.add_dependency 'pygments.rb', '~> 0.6.0'
s.add_development_dependency 'json'
s.add_development_dependency 'mocha'
diff --git a/lib/linguist.rb b/lib/linguist.rb
index ad8337c8..3714b5a0 100644
--- a/lib/linguist.rb
+++ b/lib/linguist.rb
@@ -4,3 +4,4 @@ require 'linguist/heuristics'
require 'linguist/language'
require 'linguist/repository'
require 'linguist/samples'
+require 'linguist/version'
diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb
index 37793a36..15ab2d9f 100644
--- a/lib/linguist/blob_helper.rb
+++ b/lib/linguist/blob_helper.rb
@@ -112,6 +112,12 @@ module Linguist
end
end
+ def ruby_encoding
+ if hash = detect_encoding
+ hash[:ruby_encoding]
+ end
+ end
+
# Try to guess the encoding
#
# Returns: a Hash, with :encoding, :confidence, :type
@@ -241,7 +247,31 @@ module Linguist
def lines
@lines ||=
if viewable? && data
- data.split(/\r\n|\r|\n/, -1)
+ # `data` is usually encoded as ASCII-8BIT even when the content has
+ # been detected as a different encoding. However, we are not allowed
+ # to change the encoding of `data` because we've made the implicit
+ # guarantee that each entry in `lines` is encoded the same way as
+ # `data`.
+ #
+ # Instead, we re-encode each possible newline sequence as the
+ # detected encoding, then force them back to the encoding of `data`
+ # (usually a binary encoding like ASCII-8BIT). This means that the
+ # byte sequence will match how newlines are likely encoded in the
+ # file, but we don't have to change the encoding of `data` as far as
+ # Ruby is concerned. This allows us to correctly parse out each line
+ # without changing the encoding of `data`, and
+ # also--importantly--without having to duplicate many (potentially
+ # large) strings.
+ begin
+ encoded_newlines = ["\r\n", "\r", "\n"].
+ map { |nl| nl.encode(ruby_encoding, "ASCII-8BIT").force_encoding(data.encoding) }
+
+ data.split(Regexp.union(encoded_newlines), -1)
+ rescue Encoding::ConverterNotFoundError
+ # The data is not splittable in the detected encoding. Assume it's
+ # one big line.
+ [data]
+ end
else
[]
end
diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb
index 5c3de141..761288f0 100644
--- a/lib/linguist/generated.rb
+++ b/lib/linguist/generated.rb
@@ -63,7 +63,8 @@ module Linguist
generated_jni_header? ||
composer_lock? ||
node_modules? ||
- vcr_cassette?
+ vcr_cassette? ||
+ generated_by_zephir?
end
# Internal: Is the blob an XCode project file?
@@ -237,6 +238,13 @@ module Linguist
!!name.match(/composer.lock/)
end
+ # Internal: Is the blob a generated by Zephir
+ #
+ # Returns true or false.
+ def generated_by_zephir?
+ !!name.match(/.\.zep\.(?:c|h|php)$/)
+ end
+
# Is the blob a VCR Cassette file?
#
# Returns true or false
diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb
index a3de46e9..c1116780 100644
--- a/lib/linguist/heuristics.rb
+++ b/lib/linguist/heuristics.rb
@@ -28,6 +28,9 @@ module Linguist
if languages.all? { |l| ["Common Lisp", "OpenCL"].include?(l) }
disambiguate_cl(data, languages)
end
+ if languages.all? { |l| ["Rebol", "R"].include?(l) }
+ disambiguate_r(data, languages)
+ end
end
end
@@ -73,6 +76,13 @@ module Linguist
matches
end
+ def self.disambiguate_r(data, languages)
+ matches = []
+ matches << Language["Rebol"] if /\bRebol\b/i.match(data)
+ matches << Language["R"] if data.include?("<-")
+ matches
+ end
+
def self.active?
!!ACTIVE
end
diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb
index bb91d126..a8e7a33c 100644
--- a/lib/linguist/language.rb
+++ b/lib/linguist/language.rb
@@ -24,7 +24,6 @@ module Linguist
@extension_index = Hash.new { |h,k| h[k] = [] }
@interpreter_index = Hash.new { |h,k| h[k] = [] }
@filename_index = Hash.new { |h,k| h[k] = [] }
- @primary_extension_index = {}
# Valid Languages types
TYPES = [:data, :markup, :programming, :prose]
@@ -80,12 +79,6 @@ module Linguist
@extension_index[extension] << language
end
- if @primary_extension_index.key?(language.primary_extension)
- raise ArgumentError, "Duplicate primary extension: #{language.primary_extension}"
- end
-
- @primary_extension_index[language.primary_extension] = language
-
language.interpreters.each do |interpreter|
@interpreter_index[interpreter] << language
end
@@ -191,8 +184,7 @@ module Linguist
# Returns all matching Languages or [] if none were found.
def self.find_by_filename(filename)
basename, extname = File.basename(filename), File.extname(filename)
- langs = [@primary_extension_index[extname]] +
- @filename_index[basename] +
+ langs = @filename_index[basename] +
@extension_index[extname]
langs.compact.uniq
end
@@ -299,15 +291,6 @@ module Linguist
@interpreters = attributes[:interpreters] || []
@filenames = attributes[:filenames] || []
- unless @primary_extension = attributes[:primary_extension]
- raise ArgumentError, "#{@name} is missing primary extension"
- end
-
- # Prepend primary extension unless its already included
- if primary_extension && !extensions.include?(primary_extension)
- @extensions = [primary_extension] + extensions
- end
-
# Set popular, and searchable flags
@popular = attributes.key?(:popular) ? attributes[:popular] : false
@searchable = attributes.key?(:searchable) ? attributes[:searchable] : true
@@ -395,20 +378,6 @@ module Linguist
# Returns the extensions Array
attr_reader :extensions
- # Deprecated: Get primary extension
- #
- # Defaults to the first extension but can be overridden
- # in the languages.yml.
- #
- # The primary extension can not be nil. Tests should verify this.
- #
- # This attribute is only used by app/helpers/gists_helper.rb for
- # creating the language dropdown. It really should be using `name`
- # instead. Would like to drop primary extension.
- #
- # Returns the extension String.
- attr_reader :primary_extension
-
# Public: Get interpreters
#
# Examples
@@ -426,6 +395,27 @@ module Linguist
#
# Returns the extensions Array
attr_reader :filenames
+
+ # Public: Return all possible extensions for language
+ def all_extensions
+ (extensions + [primary_extension]).uniq
+ end
+
+ # Deprecated: Get primary extension
+ #
+ # Defaults to the first extension but can be overridden
+ # in the languages.yml.
+ #
+ # The primary extension can not be nil. Tests should verify this.
+ #
+ # This method is only used by app/helpers/gists_helper.rb for creating
+ # the language dropdown. It really should be using `name` instead.
+ # Would like to drop primary extension.
+ #
+ # Returns the extension String.
+ def primary_extension
+ extensions.first
+ end
# Public: Get URL escaped name.
#
@@ -485,7 +475,7 @@ module Linguist
#
# Returns html String
def colorize(text, options = {})
- lexer.highlight(text, options = {})
+ lexer.highlight(text, options)
end
# Public: Return name as String representation
@@ -568,9 +558,8 @@ module Linguist
:group_name => options['group'],
:searchable => options.key?('searchable') ? options['searchable'] : true,
:search_term => options['search_term'],
- :extensions => options['extensions'].sort,
+ :extensions => [options['extensions'].first] + options['extensions'][1..-1].sort,
:interpreters => options['interpreters'].sort,
- :primary_extension => options['primary_extension'],
:filenames => options['filenames'],
:popular => popular.include?(name)
)
diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml
index 6eb2a378..ccb79b96 100644
--- a/lib/linguist/languages.yml
+++ b/lib/linguist/languages.yml
@@ -3,18 +3,15 @@
# All languages have an associated lexer for syntax highlighting. It
# defaults to name.downcase, which covers most cases.
#
-# type - Either data, programming, markup, or nil
+# type - Either data, programming, markup, prose, or nil
# lexer - An explicit lexer String (defaults to name)
# aliases - An Array of additional aliases (implicitly
# includes name.downcase)
# ace_mode - A String name of Ace Mode (if available)
# wrap - Boolean wrap to enable line wrapping (default: false)
-# extension - An Array of associated extensions
-# interpreter - An Array of associated interpreters
-# primary_extension - A String for the main extension associated with
-# the language. Must be unique. Used when a Language is picked
-# from a dropdown and we need to automatically choose an
-# extension.
+# extensions - An Array of associated extensions (the first one is
+# considered the primary extension)
+# interpreters - An Array of associated interpreters
# searchable - Boolean flag to enable searching (defaults to true)
# search_term - Deprecated: Some languages maybe indexed under a
# different alias. Avoid defining new exceptions.
@@ -28,13 +25,15 @@
ABAP:
type: programming
lexer: ABAP
- primary_extension: .abap
+ extensions:
+ - .abap
ANTLR:
type: programming
color: "#9DC3FF"
lexer: ANTLR
- primary_extension: .g4
+ extensions:
+ - .g4
ASP:
type: programming
@@ -44,8 +43,8 @@ ASP:
aliases:
- aspx
- aspx-vb
- primary_extension: .asp
extensions:
+ - .asp
- .asax
- .ascx
- .ashx
@@ -56,11 +55,11 @@ ASP:
ATS:
type: programming
color: "#1ac620"
- primary_extension: .dats
lexer: OCaml
aliases:
- ats2
extensions:
+ - .dats
- .atxt
- .hats
- .sats
@@ -72,37 +71,48 @@ ActionScript:
search_term: as3
aliases:
- as3
- primary_extension: .as
+ extensions:
+ - .as
Ada:
type: programming
color: "#02f88c"
- primary_extension: .adb
extensions:
+ - .adb
- .ads
Agda:
type: programming
color: "#467C91"
- primary_extension: .agda
+ extensions:
+ - .agda
+
+Alloy:
+ type: programming # 'modeling' would be more appropiate
+ lexer: Text only
+ color: "#cc5c24"
+ extensions:
+ - .als
ApacheConf:
type: markup
aliases:
- apache
- primary_extension: .apacheconf
+ extensions:
+ - .apacheconf
Apex:
type: programming
lexer: Text only
- primary_extension: .cls
+ extensions:
+ - .cls
AppleScript:
type: programming
aliases:
- osascript
- primary_extension: .applescript
extensions:
+ - .applescript
- .scpt
interpreters:
- osascript
@@ -111,24 +121,33 @@ Arc:
type: programming
color: "#ca2afe"
lexer: Text only
- primary_extension: .arc
+ extensions:
+ - .arc
Arduino:
type: programming
color: "#bd79d1"
lexer: C++
- primary_extension: .ino
+ extensions:
+ - .ino
AsciiDoc:
type: prose
lexer: Text only
ace_mode: asciidoc
wrap: true
- primary_extension: .asciidoc
extensions:
+ - .asciidoc
- .adoc
- .asc
+AspectJ:
+ type: programming
+ lexer: AspectJ
+ color: "#1957b0"
+ extensions:
+ - .aj
+
Assembly:
type: programming
lexer: NASM
@@ -136,11 +155,14 @@ Assembly:
search_term: nasm
aliases:
- nasm
- primary_extension: .asm
+ extensions:
+ - .asm
+ - .inc
Augeas:
type: programming
- primary_extension: .aug
+ extensions:
+ - .aug
AutoHotkey:
type: programming
@@ -148,7 +170,8 @@ AutoHotkey:
color: "#6594b9"
aliases:
- ahk
- primary_extension: .ahk
+ extensions:
+ - .ahk
AutoIt:
type: programming
@@ -157,13 +180,14 @@ AutoIt:
- au3
- AutoIt3
- AutoItScript
- primary_extension: .au3
+ extensions:
+ - .au3
Awk:
type: programming
lexer: Awk
- primary_extension: .awk
extensions:
+ - .awk
- .auk
- .gawk
- .mawk
@@ -180,54 +204,60 @@ Batchfile:
search_term: bat
aliases:
- bat
- primary_extension: .bat
extensions:
+ - .bat
- .cmd
Befunge:
- primary_extension: .befunge
+ extensions:
+ - .befunge
BlitzBasic:
type: programming
aliases:
- blitzplus
- blitz3d
- primary_extension: .bb
extensions:
+ - .bb
- .decls
BlitzMax:
- primary_extension: .bmx
+ extensions:
+ - .bmx
Bluespec:
type: programming
lexer: verilog
- primary_extension: .bsv
+ extensions:
+ - .bsv
Boo:
type: programming
color: "#d4bec1"
- primary_extension: .boo
+ extensions:
+ - .boo
Brainfuck:
- primary_extension: .b
extensions:
+ - .b
- .bf
Brightscript:
type: programming
lexer: Text only
- primary_extension: .brs
+ extensions:
+ - .brs
Bro:
type: programming
- primary_extension: .bro
+ extensions:
+ - .bro
C:
type: programming
color: "#555"
- primary_extension: .c
extensions:
+ - .c
- .cats
- .w
@@ -238,8 +268,8 @@ C#:
color: "#5a25a2"
aliases:
- csharp
- primary_extension: .cs
extensions:
+ - .cs
- .cshtml
- .csx
@@ -250,8 +280,8 @@ C++:
color: "#f34b7d"
aliases:
- cpp
- primary_extension: .cpp
extensions:
+ - .cpp
- .C
- .c++
- .cc
@@ -261,13 +291,16 @@ C++:
- .hh
- .hpp
- .hxx
+ - .inl
- .tcc
- .tpp
+ - .ipp
C-ObjDump:
type: data
lexer: c-objdump
- primary_extension: .c-objdump
+ extensions:
+ - .c-objdump
C2hs Haskell:
type: programming
@@ -275,24 +308,26 @@ C2hs Haskell:
group: Haskell
aliases:
- c2hs
- primary_extension: .chs
+ extensions:
+ - .chs
CLIPS:
type: programming
lexer: Text only
- primary_extension: .clp
+ extensions:
+ - .clp
CMake:
- primary_extension: .cmake
extensions:
+ - .cmake
- .cmake.in
filenames:
- CMakeLists.txt
COBOL:
type: programming
- primary_extension: .cob
extensions:
+ - .cob
- .cbl
- .ccp
- .cobol
@@ -300,42 +335,44 @@ COBOL:
CSS:
ace_mode: css
- color: "#1f085e"
- primary_extension: .css
+ color: "#563d7c"
+ extensions:
+ - .css
Ceylon:
type: programming
lexer: Ceylon
- primary_extension: .ceylon
+ extensions:
+ - .ceylon
ChucK:
lexer: Java
- primary_extension: .ck
+ extensions:
+ - .ck
Cirru:
type: programming
color: "#aaaaff"
- primary_extension: .cirru
# ace_mode: cirru
# lexer: Cirru
lexer: Text only
extensions:
- - .cr
+ - .cirru
Clean:
type: programming
color: "#3a81ad"
lexer: Text only
- primary_extension: .icl
extensions:
+ - .icl
- .dcl
Clojure:
type: programming
ace_mode: clojure
color: "#db5855"
- primary_extension: .clj
extensions:
+ - .clj
- .cl2
- .cljc
- .cljs
@@ -353,8 +390,8 @@ CoffeeScript:
aliases:
- coffee
- coffee-script
- primary_extension: .coffee
extensions:
+ - .coffee
- ._coffee
- .cson
- .iced
@@ -371,8 +408,8 @@ ColdFusion:
search_term: cfm
aliases:
- cfm
- primary_extension: .cfm
extensions:
+ - .cfm
- .cfc
Common Lisp:
@@ -380,8 +417,8 @@ Common Lisp:
color: "#3fb68b"
aliases:
- lisp
- primary_extension: .lisp
extensions:
+ - .lisp
- .asd
- .cl
- .lsp
@@ -394,15 +431,24 @@ Common Lisp:
- clisp
- ecl
+Component Pascal:
+ type: programming
+ lexer: Delphi
+ color: "#b0ce4e"
+ extensions:
+ - .cp
+ - .cps
+
Coq:
type: programming
- primary_extension: .coq
+ extensions:
+ - .coq
Cpp-ObjDump:
type: data
lexer: cpp-objdump
- primary_extension: .cppobjdump
extensions:
+ - .cppobjdump
- .c++objdump
- .cxx-objdump
@@ -410,123 +456,156 @@ Creole:
type: prose
lexer: Text only
wrap: true
- primary_extension: .creole
+ extensions:
+ - .creole
Crystal:
type: programming
lexer: Ruby
- primary_extension: .cr
+ extensions:
+ - .cr
ace_mode: ruby
Cucumber:
lexer: Gherkin
- primary_extension: .feature
+ extensions:
+ - .feature
Cuda:
+ type: programming
lexer: CUDA
- primary_extension: .cu
extensions:
+ - .cu
- .cuh
Cython:
type: programming
group: Python
- primary_extension: .pyx
extensions:
+ - .pyx
- .pxd
- .pxi
D:
type: programming
color: "#fcd46d"
- primary_extension: .d
extensions:
+ - .d
- .di
D-ObjDump:
type: data
lexer: d-objdump
- primary_extension: .d-objdump
+ extensions:
+ - .d-objdump
DM:
type: programming
color: "#075ff1"
lexer: C++
- primary_extension: .dm
+ extensions:
+ - .dm
aliases:
- byond
DOT:
- type: programming
+ type: data
lexer: Text only
- primary_extension: .dot
extensions:
+ - .dot
- .gv
Darcs Patch:
search_term: dpatch
aliases:
- dpatch
- primary_extension: .darcspatch
extensions:
+ - .darcspatch
- .dpatch
Dart:
type: programming
color: "#98BAD6"
- primary_extension: .dart
+ extensions:
+ - .dart
DCPU-16 ASM:
type: programming
lexer: dasm16
- primary_extension: .dasm16
extensions:
+ - .dasm16
- .dasm
aliases:
- dasm16
Diff:
- primary_extension: .diff
+ extensions:
+ - .diff
+
+Dogescript:
+ type: programming
+ lexer: Text only
+ color: "#cca760"
+ extensions:
+ - .djs
Dylan:
type: programming
color: "#3ebc27"
- primary_extension: .dylan
extensions:
+ - .dylan
- .intr
- .lid
+E:
+ type: programming
+ color: "#ccce35"
+ lexer: Text only
+ extensions:
+ - .E
+
Ecere Projects:
type: data
group: JavaScript
lexer: JSON
- primary_extension: .epj
+ extensions:
+ - .epj
ECL:
type: programming
color: "#8a1267"
- primary_extension: .ecl
lexer: ECL
extensions:
+ - .ecl
- .eclxml
+Eagle:
+ type: markup
+ color: "#3994bc"
+ lexer: XML
+ extensions:
+ - .sch
+ - .brd
+
Eiffel:
type: programming
lexer: Text only
color: "#946d57"
- primary_extension: .e
+ extensions:
+ - .e
Elixir:
type: programming
color: "#6e4a7e"
- primary_extension: .ex
extensions:
+ - .ex
- .exs
Elm:
type: programming
lexer: Haskell
- primary_extension: .elm
+ extensions:
+ - .elm
Emacs Lisp:
type: programming
@@ -535,17 +614,17 @@ Emacs Lisp:
aliases:
- elisp
- emacs
- primary_extension: .el
filenames:
- .emacs
extensions:
+ - .el
- .emacs
Erlang:
type: programming
color: "#0faf8d"
- primary_extension: .erl
extensions:
+ - .erl
- .hrl
F#:
@@ -555,25 +634,25 @@ F#:
search_term: fsharp
aliases:
- fsharp
- primary_extension: .fs
extensions:
+ - .fs
- .fsi
- .fsx
FLUX:
type: programming
color: "#33CCFF"
- primary_extension: .fx
lexer: Text only
extensions:
+ - .fx
- .flux
FORTRAN:
type: programming
lexer: Fortran
color: "#4d41b1"
- primary_extension: .f90
extensions:
+ - .f90
- .F
- .F03
- .F08
@@ -593,7 +672,8 @@ FORTRAN:
Factor:
type: programming
color: "#636746"
- primary_extension: .factor
+ extensions:
+ - .factor
filenames:
- .factor-rc
- .factor-boot-rc
@@ -601,85 +681,146 @@ Factor:
Fancy:
type: programming
color: "#7b9db4"
- primary_extension: .fy
extensions:
+ - .fy
- .fancypack
filenames:
- Fakefile
-
+
Fantom:
type: programming
color: "#dbded5"
- primary_extension: .fan
+ extensions:
+ - .fan
Forth:
type: programming
- primary_extension: .fth
color: "#341708"
lexer: Text only
extensions:
+ - .fth
- .4th
+Frege:
+ type: programming
+ color: "#00cafe"
+ lexer: Haskell
+ extensions:
+ - .fr
+
+Game Maker Language:
+ type: programming
+ color: "#8ad353"
+ lexer: JavaScript
+ extensions:
+ - .gml
+
+GAMS:
+ type: programming
+ lexer: Text only
+ extensions:
+ - .gms
+
+GAP:
+ type: programming
+ lexer: Text only
+ extensions:
+ - .g
+ - .gap
+ - .gd
+ - .gi
+
GAS:
type: programming
group: Assembly
- primary_extension: .s
extensions:
+ - .s
- .S
GLSL:
group: C
type: programming
- primary_extension: .glsl
extensions:
+ - .glsl
- .fp
- .frag
+ - .fshader
- .geom
- .glslv
+ - .gshader
- .shader
- .vert
+ - .vshader
Genshi:
- primary_extension: .kid
+ extensions:
+ - .kid
Gentoo Ebuild:
group: Shell
lexer: Bash
- primary_extension: .ebuild
+ extensions:
+ - .ebuild
Gentoo Eclass:
group: Shell
lexer: Bash
- primary_extension: .eclass
+ extensions:
+ - .eclass
Gettext Catalog:
search_term: pot
searchable: false
aliases:
- pot
- primary_extension: .po
extensions:
+ - .po
- .pot
Glyph:
type: programming
color: "#e4cc98"
lexer: Tcl
- primary_extension: .glf
+ extensions:
+ - .glf
+
+Gnuplot:
+ type: programming
+ color: "#f0a9f0"
+ lexer: Gnuplot
+ extensions:
+ - .gp
+ - .gnu
+ - .gnuplot
+ - .plot
+ - .plt
Go:
type: programming
- color: "#a89b4d"
- primary_extension: .go
+ color: "#375eab"
+ extensions:
+ - .go
Gosu:
type: programming
color: "#82937f"
- primary_extension: .gs
+ extensions:
+ - .gs
+
+Grammatical Framework:
+ type: programming
+ lexer: Haskell
+ aliases:
+ - gf
+ wrap: false
+ extensions:
+ - .gf
+ searchable: true
+ color: "#ff0000"
Groff:
- primary_extension: .man
extensions:
+ - .man
- '.1'
- '.2'
- '.3'
@@ -692,7 +833,11 @@ Groovy:
type: programming
ace_mode: groovy
color: "#e69f56"
- primary_extension: .groovy
+ extensions:
+ - .groovy
+ - .grt
+ - .gtpl
+ - .gvy
interpreters:
- groovy
@@ -701,27 +846,28 @@ Groovy Server Pages:
lexer: Java Server Page
aliases:
- gsp
- primary_extension: .gsp
+ extensions:
+ - .gsp
HTML:
type: markup
ace_mode: html
aliases:
- xhtml
- primary_extension: .html
extensions:
+ - .html
- .htm
- - .xhtml
- .html.hl
+ - .st
+ - .xhtml
HTML+Django:
type: markup
group: HTML
lexer: HTML+Django/Jinja
- primary_extension: .mustache # TODO: This is incorrect
extensions:
- - .jinja
- .mustache
+ - .jinja
HTML+ERB:
type: markup
@@ -729,8 +875,8 @@ HTML+ERB:
lexer: RHTML
aliases:
- erb
- primary_extension: .erb
extensions:
+ - .erb
- .erb.deface
- .html.erb
- .html.erb.deface
@@ -738,25 +884,27 @@ HTML+ERB:
HTML+PHP:
type: markup
group: HTML
- primary_extension: .phtml
+ extensions:
+ - .phtml
HTTP:
type: data
- primary_extension: .http
+ extensions:
+ - .http
Haml:
group: HTML
type: markup
- primary_extension: .haml
extensions:
+ - .haml
- .haml.deface
- .html.haml.deface
Handlebars:
type: markup
lexer: Text only
- primary_extension: .handlebars
extensions:
+ - .handlebars
- .hbs
- .html.handlebars
- .html.hbs
@@ -765,21 +913,22 @@ Harbour:
type: programming
lexer: Text only
color: "#0e60e3"
- primary_extension: .hb
+ extensions:
+ - .hb
Haskell:
type: programming
color: "#29b544"
- primary_extension: .hs
extensions:
+ - .hs
- .hsc
Haxe:
type: programming
ace_mode: haxe
- color: "#346d51"
- primary_extension: .hx
+ color: "#f7941e"
extensions:
+ - .hx
- .hxsl
Hy:
@@ -787,13 +936,15 @@ Hy:
lexer: Clojure
ace_mode: clojure
color: "#7891b1"
- primary_extension: .hy
+ extensions:
+ - .hy
IDL:
type: programming
lexer: Text only
color: "#e3592c"
- primary_extension: .pro
+ extensions:
+ - .pro
INI:
type: data
@@ -801,17 +952,30 @@ INI:
- .ini
- .prefs
- .properties
- primary_extension: .ini
+
+Inno Setup:
+ extensions:
+ - .iss
+ lexer: Text only
Idris:
type: programming
lexer: Text only
- primary_extension: .idr
extensions:
+ - .idr
- .lidr
+Inform 7:
+ type: programming
+ lexer: Text only
+ wrap: true
+ extensions:
+ - .ni
+ - .i7x
+
Inno Setup:
- primary_extension: .iss
+ extensions:
+ - .iss
lexer: Text only
IRC log:
@@ -819,39 +983,49 @@ IRC log:
search_term: irc
aliases:
- irc
- primary_extension: .irclog
extensions:
+ - .irclog
- .weechatlog
Io:
type: programming
color: "#a9188d"
- primary_extension: .io
+ extensions:
+ - .io
Ioke:
type: programming
color: "#078193"
- primary_extension: .ik
+ extensions:
+ - .ik
+
+Isabelle:
+ type: programming
+ lexer: Text only
+ color: "#fdcd00"
+ extensions:
+ - .thy
J:
type: programming
lexer: Text only
- primary_extension: .ijs
+ extensions:
+ - .ijs
JSON:
type: data
group: JavaScript
ace_mode: json
searchable: false
- primary_extension: .json
extensions:
+ - .json
- .sublime-keymap
- - .sublime_metrics
- .sublime-mousemap
- .sublime-project
- - .sublime_session
- .sublime-settings
- .sublime-workspace
+ - .sublime_metrics
+ - .sublime_session
filenames:
- .jshintrc
- composer.lock
@@ -859,25 +1033,36 @@ JSON:
JSON5:
type: data
lexer: JavaScript
- primary_extension: .json5
+ extensions:
+ - .json5
JSONLD:
type: data
group: JavaScript
ace_mode: json
lexer: JavaScript
- primary_extension: .jsonld
+ extensions:
+ - .jsonld
+
+JSONiq:
+ type: programming
+ ace_mode: jsoniq
+ lexer: XQuery
+ extensions:
+ - .jq
Jade:
group: HTML
type: markup
- primary_extension: .jade
+ extensions:
+ - .jade
Java:
type: programming
ace_mode: java
color: "#b07219"
- primary_extension: .java
+ extensions:
+ - .java
Java Server Pages:
group: Java
@@ -885,20 +1070,22 @@ Java Server Pages:
search_term: jsp
aliases:
- jsp
- primary_extension: .jsp
+ extensions:
+ - .jsp
JavaScript:
type: programming
ace_mode: javascript
- color: "#f15501"
+ color: "#f1e05a"
aliases:
- js
- node
- primary_extension: .js
extensions:
+ - .js
- ._js
- .bones
- .es6
+ - .frag
- .jake
- .jsfl
- .jsm
@@ -910,59 +1097,87 @@ JavaScript:
- .ssjs
filenames:
- Jakefile
+ interpreters:
+ - node
Julia:
type: programming
- primary_extension: .jl
+ extensions:
+ - .jl
color: "#a270ba"
KRL:
lexer: Text only
type: programming
color: "#f5c800"
- primary_extension: .krl
+ extensions:
+ - .krl
+
+Kit:
+ type: markup
+ lexer: HTML
+ ace_mode: html
+ extensions:
+ - .kit
Kotlin:
type: programming
- primary_extension: .kt
extensions:
+ - .kt
- .ktm
- .kts
LFE:
type: programming
- primary_extension: .lfe
+ extensions:
+ - .lfe
color: "#004200"
lexer: Common Lisp
group: Erlang
LLVM:
- primary_extension: .ll
+ extensions:
+ - .ll
Lasso:
type: programming
lexer: Lasso
color: "#2584c3"
- primary_extension: .lasso
+ extensions:
+ - .lasso
+
+Latte:
+ type: markup
+ color: "#A8FF97"
+ group: HTML
+ lexer: Smarty
+ extensions:
+ - .latte
Less:
type: markup
group: CSS
lexer: CSS
- primary_extension: .less
+ extensions:
+ - .less
LilyPond:
lexer: Text only
- primary_extension: .ly
extensions:
+ - .ly
- .ily
+Liquid:
+ type: markup
+ lexer: Text only
+ extensions:
+ - .liquid
+
Literate Agda:
type: programming
group: Agda
- primary_extension: .lagda
extensions:
- - .lagda
+ - .lagda
Literate CoffeeScript:
type: programming
@@ -973,7 +1188,8 @@ Literate CoffeeScript:
search_term: litcoffee
aliases:
- litcoffee
- primary_extension: .litcoffee
+ extensions:
+ - .litcoffee
Literate Haskell:
type: programming
@@ -981,7 +1197,8 @@ Literate Haskell:
search_term: lhs
aliases:
- lhs
- primary_extension: .lhs
+ extensions:
+ - .lhs
LiveScript:
type: programming
@@ -989,28 +1206,29 @@ LiveScript:
color: "#499886"
aliases:
- ls
- primary_extension: .ls
extensions:
+ - .ls
- ._ls
filenames:
- Slakefile
Logos:
type: programming
- primary_extension: .xm
+ extensions:
+ - .xm
Logtalk:
type: programming
- primary_extension: .lgt
extensions:
+ - .lgt
- .logtalk
Lua:
type: programming
ace_mode: lua
color: "#fa1fa1"
- primary_extension: .lua
extensions:
+ - .lua
- .nse
- .rbxs
interpreters:
@@ -1021,17 +1239,23 @@ M:
lexer: Common Lisp
aliases:
- mumps
- primary_extension: .mumps
extensions:
+ - .mumps
- .m
+MTML:
+ type: markup
+ lexer: HTML
+ color: "#0095d9"
+ extensions:
+ - .mtml
+
Makefile:
aliases:
- make
extensions:
- .mak
- .mk
- primary_extension: .mak
filenames:
- makefile
- Makefile
@@ -1040,8 +1264,8 @@ Makefile:
- make
Mako:
- primary_extension: .mako
extensions:
+ - .mako
- .mao
Markdown:
@@ -1049,10 +1273,11 @@ Markdown:
lexer: Text only
ace_mode: markdown
wrap: true
- primary_extension: .md
extensions:
+ - .md
- .markdown
- .mkd
+ - .mkdn
- .mkdown
- .ron
@@ -1061,12 +1286,21 @@ Mask:
lexer: SCSS
color: "#f97732"
ace_mode: scss
- primary_extension: .mask
+ extensions:
+ - .mask
+
+Mathematica:
+ type: programming
+ extensions:
+ - .mathematica
+ lexer: Text only
Matlab:
type: programming
color: "#bb92ac"
- primary_extension: .matlab
+ extensions:
+ - .matlab
+ - .m
Max:
type: programming
@@ -1076,8 +1310,8 @@ Max:
- max/msp
- maxmsp
search_term: max/msp
- primary_extension: .maxpat
extensions:
+ - .maxpat
- .maxhelp
- .maxproj
- .mxt
@@ -1087,19 +1321,30 @@ MediaWiki:
type: prose
lexer: Text only
wrap: true
- primary_extension: .mediawiki
+ extensions:
+ - .mediawiki
+
+Mercury:
+ type: programming
+ color: "#abcdef"
+ lexer: Prolog
+ ace_mode: prolog
+ extensions:
+ - .m
+ - .moo
MiniD: # Legacy
searchable: false
- primary_extension: .minid # Dummy extension
+ extensions:
+ - .minid # Dummy extension
Mirah:
type: programming
lexer: Ruby
search_term: ruby
color: "#c7a938"
- primary_extension: .druby
extensions:
+ - .druby
- .duby
- .mir
- .mirah
@@ -1107,43 +1352,52 @@ Mirah:
Monkey:
type: programming
lexer: Monkey
- primary_extension: .monkey
+ extensions:
+ - .monkey
Moocode:
+ type: programming
lexer: MOOCode
- primary_extension: .moo
+ extensions:
+ - .moo
MoonScript:
type: programming
- primary_extension: .moon
+ extensions:
+ - .moon
Myghty:
- primary_extension: .myt
+ extensions:
+ - .myt
NSIS:
- primary_extension: .nsi
+ extensions:
+ - .nsi
Nemerle:
type: programming
color: "#0d3c6e"
- primary_extension: .n
+ extensions:
+ - .n
NetLogo:
type: programming
lexer: Common Lisp
color: "#ff2b2b"
- primary_extension: .nlogo
+ extensions:
+ - .nlogo
Nginx:
type: markup
lexer: Nginx configuration file
- primary_extension: .nginxconf
+ extensions:
+ - .nginxconf
Nimrod:
type: programming
color: "#37775b"
- primary_extension: .nim
extensions:
+ - .nim
- .nimrod
Nu:
@@ -1152,14 +1406,15 @@ Nu:
color: "#c9df40"
aliases:
- nush
- primary_extension: .nu
+ extensions:
+ - .nu
filenames:
- Nukefile
NumPy:
group: Python
- primary_extension: .numpy
extensions:
+ - .numpy
- .numpyw
- .numsc
@@ -1167,8 +1422,8 @@ OCaml:
type: programming
ace_mode: ocaml
color: "#3be133"
- primary_extension: .ml
extensions:
+ - .ml
- .eliomi
- .ml4
- .mli
@@ -1178,7 +1433,8 @@ OCaml:
ObjDump:
type: data
lexer: objdump
- primary_extension: .objdump
+ extensions:
+ - .objdump
Objective-C:
type: programming
@@ -1186,7 +1442,15 @@ Objective-C:
aliases:
- obj-c
- objc
- primary_extension: .m
+ extensions:
+ - .m
+
+Objective-C++:
+ type: programming
+ color: "#4886FC"
+ aliases:
+ - obj-c++
+ - objc++
extensions:
- .mm
@@ -1195,26 +1459,28 @@ Objective-J:
color: "#ff0c5a"
aliases:
- obj-j
- primary_extension: .j
extensions:
+ - .j
- .sj
Omgrofl:
type: programming
- primary_extension: .omgrofl
+ extensions:
+ - .omgrofl
color: "#cabbff"
lexer: Text only
Opa:
type: programming
- primary_extension: .opa
+ extensions:
+ - .opa
OpenCL:
type: programming
group: C
lexer: C
- primary_extension: .cl
extensions:
+ - .cl
- .opencl
OpenEdge ABL:
@@ -1223,32 +1489,44 @@ OpenEdge ABL:
- progress
- openedge
- abl
- primary_extension: .p
+ extensions:
+ - .p
Org:
type: prose
lexer: Text only
wrap: true
- primary_extension: .org
+ extensions:
+ - .org
+
+Ox:
+ type: programming
+ lexer: Text only
+ extensions:
+ - .ox
+ - .oxh
+ - .oxo
Oxygene:
type: programming
lexer: Text only
color: "#5a63a3"
- primary_extension: .oxygene
+ extensions:
+ - .oxygene
PAWN:
type: programming
lexer: C++
color: "#dbb284"
- primary_extension: .pwn
+ extensions:
+ - .pwn
PHP:
type: programming
ace_mode: php
- color: "#6e03c1"
- primary_extension: .php
+ color: "#4F5D95"
extensions:
+ - .php
- .aw
- .ctp
- .php3
@@ -1258,11 +1536,19 @@ PHP:
filenames:
- Phakefile
+Pan:
+ type: programming
+ lexer: Text only
+ color: '#cc0000'
+ extensions:
+ - .pan
+
Parrot:
type: programming
color: "#f3ca0a"
lexer: Text only
- primary_extension: .parrot # Dummy extension
+ extensions:
+ - .parrot # Dummy extension
Parrot Internal Representation:
group: Parrot
@@ -1270,7 +1556,8 @@ Parrot Internal Representation:
lexer: Text only
aliases:
- pir
- primary_extension: .pir
+ extensions:
+ - .pir
Parrot Assembly:
group: Parrot
@@ -1278,14 +1565,15 @@ Parrot Assembly:
lexer: Text only
aliases:
- pasm
- primary_extension: .pasm
+ extensions:
+ - .pasm
Pascal:
type: programming
lexer: Delphi
color: "#b0ce4e"
- primary_extension: .pas
extensions:
+ - .pas
- .dfm
- .lpr
@@ -1293,8 +1581,8 @@ Perl:
type: programming
ace_mode: perl
color: "#0298c3"
- primary_extension: .pl
extensions:
+ - .pl
- .PL
- .perl
- .ph
@@ -1308,8 +1596,8 @@ Perl:
Perl6:
type: programming
color: "#0298c3"
- primary_extension: .p6
extensions:
+ - .p6
- .6pl
- .6pm
- .nqp
@@ -1322,8 +1610,8 @@ Pike:
type: programming
color: "#066ab2"
lexer: C
- primary_extension: .pike
extensions:
+ - .pike
- .pmod
Pod:
@@ -1331,18 +1619,20 @@ Pod:
lexer: Text only
ace_mode: perl
wrap: true
- primary_extension: .pod
+ extensions:
+ - .pod
PogoScript:
type: programming
color: "#d80074"
lexer: Text only
- primary_extension: .pogo
+ extensions:
+ - .pogo
PostScript:
type: markup
- primary_extension: .ps
extensions:
+ - .ps
- .eps
PowerShell:
@@ -1350,8 +1640,8 @@ PowerShell:
ace_mode: powershell
aliases:
- posh
- primary_extension: .ps1
extensions:
+ - .ps1
- .psd1
- .psm1
@@ -1359,27 +1649,35 @@ Processing:
type: programming
lexer: Java
color: "#2779ab"
- primary_extension: .pde
+ extensions:
+ - .pde
Prolog:
type: programming
color: "#74283c"
- primary_extension: .prolog
extensions:
+ - .prolog
- .ecl
- .pl
+Propeller Spin:
+ type: programming
+ lexer: Text only
+ color: "#2b446d"
+ extensions:
+ - .spin
+
Protocol Buffer:
type: markup
aliases:
- protobuf
- Protocol Buffers
- primary_extension: .proto
+ extensions:
+ - .proto
Puppet:
type: programming
color: "#cc5555"
- primary_extension: .pp
extensions:
- .pp
filenames:
@@ -1389,16 +1687,26 @@ Pure Data:
type: programming
color: "#91de79"
lexer: Text only
- primary_extension: .pd
+ extensions:
+ - .pd
+
+PureScript:
+ type: programming
+ color: "#bcdc53"
+ lexer: Haskell
+ extensions:
+ - .purs
Python:
type: programming
ace_mode: python
color: "#3581ba"
- primary_extension: .py
extensions:
+ - .py
- .gyp
- .lmi
+ - .pyde
+ - .pyp
- .pyt
- .pyw
- .wsgi
@@ -1415,12 +1723,14 @@ Python traceback:
group: Python
lexer: Python Traceback
searchable: false
- primary_extension: .pytb
+ extensions:
+ - .pytb
QML:
type: markup
color: "#44a51c"
- primary_extension: .qml
+ extensions:
+ - .qml
R:
type: programming
@@ -1428,9 +1738,12 @@ R:
lexer: S
aliases:
- R
- primary_extension: .r
+ - Rscript
extensions:
+ - .r
- .R
+ - .Rd
+ - .rd
- .rsx
filenames:
- .Rprofile
@@ -1442,13 +1755,14 @@ RDoc:
lexer: Text only
ace_mode: rdoc
wrap: true
- primary_extension: .rdoc
+ extensions:
+ - .rdoc
REALbasic:
type: programming
lexer: VB.net
- primary_extension: .rbbas
extensions:
+ - .rbbas
- .rbfrm
- .rbmnu
- .rbres
@@ -1458,23 +1772,24 @@ REALbasic:
RHTML:
type: markup
group: HTML
- primary_extension: .rhtml
+ extensions:
+ - .rhtml
RMarkdown:
type: prose
lexer: Text only
wrap: true
ace_mode: markdown
- primary_extension: .rmd
extensions:
+ - .rmd
- .Rmd
Racket:
type: programming
lexer: Racket
color: "#ae17ff"
- primary_extension: .rkt
extensions:
+ - .rkt
- .rktd
- .rktl
@@ -1482,30 +1797,43 @@ Ragel in Ruby Host:
type: programming
lexer: Ragel in Ruby Host
color: "#ff9c2e"
- primary_extension: .rl
+ extensions:
+ - .rl
Raw token data:
search_term: raw
aliases:
- raw
- primary_extension: .raw
+ extensions:
+ - .raw
Rebol:
type: programming
lexer: REBOL
color: "#358a5b"
- primary_extension: .rebol
extensions:
+ - .reb
+ - .r
- .r2
- .r3
+ - .rebol
+
+Red:
+ type: programming
+ lexer: Text only
+ color: "#ee0000"
+ extensions:
+ - .red
+ - .reds
Redcode:
- primary_extension: .cw
+ extensions:
+ - .cw
RobotFramework:
type: programming
- primary_extension: .robot
- # extensions:
+ extensions:
+ - .robot
# - .txt
Rouge:
@@ -1513,7 +1841,8 @@ Rouge:
lexer: Clojure
ace_mode: clojure
color: "#cc0088"
- primary_extension: .rg
+ extensions:
+ - .rg
Ruby:
type: programming
@@ -1525,8 +1854,8 @@ Ruby:
- rake
- rb
- rbx
- primary_extension: .rb
extensions:
+ - .rb
- .builder
- .gemspec
- .god
@@ -1544,59 +1873,84 @@ Ruby:
filenames:
- Appraisals
- Berksfile
+ - Buildfile
- Gemfile
- Gemfile.lock
- Guardfile
- Podfile
- Thorfile
- Vagrantfile
+ - buildfile
Rust:
type: programming
color: "#dea584"
- primary_extension: .rs
+ extensions:
+ - .rs
+
+SAS:
+ type: programming
+ color: "#1E90FF"
+ lexer: Text only
+ extensions:
+ - .sas
SCSS:
type: markup
group: CSS
ace_mode: scss
- primary_extension: .scss
+ extensions:
+ - .scss
SQL:
type: data
ace_mode: sql
- searchable: false
- primary_extension: .sql
+ extensions:
+ - .sql
+ - .prc
+ - .tab
+ - .udf
+ - .viw
+
+STON:
+ type: data
+ group: Smalltalk
+ lexer: JSON
+ extensions:
+ - .ston
Sage:
type: programming
lexer: Python
group: Python
- primary_extension: .sage
+ extensions:
+ - .sage
Sass:
type: markup
group: CSS
- primary_extension: .sass
+ extensions:
+ - .sass
Scala:
type: programming
ace_mode: scala
color: "#7dd3b0"
- primary_extension: .scala
extensions:
+ - .scala
- .sc
Scaml:
group: HTML
type: markup
- primary_extension: .scaml
+ extensions:
+ - .scaml
Scheme:
type: programming
color: "#1e4aec"
- primary_extension: .scm
extensions:
+ - .scm
- .sld
- .sls
- .ss
@@ -1608,13 +1962,15 @@ Scheme:
Scilab:
type: programming
- primary_extension: .sci
+ extensions:
+ - .sci
Self:
type: programming
color: "#0579aa"
lexer: Text only
- primary_extension: .self
+ extensions:
+ - .self
Shell:
type: programming
@@ -1625,8 +1981,8 @@ Shell:
- sh
- bash
- zsh
- primary_extension: .sh
extensions:
+ - .sh
- .bats
- .tmux
interpreters:
@@ -1636,72 +1992,133 @@ Shell:
filenames:
- Dockerfile
+ShellSession:
+ type: programming
+ lexer: Bash Session
+ extensions:
+ - .sh-session
+
Shen:
type: programming
color: "#120F14"
lexer: Text only
- primary_extension: .shen
+ extensions:
+ - .shen
Slash:
type: programming
color: "#007eff"
- primary_extension: .sl
+ extensions:
+ - .sl
+
+Slim:
+ group: HTML
+ type: markup
+ lexer: Slim
+ color: "#ff8877"
+ extensions:
+ - .slim
Smalltalk:
type: programming
color: "#596706"
- primary_extension: .st
+ extensions:
+ - .st
Smarty:
- primary_extension: .tpl
+ extensions:
+ - .tpl
+
+SourcePawn:
+ type: programming
+ color: "#f69e1d"
+ aliases:
+ - sourcemod
+ extensions:
+ - .sp
Squirrel:
type: programming
lexer: C++
- primary_extension: .nut
+ extensions:
+ - .nut
Standard ML:
type: programming
color: "#dc566d"
aliases:
- sml
- primary_extension: .sml
extensions:
+ - .ML
- .fun
+ - .sml
+
+Stata:
+ type: programming
+ lexer: Text only
+ extensions:
+ - .do
+ - .ado
+ - .doh
+ - .ihlp
+ - .mata
+ - .matah
+ - .sthlp
Stylus:
type: markup
group: CSS
lexer: Text only
- primary_extension: .styl
+ extensions:
+ - .styl
SuperCollider:
type: programming
color: "#46390b"
lexer: Text only
- primary_extension: .scd
+ extensions:
+ - .scd
+
+Swift:
+ type: programming
+ lexer: Swift
+ color: "#ffac45"
+ extensions:
+ - .swift
+
+SystemVerilog:
+ type: programming
+ color: "#343761"
+ lexer: systemverilog
+ extensions:
+ - .sv
+ - .svh
+ - .vh
TOML:
type: data
- primary_extension: .toml
+ extensions:
+ - .toml
TXL:
type: programming
lexer: Text only
- primary_extension: .txl
+ extensions:
+ - .txl
Tcl:
type: programming
color: "#e4cc98"
- primary_extension: .tcl
extensions:
+ - .tcl
- .adp
+ - .tm
Tcsh:
type: programming
group: Shell
- primary_extension: .tcsh
extensions:
+ - .tcsh
- .csh
TeX:
@@ -1711,8 +2128,8 @@ TeX:
wrap: true
aliases:
- latex
- primary_extension: .tex
extensions:
+ - .tex
- .aux
- .bib
- .cls
@@ -1727,35 +2144,39 @@ TeX:
Tea:
type: markup
- primary_extension: .tea
+ extensions:
+ - .tea
Textile:
type: prose
lexer: Text only
ace_mode: textile
wrap: true
- primary_extension: .textile
+ extensions:
+ - .textile
Turing:
type: programming
color: "#45f715"
lexer: Text only
- primary_extension: .t
extensions:
+ - .t
- .tu
Twig:
type: markup
group: PHP
lexer: HTML+Django/Jinja
- primary_extension: .twig
+ extensions:
+ - .twig
TypeScript:
type: programming
color: "#31859c"
aliases:
- ts
- primary_extension: .ts
+ extensions:
+ - .ts
Unified Parallel C:
type: programming
@@ -1763,20 +2184,30 @@ Unified Parallel C:
lexer: C
ace_mode: c_cpp
color: "#755223"
- primary_extension: .upc
+ extensions:
+ - .upc
UnrealScript:
type: programming
color: "#a54c4d"
lexer: Java
- primary_extension: .uc
+ extensions:
+ - .uc
+
+VCL:
+ type: programming
+ lexer: Perl
+ ace_mode: perl
+ color: "#0298c3"
+ extensions:
+ - .vcl
VHDL:
type: programming
lexer: vhdl
color: "#543978"
- primary_extension: .vhdl
extensions:
+ - .vhdl
- .vhd
- .vhf
- .vhi
@@ -1788,16 +2219,16 @@ VHDL:
Vala:
type: programming
color: "#ee7d06"
- primary_extension: .vala
extensions:
+ - .vala
- .vapi
Verilog:
type: programming
lexer: verilog
color: "#848bf3"
- primary_extension: .v
extensions:
+ - .v
- .veo
VimL:
@@ -1806,7 +2237,8 @@ VimL:
search_term: vim
aliases:
- vim
- primary_extension: .vim
+ extensions:
+ - .vim
filenames:
- .vimrc
- vimrc
@@ -1816,8 +2248,8 @@ Visual Basic:
type: programming
lexer: VB.net
color: "#945db7"
- primary_extension: .vb
extensions:
+ - .vb
- .bas
- .frm
- .frx
@@ -1829,12 +2261,14 @@ Volt:
type: programming
lexer: D
color: "#0098db"
- primary_extension: .volt
+ extensions:
+ - .volt
XC:
type: programming
lexer: C
- primary_extension: .xc
+ extensions:
+ - .xc
XML:
type: markup
@@ -1843,21 +2277,28 @@ XML:
- rss
- xsd
- wsdl
- primary_extension: .xml
extensions:
+ - .xml
- .axml
- .ccxml
- .clixml
- .cproject
+ - .csproj
+ - .ct
- .dita
- .ditamap
- .ditaval
+ - .filters
+ - .fsproj
- .glade
- .grxml
- .jelly
- .kml
- .launch
- .mxml
+ - .nproj
+ - .nuspec
+ - .osm
- .plist
- .pluginspec
- .ps1xml
@@ -1868,6 +2309,7 @@ XML:
- .scxml
- .srdf
- .svg
+ - .targets
- .tmCommand
- .tmLanguage
- .tmPreferences
@@ -1876,6 +2318,8 @@ XML:
- .tml
- .ui
- .urdf
+ - .vbproj
+ - .vcxproj
- .vxml
- .wsdl
- .wxi
@@ -1898,15 +2342,15 @@ XML:
XProc:
type: programming
lexer: XML
- primary_extension: .xpl
extensions:
+ - .xpl
- .xproc
XQuery:
type: programming
color: "#2700e2"
- primary_extension: .xquery
extensions:
+ - .xquery
- .xq
- .xql
- .xqm
@@ -1914,35 +2358,63 @@ XQuery:
XS:
lexer: C
- primary_extension: .xs
+ extensions:
+ - .xs
XSLT:
type: programming
aliases:
- xsl
- primary_extension: .xslt
extensions:
- - .xsl
+ - .xslt
+ - .xsl
+
+Xojo:
+ type: programming
+ lexer: VB.net
+ extensions:
+ - .xojo_code
+ - .xojo_menu
+ - .xojo_report
+ - .xojo_script
+ - .xojo_toolbar
+ - .xojo_window
Xtend:
type: programming
- primary_extension: .xtend
+ extensions:
+ - .xtend
YAML:
type: data
aliases:
- yml
- primary_extension: .yml
extensions:
+ - .yml
- .reek
- .rviz
- .yaml
+Zephir:
+ type: programming
+ lexer: PHP
+ color: "#118f9e"
+ extensions:
+ - .zep
+
+Zimpl:
+ type: programming
+ lexer: Text only
+ extensions:
+ - .zimpl
+ - .zmpl
+ - .zpl
+
eC:
type: programming
search_term: ec
- primary_extension: .ec
extensions:
+ - .ec
- .eh
edn:
@@ -1950,28 +2422,34 @@ edn:
lexer: Clojure
ace_mode: clojure
color: "#db5855"
- primary_extension: .edn
+ extensions:
+ - .edn
fish:
type: programming
group: Shell
lexer: Text only
- primary_extension: .fish
+ extensions:
+ - .fish
mupad:
lexer: MuPAD
- primary_extension: .mu
+ extensions:
+ - .mu
nesC:
type: programming
color: "#ffce3b"
- primary_extension: .nc
+ lexer: nesC
+ extensions:
+ - .nc
ooc:
type: programming
lexer: Ooc
color: "#b0b77e"
- primary_extension: .ooc
+ extensions:
+ - .ooc
reStructuredText:
type: prose
@@ -1979,8 +2457,8 @@ reStructuredText:
search_term: rst
aliases:
- rst
- primary_extension: .rst
extensions:
+ - .rst
- .rest
wisp:
@@ -1988,10 +2466,12 @@ wisp:
lexer: Clojure
ace_mode: clojure
color: "#7582D1"
- primary_extension: .wisp
+ extensions:
+ - .wisp
xBase:
type: programming
lexer: Text only
color: "#3a4040"
- primary_extension: .prg
+ extensions:
+ - .prg
diff --git a/lib/linguist/samples.json b/lib/linguist/samples.json
index 6d26388a..c5569e09 100644
--- a/lib/linguist/samples.json
+++ b/lib/linguist/samples.json
@@ -6,6 +6,9 @@
"Agda": [
".agda"
],
+ "Alloy": [
+ ".als"
+ ],
"Apex": [
".cls"
],
@@ -20,6 +23,13 @@
".asc",
".asciidoc"
],
+ "AspectJ": [
+ ".aj"
+ ],
+ "Assembly": [
+ ".asm",
+ ".inc"
+ ],
"ATS": [
".atxt",
".dats",
@@ -54,7 +64,9 @@
".cc",
".cpp",
".h",
- ".hpp"
+ ".hpp",
+ ".inl",
+ ".ipp"
],
"Ceylon": [
".ceylon"
@@ -81,14 +93,22 @@
".coffee"
],
"Common Lisp": [
+ ".cl",
".lisp"
],
+ "Component Pascal": [
+ ".cp",
+ ".cps"
+ ],
"Coq": [
".v"
],
"Creole": [
".creole"
],
+ "Crystal": [
+ ".cr"
+ ],
"CSS": [
".css"
],
@@ -105,6 +125,16 @@
"DM": [
".dm"
],
+ "Dogescript": [
+ ".djs"
+ ],
+ "E": [
+ ".E"
+ ],
+ "Eagle": [
+ ".brd",
+ ".sch"
+ ],
"ECL": [
".ecl"
],
@@ -129,21 +159,46 @@
".forth",
".fth"
],
+ "Frege": [
+ ".fr"
+ ],
+ "Game Maker Language": [
+ ".gml"
+ ],
+ "GAMS": [
+ ".gms"
+ ],
+ "GAP": [
+ ".g",
+ ".gd",
+ ".gi"
+ ],
"GAS": [
".s"
],
"GLSL": [
".fp",
+ ".frag",
".glsl"
],
+ "Gnuplot": [
+ ".gnu",
+ ".gp"
+ ],
"Gosu": [
".gs",
".gst",
".gsx",
".vark"
],
+ "Grammatical Framework": [
+ ".gf"
+ ],
"Groovy": [
".gradle",
+ ".grt",
+ ".gtpl",
+ ".gvy",
".script!"
],
"Groovy Server Pages": [
@@ -156,6 +211,13 @@
".handlebars",
".hbs"
],
+ "Haskell": [
+ ".hs"
+ ],
+ "HTML": [
+ ".html",
+ ".st"
+ ],
"Hy": [
".hy"
],
@@ -166,9 +228,16 @@
"Idris": [
".idr"
],
+ "Inform 7": [
+ ".i7x",
+ ".ni"
+ ],
"Ioke": [
".ik"
],
+ "Isabelle": [
+ ".thy"
+ ],
"Jade": [
".jade"
],
@@ -176,6 +245,7 @@
".java"
],
"JavaScript": [
+ ".frag",
".js",
".script!"
],
@@ -186,12 +256,18 @@
"JSON5": [
".json5"
],
+ "JSONiq": [
+ ".jq"
+ ],
"JSONLD": [
".jsonld"
],
"Julia": [
".jl"
],
+ "Kit": [
+ ".kit"
+ ],
"Kotlin": [
".kt"
],
@@ -204,12 +280,18 @@
".lasso9",
".ldml"
],
+ "Latte": [
+ ".latte"
+ ],
"Less": [
".less"
],
"LFE": [
".lfe"
],
+ "Liquid": [
+ ".liquid"
+ ],
"Literate Agda": [
".lagda"
],
@@ -237,6 +319,12 @@
"Markdown": [
".md"
],
+ "Mask": [
+ ".mask"
+ ],
+ "Mathematica": [
+ ".m"
+ ],
"Matlab": [
".m"
],
@@ -248,12 +336,22 @@
"MediaWiki": [
".mediawiki"
],
+ "Mercury": [
+ ".m",
+ ".moo"
+ ],
"Monkey": [
".monkey"
],
+ "Moocode": [
+ ".moo"
+ ],
"MoonScript": [
".moon"
],
+ "MTML": [
+ ".mtml"
+ ],
"Nemerle": [
".n"
],
@@ -275,6 +373,9 @@
".h",
".m"
],
+ "Objective-C++": [
+ ".mm"
+ ],
"OCaml": [
".eliom",
".ml"
@@ -295,9 +396,17 @@
"Org": [
".org"
],
+ "Ox": [
+ ".ox",
+ ".oxh",
+ ".oxo"
+ ],
"Oxygene": [
".oxygene"
],
+ "Pan": [
+ ".pan"
+ ],
"Parrot Assembly": [
".pasm"
],
@@ -314,6 +423,7 @@
".fcgi",
".pl",
".pm",
+ ".pod",
".script!",
".t"
],
@@ -347,15 +457,25 @@
".pl",
".prolog"
],
+ "Propeller Spin": [
+ ".spin"
+ ],
"Protocol Buffer": [
".proto"
],
+ "PureScript": [
+ ".purs"
+ ],
"Python": [
".py",
+ ".pyde",
+ ".pyp",
".script!"
],
"R": [
".R",
+ ".Rd",
+ ".r",
".rsx",
".script!"
],
@@ -369,7 +489,15 @@
".rdoc"
],
"Rebol": [
- ".r"
+ ".r",
+ ".r2",
+ ".r3",
+ ".reb",
+ ".rebol"
+ ],
+ "Red": [
+ ".red",
+ ".reds"
],
"RMarkdown": [
".rmd"
@@ -387,6 +515,9 @@
"Rust": [
".rs"
],
+ "SAS": [
+ ".sas"
+ ],
"Sass": [
".sass",
".scss"
@@ -417,23 +548,69 @@
".sh",
".zsh"
],
+ "ShellSession": [
+ ".sh-session"
+ ],
+ "Shen": [
+ ".shen"
+ ],
"Slash": [
".sl"
],
+ "Slim": [
+ ".slim"
+ ],
+ "Smalltalk": [
+ ".st"
+ ],
+ "SourcePawn": [
+ ".sp"
+ ],
+ "SQL": [
+ ".prc",
+ ".sql",
+ ".tab",
+ ".udf",
+ ".viw"
+ ],
"Squirrel": [
".nut"
],
"Standard ML": [
+ ".ML",
".fun",
".sig",
".sml"
],
+ "Stata": [
+ ".ado",
+ ".do",
+ ".doh",
+ ".ihlp",
+ ".mata",
+ ".matah",
+ ".sthlp"
+ ],
+ "STON": [
+ ".ston"
+ ],
"Stylus": [
".styl"
],
"SuperCollider": [
".scd"
],
+ "Swift": [
+ ".swift"
+ ],
+ "SystemVerilog": [
+ ".sv",
+ ".svh",
+ ".vh"
+ ],
+ "Tcl": [
+ ".tm"
+ ],
"Tea": [
".tea"
],
@@ -452,6 +629,9 @@
"UnrealScript": [
".uc"
],
+ "VCL": [
+ ".vcl"
+ ],
"Verilog": [
".v"
],
@@ -474,9 +654,26 @@
],
"XML": [
".ant",
+ ".csproj",
+ ".filters",
+ ".fsproj",
".ivy",
+ ".nproj",
+ ".nuspec",
+ ".pluginspec",
+ ".targets",
+ ".vbproj",
+ ".vcxproj",
".xml"
],
+ "Xojo": [
+ ".xojo_code",
+ ".xojo_menu",
+ ".xojo_report",
+ ".xojo_script",
+ ".xojo_toolbar",
+ ".xojo_window"
+ ],
"XProc": [
".xpl"
],
@@ -488,6 +685,15 @@
],
"Xtend": [
".xtend"
+ ],
+ "YAML": [
+ ".yml"
+ ],
+ "Zephir": [
+ ".zep"
+ ],
+ "Zimpl": [
+ ".zmpl"
]
},
"interpreters": {
@@ -512,6 +718,9 @@
"Perl": [
"ack"
],
+ "R": [
+ "expr-dist"
+ ],
"Ruby": [
"Appraisals",
"Capfile",
@@ -549,10 +758,15 @@
],
"YAML": [
".gemrc"
+ ],
+ "Zephir": [
+ "exception.zep.c",
+ "exception.zep.h",
+ "exception.zep.php"
]
},
- "tokens_total": 450556,
- "languages_total": 548,
+ "tokens_total": 637830,
+ "languages_total": 828,
"tokens": {
"ABAP": {
"*/**": 1,
@@ -871,6 +1085,241 @@
"zero": 1,
"Nat": 1
},
+ "Alloy": {
+ "module": 3,
+ "examples/systems/file_system": 1,
+ "abstract": 2,
+ "sig": 20,
+ "Object": 10,
+ "{": 54,
+ "}": 60,
+ "Name": 2,
+ "File": 1,
+ "extends": 10,
+ "some": 3,
+ "d": 3,
+ "Dir": 8,
+ "|": 19,
+ "this": 14,
+ "in": 19,
+ "d.entries.contents": 1,
+ "entries": 3,
+ "set": 10,
+ "DirEntry": 2,
+ "parent": 3,
+ "lone": 6,
+ "this.": 4,
+ "@contents.": 1,
+ "@entries": 1,
+ "all": 16,
+ "e1": 2,
+ "e2": 2,
+ "e1.name": 1,
+ "e2.name": 1,
+ "@parent": 2,
+ "Root": 5,
+ "one": 8,
+ "no": 8,
+ "Cur": 1,
+ "name": 1,
+ "contents": 2,
+ "pred": 16,
+ "OneParent_buggyVersion": 2,
+ "-": 41,
+ "d.parent": 2,
+ "OneParent_correctVersion": 2,
+ "(": 12,
+ "&&": 2,
+ "contents.d": 1,
+ ")": 9,
+ "NoDirAliases": 3,
+ "o": 1,
+ "o.": 1,
+ "check": 6,
+ "for": 7,
+ "expect": 6,
+ "examples/systems/marksweepgc": 1,
+ "Node": 10,
+ "HeapState": 5,
+ "left": 3,
+ "right": 1,
+ "marked": 1,
+ "freeList": 1,
+ "clearMarks": 1,
+ "[": 82,
+ "hs": 16,
+ ".marked": 3,
+ ".right": 4,
+ "hs.right": 3,
+ "fun": 1,
+ "reachable": 1,
+ "n": 5,
+ "]": 80,
+ "+": 14,
+ "n.": 1,
+ "hs.left": 2,
+ "mark": 1,
+ "from": 2,
+ "hs.reachable": 1,
+ "setFreeList": 1,
+ ".freeList.*": 3,
+ ".left": 5,
+ "hs.marked": 1,
+ "GC": 1,
+ "root": 5,
+ "assert": 3,
+ "Soundness1": 2,
+ "h": 9,
+ "live": 3,
+ "h.reachable": 1,
+ "h.right": 1,
+ "Soundness2": 2,
+ ".reachable": 2,
+ "h.GC": 1,
+ ".freeList": 1,
+ "Completeness": 1,
+ "examples/systems/views": 1,
+ "open": 2,
+ "util/ordering": 1,
+ "State": 16,
+ "as": 2,
+ "so": 1,
+ "util/relation": 1,
+ "rel": 1,
+ "Ref": 19,
+ "t": 16,
+ "b": 13,
+ "v": 25,
+ "views": 2,
+ "when": 1,
+ "is": 1,
+ "view": 2,
+ "of": 3,
+ "type": 1,
+ "backing": 1,
+ "dirty": 3,
+ "contains": 1,
+ "refs": 7,
+ "that": 1,
+ "have": 1,
+ "been": 1,
+ "invalidated": 1,
+ "obj": 1,
+ "ViewType": 8,
+ "anyviews": 2,
+ "visualization": 1,
+ "ViewType.views": 1,
+ "Map": 2,
+ "keys": 3,
+ "map": 2,
+ "s": 6,
+ "Ref.map": 1,
+ "s.refs": 3,
+ "MapRef": 4,
+ "fact": 4,
+ "State.obj": 3,
+ "Iterator": 2,
+ "done": 3,
+ "lastRef": 2,
+ "IteratorRef": 5,
+ "Set": 2,
+ "elts": 2,
+ "SetRef": 5,
+ "KeySetView": 6,
+ "State.views": 1,
+ "IteratorView": 3,
+ "s.views": 2,
+ "handle": 1,
+ "possibility": 1,
+ "modifying": 1,
+ "an": 1,
+ "object": 1,
+ "and": 1,
+ "its": 1,
+ "at": 1,
+ "once": 1,
+ "*": 1,
+ "should": 1,
+ "we": 1,
+ "limit": 1,
+ "frame": 1,
+ "conds": 1,
+ "to": 1,
+ "non": 1,
+ "*/": 1,
+ "modifies": 5,
+ "pre": 15,
+ "post": 14,
+ "rs": 4,
+ "let": 5,
+ "vr": 1,
+ "pre.views": 8,
+ "mods": 3,
+ "rs.*vr": 1,
+ "r": 3,
+ "pre.refs": 6,
+ "pre.obj": 10,
+ "post.obj": 7,
+ "viewFrame": 4,
+ "post.dirty": 1,
+ "pre.dirty": 1,
+ "allocates": 5,
+ "&": 3,
+ "post.refs": 1,
+ ".map": 3,
+ ".elts": 3,
+ "dom": 1,
+ "<:>": 1,
+ "setRefs": 1,
+ "MapRef.put": 1,
+ "k": 5,
+ "none": 4,
+ "post.views": 4,
+ "SetRef.iterator": 1,
+ "iterRef": 4,
+ "i": 7,
+ "i.left": 3,
+ "i.done": 1,
+ "i.lastRef": 1,
+ "IteratorRef.remove": 1,
+ ".lastRef": 2,
+ "IteratorRef.next": 1,
+ "ref": 3,
+ "IteratorRef.hasNext": 1,
+ "s.obj": 1,
+ "zippishOK": 2,
+ "ks": 6,
+ "vs": 6,
+ "m": 4,
+ "ki": 2,
+ "vi": 2,
+ "s0": 4,
+ "so/first": 1,
+ "s1": 4,
+ "so/next": 7,
+ "s2": 6,
+ "s3": 4,
+ "s4": 4,
+ "s5": 4,
+ "s6": 4,
+ "s7": 2,
+ "precondition": 2,
+ "s0.dirty": 1,
+ "ks.iterator": 1,
+ "vs.iterator": 1,
+ "ki.hasNext": 1,
+ "vi.hasNext": 1,
+ "ki.this/next": 1,
+ "vi.this/next": 1,
+ "m.put": 1,
+ "ki.remove": 1,
+ "vi.remove": 1,
+ "State.dirty": 1,
+ "ViewType.pre.views": 2,
+ "but": 1,
+ "#s.obj": 1,
+ "<": 1
+ },
"ApacheConf": {
"ServerSignature": 1,
"Off": 1,
@@ -2048,6 +2497,1407 @@
".Section": 1,
"list": 1
},
+ "AspectJ": {
+ "package": 2,
+ "com.blogspot.miguelinlas3.aspectj.cache": 1,
+ ";": 29,
+ "import": 5,
+ "java.util.Map": 2,
+ "java.util.WeakHashMap": 1,
+ "org.aspectj.lang.JoinPoint": 1,
+ "com.blogspot.miguelinlas3.aspectj.cache.marker.Cachable": 1,
+ "public": 6,
+ "aspect": 2,
+ "CacheAspect": 1,
+ "{": 11,
+ "pointcut": 3,
+ "cache": 3,
+ "(": 46,
+ "Cachable": 2,
+ "cachable": 5,
+ ")": 46,
+ "execution": 1,
+ "@Cachable": 2,
+ "*": 2,
+ "..": 1,
+ "&&": 2,
+ "@annotation": 1,
+ "Object": 15,
+ "around": 2,
+ "String": 3,
+ "evaluatedKey": 6,
+ "this.evaluateKey": 1,
+ "cachable.scriptKey": 1,
+ "thisJoinPoint": 1,
+ "if": 2,
+ "cache.containsKey": 1,
+ "System.out.println": 5,
+ "+": 7,
+ "return": 5,
+ "this.cache.get": 1,
+ "}": 11,
+ "value": 3,
+ "proceed": 2,
+ "cache.put": 1,
+ "protected": 2,
+ "evaluateKey": 1,
+ "key": 2,
+ "JoinPoint": 1,
+ "joinPoint": 1,
+ "//": 1,
+ "TODO": 1,
+ "add": 1,
+ "some": 1,
+ "smart": 1,
+ "staff": 1,
+ "to": 1,
+ "allow": 1,
+ "simple": 1,
+ "scripting": 1,
+ "in": 1,
+ "annotation": 1,
+ "Map": 3,
+ "": 1,
+ "SHEBANG#!Mark>": 22,
+ "SHEBANG#!#! The": 2,
+ "SHEBANG#!A>": 1,
+ "SHEBANG#!#!
": 1,
+ "SHEBANG#!#!
": 3,
+ "SHEBANG#!#!
": 2,
+ "SomePackage": 3,
+ "
": 2,
+ "following": 4,
+ "added": 1,
+ "preamble": 1,
+ "": 1,
+ "SHEBANG#!#!
": 1, + "class=": 14, + "": 9, + "href=": 9, + "Skip": 1, + "to": 1, + "navigation.": 1, + "": 9, + "
": 1, + "%": 46, + "if": 5, + "cart.item_count": 7, + "": 1,
@@ -39743,6 +53452,2094 @@
"right": 1,
"L": 2
},
+ "Propeller Spin": {
+ "{": 26,
+ "*****************************************": 4,
+ "*": 143,
+ "x4": 4,
+ "Keypad": 1,
+ "Reader": 1,
+ "v1.0": 4,
+ "Author": 8,
+ "Beau": 2,
+ "Schwabe": 2,
+ "Copyright": 10,
+ "(": 356,
+ "c": 33,
+ ")": 356,
+ "Parallax": 10,
+ "See": 10,
+ "end": 12,
+ "of": 108,
+ "file": 9,
+ "for": 70,
+ "terms": 9,
+ "use.": 9,
+ "}": 26,
+ "Operation": 2,
+ "This": 3,
+ "object": 7,
+ "uses": 2,
+ "a": 72,
+ "capacitive": 1,
+ "PIN": 1,
+ "approach": 1,
+ "to": 191,
+ "reading": 1,
+ "the": 136,
+ "keypad.": 1,
+ "To": 3,
+ "do": 26,
+ "so": 11,
+ "ALL": 2,
+ "pins": 26,
+ "are": 18,
+ "made": 2,
+ "LOW": 2,
+ "and": 95,
+ "an": 12,
+ "OUTPUT": 2,
+ "I/O": 3,
+ "pins.": 1,
+ "Then": 1,
+ "set": 42,
+ "INPUT": 2,
+ "state.": 1,
+ "At": 1,
+ "this": 26,
+ "point": 21,
+ "only": 63,
+ "one": 4,
+ "pin": 18,
+ "is": 51,
+ "HIGH": 3,
+ "at": 26,
+ "time.": 2,
+ "If": 2,
+ "closed": 1,
+ "then": 5,
+ "will": 12,
+ "be": 46,
+ "read": 29,
+ "on": 12,
+ "input": 2,
+ "otherwise": 1,
+ "returned.": 1,
+ "The": 17,
+ "keypad": 4,
+ "decoding": 1,
+ "routine": 1,
+ "requires": 3,
+ "two": 6,
+ "subroutines": 1,
+ "returns": 6,
+ "entire": 1,
+ "matrix": 1,
+ "into": 19,
+ "single": 2,
+ "WORD": 1,
+ "variable": 1,
+ "indicating": 1,
+ "which": 16,
+ "buttons": 2,
+ "pressed.": 1,
+ "Multiple": 1,
+ "button": 2,
+ "presses": 1,
+ "allowed": 1,
+ "with": 8,
+ "understanding": 1,
+ "that": 10,
+ "BOX": 2,
+ "entries": 1,
+ "can": 4,
+ "confused.": 1,
+ "An": 1,
+ "example": 3,
+ "entry...": 1,
+ "or": 43,
+ "#": 97,
+ "etc.": 1,
+ "where": 2,
+ "any": 15,
+ "pressed": 3,
+ "evaluate": 1,
+ "non": 3,
+ "as": 8,
+ "being": 2,
+ "even": 1,
+ "when": 3,
+ "they": 2,
+ "not.": 1,
+ "There": 1,
+ "no": 7,
+ "danger": 1,
+ "physical": 1,
+ "electrical": 1,
+ "damage": 1,
+ "s": 16,
+ "just": 2,
+ "way": 1,
+ "sensing": 1,
+ "method": 2,
+ "happens": 1,
+ "work.": 1,
+ "Schematic": 1,
+ "No": 2,
+ "resistors": 4,
+ "capacitors.": 1,
+ "connections": 1,
+ "directly": 1,
+ "from": 21,
+ "Clear": 2,
+ "value": 51,
+ "ReadRow": 4,
+ "Shift": 3,
+ "left": 12,
+ "by": 17,
+ "preset": 1,
+ "P0": 2,
+ "P7": 2,
+ "LOWs": 1,
+ "dira": 3,
+ "[": 35,
+ "]": 34,
+ "make": 16,
+ "INPUTSs": 1,
+ "...": 5,
+ "now": 3,
+ "act": 1,
+ "like": 4,
+ "tiny": 1,
+ "capacitors": 1,
+ "outa": 2,
+ "n": 4,
+ "Pin": 1,
+ "OUTPUT...": 1,
+ "Make": 1,
+ ";": 2,
+ "charge": 10,
+ "+": 759,
+ "ina": 3,
+ "Pn": 1,
+ "remain": 1,
+ "discharged": 1,
+ "DAT": 7,
+ "TERMS": 9,
+ "OF": 49,
+ "USE": 19,
+ "MIT": 9,
+ "License": 9,
+ "Permission": 9,
+ "hereby": 9,
+ "granted": 9,
+ "free": 10,
+ "person": 9,
+ "obtaining": 9,
+ "copy": 21,
+ "software": 9,
+ "associated": 11,
+ "documentation": 9,
+ "files": 9,
+ "deal": 9,
+ "in": 53,
+ "Software": 28,
+ "without": 19,
+ "restriction": 9,
+ "including": 9,
+ "limitation": 9,
+ "rights": 9,
+ "use": 19,
+ "modify": 9,
+ "merge": 9,
+ "publish": 9,
+ "distribute": 9,
+ "sublicense": 9,
+ "and/or": 9,
+ "sell": 9,
+ "copies": 18,
+ "permit": 9,
+ "persons": 9,
+ "whom": 9,
+ "furnished": 9,
+ "subject": 9,
+ "following": 9,
+ "conditions": 9,
+ "above": 11,
+ "copyright": 9,
+ "notice": 18,
+ "permission": 9,
+ "shall": 9,
+ "included": 9,
+ "all": 14,
+ "substantial": 9,
+ "portions": 9,
+ "Software.": 9,
+ "THE": 59,
+ "SOFTWARE": 19,
+ "IS": 10,
+ "PROVIDED": 9,
+ "WITHOUT": 10,
+ "WARRANTY": 10,
+ "ANY": 20,
+ "KIND": 10,
+ "EXPRESS": 10,
+ "OR": 70,
+ "IMPLIED": 10,
+ "INCLUDING": 10,
+ "BUT": 10,
+ "NOT": 11,
+ "LIMITED": 10,
+ "TO": 10,
+ "WARRANTIES": 10,
+ "MERCHANTABILITY": 10,
+ "FITNESS": 10,
+ "FOR": 20,
+ "A": 21,
+ "PARTICULAR": 10,
+ "PURPOSE": 10,
+ "AND": 10,
+ "NONINFRINGEMENT.": 10,
+ "IN": 40,
+ "NO": 10,
+ "EVENT": 10,
+ "SHALL": 10,
+ "AUTHORS": 10,
+ "COPYRIGHT": 10,
+ "HOLDERS": 10,
+ "BE": 10,
+ "LIABLE": 10,
+ "CLAIM": 10,
+ "DAMAGES": 10,
+ "OTHER": 20,
+ "LIABILITY": 10,
+ "WHETHER": 10,
+ "AN": 10,
+ "ACTION": 10,
+ "CONTRACT": 10,
+ "TORT": 10,
+ "OTHERWISE": 10,
+ "ARISING": 10,
+ "FROM": 10,
+ "OUT": 10,
+ "CONNECTION": 10,
+ "WITH": 10,
+ "DEALINGS": 10,
+ "SOFTWARE.": 10,
+ "****************************************": 4,
+ "Debug_Lcd": 1,
+ "v1.2": 2,
+ "Authors": 1,
+ "Jon": 2,
+ "Williams": 2,
+ "Jeff": 2,
+ "Martin": 2,
+ "Inc.": 8,
+ "Debugging": 1,
+ "wrapper": 1,
+ "Serial_Lcd": 1,
+ "-": 486,
+ "March": 1,
+ "Updated": 4,
+ "conform": 1,
+ "Propeller": 3,
+ "initialization": 2,
+ "standards.": 1,
+ "v1.1": 8,
+ "April": 1,
+ "consistency.": 1,
+ "OBJ": 2,
+ "lcd": 2,
+ "number": 27,
+ "string": 8,
+ "conversion": 1,
+ "PUB": 63,
+ "init": 2,
+ "baud": 2,
+ "lines": 24,
+ "okay": 11,
+ "Initializes": 1,
+ "serial": 1,
+ "LCD": 4,
+ "true": 6,
+ "if": 53,
+ "parameters": 19,
+ "lcd.init": 1,
+ "finalize": 1,
+ "Finalizes": 1,
+ "frees": 6,
+ "floats": 1,
+ "lcd.finalize": 1,
+ "putc": 1,
+ "txbyte": 2,
+ "Send": 1,
+ "byte": 27,
+ "terminal": 4,
+ "lcd.putc": 1,
+ "str": 3,
+ "strAddr": 2,
+ "Print": 15,
+ "zero": 10,
+ "terminated": 4,
+ "lcd.str": 8,
+ "dec": 3,
+ "signed": 4,
+ "decimal": 5,
+ "num.dec": 1,
+ "decf": 1,
+ "width": 9,
+ "Prints": 2,
+ "space": 1,
+ "padded": 2,
+ "fixed": 1,
+ "field": 4,
+ "num.decf": 1,
+ "decx": 1,
+ "digits": 23,
+ "negative": 2,
+ "num.decx": 1,
+ "hex": 3,
+ "hexadecimal": 4,
+ "num.hex": 1,
+ "ihex": 1,
+ "indicated": 2,
+ "num.ihex": 1,
+ "bin": 3,
+ "binary": 4,
+ "num.bin": 1,
+ "ibin": 1,
+ "%": 162,
+ "num.ibin": 1,
+ "cls": 1,
+ "Clears": 2,
+ "moves": 1,
+ "cursor": 9,
+ "home": 4,
+ "position": 9,
+ "lcd.cls": 1,
+ "Moves": 2,
+ "lcd.home": 1,
+ "gotoxy": 1,
+ "col": 9,
+ "line": 33,
+ "col/line": 1,
+ "lcd.gotoxy": 1,
+ "clrln": 1,
+ "lcd.clrln": 1,
+ "type": 4,
+ "Selects": 1,
+ "off": 8,
+ "blink": 4,
+ "lcd.cursor": 1,
+ "display": 23,
+ "status": 15,
+ "Controls": 1,
+ "visibility": 1,
+ "false": 7,
+ "hide": 1,
+ "contents": 3,
+ "clearing": 1,
+ "lcd.displayOn": 1,
+ "else": 3,
+ "lcd.displayOff": 1,
+ "custom": 2,
+ "char": 2,
+ "chrDataAddr": 3,
+ "Installs": 1,
+ "character": 6,
+ "map": 1,
+ "address": 16,
+ "definition": 9,
+ "array": 1,
+ "lcd.custom": 1,
+ "backLight": 1,
+ "Enable": 1,
+ "disable": 7,
+ "backlight": 1,
+ "affects": 1,
+ "backlit": 1,
+ "models": 1,
+ "lcd.backLight": 1,
+ "***************************************": 12,
+ "Graphics": 3,
+ "Driver": 4,
+ "Chip": 7,
+ "Gracey": 7,
+ "Theory": 1,
+ "cog": 39,
+ "launched": 1,
+ "processes": 1,
+ "commands": 1,
+ "via": 5,
+ "routines.": 1,
+ "Points": 1,
+ "arcs": 1,
+ "sprites": 1,
+ "text": 9,
+ "polygons": 1,
+ "rasterized": 1,
+ "specified": 1,
+ "stretch": 1,
+ "memory": 2,
+ "serves": 1,
+ "generic": 1,
+ "bitmap": 15,
+ "buffer.": 1,
+ "displayed": 1,
+ "TV.SRC": 1,
+ "VGA.SRC": 1,
+ "driver.": 3,
+ "GRAPHICS_DEMO.SRC": 1,
+ "usage": 1,
+ "example.": 1,
+ "CON": 4,
+ "#1": 47,
+ "_setup": 1,
+ "_color": 2,
+ "_width": 2,
+ "_plot": 2,
+ "_line": 2,
+ "_arc": 2,
+ "_vec": 2,
+ "_vecarc": 2,
+ "_pix": 1,
+ "_pixarc": 1,
+ "_text": 2,
+ "_textarc": 1,
+ "_textmode": 2,
+ "_fill": 1,
+ "_loop": 5,
+ "VAR": 10,
+ "long": 122,
+ "command": 7,
+ "bitmap_base": 7,
+ "pixel": 40,
+ "data": 47,
+ "slices": 3,
+ "text_xs": 1,
+ "text_ys": 1,
+ "text_sp": 1,
+ "text_just": 1,
+ "font": 3,
+ "pointer": 14,
+ "same": 7,
+ "instances": 1,
+ "stop": 9,
+ "cognew": 4,
+ "@loop": 1,
+ "@command": 1,
+ "Stop": 6,
+ "graphics": 4,
+ "driver": 17,
+ "cogstop": 3,
+ "setup": 3,
+ "x_tiles": 9,
+ "y_tiles": 9,
+ "x_origin": 2,
+ "y_origin": 2,
+ "base_ptr": 3,
+ "|": 22,
+ "bases_ptr": 3,
+ "slices_ptr": 1,
+ "Set": 5,
+ "x": 112,
+ "tiles": 19,
+ "x16": 7,
+ "pixels": 14,
+ "each": 11,
+ "y": 80,
+ "relative": 2,
+ "center": 10,
+ "base": 6,
+ "setcommand": 13,
+ "write": 36,
+ "bases": 2,
+ "<<": 70,
+ "retain": 2,
+ "high": 7,
+ "level": 5,
+ "bitmap_longs": 1,
+ "clear": 5,
+ "dest_ptr": 2,
+ "Copy": 1,
+ "double": 2,
+ "buffered": 1,
+ "flicker": 5,
+ "destination": 1,
+ "color": 39,
+ "bit": 35,
+ "pattern": 2,
+ "code": 3,
+ "bits": 29,
+ "@colors": 2,
+ "&": 21,
+ "determine": 2,
+ "shape/width": 2,
+ "w": 8,
+ "F": 18,
+ "pixel_width": 1,
+ "pixel_passes": 2,
+ "@w": 1,
+ "update": 7,
+ "new": 6,
+ "repeat": 18,
+ "i": 24,
+ "p": 8,
+ "E": 7,
+ "r": 4,
+ "<": 14,
+ "colorwidth": 1,
+ "plot": 17,
+ "Plot": 3,
+ "@x": 6,
+ "Draw": 7,
+ "endpoint": 1,
+ "arc": 21,
+ "xr": 7,
+ "yr": 7,
+ "angle": 23,
+ "anglestep": 2,
+ "steps": 9,
+ "arcmode": 2,
+ "radii": 3,
+ "initial": 6,
+ "FFF": 3,
+ "..359.956": 3,
+ "step": 9,
+ "leaves": 1,
+ "between": 4,
+ "points": 2,
+ "vec": 1,
+ "vecscale": 5,
+ "vecangle": 5,
+ "vecdef_ptr": 5,
+ "vector": 12,
+ "sprite": 14,
+ "scale": 7,
+ "rotation": 3,
+ "Vector": 2,
+ "word": 212,
+ "length": 4,
+ "vecarc": 2,
+ "pix": 3,
+ "pixrot": 3,
+ "pixdef_ptr": 3,
+ "mirror": 1,
+ "Pixel": 1,
+ "justify": 4,
+ "draw": 5,
+ "textarc": 1,
+ "string_ptr": 6,
+ "justx": 2,
+ "justy": 3,
+ "it": 8,
+ "may": 6,
+ "necessary": 1,
+ "call": 44,
+ ".finish": 1,
+ "immediately": 1,
+ "afterwards": 1,
+ "prevent": 1,
+ "subsequent": 1,
+ "clobbering": 1,
+ "drawn": 1,
+ "@justx": 1,
+ "@x_scale": 1,
+ "get": 30,
+ "half": 2,
+ "min": 4,
+ "max": 6,
+ "pmin": 1,
+ "round/square": 1,
+ "corners": 1,
+ "y2": 7,
+ "x2": 6,
+ "fill": 3,
+ "pmax": 2,
+ "triangle": 3,
+ "sides": 1,
+ "polygon": 1,
+ "tri": 2,
+ "x3": 4,
+ "y3": 5,
+ "y4": 1,
+ "x1": 5,
+ "y1": 7,
+ "xy": 1,
+ "solid": 1,
+ "/": 27,
+ "finish": 2,
+ "Wait": 2,
+ "current": 3,
+ "insure": 2,
+ "safe": 1,
+ "manually": 1,
+ "manipulate": 1,
+ "while": 5,
+ "primitives": 1,
+ "xa0": 53,
+ "start": 16,
+ "ya1": 3,
+ "ya2": 1,
+ "ya3": 2,
+ "ya4": 40,
+ "ya5": 3,
+ "ya6": 21,
+ "ya7": 9,
+ "ya8": 19,
+ "ya9": 5,
+ "yaA": 18,
+ "yaB": 4,
+ "yaC": 12,
+ "yaD": 4,
+ "yaE": 1,
+ "yaF": 1,
+ "xb0": 19,
+ "yb1": 2,
+ "yb2": 1,
+ "yb3": 4,
+ "yb4": 15,
+ "yb5": 2,
+ "yb6": 7,
+ "yb7": 3,
+ "yb8": 20,
+ "yb9": 5,
+ "ybA": 8,
+ "ybB": 1,
+ "ybC": 32,
+ "ybD": 1,
+ "ybE": 1,
+ "ybF": 1,
+ "ax1": 11,
+ "radius": 2,
+ "ay2": 23,
+ "ay3": 6,
+ "ay4": 4,
+ "a0": 8,
+ "a2": 1,
+ "farc": 41,
+ "another": 7,
+ "arc/line": 1,
+ "Round": 1,
+ "recipes": 1,
+ "C": 11,
+ "D": 18,
+ "fline": 88,
+ "xa2": 48,
+ "xb2": 26,
+ "xa1": 8,
+ "xb1": 2,
+ "more": 90,
+ "xa3": 8,
+ "xb3": 6,
+ "xb4": 35,
+ "a9": 3,
+ "ax2": 30,
+ "ay1": 10,
+ "a7": 2,
+ "aE": 1,
+ "aC": 2,
+ ".": 2,
+ "aF": 4,
+ "aD": 3,
+ "aB": 2,
+ "xa4": 13,
+ "a8": 8,
+ "@": 1,
+ "a4": 3,
+ "B": 15,
+ "H": 1,
+ "J": 1,
+ "L": 5,
+ "N": 1,
+ "P": 6,
+ "R": 3,
+ "T": 5,
+ "aA": 5,
+ "V": 7,
+ "X": 4,
+ "Z": 1,
+ "b": 1,
+ "d": 2,
+ "f": 2,
+ "h": 2,
+ "j": 2,
+ "l": 2,
+ "t": 10,
+ "v": 1,
+ "z": 4,
+ "delta": 10,
+ "bullet": 1,
+ "fx": 1,
+ "*************************************": 2,
+ "org": 2,
+ "loop": 14,
+ "rdlong": 16,
+ "t1": 139,
+ "par": 20,
+ "wz": 21,
+ "arguments": 1,
+ "mov": 154,
+ "t2": 90,
+ "t3": 10,
+ "#8": 14,
+ "arg": 3,
+ "arg0": 12,
+ "add": 92,
+ "d0": 11,
+ "#4": 8,
+ "djnz": 24,
+ "wrlong": 6,
+ "dx": 20,
+ "dy": 15,
+ "arg1": 3,
+ "ror": 4,
+ "#16": 6,
+ "jump": 1,
+ "jumps": 6,
+ "color_": 1,
+ "plot_": 2,
+ "arc_": 2,
+ "vecarc_": 1,
+ "pixarc_": 1,
+ "textarc_": 2,
+ "fill_": 1,
+ "setup_": 1,
+ "xlongs": 4,
+ "xorigin": 2,
+ "yorigin": 4,
+ "arg3": 12,
+ "basesptr": 4,
+ "arg5": 6,
+ "jmp": 24,
+ "#loop": 9,
+ "width_": 1,
+ "pwidth": 3,
+ "passes": 3,
+ "#plotd": 3,
+ "line_": 1,
+ "#linepd": 2,
+ "arg7": 6,
+ "#3": 7,
+ "cmp": 16,
+ "exit": 5,
+ "px": 14,
+ "py": 11,
+ "mode": 7,
+ "if_z": 11,
+ "#plotp": 3,
+ "test": 38,
+ "arg4": 5,
+ "iterations": 1,
+ "vecdef": 1,
+ "rdword": 10,
+ "t7": 8,
+ "add/sub": 1,
+ "to/from": 1,
+ "t6": 7,
+ "sumc": 4,
+ "#multiply": 2,
+ "round": 1,
+ "up": 4,
+ "/2": 1,
+ "lsb": 1,
+ "shr": 24,
+ "t4": 7,
+ "if_nc": 15,
+ "h8000": 5,
+ "wc": 57,
+ "if_c": 37,
+ "xwords": 1,
+ "ywords": 1,
+ "xxxxxxxx": 2,
+ "save": 1,
+ "actual": 4,
+ "sy": 5,
+ "rdbyte": 3,
+ "origin": 1,
+ "adjust": 4,
+ "neg": 2,
+ "sub": 12,
+ "arg2": 7,
+ "sumnc": 7,
+ "if_nz": 18,
+ "yline": 1,
+ "sx": 4,
+ "#0": 20,
+ "next": 16,
+ "#2": 15,
+ "shl": 21,
+ "t5": 4,
+ "xpixel": 2,
+ "rol": 1,
+ "muxc": 5,
+ "pcolor": 5,
+ "color1": 2,
+ "color2": 2,
+ "@string": 1,
+ "#arcmod": 1,
+ "text_": 1,
+ "chr": 4,
+ "done": 3,
+ "scan": 7,
+ "tjz": 8,
+ "def": 2,
+ "extract": 4,
+ "_0001_1": 1,
+ "#fontb": 3,
+ "textsy": 2,
+ "starting": 1,
+ "_0011_0": 1,
+ "#11": 1,
+ "#arcd": 1,
+ "#fontxy": 1,
+ "advance": 2,
+ "textsx": 3,
+ "_0111_0": 1,
+ "setd_ret": 1,
+ "fontxy_ret": 1,
+ "ret": 17,
+ "fontb": 1,
+ "multiply": 8,
+ "fontb_ret": 1,
+ "textmode_": 1,
+ "textsp": 2,
+ "da": 1,
+ "db": 1,
+ "db2": 1,
+ "linechange": 1,
+ "lines_minus_1": 1,
+ "right": 9,
+ "fractions": 1,
+ "pre": 1,
+ "increment": 1,
+ "counter": 1,
+ "yloop": 2,
+ "integers": 1,
+ "base0": 17,
+ "base1": 10,
+ "sar": 8,
+ "cmps": 3,
+ "out": 24,
+ "range": 2,
+ "ylongs": 6,
+ "skip": 5,
+ "mins": 1,
+ "mask": 3,
+ "mask0": 8,
+ "#5": 2,
+ "ready": 10,
+ "count": 4,
+ "mask1": 6,
+ "bits0": 6,
+ "bits1": 5,
+ "pass": 5,
+ "not": 6,
+ "full": 3,
+ "longs": 15,
+ "deltas": 1,
+ "linepd": 1,
+ "wr": 2,
+ "direction": 2,
+ "abs": 1,
+ "dominant": 2,
+ "axis": 1,
+ "last": 6,
+ "ratio": 1,
+ "xloop": 1,
+ "linepd_ret": 1,
+ "plotd": 1,
+ "wide": 3,
+ "bounds": 2,
+ "#plotp_ret": 2,
+ "#7": 2,
+ "store": 1,
+ "writes": 1,
+ "pair": 1,
+ "account": 1,
+ "special": 1,
+ "case": 5,
+ "andn": 7,
+ "slice": 7,
+ "shift0": 1,
+ "colorize": 1,
+ "upper": 2,
+ "subx": 1,
+ "#wslice": 1,
+ "offset": 14,
+ "Get": 2,
+ "args": 5,
+ "move": 2,
+ "using": 1,
+ "first": 9,
+ "arg6": 1,
+ "arcmod_ret": 1,
+ "arg2/t4": 1,
+ "arg4/t6": 1,
+ "arcd": 1,
+ "#setd": 1,
+ "#polarx": 1,
+ "Polar": 1,
+ "cartesian": 1,
+ "polarx": 1,
+ "sine_90": 2,
+ "sine": 7,
+ "quadrant": 3,
+ "nz": 3,
+ "negate": 2,
+ "table": 9,
+ "sine_table": 1,
+ "shift": 7,
+ "final": 3,
+ "sine/cosine": 1,
+ "integer": 2,
+ "negnz": 3,
+ "sine_180": 1,
+ "shifted": 1,
+ "multiplier": 3,
+ "product": 1,
+ "Defined": 1,
+ "constants": 2,
+ "hFFFFFFFF": 1,
+ "FFFFFFFF": 1,
+ "fontptr": 1,
+ "Undefined": 2,
+ "temps": 1,
+ "res": 89,
+ "pointers": 2,
+ "slicesptr": 1,
+ "line/plot": 1,
+ "coordinates": 1,
+ "Inductive": 1,
+ "Sensor": 1,
+ "Demo": 1,
+ "Test": 2,
+ "Circuit": 1,
+ "pF": 1,
+ "K": 4,
+ "M": 1,
+ "FPin": 2,
+ "SDF": 1,
+ "sigma": 3,
+ "feedback": 2,
+ "SDI": 1,
+ "GND": 4,
+ "Coils": 1,
+ "Wire": 1,
+ "used": 9,
+ "was": 2,
+ "GREEN": 2,
+ "about": 4,
+ "gauge": 1,
+ "Coke": 3,
+ "Can": 3,
+ "form": 7,
+ "MHz": 16,
+ "BIC": 1,
+ "pen": 1,
+ "How": 1,
+ "does": 2,
+ "work": 2,
+ "Note": 1,
+ "reported": 2,
+ "resonate": 5,
+ "frequency": 18,
+ "LC": 8,
+ "frequency.": 2,
+ "Instead": 1,
+ "voltage": 5,
+ "produced": 1,
+ "circuit": 5,
+ "clipped.": 1,
+ "In": 2,
+ "below": 4,
+ "When": 1,
+ "you": 5,
+ "apply": 1,
+ "small": 1,
+ "specific": 1,
+ "near": 1,
+ "uncommon": 1,
+ "measure": 1,
+ "times": 3,
+ "amount": 1,
+ "applying": 1,
+ "circuit.": 1,
+ "through": 1,
+ "diode": 2,
+ "basically": 1,
+ "feeds": 1,
+ "divide": 3,
+ "divider": 1,
+ "...So": 1,
+ "order": 1,
+ "see": 2,
+ "ADC": 2,
+ "sweep": 2,
+ "result": 6,
+ "output": 11,
+ "needs": 1,
+ "generate": 1,
+ "Volts": 1,
+ "ground.": 1,
+ "drop": 1,
+ "across": 1,
+ "since": 1,
+ "sensitive": 1,
+ "works": 1,
+ "after": 2,
+ "divider.": 1,
+ "typical": 1,
+ "magnitude": 1,
+ "applied": 2,
+ "might": 1,
+ "look": 2,
+ "something": 1,
+ "*****": 4,
+ "...With": 1,
+ "looks": 1,
+ "X****": 1,
+ "...The": 1,
+ "denotes": 1,
+ "location": 1,
+ "reason": 1,
+ "slightly": 1,
+ "reasons": 1,
+ "really.": 1,
+ "lazy": 1,
+ "I": 1,
+ "didn": 1,
+ "acts": 1,
+ "dead": 1,
+ "short.": 1,
+ "situation": 1,
+ "exactly": 1,
+ "great": 1,
+ "gr.start": 2,
+ "gr.setup": 2,
+ "FindResonateFrequency": 1,
+ "DisplayInductorValue": 2,
+ "Freq.Synth": 1,
+ "FValue": 1,
+ "ADC.SigmaDelta": 1,
+ "@FTemp": 1,
+ "gr.clear": 1,
+ "gr.copy": 2,
+ "display_base": 2,
+ "Option": 2,
+ "Start": 6,
+ "*********************************************": 2,
+ "Frequency": 1,
+ "LowerFrequency": 2,
+ "*100/": 1,
+ "UpperFrequency": 1,
+ "gr.colorwidth": 4,
+ "gr.plot": 3,
+ "gr.line": 3,
+ "FTemp/1024": 1,
+ "Finish": 1,
+ "PS/2": 1,
+ "Keyboard": 1,
+ "v1.0.1": 2,
+ "REVISION": 2,
+ "HISTORY": 2,
+ "/15/2006": 2,
+ "Tool": 1,
+ "par_tail": 1,
+ "key": 4,
+ "buffer": 4,
+ "head": 1,
+ "par_present": 1,
+ "states": 1,
+ "par_keys": 1,
+ "******************************************": 2,
+ "entry": 1,
+ "movd": 10,
+ "#_dpin": 1,
+ "masks": 1,
+ "dmask": 4,
+ "_dpin": 3,
+ "cmask": 2,
+ "_cpin": 2,
+ "reset": 14,
+ "parameter": 14,
+ "_head": 6,
+ "_present/_states": 1,
+ "dlsb": 2,
+ "stat": 6,
+ "Update": 1,
+ "_head/_present/_states": 1,
+ "#1*4": 1,
+ "scancode": 2,
+ "state": 2,
+ "#receive": 1,
+ "AA": 1,
+ "extended": 1,
+ "if_nc_and_z": 2,
+ "F0": 3,
+ "unknown": 2,
+ "ignore": 2,
+ "#newcode": 1,
+ "_states": 2,
+ "set/clear": 1,
+ "#_states": 1,
+ "reg": 5,
+ "muxnc": 5,
+ "cmpsub": 4,
+ "shift/ctrl/alt/win": 1,
+ "pairs": 1,
+ "E0": 1,
+ "handle": 1,
+ "scrlock/capslock/numlock": 1,
+ "_000": 5,
+ "_locks": 5,
+ "#29": 1,
+ "change": 3,
+ "configure": 3,
+ "flag": 5,
+ "leds": 3,
+ "check": 5,
+ "shift1": 1,
+ "if_nz_and_c": 4,
+ "#@shift1": 1,
+ "@table": 1,
+ "#look": 1,
+ "alpha": 1,
+ "considering": 1,
+ "capslock": 1,
+ "if_nz_and_nc": 1,
+ "xor": 8,
+ "flags": 1,
+ "alt": 1,
+ "room": 1,
+ "valid": 2,
+ "enter": 1,
+ "FF": 3,
+ "#11*4": 1,
+ "wrword": 1,
+ "F3": 1,
+ "keyboard": 3,
+ "lock": 1,
+ "#transmit": 2,
+ "rev": 1,
+ "rcl": 2,
+ "_present": 2,
+ "#update": 1,
+ "Lookup": 2,
+ "perform": 2,
+ "lookup": 1,
+ "movs": 9,
+ "#table": 1,
+ "#27": 1,
+ "#rand": 1,
+ "Transmit": 1,
+ "pull": 2,
+ "clock": 4,
+ "low": 5,
+ "napshr": 3,
+ "#13": 3,
+ "#18": 2,
+ "release": 1,
+ "transmit_bit": 1,
+ "#wait_c0": 2,
+ "_d2": 1,
+ "wcond": 3,
+ "c1": 2,
+ "c0d0": 2,
+ "wait": 6,
+ "until": 3,
+ "#wait": 2,
+ "#receive_ack": 1,
+ "ack": 1,
+ "error": 1,
+ "#reset": 2,
+ "transmit_ret": 1,
+ "receive": 1,
+ "receive_bit": 1,
+ "pause": 1,
+ "us": 1,
+ "#nap": 1,
+ "_d3": 1,
+ "#receive_bit": 1,
+ "align": 1,
+ "isolate": 1,
+ "look_ret": 1,
+ "receive_ack_ret": 1,
+ "receive_ret": 1,
+ "wait_c0": 1,
+ "c0": 1,
+ "timeout": 1,
+ "ms": 4,
+ "wloop": 1,
+ "required": 4,
+ "_d4": 1,
+ "replaced": 1,
+ "c0/c1/c0d0/c1d1": 1,
+ "if_never": 1,
+ "replacements": 1,
+ "#wloop": 3,
+ "if_c_or_nz": 1,
+ "c1d1": 1,
+ "if_nc_or_z": 1,
+ "nap": 5,
+ "scales": 1,
+ "time": 7,
+ "snag": 1,
+ "cnt": 2,
+ "elapses": 1,
+ "nap_ret": 1,
+ "F9": 1,
+ "F5": 1,
+ "D2": 1,
+ "F1": 2,
+ "D1": 1,
+ "F12": 1,
+ "F10": 1,
+ "D7": 1,
+ "F6": 1,
+ "D3": 1,
+ "Tab": 2,
+ "Alt": 2,
+ "F3F2": 1,
+ "q": 1,
+ "Win": 2,
+ "Space": 2,
+ "Apps": 1,
+ "Power": 1,
+ "Sleep": 1,
+ "EF2F": 1,
+ "CapsLock": 1,
+ "Enter": 3,
+ "WakeUp": 1,
+ "BackSpace": 1,
+ "C5E1": 1,
+ "C0E4": 1,
+ "Home": 1,
+ "Insert": 1,
+ "C9EA": 1,
+ "Down": 1,
+ "E5": 1,
+ "Right": 1,
+ "C2E8": 1,
+ "Esc": 1,
+ "DF": 2,
+ "F11": 1,
+ "EC": 1,
+ "PageDn": 1,
+ "ED": 1,
+ "PrScr": 1,
+ "C6E9": 1,
+ "ScrLock": 1,
+ "D6": 1,
+ "Uninitialized": 3,
+ "_________": 5,
+ "Key": 1,
+ "Codes": 1,
+ "keypress": 1,
+ "keystate": 2,
+ "E0..FF": 1,
+ "AS": 1,
+ "TV": 9,
+ "May": 2,
+ "tile": 41,
+ "size": 5,
+ "enable": 5,
+ "efficient": 2,
+ "tv_mode": 2,
+ "NTSC": 11,
+ "lntsc": 3,
+ "cycles": 4,
+ "per": 4,
+ "sync": 10,
+ "fpal": 2,
+ "_433_618": 2,
+ "PAL": 10,
+ "spal": 3,
+ "colortable": 7,
+ "inside": 2,
+ "tvptr": 3,
+ "starts": 4,
+ "available": 4,
+ "@entry": 3,
+ "Assembly": 2,
+ "language": 2,
+ "Entry": 2,
+ "tasks": 6,
+ "#10": 2,
+ "Superfield": 2,
+ "_mode": 7,
+ "interlace": 20,
+ "vinv": 2,
+ "hsync": 5,
+ "waitvid": 3,
+ "burst": 2,
+ "sync_high2": 2,
+ "task": 2,
+ "section": 4,
+ "undisturbed": 2,
+ "black": 2,
+ "visible": 7,
+ "vb": 2,
+ "leftmost": 1,
+ "_vt": 3,
+ "vertical": 29,
+ "expand": 3,
+ "vert": 1,
+ "vscl": 12,
+ "hb": 2,
+ "horizontal": 21,
+ "hx": 5,
+ "colors": 18,
+ "screen": 13,
+ "video": 7,
+ "repoint": 2,
+ "hf": 2,
+ "linerot": 5,
+ "field1": 4,
+ "unless": 2,
+ "invisible": 8,
+ "if_z_eq_c": 1,
+ "#hsync": 1,
+ "vsync": 4,
+ "pulses": 2,
+ "vsync1": 2,
+ "#sync_low1": 1,
+ "hhalf": 2,
+ "field2": 1,
+ "#superfield": 1,
+ "Blank": 1,
+ "Horizontal": 1,
+ "pal": 2,
+ "toggle": 1,
+ "phaseflip": 4,
+ "phasemask": 2,
+ "sync_scale1": 1,
+ "blank": 2,
+ "hsync_ret": 1,
+ "vsync_high": 1,
+ "#sync_high1": 1,
+ "Tasks": 1,
+ "performed": 1,
+ "sections": 1,
+ "during": 2,
+ "back": 8,
+ "porch": 9,
+ "load": 3,
+ "#_enable": 1,
+ "_pins": 4,
+ "_enable": 2,
+ "#disabled": 2,
+ "break": 6,
+ "return": 15,
+ "later": 6,
+ "rd": 1,
+ "#wtab": 1,
+ "ltab": 1,
+ "#ltab": 1,
+ "CLKFREQ": 10,
+ "cancel": 1,
+ "_broadcast": 4,
+ "m8": 3,
+ "jmpret": 5,
+ "taskptr": 3,
+ "taskret": 4,
+ "ctra": 5,
+ "pll": 5,
+ "fcolor": 4,
+ "#divide": 2,
+ "vco": 3,
+ "movi": 3,
+ "_111": 1,
+ "ctrb": 4,
+ "limit": 4,
+ "m128": 2,
+ "_100": 1,
+ "within": 5,
+ "_001": 1,
+ "frqb": 2,
+ "swap": 2,
+ "broadcast/baseband": 1,
+ "strip": 3,
+ "chroma": 19,
+ "baseband": 18,
+ "_auralcog": 1,
+ "_hx": 4,
+ "consider": 2,
+ "lineadd": 4,
+ "lineinc": 3,
+ "/160": 2,
+ "loaded": 3,
+ "#9": 2,
+ "FC": 2,
+ "_colors": 2,
+ "colorreg": 3,
+ "d6": 3,
+ "colorloop": 1,
+ "keep": 2,
+ "loading": 2,
+ "m1": 4,
+ "multiply_ret": 2,
+ "Disabled": 2,
+ "try": 2,
+ "again": 2,
+ "reload": 1,
+ "_000_000": 6,
+ "d0s1": 1,
+ "F0F0F0F0": 1,
+ "pins0": 1,
+ "_01110000_00001111_00000111": 1,
+ "pins1": 1,
+ "_11110111_01111111_01110111": 1,
+ "sync_high1": 1,
+ "_101010_0101": 1,
+ "NTSC/PAL": 2,
+ "metrics": 1,
+ "tables": 1,
+ "wtab": 1,
+ "sntsc": 3,
+ "lpal": 3,
+ "hrest": 2,
+ "vvis": 2,
+ "vrep": 2,
+ "_8A": 1,
+ "_AA": 1,
+ "sync_scale2": 1,
+ "_00000000_01_10101010101010_0101": 1,
+ "m2": 1,
+ "Parameter": 4,
+ "/non": 4,
+ "tccip": 3,
+ "_screen": 3,
+ "@long": 2,
+ "_ht": 2,
+ "_ho": 2,
+ "fit": 2,
+ "contiguous": 1,
+ "tv_status": 4,
+ "off/on": 3,
+ "tv_pins": 5,
+ "ntsc/pal": 3,
+ "tv_screen": 5,
+ "tv_ht": 5,
+ "tv_hx": 5,
+ "expansion": 8,
+ "tv_ho": 5,
+ "tv_broadcast": 4,
+ "aural": 13,
+ "fm": 6,
+ "preceding": 2,
+ "copied": 2,
+ "your": 2,
+ "code.": 2,
+ "After": 2,
+ "setting": 2,
+ "variables": 3,
+ "@tv_status": 3,
+ "All": 2,
+ "reloaded": 2,
+ "superframe": 2,
+ "allowing": 2,
+ "live": 2,
+ "changes.": 2,
+ "minimize": 2,
+ "correlate": 2,
+ "changes": 3,
+ "tv_status.": 1,
+ "Experimentation": 2,
+ "optimize": 2,
+ "some": 3,
+ "parameters.": 2,
+ "descriptions": 2,
+ "sets": 3,
+ "indicate": 2,
+ "disabled": 3,
+ "tv_enable": 2,
+ "requirement": 2,
+ "currently": 4,
+ "outputting": 4,
+ "driven": 2,
+ "reduces": 2,
+ "power": 3,
+ "_______": 2,
+ "select": 9,
+ "group": 7,
+ "_0111": 6,
+ "broadcast": 19,
+ "_1111": 6,
+ "_0000": 4,
+ "active": 3,
+ "top": 10,
+ "nibble": 4,
+ "bottom": 5,
+ "signal": 8,
+ "arranged": 3,
+ "attach": 1,
+ "ohm": 10,
+ "resistor": 4,
+ "sum": 7,
+ "/560/1100": 2,
+ "subcarrier": 3,
+ "network": 1,
+ "visual": 1,
+ "carrier": 1,
+ "selects": 4,
+ "x32": 6,
+ "tileheight": 4,
+ "controls": 4,
+ "mixing": 2,
+ "mix": 2,
+ "black/white": 2,
+ "composite": 1,
+ "progressive": 2,
+ "less": 5,
+ "good": 5,
+ "motion": 2,
+ "interlaced": 5,
+ "doubles": 1,
+ "format": 1,
+ "ticks": 11,
+ "must": 18,
+ "least": 14,
+ "_318_180": 1,
+ "_579_545": 1,
+ "Hz": 5,
+ "_734_472": 1,
+ "itself": 1,
+ "words": 5,
+ "define": 10,
+ "tv_vt": 3,
+ "has": 4,
+ "bitfields": 2,
+ "colorset": 2,
+ "ptr": 5,
+ "pixelgroup": 2,
+ "colorset*": 2,
+ "pixelgroup**": 2,
+ "ppppppppppcccc00": 2,
+ "colorsets": 4,
+ "four": 8,
+ "**": 2,
+ "pixelgroups": 2,
+ "": 5,
+ "tv_colors": 2,
+ "fields": 2,
+ "values": 2,
+ "luminance": 2,
+ "modulation": 4,
+ "adds/subtracts": 1,
+ "beware": 1,
+ "modulated": 1,
+ "produce": 1,
+ "saturated": 1,
+ "toggling": 1,
+ "levels": 1,
+ "because": 1,
+ "abruptly": 1,
+ "rather": 1,
+ "against": 1,
+ "white": 2,
+ "background": 1,
+ "best": 1,
+ "appearance": 1,
+ "_____": 6,
+ "practical": 2,
+ "/30": 1,
+ "factor": 4,
+ "sure": 4,
+ "||": 5,
+ "than": 5,
+ "tv_vx": 2,
+ "tv_vo": 2,
+ "pos/neg": 4,
+ "centered": 2,
+ "image": 2,
+ "shifts": 4,
+ "right/left": 2,
+ "up/down": 2,
+ "____________": 1,
+ "expressed": 1,
+ "ie": 1,
+ "channel": 1,
+ "_250_000": 2,
+ "modulator": 2,
+ "turned": 2,
+ "saves": 2,
+ "broadcasting": 1,
+ "___________": 1,
+ "tv_auralcog": 1,
+ "supply": 1,
+ "selected": 1,
+ "bandwidth": 2,
+ "KHz": 3,
+ "vary": 1,
+ "Terminal": 1,
+ "instead": 1,
+ "minimum": 2,
+ "x_scale": 4,
+ "x_spacing": 4,
+ "normal": 1,
+ "x_chr": 2,
+ "y_chr": 5,
+ "y_scale": 3,
+ "y_spacing": 3,
+ "y_offset": 2,
+ "x_limit": 2,
+ "x_screen": 1,
+ "y_limit": 3,
+ "y_screen": 4,
+ "y_max": 3,
+ "y_screen_bytes": 2,
+ "y_scroll": 2,
+ "y_scroll_longs": 4,
+ "y_clear": 2,
+ "y_clear_longs": 2,
+ "paramcount": 1,
+ "ccinp": 1,
+ "tv_hc": 1,
+ "cells": 1,
+ "cell": 1,
+ "@bitmap": 1,
+ "FC0": 1,
+ "gr.textmode": 1,
+ "gr.width": 1,
+ "tv.stop": 2,
+ "gr.stop": 1,
+ "schemes": 1,
+ "tab": 3,
+ "gr.color": 1,
+ "gr.text": 1,
+ "@c": 1,
+ "gr.finish": 2,
+ "newline": 3,
+ "strsize": 2,
+ "_000_000_000": 2,
+ "//": 4,
+ "elseif": 2,
+ "lookupz": 2,
+ "..": 4,
+ "PRI": 1,
+ "longmove": 2,
+ "longfill": 2,
+ "tvparams": 1,
+ "tvparams_pins": 1,
+ "_0101": 1,
+ "vc": 1,
+ "vx": 2,
+ "vo": 1,
+ "auralcog": 1,
+ "color_schemes": 1,
+ "BC_6C_05_02": 1,
+ "E_0D_0C_0A": 1,
+ "E_6D_6C_6A": 1,
+ "BE_BD_BC_BA": 1,
+ "Text": 1,
+ "x13": 2,
+ "cols": 5,
+ "rows": 4,
+ "screensize": 4,
+ "lastrow": 2,
+ "tv_count": 2,
+ "row": 4,
+ "tv": 2,
+ "basepin": 3,
+ "setcolors": 2,
+ "@palette": 1,
+ "@tv_params": 1,
+ "@screen": 3,
+ "tv.start": 1,
+ "stringptr": 3,
+ "k": 1,
+ "Output": 1,
+ "backspace": 1,
+ "spaces": 1,
+ "follows": 4,
+ "Y": 2,
+ "others": 1,
+ "printable": 1,
+ "characters": 1,
+ "wordfill": 2,
+ "print": 2,
+ "A..": 1,
+ "other": 1,
+ "colorptr": 2,
+ "fore": 3,
+ "Override": 1,
+ "default": 1,
+ "palette": 2,
+ "list": 1,
+ "scroll": 1,
+ "hc": 1,
+ "ho": 1,
+ "dark": 2,
+ "blue": 3,
+ "BB": 1,
+ "yellow": 1,
+ "brown": 1,
+ "cyan": 3,
+ "red": 2,
+ "pink": 1,
+ "VGA": 8,
+ "vga_mode": 3,
+ "vgaptr": 3,
+ "hv": 5,
+ "bcolor": 3,
+ "#colortable": 2,
+ "#blank_line": 3,
+ "nobl": 1,
+ "_vx": 1,
+ "nobp": 1,
+ "nofp": 1,
+ "#blank_hsync": 1,
+ "front": 4,
+ "vf": 1,
+ "nofl": 1,
+ "#tasks": 1,
+ "before": 1,
+ "_vs": 2,
+ "except": 1,
+ "#blank_vsync": 1,
+ "#field": 1,
+ "superfield": 1,
+ "blank_vsync": 1,
+ "h2": 2,
+ "if_c_and_nz": 1,
+ "blank_hsync": 1,
+ "_hf": 1,
+ "invisble": 1,
+ "_hb": 1,
+ "#hv": 1,
+ "blank_hsync_ret": 1,
+ "blank_line_ret": 1,
+ "blank_vsync_ret": 1,
+ "_status": 1,
+ "#paramcount": 1,
+ "directions": 1,
+ "_rate": 3,
+ "pllmin": 1,
+ "_011": 1,
+ "rate": 6,
+ "hvbase": 5,
+ "frqa": 3,
+ "vmask": 1,
+ "hmask": 1,
+ "vcfg": 2,
+ "colormask": 1,
+ "waitcnt": 3,
+ "#entry": 1,
+ "Initialized": 1,
+ "lowest": 1,
+ "pllmax": 1,
+ "*16": 1,
+ "m4": 1,
+ "tihv": 1,
+ "_hd": 1,
+ "_hs": 1,
+ "_vd": 1,
+ "underneath": 1,
+ "BF": 1,
+ "___": 1,
+ "/1/2": 1,
+ "off/visible/invisible": 1,
+ "vga_enable": 3,
+ "pppttt": 1,
+ "vga_colors": 2,
+ "vga_vt": 6,
+ "vga_vx": 4,
+ "vga_vo": 4,
+ "vga_hf": 2,
+ "vga_hb": 2,
+ "vga_vf": 2,
+ "vga_vb": 2,
+ "tick": 2,
+ "@vga_status": 1,
+ "vga_status.": 1,
+ "__________": 4,
+ "vga_status": 1,
+ "________": 3,
+ "vga_pins": 1,
+ "monitors": 1,
+ "allows": 1,
+ "polarity": 1,
+ "respectively": 1,
+ "vga_screen": 1,
+ "vga_ht": 3,
+ "care": 1,
+ "suggested": 1,
+ "bits/pins": 3,
+ "green": 1,
+ "bit/pin": 1,
+ "signals": 1,
+ "connect": 3,
+ "RED": 1,
+ "BLUE": 1,
+ "connector": 3,
+ "always": 2,
+ "HSYNC": 1,
+ "VSYNC": 1,
+ "______": 14,
+ "vga_hx": 3,
+ "vga_ho": 2,
+ "equal": 1,
+ "vga_hd": 2,
+ "exceed": 1,
+ "vga_vd": 2,
+ "recommended": 2,
+ "vga_hs": 1,
+ "vga_vs": 1,
+ "vga_rate": 2,
+ "should": 1,
+ "Vocal": 2,
+ "Tract": 2,
+ "October": 1,
+ "synthesizes": 1,
+ "human": 1,
+ "vocal": 10,
+ "tract": 12,
+ "real": 2,
+ "It": 1,
+ "MHz.": 1,
+ "controlled": 1,
+ "reside": 1,
+ "parent": 1,
+ "aa": 2,
+ "ga": 5,
+ "gp": 2,
+ "vp": 3,
+ "vr": 1,
+ "f1": 4,
+ "f2": 1,
+ "f3": 3,
+ "f4": 2,
+ "na": 2,
+ "nf": 2,
+ "fa": 2,
+ "ff": 2,
+ "values.": 2,
+ "Before": 1,
+ "were": 1,
+ "interpolation": 1,
+ "shy": 1,
+ "frame": 12,
+ "makes": 1,
+ "behave": 1,
+ "sensibly": 1,
+ "gaps.": 1,
+ "frame_buffers": 2,
+ "bytes": 2,
+ "frame_longs": 3,
+ "frame_bytes": 1,
+ "...must": 1,
+ "dira_": 3,
+ "dirb_": 1,
+ "ctra_": 1,
+ "ctrb_": 3,
+ "frqa_": 3,
+ "cnt_": 1,
+ "many": 1,
+ "...contiguous": 1,
+ "tract_ptr": 3,
+ "pos_pin": 7,
+ "neg_pin": 6,
+ "fm_offset": 5,
+ "positive": 1,
+ "also": 1,
+ "enabled": 2,
+ "generation": 2,
+ "_500_000": 1,
+ "Remember": 1,
+ "duty": 2,
+ "Ready": 1,
+ "clkfreq": 2,
+ "Launch": 1,
+ "@attenuation": 1,
+ "Reset": 1,
+ "buffers": 1,
+ "@index": 1,
+ "constant": 3,
+ "frame_buffer_longs": 2,
+ "set_attenuation": 1,
+ "master": 2,
+ "attenuation": 3,
+ "initially": 2,
+ "set_pace": 2,
+ "percentage": 3,
+ "pace": 3,
+ "go": 1,
+ "Queue": 1,
+ "transition": 1,
+ "over": 2,
+ "Load": 1,
+ "bytemove": 1,
+ "@frames": 1,
+ "index": 5,
+ "Increment": 1,
+ "Returns": 4,
+ "queue": 2,
+ "useful": 2,
+ "checking": 1,
+ "would": 1,
+ "have": 1,
+ "frames": 2,
+ "empty": 2,
+ "detecting": 1,
+ "finished": 1,
+ "sample_ptr": 1,
+ "receives": 1,
+ "audio": 1,
+ "samples": 1,
+ "updated": 1,
+ "@sample": 1,
+ "aural_id": 1,
+ "id": 2,
+ "executing": 1,
+ "algorithm": 1,
+ "connecting": 1,
+ "Initialization": 1,
+ "reserved": 3,
+ "clear_cnt": 1,
+ "#2*15": 1,
+ "hub": 1,
+ "minst": 3,
+ "d0s0": 3,
+ "mult_ret": 1,
+ "antilog_ret": 1,
+ "assemble": 1,
+ "cordic": 4,
+ "reserves": 2,
+ "cstep": 1,
+ "instruction": 2,
+ "prepare": 1,
+ "cnt_value": 3,
+ "cnt_ticks": 3,
+ "Loop": 1,
+ "sample": 2,
+ "period": 1,
+ "cycle": 1,
+ "driving": 1,
+ "h80000000": 2,
+ "White": 1,
+ "noise": 3,
+ "source": 2,
+ "lfsr": 1,
+ "lfsr_taps": 2,
+ "Aspiration": 1,
+ "vibrato": 3,
+ "vphase": 2,
+ "glottal": 2,
+ "pitch": 5,
+ "mesh": 1,
+ "tune": 2,
+ "convert": 1,
+ "log": 2,
+ "phase": 2,
+ "gphase": 3,
+ "formant2": 2,
+ "rotate": 2,
+ "f2x": 3,
+ "f2y": 3,
+ "#cordic": 2,
+ "formant4": 2,
+ "f4x": 3,
+ "f4y": 3,
+ "subtract": 1,
+ "nx": 4,
+ "negated": 1,
+ "nasal": 2,
+ "amplitude": 3,
+ "#mult": 1,
+ "fphase": 4,
+ "frication": 2,
+ "#sine": 1,
+ "Handle": 1,
+ "frame_ptr": 6,
+ "past": 1,
+ "miscellaneous": 2,
+ "frame_index": 3,
+ "stepsize": 2,
+ "step_size": 5,
+ "h00FFFFFF": 2,
+ "final1": 2,
+ "finali": 2,
+ "iterate": 3,
+ "aa..ff": 4,
+ "accurate": 1,
+ "accumulation": 1,
+ "step_acc": 3,
+ "set2": 3,
+ "#par_curr": 1,
+ "set3": 2,
+ "#par_next": 1,
+ "set4": 3,
+ "#par_step": 1,
+ "#24": 1,
+ "par_curr": 3,
+ "absolute": 1,
+ "msb": 2,
+ "nr": 1,
+ "mult": 2,
+ "par_step": 1,
+ "frame_cnt": 2,
+ "step1": 2,
+ "stepi": 1,
+ "stepframe": 1,
+ "#frame_bytes": 1,
+ "par_next": 2,
+ "Math": 1,
+ "Subroutines": 1,
+ "Antilog": 1,
+ "whole": 2,
+ "fraction": 1,
+ "antilog": 2,
+ "FFEA0000": 1,
+ "h00000FFE": 2,
+ "insert": 2,
+ "leading": 1,
+ "Scaled": 1,
+ "unsigned": 3,
+ "h00001000": 2,
+ "negc": 1,
+ "Multiply": 1,
+ "#15": 1,
+ "mult_step": 1,
+ "Cordic": 1,
+ "degree": 1,
+ "#cordic_steps": 1,
+ "gets": 1,
+ "assembled": 1,
+ "cordic_dx": 1,
+ "incremented": 1,
+ "cordic_a": 1,
+ "cordic_delta": 2,
+ "linear": 1,
+ "register": 1,
+ "B901476": 1,
+ "greater": 1,
+ "h40000000": 1,
+ "h01000000": 1,
+ "FFFFFF": 1,
+ "h00010000": 1,
+ "h0000D000": 1,
+ "D000": 1,
+ "h00007000": 1,
+ "FFE": 1,
+ "h00000800": 1,
+ "registers": 2,
+ "startup": 2,
+ "Data": 1,
+ "zeroed": 1,
+ "cleared": 1,
+ "f1x": 1,
+ "f1y": 1,
+ "f3x": 1,
+ "f3y": 1,
+ "aspiration": 1,
+ "***": 1,
+ "mult_steps": 1,
+ "assembly": 1,
+ "area": 1,
+ "w/ret": 1,
+ "cordic_ret": 1
+ },
"Protocol Buffer": {
"package": 1,
"tutorial": 1,
@@ -39777,34 +55574,464 @@
"AddressBook": 1,
"person": 1
},
+ "PureScript": {
+ "module": 4,
+ "Control.Arrow": 1,
+ "where": 20,
+ "import": 32,
+ "Data.Tuple": 3,
+ "class": 4,
+ "Arrow": 5,
+ "a": 46,
+ "arr": 10,
+ "forall": 26,
+ "b": 49,
+ "c.": 3,
+ "(": 111,
+ "-": 88,
+ "c": 17,
+ ")": 115,
+ "first": 4,
+ "d.": 2,
+ "Tuple": 21,
+ "d": 6,
+ "instance": 12,
+ "arrowFunction": 1,
+ "f": 28,
+ "second": 3,
+ "Category": 3,
+ "swap": 4,
+ "b.": 1,
+ "x": 26,
+ "y": 2,
+ "infixr": 3,
+ "***": 2,
+ "&&": 3,
+ "&": 3,
+ ".": 2,
+ "g": 4,
+ "ArrowZero": 1,
+ "zeroArrow": 1,
+ "<+>": 2,
+ "ArrowPlus": 1,
+ "Data.Foreign": 2,
+ "Foreign": 12,
+ "..": 1,
+ "ForeignParser": 29,
+ "parseForeign": 6,
+ "parseJSON": 3,
+ "ReadForeign": 11,
+ "read": 10,
+ "prop": 3,
+ "Prelude": 3,
+ "Data.Array": 3,
+ "Data.Either": 1,
+ "Data.Maybe": 3,
+ "Data.Traversable": 2,
+ "foreign": 6,
+ "data": 3,
+ "*": 1,
+ "fromString": 2,
+ "String": 13,
+ "Either": 6,
+ "readPrimType": 5,
+ "a.": 6,
+ "readMaybeImpl": 2,
+ "Maybe": 5,
+ "readPropImpl": 2,
+ "showForeignImpl": 2,
+ "showForeign": 1,
+ "Prelude.Show": 1,
+ "show": 5,
+ "p": 11,
+ "json": 2,
+ "monadForeignParser": 1,
+ "Prelude.Monad": 1,
+ "return": 6,
+ "_": 7,
+ "Right": 9,
+ "case": 9,
+ "of": 9,
+ "Left": 8,
+ "err": 8,
+ "applicativeForeignParser": 1,
+ "Prelude.Applicative": 1,
+ "pure": 1,
+ "<*>": 2,
+ "<$>": 8,
+ "functorForeignParser": 1,
+ "Prelude.Functor": 1,
+ "readString": 1,
+ "readNumber": 1,
+ "Number": 1,
+ "readBoolean": 1,
+ "Boolean": 1,
+ "readArray": 1,
+ "[": 5,
+ "]": 5,
+ "let": 4,
+ "arrayItem": 2,
+ "i": 2,
+ "result": 4,
+ "+": 30,
+ "in": 2,
+ "xs": 3,
+ "traverse": 2,
+ "zip": 1,
+ "range": 1,
+ "length": 3,
+ "readMaybe": 1,
+ "<<": 4,
+ "<": 13,
+ "Just": 7,
+ "Nothing": 7,
+ "Data.Map": 1,
+ "Map": 26,
+ "empty": 6,
+ "singleton": 5,
+ "insert": 10,
+ "lookup": 8,
+ "delete": 9,
+ "alter": 8,
+ "toList": 10,
+ "fromList": 3,
+ "union": 3,
+ "map": 8,
+ "qualified": 1,
+ "as": 1,
+ "P": 1,
+ "concat": 3,
+ "Data.Foldable": 2,
+ "foldl": 4,
+ "k": 108,
+ "v": 57,
+ "Leaf": 15,
+ "|": 9,
+ "Branch": 27,
+ "{": 25,
+ "key": 13,
+ "value": 8,
+ "left": 15,
+ "right": 14,
+ "}": 26,
+ "eqMap": 1,
+ "P.Eq": 11,
+ "m1": 6,
+ "m2": 6,
+ "P.": 11,
+ "/": 1,
+ "P.not": 1,
+ "showMap": 1,
+ "P.Show": 3,
+ "m": 6,
+ "P.show": 1,
+ "v.": 11,
+ "P.Ord": 9,
+ "b@": 6,
+ "k1": 16,
+ "b.left": 9,
+ "b.right": 8,
+ "findMinKey": 5,
+ "glue": 4,
+ "minKey": 3,
+ "root": 2,
+ "b.key": 1,
+ "b.value": 2,
+ "v1": 3,
+ "v2.": 1,
+ "v2": 2,
+ "ReactiveJQueryTest": 1,
+ "flip": 2,
+ "Control.Monad": 1,
+ "Control.Monad.Eff": 1,
+ "Control.Monad.JQuery": 1,
+ "Control.Reactive": 1,
+ "Control.Reactive.JQuery": 1,
+ "head": 2,
+ "Data.Monoid": 1,
+ "Debug.Trace": 1,
+ "Global": 1,
+ "parseInt": 1,
+ "main": 1,
+ "do": 4,
+ "personDemo": 2,
+ "todoListDemo": 1,
+ "greet": 1,
+ "firstName": 2,
+ "lastName": 2,
+ "Create": 3,
+ "new": 1,
+ "reactive": 1,
+ "variables": 1,
+ "to": 3,
+ "hold": 1,
+ "the": 3,
+ "user": 1,
+ "readRArray": 1,
+ "insertRArray": 1,
+ "text": 5,
+ "completed": 2,
+ "paragraph": 2,
+ "display": 2,
+ "next": 1,
+ "task": 4,
+ "nextTaskLabel": 3,
+ "create": 2,
+ "append": 2,
+ "nextTask": 2,
+ "toComputedArray": 2,
+ "toComputed": 2,
+ "bindTextOneWay": 2,
+ "counter": 3,
+ "counterLabel": 3,
+ "rs": 2,
+ "cs": 2,
+ "<->": 1,
+ "if": 1,
+ "then": 1,
+ "else": 1,
+ "entry": 1,
+ "entry.completed": 1
+ },
"Python": {
- "from": 34,
+ "xspacing": 4,
+ "#": 28,
+ "How": 2,
+ "far": 1,
+ "apart": 1,
+ "should": 1,
+ "each": 1,
+ "horizontal": 1,
+ "location": 1,
+ "be": 1,
+ "spaced": 1,
+ "maxwaves": 3,
+ "total": 1,
+ "of": 5,
+ "waves": 1,
+ "to": 5,
+ "add": 1,
+ "together": 1,
+ "theta": 3,
+ "amplitude": 3,
+ "[": 165,
+ "]": 165,
+ "Height": 1,
+ "wave": 2,
+ "dx": 8,
+ "yvalues": 7,
+ "def": 87,
+ "setup": 2,
+ "(": 850,
+ ")": 861,
+ "size": 5,
+ "frameRate": 1,
+ "colorMode": 1,
+ "RGB": 1,
+ "w": 2,
+ "width": 1,
+ "+": 51,
+ "for": 69,
+ "i": 13,
+ "in": 91,
+ "range": 5,
+ "amplitude.append": 1,
+ "random": 2,
+ "period": 2,
+ "many": 1,
+ "pixels": 1,
+ "before": 1,
+ "the": 6,
+ "repeats": 1,
+ "dx.append": 1,
+ "TWO_PI": 1,
+ "/": 26,
+ "*": 38,
+ "_": 6,
+ "yvalues.append": 1,
+ "draw": 2,
+ "background": 2,
+ "calcWave": 2,
+ "renderWave": 2,
+ "len": 11,
+ "j": 7,
+ "x": 34,
+ "if": 160,
+ "%": 33,
+ "sin": 1,
+ "else": 33,
+ "cos": 1,
+ "noStroke": 2,
+ "fill": 2,
+ "ellipseMode": 1,
+ "CENTER": 1,
+ "v": 19,
+ "enumerate": 2,
+ "ellipse": 1,
+ "height": 1,
+ "import": 55,
+ "os": 2,
+ "sys": 3,
+ "json": 1,
+ "c4d": 1,
+ "c4dtools": 1,
+ "itertools": 1,
+ "from": 36,
+ "c4d.modules": 1,
+ "graphview": 1,
+ "as": 14,
+ "gv": 1,
+ "c4dtools.misc": 1,
+ "graphnode": 1,
+ "res": 3,
+ "importer": 1,
+ "c4dtools.prepare": 1,
+ "__file__": 1,
+ "__res__": 1,
+ "settings": 2,
+ "c4dtools.helpers.Attributor": 2,
+ "{": 27,
+ "res.file": 3,
+ "}": 27,
+ "align_nodes": 2,
+ "nodes": 11,
+ "mode": 5,
+ "spacing": 7,
+ "r": 9,
+ "modes": 3,
+ "not": 69,
+ "return": 68,
+ "raise": 23,
+ "ValueError": 6,
+ ".join": 4,
+ "get_0": 12,
+ "lambda": 6,
+ "x.x": 1,
+ "get_1": 4,
+ "x.y": 1,
+ "set_0": 6,
+ "setattr": 16,
+ "set_1": 4,
+ "graphnode.GraphNode": 1,
+ "n": 6,
+ "nodes.sort": 1,
+ "key": 6,
+ "n.position": 1,
+ "midpoint": 3,
+ "graphnode.find_nodes_mid": 1,
+ "first_position": 2,
+ ".position": 1,
+ "new_positions": 2,
+ "prev_offset": 6,
+ "node": 2,
+ "position": 12,
+ "node.position": 2,
+ "-": 36,
+ "node.size": 1,
+ "<": 2,
+ "new_positions.append": 1,
+ "bbox_size": 2,
+ "bbox_size_2": 2,
+ "itertools.izip": 1,
+ "align_nodes_shortcut": 3,
+ "master": 2,
+ "gv.GetMaster": 1,
+ "root": 3,
+ "master.GetRoot": 1,
+ "graphnode.find_selected_nodes": 1,
+ "master.AddUndo": 1,
+ "c4d.EventAdd": 1,
+ "True": 25,
+ "class": 19,
+ "XPAT_Options": 3,
+ "defaults": 1,
+ "__init__": 7,
+ "self": 113,
+ "filename": 12,
+ "None": 92,
+ "super": 4,
+ ".__init__": 3,
+ "self.load": 1,
+ "load": 1,
+ "is": 31,
+ "settings.options_filename": 2,
+ "os.path.isfile": 1,
+ "self.dict_": 2,
+ "self.defaults.copy": 2,
+ "with": 2,
+ "open": 2,
+ "fp": 4,
+ "self.dict_.update": 1,
+ "json.load": 1,
+ "self.save": 1,
+ "save": 2,
+ "values": 15,
+ "dict": 4,
+ "k": 7,
+ "self.dict_.iteritems": 1,
+ "self.defaults": 1,
+ "json.dump": 1,
+ "XPAT_OptionsDialog": 2,
+ "c4d.gui.GeDialog": 1,
+ "CreateLayout": 1,
+ "self.LoadDialogResource": 1,
+ "res.DLG_OPTIONS": 1,
+ "InitValues": 1,
+ "self.SetLong": 2,
+ "res.EDT_HSPACE": 2,
+ "options.hspace": 3,
+ "res.EDT_VSPACE": 2,
+ "options.vspace": 3,
+ "Command": 1,
+ "id": 2,
+ "msg": 1,
+ "res.BTN_SAVE": 1,
+ "self.GetLong": 2,
+ "options.save": 1,
+ "self.Close": 1,
+ "XPAT_Command_OpenOptionsDialog": 2,
+ "c4dtools.plugins.Command": 3,
+ "self._dialog": 4,
+ "@property": 2,
+ "dialog": 1,
+ "PLUGIN_ID": 3,
+ "PLUGIN_NAME": 3,
+ "res.string.XPAT_COMMAND_OPENOPTIONSDIALOG": 1,
+ "PLUGIN_HELP": 3,
+ "res.string.XPAT_COMMAND_OPENOPTIONSDIALOG_HELP": 1,
+ "Execute": 3,
+ "doc": 3,
+ "self.dialog.Open": 1,
+ "c4d.DLG_TYPE_MODAL": 1,
+ "XPAT_Command_AlignHorizontal": 1,
+ "res.string.XPAT_COMMAND_ALIGNHORIZONTAL": 1,
+ "PLUGIN_ICON": 2,
+ "res.string.XPAT_COMMAND_ALIGNHORIZONTAL_HELP": 1,
+ "XPAT_Command_AlignVertical": 1,
+ "res.string.XPAT_COMMAND_ALIGNVERTICAL": 1,
+ "res.string.XPAT_COMMAND_ALIGNVERTICAL_HELP": 1,
+ "options": 4,
+ "__name__": 3,
+ "c4dtools.plugins.main": 1,
"__future__": 2,
- "import": 47,
"unicode_literals": 1,
"copy": 1,
- "sys": 2,
"functools": 1,
"update_wrapper": 2,
"future_builtins": 1,
"zip": 8,
"django.db.models.manager": 1,
- "#": 13,
"Imported": 1,
- "to": 4,
"register": 1,
"signal": 1,
"handler.": 1,
"django.conf": 1,
- "settings": 1,
"django.core.exceptions": 1,
- "(": 719,
"ObjectDoesNotExist": 2,
"MultipleObjectsReturned": 2,
"FieldError": 4,
"ValidationError": 8,
"NON_FIELD_ERRORS": 3,
- ")": 730,
"django.core": 1,
"validators": 1,
"django.db.models.fields": 1,
@@ -39834,8 +56061,6 @@
"get_model": 3,
"django.utils.translation": 1,
"ugettext_lazy": 1,
- "as": 11,
- "_": 5,
"django.utils.functional": 1,
"curry": 6,
"django.utils.encoding": 1,
@@ -39844,54 +56069,37 @@
"django.utils.text": 1,
"get_text_list": 2,
"capfirst": 6,
- "class": 14,
"ModelBase": 4,
"type": 6,
- "def": 68,
"__new__": 2,
"cls": 32,
"name": 39,
"bases": 6,
"attrs": 7,
"super_new": 3,
- "super": 2,
".__new__": 1,
"parents": 8,
- "[": 152,
"b": 11,
- "for": 59,
- "in": 79,
- "if": 145,
"isinstance": 11,
- "]": 152,
- "not": 64,
- "return": 57,
"module": 6,
"attrs.pop": 2,
"new_class": 9,
- "{": 25,
- "}": 25,
"attr_meta": 5,
- "None": 86,
"abstract": 3,
"getattr": 30,
"False": 28,
"meta": 12,
- "else": 30,
"base_meta": 2,
- "is": 29,
"model_module": 1,
"sys.modules": 1,
"new_class.__module__": 1,
"kwargs": 9,
"model_module.__name__.split": 1,
- "-": 30,
"new_class.add_to_class": 7,
"**kwargs": 9,
"subclass_exception": 3,
"tuple": 3,
"x.DoesNotExist": 1,
- "x": 22,
"hasattr": 11,
"and": 35,
"x._meta.abstract": 2,
@@ -39917,7 +56125,6 @@
"attrs.items": 1,
"new_fields": 2,
"new_class._meta.local_fields": 3,
- "+": 37,
"new_class._meta.local_many_to_many": 2,
"new_class._meta.virtual_fields": 1,
"field_names": 5,
@@ -39928,15 +56135,12 @@
"parent": 5,
"parent._meta.abstract": 1,
"parent._meta.fields": 1,
- "raise": 22,
"TypeError": 4,
- "%": 32,
"continue": 10,
"new_class._meta.setup_proxy": 1,
"new_class._meta.concrete_model": 2,
"base._meta.concrete_model": 2,
"o2o_map": 3,
- "dict": 3,
"f.rel.to": 1,
"original_base": 1,
"parent_fields": 3,
@@ -39950,7 +56154,6 @@
"attr_name": 3,
"base._meta.module_name": 1,
"auto_created": 1,
- "True": 20,
"parent_link": 1,
"new_class._meta.parents": 1,
"copy.deepcopy": 2,
@@ -39975,7 +56178,6 @@
"add_to_class": 1,
"value": 9,
"value.contribute_to_class": 1,
- "setattr": 14,
"_prepare": 1,
"opts": 5,
"cls._meta": 3,
@@ -39994,7 +56196,6 @@
"opts.order_with_respect_to.rel.to": 1,
"cls.__doc__": 3,
"cls.__name__": 1,
- ".join": 3,
"f.attname": 5,
"opts.fields": 1,
"cls.get_absolute_url": 3,
@@ -40003,8 +56204,6 @@
"sender": 5,
"ModelState": 2,
"object": 6,
- "__init__": 5,
- "self": 100,
"db": 2,
"self.db": 1,
"self.adding": 1,
@@ -40017,7 +56216,6 @@
"args": 8,
"self._state": 1,
"args_len": 2,
- "len": 9,
"self._meta.fields": 5,
"IndexError": 2,
"fields_iter": 4,
@@ -40038,7 +56236,6 @@
"property": 2,
"AttributeError": 1,
"pass": 4,
- ".__init__": 1,
"signals.post_init.send": 1,
"instance": 5,
"__repr__": 2,
@@ -40077,12 +56274,10 @@
"serializable_value": 1,
"field_name": 8,
"self._meta.get_field_by_name": 1,
- "save": 1,
"force_insert": 7,
"force_update": 10,
"using": 30,
"update_fields": 23,
- "ValueError": 5,
"frozenset": 2,
"field.primary_key": 1,
"non_model_fields": 2,
@@ -40111,13 +56306,11 @@
"manager.using": 3,
".filter": 7,
".exists": 1,
- "values": 13,
"f.pre_save": 1,
"rows": 3,
"._update": 1,
"meta.order_with_respect_to": 2,
"order_value": 2,
- "*": 33,
".count": 1,
"self._order": 1,
"fields": 12,
@@ -40177,8 +56370,6 @@
"self._perform_unique_checks": 1,
"date_errors": 1,
"self._perform_date_checks": 1,
- "k": 4,
- "v": 11,
"date_errors.items": 1,
"errors.setdefault": 3,
".extend": 2,
@@ -40216,7 +56407,6 @@
"model_class._meta": 2,
"qs.exclude": 2,
"qs.exists": 2,
- "key": 5,
".append": 2,
"self.unique_error_message": 1,
"_perform_date_checks": 1,
@@ -40238,7 +56428,6 @@
"field.error_messages": 1,
"field_labels": 4,
"map": 1,
- "lambda": 1,
"full_clean": 1,
"self.clean_fields": 1,
"e": 13,
@@ -40260,15 +56449,11 @@
"ordered_obj._meta.order_with_respect_to.rel.field_name": 2,
"order_name": 4,
"ordered_obj._meta.order_with_respect_to.name": 2,
- "i": 7,
- "j": 2,
- "enumerate": 1,
"ordered_obj.objects.filter": 2,
".update": 1,
"_order": 1,
"pk_name": 3,
"ordered_obj._meta.pk.name": 1,
- "r": 3,
".values": 1,
"##############################################": 2,
"func": 2,
@@ -40297,8 +56482,6 @@
"decorate": 2,
"based": 1,
"views": 1,
- "the": 5,
- "of": 3,
"as_view": 1,
".": 1,
"However": 1,
@@ -40334,6 +56517,22 @@
"meth": 5,
"request.method.lower": 1,
"request.method": 2,
+ "P3D": 1,
+ "lights": 1,
+ "camera": 1,
+ "mouseY": 1,
+ "eyeX": 1,
+ "eyeY": 1,
+ "eyeZ": 1,
+ "centerX": 1,
+ "centerY": 1,
+ "centerZ": 1,
+ "upX": 1,
+ "upY": 1,
+ "upZ": 1,
+ "box": 1,
+ "stroke": 1,
+ "line": 3,
"google.protobuf": 4,
"descriptor": 1,
"_descriptor": 1,
@@ -40349,7 +56548,6 @@
"_PERSON": 3,
"_descriptor.Descriptor": 1,
"full_name": 2,
- "filename": 1,
"file": 1,
"containing_type": 2,
"_descriptor.FieldDescriptor": 1,
@@ -40363,7 +56561,6 @@
"enum_type": 1,
"is_extension": 1,
"extension_scope": 1,
- "options": 3,
"extensions": 1,
"nested_types": 1,
"enum_types": 1,
@@ -40377,13 +56574,11 @@
"_reflection.GeneratedProtocolMessageType": 1,
"SHEBANG#!python": 4,
"print": 39,
- "os": 1,
"main": 4,
"usage": 3,
"string": 1,
"command": 4,
"sys.argv": 2,
- "<": 1,
"sys.exit": 1,
"printDelimiter": 4,
"get": 1,
@@ -40406,7 +56601,6 @@
"os.walk": 1,
".next": 1,
"os.path.isdir": 1,
- "__name__": 2,
"argparse": 1,
"matplotlib.pyplot": 1,
"pl": 1,
@@ -40419,7 +56613,6 @@
"S": 4,
"phif": 7,
"U": 10,
- "/": 23,
"_parse_args": 2,
"V": 12,
"np.genfromtxt": 8,
@@ -40516,7 +56709,6 @@
"phi": 5,
"c": 3,
"a*x": 1,
- "dx": 6,
"d**": 2,
"dy": 4,
"dx_err": 3,
@@ -40708,7 +56900,6 @@
"uri.partition": 1,
"self.arguments": 2,
"supports_http_1_1": 1,
- "@property": 1,
"cookies": 1,
"self._cookies": 3,
"Cookie.SimpleCookie": 1,
@@ -40720,10 +56911,8 @@
"get_ssl_certificate": 1,
"self.connection.stream.socket.getpeercert": 1,
"ssl.SSLError": 1,
- "n": 3,
"_valid_ip": 1,
"ip": 2,
- "res": 2,
"socket.getaddrinfo": 1,
"socket.AF_UNSPEC": 1,
"socket.SOCK_STREAM": 1,
@@ -40733,36 +56922,133 @@
"socket.EAI_NONAME": 1
},
"R": {
- "SHEBANG#!Rscript": 1,
+ "df.residual.mira": 1,
+ "<": 46,
+ "-": 53,
+ "function": 18,
+ "(": 219,
+ "object": 12,
+ "...": 4,
+ ")": 220,
+ "{": 58,
+ "fit": 2,
+ "analyses": 1,
+ "[": 23,
+ "]": 24,
+ "return": 8,
+ "df.residual": 2,
+ "}": 58,
+ "df.residual.lme": 1,
+ "fixDF": 1,
+ "df.residual.mer": 1,
+ "sum": 1,
+ "object@dims": 1,
+ "*": 2,
+ "c": 11,
+ "+": 4,
+ "df.residual.default": 1,
+ "q": 3,
+ "df": 3,
+ "if": 19,
+ "is.null": 8,
+ "mk": 2,
+ "try": 3,
+ "coef": 1,
+ "silent": 3,
+ "TRUE": 14,
+ "mn": 2,
+ "f": 9,
+ "fitted": 1,
+ "inherits": 6,
+ "|": 3,
+ "NULL": 2,
+ "n": 3,
+ "ifelse": 1,
+ "is.data.frame": 1,
+ "is.matrix": 1,
+ "nrow": 1,
+ "length": 3,
+ "k": 3,
+ "max": 1,
+ "SHEBANG#!Rscript": 2,
+ "#": 45,
+ "MedianNorm": 2,
+ "data": 13,
+ "geomeans": 3,
+ "<->": 1,
+ "exp": 1,
+ "rowMeans": 1,
+ "log": 5,
+ "apply": 2,
+ "2": 1,
+ "cnts": 2,
+ "median": 1,
+ "library": 1,
+ "print_usage": 2,
+ "file": 4,
+ "stderr": 1,
+ "cat": 1,
+ "spec": 2,
+ "matrix": 3,
+ "byrow": 3,
+ "ncol": 3,
+ "opt": 23,
+ "getopt": 1,
+ "help": 1,
+ "stdout": 1,
+ "status": 1,
+ "height": 7,
+ "out": 4,
+ "res": 6,
+ "width": 7,
+ "ylim": 7,
+ "read.table": 1,
+ "header": 1,
+ "sep": 4,
+ "quote": 1,
+ "nsamp": 8,
+ "dim": 1,
+ "outfile": 4,
+ "sprintf": 2,
+ "png": 2,
+ "h": 13,
+ "hist": 4,
+ "plot": 7,
+ "FALSE": 9,
+ "mids": 4,
+ "density": 4,
+ "type": 3,
+ "col": 4,
+ "rainbow": 4,
+ "main": 2,
+ "xlab": 2,
+ "ylab": 2,
+ "for": 4,
+ "i": 6,
+ "in": 8,
+ "lines": 6,
+ "devnum": 2,
+ "dev.off": 2,
+ "size.factors": 2,
+ "data.matrix": 1,
+ "data.norm": 3,
+ "t": 1,
+ "x": 3,
+ "/": 1,
"ParseDates": 2,
- "<": 12,
- "-": 12,
- "function": 3,
- "(": 29,
- "lines": 4,
- ")": 29,
- "{": 3,
"dates": 3,
- "matrix": 2,
"unlist": 2,
- "strsplit": 2,
- "ncol": 2,
- "byrow": 2,
- "TRUE": 3,
+ "strsplit": 3,
"days": 2,
- "[": 4,
- "]": 4,
"times": 2,
"hours": 2,
"all.days": 2,
- "c": 2,
"all.hours": 2,
"data.frame": 1,
"Day": 2,
"factor": 2,
"levels": 2,
"Hour": 2,
- "}": 3,
"Main": 2,
"system": 1,
"intern": 1,
@@ -40773,8 +57059,6 @@
"ggplot": 1,
"aes": 2,
"y": 1,
- "x": 1,
- "+": 2,
"geom_point": 1,
"size": 1,
"Freq": 1,
@@ -40782,11 +57066,214 @@
"range": 1,
"ggsave": 1,
"filename": 1,
- "plot": 1,
- "width": 1,
- "height": 1,
"hello": 2,
"print": 1,
+ "module": 25,
+ "code": 21,
+ "available": 1,
+ "via": 1,
+ "the": 16,
+ "environment": 4,
+ "like": 1,
+ "it": 3,
+ "returns.": 1,
+ "@param": 2,
+ "an": 1,
+ "identifier": 1,
+ "specifying": 1,
+ "full": 1,
+ "path": 9,
+ "search": 5,
+ "see": 1,
+ "Details": 1,
+ "even": 1,
+ "attach": 11,
+ "is": 7,
+ "optionally": 1,
+ "attached": 2,
+ "to": 9,
+ "of": 2,
+ "current": 2,
+ "scope": 1,
+ "defaults": 1,
+ ".": 7,
+ "However": 1,
+ "interactive": 2,
+ "invoked": 1,
+ "directly": 1,
+ "from": 5,
+ "terminal": 1,
+ "only": 1,
+ "i.e.": 1,
+ "not": 4,
+ "within": 1,
+ "modules": 4,
+ "import.attach": 1,
+ "can": 3,
+ "be": 8,
+ "set": 2,
+ "or": 1,
+ "depending": 1,
+ "on": 2,
+ "user": 1,
+ "s": 2,
+ "preference.": 1,
+ "attach_operators": 3,
+ "causes": 1,
+ "emph": 3,
+ "operators": 3,
+ "by": 2,
+ "default": 1,
+ "path.": 1,
+ "Not": 1,
+ "attaching": 1,
+ "them": 1,
+ "therefore": 1,
+ "drastically": 1,
+ "limits": 1,
+ "a": 6,
+ "usefulness.": 1,
+ "Modules": 1,
+ "are": 4,
+ "searched": 1,
+ "options": 1,
+ "priority.": 1,
+ "The": 5,
+ "directory": 1,
+ "always": 1,
+ "considered": 1,
+ "first.": 1,
+ "That": 1,
+ "local": 3,
+ "./a.r": 1,
+ "will": 2,
+ "loaded.": 1,
+ "Module": 1,
+ "names": 2,
+ "fully": 1,
+ "qualified": 1,
+ "refer": 1,
+ "nested": 1,
+ "paths.": 1,
+ "See": 1,
+ "import": 5,
+ "executed": 1,
+ "global": 1,
+ "effect": 1,
+ "same.": 1,
+ "When": 1,
+ "used": 2,
+ "globally": 1,
+ "inside": 1,
+ "newly": 2,
+ "outside": 1,
+ "nor": 1,
+ "other": 2,
+ "which": 3,
+ "might": 1,
+ "loaded": 4,
+ "@examples": 1,
+ "@seealso": 3,
+ "reload": 3,
+ "@export": 2,
+ "substitute": 2,
+ "stopifnot": 3,
+ "missing": 1,
+ "&&": 2,
+ "module_name": 7,
+ "getOption": 1,
+ "else": 4,
+ "class": 4,
+ "module_path": 15,
+ "find_module": 1,
+ "stop": 1,
+ "attr": 2,
+ "message": 1,
+ "containing_modules": 3,
+ "module_init_files": 1,
+ "mapply": 1,
+ "do_import": 4,
+ "mod_ns": 5,
+ "as.character": 3,
+ "module_parent": 8,
+ "parent.frame": 2,
+ "mod_env": 7,
+ "exhibit_namespace": 3,
+ "identical": 2,
+ ".GlobalEnv": 2,
+ "name": 10,
+ "environmentName": 2,
+ "parent.env": 4,
+ "export_operators": 2,
+ "invisible": 1,
+ "is_module_loaded": 1,
+ "get_loaded_module": 1,
+ "namespace": 13,
+ "structure": 3,
+ "new.env": 1,
+ "parent": 9,
+ ".BaseNamespaceEnv": 1,
+ "paste": 3,
+ "source": 3,
+ "chdir": 1,
+ "envir": 5,
+ "cache_module": 1,
+ "exported_functions": 2,
+ "lsf.str": 2,
+ "list2env": 2,
+ "sapply": 2,
+ "get": 2,
+ "ops": 2,
+ "is_predefined": 2,
+ "%": 2,
+ "is_op": 2,
+ "prefix": 3,
+ "||": 1,
+ "grepl": 1,
+ "Filter": 1,
+ "op_env": 4,
+ "cache.": 1,
+ "@note": 1,
+ "Any": 1,
+ "references": 1,
+ "remain": 1,
+ "unchanged": 1,
+ "and": 5,
+ "files": 1,
+ "would": 1,
+ "have": 1,
+ "happened": 1,
+ "without": 1,
+ "unload": 2,
+ "should": 2,
+ "production": 1,
+ "code.": 1,
+ "does": 1,
+ "currently": 1,
+ "detach": 1,
+ "environments.": 1,
+ "Reload": 1,
+ "given": 1,
+ "Remove": 1,
+ "cache": 1,
+ "forcing": 1,
+ "reload.": 1,
+ "reloaded": 1,
+ "reference": 1,
+ "unloaded": 1,
+ "still": 1,
+ "work.": 1,
+ "Reloading": 1,
+ "primarily": 1,
+ "useful": 1,
+ "testing": 1,
+ "during": 1,
+ "module_ref": 3,
+ "rm": 1,
+ "list": 1,
+ ".loaded_modules": 1,
+ "whatnot.": 1,
+ "assign": 1,
"##polyg": 1,
"vector": 2,
"##numpoints": 1,
@@ -40801,7 +57288,57 @@
"spsample": 1,
"polyg": 1,
"numpoints": 1,
- "type": 1
+ "docType": 1,
+ "package": 5,
+ "scholar": 6,
+ "alias": 2,
+ "title": 1,
+ "reads": 1,
+ "url": 2,
+ "http": 2,
+ "//scholar.google.com": 1,
+ "Dates": 1,
+ "citation": 2,
+ "counts": 1,
+ "estimated": 1,
+ "determined": 1,
+ "automatically": 1,
+ "computer": 1,
+ "program.": 1,
+ "Use": 1,
+ "at": 2,
+ "your": 1,
+ "own": 1,
+ "risk.": 1,
+ "description": 1,
+ "provides": 1,
+ "functions": 3,
+ "extract": 1,
+ "Google": 2,
+ "Scholar.": 1,
+ "There": 1,
+ "also": 1,
+ "convenience": 1,
+ "comparing": 1,
+ "multiple": 1,
+ "scholars": 1,
+ "predicting": 1,
+ "index": 1,
+ "scores": 1,
+ "based": 1,
+ "past": 1,
+ "publication": 1,
+ "records.": 1,
+ "note": 1,
+ "A": 1,
+ "complementary": 1,
+ "Scholar": 1,
+ "found": 1,
+ "//biostat.jhsph.edu/": 1,
+ "jleek/code/googleCite.r": 1,
+ "was": 1,
+ "developed": 1,
+ "independently.": 1
},
"Racket": {
";": 3,
@@ -41220,12 +57757,398 @@
"purpose.": 1
},
"Rebol": {
- "REBOL": 1,
- "[": 3,
- "]": 3,
- "hello": 2,
+ "REBOL": 5,
+ "[": 54,
+ "System": 1,
+ "Title": 2,
+ "Rights": 1,
+ "{": 8,
+ "Copyright": 1,
+ "Technologies": 2,
+ "is": 4,
+ "a": 2,
+ "trademark": 1,
+ "of": 1,
+ "}": 8,
+ "License": 2,
+ "Licensed": 1,
+ "under": 1,
+ "the": 3,
+ "Apache": 1,
+ "Version": 1,
+ "See": 1,
+ "http": 1,
+ "//www.apache.org/licenses/LICENSE": 1,
+ "-": 26,
+ "Purpose": 1,
+ "These": 1,
+ "are": 2,
+ "used": 3,
+ "to": 2,
+ "define": 1,
+ "natives": 1,
+ "and": 2,
+ "actions.": 1,
+ "Bind": 1,
+ "attributes": 1,
+ "for": 4,
+ "this": 1,
+ "block": 5,
+ "BIND_SET": 1,
+ "SHALLOW": 1,
+ "]": 61,
+ ";": 19,
+ "Special": 1,
+ "as": 1,
+ "spec": 3,
+ "datatype": 2,
+ "test": 1,
+ "functions": 1,
+ "(": 30,
+ "e.g.": 1,
+ "time": 2,
+ ")": 33,
+ "value": 1,
+ "any": 1,
+ "type": 1,
+ "The": 1,
+ "native": 5,
+ "function": 3,
+ "must": 1,
+ "be": 1,
+ "defined": 1,
+ "first.": 1,
+ "This": 1,
+ "special": 1,
+ "boot": 1,
+ "created": 1,
+ "manually": 1,
+ "within": 1,
+ "C": 1,
+ "code.": 1,
+ "Creates": 2,
+ "internal": 2,
+ "usage": 2,
+ "only": 2,
+ ".": 4,
+ "no": 3,
+ "check": 2,
+ "required": 2,
+ "we": 2,
+ "know": 2,
+ "it": 2,
+ "correct": 2,
+ "action": 2,
+ "Rebol": 4,
+ "re": 20,
+ "func": 5,
+ "s": 5,
+ "/i": 1,
+ "rejoin": 1,
+ "compose": 1,
+ "either": 1,
+ "i": 1,
+ "little": 1,
+ "helper": 1,
+ "standard": 1,
+ "grammar": 1,
+ "regex": 2,
+ "date": 6,
+ "naive": 1,
+ "string": 1,
+ "|": 22,
+ "S": 3,
+ "*": 7,
+ "<(?:[^^\\>": 1,
+ "d": 3,
+ "+": 6,
+ "/": 5,
+ "@": 1,
+ "%": 2,
+ "A": 3,
+ "F": 1,
+ "url": 1,
+ "PR_LITERAL": 10,
+ "string_url": 1,
+ "email": 1,
+ "string_email": 1,
+ "binary": 1,
+ "binary_base_two": 1,
+ "binary_base_sixty_four": 1,
+ "binary_base_sixteen": 1,
+ "re/i": 2,
+ "issue": 1,
+ "string_issue": 1,
+ "values": 1,
+ "value_date": 1,
+ "value_time": 1,
+ "tuple": 1,
+ "value_tuple": 1,
+ "pair": 1,
+ "value_pair": 1,
+ "number": 2,
+ "PR": 1,
+ "Za": 2,
+ "z0": 2,
+ "<[=>": 1,
+ "rebol": 1,
+ "red": 1,
+ "/system": 1,
+ "world": 1,
+ "topaz": 1,
+ "true": 1,
+ "false": 1,
+ "yes": 1,
+ "on": 1,
+ "off": 1,
+ "none": 1,
+ "#": 1,
+ "hello": 8,
+ "print": 4,
+ "author": 1
+ },
+ "Red": {
+ "Red": 3,
+ "[": 111,
+ "Title": 2,
+ "Author": 1,
+ "]": 114,
+ "File": 1,
+ "%": 2,
+ "console.red": 1,
+ "Tabs": 1,
+ "Rights": 1,
+ "License": 2,
+ "{": 11,
+ "Distributed": 1,
+ "under": 1,
+ "the": 3,
+ "Boost": 1,
+ "Software": 1,
+ "Version": 1,
+ "See": 1,
+ "https": 1,
+ "//github.com/dockimbel/Red/blob/master/BSL": 1,
+ "-": 74,
+ "License.txt": 1,
+ "}": 11,
+ "Purpose": 2,
+ "Language": 2,
+ "http": 2,
+ "//www.red": 2,
+ "lang.org/": 2,
+ "#system": 1,
+ "global": 1,
+ "#either": 3,
+ "OS": 3,
+ "MacOSX": 2,
+ "History": 1,
+ "library": 1,
+ "cdecl": 3,
+ "add": 2,
+ "history": 2,
+ ";": 31,
+ "Add": 1,
+ "line": 9,
+ "to": 2,
+ "history.": 1,
+ "c": 7,
+ "string": 10,
+ "rl": 4,
+ "insert": 3,
+ "wrapper": 2,
"func": 1,
- "print": 1
+ "count": 3,
+ "integer": 16,
+ "key": 3,
+ "return": 10,
+ "Windows": 2,
+ "system/platform": 1,
+ "ret": 5,
+ "AttachConsole": 1,
+ "if": 2,
+ "zero": 3,
+ "print": 5,
+ "halt": 2,
+ "SetConsoleTitle": 1,
+ "as": 4,
+ "string/rs": 1,
+ "head": 1,
+ "str": 4,
+ "bind": 1,
+ "tab": 3,
+ "input": 2,
+ "routine": 1,
+ "prompt": 3,
+ "/local": 1,
+ "len": 1,
+ "buffer": 4,
+ "string/load": 1,
+ "+": 1,
+ "length": 1,
+ "free": 1,
+ "byte": 3,
+ "ptr": 14,
+ "SET_RETURN": 1,
+ "(": 6,
+ ")": 4,
+ "delimiters": 1,
+ "function": 6,
+ "block": 3,
+ "list": 1,
+ "copy": 2,
+ "none": 1,
+ "foreach": 1,
+ "case": 2,
+ "escaped": 2,
+ "no": 2,
+ "in": 2,
+ "comment": 2,
+ "switch": 3,
+ "#": 8,
+ "mono": 3,
+ "mode": 3,
+ "cnt/1": 1,
+ "red": 1,
+ "eval": 1,
+ "code": 3,
+ "load/all": 1,
+ "unless": 1,
+ "tail": 1,
+ "set/any": 1,
+ "not": 1,
+ "script/2": 1,
+ "do": 2,
+ "skip": 1,
+ "script": 1,
+ "quit": 2,
+ "init": 1,
+ "console": 2,
+ "Console": 1,
+ "alpha": 1,
+ "version": 3,
+ "only": 1,
+ "ASCII": 1,
+ "supported": 1,
+ "Red/System": 1,
+ "#include": 1,
+ "../common/FPU": 1,
+ "configuration.reds": 1,
+ "C": 1,
+ "types": 1,
+ "#define": 2,
+ "time": 2,
+ "long": 2,
+ "clock": 1,
+ "date": 1,
+ "alias": 2,
+ "struct": 5,
+ "second": 1,
+ "minute": 1,
+ "hour": 1,
+ "day": 1,
+ "month": 1,
+ "year": 1,
+ "Since": 1,
+ "weekday": 1,
+ "since": 1,
+ "Sunday": 1,
+ "yearday": 1,
+ "daylight": 1,
+ "saving": 1,
+ "Negative": 1,
+ "unknown": 1,
+ "#import": 1,
+ "LIBC": 1,
+ "file": 1,
+ "Error": 1,
+ "handling": 1,
+ "form": 1,
+ "error": 5,
+ "Return": 1,
+ "description.": 1,
+ "Print": 1,
+ "standard": 1,
+ "output.": 1,
+ "Memory": 1,
+ "management": 1,
+ "make": 1,
+ "Allocate": 1,
+ "filled": 1,
+ "memory.": 1,
+ "chunks": 1,
+ "size": 5,
+ "binary": 4,
+ "resize": 1,
+ "Resize": 1,
+ "memory": 2,
+ "allocation.": 1,
+ "JVM": 6,
+ "reserved0": 1,
+ "int": 6,
+ "reserved1": 1,
+ "reserved2": 1,
+ "DestroyJavaVM": 1,
+ "JNICALL": 5,
+ "vm": 5,
+ "jint": 5,
+ "AttachCurrentThread": 1,
+ "penv": 3,
+ "p": 3,
+ "args": 2,
+ "DetachCurrentThread": 1,
+ "GetEnv": 1,
+ "AttachCurrentThreadAsDaemon": 1,
+ "just": 2,
+ "some": 2,
+ "datatypes": 1,
+ "for": 1,
+ "testing": 1,
+ "#some": 1,
+ "hash": 1,
+ "FF0000": 3,
+ "FF000000": 2,
+ "with": 4,
+ "instead": 1,
+ "of": 1,
+ "space": 2,
+ "/wAAAA": 1,
+ "/wAAA": 2,
+ "A": 2,
+ "inside": 2,
+ "char": 1,
+ "bla": 2,
+ "ff": 1,
+ "foo": 3,
+ "numbers": 1,
+ "which": 1,
+ "interpreter": 1,
+ "path": 1,
+ "h": 1,
+ "#if": 1,
+ "type": 1,
+ "exe": 1,
+ "push": 3,
+ "system/stack/frame": 2,
+ "save": 1,
+ "previous": 1,
+ "frame": 2,
+ "pointer": 2,
+ "system/stack/top": 1,
+ "@@": 1,
+ "reposition": 1,
+ "after": 1,
+ "catch": 1,
+ "flag": 1,
+ "CATCH_ALL": 1,
+ "exceptions": 1,
+ "root": 1,
+ "barrier": 1,
+ "keep": 1,
+ "stack": 1,
+ "aligned": 1,
+ "on": 1,
+ "bit": 1
},
"RMarkdown": {
"Some": 1,
@@ -42841,6 +59764,53 @@
"running_threads2": 2,
"port2.recv": 1
},
+ "SAS": {
+ "libname": 1,
+ "source": 1,
+ "data": 6,
+ "work.working_copy": 5,
+ ";": 22,
+ "set": 3,
+ "source.original_file.sas7bdat": 1,
+ "run": 6,
+ "if": 2,
+ "Purge": 1,
+ "then": 2,
+ "delete": 1,
+ "ImportantVariable": 1,
+ ".": 1,
+ "MissingFlag": 1,
+ "proc": 2,
+ "surveyselect": 1,
+ "work.data": 1,
+ "out": 2,
+ "work.boot": 2,
+ "method": 1,
+ "urs": 1,
+ "reps": 1,
+ "seed": 2,
+ "sampsize": 1,
+ "outhits": 1,
+ "samplingunit": 1,
+ "Site": 1,
+ "PROC": 1,
+ "MI": 1,
+ "work.bootmi": 2,
+ "nimpute": 1,
+ "round": 1,
+ "By": 2,
+ "Replicate": 2,
+ "VAR": 1,
+ "Variable1": 2,
+ "Variable2": 2,
+ "logistic": 1,
+ "descending": 1,
+ "_Imputation_": 1,
+ "model": 1,
+ "Outcome": 1,
+ "/": 1,
+ "risklimits": 1
+ },
"Sass": {
"blue": 7,
"#3bbfce": 2,
@@ -44077,6 +61047,585 @@
"foodforthought.jpg": 1,
"name##*fo": 1
},
+ "ShellSession": {
+ "echo": 2,
+ "FOOBAR": 2,
+ "Hello": 2,
+ "World": 2,
+ "gem": 4,
+ "install": 4,
+ "nokogiri": 6,
+ "...": 4,
+ "Building": 2,
+ "native": 2,
+ "extensions.": 2,
+ "This": 4,
+ "could": 2,
+ "take": 2,
+ "a": 4,
+ "while...": 2,
+ "checking": 1,
+ "for": 4,
+ "libxml/parser.h...": 1,
+ "***": 2,
+ "extconf.rb": 1,
+ "failed": 1,
+ "Could": 2,
+ "not": 2,
+ "create": 1,
+ "Makefile": 1,
+ "due": 1,
+ "to": 3,
+ "some": 1,
+ "reason": 2,
+ "probably": 1,
+ "lack": 1,
+ "of": 2,
+ "necessary": 1,
+ "libraries": 1,
+ "and/or": 1,
+ "headers.": 1,
+ "Check": 1,
+ "the": 2,
+ "mkmf.log": 1,
+ "file": 1,
+ "more": 1,
+ "details.": 1,
+ "You": 1,
+ "may": 1,
+ "need": 1,
+ "configuration": 1,
+ "options.": 1,
+ "brew": 2,
+ "tap": 2,
+ "homebrew/dupes": 1,
+ "Cloning": 1,
+ "into": 1,
+ "remote": 3,
+ "Counting": 1,
+ "objects": 3,
+ "done.": 4,
+ "Compressing": 1,
+ "%": 5,
+ "(": 6,
+ "/591": 1,
+ ")": 6,
+ "Total": 1,
+ "delta": 2,
+ "reused": 1,
+ "Receiving": 1,
+ "/1034": 1,
+ "KiB": 1,
+ "|": 1,
+ "bytes/s": 1,
+ "Resolving": 1,
+ "deltas": 1,
+ "/560": 1,
+ "Checking": 1,
+ "connectivity...": 1,
+ "done": 1,
+ "Warning": 1,
+ "homebrew/dupes/lsof": 1,
+ "over": 1,
+ "mxcl/master/lsof": 1,
+ "Tapped": 1,
+ "formula": 4,
+ "apple": 1,
+ "-": 12,
+ "gcc42": 1,
+ "Downloading": 1,
+ "http": 2,
+ "//r.research.att.com/tools/gcc": 1,
+ "darwin11.pkg": 1,
+ "########################################################################": 1,
+ "Caveats": 1,
+ "NOTE": 1,
+ "provides": 1,
+ "components": 1,
+ "that": 1,
+ "were": 1,
+ "removed": 1,
+ "from": 3,
+ "XCode": 2,
+ "in": 2,
+ "release.": 1,
+ "There": 1,
+ "is": 2,
+ "no": 1,
+ "this": 1,
+ "if": 1,
+ "you": 1,
+ "are": 1,
+ "using": 1,
+ "version": 1,
+ "prior": 1,
+ "contains": 1,
+ "compilers": 2,
+ "built": 2,
+ "Apple": 1,
+ "s": 1,
+ "GCC": 1,
+ "sources": 1,
+ "build": 1,
+ "available": 1,
+ "//opensource.apple.com/tarballs/gcc": 1,
+ "All": 1,
+ "have": 1,
+ "suffix.": 1,
+ "A": 1,
+ "GFortran": 1,
+ "compiler": 1,
+ "also": 1,
+ "included.": 1,
+ "Summary": 1,
+ "/usr/local/Cellar/apple": 1,
+ "gcc42/4.2.1": 1,
+ "files": 1,
+ "M": 1,
+ "seconds": 1,
+ "v": 1,
+ "Fetching": 1,
+ "Successfully": 1,
+ "installed": 2,
+ "Installing": 2,
+ "ri": 1,
+ "documentation": 2,
+ "RDoc": 1
+ },
+ "Shen": {
+ "*": 47,
+ "graph.shen": 1,
+ "-": 747,
+ "a": 30,
+ "library": 3,
+ "for": 12,
+ "graph": 52,
+ "definition": 1,
+ "and": 16,
+ "manipulation": 1,
+ "Copyright": 2,
+ "(": 267,
+ "C": 6,
+ ")": 250,
+ "Eric": 2,
+ "Schulte": 2,
+ "***": 5,
+ "License": 2,
+ "Redistribution": 2,
+ "use": 2,
+ "in": 13,
+ "source": 4,
+ "binary": 4,
+ "forms": 2,
+ "with": 8,
+ "or": 2,
+ "without": 2,
+ "modification": 2,
+ "are": 7,
+ "permitted": 2,
+ "provided": 4,
+ "that": 3,
+ "the": 29,
+ "following": 6,
+ "conditions": 6,
+ "met": 2,
+ "Redistributions": 4,
+ "of": 20,
+ "code": 2,
+ "must": 4,
+ "retain": 2,
+ "above": 4,
+ "copyright": 4,
+ "notice": 4,
+ "this": 4,
+ "list": 32,
+ "disclaimer.": 2,
+ "form": 2,
+ "reproduce": 2,
+ "disclaimer": 2,
+ "documentation": 2,
+ "and/or": 2,
+ "other": 2,
+ "materials": 2,
+ "distribution.": 2,
+ "THIS": 4,
+ "SOFTWARE": 4,
+ "IS": 2,
+ "PROVIDED": 2,
+ "BY": 2,
+ "THE": 10,
+ "COPYRIGHT": 4,
+ "HOLDERS": 2,
+ "AND": 8,
+ "CONTRIBUTORS": 4,
+ "ANY": 8,
+ "EXPRESS": 2,
+ "OR": 16,
+ "IMPLIED": 4,
+ "WARRANTIES": 4,
+ "INCLUDING": 6,
+ "BUT": 4,
+ "NOT": 4,
+ "LIMITED": 4,
+ "TO": 4,
+ "OF": 16,
+ "MERCHANTABILITY": 2,
+ "FITNESS": 2,
+ "FOR": 4,
+ "A": 32,
+ "PARTICULAR": 2,
+ "PURPOSE": 2,
+ "ARE": 2,
+ "DISCLAIMED.": 2,
+ "IN": 6,
+ "NO": 2,
+ "EVENT": 2,
+ "SHALL": 2,
+ "HOLDER": 2,
+ "BE": 2,
+ "LIABLE": 2,
+ "DIRECT": 2,
+ "INDIRECT": 2,
+ "INCIDENTAL": 2,
+ "SPECIAL": 2,
+ "EXEMPLARY": 2,
+ "CONSEQUENTIAL": 2,
+ "DAMAGES": 2,
+ "PROCUREMENT": 2,
+ "SUBSTITUTE": 2,
+ "GOODS": 2,
+ "SERVICES": 2,
+ ";": 12,
+ "LOSS": 2,
+ "USE": 4,
+ "DATA": 2,
+ "PROFITS": 2,
+ "BUSINESS": 2,
+ "INTERRUPTION": 2,
+ "HOWEVER": 2,
+ "CAUSED": 2,
+ "ON": 2,
+ "THEORY": 2,
+ "LIABILITY": 4,
+ "WHETHER": 2,
+ "CONTRACT": 2,
+ "STRICT": 2,
+ "TORT": 2,
+ "NEGLIGENCE": 2,
+ "OTHERWISE": 2,
+ "ARISING": 2,
+ "WAY": 2,
+ "OUT": 2,
+ "EVEN": 2,
+ "IF": 2,
+ "ADVISED": 2,
+ "POSSIBILITY": 2,
+ "SUCH": 2,
+ "DAMAGE.": 2,
+ "Commentary": 2,
+ "Graphs": 1,
+ "represented": 1,
+ "as": 2,
+ "two": 1,
+ "dictionaries": 1,
+ "one": 2,
+ "vertices": 17,
+ "edges.": 1,
+ "It": 1,
+ "is": 5,
+ "important": 1,
+ "to": 16,
+ "note": 1,
+ "dictionary": 3,
+ "implementation": 1,
+ "used": 2,
+ "able": 1,
+ "accept": 1,
+ "arbitrary": 1,
+ "data": 17,
+ "structures": 1,
+ "keys.": 1,
+ "This": 1,
+ "structure": 2,
+ "technically": 1,
+ "encodes": 1,
+ "hypergraphs": 1,
+ "generalization": 1,
+ "graphs": 1,
+ "which": 1,
+ "each": 1,
+ "edge": 32,
+ "may": 1,
+ "contain": 2,
+ "any": 1,
+ "number": 12,
+ ".": 1,
+ "Examples": 1,
+ "regular": 1,
+ "G": 25,
+ "hypergraph": 1,
+ "H": 3,
+ "corresponding": 1,
+ "given": 4,
+ "below.": 1,
+ "": 3,
+ "Vertices": 11,
+ "Edges": 9,
+ "+": 33,
+ "Graph": 65,
+ "hash": 8,
+ "|": 103,
+ "key": 9,
+ "value": 17,
+ "b": 13,
+ "c": 11,
+ "g": 19,
+ "[": 93,
+ "]": 91,
+ "d": 12,
+ "e": 14,
+ "f": 10,
+ "Hypergraph": 1,
+ "h": 3,
+ "i": 3,
+ "j": 2,
+ "associated": 1,
+ "edge/vertex": 1,
+ "@p": 17,
+ "V": 48,
+ "#": 4,
+ "E": 20,
+ "edges": 17,
+ "M": 4,
+ "vertex": 29,
+ "associations": 1,
+ "size": 2,
+ "all": 3,
+ "stored": 1,
+ "dict": 39,
+ "sizeof": 4,
+ "int": 1,
+ "indices": 1,
+ "into": 1,
+ "&": 1,
+ "Edge": 11,
+ "dicts": 3,
+ "entry": 2,
+ "storage": 2,
+ "Vertex": 3,
+ "Code": 1,
+ "require": 2,
+ "sequence": 2,
+ "datatype": 1,
+ "dictoinary": 1,
+ "vector": 4,
+ "symbol": 1,
+ "package": 2,
+ "add": 25,
+ "has": 5,
+ "neighbors": 8,
+ "connected": 21,
+ "components": 8,
+ "partition": 7,
+ "bipartite": 3,
+ "included": 2,
+ "from": 3,
+ "take": 2,
+ "drop": 2,
+ "while": 2,
+ "range": 1,
+ "flatten": 1,
+ "filter": 2,
+ "complement": 1,
+ "seperate": 1,
+ "zip": 1,
+ "indexed": 1,
+ "reduce": 3,
+ "mapcon": 3,
+ "unique": 3,
+ "frequencies": 1,
+ "shuffle": 1,
+ "pick": 1,
+ "remove": 2,
+ "first": 2,
+ "interpose": 1,
+ "subset": 3,
+ "cartesian": 1,
+ "product": 1,
+ "<-dict>": 5,
+ "contents": 1,
+ "keys": 3,
+ "vals": 1,
+ "make": 10,
+ "define": 34,
+ "X": 4,
+ "<-address>": 5,
+ "0": 1,
+ "create": 1,
+ "specified": 1,
+ "sizes": 2,
+ "}": 22,
+ "Vertsize": 2,
+ "Edgesize": 2,
+ "let": 9,
+ "absvector": 1,
+ "do": 8,
+ "address": 5,
+ "defmacro": 3,
+ "macro": 3,
+ "return": 4,
+ "taking": 1,
+ "optional": 1,
+ "N": 7,
+ "vert": 12,
+ "1": 1,
+ "2": 3,
+ "{": 15,
+ "get": 3,
+ "Value": 3,
+ "if": 8,
+ "tuple": 3,
+ "fst": 3,
+ "error": 7,
+ "string": 3,
+ "resolve": 6,
+ "Vector": 2,
+ "Index": 2,
+ "Place": 6,
+ "nth": 1,
+ "<-vector>": 2,
+ "Vert": 5,
+ "Val": 5,
+ "trap": 4,
+ "snd": 2,
+ "map": 5,
+ "lambda": 1,
+ "w": 4,
+ "B": 2,
+ "Data": 2,
+ "w/o": 5,
+ "D": 4,
+ "update": 5,
+ "an": 3,
+ "s": 1,
+ "Vs": 4,
+ "Store": 6,
+ "<": 4,
+ "limit": 2,
+ "VertLst": 2,
+ "/.": 4,
+ "Contents": 5,
+ "adjoin": 2,
+ "length": 5,
+ "EdgeID": 3,
+ "EdgeLst": 2,
+ "p": 1,
+ "boolean": 4,
+ "Return": 1,
+ "Already": 5,
+ "New": 5,
+ "Reachable": 2,
+ "difference": 3,
+ "append": 1,
+ "including": 1,
+ "itself": 1,
+ "fully": 1,
+ "Acc": 2,
+ "true": 1,
+ "_": 1,
+ "VS": 4,
+ "Component": 6,
+ "ES": 3,
+ "Con": 8,
+ "verts": 4,
+ "cons": 1,
+ "place": 3,
+ "partitions": 1,
+ "element": 2,
+ "simple": 3,
+ "CS": 3,
+ "Neighbors": 3,
+ "empty": 1,
+ "intersection": 1,
+ "check": 1,
+ "tests": 1,
+ "set": 1,
+ "chris": 6,
+ "patton": 2,
+ "eric": 1,
+ "nobody": 2,
+ "fail": 1,
+ "when": 1,
+ "wrapper": 1,
+ "function": 1,
+ "html.shen": 1,
+ "html": 2,
+ "generation": 1,
+ "functions": 1,
+ "shen": 1,
+ "The": 1,
+ "standard": 1,
+ "lisp": 1,
+ "conversion": 1,
+ "tool": 1,
+ "suite.": 1,
+ "Follows": 1,
+ "some": 1,
+ "convertions": 1,
+ "Clojure": 1,
+ "tasks": 1,
+ "stuff": 1,
+ "todo1": 1,
+ "today": 1,
+ "attributes": 1,
+ "AS": 1,
+ "load": 1,
+ "JSON": 1,
+ "Lexer": 1,
+ "Read": 1,
+ "stream": 1,
+ "characters": 4,
+ "Whitespace": 4,
+ "not": 1,
+ "strings": 2,
+ "should": 2,
+ "be": 2,
+ "discarded.": 1,
+ "preserved": 1,
+ "Strings": 1,
+ "can": 1,
+ "escaped": 1,
+ "double": 1,
+ "quotes.": 1,
+ "e.g.": 2,
+ "whitespacep": 2,
+ "ASCII": 2,
+ "Space.": 1,
+ "All": 1,
+ "others": 1,
+ "whitespace": 7,
+ "table.": 1,
+ "Char": 4,
+ "member": 1,
+ "replace": 3,
+ "@s": 4,
+ "Suffix": 4,
+ "where": 2,
+ "Prefix": 2,
+ "fetch": 1,
+ "until": 1,
+ "unescaped": 1,
+ "doublequote": 1,
+ "c#34": 5,
+ "WhitespaceChar": 2,
+ "Chars": 4,
+ "strip": 2,
+ "chars": 2,
+ "tokenise": 1,
+ "JSONString": 2,
+ "CharList": 2,
+ "explode": 1
+ },
"Slash": {
"<%>": 1,
"class": 11,
@@ -44151,6 +61700,695 @@
"ast.eval": 1,
"Env.new": 1
},
+ "Slim": {
+ "doctype": 1,
+ "html": 2,
+ "head": 1,
+ "title": 1,
+ "Slim": 2,
+ "Examples": 1,
+ "meta": 2,
+ "name": 2,
+ "content": 2,
+ "author": 2,
+ "javascript": 1,
+ "alert": 1,
+ "(": 1,
+ ")": 1,
+ "body": 1,
+ "h1": 1,
+ "Markup": 1,
+ "examples": 1,
+ "#content": 1,
+ "p": 2,
+ "This": 1,
+ "example": 1,
+ "shows": 1,
+ "you": 2,
+ "how": 1,
+ "a": 1,
+ "basic": 1,
+ "file": 1,
+ "looks": 1,
+ "like.": 1,
+ "yield": 1,
+ "-": 3,
+ "unless": 1,
+ "items.empty": 1,
+ "table": 1,
+ "for": 1,
+ "item": 1,
+ "in": 1,
+ "items": 2,
+ "do": 1,
+ "tr": 1,
+ "td.name": 1,
+ "item.name": 1,
+ "td.price": 1,
+ "item.price": 1,
+ "else": 1,
+ "|": 2,
+ "No": 1,
+ "found.": 1,
+ "Please": 1,
+ "add": 1,
+ "some": 1,
+ "inventory.": 1,
+ "Thank": 1,
+ "div": 1,
+ "id": 1,
+ "render": 1,
+ "Copyright": 1,
+ "#": 2,
+ "{": 2,
+ "year": 1,
+ "}": 2
+ },
+ "Smalltalk": {
+ "Object": 1,
+ "subclass": 2,
+ "#Philosophers": 1,
+ "instanceVariableNames": 1,
+ "classVariableNames": 1,
+ "poolDictionaries": 1,
+ "category": 1,
+ "Philosophers": 3,
+ "class": 1,
+ "methodsFor": 2,
+ "new": 4,
+ "self": 25,
+ "shouldNotImplement": 1,
+ "quantity": 2,
+ "super": 1,
+ "initialize": 3,
+ "dine": 4,
+ "seconds": 2,
+ "(": 19,
+ "Delay": 3,
+ "forSeconds": 1,
+ ")": 19,
+ "wait.": 5,
+ "philosophers": 2,
+ "do": 1,
+ "[": 18,
+ "each": 5,
+ "|": 18,
+ "terminate": 1,
+ "]": 18,
+ ".": 16,
+ "size": 4,
+ "leftFork": 6,
+ "n": 11,
+ "forks": 5,
+ "at": 3,
+ "rightFork": 6,
+ "ifTrue": 1,
+ "ifFalse": 1,
+ "+": 1,
+ "eating": 3,
+ "Semaphore": 2,
+ "new.": 2,
+ "-": 1,
+ "timesRepeat": 1,
+ "signal": 1,
+ "randy": 3,
+ "Random": 1,
+ "to": 2,
+ "collect": 2,
+ "forMutualExclusion": 1,
+ "philosopher": 2,
+ "philosopherCode": 3,
+ "status": 8,
+ "n.": 2,
+ "printString": 1,
+ "true": 2,
+ "whileTrue": 1,
+ "Transcript": 5,
+ "nextPutAll": 5,
+ ";": 8,
+ "nl.": 5,
+ "forMilliseconds": 2,
+ "next": 2,
+ "*": 2,
+ "critical": 1,
+ "signal.": 2,
+ "newProcess": 1,
+ "priority": 1,
+ "Processor": 1,
+ "userBackgroundPriority": 1,
+ "name": 1,
+ "resume": 1,
+ "yourself": 1,
+ "Koan": 1,
+ "TestBasic": 1,
+ "": 1,
+ "A": 1,
+ "collection": 1,
+ "of": 1,
+ "introductory": 1,
+ "tests": 2,
+ "testDeclarationAndAssignment": 1,
+ "declaration": 2,
+ "anotherDeclaration": 2,
+ "_": 1,
+ "expect": 10,
+ "fillMeIn": 10,
+ "toEqual": 10,
+ "declaration.": 1,
+ "anotherDeclaration.": 1,
+ "testEqualSignIsNotAnAssignmentOperator": 1,
+ "variableA": 6,
+ "variableB": 5,
+ "value": 2,
+ "variableB.": 2,
+ "testMultipleStatementsInASingleLine": 1,
+ "variableC": 2,
+ "variableA.": 1,
+ "variableC.": 1,
+ "testInequality": 1,
+ "testLogicalOr": 1,
+ "expression": 4,
+ "<": 2,
+ "expression.": 2,
+ "testLogicalAnd": 1,
+ "&": 1,
+ "testNot": 1,
+ "not.": 1,
+ "testSimpleChainMatches": 1,
+ "e": 11,
+ "eCtrl": 3,
+ "eventKey": 3,
+ "e.": 1,
+ "ctrl": 5,
+ "true.": 1,
+ "assert": 2,
+ "matches": 4,
+ "{": 4,
+ "}": 4,
+ "eCtrl.": 2,
+ "deny": 2,
+ "a": 1
+ },
+ "SourcePawn": {
+ "//#define": 1,
+ "DEBUG": 2,
+ "#if": 1,
+ "defined": 1,
+ "#define": 7,
+ "assert": 2,
+ "(": 233,
+ "%": 18,
+ ")": 234,
+ "if": 44,
+ "ThrowError": 2,
+ ";": 213,
+ "assert_msg": 2,
+ "#else": 1,
+ "#endif": 1,
+ "#pragma": 1,
+ "semicolon": 1,
+ "#include": 3,
+ "": 1,
+ "": 1,
+ "": 1,
+ "public": 21,
+ "Plugin": 1,
+ "myinfo": 1,
+ "{": 73,
+ "name": 7,
+ "author": 1,
+ "description": 1,
+ "version": 1,
+ "SOURCEMOD_VERSION": 1,
+ "url": 1,
+ "}": 71,
+ "new": 62,
+ "Handle": 51,
+ "g_Cvar_Winlimit": 5,
+ "INVALID_HANDLE": 56,
+ "g_Cvar_Maxrounds": 5,
+ "g_Cvar_Fraglimit": 6,
+ "g_Cvar_Bonusroundtime": 6,
+ "g_Cvar_StartTime": 3,
+ "g_Cvar_StartRounds": 5,
+ "g_Cvar_StartFrags": 3,
+ "g_Cvar_ExtendTimeStep": 2,
+ "g_Cvar_ExtendRoundStep": 2,
+ "g_Cvar_ExtendFragStep": 2,
+ "g_Cvar_ExcludeMaps": 3,
+ "g_Cvar_IncludeMaps": 2,
+ "g_Cvar_NoVoteMode": 2,
+ "g_Cvar_Extend": 2,
+ "g_Cvar_DontChange": 2,
+ "g_Cvar_EndOfMapVote": 8,
+ "g_Cvar_VoteDuration": 3,
+ "g_Cvar_RunOff": 2,
+ "g_Cvar_RunOffPercent": 2,
+ "g_VoteTimer": 7,
+ "g_RetryTimer": 4,
+ "g_MapList": 8,
+ "g_NominateList": 7,
+ "g_NominateOwners": 7,
+ "g_OldMapList": 7,
+ "g_NextMapList": 2,
+ "g_VoteMenu": 1,
+ "g_Extends": 2,
+ "g_TotalRounds": 7,
+ "bool": 10,
+ "g_HasVoteStarted": 7,
+ "g_WaitingForVote": 4,
+ "g_MapVoteCompleted": 9,
+ "g_ChangeMapAtRoundEnd": 6,
+ "g_ChangeMapInProgress": 4,
+ "g_mapFileSerial": 3,
+ "-": 12,
+ "g_NominateCount": 3,
+ "MapChange": 4,
+ "g_ChangeTime": 1,
+ "g_NominationsResetForward": 3,
+ "g_MapVoteStartedForward": 2,
+ "MAXTEAMS": 4,
+ "g_winCount": 4,
+ "[": 19,
+ "]": 19,
+ "VOTE_EXTEND": 1,
+ "VOTE_DONTCHANGE": 1,
+ "OnPluginStart": 1,
+ "LoadTranslations": 2,
+ "arraySize": 5,
+ "ByteCountToCells": 1,
+ "PLATFORM_MAX_PATH": 6,
+ "CreateArray": 5,
+ "CreateConVar": 15,
+ "_": 18,
+ "true": 26,
+ "RegAdminCmd": 2,
+ "Command_Mapvote": 2,
+ "ADMFLAG_CHANGEMAP": 2,
+ "Command_SetNextmap": 2,
+ "FindConVar": 4,
+ "||": 15,
+ "decl": 5,
+ "String": 11,
+ "folder": 5,
+ "GetGameFolderName": 1,
+ "sizeof": 6,
+ "strcmp": 3,
+ "HookEvent": 6,
+ "Event_TeamPlayWinPanel": 3,
+ "Event_TFRestartRound": 2,
+ "else": 5,
+ "Event_RoundEnd": 3,
+ "Event_PlayerDeath": 2,
+ "AutoExecConfig": 1,
+ "//Change": 1,
+ "the": 5,
+ "mp_bonusroundtime": 1,
+ "max": 1,
+ "so": 1,
+ "that": 2,
+ "we": 2,
+ "have": 2,
+ "time": 9,
+ "to": 4,
+ "display": 2,
+ "vote": 6,
+ "//If": 1,
+ "you": 1,
+ "a": 1,
+ "during": 2,
+ "bonus": 2,
+ "good": 1,
+ "defaults": 1,
+ "are": 1,
+ "duration": 1,
+ "and": 1,
+ "mp_bonustime": 1,
+ "SetConVarBounds": 1,
+ "ConVarBound_Upper": 1,
+ "CreateGlobalForward": 2,
+ "ET_Ignore": 2,
+ "Param_String": 1,
+ "Param_Cell": 1,
+ "APLRes": 1,
+ "AskPluginLoad2": 1,
+ "myself": 1,
+ "late": 1,
+ "error": 1,
+ "err_max": 1,
+ "RegPluginLibrary": 1,
+ "CreateNative": 9,
+ "Native_NominateMap": 1,
+ "Native_RemoveNominationByMap": 1,
+ "Native_RemoveNominationByOwner": 1,
+ "Native_InitiateVote": 1,
+ "Native_CanVoteStart": 2,
+ "Native_CheckVoteDone": 2,
+ "Native_GetExcludeMapList": 2,
+ "Native_GetNominatedMapList": 2,
+ "Native_EndOfMapVoteEnabled": 2,
+ "return": 23,
+ "APLRes_Success": 1,
+ "OnConfigsExecuted": 1,
+ "ReadMapList": 1,
+ "MAPLIST_FLAG_CLEARARRAY": 1,
+ "|": 1,
+ "MAPLIST_FLAG_MAPSFOLDER": 1,
+ "LogError": 2,
+ "CreateNextVote": 1,
+ "SetupTimeleftTimer": 3,
+ "false": 8,
+ "ClearArray": 2,
+ "for": 9,
+ "i": 13,
+ "<": 5,
+ "+": 12,
+ "&&": 5,
+ "GetConVarInt": 10,
+ "GetConVarFloat": 2,
+ "<=>": 1,
+ "Warning": 1,
+ "Bonus": 1,
+ "Round": 1,
+ "Time": 2,
+ "shorter": 1,
+ "than": 1,
+ "Vote": 4,
+ "Votes": 1,
+ "round": 1,
+ "may": 1,
+ "not": 1,
+ "complete": 1,
+ "OnMapEnd": 1,
+ "map": 27,
+ "GetCurrentMap": 1,
+ "PushArrayString": 3,
+ "GetArraySize": 8,
+ "RemoveFromArray": 3,
+ "OnClientDisconnect": 1,
+ "client": 9,
+ "index": 8,
+ "FindValueInArray": 1,
+ "oldmap": 4,
+ "GetArrayString": 3,
+ "Call_StartForward": 1,
+ "Call_PushString": 1,
+ "Call_PushCell": 1,
+ "GetArrayCell": 2,
+ "Call_Finish": 1,
+ "Action": 3,
+ "args": 3,
+ "ReplyToCommand": 2,
+ "Plugin_Handled": 4,
+ "GetCmdArg": 1,
+ "IsMapValid": 1,
+ "ShowActivity": 1,
+ "LogAction": 1,
+ "SetNextMap": 1,
+ "OnMapTimeLeftChanged": 1,
+ "GetMapTimeLeft": 1,
+ "startTime": 4,
+ "*": 1,
+ "GetConVarBool": 6,
+ "InitiateVote": 8,
+ "MapChange_MapEnd": 6,
+ "KillTimer": 1,
+ "//g_VoteTimer": 1,
+ "CreateTimer": 3,
+ "float": 2,
+ "Timer_StartMapVote": 3,
+ "TIMER_FLAG_NO_MAPCHANGE": 4,
+ "data": 8,
+ "CreateDataTimer": 1,
+ "WritePackCell": 2,
+ "ResetPack": 1,
+ "timer": 2,
+ "Plugin_Stop": 2,
+ "mapChange": 2,
+ "ReadPackCell": 2,
+ "hndl": 2,
+ "event": 11,
+ "const": 4,
+ "dontBroadcast": 4,
+ "Timer_ChangeMap": 2,
+ "bluescore": 2,
+ "GetEventInt": 7,
+ "redscore": 2,
+ "StrEqual": 1,
+ "CheckMaxRounds": 3,
+ "switch": 1,
+ "case": 2,
+ "CheckWinLimit": 4,
+ "//We": 1,
+ "need": 2,
+ "do": 1,
+ "nothing": 1,
+ "on": 1,
+ "winning_team": 1,
+ "this": 1,
+ "indicates": 1,
+ "stalemate.": 1,
+ "default": 1,
+ "winner": 9,
+ "//": 3,
+ "Nuclear": 1,
+ "Dawn": 1,
+ "SetFailState": 1,
+ "winner_score": 2,
+ "winlimit": 3,
+ "roundcount": 2,
+ "maxrounds": 3,
+ "fragger": 3,
+ "GetClientOfUserId": 1,
+ "GetClientFrags": 1,
+ "when": 2,
+ "inputlist": 1,
+ "IsVoteInProgress": 1,
+ "Can": 1,
+ "t": 7,
+ "be": 1,
+ "excluded": 1,
+ "from": 1,
+ "as": 2,
+ "they": 1,
+ "weren": 1,
+ "nominationsToAdd": 1,
+ "Change": 2,
+ "Extend": 2,
+ "Map": 5,
+ "Voting": 7,
+ "next": 5,
+ "has": 5,
+ "started.": 1,
+ "SM": 5,
+ "Nextmap": 5,
+ "Started": 1,
+ "Current": 2,
+ "Extended": 1,
+ "finished.": 3,
+ "The": 1,
+ "current": 1,
+ "been": 1,
+ "extended.": 1,
+ "Stays": 1,
+ "was": 3,
+ "Finished": 1,
+ "s.": 1,
+ "Runoff": 2,
+ "Starting": 2,
+ "indecisive": 1,
+ "beginning": 1,
+ "runoff": 1,
+ "T": 3,
+ "Dont": 1,
+ "because": 1,
+ "outside": 1,
+ "request": 1,
+ "inputarray": 1,
+ "plugin": 5,
+ "numParams": 5,
+ "CanVoteStart": 1,
+ "array": 3,
+ "GetNativeCell": 3,
+ "size": 2,
+ "maparray": 3,
+ "ownerarray": 3,
+ "If": 1,
+ "optional": 1,
+ "parameter": 1,
+ "an": 1,
+ "owner": 1,
+ "list": 1,
+ "passed": 1,
+ "then": 1,
+ "fill": 1,
+ "out": 1,
+ "well": 1,
+ "PushArrayCell": 1
+ },
+ "SQL": {
+ "IF": 13,
+ "EXISTS": 12,
+ "(": 131,
+ "SELECT": 4,
+ "*": 3,
+ "FROM": 1,
+ "DBO.SYSOBJECTS": 1,
+ "WHERE": 1,
+ "ID": 2,
+ "OBJECT_ID": 1,
+ "N": 7,
+ ")": 131,
+ "AND": 1,
+ "OBJECTPROPERTY": 1,
+ "id": 22,
+ "DROP": 3,
+ "PROCEDURE": 1,
+ "dbo.AvailableInSearchSel": 2,
+ "GO": 4,
+ "CREATE": 10,
+ "Procedure": 1,
+ "AvailableInSearchSel": 1,
+ "AS": 1,
+ "UNION": 2,
+ "ALL": 2,
+ "DB_NAME": 1,
+ "BEGIN": 1,
+ "GRANT": 1,
+ "EXECUTE": 1,
+ "ON": 1,
+ "TO": 1,
+ "[": 1,
+ "rv": 1,
+ "]": 1,
+ "END": 1,
+ "SHOW": 2,
+ "WARNINGS": 2,
+ ";": 31,
+ "-": 496,
+ "Table": 9,
+ "structure": 9,
+ "for": 15,
+ "table": 17,
+ "articles": 4,
+ "TABLE": 10,
+ "NOT": 46,
+ "int": 28,
+ "NULL": 91,
+ "AUTO_INCREMENT": 9,
+ "title": 4,
+ "varchar": 22,
+ "DEFAULT": 22,
+ "content": 2,
+ "longtext": 1,
+ "date_posted": 4,
+ "datetime": 10,
+ "created_by": 2,
+ "last_modified": 2,
+ "last_modified_by": 2,
+ "ordering": 2,
+ "is_published": 2,
+ "PRIMARY": 9,
+ "KEY": 13,
+ "Dumping": 6,
+ "data": 6,
+ "INSERT": 6,
+ "INTO": 6,
+ "VALUES": 6,
+ "challenges": 4,
+ "pkg_name": 2,
+ "description": 2,
+ "text": 1,
+ "author": 2,
+ "category": 2,
+ "visibility": 2,
+ "publish": 2,
+ "abstract": 2,
+ "level": 2,
+ "duration": 2,
+ "goal": 2,
+ "solution": 2,
+ "availability": 2,
+ "default_points": 2,
+ "default_duration": 2,
+ "challenge_attempts": 2,
+ "user_id": 8,
+ "challenge_id": 7,
+ "time": 1,
+ "status": 1,
+ "challenge_attempt_count": 2,
+ "tries": 1,
+ "UNIQUE": 4,
+ "classes": 4,
+ "name": 3,
+ "date_created": 6,
+ "archive": 2,
+ "class_challenges": 4,
+ "class_id": 5,
+ "class_memberships": 4,
+ "users": 4,
+ "username": 3,
+ "full_name": 2,
+ "email": 2,
+ "password": 2,
+ "joined": 2,
+ "last_visit": 2,
+ "is_activated": 2,
+ "type": 3,
+ "token": 3,
+ "user_has_challenge_token": 3,
+ "create": 2,
+ "FILIAL": 10,
+ "NUMBER": 1,
+ "not": 5,
+ "null": 4,
+ "title_ua": 1,
+ "VARCHAR2": 4,
+ "title_ru": 1,
+ "title_eng": 1,
+ "remove_date": 1,
+ "DATE": 2,
+ "modify_date": 1,
+ "modify_user": 1,
+ "alter": 1,
+ "add": 1,
+ "constraint": 1,
+ "PK_ID": 1,
+ "primary": 1,
+ "key": 1,
+ "grant": 8,
+ "select": 10,
+ "on": 8,
+ "to": 8,
+ "ATOLL": 1,
+ "CRAMER2GIS": 1,
+ "DMS": 1,
+ "HPSM2GIS": 1,
+ "PLANMONITOR": 1,
+ "SIEBEL": 1,
+ "VBIS": 1,
+ "VPORTAL": 1,
+ "if": 1,
+ "exists": 1,
+ "from": 2,
+ "sysobjects": 1,
+ "where": 2,
+ "and": 1,
+ "in": 1,
+ "exec": 1,
+ "%": 2,
+ "object_ddl": 1,
+ "go": 1,
+ "use": 1,
+ "translog": 1,
+ "VIEW": 1,
+ "suspendedtoday": 2,
+ "view": 1,
+ "as": 1,
+ "suspended": 1,
+ "datediff": 1,
+ "now": 1
+ },
"Squirrel": {
"//example": 1,
"from": 1,
@@ -44203,67 +62441,67 @@
"newplayer.MoveTo": 1
},
"Standard ML": {
+ "structure": 15,
+ "LazyBase": 4,
+ "LAZY_BASE": 5,
+ "struct": 13,
+ "type": 6,
+ "a": 78,
+ "exception": 2,
+ "Undefined": 6,
+ "fun": 60,
+ "delay": 6,
+ "f": 46,
+ "force": 18,
+ "(": 840,
+ ")": 845,
+ "val": 147,
+ "undefined": 2,
+ "fn": 127,
+ "raise": 6,
+ "end": 55,
+ "LazyMemoBase": 4,
+ "datatype": 29,
+ "|": 226,
+ "Done": 2,
+ "of": 91,
+ "lazy": 13,
+ "unit": 7,
+ "-": 20,
+ "let": 44,
+ "open": 9,
+ "B": 2,
+ "inject": 5,
+ "x": 74,
+ "isUndefined": 4,
+ "ignore": 3,
+ ";": 21,
+ "false": 32,
+ "handle": 4,
+ "true": 36,
+ "toString": 4,
+ "if": 51,
+ "then": 51,
+ "else": 51,
+ "eqBy": 5,
+ "p": 10,
+ "y": 50,
+ "eq": 3,
+ "op": 2,
+ "compare": 8,
+ "Ops": 3,
+ "map": 3,
+ "Lazy": 2,
+ "LazyFn": 4,
+ "LazyMemo": 2,
"signature": 2,
- "LAZY_BASE": 3,
"sig": 2,
- "type": 5,
- "a": 74,
- "lazy": 12,
- "-": 19,
- ")": 826,
- "end": 52,
"LAZY": 1,
"bool": 9,
- "val": 143,
- "inject": 3,
- "toString": 3,
- "(": 822,
"string": 14,
- "eq": 2,
"*": 9,
- "eqBy": 3,
- "compare": 7,
"order": 2,
- "map": 2,
"b": 58,
- "structure": 10,
- "Ops": 2,
- "LazyBase": 2,
- "struct": 9,
- "exception": 1,
- "Undefined": 3,
- "fun": 51,
- "delay": 3,
- "f": 37,
- "force": 9,
- "undefined": 1,
- "fn": 124,
- "raise": 5,
- "LazyMemoBase": 2,
- "datatype": 28,
- "|": 225,
- "Done": 1,
- "of": 90,
- "unit": 6,
- "let": 43,
- "open": 8,
- "B": 1,
- "x": 59,
- "isUndefined": 2,
- "ignore": 2,
- ";": 20,
- "false": 31,
- "handle": 3,
- "true": 35,
- "if": 50,
- "then": 50,
- "else": 50,
- "p": 6,
- "y": 44,
- "op": 1,
- "Lazy": 1,
- "LazyFn": 2,
- "LazyMemo": 1,
"functor": 2,
"Main": 1,
"S": 2,
@@ -44795,6 +63033,601 @@
"table": 14,
"clear": 1
},
+ "Stata": {
+ "local": 6,
+ "inname": 1,
+ "outname": 1,
+ "program": 2,
+ "hello": 1,
+ "vers": 1,
+ "display": 1,
+ "end": 4,
+ "{": 441,
+ "*": 25,
+ "version": 2,
+ "mar2014": 1,
+ "}": 440,
+ "...": 30,
+ "Hello": 1,
+ "world": 1,
+ "p_end": 47,
+ "MAXDIM": 1,
+ "smcl": 1,
+ "Matthew": 2,
+ "White": 2,
+ "jan2014": 1,
+ "title": 7,
+ "Title": 1,
+ "phang": 4,
+ "cmd": 111,
+ "odkmeta": 17,
+ "hline": 1,
+ "Create": 4,
+ "a": 30,
+ "do": 22,
+ "-": 42,
+ "file": 18,
+ "to": 23,
+ "import": 9,
+ "ODK": 6,
+ "data": 4,
+ "marker": 10,
+ "syntax": 1,
+ "Syntax": 1,
+ "p": 2,
+ "using": 10,
+ "it": 61,
+ "help": 27,
+ "filename": 3,
+ "opt": 25,
+ "csv": 9,
+ "(": 60,
+ "csvfile": 3,
+ ")": 61,
+ "Using": 7,
+ "histogram": 2,
+ "as": 29,
+ "template.": 8,
+ "notwithstanding": 1,
+ "is": 31,
+ "rarely": 1,
+ "preceded": 3,
+ "by": 7,
+ "an": 6,
+ "underscore.": 1,
+ "cmdab": 5,
+ "s": 10,
+ "urvey": 2,
+ "surveyfile": 5,
+ "odkmeta##surveyopts": 2,
+ "surveyopts": 4,
+ "cho": 2,
+ "ices": 2,
+ "choicesfile": 4,
+ "odkmeta##choicesopts": 2,
+ "choicesopts": 5,
+ "[": 6,
+ "options": 1,
+ "]": 6,
+ "odbc": 2,
+ "the": 67,
+ "position": 1,
+ "of": 36,
+ "last": 1,
+ "character": 1,
+ "in": 24,
+ "first": 2,
+ "column": 18,
+ "+": 2,
+ "synoptset": 5,
+ "tabbed": 4,
+ "synopthdr": 4,
+ "synoptline": 8,
+ "syntab": 6,
+ "Main": 3,
+ "heckman": 2,
+ "p2coldent": 3,
+ "name": 20,
+ ".csv": 2,
+ "that": 21,
+ "contains": 3,
+ "metadata": 5,
+ "from": 6,
+ "survey": 14,
+ "worksheet": 5,
+ "choices": 10,
+ "Fields": 2,
+ "synopt": 16,
+ "drop": 1,
+ "attrib": 2,
+ "headers": 8,
+ "not": 8,
+ "field": 25,
+ "attributes": 10,
+ "with": 10,
+ "keep": 1,
+ "only": 3,
+ "rel": 1,
+ "ax": 1,
+ "ignore": 1,
+ "fields": 7,
+ "exist": 1,
+ "Lists": 1,
+ "ca": 1,
+ "oth": 1,
+ "er": 1,
+ "odkmeta##other": 1,
+ "other": 14,
+ "Stata": 5,
+ "value": 14,
+ "values": 3,
+ "select": 6,
+ "or_other": 5,
+ ";": 15,
+ "default": 8,
+ "max": 2,
+ "one": 5,
+ "line": 4,
+ "write": 1,
+ "each": 7,
+ "list": 13,
+ "on": 7,
+ "single": 1,
+ "Options": 1,
+ "replace": 7,
+ "overwrite": 1,
+ "existing": 1,
+ "p2colreset": 4,
+ "and": 18,
+ "are": 13,
+ "required.": 1,
+ "Change": 1,
+ "t": 2,
+ "ype": 1,
+ "header": 15,
+ "type": 7,
+ "attribute": 10,
+ "la": 2,
+ "bel": 2,
+ "label": 9,
+ "d": 1,
+ "isabled": 1,
+ "disabled": 4,
+ "li": 1,
+ "stname": 1,
+ "list_name": 6,
+ "maximum": 3,
+ "plus": 2,
+ "min": 2,
+ "minimum": 2,
+ "minus": 1,
+ "#": 6,
+ "constant": 2,
+ "for": 13,
+ "all": 3,
+ "labels": 8,
+ "description": 1,
+ "Description": 1,
+ "pstd": 20,
+ "creates": 1,
+ "worksheets": 1,
+ "XLSForm.": 1,
+ "The": 9,
+ "saved": 1,
+ "completes": 2,
+ "following": 1,
+ "tasks": 3,
+ "order": 1,
+ "anova": 1,
+ "phang2": 23,
+ "o": 12,
+ "Import": 2,
+ "lists": 2,
+ "Add": 1,
+ "char": 4,
+ "characteristics": 4,
+ "Split": 1,
+ "select_multiple": 6,
+ "variables": 8,
+ "Drop": 1,
+ "note": 1,
+ "format": 1,
+ "Format": 1,
+ "date": 1,
+ "time": 1,
+ "datetime": 1,
+ "Attach": 2,
+ "variable": 14,
+ "notes": 1,
+ "merge": 3,
+ "Merge": 1,
+ "repeat": 6,
+ "groups": 4,
+ "After": 1,
+ "have": 2,
+ "been": 1,
+ "split": 4,
+ "can": 1,
+ "be": 12,
+ "removed": 1,
+ "without": 2,
+ "affecting": 1,
+ "tasks.": 1,
+ "User": 1,
+ "written": 2,
+ "supplements": 1,
+ "may": 2,
+ "make": 1,
+ "use": 3,
+ "any": 3,
+ "which": 6,
+ "imported": 4,
+ "characteristics.": 1,
+ "remarks": 1,
+ "Remarks": 1,
+ "uses": 3,
+ "helpb": 7,
+ "insheet": 4,
+ "data.": 1,
+ "long": 7,
+ "strings": 1,
+ "digits": 1,
+ "such": 2,
+ "simserial": 1,
+ "will": 9,
+ "numeric": 4,
+ "even": 1,
+ "if": 10,
+ "they": 2,
+ "more": 1,
+ "than": 3,
+ "digits.": 1,
+ "As": 1,
+ "result": 6,
+ "lose": 1,
+ "precision": 1,
+ ".": 22,
+ "makes": 1,
+ "limited": 1,
+ "mata": 1,
+ "Mata": 1,
+ "manage": 1,
+ "contain": 1,
+ "difficult": 1,
+ "characters.": 2,
+ "starts": 1,
+ "definitions": 1,
+ "several": 1,
+ "macros": 1,
+ "these": 4,
+ "constants": 1,
+ "uses.": 1,
+ "For": 4,
+ "instance": 1,
+ "macro": 1,
+ "datemask": 1,
+ "varname": 1,
+ "constraints": 1,
+ "names": 16,
+ "Further": 1,
+ "files": 1,
+ "often": 1,
+ "much": 1,
+ "longer": 1,
+ "length": 3,
+ "limit": 1,
+ "These": 2,
+ "differences": 1,
+ "convention": 1,
+ "lead": 1,
+ "three": 1,
+ "kinds": 1,
+ "problematic": 1,
+ "Long": 3,
+ "involve": 1,
+ "invalid": 1,
+ "combination": 1,
+ "characters": 3,
+ "example": 2,
+ "begins": 1,
+ "colon": 1,
+ "followed": 1,
+ "number.": 1,
+ "convert": 2,
+ "instead": 1,
+ "naming": 1,
+ "v": 6,
+ "concatenated": 1,
+ "positive": 1,
+ "integer": 1,
+ "v1": 1,
+ "unique": 1,
+ "but": 4,
+ "when": 1,
+ "converted": 3,
+ "truncated": 1,
+ "become": 3,
+ "duplicates.": 1,
+ "again": 1,
+ "names.": 6,
+ "form": 1,
+ "duplicates": 1,
+ "cannot": 2,
+ "chooses": 1,
+ "different": 1,
+ "Because": 1,
+ "problem": 2,
+ "recommended": 1,
+ "you": 1,
+ "If": 2,
+ "its": 3,
+ "characteristic": 2,
+ "odkmeta##Odk_bad_name": 1,
+ "Odk_bad_name": 3,
+ "otherwise": 1,
+ "Most": 1,
+ "depend": 1,
+ "There": 1,
+ "two": 2,
+ "exceptions": 1,
+ "variables.": 1,
+ "error": 4,
+ "has": 6,
+ "or": 7,
+ "splitting": 2,
+ "would": 1,
+ "duplicate": 4,
+ "reshape": 2,
+ "groups.": 1,
+ "there": 2,
+ "merging": 2,
+ "code": 1,
+ "datasets.": 1,
+ "Where": 1,
+ "renaming": 2,
+ "left": 1,
+ "user.": 1,
+ "section": 2,
+ "designated": 2,
+ "area": 2,
+ "renaming.": 3,
+ "In": 3,
+ "reshaping": 1,
+ "group": 4,
+ "own": 2,
+ "Many": 1,
+ "forms": 2,
+ "require": 1,
+ "others": 1,
+ "few": 1,
+ "need": 1,
+ "renamed": 1,
+ "should": 1,
+ "go": 1,
+ "areas.": 1,
+ "However": 1,
+ "some": 1,
+ "usually": 1,
+ "because": 1,
+ "many": 2,
+ "nested": 2,
+ "above": 1,
+ "this": 1,
+ "case": 1,
+ "work": 1,
+ "best": 1,
+ "Odk_group": 1,
+ "Odk_name": 1,
+ "Odk_is_other": 2,
+ "Odk_geopoint": 2,
+ "r": 2,
+ "varlist": 2,
+ "Odk_list_name": 2,
+ "foreach": 1,
+ "var": 5,
+ "*search": 1,
+ "n/a": 1,
+ "know": 1,
+ "don": 1,
+ "worksheet.": 1,
+ "requires": 1,
+ "comma": 1,
+ "separated": 2,
+ "text": 1,
+ "file.": 1,
+ "Strings": 1,
+ "embedded": 2,
+ "commas": 1,
+ "double": 3,
+ "quotes": 3,
+ "must": 2,
+ "enclosed": 1,
+ "another": 1,
+ "quote.": 1,
+ "pmore": 5,
+ "Each": 1,
+ "header.": 1,
+ "Use": 1,
+ "suboptions": 1,
+ "specify": 1,
+ "alternative": 1,
+ "respectively.": 1,
+ "All": 1,
+ "used.": 1,
+ "standardized": 1,
+ "follows": 1,
+ "replaced": 9,
+ "select_one": 3,
+ "begin_group": 1,
+ "begin": 2,
+ "end_group": 1,
+ "begin_repeat": 1,
+ "end_repeat": 1,
+ "addition": 1,
+ "specified": 1,
+ "attaches": 1,
+ "pmore2": 3,
+ "formed": 1,
+ "concatenating": 1,
+ "elements": 1,
+ "Odk_repeat": 1,
+ "nested.": 1,
+ "geopoint": 2,
+ "component": 1,
+ "Latitude": 1,
+ "Longitude": 1,
+ "Altitude": 1,
+ "Accuracy": 1,
+ "blank.": 1,
+ "imports": 4,
+ "XLSForm": 1,
+ "list.": 1,
+ "one.": 1,
+ "specifies": 4,
+ "vary": 1,
+ "definition": 1,
+ "rather": 1,
+ "multiple": 1,
+ "delimit": 1,
+ "#delimit": 1,
+ "dlgtab": 1,
+ "Other": 1,
+ "already": 2,
+ "exists.": 1,
+ "examples": 1,
+ "Examples": 1,
+ "named": 1,
+ "import.do": 7,
+ "including": 1,
+ "survey.csv": 1,
+ "choices.csv": 1,
+ "txt": 6,
+ "Same": 3,
+ "previous": 3,
+ "command": 3,
+ "appears": 2,
+ "fieldname": 3,
+ "survey_fieldname.csv": 1,
+ "valuename": 2,
+ "choices_valuename.csv": 1,
+ "except": 1,
+ "hint": 2,
+ "dropattrib": 2,
+ "does": 1,
+ "_all": 1,
+ "acknowledgements": 1,
+ "Acknowledgements": 1,
+ "Lindsey": 1,
+ "Shaughnessy": 1,
+ "Innovations": 2,
+ "Poverty": 2,
+ "Action": 2,
+ "assisted": 1,
+ "almost": 1,
+ "aspects": 1,
+ "development.": 1,
+ "She": 1,
+ "collaborated": 1,
+ "structure": 1,
+ "was": 1,
+ "very": 1,
+ "helpful": 1,
+ "tester": 1,
+ "contributed": 1,
+ "information": 1,
+ "about": 1,
+ "ODK.": 1,
+ "author": 1,
+ "Author": 1,
+ "mwhite@poverty": 1,
+ "action.org": 1,
+ "Setup": 1,
+ "sysuse": 1,
+ "auto": 1,
+ "Fit": 2,
+ "linear": 2,
+ "regression": 2,
+ "regress": 5,
+ "mpg": 1,
+ "weight": 4,
+ "foreign": 2,
+ "better": 1,
+ "physics": 1,
+ "standpoint": 1,
+ "gen": 1,
+ "gp100m": 2,
+ "/mpg": 1,
+ "Obtain": 1,
+ "beta": 2,
+ "coefficients": 1,
+ "refitting": 1,
+ "model": 1,
+ "Suppress": 1,
+ "intercept": 1,
+ "term": 1,
+ "noconstant": 1,
+ "Model": 1,
+ "bn.foreign": 1,
+ "hascons": 1,
+ "matrix": 3,
+ "tanh": 1,
+ "u": 3,
+ "eu": 4,
+ "emu": 4,
+ "exp": 2,
+ "return": 1,
+ "/": 1
+ },
+ "STON": {
+ "[": 11,
+ "]": 11,
+ "{": 15,
+ "#a": 1,
+ "#b": 1,
+ "}": 15,
+ "Rectangle": 1,
+ "#origin": 1,
+ "Point": 2,
+ "-": 2,
+ "#corner": 1,
+ "TestDomainObject": 1,
+ "#created": 1,
+ "DateAndTime": 2,
+ "#modified": 1,
+ "#integer": 1,
+ "#float": 1,
+ "#description": 1,
+ "#color": 1,
+ "#green": 1,
+ "#tags": 1,
+ "#two": 1,
+ "#beta": 1,
+ "#medium": 1,
+ "#bytes": 1,
+ "ByteArray": 1,
+ "#boolean": 1,
+ "false": 1,
+ "ZnResponse": 1,
+ "#headers": 2,
+ "ZnHeaders": 1,
+ "ZnMultiValueDictionary": 1,
+ "#entity": 1,
+ "ZnStringEntity": 1,
+ "#contentType": 1,
+ "ZnMimeType": 1,
+ "#main": 1,
+ "#sub": 1,
+ "#parameters": 1,
+ "#contentLength": 1,
+ "#string": 1,
+ "#encoder": 1,
+ "ZnUTF8Encoder": 1,
+ "#statusLine": 1,
+ "ZnStatusLine": 1,
+ "#version": 1,
+ "#code": 1,
+ "#reason": 1
+ },
"Stylus": {
"border": 6,
"-": 10,
@@ -44884,6 +63717,554 @@
"wait": 1,
".fork": 1
},
+ "Swift": {
+ "let": 43,
+ "apples": 1,
+ "oranges": 1,
+ "appleSummary": 1,
+ "fruitSummary": 1,
+ "var": 42,
+ "shoppingList": 3,
+ "[": 18,
+ "]": 18,
+ "occupations": 2,
+ "emptyArray": 1,
+ "String": 27,
+ "(": 89,
+ ")": 89,
+ "emptyDictionary": 1,
+ "Dictionary": 1,
+ "": 1,
+ "Float": 1,
+ "//": 1,
+ "Went": 1,
+ "shopping": 1,
+ "and": 1,
+ "bought": 1,
+ "everything.": 1,
+ "individualScores": 2,
+ "teamScore": 4,
+ "for": 10,
+ "score": 2,
+ "in": 11,
+ "{": 77,
+ "if": 6,
+ "+": 15,
+ "}": 77,
+ "else": 1,
+ "optionalString": 2,
+ "nil": 1,
+ "optionalName": 2,
+ "greeting": 2,
+ "name": 21,
+ "vegetable": 2,
+ "switch": 4,
+ "case": 21,
+ "vegetableComment": 4,
+ "x": 1,
+ "where": 2,
+ "x.hasSuffix": 1,
+ "default": 2,
+ "interestingNumbers": 2,
+ "largest": 4,
+ "kind": 1,
+ "numbers": 6,
+ "number": 13,
+ "n": 5,
+ "while": 2,
+ "<": 4,
+ "*": 7,
+ "m": 5,
+ "do": 1,
+ "firstForLoop": 3,
+ "i": 6,
+ "secondForLoop": 3,
+ ";": 2,
+ "println": 1,
+ "func": 24,
+ "greet": 2,
+ "day": 1,
+ "-": 21,
+ "return": 30,
+ "getGasPrices": 2,
+ "Double": 11,
+ "sumOf": 3,
+ "Int...": 1,
+ "Int": 19,
+ "sum": 3,
+ "returnFifteen": 2,
+ "y": 3,
+ "add": 2,
+ "makeIncrementer": 2,
+ "addOne": 2,
+ "increment": 2,
+ "hasAnyMatches": 2,
+ "list": 2,
+ "condition": 2,
+ "Bool": 4,
+ "item": 4,
+ "true": 2,
+ "false": 2,
+ "lessThanTen": 2,
+ "numbers.map": 2,
+ "result": 5,
+ "sort": 1,
+ "class": 7,
+ "Shape": 2,
+ "numberOfSides": 4,
+ "simpleDescription": 14,
+ "myVariable": 2,
+ "myConstant": 1,
+ "shape": 1,
+ "shape.numberOfSides": 1,
+ "shapeDescription": 1,
+ "shape.simpleDescription": 1,
+ "NamedShape": 3,
+ "init": 4,
+ "self.name": 1,
+ "Square": 7,
+ "sideLength": 17,
+ "self.sideLength": 2,
+ "super.init": 2,
+ "area": 1,
+ "override": 2,
+ "test": 1,
+ "test.area": 1,
+ "test.simpleDescription": 1,
+ "EquilateralTriangle": 4,
+ "perimeter": 1,
+ "get": 2,
+ "set": 1,
+ "newValue": 1,
+ "/": 1,
+ "triangle": 3,
+ "triangle.perimeter": 2,
+ "triangle.sideLength": 2,
+ "TriangleAndSquare": 2,
+ "willSet": 2,
+ "square.sideLength": 1,
+ "newValue.sideLength": 2,
+ "square": 2,
+ "size": 4,
+ "triangleAndSquare": 1,
+ "triangleAndSquare.square.sideLength": 1,
+ "triangleAndSquare.triangle.sideLength": 2,
+ "triangleAndSquare.square": 1,
+ "Counter": 2,
+ "count": 2,
+ "incrementBy": 1,
+ "amount": 2,
+ "numberOfTimes": 2,
+ "times": 4,
+ "counter": 1,
+ "counter.incrementBy": 1,
+ "optionalSquare": 2,
+ ".sideLength": 1,
+ "enum": 4,
+ "Rank": 2,
+ "Ace": 1,
+ "Two": 1,
+ "Three": 1,
+ "Four": 1,
+ "Five": 1,
+ "Six": 1,
+ "Seven": 1,
+ "Eight": 1,
+ "Nine": 1,
+ "Ten": 1,
+ "Jack": 1,
+ "Queen": 1,
+ "King": 1,
+ "self": 3,
+ ".Ace": 1,
+ ".Jack": 1,
+ ".Queen": 1,
+ ".King": 1,
+ "self.toRaw": 1,
+ "ace": 1,
+ "Rank.Ace": 1,
+ "aceRawValue": 1,
+ "ace.toRaw": 1,
+ "convertedRank": 1,
+ "Rank.fromRaw": 1,
+ "threeDescription": 1,
+ "convertedRank.simpleDescription": 1,
+ "Suit": 2,
+ "Spades": 1,
+ "Hearts": 1,
+ "Diamonds": 1,
+ "Clubs": 1,
+ ".Spades": 2,
+ ".Hearts": 1,
+ ".Diamonds": 1,
+ ".Clubs": 1,
+ "hearts": 1,
+ "Suit.Hearts": 1,
+ "heartsDescription": 1,
+ "hearts.simpleDescription": 1,
+ "implicitInteger": 1,
+ "implicitDouble": 1,
+ "explicitDouble": 1,
+ "struct": 2,
+ "Card": 2,
+ "rank": 2,
+ "suit": 2,
+ "threeOfSpades": 1,
+ ".Three": 1,
+ "threeOfSpadesDescription": 1,
+ "threeOfSpades.simpleDescription": 1,
+ "ServerResponse": 1,
+ "Result": 1,
+ "Error": 1,
+ "success": 2,
+ "ServerResponse.Result": 1,
+ "failure": 1,
+ "ServerResponse.Error": 1,
+ ".Result": 1,
+ "sunrise": 1,
+ "sunset": 1,
+ "serverResponse": 2,
+ ".Error": 1,
+ "error": 1,
+ "protocol": 1,
+ "ExampleProtocol": 5,
+ "mutating": 3,
+ "adjust": 4,
+ "SimpleClass": 2,
+ "anotherProperty": 1,
+ "a": 2,
+ "a.adjust": 1,
+ "aDescription": 1,
+ "a.simpleDescription": 1,
+ "SimpleStructure": 2,
+ "b": 1,
+ "b.adjust": 1,
+ "bDescription": 1,
+ "b.simpleDescription": 1,
+ "extension": 1,
+ "protocolValue": 1,
+ "protocolValue.simpleDescription": 1,
+ "repeat": 2,
+ "": 1,
+ "ItemType": 3,
+ "OptionalValue": 2,
+ "": 1,
+ "None": 1,
+ "Some": 1,
+ "T": 5,
+ "possibleInteger": 2,
+ "": 1,
+ ".None": 1,
+ ".Some": 1,
+ "anyCommonElements": 2,
+ "": 1,
+ "U": 4,
+ "Sequence": 2,
+ "GeneratorType": 3,
+ "Element": 3,
+ "Equatable": 1,
+ "lhs": 2,
+ "rhs": 2,
+ "lhsItem": 2,
+ "rhsItem": 2,
+ "label": 2,
+ "width": 2,
+ "widthLabel": 1
+ },
+ "SystemVerilog": {
+ "module": 3,
+ "endpoint_phy_wrapper": 2,
+ "(": 92,
+ "input": 12,
+ "clk_sys_i": 2,
+ "clk_ref_i": 6,
+ "clk_rx_i": 3,
+ "rst_n_i": 3,
+ "IWishboneMaster.master": 2,
+ "src": 1,
+ "IWishboneSlave.slave": 1,
+ "snk": 1,
+ "sys": 1,
+ "output": 6,
+ "[": 17,
+ "]": 17,
+ "td_o": 2,
+ "rd_i": 2,
+ "txn_o": 2,
+ "txp_o": 2,
+ "rxn_i": 2,
+ "rxp_i": 2,
+ ")": 92,
+ ";": 32,
+ "wire": 12,
+ "rx_clock": 3,
+ "parameter": 2,
+ "g_phy_type": 6,
+ "gtx_data": 3,
+ "gtx_k": 3,
+ "gtx_disparity": 3,
+ "gtx_enc_error": 3,
+ "grx_data": 3,
+ "grx_clk": 1,
+ "grx_k": 3,
+ "grx_enc_error": 3,
+ "grx_bitslide": 2,
+ "gtp_rst": 2,
+ "tx_clock": 3,
+ "generate": 1,
+ "if": 5,
+ "begin": 4,
+ "assign": 2,
+ "wr_tbi_phy": 1,
+ "U_Phy": 1,
+ ".serdes_rst_i": 1,
+ ".serdes_loopen_i": 1,
+ "b0": 5,
+ ".serdes_enable_i": 1,
+ "b1": 2,
+ ".serdes_tx_data_i": 1,
+ ".serdes_tx_k_i": 1,
+ ".serdes_tx_disparity_o": 1,
+ ".serdes_tx_enc_err_o": 1,
+ ".serdes_rx_data_o": 1,
+ ".serdes_rx_k_o": 1,
+ ".serdes_rx_enc_err_o": 1,
+ ".serdes_rx_bitslide_o": 1,
+ ".tbi_refclk_i": 1,
+ ".tbi_rbclk_i": 1,
+ ".tbi_td_o": 1,
+ ".tbi_rd_i": 1,
+ ".tbi_syncen_o": 1,
+ ".tbi_loopen_o": 1,
+ ".tbi_prbsen_o": 1,
+ ".tbi_enable_o": 1,
+ "end": 4,
+ "else": 2,
+ "//": 3,
+ "wr_gtx_phy_virtex6": 1,
+ "#": 3,
+ ".g_simulation": 2,
+ "U_PHY": 1,
+ ".clk_ref_i": 2,
+ ".tx_clk_o": 1,
+ ".tx_data_i": 1,
+ ".tx_k_i": 1,
+ ".tx_disparity_o": 1,
+ ".tx_enc_err_o": 1,
+ ".rx_rbclk_o": 1,
+ ".rx_data_o": 1,
+ ".rx_k_o": 1,
+ ".rx_enc_err_o": 1,
+ ".rx_bitslide_o": 1,
+ ".rst_i": 1,
+ ".loopen_i": 1,
+ ".pad_txn0_o": 1,
+ ".pad_txp0_o": 1,
+ ".pad_rxn0_i": 1,
+ ".pad_rxp0_i": 1,
+ "endgenerate": 1,
+ "wr_endpoint": 1,
+ ".g_pcs_16bit": 1,
+ ".g_rx_buffer_size": 1,
+ ".g_with_rx_buffer": 1,
+ ".g_with_timestamper": 1,
+ ".g_with_dmtd": 1,
+ ".g_with_dpi_classifier": 1,
+ ".g_with_vlans": 1,
+ ".g_with_rtu": 1,
+ "DUT": 1,
+ ".clk_sys_i": 1,
+ ".clk_dmtd_i": 1,
+ ".rst_n_i": 1,
+ ".pps_csync_p1_i": 1,
+ ".src_dat_o": 1,
+ "snk.dat_i": 1,
+ ".src_adr_o": 1,
+ "snk.adr": 1,
+ ".src_sel_o": 1,
+ "snk.sel": 1,
+ ".src_cyc_o": 1,
+ "snk.cyc": 1,
+ ".src_stb_o": 1,
+ "snk.stb": 1,
+ ".src_we_o": 1,
+ "snk.we": 1,
+ ".src_stall_i": 1,
+ "snk.stall": 1,
+ ".src_ack_i": 1,
+ "snk.ack": 1,
+ ".src_err_i": 1,
+ ".rtu_full_i": 1,
+ ".rtu_rq_strobe_p1_o": 1,
+ ".rtu_rq_smac_o": 1,
+ ".rtu_rq_dmac_o": 1,
+ ".rtu_rq_vid_o": 1,
+ ".rtu_rq_has_vid_o": 1,
+ ".rtu_rq_prio_o": 1,
+ ".rtu_rq_has_prio_o": 1,
+ ".wb_cyc_i": 1,
+ "sys.cyc": 1,
+ ".wb_stb_i": 1,
+ "sys.stb": 1,
+ ".wb_we_i": 1,
+ "sys.we": 1,
+ ".wb_sel_i": 1,
+ "sys.sel": 1,
+ ".wb_adr_i": 1,
+ "sys.adr": 1,
+ ".wb_dat_i": 1,
+ "sys.dat_o": 1,
+ ".wb_dat_o": 1,
+ "sys.dat_i": 1,
+ ".wb_ack_o": 1,
+ "sys.ack": 1,
+ "endmodule": 2,
+ "fifo": 1,
+ "clk_50": 1,
+ "clk_2": 1,
+ "reset_n": 1,
+ "data_out": 1,
+ "empty": 1,
+ "priority_encoder": 1,
+ "INPUT_WIDTH": 3,
+ "OUTPUT_WIDTH": 3,
+ "logic": 2,
+ "-": 4,
+ "input_data": 2,
+ "output_data": 3,
+ "int": 1,
+ "ii": 6,
+ "always_comb": 1,
+ "for": 2,
+ "<": 1,
+ "+": 3,
+ "function": 1,
+ "integer": 2,
+ "log2": 4,
+ "x": 6,
+ "endfunction": 1
+ },
+ "Tcl": {
+ "#": 7,
+ "package": 2,
+ "require": 2,
+ "Tcl": 2,
+ "namespace": 6,
+ "eval": 2,
+ "stream": 61,
+ "{": 148,
+ "export": 3,
+ "[": 76,
+ "a": 1,
+ "-": 5,
+ "z": 1,
+ "]": 76,
+ "*": 19,
+ "}": 148,
+ "ensemble": 1,
+ "create": 7,
+ "proc": 28,
+ "first": 24,
+ "restCmdPrefix": 2,
+ "return": 22,
+ "list": 18,
+ "lassign": 11,
+ "foldl": 1,
+ "cmdPrefix": 19,
+ "initialValue": 7,
+ "args": 13,
+ "set": 34,
+ "numStreams": 3,
+ "llength": 5,
+ "if": 14,
+ "FoldlSingleStream": 2,
+ "lindex": 5,
+ "elseif": 3,
+ "FoldlMultiStream": 2,
+ "else": 5,
+ "Usage": 4,
+ "foreach": 5,
+ "numArgs": 7,
+ "varName": 7,
+ "body": 8,
+ "ForeachSingleStream": 2,
+ "(": 11,
+ ")": 11,
+ "&&": 2,
+ "%": 1,
+ "end": 2,
+ "items": 5,
+ "lrange": 1,
+ "ForeachMultiStream": 2,
+ "fromList": 2,
+ "_list": 4,
+ "index": 4,
+ "expr": 4,
+ "+": 1,
+ "isEmpty": 10,
+ "map": 1,
+ "MapSingleStream": 3,
+ "MapMultiStream": 3,
+ "rest": 22,
+ "select": 2,
+ "while": 6,
+ "take": 2,
+ "num": 3,
+ "||": 1,
+ "<": 1,
+ "toList": 1,
+ "res": 10,
+ "lappend": 8,
+ "#################################": 2,
+ "acc": 9,
+ "streams": 5,
+ "firsts": 6,
+ "restStreams": 6,
+ "uplevel": 4,
+ "nextItems": 4,
+ "msg": 1,
+ "code": 1,
+ "error": 1,
+ "level": 1,
+ "XDG": 11,
+ "variable": 4,
+ "DEFAULTS": 8,
+ "DATA_HOME": 4,
+ "CONFIG_HOME": 4,
+ "CACHE_HOME": 4,
+ "RUNTIME_DIR": 3,
+ "DATA_DIRS": 4,
+ "CONFIG_DIRS": 4,
+ "SetDefaults": 3,
+ "ne": 2,
+ "file": 9,
+ "join": 9,
+ "env": 8,
+ "HOME": 3,
+ ".local": 1,
+ "share": 3,
+ ".config": 1,
+ ".cache": 1,
+ "/usr": 2,
+ "local": 1,
+ "/etc": 1,
+ "xdg": 1,
+ "XDGVarSet": 4,
+ "var": 11,
+ "info": 1,
+ "exists": 1,
+ "XDG_": 4,
+ "Dir": 4,
+ "subdir": 16,
+ "dir": 5,
+ "dict": 2,
+ "get": 2,
+ "Dirs": 3,
+ "rawDirs": 3,
+ "split": 1,
+ "outDirs": 3,
+ "XDG_RUNTIME_DIR": 1
+ },
"Tea": {
"<%>": 1,
"template": 1,
@@ -45992,6 +65373,87 @@
"log": 1,
"defaultproperties": 1
},
+ "VCL": {
+ "sub": 23,
+ "vcl_recv": 2,
+ "{": 50,
+ "if": 14,
+ "(": 50,
+ "req.request": 18,
+ "&&": 14,
+ ")": 50,
+ "return": 33,
+ "pipe": 4,
+ ";": 48,
+ "}": 50,
+ "pass": 9,
+ "req.http.Authorization": 2,
+ "||": 4,
+ "req.http.Cookie": 2,
+ "lookup": 2,
+ "vcl_pipe": 2,
+ "vcl_pass": 2,
+ "vcl_hash": 2,
+ "set": 10,
+ "req.hash": 3,
+ "+": 17,
+ "req.url": 2,
+ "req.http.host": 4,
+ "else": 3,
+ "server.ip": 2,
+ "hash": 2,
+ "vcl_hit": 2,
+ "obj.cacheable": 2,
+ "deliver": 8,
+ "vcl_miss": 2,
+ "fetch": 3,
+ "vcl_fetch": 2,
+ "obj.http.Set": 1,
+ "-": 21,
+ "Cookie": 2,
+ "obj.prefetch": 1,
+ "s": 3,
+ "vcl_deliver": 2,
+ "vcl_discard": 1,
+ "discard": 2,
+ "vcl_prefetch": 1,
+ "vcl_timeout": 1,
+ "vcl_error": 2,
+ "obj.http.Content": 2,
+ "Type": 2,
+ "synthetic": 2,
+ "utf": 2,
+ "//W3C//DTD": 2,
+ "XHTML": 2,
+ "Strict//EN": 2,
+ "http": 3,
+ "//www.w3.org/TR/xhtml1/DTD/xhtml1": 2,
+ "strict.dtd": 2,
+ "obj.status": 4,
+ "obj.response": 6,
+ "req.xid": 2,
+ "//www.varnish": 1,
+ "cache.org/": 1,
+ "req.restarts": 1,
+ "req.http.x": 1,
+ "forwarded": 1,
+ "for": 1,
+ "req.http.X": 3,
+ "Forwarded": 3,
+ "For": 3,
+ "client.ip": 2,
+ "hash_data": 3,
+ "beresp.ttl": 2,
+ "<": 1,
+ "beresp.http.Set": 1,
+ "beresp.http.Vary": 1,
+ "hit_for_pass": 1,
+ "obj.http.Retry": 1,
+ "After": 1,
+ "vcl_init": 1,
+ "ok": 2,
+ "vcl_fini": 1
+ },
"Verilog": {
"////////////////////////////////////////////////////////////////////////////////": 14,
"//": 117,
@@ -47325,17 +66787,140 @@
"return": 1
},
"XML": {
- "": 4,
- "version=": 6,
+ "": 11,
+ "version=": 17,
+ "encoding=": 7,
+ "": 7,
+ "ToolsVersion=": 6,
+ "DefaultTargets=": 5,
+ "xmlns=": 8,
+ "": 21,
+ "Project=": 12,
+ "Condition=": 37,
+ "": 26,
+ "": 6,
+ "Debug": 10,
+ " ": 6,
+ "": 6,
+ "AnyCPU": 10,
+ " ": 6,
+ "": 5,
+ "{": 6,
+ "D9BF15": 1,
+ "-": 90,
+ "D10": 1,
+ "ABAD688E8B": 1,
+ "}": 6,
+ " ": 5,
+ "": 4,
+ "Exe": 4,
+ " ": 4,
+ "": 2,
+ "Properties": 3,
+ " ": 2,
+ "": 5,
+ "csproj_sample": 1,
+ " ": 5,
+ "": 4,
+ "csproj": 1,
+ "sample": 6,
+ " ": 4,
+ "": 5,
+ "v4.5.1": 5,
+ " ": 5,
+ "": 3,
+ " ": 3,
+ "": 3,
+ "true": 24,
+ " ": 3,
+ " ": 25,
+ "": 6,
+ " ": 6,
+ "": 5,
+ " ": 5,
+ "": 6,
+ "full": 4,
+ " ": 6,
+ "": 7,
+ "false": 11,
+ " ": 7,
+ "": 8,
+ "bin": 11,
+ " ": 8,
+ "": 6,
+ "DEBUG": 3,
+ ";": 52,
+ "TRACE": 6,
+ " ": 6,
+ "": 4,
+ "prompt": 4,
+ " ": 4,
+ "": 8,
+ " ": 8,
+ "pdbonly": 3,
+ "Release": 6,
+ "": 26,
+ "": 30,
+ "Include=": 78,
+ " ": 26,
+ "": 10,
+ "": 5,
+ " ": 7,
+ "": 2,
+ " ": 2,
+ "cfa7a11": 1,
+ "a5cd": 1,
+ "bd7b": 1,
+ "b210d4d51a29": 1,
+ "fsproj_sample": 2,
+ "": 1,
+ " ": 1,
+ "": 3,
+ "fsproj": 1,
+ " ": 3,
+ "": 2,
+ " ": 2,
+ "": 5,
+ "fsproj_sample.XML": 2,
+ " ": 5,
+ "": 2,
+ " ": 2,
+ "": 2,
+ "True": 13,
+ " ": 2,
+ "": 5,
+ "": 1,
+ " ": 1,
+ "": 1,
+ "": 1,
+ "": 2,
+ "(": 65,
+ "MSBuildExtensionsPath32": 2,
+ ")": 58,
+ "..": 1,
+ "Microsoft": 2,
+ "SDKs": 1,
+ "F#": 1,
+ "Framework": 1,
+ "v4.0": 1,
+ "Microsoft.FSharp.Targets": 2,
+ " ": 2,
+ " ": 1,
+ "": 1,
+ "VisualStudio": 1,
+ "v": 1,
+ "VisualStudioVersion": 1,
+ "FSharp": 1,
+ " ": 1,
+ " ": 1,
"": 1,
- "name=": 223,
+ "name=": 227,
"xmlns": 2,
"ea=": 2,
- "": 2,
+ "": 4,
"This": 21,
"easyant": 3,
"module.ant": 1,
- "sample": 2,
"file": 3,
"is": 123,
"optionnal": 1,
@@ -47349,7 +66934,7 @@
"own": 2,
"specific": 8,
"target.": 1,
- " ": 2,
+ " ": 4,
"": 2,
"": 2,
"my": 2,
@@ -47378,7 +66963,7 @@
"this": 77,
"a": 128,
"module.ivy": 1,
- "for": 59,
+ "for": 60,
"java": 1,
"standard": 1,
"application": 2,
@@ -47394,14 +66979,13 @@
"description=": 2,
"": 1,
"": 1,
- "": 1,
+ "": 4,
"org=": 1,
"rev=": 1,
"conf=": 1,
"default": 9,
"junit": 2,
"test": 7,
- "-": 49,
"/": 6,
" ": 1,
"": 1,
@@ -47413,7 +66997,7 @@
"": 1,
"": 1,
"": 120,
- "": 120,
+ "": 121,
"IObservedChange": 5,
"generic": 3,
"interface": 4,
@@ -47427,9 +67011,7 @@
"used": 19,
"both": 2,
"Changing": 5,
- "(": 52,
"i.e.": 23,
- ")": 45,
"Changed": 4,
"Observables.": 2,
"In": 6,
@@ -47443,15 +67025,15 @@
"casting": 1,
"between": 15,
"changes.": 2,
- " ": 121,
+ " ": 122,
" ": 120,
- "The": 74,
+ "The": 75,
"object": 42,
"has": 16,
"raised": 1,
"change.": 12,
"name": 7,
- "of": 75,
+ "of": 76,
"property": 74,
"changed": 18,
"on": 35,
@@ -47547,7 +67129,7 @@
"itself": 2,
"changes": 13,
".": 20,
- "It": 1,
+ "It": 2,
"important": 6,
"implement": 5,
"Changing/Changed": 1,
@@ -47589,7 +67171,6 @@
"ItemChanging": 2,
"ItemChanged": 2,
"properties": 29,
- ";": 10,
"implementing": 2,
"rebroadcast": 2,
"through": 3,
@@ -47625,7 +67206,7 @@
"string": 13,
"distinguish": 12,
"arbitrarily": 2,
- "by": 13,
+ "by": 14,
"client.": 2,
"Listen": 4,
"provides": 6,
@@ -47637,7 +67218,7 @@
"to.": 7,
"": 12,
"": 84,
- "A": 19,
+ "A": 21,
"identical": 11,
"types": 10,
"one": 27,
@@ -47649,7 +67230,6 @@
"particular": 2,
"registered.": 2,
"message.": 1,
- "True": 6,
"posted": 3,
"Type.": 2,
"Registers": 3,
@@ -47683,7 +67263,7 @@
"allows": 15,
"log": 2,
"attached.": 1,
- "data": 1,
+ "data": 2,
"structure": 1,
"representation": 1,
"memoizing": 2,
@@ -47725,7 +67305,6 @@
"evicted": 2,
"because": 2,
"Invalidate": 2,
- "full": 1,
"Evaluates": 1,
"returning": 1,
"cached": 2,
@@ -47943,7 +67522,6 @@
"notification": 6,
"Attempts": 1,
"expression": 3,
- "false": 2,
"expression.": 1,
"entire": 1,
"able": 1,
@@ -48033,7 +67611,7 @@
"private": 1,
"field.": 1,
"Reference": 1,
- "Use": 13,
+ "Use": 15,
"custom": 4,
"raiseAndSetIfChanged": 1,
"doesn": 1,
@@ -48109,7 +67687,40 @@
"setup.": 12,
" ": 1,
"": 1,
- "encoding=": 1,
+ "": 1,
+ " ": 1,
+ "c67af951": 1,
+ "d8d6376993e7": 1,
+ "nproj_sample": 2,
+ "": 1,
+ " ": 1,
+ "": 1,
+ "Net": 1,
+ " ": 1,
+ "": 1,
+ "ProgramFiles": 1,
+ "Nemerle": 3,
+ " ": 1,
+ "": 1,
+ "NemerleBinPathRoot": 1,
+ "NemerleVersion": 1,
+ " ": 1,
+ "nproj": 1,
+ "OutputPath": 1,
+ "AssemblyName": 1,
+ ".xml": 1,
+ "": 3,
+ " ": 3,
+ "": 1,
+ "False": 1,
+ " ": 1,
+ "": 2,
+ "Nemerle.dll": 1,
+ " ": 2,
+ "": 1,
+ "Nemerle.Linq.dll": 1,
+ " ": 1,
+ "": 1,
"": 1,
"TS": 1,
"": 1,
@@ -48150,7 +67761,443 @@
"English": 1,
"Ingl": 1,
"": 1,
- " ": 1
+ "": 1,
+ "": 1,
+ "": 1,
+ "": 1,
+ "Sample": 2,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ "": 1,
+ "Hugh": 2,
+ "Bot": 2,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ "package": 1,
+ "nuget": 1,
+ "just": 1,
+ "works": 1,
+ "": 1,
+ "http": 2,
+ "//hubot.github.com": 1,
+ " ": 1,
+ " ": 1,
+ "": 1,
+ "https": 1,
+ "//github.com/github/hubot/LICENSEmd": 1,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ " ": 1,
+ "": 1,
+ "": 1,
+ "src=": 1,
+ "target=": 1,
+ " ": 1,
+ " ": 1,
+ "MyCommon": 1,
+ "": 1,
+ "Name=": 1,
+ "": 1,
+ "Text=": 1,
+ " ": 1,
+ "D377F": 1,
+ "A798": 1,
+ "B3FD04C": 1,
+ "": 1,
+ "vbproj_sample.Module1": 1,
+ " ": 1,
+ "vbproj_sample": 1,
+ "vbproj": 3,
+ "": 1,
+ "Console": 3,
+ " ": 1,
+ "": 2,
+ " ": 2,
+ "": 2,
+ " ": 2,
+ "sample.xml": 2,
+ "": 2,
+ " ": 2,
+ "": 1,
+ "On": 2,
+ " ": 1,
+ "": 1,
+ "Binary": 1,
+ " ": 1,
+ "": 1,
+ "Off": 1,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ "": 3,
+ " ": 3,
+ "": 3,
+ "Application.myapp": 1,
+ " ": 3,
+ "": 3,
+ "": 1,
+ " ": 1,
+ "Resources.resx": 1,
+ "Settings.settings": 1,
+ "": 1,
+ " ": 1,
+ "": 1,
+ "": 3,
+ "VbMyResourcesResXFileCodeGenerator": 1,
+ " ": 3,
+ "": 3,
+ "Resources.Designer.vb": 1,
+ " ": 3,
+ "": 2,
+ "My.Resources": 1,
+ " ": 2,
+ "": 1,
+ "Designer": 1,
+ " ": 1,
+ " ": 1,
+ "MyApplicationCodeGenerator": 1,
+ "Application.Designer.vb": 1,
+ "": 2,
+ "SettingsSingleFileGenerator": 1,
+ "My": 1,
+ "Settings.Designer.vb": 1,
+ "Label=": 11,
+ "": 2,
+ "Win32": 2,
+ " ": 2,
+ "BF6EED48": 1,
+ "BF18": 1,
+ "C54": 1,
+ "F": 1,
+ "BBF19EEDC7C": 1,
+ "": 1,
+ "ManagedCProj": 1,
+ " ": 1,
+ "vcxprojsample": 1,
+ "": 2,
+ "Application": 2,
+ " ": 2,
+ "": 2,
+ " ": 2,
+ "": 2,
+ "v120": 2,
+ " ": 2,
+ "": 2,
+ " ": 2,
+ "": 2,
+ "Unicode": 2,
+ " ": 2,
+ "": 4,
+ " ": 4,
+ "": 2,
+ " ": 2,
+ "": 2,
+ "": 8,
+ "Level3": 2,
+ "": 1,
+ "Disabled": 1,
+ " ": 1,
+ "": 2,
+ "WIN32": 2,
+ "_DEBUG": 1,
+ "%": 2,
+ "PreprocessorDefinitions": 2,
+ " ": 2,
+ "": 4,
+ " ": 4,
+ " ": 6,
+ "": 2,
+ "": 2,
+ " ": 2,
+ "": 2,
+ "": 2,
+ " ": 2,
+ "": 2,
+ " ": 2,
+ "NDEBUG": 1,
+ "": 2,
+ "": 4,
+ "": 2,
+ "Create": 2,
+ "": 2,
+ "": 10,
+ "": 3,
+ "FC737F1": 1,
+ "C7A5": 1,
+ "A066": 1,
+ "A32D752A2FF": 1,
+ " ": 3,
+ "": 3,
+ "cpp": 1,
+ "c": 1,
+ "cc": 1,
+ "cxx": 1,
+ "def": 1,
+ "odl": 1,
+ "idl": 1,
+ "hpj": 1,
+ "bat": 1,
+ "asm": 1,
+ "asmx": 1,
+ " ": 3,
+ " ": 10,
+ "BD": 1,
+ "b04": 1,
+ "EB": 1,
+ "FBE52EBFB": 1,
+ "h": 1,
+ "hh": 1,
+ "hpp": 1,
+ "hxx": 1,
+ "hm": 1,
+ "inl": 1,
+ "inc": 1,
+ "xsd": 1,
+ "DA6AB6": 1,
+ "F800": 1,
+ "c08": 1,
+ "B7A": 1,
+ "BB121AAD01": 1,
+ "rc": 1,
+ "ico": 1,
+ "cur": 1,
+ "bmp": 1,
+ "dlg": 1,
+ "rc2": 1,
+ "rct": 1,
+ "rgs": 1,
+ "gif": 1,
+ "jpg": 1,
+ "jpeg": 1,
+ "jpe": 1,
+ "resx": 1,
+ "tiff": 1,
+ "tif": 1,
+ "png": 1,
+ "wav": 1,
+ "mfcribbon": 1,
+ "ms": 1,
+ "Header": 2,
+ "Files": 7,
+ " ": 2,
+ "Resource": 2,
+ "": 1,
+ "Source": 3,
+ "": 1,
+ "": 1,
+ "compatVersion=": 1,
+ "": 1,
+ "FreeMedForms": 1,
+ " ": 1,
+ "": 1,
+ "C": 1,
+ "Eric": 1,
+ "MAEKER": 1,
+ "MD": 1,
+ " ": 1,
+ "": 1,
+ "GPLv3": 1,
+ " ": 1,
+ "": 1,
+ "Patient": 1,
+ " ": 1,
+ "XML": 1,
+ "form": 1,
+ "loader/saver": 1,
+ "FreeMedForms.": 1,
+ "": 1,
+ "//www.freemedforms.com/": 1,
+ " ": 1,
+ "": 1,
+ " ": 1,
+ " ": 1
+ },
+ "Xojo": {
+ "#tag": 88,
+ "Class": 3,
+ "Protected": 1,
+ "App": 1,
+ "Inherits": 1,
+ "Application": 1,
+ "Constant": 3,
+ "Name": 31,
+ "kEditClear": 1,
+ "Type": 34,
+ "String": 3,
+ "Dynamic": 3,
+ "False": 14,
+ "Default": 9,
+ "Scope": 4,
+ "Public": 3,
+ "#Tag": 5,
+ "Instance": 5,
+ "Platform": 5,
+ "Windows": 2,
+ "Language": 5,
+ "Definition": 5,
+ "Linux": 2,
+ "EndConstant": 3,
+ "kFileQuit": 1,
+ "kFileQuitShortcut": 1,
+ "Mac": 1,
+ "OS": 1,
+ "ViewBehavior": 2,
+ "EndViewBehavior": 2,
+ "End": 27,
+ "EndClass": 1,
+ "Report": 2,
+ "Begin": 23,
+ "BillingReport": 1,
+ "Compatibility": 2,
+ "Units": 1,
+ "Width": 3,
+ "PageHeader": 1,
+ "Height": 5,
+ "Body": 1,
+ "PageFooter": 1,
+ "EndReport": 1,
+ "ReportCode": 1,
+ "EndReportCode": 1,
+ "Dim": 3,
+ "dbFile": 3,
+ "As": 4,
+ "FolderItem": 1,
+ "db": 1,
+ "New": 1,
+ "SQLiteDatabase": 1,
+ "GetFolderItem": 1,
+ "(": 7,
+ ")": 7,
+ "db.DatabaseFile": 1,
+ "If": 4,
+ "db.Connect": 1,
+ "Then": 1,
+ "db.SQLExecute": 2,
+ "_": 1,
+ "+": 5,
+ "db.Error": 1,
+ "then": 1,
+ "MsgBox": 3,
+ "db.ErrorMessage": 2,
+ "db.Rollback": 1,
+ "Else": 2,
+ "db.Commit": 1,
+ "Menu": 2,
+ "MainMenuBar": 1,
+ "MenuItem": 11,
+ "FileMenu": 1,
+ "SpecialMenu": 13,
+ "Text": 13,
+ "Index": 14,
+ "-": 14,
+ "AutoEnable": 13,
+ "True": 46,
+ "Visible": 41,
+ "QuitMenuItem": 1,
+ "FileQuit": 1,
+ "ShortcutKey": 6,
+ "Shortcut": 6,
+ "EditMenu": 1,
+ "EditUndo": 1,
+ "MenuModifier": 5,
+ "EditSeparator1": 1,
+ "EditCut": 1,
+ "EditCopy": 1,
+ "EditPaste": 1,
+ "EditClear": 1,
+ "EditSeparator2": 1,
+ "EditSelectAll": 1,
+ "UntitledSeparator": 1,
+ "AppleMenuItem": 1,
+ "AboutItem": 1,
+ "EndMenu": 1,
+ "Toolbar": 2,
+ "MyToolbar": 1,
+ "ToolButton": 2,
+ "FirstItem": 1,
+ "Caption": 3,
+ "HelpTag": 3,
+ "Style": 2,
+ "SecondItem": 1,
+ "EndToolbar": 1,
+ "Window": 2,
+ "Window1": 1,
+ "BackColor": 1,
+ "&": 1,
+ "cFFFFFF00": 1,
+ "Backdrop": 1,
+ "CloseButton": 1,
+ "Composite": 1,
+ "Frame": 1,
+ "FullScreen": 1,
+ "FullScreenButton": 1,
+ "HasBackColor": 1,
+ "ImplicitInstance": 1,
+ "LiveResize": 1,
+ "MacProcID": 1,
+ "MaxHeight": 1,
+ "MaximizeButton": 1,
+ "MaxWidth": 1,
+ "MenuBar": 1,
+ "MenuBarVisible": 1,
+ "MinHeight": 1,
+ "MinimizeButton": 1,
+ "MinWidth": 1,
+ "Placement": 1,
+ "Resizeable": 1,
+ "Title": 1,
+ "PushButton": 1,
+ "HelloWorldButton": 2,
+ "AutoDeactivate": 1,
+ "Bold": 1,
+ "ButtonStyle": 1,
+ "Cancel": 1,
+ "Enabled": 1,
+ "InitialParent": 1,
+ "Italic": 1,
+ "Left": 1,
+ "LockBottom": 1,
+ "LockedInPosition": 1,
+ "LockLeft": 1,
+ "LockRight": 1,
+ "LockTop": 1,
+ "TabIndex": 1,
+ "TabPanelIndex": 1,
+ "TabStop": 1,
+ "TextFont": 1,
+ "TextSize": 1,
+ "TextUnit": 1,
+ "Top": 1,
+ "Underline": 1,
+ "EndWindow": 1,
+ "WindowCode": 1,
+ "EndWindowCode": 1,
+ "Events": 1,
+ "Event": 1,
+ "Sub": 2,
+ "Action": 1,
+ "total": 4,
+ "Integer": 2,
+ "For": 1,
+ "i": 2,
+ "To": 1,
+ "Next": 1,
+ "Str": 1,
+ "EndEvent": 1,
+ "EndEvents": 1,
+ "ViewProperty": 28,
+ "true": 26,
+ "Group": 28,
+ "InitialValue": 23,
+ "EndViewProperty": 28,
+ "EditorType": 14,
+ "EnumValues": 2,
+ "EndEnumValues": 2
},
"XProc": {
"": 1,
@@ -48459,7 +68506,7 @@
},
"YAML": {
"gem": 1,
- "-": 16,
+ "-": 25,
"local": 1,
"gen": 1,
"rdoc": 2,
@@ -48471,17 +68518,266 @@
"numbers": 1,
"gempath": 1,
"/usr/local/rubygems": 1,
- "/home/gavin/.rubygems": 1
+ "/home/gavin/.rubygems": 1,
+ "http_interactions": 1,
+ "request": 1,
+ "method": 1,
+ "get": 1,
+ "uri": 1,
+ "http": 1,
+ "//example.com/": 1,
+ "body": 3,
+ "headers": 2,
+ "{": 1,
+ "}": 1,
+ "response": 2,
+ "status": 1,
+ "code": 1,
+ "message": 1,
+ "OK": 1,
+ "Content": 2,
+ "Type": 1,
+ "text/html": 1,
+ ";": 1,
+ "charset": 1,
+ "utf": 1,
+ "Length": 1,
+ "This": 1,
+ "is": 1,
+ "the": 1,
+ "http_version": 1,
+ "recorded_at": 1,
+ "Tue": 1,
+ "Nov": 1,
+ "GMT": 1,
+ "recorded_with": 1,
+ "VCR": 1
+ },
+ "Zephir": {
+ "%": 10,
+ "{": 58,
+ "#define": 1,
+ "MAX_FACTOR": 3,
+ "}": 52,
+ "namespace": 4,
+ "Test": 4,
+ ";": 91,
+ "#include": 9,
+ "static": 1,
+ "long": 3,
+ "fibonacci": 4,
+ "(": 59,
+ "n": 5,
+ ")": 57,
+ "if": 39,
+ "<": 2,
+ "return": 26,
+ "else": 11,
+ "-": 25,
+ "+": 5,
+ "class": 3,
+ "Cblock": 1,
+ "public": 22,
+ "function": 22,
+ "testCblock1": 1,
+ "int": 3,
+ "a": 6,
+ "testCblock2": 1,
+ "#ifdef": 1,
+ "HAVE_CONFIG_H": 1,
+ "#endif": 1,
+ "": 1,
+ "": 1,
+ "": 1,
+ "": 1,
+ "ZEPHIR_INIT_CLASS": 2,
+ "Test_Router_Exception": 2,
+ "ZEPHIR_REGISTER_CLASS_EX": 1,
+ "Router": 3,
+ "Exception": 4,
+ "test": 1,
+ "router_exception": 1,
+ "zend_exception_get_default": 1,
+ "TSRMLS_C": 1,
+ "NULL": 1,
+ "SUCCESS": 1,
+ "extern": 1,
+ "zend_class_entry": 1,
+ "*test_router_exception_ce": 1,
+ "php": 1,
+ "extends": 1,
+ "Route": 1,
+ "protected": 9,
+ "_pattern": 3,
+ "_compiledPattern": 3,
+ "_paths": 3,
+ "_methods": 5,
+ "_hostname": 3,
+ "_converters": 3,
+ "_id": 2,
+ "_name": 3,
+ "_beforeMatch": 3,
+ "__construct": 1,
+ "pattern": 37,
+ "paths": 7,
+ "null": 11,
+ "httpMethods": 6,
+ "this": 28,
+ "reConfigure": 2,
+ "let": 51,
+ "compilePattern": 2,
+ "var": 4,
+ "idPattern": 6,
+ "memstr": 10,
+ "str_replace": 6,
+ ".": 5,
+ "via": 1,
+ "extractNamedParams": 2,
+ "string": 6,
+ "char": 1,
+ "ch": 27,
+ "tmp": 4,
+ "matches": 5,
+ "boolean": 1,
+ "notValid": 5,
+ "false": 3,
+ "cursor": 4,
+ "cursorVar": 5,
+ "marker": 4,
+ "bracketCount": 7,
+ "parenthesesCount": 5,
+ "foundPattern": 6,
+ "intermediate": 4,
+ "numberMatches": 4,
+ "route": 12,
+ "item": 7,
+ "variable": 5,
+ "regexp": 7,
+ "strlen": 1,
+ "<=>": 5,
+ "0": 9,
+ "for": 4,
+ "in": 4,
+ "1": 3,
+ "substr": 3,
+ "break": 9,
+ "&&": 6,
+ "z": 2,
+ "Z": 2,
+ "true": 2,
+ "<='9')>": 1,
+ "_": 1,
+ "2": 2,
+ "continue": 1,
+ "[": 14,
+ "]": 14,
+ "moduleName": 5,
+ "controllerName": 7,
+ "actionName": 4,
+ "parts": 9,
+ "routePaths": 5,
+ "realClassName": 1,
+ "namespaceName": 1,
+ "pcrePattern": 4,
+ "compiledPattern": 4,
+ "extracted": 4,
+ "typeof": 2,
+ "throw": 1,
+ "new": 1,
+ "explode": 1,
+ "switch": 1,
+ "count": 1,
+ "case": 3,
+ "controller": 1,
+ "action": 1,
+ "array": 1,
+ "The": 1,
+ "contains": 1,
+ "invalid": 1,
+ "#": 1,
+ "array_merge": 1,
+ "//Update": 1,
+ "the": 1,
+ "s": 1,
+ "name": 5,
+ "*": 2,
+ "@return": 1,
+ "*/": 1,
+ "getName": 1,
+ "setName": 1,
+ "beforeMatch": 1,
+ "callback": 2,
+ "getBeforeMatch": 1,
+ "getRouteId": 1,
+ "getPattern": 1,
+ "getCompiledPattern": 1,
+ "getPaths": 1,
+ "getReversedPaths": 1,
+ "reversed": 4,
+ "path": 3,
+ "position": 3,
+ "setHttpMethods": 1,
+ "getHttpMethods": 1,
+ "setHostname": 1,
+ "hostname": 2,
+ "getHostname": 1,
+ "convert": 1,
+ "converter": 2,
+ "getConverters": 1
+ },
+ "Zimpl": {
+ "#": 2,
+ "param": 1,
+ "columns": 2,
+ ";": 7,
+ "set": 3,
+ "I": 3,
+ "{": 2,
+ "..": 1,
+ "}": 2,
+ "IxI": 6,
+ "*": 2,
+ "TABU": 4,
+ "[": 8,
+ "": 3,
+ "in": 5,
+ "]": 8,
+ "": 2,
+ "with": 1,
+ "(": 6,
+ "m": 4,
+ "i": 8,
+ "or": 3,
+ "n": 4,
+ "j": 8,
+ ")": 6,
+ "and": 1,
+ "abs": 2,
+ "-": 3,
+ "var": 1,
+ "x": 4,
+ "binary": 1,
+ "maximize": 1,
+ "queens": 1,
+ "sum": 2,
+ "subto": 1,
+ "c1": 1,
+ "forall": 1,
+ "do": 1,
+ "card": 2
}
},
"language_tokens": {
"ABAP": 1500,
"Agda": 376,
+ "Alloy": 1143,
"ApacheConf": 1449,
"Apex": 4408,
"AppleScript": 1862,
"Arduino": 20,
"AsciiDoc": 103,
+ "AspectJ": 324,
+ "Assembly": 21750,
"ATS": 4558,
"AutoHotkey": 3,
"Awk": 544,
@@ -48490,20 +68786,25 @@
"Brightscript": 579,
"C": 59053,
"C#": 278,
- "C++": 31181,
+ "C++": 34739,
"Ceylon": 50,
"Cirru": 244,
"Clojure": 510,
"COBOL": 90,
"CoffeeScript": 2951,
- "Common Lisp": 103,
+ "Common Lisp": 2186,
+ "Component Pascal": 825,
"Coq": 18259,
"Creole": 134,
+ "Crystal": 1506,
"CSS": 43867,
"Cuda": 290,
"Dart": 74,
"Diff": 16,
"DM": 169,
+ "Dogescript": 30,
+ "E": 601,
+ "Eagle": 30089,
"ECL": 281,
"edn": 227,
"Elm": 628,
@@ -48511,44 +68812,63 @@
"Erlang": 2928,
"fish": 636,
"Forth": 1516,
+ "Frege": 5564,
+ "Game Maker Language": 13310,
+ "GAMS": 363,
+ "GAP": 9944,
"GAS": 133,
- "GLSL": 3766,
+ "GLSL": 4033,
+ "Gnuplot": 1023,
"Gosu": 410,
- "Groovy": 69,
+ "Grammatical Framework": 10607,
+ "Groovy": 93,
"Groovy Server Pages": 91,
"Haml": 4,
"Handlebars": 69,
+ "Haskell": 302,
+ "HTML": 413,
"Hy": 155,
"IDL": 418,
"Idris": 148,
+ "Inform 7": 75,
"INI": 27,
"Ioke": 2,
+ "Isabelle": 136,
"Jade": 3,
"Java": 8987,
- "JavaScript": 76934,
+ "JavaScript": 76970,
"JSON": 183,
"JSON5": 57,
+ "JSONiq": 151,
"JSONLD": 18,
"Julia": 247,
+ "Kit": 6,
"Kotlin": 155,
"KRL": 25,
"Lasso": 9849,
+ "Latte": 759,
"Less": 39,
"LFE": 1711,
+ "Liquid": 633,
"Literate Agda": 478,
"Literate CoffeeScript": 275,
"LiveScript": 123,
"Logos": 93,
"Logtalk": 36,
"Lua": 724,
- "M": 23373,
+ "M": 23615,
"Makefile": 50,
"Markdown": 1,
+ "Mask": 74,
+ "Mathematica": 411,
"Matlab": 11942,
"Max": 714,
"MediaWiki": 766,
+ "Mercury": 31096,
"Monkey": 207,
+ "Moocode": 5234,
"MoonScript": 1718,
+ "MTML": 93,
"Nemerle": 17,
"NetLogo": 243,
"Nginx": 179,
@@ -48556,18 +68876,21 @@
"NSIS": 725,
"Nu": 116,
"Objective-C": 26518,
+ "Objective-C++": 6021,
"OCaml": 382,
"Omgrofl": 57,
"Opa": 28,
"OpenCL": 144,
"OpenEdge ABL": 762,
"Org": 358,
+ "Ox": 1006,
"Oxygene": 157,
+ "Pan": 130,
"Parrot Assembly": 6,
"Parrot Internal Representation": 5,
"Pascal": 30,
"PAWN": 3263,
- "Perl": 17497,
+ "Perl": 17979,
"Perl6": 372,
"PHP": 20724,
"Pod": 658,
@@ -48576,17 +68899,21 @@
"PowerShell": 12,
"Processing": 74,
"Prolog": 468,
+ "Propeller Spin": 13519,
"Protocol Buffer": 63,
- "Python": 5715,
- "R": 195,
+ "PureScript": 1652,
+ "Python": 6587,
+ "R": 1790,
"Racket": 331,
"Ragel in Ruby Host": 593,
"RDoc": 279,
- "Rebol": 11,
+ "Rebol": 533,
+ "Red": 816,
"RMarkdown": 19,
"RobotFramework": 483,
"Ruby": 3862,
"Rust": 3566,
+ "SAS": 93,
"Sass": 56,
"Scala": 750,
"Scaml": 4,
@@ -48594,17 +68921,29 @@
"Scilab": 69,
"SCSS": 39,
"Shell": 3744,
+ "ShellSession": 233,
+ "Shen": 3472,
"Slash": 187,
+ "Slim": 77,
+ "Smalltalk": 423,
+ "SourcePawn": 2080,
+ "SQL": 1485,
"Squirrel": 130,
- "Standard ML": 6405,
+ "Standard ML": 6567,
+ "Stata": 3133,
+ "STON": 100,
"Stylus": 76,
"SuperCollider": 133,
+ "Swift": 1128,
+ "SystemVerilog": 541,
+ "Tcl": 1133,
"Tea": 3,
"TeX": 2701,
"Turing": 44,
"TXL": 213,
"TypeScript": 109,
"UnrealScript": 2873,
+ "VCL": 545,
"Verilog": 3778,
"VHDL": 42,
"VimL": 20,
@@ -48612,21 +68951,27 @@
"Volt": 388,
"wisp": 1363,
"XC": 24,
- "XML": 5737,
+ "XML": 7057,
+ "Xojo": 807,
"XProc": 22,
"XQuery": 801,
"XSLT": 44,
"Xtend": 399,
- "YAML": 30
+ "YAML": 77,
+ "Zephir": 1085,
+ "Zimpl": 123
},
"languages": {
"ABAP": 1,
"Agda": 1,
+ "Alloy": 3,
"ApacheConf": 3,
"Apex": 6,
"AppleScript": 7,
"Arduino": 1,
"AsciiDoc": 3,
+ "AspectJ": 2,
+ "Assembly": 4,
"ATS": 10,
"AutoHotkey": 1,
"Awk": 1,
@@ -48635,20 +68980,25 @@
"Brightscript": 1,
"C": 29,
"C#": 2,
- "C++": 27,
+ "C++": 29,
"Ceylon": 1,
"Cirru": 9,
"Clojure": 7,
"COBOL": 4,
"CoffeeScript": 9,
- "Common Lisp": 1,
+ "Common Lisp": 3,
+ "Component Pascal": 2,
"Coq": 12,
"Creole": 1,
+ "Crystal": 3,
"CSS": 2,
"Cuda": 2,
"Dart": 1,
"Diff": 1,
"DM": 1,
+ "Dogescript": 1,
+ "E": 6,
+ "Eagle": 2,
"ECL": 1,
"edn": 1,
"Elm": 3,
@@ -48656,44 +69006,63 @@
"Erlang": 5,
"fish": 3,
"Forth": 7,
+ "Frege": 4,
+ "Game Maker Language": 13,
+ "GAMS": 1,
+ "GAP": 7,
"GAS": 1,
- "GLSL": 3,
+ "GLSL": 5,
+ "Gnuplot": 6,
"Gosu": 4,
- "Groovy": 2,
+ "Grammatical Framework": 41,
+ "Groovy": 5,
"Groovy Server Pages": 4,
"Haml": 1,
"Handlebars": 2,
+ "Haskell": 3,
+ "HTML": 2,
"Hy": 2,
"IDL": 4,
"Idris": 1,
+ "Inform 7": 2,
"INI": 2,
"Ioke": 1,
+ "Isabelle": 1,
"Jade": 1,
"Java": 6,
- "JavaScript": 20,
+ "JavaScript": 22,
"JSON": 4,
"JSON5": 2,
+ "JSONiq": 2,
"JSONLD": 1,
"Julia": 1,
+ "Kit": 1,
"Kotlin": 1,
"KRL": 1,
"Lasso": 4,
+ "Latte": 2,
"Less": 1,
"LFE": 4,
+ "Liquid": 2,
"Literate Agda": 1,
"Literate CoffeeScript": 1,
"LiveScript": 1,
"Logos": 1,
"Logtalk": 1,
"Lua": 3,
- "M": 28,
+ "M": 29,
"Makefile": 2,
"Markdown": 1,
+ "Mask": 1,
+ "Mathematica": 3,
"Matlab": 39,
"Max": 3,
"MediaWiki": 1,
+ "Mercury": 9,
"Monkey": 1,
+ "Moocode": 3,
"MoonScript": 1,
+ "MTML": 1,
"Nemerle": 1,
"NetLogo": 1,
"Nginx": 1,
@@ -48701,18 +69070,21 @@
"NSIS": 2,
"Nu": 2,
"Objective-C": 19,
+ "Objective-C++": 2,
"OCaml": 2,
"Omgrofl": 1,
"Opa": 2,
"OpenCL": 2,
"OpenEdge ABL": 5,
"Org": 1,
+ "Ox": 3,
"Oxygene": 1,
+ "Pan": 1,
"Parrot Assembly": 1,
"Parrot Internal Representation": 1,
"Pascal": 1,
"PAWN": 1,
- "Perl": 14,
+ "Perl": 15,
"Perl6": 3,
"PHP": 9,
"Pod": 1,
@@ -48721,17 +69093,21 @@
"PowerShell": 2,
"Processing": 1,
"Prolog": 3,
+ "Propeller Spin": 10,
"Protocol Buffer": 1,
- "Python": 7,
- "R": 3,
+ "PureScript": 4,
+ "Python": 10,
+ "R": 7,
"Racket": 2,
"Ragel in Ruby Host": 3,
"RDoc": 1,
- "Rebol": 1,
+ "Rebol": 6,
+ "Red": 2,
"RMarkdown": 1,
"RobotFramework": 3,
"Ruby": 17,
"Rust": 1,
+ "SAS": 2,
"Sass": 2,
"Scala": 4,
"Scaml": 1,
@@ -48739,17 +69115,29 @@
"Scilab": 3,
"SCSS": 1,
"Shell": 37,
+ "ShellSession": 3,
+ "Shen": 3,
"Slash": 1,
+ "Slim": 1,
+ "Smalltalk": 3,
+ "SourcePawn": 1,
+ "SQL": 5,
"Squirrel": 1,
- "Standard ML": 4,
+ "Standard ML": 5,
+ "Stata": 7,
+ "STON": 7,
"Stylus": 1,
"SuperCollider": 1,
+ "Swift": 43,
+ "SystemVerilog": 4,
+ "Tcl": 2,
"Tea": 1,
"TeX": 2,
"Turing": 1,
"TXL": 1,
"TypeScript": 3,
"UnrealScript": 2,
+ "VCL": 2,
"Verilog": 13,
"VHDL": 1,
"VimL": 2,
@@ -48757,12 +69145,15 @@
"Volt": 1,
"wisp": 1,
"XC": 1,
- "XML": 4,
+ "XML": 13,
+ "Xojo": 6,
"XProc": 1,
"XQuery": 1,
"XSLT": 1,
"Xtend": 2,
- "YAML": 1
+ "YAML": 2,
+ "Zephir": 5,
+ "Zimpl": 1
},
- "md5": "cfe1841f5e4b2ab14a1ad53ad64523b8"
+ "md5": "896b4ca841571551a8fe421eec69b0f6"
}
\ No newline at end of file
diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml
index 135f367c..4d8481e5 100644
--- a/lib/linguist/vendor.yml
+++ b/lib/linguist/vendor.yml
@@ -10,7 +10,7 @@
## Vendor Conventions ##
# Caches
-- cache/
+- (^|/)cache/
# Dependencies
- ^[Dd]ependencies/
@@ -98,6 +98,16 @@
# AngularJS
- (^|/)angular([^.]*)(\.min)?\.js$
+# D3.js
+- (^|\/)d3(\.v\d+)?([^.]*)(\.min)?\.js$
+
+# React
+- (^|/)react(-[^.]*)?(\.min)?\.js$
+
+# Modernizr
+- (^|/)modernizr\-\d\.\d+(\.\d+)?(\.min)?\.js$
+- (^|/)modernizr\.custom\.\d+\.js$
+
## Python ##
# django
@@ -128,6 +138,7 @@
# Visual Studio IntelliSense
- -vsdoc\.js$
+- \.intellisense\.js$
# jQuery validation plugin (MS bundles this with asp.net mvc)
- (^|/)jquery([^.]*)\.validate(\.unobtrusive)?(\.min)?\.js$
@@ -137,7 +148,7 @@
- (^|/)[Mm]icrosoft([Mm]vc)?([Aa]jax|[Vv]alidation)(\.debug)?\.js$
# NuGet
-- ^[Pp]ackages/
+- ^[Pp]ackages\/.+\.\d+\/
# ExtJS
- (^|/)extjs/.*?\.js$
@@ -157,6 +168,9 @@
- (^|/)extjs/src/
- (^|/)extjs/welcome/
+# Html5shiv
+- (^|/)html5shiv(\.min)?\.js$
+
# Samples folders
- ^[Ss]amples/
@@ -182,3 +196,15 @@
# .DS_Store's
- .[Dd][Ss]_[Ss]tore$
+
+# Mercury --use-subdirs
+- Mercury/
+
+# R packages
+- ^vignettes/
+- ^inst/extdata/
+
+# Octicons
+- octicons.css
+- octicons.min.css
+- sprockets-octicons.scss
diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb
new file mode 100644
index 00000000..6704b3fb
--- /dev/null
+++ b/lib/linguist/version.rb
@@ -0,0 +1,3 @@
+module Linguist
+ VERSION = "2.12.0"
+end
diff --git a/samples/Alloy/file_system.als b/samples/Alloy/file_system.als
new file mode 100644
index 00000000..60fd959b
--- /dev/null
+++ b/samples/Alloy/file_system.als
@@ -0,0 +1,59 @@
+module examples/systems/file_system
+
+/*
+ * Model of a generic file system.
+ */
+
+abstract sig Object {}
+
+sig Name {}
+
+sig File extends Object {} { some d: Dir | this in d.entries.contents }
+
+sig Dir extends Object {
+ entries: set DirEntry,
+ parent: lone Dir
+} {
+ parent = this.~@contents.~@entries
+ all e1, e2 : entries | e1.name = e2.name => e1 = e2
+ this !in this.^@parent
+ this != Root => Root in this.^@parent
+}
+
+one sig Root extends Dir {} { no parent }
+
+lone sig Cur extends Dir {}
+
+sig DirEntry {
+ name: Name,
+ contents: Object
+} {
+ one this.~entries
+}
+
+
+/**
+ * all directories besides root have one parent
+ */
+pred OneParent_buggyVersion {
+ all d: Dir - Root | one d.parent
+}
+
+/**
+ * all directories besides root have one parent
+ */
+pred OneParent_correctVersion {
+ all d: Dir - Root | (one d.parent && one contents.d)
+}
+
+/**
+ * Only files may be linked (that is, have more than one entry)
+ * That is, all directories are the contents of at most one directory entry
+ */
+pred NoDirAliases {
+ all o: Dir | lone o.~contents
+}
+
+check { OneParent_buggyVersion => NoDirAliases } for 5 expect 1
+
+check { OneParent_correctVersion => NoDirAliases } for 5 expect 0
diff --git a/samples/Alloy/marksweepgc.als b/samples/Alloy/marksweepgc.als
new file mode 100644
index 00000000..b8081e3f
--- /dev/null
+++ b/samples/Alloy/marksweepgc.als
@@ -0,0 +1,83 @@
+module examples/systems/marksweepgc
+
+/*
+ * Model of mark and sweep garbage collection.
+ */
+
+// a node in the heap
+sig Node {}
+
+sig HeapState {
+ left, right : Node -> lone Node,
+ marked : set Node,
+ freeList : lone Node
+}
+
+pred clearMarks[hs, hs' : HeapState] {
+ // clear marked set
+ no hs'.marked
+ // left and right fields are unchanged
+ hs'.left = hs.left
+ hs'.right = hs.right
+}
+
+/**
+ * simulate the recursion of the mark() function using transitive closure
+ */
+fun reachable[hs: HeapState, n: Node] : set Node {
+ n + n.^(hs.left + hs.right)
+}
+
+pred mark[hs: HeapState, from : Node, hs': HeapState] {
+ hs'.marked = hs.reachable[from]
+ hs'.left = hs.left
+ hs'.right = hs.right
+}
+
+/**
+ * complete hack to simulate behavior of code to set freeList
+ */
+pred setFreeList[hs, hs': HeapState] {
+ // especially hackish
+ hs'.freeList.*(hs'.left) in (Node - hs.marked)
+ all n: Node |
+ (n !in hs.marked) => {
+ no hs'.right[n]
+ hs'.left[n] in (hs'.freeList.*(hs'.left))
+ n in hs'.freeList.*(hs'.left)
+ } else {
+ hs'.left[n] = hs.left[n]
+ hs'.right[n] = hs.right[n]
+ }
+ hs'.marked = hs.marked
+}
+
+pred GC[hs: HeapState, root : Node, hs': HeapState] {
+ some hs1, hs2: HeapState |
+ hs.clearMarks[hs1] && hs1.mark[root, hs2] && hs2.setFreeList[hs']
+}
+
+assert Soundness1 {
+ all h, h' : HeapState, root : Node |
+ h.GC[root, h'] =>
+ (all live : h.reachable[root] | {
+ h'.left[live] = h.left[live]
+ h'.right[live] = h.right[live]
+ })
+}
+
+assert Soundness2 {
+ all h, h' : HeapState, root : Node |
+ h.GC[root, h'] =>
+ no h'.reachable[root] & h'.reachable[h'.freeList]
+}
+
+assert Completeness {
+ all h, h' : HeapState, root : Node |
+ h.GC[root, h'] =>
+ (Node - h'.reachable[root]) in h'.reachable[h'.freeList]
+}
+
+check Soundness1 for 3 expect 0
+check Soundness2 for 3 expect 0
+check Completeness for 3 expect 0
diff --git a/samples/Alloy/views.als b/samples/Alloy/views.als
new file mode 100644
index 00000000..3a5ab82b
--- /dev/null
+++ b/samples/Alloy/views.als
@@ -0,0 +1,217 @@
+module examples/systems/views
+
+/*
+ * Model of views in object-oriented programming.
+ *
+ * Two object references, called the view and the backing,
+ * are related by a view mechanism when changes to the
+ * backing are automatically propagated to the view. Note
+ * that the state of a view need not be a projection of the
+ * state of the backing; the keySet method of Map, for
+ * example, produces two view relationships, and for the
+ * one in which the map is modified by changes to the key
+ * set, the value of the new map cannot be determined from
+ * the key set. Note that in the iterator view mechanism,
+ * the iterator is by this definition the backing object,
+ * since changes are propagated from iterator to collection
+ * and not vice versa. Oddly, a reference may be a view of
+ * more than one backing: there can be two iterators on the
+ * same collection, eg. A reference cannot be a view under
+ * more than one view type.
+ *
+ * A reference is made dirty when it is a backing for a view
+ * with which it is no longer related by the view invariant.
+ * This usually happens when a view is modified, either
+ * directly or via another backing. For example, changing a
+ * collection directly when it has an iterator invalidates
+ * it, as does changing the collection through one iterator
+ * when there are others.
+ *
+ * More work is needed if we want to model more closely the
+ * failure of an iterator when its collection is invalidated.
+ *
+ * As a terminological convention, when there are two
+ * complementary view relationships, we will give them types
+ * t and t'. For example, KeySetView propagates from map to
+ * set, and KeySetView' propagates from set to map.
+ *
+ * author: Daniel Jackson
+ */
+
+open util/ordering[State] as so
+open util/relation as rel
+
+sig Ref {}
+sig Object {}
+
+-- t->b->v in views when v is view of type t of backing b
+-- dirty contains refs that have been invalidated
+sig State {
+ refs: set Ref,
+ obj: refs -> one Object,
+ views: ViewType -> refs -> refs,
+ dirty: set refs
+-- , anyviews: Ref -> Ref -- for visualization
+ }
+-- {anyviews = ViewType.views}
+
+sig Map extends Object {
+ keys: set Ref,
+ map: keys -> one Ref
+ }{all s: State | keys + Ref.map in s.refs}
+sig MapRef extends Ref {}
+fact {State.obj[MapRef] in Map}
+
+sig Iterator extends Object {
+ left, done: set Ref,
+ lastRef: lone done
+ }{all s: State | done + left + lastRef in s.refs}
+sig IteratorRef extends Ref {}
+fact {State.obj[IteratorRef] in Iterator}
+
+sig Set extends Object {
+ elts: set Ref
+ }{all s: State | elts in s.refs}
+sig SetRef extends Ref {}
+fact {State.obj[SetRef] in Set}
+
+abstract sig ViewType {}
+one sig KeySetView, KeySetView', IteratorView extends ViewType {}
+fact ViewTypes {
+ State.views[KeySetView] in MapRef -> SetRef
+ State.views[KeySetView'] in SetRef -> MapRef
+ State.views[IteratorView] in IteratorRef -> SetRef
+ all s: State | s.views[KeySetView] = ~(s.views[KeySetView'])
+ }
+
+/**
+ * mods is refs modified directly or by view mechanism
+ * doesn't handle possibility of modifying an object and its view at once?
+ * should we limit frame conds to non-dirty refs?
+ */
+pred modifies [pre, post: State, rs: set Ref] {
+ let vr = pre.views[ViewType], mods = rs.*vr {
+ all r: pre.refs - mods | pre.obj[r] = post.obj[r]
+ all b: mods, v: pre.refs, t: ViewType |
+ b->v in pre.views[t] => viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]]
+ post.dirty = pre.dirty +
+ {b: pre.refs | some v: Ref, t: ViewType |
+ b->v in pre.views[t] && !viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]]
+ }
+ }
+ }
+
+pred allocates [pre, post: State, rs: set Ref] {
+ no rs & pre.refs
+ post.refs = pre.refs + rs
+ }
+
+/**
+ * models frame condition that limits change to view object from v to v' when backing object changes to b'
+ */
+pred viewFrame [t: ViewType, v, v', b': Object] {
+ t in KeySetView => v'.elts = dom [b'.map]
+ t in KeySetView' => b'.elts = dom [v'.map]
+ t in KeySetView' => (b'.elts) <: (v.map) = (b'.elts) <: (v'.map)
+ t in IteratorView => v'.elts = b'.left + b'.done
+ }
+
+pred MapRef.keySet [pre, post: State, setRefs: SetRef] {
+ post.obj[setRefs].elts = dom [pre.obj[this].map]
+ modifies [pre, post, none]
+ allocates [pre, post, setRefs]
+ post.views = pre.views + KeySetView->this->setRefs + KeySetView'->setRefs->this
+ }
+
+pred MapRef.put [pre, post: State, k, v: Ref] {
+ post.obj[this].map = pre.obj[this].map ++ k->v
+ modifies [pre, post, this]
+ allocates [pre, post, none]
+ post.views = pre.views
+ }
+
+pred SetRef.iterator [pre, post: State, iterRef: IteratorRef] {
+ let i = post.obj[iterRef] {
+ i.left = pre.obj[this].elts
+ no i.done + i.lastRef
+ }
+ modifies [pre,post,none]
+ allocates [pre, post, iterRef]
+ post.views = pre.views + IteratorView->iterRef->this
+ }
+
+pred IteratorRef.remove [pre, post: State] {
+ let i = pre.obj[this], i' = post.obj[this] {
+ i'.left = i.left
+ i'.done = i.done - i.lastRef
+ no i'.lastRef
+ }
+ modifies [pre,post,this]
+ allocates [pre, post, none]
+ pre.views = post.views
+ }
+
+pred IteratorRef.next [pre, post: State, ref: Ref] {
+ let i = pre.obj[this], i' = post.obj[this] {
+ ref in i.left
+ i'.left = i.left - ref
+ i'.done = i.done + ref
+ i'.lastRef = ref
+ }
+ modifies [pre, post, this]
+ allocates [pre, post, none]
+ pre.views = post.views
+ }
+
+pred IteratorRef.hasNext [s: State] {
+ some s.obj[this].left
+ }
+
+assert zippishOK {
+ all
+ ks, vs: SetRef,
+ m: MapRef,
+ ki, vi: IteratorRef,
+ k, v: Ref |
+ let s0=so/first,
+ s1=so/next[s0],
+ s2=so/next[s1],
+ s3=so/next[s2],
+ s4=so/next[s3],
+ s5=so/next[s4],
+ s6=so/next[s5],
+ s7=so/next[s6] |
+ ({
+ precondition [s0, ks, vs, m]
+ no s0.dirty
+ ks.iterator [s0, s1, ki]
+ vs.iterator [s1, s2, vi]
+ ki.hasNext [s2]
+ vi.hasNext [s2]
+ ki.this/next [s2, s3, k]
+ vi.this/next [s3, s4, v]
+ m.put [s4, s5, k, v]
+ ki.remove [s5, s6]
+ vi.remove [s6, s7]
+ } => no State.dirty)
+ }
+
+pred precondition [pre: State, ks, vs, m: Ref] {
+ // all these conditions and other errors discovered in scope of 6 but 8,3
+ // in initial state, must have view invariants hold
+ (all t: ViewType, b, v: pre.refs |
+ b->v in pre.views[t] => viewFrame [t, pre.obj[v], pre.obj[v], pre.obj[b]])
+ // sets are not aliases
+-- ks != vs
+ // sets are not views of map
+-- no (ks+vs)->m & ViewType.pre.views
+ // no iterator currently on either set
+-- no Ref->(ks+vs) & ViewType.pre.views
+ }
+
+check zippishOK for 6 but 8 State, 3 ViewType expect 1
+
+/**
+ * experiment with controlling heap size
+ */
+fact {all s: State | #s.obj < 5}
diff --git a/samples/AspectJ/CacheAspect.aj b/samples/AspectJ/CacheAspect.aj
new file mode 100644
index 00000000..bfab7bc4
--- /dev/null
+++ b/samples/AspectJ/CacheAspect.aj
@@ -0,0 +1,41 @@
+package com.blogspot.miguelinlas3.aspectj.cache;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.aspectj.lang.JoinPoint;
+
+import com.blogspot.miguelinlas3.aspectj.cache.marker.Cachable;
+
+/**
+ * This simple aspect simulates the behaviour of a very simple cache
+ *
+ * @author migue
+ *
+ */
+public aspect CacheAspect {
+
+ public pointcut cache(Cachable cachable): execution(@Cachable * * (..)) && @annotation(cachable);
+
+ Object around(Cachable cachable): cache(cachable){
+
+ String evaluatedKey = this.evaluateKey(cachable.scriptKey(), thisJoinPoint);
+
+ if(cache.containsKey(evaluatedKey)){
+ System.out.println("Cache hit for key " + evaluatedKey);
+ return this.cache.get(evaluatedKey);
+ }
+
+ System.out.println("Cache miss for key " + evaluatedKey);
+ Object value = proceed(cachable);
+ cache.put(evaluatedKey, value);
+ return value;
+ }
+
+ protected String evaluateKey(String key, JoinPoint joinPoint) {
+ // TODO add some smart staff to allow simple scripting in @Cachable annotation
+ return key;
+ }
+
+ protected Map cache = new WeakHashMap();
+}
diff --git a/samples/AspectJ/OptimizeRecursionCache.aj b/samples/AspectJ/OptimizeRecursionCache.aj
new file mode 100644
index 00000000..ed1e8695
--- /dev/null
+++ b/samples/AspectJ/OptimizeRecursionCache.aj
@@ -0,0 +1,50 @@
+package aspects.caching;
+
+import java.util.Map;
+
+/**
+ * Cache aspect for optimize recursive functions.
+ *
+ * @author Migueli
+ * @date 05/11/2013
+ * @version 1.0
+ *
+ */
+public abstract aspect OptimizeRecursionCache {
+
+ @SuppressWarnings("rawtypes")
+ private Map _cache;
+
+ public OptimizeRecursionCache() {
+ _cache = getCache();
+ }
+
+ @SuppressWarnings("rawtypes")
+ abstract public Map getCache();
+
+ abstract public pointcut operation(Object o);
+
+ pointcut topLevelOperation(Object o): operation(o) && !cflowbelow(operation(Object));
+
+ before(Object o) : topLevelOperation(o) {
+ System.out.println("Seeking value for " + o);
+ }
+
+ Object around(Object o) : operation(o) {
+ Object cachedValue = _cache.get(o);
+ if (cachedValue != null) {
+ System.out.println("Found cached value for " + o + ": " + cachedValue);
+ return cachedValue;
+ }
+ return proceed(o);
+ }
+
+ @SuppressWarnings("unchecked")
+ after(Object o) returning(Object result) : topLevelOperation(o) {
+ _cache.put(o, result);
+ }
+
+ after(Object o) returning(Object result) : topLevelOperation(o) {
+ System.out.println("cache size: " + _cache.size());
+ }
+}
diff --git a/samples/Assembly/ASSEMBLE.inc b/samples/Assembly/ASSEMBLE.inc
new file mode 100644
index 00000000..c4ffdae3
--- /dev/null
+++ b/samples/Assembly/ASSEMBLE.inc
@@ -0,0 +1,2048 @@
+
+; flat assembler core
+; Copyright (c) 1999-2014, Tomasz Grysztar.
+; All rights reserved.
+
+assembler:
+ xor eax,eax
+ mov [stub_size],eax
+ mov [current_pass],ax
+ mov [resolver_flags],eax
+ mov [number_of_sections],eax
+ mov [actual_fixups_size],eax
+ assembler_loop:
+ mov eax,[labels_list]
+ mov [tagged_blocks],eax
+ mov eax,[additional_memory]
+ mov [free_additional_memory],eax
+ mov eax,[additional_memory_end]
+ mov [structures_buffer],eax
+ mov esi,[source_start]
+ mov edi,[code_start]
+ xor eax,eax
+ mov dword [adjustment],eax
+ mov dword [adjustment+4],eax
+ mov [addressing_space],eax
+ mov [error_line],eax
+ mov [counter],eax
+ mov [format_flags],eax
+ mov [number_of_relocations],eax
+ mov [undefined_data_end],eax
+ mov [file_extension],eax
+ mov [next_pass_needed],al
+ mov [output_format],al
+ mov [adjustment_sign],al
+ mov [code_type],16
+ call init_addressing_space
+ pass_loop:
+ call assemble_line
+ jnc pass_loop
+ mov eax,[additional_memory_end]
+ cmp eax,[structures_buffer]
+ je pass_done
+ sub eax,18h
+ mov eax,[eax+4]
+ mov [current_line],eax
+ jmp missing_end_directive
+ pass_done:
+ call close_pass
+ mov eax,[labels_list]
+ check_symbols:
+ cmp eax,[memory_end]
+ jae symbols_checked
+ test byte [eax+8],8
+ jz symbol_defined_ok
+ mov cx,[current_pass]
+ cmp cx,[eax+18]
+ jne symbol_defined_ok
+ test byte [eax+8],1
+ jz symbol_defined_ok
+ sub cx,[eax+16]
+ cmp cx,1
+ jne symbol_defined_ok
+ and byte [eax+8],not 1
+ or [next_pass_needed],-1
+ symbol_defined_ok:
+ test byte [eax+8],10h
+ jz use_prediction_ok
+ mov cx,[current_pass]
+ and byte [eax+8],not 10h
+ test byte [eax+8],20h
+ jnz check_use_prediction
+ cmp cx,[eax+18]
+ jne use_prediction_ok
+ test byte [eax+8],8
+ jz use_prediction_ok
+ jmp use_misprediction
+ check_use_prediction:
+ test byte [eax+8],8
+ jz use_misprediction
+ cmp cx,[eax+18]
+ je use_prediction_ok
+ use_misprediction:
+ or [next_pass_needed],-1
+ use_prediction_ok:
+ test byte [eax+8],40h
+ jz check_next_symbol
+ and byte [eax+8],not 40h
+ test byte [eax+8],4
+ jnz define_misprediction
+ mov cx,[current_pass]
+ test byte [eax+8],80h
+ jnz check_define_prediction
+ cmp cx,[eax+16]
+ jne check_next_symbol
+ test byte [eax+8],1
+ jz check_next_symbol
+ jmp define_misprediction
+ check_define_prediction:
+ test byte [eax+8],1
+ jz define_misprediction
+ cmp cx,[eax+16]
+ je check_next_symbol
+ define_misprediction:
+ or [next_pass_needed],-1
+ check_next_symbol:
+ add eax,LABEL_STRUCTURE_SIZE
+ jmp check_symbols
+ symbols_checked:
+ cmp [next_pass_needed],0
+ jne next_pass
+ mov eax,[error_line]
+ or eax,eax
+ jz assemble_ok
+ mov [current_line],eax
+ cmp [error],undefined_symbol
+ jne error_confirmed
+ mov eax,[error_info]
+ or eax,eax
+ jz error_confirmed
+ test byte [eax+8],1
+ jnz next_pass
+ error_confirmed:
+ call error_handler
+ error_handler:
+ mov eax,[error]
+ sub eax,error_handler
+ add [esp],eax
+ ret
+ next_pass:
+ inc [current_pass]
+ mov ax,[current_pass]
+ cmp ax,[passes_limit]
+ je code_cannot_be_generated
+ jmp assembler_loop
+ assemble_ok:
+ ret
+
+create_addressing_space:
+ mov ebx,[addressing_space]
+ test ebx,ebx
+ jz init_addressing_space
+ test byte [ebx+0Ah],1
+ jnz illegal_instruction
+ mov eax,edi
+ sub eax,[ebx+18h]
+ mov [ebx+1Ch],eax
+ init_addressing_space:
+ mov ebx,[tagged_blocks]
+ mov dword [ebx-4],10h
+ mov dword [ebx-8],20h
+ sub ebx,8+20h
+ cmp ebx,edi
+ jbe out_of_memory
+ mov [tagged_blocks],ebx
+ mov [addressing_space],ebx
+ xor eax,eax
+ mov [ebx],edi
+ mov [ebx+4],eax
+ mov [ebx+8],eax
+ mov [ebx+10h],eax
+ mov [ebx+14h],eax
+ mov [ebx+18h],edi
+ mov [ebx+1Ch],eax
+ ret
+
+assemble_line:
+ mov eax,[tagged_blocks]
+ sub eax,100h
+ cmp edi,eax
+ ja out_of_memory
+ lods byte [esi]
+ cmp al,1
+ je assemble_instruction
+ jb source_end
+ cmp al,3
+ jb define_label
+ je define_constant
+ cmp al,4
+ je label_addressing_space
+ cmp al,0Fh
+ je new_line
+ cmp al,13h
+ je code_type_setting
+ cmp al,10h
+ jne illegal_instruction
+ lods byte [esi]
+ jmp segment_prefix
+ code_type_setting:
+ lods byte [esi]
+ mov [code_type],al
+ jmp instruction_assembled
+ new_line:
+ lods dword [esi]
+ mov [current_line],eax
+ mov [prefixed_instruction],0
+ cmp [symbols_file],0
+ je continue_line
+ cmp [next_pass_needed],0
+ jne continue_line
+ mov ebx,[tagged_blocks]
+ mov dword [ebx-4],1
+ mov dword [ebx-8],14h
+ sub ebx,8+14h
+ cmp ebx,edi
+ jbe out_of_memory
+ mov [tagged_blocks],ebx
+ mov [ebx],eax
+ mov [ebx+4],edi
+ mov eax,[addressing_space]
+ mov [ebx+8],eax
+ mov al,[code_type]
+ mov [ebx+10h],al
+ continue_line:
+ cmp byte [esi],0Fh
+ je line_assembled
+ jmp assemble_line
+ define_label:
+ lods dword [esi]
+ cmp eax,0Fh
+ jb invalid_use_of_symbol
+ je reserved_word_used_as_symbol
+ mov ebx,eax
+ lods byte [esi]
+ mov [label_size],al
+ call make_label
+ jmp continue_line
+ make_label:
+ mov eax,edi
+ xor edx,edx
+ xor cl,cl
+ mov ebp,[addressing_space]
+ sub eax,[ds:ebp]
+ sbb edx,[ds:ebp+4]
+ sbb cl,[ds:ebp+8]
+ jp label_value_ok
+ call recoverable_overflow
+ label_value_ok:
+ mov [address_sign],cl
+ test byte [ds:ebp+0Ah],1
+ jnz make_virtual_label
+ or byte [ebx+9],1
+ xchg eax,[ebx]
+ xchg edx,[ebx+4]
+ mov ch,[ebx+9]
+ shr ch,1
+ and ch,1
+ neg ch
+ sub eax,[ebx]
+ sbb edx,[ebx+4]
+ sbb ch,cl
+ mov dword [adjustment],eax
+ mov dword [adjustment+4],edx
+ mov [adjustment_sign],ch
+ or al,ch
+ or eax,edx
+ setnz ah
+ jmp finish_label
+ make_virtual_label:
+ and byte [ebx+9],not 1
+ cmp eax,[ebx]
+ mov [ebx],eax
+ setne ah
+ cmp edx,[ebx+4]
+ mov [ebx+4],edx
+ setne al
+ or ah,al
+ finish_label:
+ mov ebp,[addressing_space]
+ mov ch,[ds:ebp+9]
+ mov cl,[label_size]
+ mov edx,[ds:ebp+14h]
+ mov ebp,[ds:ebp+10h]
+ finish_label_symbol:
+ mov al,[address_sign]
+ xor al,[ebx+9]
+ and al,10b
+ or ah,al
+ xor [ebx+9],al
+ cmp cl,[ebx+10]
+ mov [ebx+10],cl
+ setne al
+ or ah,al
+ cmp ch,[ebx+11]
+ mov [ebx+11],ch
+ setne al
+ or ah,al
+ cmp ebp,[ebx+12]
+ mov [ebx+12],ebp
+ setne al
+ or ah,al
+ or ch,ch
+ jz label_symbol_ok
+ cmp edx,[ebx+20]
+ mov [ebx+20],edx
+ setne al
+ or ah,al
+ label_symbol_ok:
+ mov cx,[current_pass]
+ xchg [ebx+16],cx
+ mov edx,[current_line]
+ mov [ebx+28],edx
+ and byte [ebx+8],not 2
+ test byte [ebx+8],1
+ jz new_label
+ cmp cx,[ebx+16]
+ je symbol_already_defined
+ btr dword [ebx+8],10
+ jc requalified_label
+ inc cx
+ sub cx,[ebx+16]
+ setnz al
+ or ah,al
+ jz label_made
+ test byte [ebx+8],8
+ jz label_made
+ mov cx,[current_pass]
+ cmp cx,[ebx+18]
+ jne label_made
+ requalified_label:
+ or [next_pass_needed],-1
+ label_made:
+ ret
+ new_label:
+ or byte [ebx+8],1
+ ret
+ define_constant:
+ lods dword [esi]
+ inc esi
+ cmp eax,0Fh
+ jb invalid_use_of_symbol
+ je reserved_word_used_as_symbol
+ mov edx,[eax+8]
+ push edx
+ cmp [current_pass],0
+ je get_constant_value
+ test dl,4
+ jnz get_constant_value
+ mov cx,[current_pass]
+ cmp cx,[eax+16]
+ je get_constant_value
+ or dl,4
+ mov [eax+8],dl
+ get_constant_value:
+ push eax
+ mov al,byte [esi-1]
+ push eax
+ or [size_override],-1
+ call get_value
+ pop ebx
+ mov ch,bl
+ pop ebx
+ pop ecx
+ test cl,4
+ jnz constant_referencing_mode_ok
+ and byte [ebx+8],not 4
+ constant_referencing_mode_ok:
+ xor cl,cl
+ mov ch,[value_type]
+ cmp ch,3
+ je invalid_use_of_symbol
+ make_constant:
+ and byte [ebx+9],not 1
+ cmp eax,[ebx]
+ mov [ebx],eax
+ setne ah
+ cmp edx,[ebx+4]
+ mov [ebx+4],edx
+ setne al
+ or ah,al
+ mov al,[value_sign]
+ xor al,[ebx+9]
+ and al,10b
+ or ah,al
+ xor [ebx+9],al
+ cmp cl,[ebx+10]
+ mov [ebx+10],cl
+ setne al
+ or ah,al
+ cmp ch,[ebx+11]
+ mov [ebx+11],ch
+ setne al
+ or ah,al
+ xor edx,edx
+ cmp edx,[ebx+12]
+ mov [ebx+12],edx
+ setne al
+ or ah,al
+ or ch,ch
+ jz constant_symbol_ok
+ mov edx,[symbol_identifier]
+ cmp edx,[ebx+20]
+ mov [ebx+20],edx
+ setne al
+ or ah,al
+ constant_symbol_ok:
+ mov cx,[current_pass]
+ xchg [ebx+16],cx
+ mov edx,[current_line]
+ mov [ebx+28],edx
+ test byte [ebx+8],1
+ jz new_constant
+ cmp cx,[ebx+16]
+ jne redeclare_constant
+ test byte [ebx+8],2
+ jz symbol_already_defined
+ or byte [ebx+8],4
+ and byte [ebx+9],not 4
+ jmp instruction_assembled
+ redeclare_constant:
+ btr dword [ebx+8],10
+ jc requalified_constant
+ inc cx
+ sub cx,[ebx+16]
+ setnz al
+ or ah,al
+ jz instruction_assembled
+ test byte [ebx+8],4
+ jnz instruction_assembled
+ test byte [ebx+8],8
+ jz instruction_assembled
+ mov cx,[current_pass]
+ cmp cx,[ebx+18]
+ jne instruction_assembled
+ requalified_constant:
+ or [next_pass_needed],-1
+ jmp instruction_assembled
+ new_constant:
+ or byte [ebx+8],1+2
+ jmp instruction_assembled
+ label_addressing_space:
+ lods dword [esi]
+ cmp eax,0Fh
+ jb invalid_use_of_symbol
+ je reserved_word_used_as_symbol
+ mov cx,[current_pass]
+ test byte [eax+8],1
+ jz make_addressing_space_label
+ cmp cx,[eax+16]
+ je symbol_already_defined
+ test byte [eax+9],4
+ jnz make_addressing_space_label
+ or [next_pass_needed],-1
+ make_addressing_space_label:
+ mov dx,[eax+8]
+ and dx,not (2 or 100h)
+ or dx,1 or 4 or 400h
+ mov [eax+8],dx
+ mov [eax+16],cx
+ mov edx,[current_line]
+ mov [eax+28],edx
+ mov ebx,[addressing_space]
+ mov [eax],ebx
+ or byte [ebx+0Ah],2
+ jmp continue_line
+ assemble_instruction:
+; mov [operand_size],0
+; mov [size_override],0
+; mov [operand_prefix],0
+; mov [opcode_prefix],0
+ and dword [operand_size],0
+; mov [rex_prefix],0
+; mov [vex_required],0
+; mov [vex_register],0
+; mov [immediate_size],0
+ and dword [rex_prefix],0
+ call instruction_handler
+ instruction_handler:
+ movzx ebx,word [esi]
+ mov al,[esi+2]
+ add esi,3
+ add [esp],ebx
+ ret
+ instruction_assembled:
+ mov al,[esi]
+ cmp al,0Fh
+ je line_assembled
+ or al,al
+ jnz extra_characters_on_line
+ line_assembled:
+ clc
+ ret
+ source_end:
+ dec esi
+ stc
+ ret
+
+org_directive:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_qword_value
+ mov cl,[value_type]
+ test cl,1
+ jnz invalid_use_of_symbol
+ push eax
+ mov ebx,[addressing_space]
+ mov eax,edi
+ sub eax,[ebx+18h]
+ mov [ebx+1Ch],eax
+ test byte [ebx+0Ah],1
+ jnz in_virtual
+ call init_addressing_space
+ jmp org_space_ok
+ in_virtual:
+ call close_virtual_addressing_space
+ call init_addressing_space
+ or byte [ebx+0Ah],1
+ org_space_ok:
+ pop eax
+ mov [ebx+9],cl
+ mov cl,[value_sign]
+ sub [ebx],eax
+ sbb [ebx+4],edx
+ sbb byte [ebx+8],cl
+ jp org_value_ok
+ call recoverable_overflow
+ org_value_ok:
+ mov edx,[symbol_identifier]
+ mov [ebx+14h],edx
+ cmp [output_format],1
+ ja instruction_assembled
+ cmp edi,[code_start]
+ jne instruction_assembled
+ cmp eax,100h
+ jne instruction_assembled
+ bts [format_flags],0
+ jmp instruction_assembled
+label_directive:
+ lods byte [esi]
+ cmp al,2
+ jne invalid_argument
+ lods dword [esi]
+ cmp eax,0Fh
+ jb invalid_use_of_symbol
+ je reserved_word_used_as_symbol
+ inc esi
+ mov ebx,eax
+ mov [label_size],0
+ lods byte [esi]
+ cmp al,':'
+ je get_label_size
+ dec esi
+ cmp al,11h
+ jne label_size_ok
+ get_label_size:
+ lods word [esi]
+ cmp al,11h
+ jne invalid_argument
+ mov [label_size],ah
+ label_size_ok:
+ cmp byte [esi],80h
+ je get_free_label_value
+ call make_label
+ jmp instruction_assembled
+ get_free_label_value:
+ inc esi
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ push ebx ecx
+ or byte [ebx+8],4
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_address_value
+ or bh,bh
+ setnz ch
+ xchg ch,cl
+ mov bp,cx
+ shl ebp,16
+ xchg bl,bh
+ mov bp,bx
+ pop ecx ebx
+ and byte [ebx+8],not 4
+ mov ch,[value_type]
+ test ch,1
+ jnz invalid_use_of_symbol
+ make_free_label:
+ and byte [ebx+9],not 1
+ cmp eax,[ebx]
+ mov [ebx],eax
+ setne ah
+ cmp edx,[ebx+4]
+ mov [ebx+4],edx
+ setne al
+ or ah,al
+ mov edx,[address_symbol]
+ mov cl,[label_size]
+ call finish_label_symbol
+ jmp instruction_assembled
+load_directive:
+ lods byte [esi]
+ cmp al,2
+ jne invalid_argument
+ lods dword [esi]
+ cmp eax,0Fh
+ jb invalid_use_of_symbol
+ je reserved_word_used_as_symbol
+ inc esi
+ push eax
+ mov al,1
+ cmp byte [esi],11h
+ jne load_size_ok
+ lods byte [esi]
+ lods byte [esi]
+ load_size_ok:
+ cmp al,8
+ ja invalid_value
+ mov [operand_size],al
+ and dword [value],0
+ and dword [value+4],0
+ lods byte [esi]
+ cmp al,82h
+ jne invalid_argument
+ call get_data_point
+ jc value_loaded
+ push esi edi
+ mov esi,ebx
+ mov edi,value
+ rep movs byte [edi],[esi]
+ pop edi esi
+ value_loaded:
+ mov [value_sign],0
+ mov eax,dword [value]
+ mov edx,dword [value+4]
+ pop ebx
+ xor cx,cx
+ jmp make_constant
+ get_data_point:
+ mov ebx,[addressing_space]
+ mov ecx,edi
+ sub ecx,[ebx+18h]
+ mov [ebx+1Ch],ecx
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],11h
+ jne get_data_address
+ cmp word [esi+1+4],'):'
+ jne get_data_address
+ inc esi
+ lods dword [esi]
+ add esi,2
+ cmp byte [esi],'('
+ jne invalid_argument
+ inc esi
+ cmp eax,0Fh
+ jbe reserved_word_used_as_symbol
+ mov edx,undefined_symbol
+ test byte [eax+8],1
+ jz addressing_space_unavailable
+ mov edx,symbol_out_of_scope
+ mov cx,[eax+16]
+ cmp cx,[current_pass]
+ jne addressing_space_unavailable
+ test byte [eax+9],4
+ jz invalid_use_of_symbol
+ mov ebx,eax
+ mov ax,[current_pass]
+ mov [ebx+18],ax
+ or byte [ebx+8],8
+ cmp [symbols_file],0
+ je get_addressing_space
+ cmp [next_pass_needed],0
+ jne get_addressing_space
+ call store_label_reference
+ get_addressing_space:
+ mov ebx,[ebx]
+ get_data_address:
+ push ebx
+ cmp byte [esi],'.'
+ je invalid_value
+ or [size_override],-1
+ call get_address_value
+ pop ebp
+ call calculate_relative_offset
+ cmp [next_pass_needed],0
+ jne data_address_type_ok
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ data_address_type_ok:
+ mov ebx,edi
+ xor ecx,ecx
+ add ebx,eax
+ adc edx,ecx
+ mov eax,ebx
+ sub eax,[ds:ebp+18h]
+ sbb edx,ecx
+ jnz bad_data_address
+ mov cl,[operand_size]
+ add eax,ecx
+ cmp eax,[ds:ebp+1Ch]
+ ja bad_data_address
+ clc
+ ret
+ addressing_space_unavailable:
+ cmp [error_line],0
+ jne get_data_address
+ push [current_line]
+ pop [error_line]
+ mov [error],edx
+ mov [error_info],eax
+ jmp get_data_address
+ bad_data_address:
+ call recoverable_overflow
+ stc
+ ret
+store_directive:
+ cmp byte [esi],11h
+ je sized_store
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ call get_byte_value
+ xor edx,edx
+ movzx eax,al
+ mov [operand_size],1
+ jmp store_value_ok
+ sized_store:
+ or [size_override],-1
+ call get_value
+ store_value_ok:
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ mov dword [value],eax
+ mov dword [value+4],edx
+ lods byte [esi]
+ cmp al,80h
+ jne invalid_argument
+ call get_data_point
+ jc instruction_assembled
+ push esi edi
+ mov esi,value
+ mov edi,ebx
+ rep movs byte [edi],[esi]
+ mov eax,edi
+ pop edi esi
+ cmp ebx,[undefined_data_end]
+ jae instruction_assembled
+ cmp eax,[undefined_data_start]
+ jbe instruction_assembled
+ mov [undefined_data_start],eax
+ jmp instruction_assembled
+
+display_directive:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],0
+ jne display_byte
+ inc esi
+ lods dword [esi]
+ mov ecx,eax
+ push edi
+ mov edi,[tagged_blocks]
+ sub edi,8
+ sub edi,eax
+ cmp edi,[esp]
+ jbe out_of_memory
+ mov [tagged_blocks],edi
+ rep movs byte [edi],[esi]
+ stos dword [edi]
+ xor eax,eax
+ stos dword [edi]
+ pop edi
+ inc esi
+ jmp display_next
+ display_byte:
+ call get_byte_value
+ push edi
+ mov edi,[tagged_blocks]
+ sub edi,8+1
+ mov [tagged_blocks],edi
+ stos byte [edi]
+ mov eax,1
+ stos dword [edi]
+ dec eax
+ stos dword [edi]
+ pop edi
+ display_next:
+ cmp edi,[tagged_blocks]
+ ja out_of_memory
+ lods byte [esi]
+ cmp al,','
+ je display_directive
+ dec esi
+ jmp instruction_assembled
+show_display_buffer:
+ mov eax,[tagged_blocks]
+ or eax,eax
+ jz display_done
+ mov esi,[labels_list]
+ cmp esi,eax
+ je display_done
+ display_messages:
+ sub esi,8
+ mov eax,[esi+4]
+ mov ecx,[esi]
+ sub esi,ecx
+ test eax,eax
+ jnz skip_block
+ push esi
+ call display_block
+ pop esi
+ skip_block:
+ cmp esi,[tagged_blocks]
+ jne display_messages
+ display_done:
+ ret
+
+times_directive:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ cmp eax,0
+ je zero_times
+ cmp byte [esi],':'
+ jne times_argument_ok
+ inc esi
+ times_argument_ok:
+ push [counter]
+ push [counter_limit]
+ mov [counter_limit],eax
+ mov [counter],1
+ times_loop:
+ mov eax,esp
+ sub eax,100h
+ jc stack_overflow
+ cmp eax,[stack_limit]
+ jb stack_overflow
+ push esi
+ or [prefixed_instruction],-1
+ call continue_line
+ mov eax,[counter_limit]
+ cmp [counter],eax
+ je times_done
+ inc [counter]
+ pop esi
+ jmp times_loop
+ times_done:
+ pop eax
+ pop [counter_limit]
+ pop [counter]
+ jmp instruction_assembled
+ zero_times:
+ call skip_symbol
+ jnc zero_times
+ jmp instruction_assembled
+
+virtual_directive:
+ lods byte [esi]
+ cmp al,80h
+ jne virtual_at_current
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_address_value
+ mov ebp,[address_symbol]
+ or bh,bh
+ setnz ch
+ jmp set_virtual
+ virtual_at_current:
+ dec esi
+ mov ebp,[addressing_space]
+ mov al,[ds:ebp+9]
+ mov [value_type],al
+ mov eax,edi
+ xor edx,edx
+ xor cl,cl
+ sub eax,[ds:ebp]
+ sbb edx,[ds:ebp+4]
+ sbb cl,[ds:ebp+8]
+ mov [address_sign],cl
+ mov bx,[ds:ebp+10h]
+ mov cx,[ds:ebp+10h+2]
+ xchg bh,bl
+ xchg ch,cl
+ mov ebp,[ds:ebp+14h]
+ set_virtual:
+ xchg bl,bh
+ xchg cl,ch
+ shl ecx,16
+ mov cx,bx
+ push ecx eax
+ call allocate_structure_data
+ mov word [ebx],virtual_directive-instruction_handler
+ mov ecx,[addressing_space]
+ mov [ebx+12],ecx
+ mov [ebx+8],edi
+ mov ecx,[current_line]
+ mov [ebx+4],ecx
+ mov ebx,[addressing_space]
+ mov eax,edi
+ sub eax,[ebx+18h]
+ mov [ebx+1Ch],eax
+ call init_addressing_space
+ or byte [ebx+0Ah],1
+ pop eax
+ mov cl,[address_sign]
+ not eax
+ not edx
+ not cl
+ add eax,1
+ adc edx,0
+ adc cl,0
+ add eax,edi
+ adc edx,0
+ adc cl,0
+ mov [ebx],eax
+ mov [ebx+4],edx
+ mov [ebx+8],cl
+ pop dword [ebx+10h]
+ mov [ebx+14h],ebp
+ mov al,[value_type]
+ test al,1
+ jnz invalid_use_of_symbol
+ mov [ebx+9],al
+ jmp instruction_assembled
+ allocate_structure_data:
+ mov ebx,[structures_buffer]
+ sub ebx,18h
+ cmp ebx,[free_additional_memory]
+ jb out_of_memory
+ mov [structures_buffer],ebx
+ ret
+ find_structure_data:
+ mov ebx,[structures_buffer]
+ scan_structures:
+ cmp ebx,[additional_memory_end]
+ je no_such_structure
+ cmp ax,[ebx]
+ je structure_data_found
+ add ebx,18h
+ jmp scan_structures
+ structure_data_found:
+ ret
+ no_such_structure:
+ stc
+ ret
+ end_virtual:
+ call find_structure_data
+ jc unexpected_instruction
+ push ebx
+ call close_virtual_addressing_space
+ pop ebx
+ mov eax,[ebx+12]
+ mov [addressing_space],eax
+ mov edi,[ebx+8]
+ remove_structure_data:
+ push esi edi
+ mov ecx,ebx
+ sub ecx,[structures_buffer]
+ shr ecx,2
+ lea esi,[ebx-4]
+ lea edi,[esi+18h]
+ std
+ rep movs dword [edi],[esi]
+ cld
+ add [structures_buffer],18h
+ pop edi esi
+ ret
+ close_virtual_addressing_space:
+ mov ebx,[addressing_space]
+ mov eax,edi
+ sub eax,[ebx+18h]
+ mov [ebx+1Ch],eax
+ test byte [ebx+0Ah],2
+ jz addressing_space_closed
+ push esi edi ecx edx
+ mov ecx,eax
+ mov eax,[tagged_blocks]
+ mov dword [eax-4],11h
+ mov dword [eax-8],ecx
+ sub eax,8
+ sub eax,ecx
+ mov [tagged_blocks],eax
+ lea edi,[eax+ecx-1]
+ xchg eax,[ebx+18h]
+ lea esi,[eax+ecx-1]
+ mov eax,edi
+ sub eax,esi
+ std
+ shr ecx,1
+ jnc virtual_byte_ok
+ movs byte [edi],[esi]
+ virtual_byte_ok:
+ dec esi
+ dec edi
+ shr ecx,1
+ jnc virtual_word_ok
+ movs word [edi],[esi]
+ virtual_word_ok:
+ sub esi,2
+ sub edi,2
+ rep movs dword [edi],[esi]
+ cld
+ xor edx,edx
+ add [ebx],eax
+ adc dword [ebx+4],edx
+ adc byte [ebx+8],dl
+ pop edx ecx edi esi
+ addressing_space_closed:
+ ret
+repeat_directive:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ cmp eax,0
+ je zero_repeat
+ call allocate_structure_data
+ mov word [ebx],repeat_directive-instruction_handler
+ xchg eax,[counter_limit]
+ mov [ebx+10h],eax
+ mov eax,1
+ xchg eax,[counter]
+ mov [ebx+14h],eax
+ mov [ebx+8],esi
+ mov eax,[current_line]
+ mov [ebx+4],eax
+ jmp instruction_assembled
+ end_repeat:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ call find_structure_data
+ jc unexpected_instruction
+ mov eax,[counter_limit]
+ inc [counter]
+ cmp [counter],eax
+ jbe continue_repeating
+ stop_repeat:
+ mov eax,[ebx+10h]
+ mov [counter_limit],eax
+ mov eax,[ebx+14h]
+ mov [counter],eax
+ call remove_structure_data
+ jmp instruction_assembled
+ continue_repeating:
+ mov esi,[ebx+8]
+ jmp instruction_assembled
+ zero_repeat:
+ mov al,[esi]
+ or al,al
+ jz missing_end_directive
+ cmp al,0Fh
+ jne extra_characters_on_line
+ call find_end_repeat
+ jmp instruction_assembled
+ find_end_repeat:
+ call find_structure_end
+ cmp ax,repeat_directive-instruction_handler
+ jne unexpected_instruction
+ ret
+while_directive:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ call allocate_structure_data
+ mov word [ebx],while_directive-instruction_handler
+ mov eax,1
+ xchg eax,[counter]
+ mov [ebx+10h],eax
+ mov [ebx+8],esi
+ mov eax,[current_line]
+ mov [ebx+4],eax
+ do_while:
+ push ebx
+ call calculate_logical_expression
+ or al,al
+ jnz while_true
+ mov al,[esi]
+ or al,al
+ jz missing_end_directive
+ cmp al,0Fh
+ jne extra_characters_on_line
+ stop_while:
+ call find_end_while
+ pop ebx
+ mov eax,[ebx+10h]
+ mov [counter],eax
+ call remove_structure_data
+ jmp instruction_assembled
+ while_true:
+ pop ebx
+ jmp instruction_assembled
+ end_while:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ call find_structure_data
+ jc unexpected_instruction
+ mov eax,[ebx+4]
+ mov [current_line],eax
+ inc [counter]
+ jz too_many_repeats
+ mov esi,[ebx+8]
+ jmp do_while
+ find_end_while:
+ call find_structure_end
+ cmp ax,while_directive-instruction_handler
+ jne unexpected_instruction
+ ret
+if_directive:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ call calculate_logical_expression
+ mov dl,al
+ mov al,[esi]
+ or al,al
+ jz missing_end_directive
+ cmp al,0Fh
+ jne extra_characters_on_line
+ or dl,dl
+ jnz if_true
+ call find_else
+ jc instruction_assembled
+ mov al,[esi]
+ cmp al,1
+ jne else_true
+ cmp word [esi+1],if_directive-instruction_handler
+ jne else_true
+ add esi,4
+ jmp if_directive
+ if_true:
+ xor al,al
+ make_if_structure:
+ call allocate_structure_data
+ mov word [ebx],if_directive-instruction_handler
+ mov byte [ebx+2],al
+ mov eax,[current_line]
+ mov [ebx+4],eax
+ jmp instruction_assembled
+ else_true:
+ or al,al
+ jz missing_end_directive
+ cmp al,0Fh
+ jne extra_characters_on_line
+ or al,-1
+ jmp make_if_structure
+ else_directive:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ mov ax,if_directive-instruction_handler
+ call find_structure_data
+ jc unexpected_instruction
+ cmp byte [ebx+2],0
+ jne unexpected_instruction
+ found_else:
+ mov al,[esi]
+ cmp al,1
+ jne skip_else
+ cmp word [esi+1],if_directive-instruction_handler
+ jne skip_else
+ add esi,4
+ call find_else
+ jnc found_else
+ call remove_structure_data
+ jmp instruction_assembled
+ skip_else:
+ or al,al
+ jz missing_end_directive
+ cmp al,0Fh
+ jne extra_characters_on_line
+ call find_end_if
+ call remove_structure_data
+ jmp instruction_assembled
+ end_if:
+ cmp [prefixed_instruction],0
+ jne unexpected_instruction
+ call find_structure_data
+ jc unexpected_instruction
+ call remove_structure_data
+ jmp instruction_assembled
+ find_else:
+ call find_structure_end
+ cmp ax,else_directive-instruction_handler
+ je else_found
+ cmp ax,if_directive-instruction_handler
+ jne unexpected_instruction
+ stc
+ ret
+ else_found:
+ clc
+ ret
+ find_end_if:
+ call find_structure_end
+ cmp ax,if_directive-instruction_handler
+ jne unexpected_instruction
+ ret
+ find_structure_end:
+ push [error_line]
+ mov eax,[current_line]
+ mov [error_line],eax
+ find_end_directive:
+ call skip_symbol
+ jnc find_end_directive
+ lods byte [esi]
+ cmp al,0Fh
+ jne no_end_directive
+ lods dword [esi]
+ mov [current_line],eax
+ skip_labels:
+ cmp byte [esi],2
+ jne labels_ok
+ add esi,6
+ jmp skip_labels
+ labels_ok:
+ cmp byte [esi],1
+ jne find_end_directive
+ mov ax,[esi+1]
+ cmp ax,prefix_instruction-instruction_handler
+ je find_end_directive
+ add esi,4
+ cmp ax,repeat_directive-instruction_handler
+ je skip_repeat
+ cmp ax,while_directive-instruction_handler
+ je skip_while
+ cmp ax,if_directive-instruction_handler
+ je skip_if
+ cmp ax,else_directive-instruction_handler
+ je structure_end
+ cmp ax,end_directive-instruction_handler
+ jne find_end_directive
+ cmp byte [esi],1
+ jne find_end_directive
+ mov ax,[esi+1]
+ add esi,4
+ cmp ax,repeat_directive-instruction_handler
+ je structure_end
+ cmp ax,while_directive-instruction_handler
+ je structure_end
+ cmp ax,if_directive-instruction_handler
+ jne find_end_directive
+ structure_end:
+ pop [error_line]
+ ret
+ no_end_directive:
+ mov eax,[error_line]
+ mov [current_line],eax
+ jmp missing_end_directive
+ skip_repeat:
+ call find_end_repeat
+ jmp find_end_directive
+ skip_while:
+ call find_end_while
+ jmp find_end_directive
+ skip_if:
+ call skip_if_block
+ jmp find_end_directive
+ skip_if_block:
+ call find_else
+ jc if_block_skipped
+ cmp byte [esi],1
+ jne skip_after_else
+ cmp word [esi+1],if_directive-instruction_handler
+ jne skip_after_else
+ add esi,4
+ jmp skip_if_block
+ skip_after_else:
+ call find_end_if
+ if_block_skipped:
+ ret
+end_directive:
+ lods byte [esi]
+ cmp al,1
+ jne invalid_argument
+ lods word [esi]
+ inc esi
+ cmp ax,virtual_directive-instruction_handler
+ je end_virtual
+ cmp ax,repeat_directive-instruction_handler
+ je end_repeat
+ cmp ax,while_directive-instruction_handler
+ je end_while
+ cmp ax,if_directive-instruction_handler
+ je end_if
+ cmp ax,data_directive-instruction_handler
+ je end_data
+ jmp invalid_argument
+break_directive:
+ mov ebx,[structures_buffer]
+ mov al,[esi]
+ or al,al
+ jz find_breakable_structure
+ cmp al,0Fh
+ jne extra_characters_on_line
+ find_breakable_structure:
+ cmp ebx,[additional_memory_end]
+ je unexpected_instruction
+ mov ax,[ebx]
+ cmp ax,repeat_directive-instruction_handler
+ je break_repeat
+ cmp ax,while_directive-instruction_handler
+ je break_while
+ cmp ax,if_directive-instruction_handler
+ je break_if
+ add ebx,18h
+ jmp find_breakable_structure
+ break_if:
+ push [current_line]
+ mov eax,[ebx+4]
+ mov [current_line],eax
+ call remove_structure_data
+ call skip_if_block
+ pop [current_line]
+ mov ebx,[structures_buffer]
+ jmp find_breakable_structure
+ break_repeat:
+ push ebx
+ call find_end_repeat
+ pop ebx
+ jmp stop_repeat
+ break_while:
+ push ebx
+ jmp stop_while
+
+data_bytes:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_byte
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ mov byte [edi],0
+ inc edi
+ jmp undefined_data
+ get_byte:
+ cmp byte [esi],0
+ je get_string
+ call get_byte_value
+ stos byte [edi]
+ ret
+ get_string:
+ inc esi
+ lods dword [esi]
+ mov ecx,eax
+ lea eax,[edi+ecx]
+ cmp eax,[tagged_blocks]
+ ja out_of_memory
+ rep movs byte [edi],[esi]
+ inc esi
+ ret
+ undefined_data:
+ mov ebp,[addressing_space]
+ test byte [ds:ebp+0Ah],1
+ jz mark_undefined_data
+ ret
+ mark_undefined_data:
+ cmp eax,[undefined_data_end]
+ je undefined_data_ok
+ mov [undefined_data_start],eax
+ undefined_data_ok:
+ mov [undefined_data_end],edi
+ ret
+ define_data:
+ cmp edi,[tagged_blocks]
+ jae out_of_memory
+ cmp byte [esi],'('
+ jne simple_data_value
+ mov ebx,esi
+ inc esi
+ call skip_expression
+ xchg esi,ebx
+ cmp byte [ebx],81h
+ jne simple_data_value
+ inc esi
+ call get_count_value
+ inc esi
+ or eax,eax
+ jz duplicate_zero_times
+ cmp byte [esi],'{'
+ jne duplicate_single_data_value
+ inc esi
+ duplicate_data:
+ push eax esi
+ duplicated_values:
+ cmp edi,[tagged_blocks]
+ jae out_of_memory
+ call near dword [esp+8]
+ lods byte [esi]
+ cmp al,','
+ je duplicated_values
+ cmp al,'}'
+ jne invalid_argument
+ pop ebx eax
+ dec eax
+ jz data_defined
+ mov esi,ebx
+ jmp duplicate_data
+ duplicate_single_data_value:
+ cmp edi,[tagged_blocks]
+ jae out_of_memory
+ push eax esi
+ call near dword [esp+8]
+ pop ebx eax
+ dec eax
+ jz data_defined
+ mov esi,ebx
+ jmp duplicate_single_data_value
+ duplicate_zero_times:
+ cmp byte [esi],'{'
+ jne skip_single_data_value
+ inc esi
+ skip_data_value:
+ call skip_symbol
+ jc invalid_argument
+ cmp byte [esi],'}'
+ jne skip_data_value
+ inc esi
+ jmp data_defined
+ skip_single_data_value:
+ call skip_symbol
+ jmp data_defined
+ simple_data_value:
+ cmp edi,[tagged_blocks]
+ jae out_of_memory
+ call near dword [esp]
+ data_defined:
+ lods byte [esi]
+ cmp al,','
+ je define_data
+ dec esi
+ add esp,4
+ jmp instruction_assembled
+data_unicode:
+ or [base_code],-1
+ jmp define_words
+data_words:
+ mov [base_code],0
+ define_words:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_word
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ and word [edi],0
+ scas word [edi]
+ jmp undefined_data
+ ret
+ get_word:
+ cmp [base_code],0
+ je word_data_value
+ cmp byte [esi],0
+ je word_string
+ word_data_value:
+ call get_word_value
+ call mark_relocation
+ stos word [edi]
+ ret
+ word_string:
+ inc esi
+ lods dword [esi]
+ mov ecx,eax
+ jecxz word_string_ok
+ lea eax,[edi+ecx*2]
+ cmp eax,[tagged_blocks]
+ ja out_of_memory
+ xor ah,ah
+ copy_word_string:
+ lods byte [esi]
+ stos word [edi]
+ loop copy_word_string
+ word_string_ok:
+ inc esi
+ ret
+data_dwords:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_dword
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ and dword [edi],0
+ scas dword [edi]
+ jmp undefined_data
+ get_dword:
+ push esi
+ call get_dword_value
+ pop ebx
+ cmp byte [esi],':'
+ je complex_dword
+ call mark_relocation
+ stos dword [edi]
+ ret
+ complex_dword:
+ mov esi,ebx
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_word_value
+ push eax
+ inc esi
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_operand
+ mov al,[value_type]
+ push eax
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_word_value
+ call mark_relocation
+ stos word [edi]
+ pop eax
+ mov [value_type],al
+ pop eax
+ call mark_relocation
+ stos word [edi]
+ ret
+data_pwords:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_pword
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ and dword [edi],0
+ scas dword [edi]
+ and word [edi],0
+ scas word [edi]
+ jmp undefined_data
+ get_pword:
+ push esi
+ call get_pword_value
+ pop ebx
+ cmp byte [esi],':'
+ je complex_pword
+ call mark_relocation
+ stos dword [edi]
+ mov ax,dx
+ stos word [edi]
+ ret
+ complex_pword:
+ mov esi,ebx
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_word_value
+ push eax
+ inc esi
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_operand
+ mov al,[value_type]
+ push eax
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_dword_value
+ call mark_relocation
+ stos dword [edi]
+ pop eax
+ mov [value_type],al
+ pop eax
+ call mark_relocation
+ stos word [edi]
+ ret
+data_qwords:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_qword
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ and dword [edi],0
+ scas dword [edi]
+ and dword [edi],0
+ scas dword [edi]
+ jmp undefined_data
+ get_qword:
+ call get_qword_value
+ call mark_relocation
+ stos dword [edi]
+ mov eax,edx
+ stos dword [edi]
+ ret
+data_twords:
+ call define_data
+ lods byte [esi]
+ cmp al,'('
+ je get_tword
+ cmp al,'?'
+ jne invalid_argument
+ mov eax,edi
+ and dword [edi],0
+ scas dword [edi]
+ and dword [edi],0
+ scas dword [edi]
+ and word [edi],0
+ scas word [edi]
+ jmp undefined_data
+ get_tword:
+ cmp byte [esi],'.'
+ jne complex_tword
+ inc esi
+ cmp word [esi+8],8000h
+ je fp_zero_tword
+ mov eax,[esi]
+ stos dword [edi]
+ mov eax,[esi+4]
+ stos dword [edi]
+ mov ax,[esi+8]
+ add ax,3FFFh
+ jo value_out_of_range
+ cmp ax,7FFFh
+ jge value_out_of_range
+ cmp ax,0
+ jg tword_exp_ok
+ mov cx,ax
+ neg cx
+ inc cx
+ cmp cx,64
+ jae value_out_of_range
+ cmp cx,32
+ ja large_shift
+ mov eax,[esi]
+ mov edx,[esi+4]
+ mov ebx,edx
+ shr edx,cl
+ shrd eax,ebx,cl
+ jmp tword_mantissa_shift_done
+ large_shift:
+ sub cx,32
+ xor edx,edx
+ mov eax,[esi+4]
+ shr eax,cl
+ tword_mantissa_shift_done:
+ jnc store_shifted_mantissa
+ add eax,1
+ adc edx,0
+ store_shifted_mantissa:
+ mov [edi-8],eax
+ mov [edi-4],edx
+ xor ax,ax
+ test edx,1 shl 31
+ jz tword_exp_ok
+ inc ax
+ tword_exp_ok:
+ mov bl,[esi+11]
+ shl bx,15
+ or ax,bx
+ stos word [edi]
+ add esi,13
+ ret
+ fp_zero_tword:
+ xor eax,eax
+ stos dword [edi]
+ stos dword [edi]
+ mov al,[esi+11]
+ shl ax,15
+ stos word [edi]
+ add esi,13
+ ret
+ complex_tword:
+ call get_word_value
+ push eax
+ cmp byte [esi],':'
+ jne invalid_operand
+ inc esi
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_operand
+ mov al,[value_type]
+ push eax
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_qword_value
+ call mark_relocation
+ stos dword [edi]
+ mov eax,edx
+ stos dword [edi]
+ pop eax
+ mov [value_type],al
+ pop eax
+ call mark_relocation
+ stos word [edi]
+ ret
+data_file:
+ lods word [esi]
+ cmp ax,'('
+ jne invalid_argument
+ add esi,4
+ call open_binary_file
+ mov eax,[esi-4]
+ lea esi,[esi+eax+1]
+ mov al,2
+ xor edx,edx
+ call lseek
+ push eax
+ xor edx,edx
+ cmp byte [esi],':'
+ jne position_ok
+ inc esi
+ cmp byte [esi],'('
+ jne invalid_argument
+ inc esi
+ cmp byte [esi],'.'
+ je invalid_value
+ push ebx
+ call get_count_value
+ pop ebx
+ mov edx,eax
+ sub [esp],edx
+ jc value_out_of_range
+ position_ok:
+ cmp byte [esi],','
+ jne size_ok
+ inc esi
+ cmp byte [esi],'('
+ jne invalid_argument
+ inc esi
+ cmp byte [esi],'.'
+ je invalid_value
+ push ebx edx
+ call get_count_value
+ pop edx ebx
+ cmp eax,[esp]
+ ja value_out_of_range
+ mov [esp],eax
+ size_ok:
+ xor al,al
+ call lseek
+ pop ecx
+ mov edx,edi
+ add edi,ecx
+ jc out_of_memory
+ cmp edi,[tagged_blocks]
+ ja out_of_memory
+ call read
+ jc error_reading_file
+ call close
+ lods byte [esi]
+ cmp al,','
+ je data_file
+ dec esi
+ jmp instruction_assembled
+ open_binary_file:
+ push esi
+ push edi
+ mov eax,[current_line]
+ find_current_source_path:
+ mov esi,[eax]
+ test byte [eax+7],80h
+ jz get_current_path
+ mov eax,[eax+8]
+ jmp find_current_source_path
+ get_current_path:
+ lodsb
+ stosb
+ or al,al
+ jnz get_current_path
+ cut_current_path:
+ cmp edi,[esp]
+ je current_path_ok
+ cmp byte [edi-1],'\'
+ je current_path_ok
+ cmp byte [edi-1],'/'
+ je current_path_ok
+ dec edi
+ jmp cut_current_path
+ current_path_ok:
+ mov esi,[esp+4]
+ call expand_path
+ pop edx
+ mov esi,edx
+ call open
+ jnc file_opened
+ mov edx,[include_paths]
+ search_in_include_paths:
+ push edx esi
+ mov edi,esi
+ mov esi,[esp+4]
+ call get_include_directory
+ mov [esp+4],esi
+ mov esi,[esp+8]
+ call expand_path
+ pop edx
+ mov esi,edx
+ call open
+ pop edx
+ jnc file_opened
+ cmp byte [edx],0
+ jne search_in_include_paths
+ mov edi,esi
+ mov esi,[esp]
+ push edi
+ call expand_path
+ pop edx
+ mov esi,edx
+ call open
+ jc file_not_found
+ file_opened:
+ mov edi,esi
+ pop esi
+ ret
+reserve_bytes:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ mov edx,ecx
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_bytes
+ add edi,ecx
+ jmp reserved_data
+ zero_bytes:
+ xor eax,eax
+ shr ecx,1
+ jnc bytes_stosb_ok
+ stos byte [edi]
+ bytes_stosb_ok:
+ shr ecx,1
+ jnc bytes_stosw_ok
+ stos word [edi]
+ bytes_stosw_ok:
+ rep stos dword [edi]
+ reserved_data:
+ pop eax
+ call undefined_data
+ jmp instruction_assembled
+reserve_words:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ mov edx,ecx
+ shl edx,1
+ jc out_of_memory
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_words
+ lea edi,[edi+ecx*2]
+ jmp reserved_data
+ zero_words:
+ xor eax,eax
+ shr ecx,1
+ jnc words_stosw_ok
+ stos word [edi]
+ words_stosw_ok:
+ rep stos dword [edi]
+ jmp reserved_data
+reserve_dwords:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ mov edx,ecx
+ shl edx,1
+ jc out_of_memory
+ shl edx,1
+ jc out_of_memory
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_dwords
+ lea edi,[edi+ecx*4]
+ jmp reserved_data
+ zero_dwords:
+ xor eax,eax
+ rep stos dword [edi]
+ jmp reserved_data
+reserve_pwords:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ shl ecx,1
+ jc out_of_memory
+ add ecx,eax
+ mov edx,ecx
+ shl edx,1
+ jc out_of_memory
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_words
+ lea edi,[edi+ecx*2]
+ jmp reserved_data
+reserve_qwords:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ shl ecx,1
+ jc out_of_memory
+ mov edx,ecx
+ shl edx,1
+ jc out_of_memory
+ shl edx,1
+ jc out_of_memory
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_dwords
+ lea edi,[edi+ecx*4]
+ jmp reserved_data
+reserve_twords:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov ecx,eax
+ shl ecx,2
+ jc out_of_memory
+ add ecx,eax
+ mov edx,ecx
+ shl edx,1
+ jc out_of_memory
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je zero_words
+ lea edi,[edi+ecx*2]
+ jmp reserved_data
+align_directive:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_argument
+ cmp byte [esi],'.'
+ je invalid_value
+ call get_count_value
+ mov edx,eax
+ dec edx
+ test eax,edx
+ jnz invalid_align_value
+ or eax,eax
+ jz invalid_align_value
+ cmp eax,1
+ je instruction_assembled
+ mov ecx,edi
+ mov ebp,[addressing_space]
+ sub ecx,[ds:ebp]
+ cmp dword [ds:ebp+10h],0
+ jne section_not_aligned_enough
+ cmp byte [ds:ebp+9],0
+ je make_alignment
+ cmp [output_format],3
+ je pe_alignment
+ mov ebx,[ds:ebp+14h]
+ cmp byte [ebx],0
+ jne section_not_aligned_enough
+ cmp eax,[ebx+10h]
+ jbe make_alignment
+ jmp section_not_aligned_enough
+ pe_alignment:
+ cmp eax,1000h
+ ja section_not_aligned_enough
+ make_alignment:
+ dec eax
+ and ecx,eax
+ jz instruction_assembled
+ neg ecx
+ add ecx,eax
+ inc ecx
+ mov edx,ecx
+ add edx,edi
+ jc out_of_memory
+ cmp edx,[tagged_blocks]
+ ja out_of_memory
+ push edi
+ cmp [next_pass_needed],0
+ je nops
+ add edi,ecx
+ jmp reserved_data
+ invalid_align_value:
+ cmp [error_line],0
+ jne instruction_assembled
+ mov eax,[current_line]
+ mov [error_line],eax
+ mov [error],invalid_value
+ jmp instruction_assembled
+ nops:
+ mov eax,90909090h
+ shr ecx,1
+ jnc nops_stosb_ok
+ stos byte [edi]
+ nops_stosb_ok:
+ shr ecx,1
+ jnc nops_stosw_ok
+ stos word [edi]
+ nops_stosw_ok:
+ rep stos dword [edi]
+ jmp reserved_data
+err_directive:
+ mov al,[esi]
+ cmp al,0Fh
+ je invoked_error
+ or al,al
+ jz invoked_error
+ jmp extra_characters_on_line
+assert_directive:
+ call calculate_logical_expression
+ or al,al
+ jnz instruction_assembled
+ cmp [error_line],0
+ jne instruction_assembled
+ mov eax,[current_line]
+ mov [error_line],eax
+ mov [error],assertion_failed
+ jmp instruction_assembled
diff --git a/samples/Assembly/FASM.asm b/samples/Assembly/FASM.asm
new file mode 100644
index 00000000..9a2201ae
--- /dev/null
+++ b/samples/Assembly/FASM.asm
@@ -0,0 +1,350 @@
+
+; flat assembler interface for Win32
+; Copyright (c) 1999-2014, Tomasz Grysztar.
+; All rights reserved.
+
+ format PE console
+
+section '.text' code readable executable
+
+start:
+
+ mov [con_handle],STD_OUTPUT_HANDLE
+ mov esi,_logo
+ call display_string
+
+ call get_params
+ jc information
+
+ call init_memory
+
+ mov esi,_memory_prefix
+ call display_string
+ mov eax,[memory_end]
+ sub eax,[memory_start]
+ add eax,[additional_memory_end]
+ sub eax,[additional_memory]
+ shr eax,10
+ call display_number
+ mov esi,_memory_suffix
+ call display_string
+
+ call [GetTickCount]
+ mov [start_time],eax
+
+ call preprocessor
+ call parser
+ call assembler
+ call formatter
+
+ call display_user_messages
+ movzx eax,[current_pass]
+ inc eax
+ call display_number
+ mov esi,_passes_suffix
+ call display_string
+ call [GetTickCount]
+ sub eax,[start_time]
+ xor edx,edx
+ mov ebx,100
+ div ebx
+ or eax,eax
+ jz display_bytes_count
+ xor edx,edx
+ mov ebx,10
+ div ebx
+ push edx
+ call display_number
+ mov dl,'.'
+ call display_character
+ pop eax
+ call display_number
+ mov esi,_seconds_suffix
+ call display_string
+ display_bytes_count:
+ mov eax,[written_size]
+ call display_number
+ mov esi,_bytes_suffix
+ call display_string
+ xor al,al
+ jmp exit_program
+
+information:
+ mov esi,_usage
+ call display_string
+ mov al,1
+ jmp exit_program
+
+get_params:
+ mov [input_file],0
+ mov [output_file],0
+ mov [symbols_file],0
+ mov [memory_setting],0
+ mov [passes_limit],100
+ call [GetCommandLine]
+ mov esi,eax
+ mov edi,params
+ find_command_start:
+ lodsb
+ cmp al,20h
+ je find_command_start
+ cmp al,22h
+ je skip_quoted_name
+ skip_name:
+ lodsb
+ cmp al,20h
+ je find_param
+ or al,al
+ jz all_params
+ jmp skip_name
+ skip_quoted_name:
+ lodsb
+ cmp al,22h
+ je find_param
+ or al,al
+ jz all_params
+ jmp skip_quoted_name
+ find_param:
+ lodsb
+ cmp al,20h
+ je find_param
+ cmp al,'-'
+ je option_param
+ cmp al,0Dh
+ je all_params
+ or al,al
+ jz all_params
+ cmp [input_file],0
+ jne get_output_file
+ mov [input_file],edi
+ jmp process_param
+ get_output_file:
+ cmp [output_file],0
+ jne bad_params
+ mov [output_file],edi
+ process_param:
+ cmp al,22h
+ je string_param
+ copy_param:
+ stosb
+ lodsb
+ cmp al,20h
+ je param_end
+ cmp al,0Dh
+ je param_end
+ or al,al
+ jz param_end
+ jmp copy_param
+ string_param:
+ lodsb
+ cmp al,22h
+ je string_param_end
+ cmp al,0Dh
+ je param_end
+ or al,al
+ jz param_end
+ stosb
+ jmp string_param
+ option_param:
+ lodsb
+ cmp al,'m'
+ je memory_option
+ cmp al,'M'
+ je memory_option
+ cmp al,'p'
+ je passes_option
+ cmp al,'P'
+ je passes_option
+ cmp al,'s'
+ je symbols_option
+ cmp al,'S'
+ je symbols_option
+ bad_params:
+ stc
+ ret
+ get_option_value:
+ xor eax,eax
+ mov edx,eax
+ get_option_digit:
+ lodsb
+ cmp al,20h
+ je option_value_ok
+ cmp al,0Dh
+ je option_value_ok
+ or al,al
+ jz option_value_ok
+ sub al,30h
+ jc invalid_option_value
+ cmp al,9
+ ja invalid_option_value
+ imul edx,10
+ jo invalid_option_value
+ add edx,eax
+ jc invalid_option_value
+ jmp get_option_digit
+ option_value_ok:
+ dec esi
+ clc
+ ret
+ invalid_option_value:
+ stc
+ ret
+ memory_option:
+ lodsb
+ cmp al,20h
+ je memory_option
+ cmp al,0Dh
+ je bad_params
+ or al,al
+ jz bad_params
+ dec esi
+ call get_option_value
+ or edx,edx
+ jz bad_params
+ cmp edx,1 shl (32-10)
+ jae bad_params
+ mov [memory_setting],edx
+ jmp find_param
+ passes_option:
+ lodsb
+ cmp al,20h
+ je passes_option
+ cmp al,0Dh
+ je bad_params
+ or al,al
+ jz bad_params
+ dec esi
+ call get_option_value
+ or edx,edx
+ jz bad_params
+ cmp edx,10000h
+ ja bad_params
+ mov [passes_limit],dx
+ jmp find_param
+ symbols_option:
+ mov [symbols_file],edi
+ find_symbols_file_name:
+ lodsb
+ cmp al,20h
+ jne process_param
+ jmp find_symbols_file_name
+ param_end:
+ dec esi
+ string_param_end:
+ xor al,al
+ stosb
+ jmp find_param
+ all_params:
+ cmp [input_file],0
+ je bad_params
+ clc
+ ret
+
+include 'system.inc'
+
+include '..\errors.inc'
+include '..\symbdump.inc'
+include '..\preproce.inc'
+include '..\parser.inc'
+include '..\exprpars.inc'
+include '..\assemble.inc'
+include '..\exprcalc.inc'
+include '..\formats.inc'
+include '..\x86_64.inc'
+include '..\avx.inc'
+
+include '..\tables.inc'
+include '..\messages.inc'
+
+section '.data' data readable writeable
+
+include '..\version.inc'
+
+_copyright db 'Copyright (c) 1999-2014, Tomasz Grysztar',0Dh,0Ah,0
+
+_logo db 'flat assembler version ',VERSION_STRING,0
+_usage db 0Dh,0Ah
+ db 'usage: fasm [output]',0Dh,0Ah
+ db 'optional settings:',0Dh,0Ah
+ db ' -m set the limit in kilobytes for the available memory',0Dh,0Ah
+ db ' -p set the maximum allowed number of passes',0Dh,0Ah
+ db ' -s dump symbolic information for debugging',0Dh,0Ah
+ db 0
+_memory_prefix db ' (',0
+_memory_suffix db ' kilobytes memory)',0Dh,0Ah,0
+_passes_suffix db ' passes, ',0
+_seconds_suffix db ' seconds, ',0
+_bytes_suffix db ' bytes.',0Dh,0Ah,0
+
+align 4
+
+include '..\variable.inc'
+
+con_handle dd ?
+memory_setting dd ?
+start_time dd ?
+bytes_count dd ?
+displayed_count dd ?
+character db ?
+last_displayed rb 2
+
+params rb 1000h
+options rb 1000h
+buffer rb 4000h
+
+stack 10000h
+
+section '.idata' import data readable writeable
+
+ dd 0,0,0,rva kernel_name,rva kernel_table
+ dd 0,0,0,0,0
+
+ kernel_table:
+ ExitProcess dd rva _ExitProcess
+ CreateFile dd rva _CreateFileA
+ ReadFile dd rva _ReadFile
+ WriteFile dd rva _WriteFile
+ CloseHandle dd rva _CloseHandle
+ SetFilePointer dd rva _SetFilePointer
+ GetCommandLine dd rva _GetCommandLineA
+ GetEnvironmentVariable dd rva _GetEnvironmentVariable
+ GetStdHandle dd rva _GetStdHandle
+ VirtualAlloc dd rva _VirtualAlloc
+ VirtualFree dd rva _VirtualFree
+ GetTickCount dd rva _GetTickCount
+ GetSystemTime dd rva _GetSystemTime
+ GlobalMemoryStatus dd rva _GlobalMemoryStatus
+ dd 0
+
+ kernel_name db 'KERNEL32.DLL',0
+
+ _ExitProcess dw 0
+ db 'ExitProcess',0
+ _CreateFileA dw 0
+ db 'CreateFileA',0
+ _ReadFile dw 0
+ db 'ReadFile',0
+ _WriteFile dw 0
+ db 'WriteFile',0
+ _CloseHandle dw 0
+ db 'CloseHandle',0
+ _SetFilePointer dw 0
+ db 'SetFilePointer',0
+ _GetCommandLineA dw 0
+ db 'GetCommandLineA',0
+ _GetEnvironmentVariable dw 0
+ db 'GetEnvironmentVariableA',0
+ _GetStdHandle dw 0
+ db 'GetStdHandle',0
+ _VirtualAlloc dw 0
+ db 'VirtualAlloc',0
+ _VirtualFree dw 0
+ db 'VirtualFree',0
+ _GetTickCount dw 0
+ db 'GetTickCount',0
+ _GetSystemTime dw 0
+ db 'GetSystemTime',0
+ _GlobalMemoryStatus dw 0
+ db 'GlobalMemoryStatus',0
+
+section '.reloc' fixups data readable discardable
diff --git a/samples/Assembly/SYSTEM.inc b/samples/Assembly/SYSTEM.inc
new file mode 100644
index 00000000..77a61d29
--- /dev/null
+++ b/samples/Assembly/SYSTEM.inc
@@ -0,0 +1,503 @@
+
+; flat assembler interface for Win32
+; Copyright (c) 1999-2014, Tomasz Grysztar.
+; All rights reserved.
+
+CREATE_NEW = 1
+CREATE_ALWAYS = 2
+OPEN_EXISTING = 3
+OPEN_ALWAYS = 4
+TRUNCATE_EXISTING = 5
+
+FILE_SHARE_READ = 1
+FILE_SHARE_WRITE = 2
+FILE_SHARE_DELETE = 4
+
+GENERIC_READ = 80000000h
+GENERIC_WRITE = 40000000h
+
+STD_INPUT_HANDLE = 0FFFFFFF6h
+STD_OUTPUT_HANDLE = 0FFFFFFF5h
+STD_ERROR_HANDLE = 0FFFFFFF4h
+
+MEM_COMMIT = 1000h
+MEM_RESERVE = 2000h
+MEM_DECOMMIT = 4000h
+MEM_RELEASE = 8000h
+MEM_FREE = 10000h
+MEM_PRIVATE = 20000h
+MEM_MAPPED = 40000h
+MEM_RESET = 80000h
+MEM_TOP_DOWN = 100000h
+
+PAGE_NOACCESS = 1
+PAGE_READONLY = 2
+PAGE_READWRITE = 4
+PAGE_WRITECOPY = 8
+PAGE_EXECUTE = 10h
+PAGE_EXECUTE_READ = 20h
+PAGE_EXECUTE_READWRITE = 40h
+PAGE_EXECUTE_WRITECOPY = 80h
+PAGE_GUARD = 100h
+PAGE_NOCACHE = 200h
+
+init_memory:
+ xor eax,eax
+ mov [memory_start],eax
+ mov eax,esp
+ and eax,not 0FFFh
+ add eax,1000h-10000h
+ mov [stack_limit],eax
+ mov eax,[memory_setting]
+ shl eax,10
+ jnz allocate_memory
+ push buffer
+ call [GlobalMemoryStatus]
+ mov eax,dword [buffer+20]
+ mov edx,dword [buffer+12]
+ cmp eax,0
+ jl large_memory
+ cmp edx,0
+ jl large_memory
+ shr eax,2
+ add eax,edx
+ jmp allocate_memory
+ large_memory:
+ mov eax,80000000h
+ allocate_memory:
+ mov edx,eax
+ shr edx,2
+ mov ecx,eax
+ sub ecx,edx
+ mov [memory_end],ecx
+ mov [additional_memory_end],edx
+ push PAGE_READWRITE
+ push MEM_COMMIT
+ push eax
+ push 0
+ call [VirtualAlloc]
+ or eax,eax
+ jz not_enough_memory
+ mov [memory_start],eax
+ add eax,[memory_end]
+ mov [memory_end],eax
+ mov [additional_memory],eax
+ add [additional_memory_end],eax
+ ret
+ not_enough_memory:
+ mov eax,[additional_memory_end]
+ shl eax,1
+ cmp eax,4000h
+ jb out_of_memory
+ jmp allocate_memory
+
+exit_program:
+ movzx eax,al
+ push eax
+ mov eax,[memory_start]
+ test eax,eax
+ jz do_exit
+ push MEM_RELEASE
+ push 0
+ push eax
+ call [VirtualFree]
+ do_exit:
+ call [ExitProcess]
+
+get_environment_variable:
+ mov ecx,[memory_end]
+ sub ecx,edi
+ cmp ecx,4000h
+ jbe buffer_for_variable_ok
+ mov ecx,4000h
+ buffer_for_variable_ok:
+ push ecx
+ push edi
+ push esi
+ call [GetEnvironmentVariable]
+ add edi,eax
+ cmp edi,[memory_end]
+ jae out_of_memory
+ ret
+
+open:
+ push 0
+ push 0
+ push OPEN_EXISTING
+ push 0
+ push FILE_SHARE_READ
+ push GENERIC_READ
+ push edx
+ call [CreateFile]
+ cmp eax,-1
+ je file_error
+ mov ebx,eax
+ clc
+ ret
+ file_error:
+ stc
+ ret
+create:
+ push 0
+ push 0
+ push CREATE_ALWAYS
+ push 0
+ push FILE_SHARE_READ
+ push GENERIC_WRITE
+ push edx
+ call [CreateFile]
+ cmp eax,-1
+ je file_error
+ mov ebx,eax
+ clc
+ ret
+write:
+ push 0
+ push bytes_count
+ push ecx
+ push edx
+ push ebx
+ call [WriteFile]
+ or eax,eax
+ jz file_error
+ clc
+ ret
+read:
+ mov ebp,ecx
+ push 0
+ push bytes_count
+ push ecx
+ push edx
+ push ebx
+ call [ReadFile]
+ or eax,eax
+ jz file_error
+ cmp ebp,[bytes_count]
+ jne file_error
+ clc
+ ret
+close:
+ push ebx
+ call [CloseHandle]
+ ret
+lseek:
+ movzx eax,al
+ push eax
+ push 0
+ push edx
+ push ebx
+ call [SetFilePointer]
+ ret
+
+display_string:
+ push [con_handle]
+ call [GetStdHandle]
+ mov ebp,eax
+ mov edi,esi
+ or ecx,-1
+ xor al,al
+ repne scasb
+ neg ecx
+ sub ecx,2
+ push 0
+ push bytes_count
+ push ecx
+ push esi
+ push ebp
+ call [WriteFile]
+ ret
+display_character:
+ push ebx
+ mov [character],dl
+ push [con_handle]
+ call [GetStdHandle]
+ mov ebx,eax
+ push 0
+ push bytes_count
+ push 1
+ push character
+ push ebx
+ call [WriteFile]
+ pop ebx
+ ret
+display_number:
+ push ebx
+ mov ecx,1000000000
+ xor edx,edx
+ xor bl,bl
+ display_loop:
+ div ecx
+ push edx
+ cmp ecx,1
+ je display_digit
+ or bl,bl
+ jnz display_digit
+ or al,al
+ jz digit_ok
+ not bl
+ display_digit:
+ mov dl,al
+ add dl,30h
+ push ecx
+ call display_character
+ pop ecx
+ digit_ok:
+ mov eax,ecx
+ xor edx,edx
+ mov ecx,10
+ div ecx
+ mov ecx,eax
+ pop eax
+ or ecx,ecx
+ jnz display_loop
+ pop ebx
+ ret
+
+display_user_messages:
+ mov [displayed_count],0
+ call show_display_buffer
+ cmp [displayed_count],1
+ jb line_break_ok
+ je make_line_break
+ mov ax,word [last_displayed]
+ cmp ax,0A0Dh
+ je line_break_ok
+ cmp ax,0D0Ah
+ je line_break_ok
+ make_line_break:
+ mov word [buffer],0A0Dh
+ push [con_handle]
+ call [GetStdHandle]
+ push 0
+ push bytes_count
+ push 2
+ push buffer
+ push eax
+ call [WriteFile]
+ line_break_ok:
+ ret
+display_block:
+ add [displayed_count],ecx
+ cmp ecx,1
+ ja take_last_two_characters
+ jb block_displayed
+ mov al,[last_displayed+1]
+ mov ah,[esi]
+ mov word [last_displayed],ax
+ jmp block_ok
+ take_last_two_characters:
+ mov ax,[esi+ecx-2]
+ mov word [last_displayed],ax
+ block_ok:
+ push ecx
+ push [con_handle]
+ call [GetStdHandle]
+ pop ecx
+ push 0
+ push bytes_count
+ push ecx
+ push esi
+ push eax
+ call [WriteFile]
+ block_displayed:
+ ret
+
+fatal_error:
+ mov [con_handle],STD_ERROR_HANDLE
+ mov esi,error_prefix
+ call display_string
+ pop esi
+ call display_string
+ mov esi,error_suffix
+ call display_string
+ mov al,0FFh
+ jmp exit_program
+assembler_error:
+ mov [con_handle],STD_ERROR_HANDLE
+ call display_user_messages
+ push dword 0
+ mov ebx,[current_line]
+ get_error_lines:
+ mov eax,[ebx]
+ cmp byte [eax],0
+ je get_next_error_line
+ push ebx
+ test byte [ebx+7],80h
+ jz display_error_line
+ mov edx,ebx
+ find_definition_origin:
+ mov edx,[edx+12]
+ test byte [edx+7],80h
+ jnz find_definition_origin
+ push edx
+ get_next_error_line:
+ mov ebx,[ebx+8]
+ jmp get_error_lines
+ display_error_line:
+ mov esi,[ebx]
+ call display_string
+ mov esi,line_number_start
+ call display_string
+ mov eax,[ebx+4]
+ and eax,7FFFFFFFh
+ call display_number
+ mov dl,']'
+ call display_character
+ pop esi
+ cmp ebx,esi
+ je line_number_ok
+ mov dl,20h
+ call display_character
+ push esi
+ mov esi,[esi]
+ movzx ecx,byte [esi]
+ inc esi
+ call display_block
+ mov esi,line_number_start
+ call display_string
+ pop esi
+ mov eax,[esi+4]
+ and eax,7FFFFFFFh
+ call display_number
+ mov dl,']'
+ call display_character
+ line_number_ok:
+ mov esi,line_data_start
+ call display_string
+ mov esi,ebx
+ mov edx,[esi]
+ call open
+ mov al,2
+ xor edx,edx
+ call lseek
+ mov edx,[esi+8]
+ sub eax,edx
+ jz line_data_displayed
+ push eax
+ xor al,al
+ call lseek
+ mov ecx,[esp]
+ mov edx,[additional_memory]
+ lea eax,[edx+ecx]
+ cmp eax,[additional_memory_end]
+ ja out_of_memory
+ call read
+ call close
+ pop ecx
+ mov esi,[additional_memory]
+ get_line_data:
+ mov al,[esi]
+ cmp al,0Ah
+ je display_line_data
+ cmp al,0Dh
+ je display_line_data
+ cmp al,1Ah
+ je display_line_data
+ or al,al
+ jz display_line_data
+ inc esi
+ loop get_line_data
+ display_line_data:
+ mov ecx,esi
+ mov esi,[additional_memory]
+ sub ecx,esi
+ call display_block
+ line_data_displayed:
+ mov esi,cr_lf
+ call display_string
+ pop ebx
+ or ebx,ebx
+ jnz display_error_line
+ mov esi,error_prefix
+ call display_string
+ pop esi
+ call display_string
+ mov esi,error_suffix
+ call display_string
+ mov al,2
+ jmp exit_program
+
+make_timestamp:
+ push buffer
+ call [GetSystemTime]
+ movzx ecx,word [buffer]
+ mov eax,ecx
+ sub eax,1970
+ mov ebx,365
+ mul ebx
+ mov ebp,eax
+ mov eax,ecx
+ sub eax,1969
+ shr eax,2
+ add ebp,eax
+ mov eax,ecx
+ sub eax,1901
+ mov ebx,100
+ div ebx
+ sub ebp,eax
+ mov eax,ecx
+ xor edx,edx
+ sub eax,1601
+ mov ebx,400
+ div ebx
+ add ebp,eax
+ movzx ecx,word [buffer+2]
+ mov eax,ecx
+ dec eax
+ mov ebx,30
+ mul ebx
+ add ebp,eax
+ cmp ecx,8
+ jbe months_correction
+ mov eax,ecx
+ sub eax,7
+ shr eax,1
+ add ebp,eax
+ mov ecx,8
+ months_correction:
+ mov eax,ecx
+ shr eax,1
+ add ebp,eax
+ cmp ecx,2
+ jbe day_correction_ok
+ sub ebp,2
+ movzx ecx,word [buffer]
+ test ecx,11b
+ jnz day_correction_ok
+ xor edx,edx
+ mov eax,ecx
+ mov ebx,100
+ div ebx
+ or edx,edx
+ jnz day_correction
+ mov eax,ecx
+ mov ebx,400
+ div ebx
+ or edx,edx
+ jnz day_correction_ok
+ day_correction:
+ inc ebp
+ day_correction_ok:
+ movzx eax,word [buffer+6]
+ dec eax
+ add eax,ebp
+ mov ebx,24
+ mul ebx
+ movzx ecx,word [buffer+8]
+ add eax,ecx
+ mov ebx,60
+ mul ebx
+ movzx ecx,word [buffer+10]
+ add eax,ecx
+ mov ebx,60
+ mul ebx
+ movzx ecx,word [buffer+12]
+ add eax,ecx
+ adc edx,0
+ ret
+
+error_prefix db 'error: ',0
+error_suffix db '.'
+cr_lf db 0Dh,0Ah,0
+line_number_start db ' [',0
+line_data_start db ':',0Dh,0Ah,0
diff --git a/samples/Assembly/X86_64.inc b/samples/Assembly/X86_64.inc
new file mode 100644
index 00000000..28413065
--- /dev/null
+++ b/samples/Assembly/X86_64.inc
@@ -0,0 +1,7060 @@
+
+; flat assembler core
+; Copyright (c) 1999-2014, Tomasz Grysztar.
+; All rights reserved.
+
+simple_instruction_except64:
+ cmp [code_type],64
+ je illegal_instruction
+simple_instruction:
+ stos byte [edi]
+ jmp instruction_assembled
+simple_instruction_only64:
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp simple_instruction
+simple_instruction_16bit_except64:
+ cmp [code_type],64
+ je illegal_instruction
+simple_instruction_16bit:
+ cmp [code_type],16
+ jne size_prefix
+ stos byte [edi]
+ jmp instruction_assembled
+ size_prefix:
+ mov ah,al
+ mov al,66h
+ stos word [edi]
+ jmp instruction_assembled
+simple_instruction_32bit_except64:
+ cmp [code_type],64
+ je illegal_instruction
+simple_instruction_32bit:
+ cmp [code_type],16
+ je size_prefix
+ stos byte [edi]
+ jmp instruction_assembled
+iret_instruction:
+ cmp [code_type],64
+ jne simple_instruction
+simple_instruction_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ mov ah,al
+ mov al,48h
+ stos word [edi]
+ jmp instruction_assembled
+simple_extended_instruction_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ mov byte [edi],48h
+ inc edi
+simple_extended_instruction:
+ mov ah,al
+ mov al,0Fh
+ stos word [edi]
+ jmp instruction_assembled
+prefix_instruction:
+ stos byte [edi]
+ or [prefixed_instruction],-1
+ jmp continue_line
+segment_prefix:
+ mov ah,al
+ shr ah,4
+ cmp ah,6
+ jne illegal_instruction
+ and al,1111b
+ mov [segment_register],al
+ call store_segment_prefix
+ or [prefixed_instruction],-1
+ jmp continue_line
+int_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp ah,1
+ ja invalid_operand_size
+ cmp al,'('
+ jne invalid_operand
+ call get_byte_value
+ test eax,eax
+ jns int_imm_ok
+ call recoverable_overflow
+ int_imm_ok:
+ mov ah,al
+ mov al,0CDh
+ stos word [edi]
+ jmp instruction_assembled
+aa_instruction:
+ cmp [code_type],64
+ je illegal_instruction
+ push eax
+ mov bl,10
+ cmp byte [esi],'('
+ jne aa_store
+ inc esi
+ xor al,al
+ xchg al,[operand_size]
+ cmp al,1
+ ja invalid_operand_size
+ call get_byte_value
+ mov bl,al
+ aa_store:
+ cmp [operand_size],0
+ jne invalid_operand
+ pop eax
+ mov ah,bl
+ stos word [edi]
+ jmp instruction_assembled
+
+basic_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je basic_reg
+ cmp al,'['
+ jne invalid_operand
+ basic_mem:
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je basic_mem_imm
+ cmp al,10h
+ jne invalid_operand
+ basic_mem_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov al,ah
+ cmp al,1
+ je instruction_ready
+ call operand_autodetect
+ inc [base_code]
+ instruction_ready:
+ call store_instruction
+ jmp instruction_assembled
+ basic_mem_imm:
+ mov al,[operand_size]
+ cmp al,1
+ jb basic_mem_imm_nosize
+ je basic_mem_imm_8bit
+ cmp al,2
+ je basic_mem_imm_16bit
+ cmp al,4
+ je basic_mem_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ basic_mem_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp basic_mem_imm_32bit_ok
+ basic_mem_imm_nosize:
+ call recoverable_unknown_size
+ basic_mem_imm_8bit:
+ call get_byte_value
+ mov byte [value],al
+ mov al,[base_code]
+ shr al,3
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov [base_code],80h
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ basic_mem_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov word [value],ax
+ mov al,[base_code]
+ shr al,3
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ cmp [value_type],0
+ jne basic_mem_imm_16bit_store
+ cmp [size_declared],0
+ jne basic_mem_imm_16bit_store
+ cmp word [value],80h
+ jb basic_mem_simm_8bit
+ cmp word [value],-80h
+ jae basic_mem_simm_8bit
+ basic_mem_imm_16bit_store:
+ mov [base_code],81h
+ call store_instruction_with_imm16
+ jmp instruction_assembled
+ basic_mem_simm_8bit:
+ mov [base_code],83h
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ basic_mem_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ basic_mem_imm_32bit_ok:
+ mov dword [value],eax
+ mov al,[base_code]
+ shr al,3
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ cmp [value_type],0
+ jne basic_mem_imm_32bit_store
+ cmp [size_declared],0
+ jne basic_mem_imm_32bit_store
+ cmp dword [value],80h
+ jb basic_mem_simm_8bit
+ cmp dword [value],-80h
+ jae basic_mem_simm_8bit
+ basic_mem_imm_32bit_store:
+ mov [base_code],81h
+ call store_instruction_with_imm32
+ jmp instruction_assembled
+ get_simm32:
+ call get_qword_value
+ mov ecx,edx
+ cdq
+ cmp ecx,edx
+ jne value_out_of_range
+ cmp [value_type],4
+ jne get_simm32_ok
+ mov [value_type],2
+ get_simm32_ok:
+ ret
+ basic_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je basic_reg_reg
+ cmp al,'('
+ je basic_reg_imm
+ cmp al,'['
+ jne invalid_operand
+ basic_reg_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je basic_reg_mem_8bit
+ call operand_autodetect
+ add [base_code],3
+ jmp instruction_ready
+ basic_reg_mem_8bit:
+ add [base_code],2
+ jmp instruction_ready
+ basic_reg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,[postbyte_register]
+ mov [postbyte_register],al
+ mov al,ah
+ cmp al,1
+ je nomem_instruction_ready
+ call operand_autodetect
+ inc [base_code]
+ nomem_instruction_ready:
+ call store_nomem_instruction
+ jmp instruction_assembled
+ basic_reg_imm:
+ mov al,[operand_size]
+ cmp al,1
+ je basic_reg_imm_8bit
+ cmp al,2
+ je basic_reg_imm_16bit
+ cmp al,4
+ je basic_reg_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ basic_reg_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp basic_reg_imm_32bit_ok
+ basic_reg_imm_8bit:
+ call get_byte_value
+ mov dl,al
+ mov bl,[base_code]
+ shr bl,3
+ xchg bl,[postbyte_register]
+ or bl,bl
+ jz basic_al_imm
+ mov [base_code],80h
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ basic_al_imm:
+ mov al,[base_code]
+ add al,4
+ stos byte [edi]
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ basic_reg_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov dx,ax
+ mov bl,[base_code]
+ shr bl,3
+ xchg bl,[postbyte_register]
+ cmp [value_type],0
+ jne basic_reg_imm_16bit_store
+ cmp [size_declared],0
+ jne basic_reg_imm_16bit_store
+ cmp dx,80h
+ jb basic_reg_simm_8bit
+ cmp dx,-80h
+ jae basic_reg_simm_8bit
+ basic_reg_imm_16bit_store:
+ or bl,bl
+ jz basic_ax_imm
+ mov [base_code],81h
+ call store_nomem_instruction
+ basic_store_imm_16bit:
+ mov ax,dx
+ call mark_relocation
+ stos word [edi]
+ jmp instruction_assembled
+ basic_reg_simm_8bit:
+ mov [base_code],83h
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ basic_ax_imm:
+ add [base_code],5
+ call store_instruction_code
+ jmp basic_store_imm_16bit
+ basic_reg_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ basic_reg_imm_32bit_ok:
+ mov edx,eax
+ mov bl,[base_code]
+ shr bl,3
+ xchg bl,[postbyte_register]
+ cmp [value_type],0
+ jne basic_reg_imm_32bit_store
+ cmp [size_declared],0
+ jne basic_reg_imm_32bit_store
+ cmp edx,80h
+ jb basic_reg_simm_8bit
+ cmp edx,-80h
+ jae basic_reg_simm_8bit
+ basic_reg_imm_32bit_store:
+ or bl,bl
+ jz basic_eax_imm
+ mov [base_code],81h
+ call store_nomem_instruction
+ basic_store_imm_32bit:
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ basic_eax_imm:
+ add [base_code],5
+ call store_instruction_code
+ jmp basic_store_imm_32bit
+ recoverable_unknown_size:
+ cmp [error_line],0
+ jne ignore_unknown_size
+ push [current_line]
+ pop [error_line]
+ mov [error],operand_size_not_specified
+ ignore_unknown_size:
+ ret
+single_operand_instruction:
+ mov [base_code],0F6h
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je single_reg
+ cmp al,'['
+ jne invalid_operand
+ single_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je single_mem_8bit
+ jb single_mem_nosize
+ call operand_autodetect
+ inc [base_code]
+ jmp instruction_ready
+ single_mem_nosize:
+ call recoverable_unknown_size
+ single_mem_8bit:
+ jmp instruction_ready
+ single_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ cmp al,1
+ je single_reg_8bit
+ call operand_autodetect
+ inc [base_code]
+ single_reg_8bit:
+ jmp nomem_instruction_ready
+mov_instruction:
+ mov [base_code],88h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je mov_reg
+ cmp al,'['
+ jne invalid_operand
+ mov_mem:
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je mov_mem_imm
+ cmp al,10h
+ jne invalid_operand
+ mov_mem_reg:
+ lods byte [esi]
+ cmp al,60h
+ jb mov_mem_general_reg
+ cmp al,70h
+ jb mov_mem_sreg
+ mov_mem_general_reg:
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ cmp ah,1
+ je mov_mem_reg_8bit
+ mov al,ah
+ call operand_autodetect
+ mov al,[postbyte_register]
+ or al,bl
+ or al,bh
+ jz mov_mem_ax
+ inc [base_code]
+ jmp instruction_ready
+ mov_mem_reg_8bit:
+ or al,bl
+ or al,bh
+ jnz instruction_ready
+ mov_mem_al:
+ test ch,22h
+ jnz mov_mem_address16_al
+ test ch,44h
+ jnz mov_mem_address32_al
+ test ch,88h
+ jnz mov_mem_address64_al
+ or ch,ch
+ jnz invalid_address_size
+ cmp [code_type],64
+ je mov_mem_address64_al
+ cmp [code_type],32
+ je mov_mem_address32_al
+ cmp edx,10000h
+ jb mov_mem_address16_al
+ mov_mem_address32_al:
+ call store_segment_prefix_if_necessary
+ call address_32bit_prefix
+ mov [base_code],0A2h
+ store_mov_address32:
+ call store_instruction_code
+ call store_address_32bit_value
+ jmp instruction_assembled
+ mov_mem_address16_al:
+ call store_segment_prefix_if_necessary
+ call address_16bit_prefix
+ mov [base_code],0A2h
+ store_mov_address16:
+ cmp [code_type],64
+ je invalid_address
+ call store_instruction_code
+ mov eax,edx
+ stos word [edi]
+ cmp edx,10000h
+ jge value_out_of_range
+ jmp instruction_assembled
+ mov_mem_address64_al:
+ call store_segment_prefix_if_necessary
+ mov [base_code],0A2h
+ store_mov_address64:
+ call store_instruction_code
+ call store_address_64bit_value
+ jmp instruction_assembled
+ mov_mem_ax:
+ test ch,22h
+ jnz mov_mem_address16_ax
+ test ch,44h
+ jnz mov_mem_address32_ax
+ test ch,88h
+ jnz mov_mem_address64_ax
+ or ch,ch
+ jnz invalid_address_size
+ cmp [code_type],64
+ je mov_mem_address64_ax
+ cmp [code_type],32
+ je mov_mem_address32_ax
+ cmp edx,10000h
+ jb mov_mem_address16_ax
+ mov_mem_address32_ax:
+ call store_segment_prefix_if_necessary
+ call address_32bit_prefix
+ mov [base_code],0A3h
+ jmp store_mov_address32
+ mov_mem_address16_ax:
+ call store_segment_prefix_if_necessary
+ call address_16bit_prefix
+ mov [base_code],0A3h
+ jmp store_mov_address16
+ mov_mem_address64_ax:
+ call store_segment_prefix_if_necessary
+ mov [base_code],0A3h
+ jmp store_mov_address64
+ mov_mem_sreg:
+ sub al,61h
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov ah,[operand_size]
+ or ah,ah
+ jz mov_mem_sreg_store
+ cmp ah,2
+ jne invalid_operand_size
+ mov_mem_sreg_store:
+ mov [base_code],8Ch
+ jmp instruction_ready
+ mov_mem_imm:
+ mov al,[operand_size]
+ cmp al,1
+ jb mov_mem_imm_nosize
+ je mov_mem_imm_8bit
+ cmp al,2
+ je mov_mem_imm_16bit
+ cmp al,4
+ je mov_mem_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ mov_mem_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp mov_mem_imm_32bit_store
+ mov_mem_imm_8bit:
+ call get_byte_value
+ mov byte [value],al
+ mov [postbyte_register],0
+ mov [base_code],0C6h
+ pop ecx ebx edx
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ mov_mem_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov word [value],ax
+ mov [postbyte_register],0
+ mov [base_code],0C7h
+ pop ecx ebx edx
+ call store_instruction_with_imm16
+ jmp instruction_assembled
+ mov_mem_imm_nosize:
+ call recoverable_unknown_size
+ mov_mem_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ mov_mem_imm_32bit_store:
+ mov dword [value],eax
+ mov [postbyte_register],0
+ mov [base_code],0C7h
+ pop ecx ebx edx
+ call store_instruction_with_imm32
+ jmp instruction_assembled
+ mov_reg:
+ lods byte [esi]
+ mov ah,al
+ sub ah,10h
+ and ah,al
+ test ah,0F0h
+ jnz mov_sreg
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ je mov_reg_mem
+ cmp al,'('
+ je mov_reg_imm
+ cmp al,10h
+ jne invalid_operand
+ mov_reg_reg:
+ lods byte [esi]
+ mov ah,al
+ sub ah,10h
+ and ah,al
+ test ah,0F0h
+ jnz mov_reg_sreg
+ call convert_register
+ mov bl,[postbyte_register]
+ mov [postbyte_register],al
+ mov al,ah
+ cmp al,1
+ je mov_reg_reg_8bit
+ call operand_autodetect
+ inc [base_code]
+ mov_reg_reg_8bit:
+ jmp nomem_instruction_ready
+ mov_reg_sreg:
+ mov bl,[postbyte_register]
+ mov ah,al
+ and al,1111b
+ mov [postbyte_register],al
+ shr ah,4
+ cmp ah,5
+ je mov_reg_creg
+ cmp ah,7
+ je mov_reg_dreg
+ ja mov_reg_treg
+ dec [postbyte_register]
+ cmp [operand_size],8
+ je mov_reg_sreg64
+ cmp [operand_size],4
+ je mov_reg_sreg32
+ cmp [operand_size],2
+ jne invalid_operand_size
+ call operand_16bit
+ jmp mov_reg_sreg_store
+ mov_reg_sreg64:
+ call operand_64bit
+ jmp mov_reg_sreg_store
+ mov_reg_sreg32:
+ call operand_32bit
+ mov_reg_sreg_store:
+ mov [base_code],8Ch
+ jmp nomem_instruction_ready
+ mov_reg_treg:
+ cmp ah,9
+ jne invalid_operand
+ mov [extended_code],24h
+ jmp mov_reg_xrx
+ mov_reg_dreg:
+ mov [extended_code],21h
+ jmp mov_reg_xrx
+ mov_reg_creg:
+ mov [extended_code],20h
+ mov_reg_xrx:
+ mov [base_code],0Fh
+ cmp [code_type],64
+ je mov_reg_xrx_64bit
+ cmp [operand_size],4
+ jne invalid_operand_size
+ cmp [postbyte_register],8
+ jne mov_reg_xrx_store
+ cmp [extended_code],20h
+ jne mov_reg_xrx_store
+ mov al,0F0h
+ stos byte [edi]
+ mov [postbyte_register],0
+ mov_reg_xrx_store:
+ jmp nomem_instruction_ready
+ mov_reg_xrx_64bit:
+ cmp [operand_size],8
+ jne invalid_operand_size
+ jmp nomem_instruction_ready
+ mov_reg_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je mov_reg_mem_8bit
+ call operand_autodetect
+ mov al,[postbyte_register]
+ or al,bl
+ or al,bh
+ jz mov_ax_mem
+ add [base_code],3
+ jmp instruction_ready
+ mov_reg_mem_8bit:
+ mov al,[postbyte_register]
+ or al,bl
+ or al,bh
+ jz mov_al_mem
+ add [base_code],2
+ jmp instruction_ready
+ mov_al_mem:
+ test ch,22h
+ jnz mov_al_mem_address16
+ test ch,44h
+ jnz mov_al_mem_address32
+ test ch,88h
+ jnz mov_al_mem_address64
+ or ch,ch
+ jnz invalid_address_size
+ cmp [code_type],64
+ je mov_al_mem_address64
+ cmp [code_type],32
+ je mov_al_mem_address32
+ cmp edx,10000h
+ jb mov_al_mem_address16
+ mov_al_mem_address32:
+ call store_segment_prefix_if_necessary
+ call address_32bit_prefix
+ mov [base_code],0A0h
+ jmp store_mov_address32
+ mov_al_mem_address16:
+ call store_segment_prefix_if_necessary
+ call address_16bit_prefix
+ mov [base_code],0A0h
+ jmp store_mov_address16
+ mov_al_mem_address64:
+ call store_segment_prefix_if_necessary
+ mov [base_code],0A0h
+ jmp store_mov_address64
+ mov_ax_mem:
+ test ch,22h
+ jnz mov_ax_mem_address16
+ test ch,44h
+ jnz mov_ax_mem_address32
+ test ch,88h
+ jnz mov_ax_mem_address64
+ or ch,ch
+ jnz invalid_address_size
+ cmp [code_type],64
+ je mov_ax_mem_address64
+ cmp [code_type],32
+ je mov_ax_mem_address32
+ cmp edx,10000h
+ jb mov_ax_mem_address16
+ mov_ax_mem_address32:
+ call store_segment_prefix_if_necessary
+ call address_32bit_prefix
+ mov [base_code],0A1h
+ jmp store_mov_address32
+ mov_ax_mem_address16:
+ call store_segment_prefix_if_necessary
+ call address_16bit_prefix
+ mov [base_code],0A1h
+ jmp store_mov_address16
+ mov_ax_mem_address64:
+ call store_segment_prefix_if_necessary
+ mov [base_code],0A1h
+ jmp store_mov_address64
+ mov_reg_imm:
+ mov al,[operand_size]
+ cmp al,1
+ je mov_reg_imm_8bit
+ cmp al,2
+ je mov_reg_imm_16bit
+ cmp al,4
+ je mov_reg_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ mov_reg_imm_64bit:
+ call operand_64bit
+ call get_qword_value
+ mov ecx,edx
+ cmp [size_declared],0
+ jne mov_reg_imm_64bit_store
+ cmp [value_type],4
+ jae mov_reg_imm_64bit_store
+ cdq
+ cmp ecx,edx
+ je mov_reg_64bit_imm_32bit
+ mov_reg_imm_64bit_store:
+ push eax ecx
+ mov al,0B8h
+ call store_mov_reg_imm_code
+ pop edx eax
+ call mark_relocation
+ stos dword [edi]
+ mov eax,edx
+ stos dword [edi]
+ jmp instruction_assembled
+ mov_reg_imm_8bit:
+ call get_byte_value
+ mov dl,al
+ mov al,0B0h
+ call store_mov_reg_imm_code
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ mov_reg_imm_16bit:
+ call get_word_value
+ mov dx,ax
+ call operand_16bit
+ mov al,0B8h
+ call store_mov_reg_imm_code
+ mov ax,dx
+ call mark_relocation
+ stos word [edi]
+ jmp instruction_assembled
+ mov_reg_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ mov edx,eax
+ mov al,0B8h
+ call store_mov_reg_imm_code
+ mov_store_imm_32bit:
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ store_mov_reg_imm_code:
+ mov ah,[postbyte_register]
+ test ah,1000b
+ jz mov_reg_imm_prefix_ok
+ or [rex_prefix],41h
+ mov_reg_imm_prefix_ok:
+ and ah,111b
+ add al,ah
+ mov [base_code],al
+ call store_instruction_code
+ ret
+ mov_reg_64bit_imm_32bit:
+ mov edx,eax
+ mov bl,[postbyte_register]
+ mov [postbyte_register],0
+ mov [base_code],0C7h
+ call store_nomem_instruction
+ jmp mov_store_imm_32bit
+ mov_sreg:
+ mov ah,al
+ and al,1111b
+ mov [postbyte_register],al
+ shr ah,4
+ cmp ah,5
+ je mov_creg
+ cmp ah,7
+ je mov_dreg
+ ja mov_treg
+ cmp al,2
+ je illegal_instruction
+ dec [postbyte_register]
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ je mov_sreg_mem
+ cmp al,10h
+ jne invalid_operand
+ mov_sreg_reg:
+ lods byte [esi]
+ call convert_register
+ or ah,ah
+ jz mov_sreg_reg_size_ok
+ cmp ah,2
+ jne invalid_operand_size
+ mov bl,al
+ mov_sreg_reg_size_ok:
+ mov [base_code],8Eh
+ jmp nomem_instruction_ready
+ mov_sreg_mem:
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz mov_sreg_mem_size_ok
+ cmp al,2
+ jne invalid_operand_size
+ mov_sreg_mem_size_ok:
+ mov [base_code],8Eh
+ jmp instruction_ready
+ mov_treg:
+ cmp ah,9
+ jne invalid_operand
+ mov [extended_code],26h
+ jmp mov_xrx
+ mov_dreg:
+ mov [extended_code],23h
+ jmp mov_xrx
+ mov_creg:
+ mov [extended_code],22h
+ mov_xrx:
+ mov [base_code],0Fh
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ cmp [code_type],64
+ je mov_xrx_64bit
+ cmp ah,4
+ jne invalid_operand_size
+ cmp [postbyte_register],8
+ jne mov_xrx_store
+ cmp [extended_code],22h
+ jne mov_xrx_store
+ mov al,0F0h
+ stos byte [edi]
+ mov [postbyte_register],0
+ mov_xrx_store:
+ jmp nomem_instruction_ready
+ mov_xrx_64bit:
+ cmp ah,8
+ je mov_xrx_store
+ jmp invalid_operand_size
+test_instruction:
+ mov [base_code],84h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je test_reg
+ cmp al,'['
+ jne invalid_operand
+ test_mem:
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je test_mem_imm
+ cmp al,10h
+ jne invalid_operand
+ test_mem_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov al,ah
+ cmp al,1
+ je test_mem_reg_8bit
+ call operand_autodetect
+ inc [base_code]
+ test_mem_reg_8bit:
+ jmp instruction_ready
+ test_mem_imm:
+ mov al,[operand_size]
+ cmp al,1
+ jb test_mem_imm_nosize
+ je test_mem_imm_8bit
+ cmp al,2
+ je test_mem_imm_16bit
+ cmp al,4
+ je test_mem_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ test_mem_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp test_mem_imm_32bit_store
+ test_mem_imm_8bit:
+ call get_byte_value
+ mov byte [value],al
+ mov [postbyte_register],0
+ mov [base_code],0F6h
+ pop ecx ebx edx
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ test_mem_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov word [value],ax
+ mov [postbyte_register],0
+ mov [base_code],0F7h
+ pop ecx ebx edx
+ call store_instruction_with_imm16
+ jmp instruction_assembled
+ test_mem_imm_nosize:
+ call recoverable_unknown_size
+ test_mem_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ test_mem_imm_32bit_store:
+ mov dword [value],eax
+ mov [postbyte_register],0
+ mov [base_code],0F7h
+ pop ecx ebx edx
+ call store_instruction_with_imm32
+ jmp instruction_assembled
+ test_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ je test_reg_mem
+ cmp al,'('
+ je test_reg_imm
+ cmp al,10h
+ jne invalid_operand
+ test_reg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,[postbyte_register]
+ mov [postbyte_register],al
+ mov al,ah
+ cmp al,1
+ je test_reg_reg_8bit
+ call operand_autodetect
+ inc [base_code]
+ test_reg_reg_8bit:
+ jmp nomem_instruction_ready
+ test_reg_imm:
+ mov al,[operand_size]
+ cmp al,1
+ je test_reg_imm_8bit
+ cmp al,2
+ je test_reg_imm_16bit
+ cmp al,4
+ je test_reg_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ test_reg_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp test_reg_imm_32bit_store
+ test_reg_imm_8bit:
+ call get_byte_value
+ mov dl,al
+ mov bl,[postbyte_register]
+ mov [postbyte_register],0
+ mov [base_code],0F6h
+ or bl,bl
+ jz test_al_imm
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ test_al_imm:
+ mov [base_code],0A8h
+ call store_instruction_code
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ test_reg_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov dx,ax
+ mov bl,[postbyte_register]
+ mov [postbyte_register],0
+ mov [base_code],0F7h
+ or bl,bl
+ jz test_ax_imm
+ call store_nomem_instruction
+ mov ax,dx
+ call mark_relocation
+ stos word [edi]
+ jmp instruction_assembled
+ test_ax_imm:
+ mov [base_code],0A9h
+ call store_instruction_code
+ mov ax,dx
+ stos word [edi]
+ jmp instruction_assembled
+ test_reg_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ test_reg_imm_32bit_store:
+ mov edx,eax
+ mov bl,[postbyte_register]
+ mov [postbyte_register],0
+ mov [base_code],0F7h
+ or bl,bl
+ jz test_eax_imm
+ call store_nomem_instruction
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ test_eax_imm:
+ mov [base_code],0A9h
+ call store_instruction_code
+ mov eax,edx
+ stos dword [edi]
+ jmp instruction_assembled
+ test_reg_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je test_reg_mem_8bit
+ call operand_autodetect
+ inc [base_code]
+ test_reg_mem_8bit:
+ jmp instruction_ready
+xchg_instruction:
+ mov [base_code],86h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je xchg_reg
+ cmp al,'['
+ jne invalid_operand
+ xchg_mem:
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je test_mem_reg
+ jmp invalid_operand
+ xchg_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ je test_reg_mem
+ cmp al,10h
+ jne invalid_operand
+ xchg_reg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ cmp al,1
+ je xchg_reg_reg_8bit
+ call operand_autodetect
+ cmp [postbyte_register],0
+ je xchg_ax_reg
+ or bl,bl
+ jnz xchg_reg_reg_store
+ mov bl,[postbyte_register]
+ xchg_ax_reg:
+ cmp [code_type],64
+ jne xchg_ax_reg_ok
+ cmp ah,4
+ jne xchg_ax_reg_ok
+ or bl,bl
+ jz xchg_reg_reg_store
+ xchg_ax_reg_ok:
+ test bl,1000b
+ jz xchg_ax_reg_store
+ or [rex_prefix],41h
+ and bl,111b
+ xchg_ax_reg_store:
+ add bl,90h
+ mov [base_code],bl
+ call store_instruction_code
+ jmp instruction_assembled
+ xchg_reg_reg_store:
+ inc [base_code]
+ xchg_reg_reg_8bit:
+ jmp nomem_instruction_ready
+push_instruction:
+ mov [push_size],al
+ push_next:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je push_reg
+ cmp al,'('
+ je push_imm
+ cmp al,'['
+ jne invalid_operand
+ push_mem:
+ call get_address
+ mov al,[operand_size]
+ mov ah,[push_size]
+ cmp al,2
+ je push_mem_16bit
+ cmp al,4
+ je push_mem_32bit
+ cmp al,8
+ je push_mem_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp ah,2
+ je push_mem_16bit
+ cmp ah,4
+ je push_mem_32bit
+ cmp ah,8
+ je push_mem_64bit
+ call recoverable_unknown_size
+ jmp push_mem_store
+ push_mem_16bit:
+ test ah,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ jmp push_mem_store
+ push_mem_32bit:
+ test ah,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp push_mem_store
+ push_mem_64bit:
+ test ah,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ push_mem_store:
+ mov [base_code],0FFh
+ mov [postbyte_register],110b
+ call store_instruction
+ jmp push_done
+ push_reg:
+ lods byte [esi]
+ mov ah,al
+ sub ah,10h
+ and ah,al
+ test ah,0F0h
+ jnz push_sreg
+ call convert_register
+ test al,1000b
+ jz push_reg_ok
+ or [rex_prefix],41h
+ and al,111b
+ push_reg_ok:
+ add al,50h
+ mov [base_code],al
+ mov al,ah
+ mov ah,[push_size]
+ cmp al,2
+ je push_reg_16bit
+ cmp al,4
+ je push_reg_32bit
+ cmp al,8
+ jne invalid_operand_size
+ push_reg_64bit:
+ test ah,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp push_reg_store
+ push_reg_32bit:
+ test ah,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp push_reg_store
+ push_reg_16bit:
+ test ah,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ push_reg_store:
+ call store_instruction_code
+ jmp push_done
+ push_sreg:
+ mov bl,al
+ mov dl,[operand_size]
+ mov dh,[push_size]
+ cmp dl,2
+ je push_sreg16
+ cmp dl,4
+ je push_sreg32
+ cmp dl,8
+ je push_sreg64
+ or dl,dl
+ jnz invalid_operand_size
+ cmp dh,2
+ je push_sreg16
+ cmp dh,4
+ je push_sreg32
+ cmp dh,8
+ je push_sreg64
+ jmp push_sreg_store
+ push_sreg16:
+ test dh,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ jmp push_sreg_store
+ push_sreg32:
+ test dh,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp push_sreg_store
+ push_sreg64:
+ test dh,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ push_sreg_store:
+ mov al,bl
+ cmp al,70h
+ jae invalid_operand
+ sub al,61h
+ jc invalid_operand
+ cmp al,4
+ jae push_sreg_386
+ shl al,3
+ add al,6
+ mov [base_code],al
+ cmp [code_type],64
+ je illegal_instruction
+ jmp push_reg_store
+ push_sreg_386:
+ sub al,4
+ shl al,3
+ add al,0A0h
+ mov [extended_code],al
+ mov [base_code],0Fh
+ jmp push_reg_store
+ push_imm:
+ mov al,[operand_size]
+ mov ah,[push_size]
+ or al,al
+ je push_imm_size_ok
+ or ah,ah
+ je push_imm_size_ok
+ cmp al,ah
+ jne invalid_operand_size
+ push_imm_size_ok:
+ cmp al,2
+ je push_imm_16bit
+ cmp al,4
+ je push_imm_32bit
+ cmp al,8
+ je push_imm_64bit
+ cmp ah,2
+ je push_imm_optimized_16bit
+ cmp ah,4
+ je push_imm_optimized_32bit
+ cmp ah,8
+ je push_imm_optimized_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp [code_type],16
+ je push_imm_optimized_16bit
+ cmp [code_type],32
+ je push_imm_optimized_32bit
+ push_imm_optimized_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ call get_simm32
+ mov edx,eax
+ cmp [value_type],0
+ jne push_imm_32bit_store
+ cmp eax,-80h
+ jl push_imm_32bit_store
+ cmp eax,80h
+ jge push_imm_32bit_store
+ jmp push_imm_8bit
+ push_imm_optimized_32bit:
+ cmp [code_type],64
+ je illegal_instruction
+ call get_dword_value
+ mov edx,eax
+ call operand_32bit
+ cmp [value_type],0
+ jne push_imm_32bit_store
+ cmp eax,-80h
+ jl push_imm_32bit_store
+ cmp eax,80h
+ jge push_imm_32bit_store
+ jmp push_imm_8bit
+ push_imm_optimized_16bit:
+ call get_word_value
+ mov dx,ax
+ call operand_16bit
+ cmp [value_type],0
+ jne push_imm_16bit_store
+ cmp ax,-80h
+ jl push_imm_16bit_store
+ cmp ax,80h
+ jge push_imm_16bit_store
+ push_imm_8bit:
+ mov ah,al
+ mov [base_code],6Ah
+ call store_instruction_code
+ mov al,ah
+ stos byte [edi]
+ jmp push_done
+ push_imm_16bit:
+ call get_word_value
+ mov dx,ax
+ call operand_16bit
+ push_imm_16bit_store:
+ mov [base_code],68h
+ call store_instruction_code
+ mov ax,dx
+ call mark_relocation
+ stos word [edi]
+ jmp push_done
+ push_imm_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ call get_simm32
+ mov edx,eax
+ jmp push_imm_32bit_store
+ push_imm_32bit:
+ cmp [code_type],64
+ je illegal_instruction
+ call get_dword_value
+ mov edx,eax
+ call operand_32bit
+ push_imm_32bit_store:
+ mov [base_code],68h
+ call store_instruction_code
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ push_done:
+ lods byte [esi]
+ dec esi
+ cmp al,0Fh
+ je instruction_assembled
+ or al,al
+ jz instruction_assembled
+ mov [operand_size],0
+ mov [size_override],0
+ mov [operand_prefix],0
+ mov [rex_prefix],0
+ jmp push_next
+pop_instruction:
+ mov [push_size],al
+ pop_next:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pop_reg
+ cmp al,'['
+ jne invalid_operand
+ pop_mem:
+ call get_address
+ mov al,[operand_size]
+ mov ah,[push_size]
+ cmp al,2
+ je pop_mem_16bit
+ cmp al,4
+ je pop_mem_32bit
+ cmp al,8
+ je pop_mem_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp ah,2
+ je pop_mem_16bit
+ cmp ah,4
+ je pop_mem_32bit
+ cmp ah,8
+ je pop_mem_64bit
+ call recoverable_unknown_size
+ jmp pop_mem_store
+ pop_mem_16bit:
+ test ah,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ jmp pop_mem_store
+ pop_mem_32bit:
+ test ah,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp pop_mem_store
+ pop_mem_64bit:
+ test ah,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ pop_mem_store:
+ mov [base_code],08Fh
+ mov [postbyte_register],0
+ call store_instruction
+ jmp pop_done
+ pop_reg:
+ lods byte [esi]
+ mov ah,al
+ sub ah,10h
+ and ah,al
+ test ah,0F0h
+ jnz pop_sreg
+ call convert_register
+ test al,1000b
+ jz pop_reg_ok
+ or [rex_prefix],41h
+ and al,111b
+ pop_reg_ok:
+ add al,58h
+ mov [base_code],al
+ mov al,ah
+ mov ah,[push_size]
+ cmp al,2
+ je pop_reg_16bit
+ cmp al,4
+ je pop_reg_32bit
+ cmp al,8
+ je pop_reg_64bit
+ jmp invalid_operand_size
+ pop_reg_64bit:
+ test ah,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp pop_reg_store
+ pop_reg_32bit:
+ test ah,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp pop_reg_store
+ pop_reg_16bit:
+ test ah,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ pop_reg_store:
+ call store_instruction_code
+ pop_done:
+ lods byte [esi]
+ dec esi
+ cmp al,0Fh
+ je instruction_assembled
+ or al,al
+ jz instruction_assembled
+ mov [operand_size],0
+ mov [size_override],0
+ mov [operand_prefix],0
+ mov [rex_prefix],0
+ jmp pop_next
+ pop_sreg:
+ mov dl,[operand_size]
+ mov dh,[push_size]
+ cmp al,62h
+ je pop_cs
+ mov bl,al
+ cmp dl,2
+ je pop_sreg16
+ cmp dl,4
+ je pop_sreg32
+ cmp dl,8
+ je pop_sreg64
+ or dl,dl
+ jnz invalid_operand_size
+ cmp dh,2
+ je pop_sreg16
+ cmp dh,4
+ je pop_sreg32
+ cmp dh,8
+ je pop_sreg64
+ jmp pop_sreg_store
+ pop_sreg16:
+ test dh,not 2
+ jnz invalid_operand_size
+ call operand_16bit
+ jmp pop_sreg_store
+ pop_sreg32:
+ test dh,not 4
+ jnz invalid_operand_size
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp pop_sreg_store
+ pop_sreg64:
+ test dh,not 8
+ jnz invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ pop_sreg_store:
+ mov al,bl
+ cmp al,70h
+ jae invalid_operand
+ sub al,61h
+ jc invalid_operand
+ cmp al,4
+ jae pop_sreg_386
+ shl al,3
+ add al,7
+ mov [base_code],al
+ cmp [code_type],64
+ je illegal_instruction
+ jmp pop_reg_store
+ pop_cs:
+ cmp [code_type],16
+ jne illegal_instruction
+ cmp dl,2
+ je pop_cs_store
+ or dl,dl
+ jnz invalid_operand_size
+ cmp dh,2
+ je pop_cs_store
+ or dh,dh
+ jnz illegal_instruction
+ pop_cs_store:
+ test dh,not 2
+ jnz invalid_operand_size
+ mov al,0Fh
+ stos byte [edi]
+ jmp pop_done
+ pop_sreg_386:
+ sub al,4
+ shl al,3
+ add al,0A1h
+ mov [extended_code],al
+ mov [base_code],0Fh
+ jmp pop_reg_store
+inc_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je inc_reg
+ cmp al,'['
+ je inc_mem
+ jne invalid_operand
+ inc_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je inc_mem_8bit
+ jb inc_mem_nosize
+ call operand_autodetect
+ mov al,0FFh
+ xchg al,[base_code]
+ mov [postbyte_register],al
+ jmp instruction_ready
+ inc_mem_nosize:
+ call recoverable_unknown_size
+ inc_mem_8bit:
+ mov al,0FEh
+ xchg al,[base_code]
+ mov [postbyte_register],al
+ jmp instruction_ready
+ inc_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,0FEh
+ xchg al,[base_code]
+ mov [postbyte_register],al
+ mov al,ah
+ cmp al,1
+ je inc_reg_8bit
+ call operand_autodetect
+ cmp [code_type],64
+ je inc_reg_long_form
+ mov al,[postbyte_register]
+ shl al,3
+ add al,bl
+ add al,40h
+ mov [base_code],al
+ call store_instruction_code
+ jmp instruction_assembled
+ inc_reg_long_form:
+ inc [base_code]
+ inc_reg_8bit:
+ jmp nomem_instruction_ready
+set_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je set_reg
+ cmp al,'['
+ jne invalid_operand
+ set_mem:
+ call get_address
+ cmp [operand_size],1
+ ja invalid_operand_size
+ mov [postbyte_register],0
+ jmp instruction_ready
+ set_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,1
+ jne invalid_operand_size
+ mov bl,al
+ mov [postbyte_register],0
+ jmp nomem_instruction_ready
+arpl_instruction:
+ cmp [code_type],64
+ je illegal_instruction
+ mov [base_code],63h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je arpl_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ cmp ah,2
+ jne invalid_operand_size
+ jmp instruction_ready
+ arpl_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,2
+ jne invalid_operand_size
+ mov bl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ jmp nomem_instruction_ready
+bound_instruction:
+ cmp [code_type],64
+ je illegal_instruction
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,2
+ je bound_store
+ cmp al,4
+ jne invalid_operand_size
+ bound_store:
+ call operand_autodetect
+ mov [base_code],62h
+ jmp instruction_ready
+enter_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp ah,2
+ je enter_imm16_size_ok
+ or ah,ah
+ jnz invalid_operand_size
+ enter_imm16_size_ok:
+ cmp al,'('
+ jne invalid_operand
+ call get_word_value
+ cmp [next_pass_needed],0
+ jne enter_imm16_ok
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ test eax,eax
+ js value_out_of_range
+ enter_imm16_ok:
+ push eax
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp ah,1
+ je enter_imm8_size_ok
+ or ah,ah
+ jnz invalid_operand_size
+ enter_imm8_size_ok:
+ cmp al,'('
+ jne invalid_operand
+ call get_byte_value
+ cmp [next_pass_needed],0
+ jne enter_imm8_ok
+ test eax,eax
+ js value_out_of_range
+ enter_imm8_ok:
+ mov dl,al
+ pop ebx
+ mov al,0C8h
+ stos byte [edi]
+ mov ax,bx
+ stos word [edi]
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ret_instruction_only64:
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp ret_instruction
+ret_instruction_32bit_except64:
+ cmp [code_type],64
+ je illegal_instruction
+ret_instruction_32bit:
+ call operand_32bit
+ jmp ret_instruction
+ret_instruction_16bit:
+ call operand_16bit
+ jmp ret_instruction
+retf_instruction:
+ cmp [code_type],64
+ jne ret_instruction
+ret_instruction_64bit:
+ call operand_64bit
+ret_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ dec esi
+ or al,al
+ jz simple_ret
+ cmp al,0Fh
+ je simple_ret
+ lods byte [esi]
+ call get_size_operator
+ or ah,ah
+ jz ret_imm
+ cmp ah,2
+ je ret_imm
+ jmp invalid_operand_size
+ ret_imm:
+ cmp al,'('
+ jne invalid_operand
+ call get_word_value
+ cmp [next_pass_needed],0
+ jne ret_imm_ok
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ test eax,eax
+ js value_out_of_range
+ ret_imm_ok:
+ cmp [size_declared],0
+ jne ret_imm_store
+ or ax,ax
+ jz simple_ret
+ ret_imm_store:
+ mov dx,ax
+ call store_instruction_code
+ mov ax,dx
+ stos word [edi]
+ jmp instruction_assembled
+ simple_ret:
+ inc [base_code]
+ call store_instruction_code
+ jmp instruction_assembled
+lea_instruction:
+ mov [base_code],8Dh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ xor al,al
+ xchg al,[operand_size]
+ push eax
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ mov [size_override],-1
+ call get_address
+ pop eax
+ mov [operand_size],al
+ call operand_autodetect
+ jmp instruction_ready
+ls_instruction:
+ or al,al
+ jz les_instruction
+ cmp al,3
+ jz lds_instruction
+ add al,0B0h
+ mov [extended_code],al
+ mov [base_code],0Fh
+ jmp ls_code_ok
+ les_instruction:
+ mov [base_code],0C4h
+ jmp ls_short_code
+ lds_instruction:
+ mov [base_code],0C5h
+ ls_short_code:
+ cmp [code_type],64
+ je illegal_instruction
+ ls_code_ok:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ add [operand_size],2
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,4
+ je ls_16bit
+ cmp al,6
+ je ls_32bit
+ cmp al,10
+ je ls_64bit
+ jmp invalid_operand_size
+ ls_16bit:
+ call operand_16bit
+ jmp instruction_ready
+ ls_32bit:
+ call operand_32bit
+ jmp instruction_ready
+ ls_64bit:
+ call operand_64bit
+ jmp instruction_ready
+sh_instruction:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je sh_reg
+ cmp al,'['
+ jne invalid_operand
+ sh_mem:
+ call get_address
+ push edx ebx ecx
+ mov al,[operand_size]
+ push eax
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je sh_mem_imm
+ cmp al,10h
+ jne invalid_operand
+ sh_mem_reg:
+ lods byte [esi]
+ cmp al,11h
+ jne invalid_operand
+ pop eax ecx ebx edx
+ cmp al,1
+ je sh_mem_cl_8bit
+ jb sh_mem_cl_nosize
+ call operand_autodetect
+ mov [base_code],0D3h
+ jmp instruction_ready
+ sh_mem_cl_nosize:
+ call recoverable_unknown_size
+ sh_mem_cl_8bit:
+ mov [base_code],0D2h
+ jmp instruction_ready
+ sh_mem_imm:
+ mov al,[operand_size]
+ or al,al
+ jz sh_mem_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ sh_mem_imm_size_ok:
+ call get_byte_value
+ mov byte [value],al
+ pop eax ecx ebx edx
+ cmp al,1
+ je sh_mem_imm_8bit
+ jb sh_mem_imm_nosize
+ call operand_autodetect
+ cmp byte [value],1
+ je sh_mem_1
+ mov [base_code],0C1h
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ sh_mem_1:
+ mov [base_code],0D1h
+ jmp instruction_ready
+ sh_mem_imm_nosize:
+ call recoverable_unknown_size
+ sh_mem_imm_8bit:
+ cmp byte [value],1
+ je sh_mem_1_8bit
+ mov [base_code],0C0h
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ sh_mem_1_8bit:
+ mov [base_code],0D0h
+ jmp instruction_ready
+ sh_reg:
+ lods byte [esi]
+ call convert_register
+ mov bx,ax
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je sh_reg_imm
+ cmp al,10h
+ jne invalid_operand
+ sh_reg_reg:
+ lods byte [esi]
+ cmp al,11h
+ jne invalid_operand
+ mov al,bh
+ cmp al,1
+ je sh_reg_cl_8bit
+ call operand_autodetect
+ mov [base_code],0D3h
+ jmp nomem_instruction_ready
+ sh_reg_cl_8bit:
+ mov [base_code],0D2h
+ jmp nomem_instruction_ready
+ sh_reg_imm:
+ mov al,[operand_size]
+ or al,al
+ jz sh_reg_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ sh_reg_imm_size_ok:
+ push ebx
+ call get_byte_value
+ mov dl,al
+ pop ebx
+ mov al,bh
+ cmp al,1
+ je sh_reg_imm_8bit
+ call operand_autodetect
+ cmp dl,1
+ je sh_reg_1
+ mov [base_code],0C1h
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ sh_reg_1:
+ mov [base_code],0D1h
+ jmp nomem_instruction_ready
+ sh_reg_imm_8bit:
+ cmp dl,1
+ je sh_reg_1_8bit
+ mov [base_code],0C0h
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ sh_reg_1_8bit:
+ mov [base_code],0D0h
+ jmp nomem_instruction_ready
+shd_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je shd_reg
+ cmp al,'['
+ jne invalid_operand
+ shd_mem:
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov al,ah
+ mov [operand_size],0
+ push eax
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je shd_mem_reg_imm
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,11h
+ jne invalid_operand
+ pop eax ecx ebx edx
+ call operand_autodetect
+ inc [extended_code]
+ jmp instruction_ready
+ shd_mem_reg_imm:
+ mov al,[operand_size]
+ or al,al
+ jz shd_mem_reg_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ shd_mem_reg_imm_size_ok:
+ call get_byte_value
+ mov byte [value],al
+ pop eax ecx ebx edx
+ call operand_autodetect
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ shd_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,[postbyte_register]
+ mov [postbyte_register],al
+ mov al,ah
+ push eax ebx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je shd_reg_reg_imm
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,11h
+ jne invalid_operand
+ pop ebx eax
+ call operand_autodetect
+ inc [extended_code]
+ jmp nomem_instruction_ready
+ shd_reg_reg_imm:
+ mov al,[operand_size]
+ or al,al
+ jz shd_reg_reg_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ shd_reg_reg_imm_size_ok:
+ call get_byte_value
+ mov dl,al
+ pop ebx eax
+ call operand_autodetect
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+movx_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ mov al,ah
+ push eax
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movx_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ pop eax
+ mov ah,[operand_size]
+ or ah,ah
+ jz movx_unknown_size
+ cmp ah,al
+ jae invalid_operand_size
+ cmp ah,1
+ je movx_mem_store
+ cmp ah,2
+ jne invalid_operand_size
+ inc [extended_code]
+ movx_mem_store:
+ call operand_autodetect
+ jmp instruction_ready
+ movx_unknown_size:
+ call recoverable_unknown_size
+ jmp movx_mem_store
+ movx_reg:
+ lods byte [esi]
+ call convert_register
+ pop ebx
+ xchg bl,al
+ cmp ah,al
+ jae invalid_operand_size
+ cmp ah,1
+ je movx_reg_8bit
+ cmp ah,2
+ je movx_reg_16bit
+ jmp invalid_operand_size
+ movx_reg_8bit:
+ call operand_autodetect
+ jmp nomem_instruction_ready
+ movx_reg_16bit:
+ call operand_autodetect
+ inc [extended_code]
+ jmp nomem_instruction_ready
+movsxd_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ cmp ah,8
+ jne invalid_operand_size
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movsxd_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],4
+ je movsxd_mem_store
+ cmp [operand_size],0
+ jne invalid_operand_size
+ movsxd_mem_store:
+ call operand_64bit
+ jmp instruction_ready
+ movsxd_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ jne invalid_operand_size
+ mov bl,al
+ call operand_64bit
+ jmp nomem_instruction_ready
+bt_instruction:
+ mov [postbyte_register],al
+ shl al,3
+ add al,83h
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je bt_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ push eax ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ cmp byte [esi],'('
+ je bt_mem_imm
+ cmp byte [esi],11h
+ jne bt_mem_reg
+ cmp byte [esi+2],'('
+ je bt_mem_imm
+ bt_mem_reg:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov al,ah
+ call operand_autodetect
+ jmp instruction_ready
+ bt_mem_imm:
+ xor al,al
+ xchg al,[operand_size]
+ push eax
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ mov al,[operand_size]
+ or al,al
+ jz bt_mem_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ bt_mem_imm_size_ok:
+ call get_byte_value
+ mov byte [value],al
+ pop eax
+ or al,al
+ jz bt_mem_imm_nosize
+ call operand_autodetect
+ bt_mem_imm_store:
+ pop ecx ebx edx
+ mov [extended_code],0BAh
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ bt_mem_imm_nosize:
+ call recoverable_unknown_size
+ jmp bt_mem_imm_store
+ bt_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ cmp byte [esi],'('
+ je bt_reg_imm
+ cmp byte [esi],11h
+ jne bt_reg_reg
+ cmp byte [esi+2],'('
+ je bt_reg_imm
+ bt_reg_reg:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ mov al,ah
+ call operand_autodetect
+ jmp nomem_instruction_ready
+ bt_reg_imm:
+ xor al,al
+ xchg al,[operand_size]
+ push eax ebx
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ mov al,[operand_size]
+ or al,al
+ jz bt_reg_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ bt_reg_imm_size_ok:
+ call get_byte_value
+ mov byte [value],al
+ pop ebx eax
+ call operand_autodetect
+ bt_reg_imm_store:
+ mov [extended_code],0BAh
+ call store_nomem_instruction
+ mov al,byte [value]
+ stos byte [edi]
+ jmp instruction_assembled
+bs_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ call get_reg_mem
+ jc bs_reg_reg
+ mov al,[operand_size]
+ call operand_autodetect
+ jmp instruction_ready
+ bs_reg_reg:
+ mov al,ah
+ call operand_autodetect
+ jmp nomem_instruction_ready
+ get_reg_mem:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je get_reg_reg
+ cmp al,'['
+ jne invalid_argument
+ call get_address
+ clc
+ ret
+ get_reg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ stc
+ ret
+
+imul_instruction:
+ mov [base_code],0F6h
+ mov [postbyte_register],5
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je imul_reg
+ cmp al,'['
+ jne invalid_operand
+ imul_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,1
+ je imul_mem_8bit
+ jb imul_mem_nosize
+ call operand_autodetect
+ inc [base_code]
+ jmp instruction_ready
+ imul_mem_nosize:
+ call recoverable_unknown_size
+ imul_mem_8bit:
+ jmp instruction_ready
+ imul_reg:
+ lods byte [esi]
+ call convert_register
+ cmp byte [esi],','
+ je imul_reg_
+ mov bl,al
+ mov al,ah
+ cmp al,1
+ je imul_reg_8bit
+ call operand_autodetect
+ inc [base_code]
+ imul_reg_8bit:
+ jmp nomem_instruction_ready
+ imul_reg_:
+ mov [postbyte_register],al
+ inc esi
+ cmp byte [esi],'('
+ je imul_reg_imm
+ cmp byte [esi],11h
+ jne imul_reg_noimm
+ cmp byte [esi+2],'('
+ je imul_reg_imm
+ imul_reg_noimm:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je imul_reg_reg
+ cmp al,'['
+ jne invalid_operand
+ imul_reg_mem:
+ call get_address
+ push edx ebx ecx
+ cmp byte [esi],','
+ je imul_reg_mem_imm
+ mov al,[operand_size]
+ call operand_autodetect
+ pop ecx ebx edx
+ mov [base_code],0Fh
+ mov [extended_code],0AFh
+ jmp instruction_ready
+ imul_reg_mem_imm:
+ inc esi
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ mov al,[operand_size]
+ cmp al,2
+ je imul_reg_mem_imm_16bit
+ cmp al,4
+ je imul_reg_mem_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ imul_reg_mem_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp imul_reg_mem_imm_32bit_ok
+ imul_reg_mem_imm_16bit:
+ call operand_16bit
+ call get_word_value
+ mov word [value],ax
+ cmp [value_type],0
+ jne imul_reg_mem_imm_16bit_store
+ cmp [size_declared],0
+ jne imul_reg_mem_imm_16bit_store
+ cmp ax,-80h
+ jl imul_reg_mem_imm_16bit_store
+ cmp ax,80h
+ jl imul_reg_mem_imm_8bit_store
+ imul_reg_mem_imm_16bit_store:
+ pop ecx ebx edx
+ mov [base_code],69h
+ call store_instruction_with_imm16
+ jmp instruction_assembled
+ imul_reg_mem_imm_32bit:
+ call operand_32bit
+ call get_dword_value
+ imul_reg_mem_imm_32bit_ok:
+ mov dword [value],eax
+ cmp [value_type],0
+ jne imul_reg_mem_imm_32bit_store
+ cmp [size_declared],0
+ jne imul_reg_mem_imm_32bit_store
+ cmp eax,-80h
+ jl imul_reg_mem_imm_32bit_store
+ cmp eax,80h
+ jl imul_reg_mem_imm_8bit_store
+ imul_reg_mem_imm_32bit_store:
+ pop ecx ebx edx
+ mov [base_code],69h
+ call store_instruction_with_imm32
+ jmp instruction_assembled
+ imul_reg_mem_imm_8bit_store:
+ pop ecx ebx edx
+ mov [base_code],6Bh
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ imul_reg_imm:
+ mov bl,[postbyte_register]
+ dec esi
+ jmp imul_reg_reg_imm
+ imul_reg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ cmp byte [esi],','
+ je imul_reg_reg_imm
+ mov al,ah
+ call operand_autodetect
+ mov [base_code],0Fh
+ mov [extended_code],0AFh
+ jmp nomem_instruction_ready
+ imul_reg_reg_imm:
+ inc esi
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ mov al,[operand_size]
+ cmp al,2
+ je imul_reg_reg_imm_16bit
+ cmp al,4
+ je imul_reg_reg_imm_32bit
+ cmp al,8
+ jne invalid_operand_size
+ imul_reg_reg_imm_64bit:
+ cmp [size_declared],0
+ jne long_immediate_not_encodable
+ call operand_64bit
+ push ebx
+ call get_simm32
+ cmp [value_type],4
+ jae long_immediate_not_encodable
+ jmp imul_reg_reg_imm_32bit_ok
+ imul_reg_reg_imm_16bit:
+ call operand_16bit
+ push ebx
+ call get_word_value
+ pop ebx
+ mov dx,ax
+ cmp [value_type],0
+ jne imul_reg_reg_imm_16bit_store
+ cmp [size_declared],0
+ jne imul_reg_reg_imm_16bit_store
+ cmp ax,-80h
+ jl imul_reg_reg_imm_16bit_store
+ cmp ax,80h
+ jl imul_reg_reg_imm_8bit_store
+ imul_reg_reg_imm_16bit_store:
+ mov [base_code],69h
+ call store_nomem_instruction
+ mov ax,dx
+ call mark_relocation
+ stos word [edi]
+ jmp instruction_assembled
+ imul_reg_reg_imm_32bit:
+ call operand_32bit
+ push ebx
+ call get_dword_value
+ imul_reg_reg_imm_32bit_ok:
+ pop ebx
+ mov edx,eax
+ cmp [value_type],0
+ jne imul_reg_reg_imm_32bit_store
+ cmp [size_declared],0
+ jne imul_reg_reg_imm_32bit_store
+ cmp eax,-80h
+ jl imul_reg_reg_imm_32bit_store
+ cmp eax,80h
+ jl imul_reg_reg_imm_8bit_store
+ imul_reg_reg_imm_32bit_store:
+ mov [base_code],69h
+ call store_nomem_instruction
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ imul_reg_reg_imm_8bit_store:
+ mov [base_code],6Bh
+ call store_nomem_instruction
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+in_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ or al,al
+ jnz invalid_operand
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov al,ah
+ push eax
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je in_imm
+ cmp al,10h
+ je in_reg
+ jmp invalid_operand
+ in_reg:
+ lods byte [esi]
+ cmp al,22h
+ jne invalid_operand
+ pop eax
+ cmp al,1
+ je in_al_dx
+ cmp al,2
+ je in_ax_dx
+ cmp al,4
+ jne invalid_operand_size
+ in_ax_dx:
+ call operand_autodetect
+ mov [base_code],0EDh
+ call store_instruction_code
+ jmp instruction_assembled
+ in_al_dx:
+ mov al,0ECh
+ stos byte [edi]
+ jmp instruction_assembled
+ in_imm:
+ mov al,[operand_size]
+ or al,al
+ jz in_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ in_imm_size_ok:
+ call get_byte_value
+ mov dl,al
+ pop eax
+ cmp al,1
+ je in_al_imm
+ cmp al,2
+ je in_ax_imm
+ cmp al,4
+ jne invalid_operand_size
+ in_ax_imm:
+ call operand_autodetect
+ mov [base_code],0E5h
+ call store_instruction_code
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ in_al_imm:
+ mov al,0E4h
+ stos byte [edi]
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+out_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'('
+ je out_imm
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,22h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ or al,al
+ jnz invalid_operand
+ mov al,ah
+ cmp al,1
+ je out_dx_al
+ cmp al,2
+ je out_dx_ax
+ cmp al,4
+ jne invalid_operand_size
+ out_dx_ax:
+ call operand_autodetect
+ mov [base_code],0EFh
+ call store_instruction_code
+ jmp instruction_assembled
+ out_dx_al:
+ mov al,0EEh
+ stos byte [edi]
+ jmp instruction_assembled
+ out_imm:
+ mov al,[operand_size]
+ or al,al
+ jz out_imm_size_ok
+ cmp al,1
+ jne invalid_operand_size
+ out_imm_size_ok:
+ call get_byte_value
+ mov dl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ or al,al
+ jnz invalid_operand
+ mov al,ah
+ cmp al,1
+ je out_imm_al
+ cmp al,2
+ je out_imm_ax
+ cmp al,4
+ jne invalid_operand_size
+ out_imm_ax:
+ call operand_autodetect
+ mov [base_code],0E7h
+ call store_instruction_code
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+ out_imm_al:
+ mov al,0E6h
+ stos byte [edi]
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+
+call_instruction:
+ mov [postbyte_register],10b
+ mov [base_code],0E8h
+ mov [extended_code],9Ah
+ jmp process_jmp
+jmp_instruction:
+ mov [postbyte_register],100b
+ mov [base_code],0E9h
+ mov [extended_code],0EAh
+ process_jmp:
+ lods byte [esi]
+ call get_jump_operator
+ call get_size_operator
+ cmp al,'('
+ je jmp_imm
+ mov [base_code],0FFh
+ cmp al,10h
+ je jmp_reg
+ cmp al,'['
+ jne invalid_operand
+ jmp_mem:
+ cmp [jump_type],1
+ je illegal_instruction
+ call get_address
+ mov edx,eax
+ mov al,[operand_size]
+ or al,al
+ jz jmp_mem_size_not_specified
+ cmp al,2
+ je jmp_mem_16bit
+ cmp al,4
+ je jmp_mem_32bit
+ cmp al,6
+ je jmp_mem_48bit
+ cmp al,8
+ je jmp_mem_64bit
+ cmp al,10
+ je jmp_mem_80bit
+ jmp invalid_operand_size
+ jmp_mem_size_not_specified:
+ cmp [jump_type],3
+ je jmp_mem_far
+ cmp [jump_type],2
+ je jmp_mem_near
+ call recoverable_unknown_size
+ jmp_mem_near:
+ cmp [code_type],16
+ je jmp_mem_16bit
+ cmp [code_type],32
+ je jmp_mem_near_32bit
+ jmp_mem_64bit:
+ cmp [jump_type],3
+ je invalid_operand_size
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp instruction_ready
+ jmp_mem_far:
+ cmp [code_type],16
+ je jmp_mem_far_32bit
+ jmp_mem_48bit:
+ call operand_32bit
+ jmp_mem_far_store:
+ cmp [jump_type],2
+ je invalid_operand_size
+ inc [postbyte_register]
+ jmp instruction_ready
+ jmp_mem_80bit:
+ call operand_64bit
+ jmp jmp_mem_far_store
+ jmp_mem_far_32bit:
+ call operand_16bit
+ jmp jmp_mem_far_store
+ jmp_mem_32bit:
+ cmp [jump_type],3
+ je jmp_mem_far_32bit
+ cmp [jump_type],2
+ je jmp_mem_near_32bit
+ cmp [code_type],16
+ je jmp_mem_far_32bit
+ jmp_mem_near_32bit:
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp instruction_ready
+ jmp_mem_16bit:
+ cmp [jump_type],3
+ je invalid_operand_size
+ call operand_16bit
+ jmp instruction_ready
+ jmp_reg:
+ test [jump_type],1
+ jnz invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ cmp al,2
+ je jmp_reg_16bit
+ cmp al,4
+ je jmp_reg_32bit
+ cmp al,8
+ jne invalid_operand_size
+ jmp_reg_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp nomem_instruction_ready
+ jmp_reg_32bit:
+ cmp [code_type],64
+ je illegal_instruction
+ call operand_32bit
+ jmp nomem_instruction_ready
+ jmp_reg_16bit:
+ call operand_16bit
+ jmp nomem_instruction_ready
+ jmp_imm:
+ cmp byte [esi],'.'
+ je invalid_value
+ mov ebx,esi
+ dec esi
+ call skip_symbol
+ xchg esi,ebx
+ cmp byte [ebx],':'
+ je jmp_far
+ cmp [jump_type],3
+ je invalid_operand
+ jmp_near:
+ mov al,[operand_size]
+ cmp al,2
+ je jmp_imm_16bit
+ cmp al,4
+ je jmp_imm_32bit
+ cmp al,8
+ je jmp_imm_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp [code_type],16
+ je jmp_imm_16bit
+ cmp [code_type],64
+ je jmp_imm_64bit
+ jmp_imm_32bit:
+ cmp [code_type],64
+ je invalid_operand_size
+ call get_address_dword_value
+ cmp [code_type],16
+ jne jmp_imm_32bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ jmp_imm_32bit_prefix_ok:
+ call calculate_jump_offset
+ cdq
+ call check_for_short_jump
+ jc jmp_short
+ jmp_imm_32bit_store:
+ mov edx,eax
+ sub edx,3
+ jno jmp_imm_32bit_ok
+ cmp [code_type],64
+ je relative_jump_out_of_range
+ jmp_imm_32bit_ok:
+ mov al,[base_code]
+ stos byte [edi]
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ jmp_imm_64bit:
+ cmp [code_type],64
+ jne invalid_operand_size
+ call get_address_qword_value
+ call calculate_jump_offset
+ mov ecx,edx
+ cdq
+ cmp edx,ecx
+ jne relative_jump_out_of_range
+ call check_for_short_jump
+ jnc jmp_imm_32bit_store
+ jmp_short:
+ mov ah,al
+ mov al,0EBh
+ stos word [edi]
+ jmp instruction_assembled
+ jmp_imm_16bit:
+ call get_address_word_value
+ cmp [code_type],16
+ je jmp_imm_16bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ jmp_imm_16bit_prefix_ok:
+ call calculate_jump_offset
+ cwde
+ cdq
+ call check_for_short_jump
+ jc jmp_short
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ mov edx,eax
+ dec edx
+ mov al,[base_code]
+ stos byte [edi]
+ mov eax,edx
+ stos word [edi]
+ jmp instruction_assembled
+ calculate_jump_offset:
+ add edi,2
+ mov ebp,[addressing_space]
+ call calculate_relative_offset
+ sub edi,2
+ ret
+ check_for_short_jump:
+ cmp [jump_type],1
+ je forced_short
+ ja no_short_jump
+ cmp [base_code],0E8h
+ je no_short_jump
+ cmp [value_type],0
+ jne no_short_jump
+ cmp eax,80h
+ jb short_jump
+ cmp eax,-80h
+ jae short_jump
+ no_short_jump:
+ clc
+ ret
+ forced_short:
+ cmp [base_code],0E8h
+ je illegal_instruction
+ cmp [next_pass_needed],0
+ jne jmp_short_value_type_ok
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ jmp_short_value_type_ok:
+ cmp eax,-80h
+ jae short_jump
+ cmp eax,80h
+ jae jump_out_of_range
+ short_jump:
+ stc
+ ret
+ jump_out_of_range:
+ cmp [error_line],0
+ jne instruction_assembled
+ mov eax,[current_line]
+ mov [error_line],eax
+ mov [error],relative_jump_out_of_range
+ jmp instruction_assembled
+ jmp_far:
+ cmp [jump_type],2
+ je invalid_operand
+ cmp [code_type],64
+ je illegal_instruction
+ mov al,[extended_code]
+ mov [base_code],al
+ call get_word_value
+ push eax
+ inc esi
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_operand
+ mov al,[value_type]
+ push eax [symbol_identifier]
+ cmp byte [esi],'.'
+ je invalid_value
+ mov al,[operand_size]
+ cmp al,4
+ je jmp_far_16bit
+ cmp al,6
+ je jmp_far_32bit
+ or al,al
+ jnz invalid_operand_size
+ cmp [code_type],16
+ jne jmp_far_32bit
+ jmp_far_16bit:
+ call get_word_value
+ mov ebx,eax
+ call operand_16bit
+ call store_instruction_code
+ mov ax,bx
+ call mark_relocation
+ stos word [edi]
+ jmp_far_segment:
+ pop [symbol_identifier] eax
+ mov [value_type],al
+ pop eax
+ call mark_relocation
+ stos word [edi]
+ jmp instruction_assembled
+ jmp_far_32bit:
+ call get_dword_value
+ mov ebx,eax
+ call operand_32bit
+ call store_instruction_code
+ mov eax,ebx
+ call mark_relocation
+ stos dword [edi]
+ jmp jmp_far_segment
+conditional_jump:
+ mov [base_code],al
+ lods byte [esi]
+ call get_jump_operator
+ cmp [jump_type],3
+ je invalid_operand
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ cmp byte [esi],'.'
+ je invalid_value
+ mov al,[operand_size]
+ cmp al,2
+ je conditional_jump_16bit
+ cmp al,4
+ je conditional_jump_32bit
+ cmp al,8
+ je conditional_jump_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp [code_type],16
+ je conditional_jump_16bit
+ cmp [code_type],64
+ je conditional_jump_64bit
+ conditional_jump_32bit:
+ cmp [code_type],64
+ je invalid_operand_size
+ call get_address_dword_value
+ cmp [code_type],16
+ jne conditional_jump_32bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ conditional_jump_32bit_prefix_ok:
+ call calculate_jump_offset
+ cdq
+ call check_for_short_jump
+ jc conditional_jump_short
+ conditional_jump_32bit_store:
+ mov edx,eax
+ sub edx,4
+ jno conditional_jump_32bit_range_ok
+ cmp [code_type],64
+ je relative_jump_out_of_range
+ conditional_jump_32bit_range_ok:
+ mov ah,[base_code]
+ add ah,10h
+ mov al,0Fh
+ stos word [edi]
+ mov eax,edx
+ call mark_relocation
+ stos dword [edi]
+ jmp instruction_assembled
+ conditional_jump_64bit:
+ cmp [code_type],64
+ jne invalid_operand_size
+ call get_address_qword_value
+ call calculate_jump_offset
+ mov ecx,edx
+ cdq
+ cmp edx,ecx
+ jne relative_jump_out_of_range
+ call check_for_short_jump
+ jnc conditional_jump_32bit_store
+ conditional_jump_short:
+ mov ah,al
+ mov al,[base_code]
+ stos word [edi]
+ jmp instruction_assembled
+ conditional_jump_16bit:
+ call get_address_word_value
+ cmp [code_type],16
+ je conditional_jump_16bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ conditional_jump_16bit_prefix_ok:
+ call calculate_jump_offset
+ cwde
+ cdq
+ call check_for_short_jump
+ jc conditional_jump_short
+ cmp [value_type],0
+ jne invalid_use_of_symbol
+ mov edx,eax
+ sub dx,2
+ mov ah,[base_code]
+ add ah,10h
+ mov al,0Fh
+ stos word [edi]
+ mov eax,edx
+ stos word [edi]
+ jmp instruction_assembled
+loop_instruction_16bit:
+ cmp [code_type],64
+ je illegal_instruction
+ cmp [code_type],16
+ je loop_instruction
+ mov [operand_prefix],67h
+ jmp loop_instruction
+loop_instruction_32bit:
+ cmp [code_type],32
+ je loop_instruction
+ mov [operand_prefix],67h
+ jmp loop_instruction
+loop_instruction_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+loop_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ call get_jump_operator
+ cmp [jump_type],1
+ ja invalid_operand
+ call get_size_operator
+ cmp al,'('
+ jne invalid_operand
+ cmp byte [esi],'.'
+ je invalid_value
+ mov al,[operand_size]
+ cmp al,2
+ je loop_jump_16bit
+ cmp al,4
+ je loop_jump_32bit
+ cmp al,8
+ je loop_jump_64bit
+ or al,al
+ jnz invalid_operand_size
+ cmp [code_type],16
+ je loop_jump_16bit
+ cmp [code_type],64
+ je loop_jump_64bit
+ loop_jump_32bit:
+ cmp [code_type],64
+ je invalid_operand_size
+ call get_address_dword_value
+ cmp [code_type],16
+ jne loop_jump_32bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ loop_jump_32bit_prefix_ok:
+ call loop_counter_size
+ call calculate_jump_offset
+ cdq
+ make_loop_jump:
+ call check_for_short_jump
+ jc conditional_jump_short
+ scas word [edi]
+ jmp jump_out_of_range
+ loop_counter_size:
+ cmp [operand_prefix],0
+ je loop_counter_size_ok
+ push eax
+ mov al,[operand_prefix]
+ stos byte [edi]
+ pop eax
+ loop_counter_size_ok:
+ ret
+ loop_jump_64bit:
+ cmp [code_type],64
+ jne invalid_operand_size
+ call get_address_qword_value
+ call loop_counter_size
+ call calculate_jump_offset
+ mov ecx,edx
+ cdq
+ cmp edx,ecx
+ jne relative_jump_out_of_range
+ jmp make_loop_jump
+ loop_jump_16bit:
+ call get_address_word_value
+ cmp [code_type],16
+ je loop_jump_16bit_prefix_ok
+ mov byte [edi],66h
+ inc edi
+ loop_jump_16bit_prefix_ok:
+ call loop_counter_size
+ call calculate_jump_offset
+ cwde
+ cdq
+ jmp make_loop_jump
+
+movs_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp [segment_register],1
+ ja invalid_address
+ push ebx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ pop edx
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ mov al,dh
+ mov ah,bh
+ shr al,4
+ shr ah,4
+ cmp al,ah
+ jne address_sizes_do_not_agree
+ and bh,111b
+ and dh,111b
+ cmp bh,6
+ jne invalid_address
+ cmp dh,7
+ jne invalid_address
+ cmp al,2
+ je movs_address_16bit
+ cmp al,4
+ je movs_address_32bit
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp movs_store
+ movs_address_32bit:
+ call address_32bit_prefix
+ jmp movs_store
+ movs_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ movs_store:
+ xor ebx,ebx
+ call store_segment_prefix_if_necessary
+ mov al,0A4h
+ movs_check_size:
+ mov bl,[operand_size]
+ cmp bl,1
+ je simple_instruction
+ inc al
+ cmp bl,2
+ je simple_instruction_16bit
+ cmp bl,4
+ je simple_instruction_32bit
+ cmp bl,8
+ je simple_instruction_64bit
+ or bl,bl
+ jnz invalid_operand_size
+ call recoverable_unknown_size
+ jmp simple_instruction
+lods_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp bh,26h
+ je lods_address_16bit
+ cmp bh,46h
+ je lods_address_32bit
+ cmp bh,86h
+ jne invalid_address
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp lods_store
+ lods_address_32bit:
+ call address_32bit_prefix
+ jmp lods_store
+ lods_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ lods_store:
+ xor ebx,ebx
+ call store_segment_prefix_if_necessary
+ mov al,0ACh
+ jmp movs_check_size
+stos_instruction:
+ mov [base_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp bh,27h
+ je stos_address_16bit
+ cmp bh,47h
+ je stos_address_32bit
+ cmp bh,87h
+ jne invalid_address
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp stos_store
+ stos_address_32bit:
+ call address_32bit_prefix
+ jmp stos_store
+ stos_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ stos_store:
+ cmp [segment_register],1
+ ja invalid_address
+ mov al,[base_code]
+ jmp movs_check_size
+cmps_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ mov al,[segment_register]
+ push eax ebx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ pop edx eax
+ cmp [segment_register],1
+ ja invalid_address
+ mov [segment_register],al
+ mov al,dh
+ mov ah,bh
+ shr al,4
+ shr ah,4
+ cmp al,ah
+ jne address_sizes_do_not_agree
+ and bh,111b
+ and dh,111b
+ cmp bh,7
+ jne invalid_address
+ cmp dh,6
+ jne invalid_address
+ cmp al,2
+ je cmps_address_16bit
+ cmp al,4
+ je cmps_address_32bit
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp cmps_store
+ cmps_address_32bit:
+ call address_32bit_prefix
+ jmp cmps_store
+ cmps_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ cmps_store:
+ xor ebx,ebx
+ call store_segment_prefix_if_necessary
+ mov al,0A6h
+ jmp movs_check_size
+ins_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp bh,27h
+ je ins_address_16bit
+ cmp bh,47h
+ je ins_address_32bit
+ cmp bh,87h
+ jne invalid_address
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp ins_store
+ ins_address_32bit:
+ call address_32bit_prefix
+ jmp ins_store
+ ins_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ ins_store:
+ cmp [segment_register],1
+ ja invalid_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,22h
+ jne invalid_operand
+ mov al,6Ch
+ ins_check_size:
+ cmp [operand_size],8
+ jne movs_check_size
+ jmp invalid_operand_size
+outs_instruction:
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,22h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp bh,26h
+ je outs_address_16bit
+ cmp bh,46h
+ je outs_address_32bit
+ cmp bh,86h
+ jne invalid_address
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp outs_store
+ outs_address_32bit:
+ call address_32bit_prefix
+ jmp outs_store
+ outs_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ outs_store:
+ xor ebx,ebx
+ call store_segment_prefix_if_necessary
+ mov al,6Eh
+ jmp ins_check_size
+xlat_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ or eax,eax
+ jnz invalid_address
+ or bl,ch
+ jnz invalid_address
+ cmp bh,23h
+ je xlat_address_16bit
+ cmp bh,43h
+ je xlat_address_32bit
+ cmp bh,83h
+ jne invalid_address
+ cmp [code_type],64
+ jne invalid_address_size
+ jmp xlat_store
+ xlat_address_32bit:
+ call address_32bit_prefix
+ jmp xlat_store
+ xlat_address_16bit:
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ xlat_store:
+ call store_segment_prefix_if_necessary
+ mov al,0D7h
+ cmp [operand_size],1
+ jbe simple_instruction
+ jmp invalid_operand_size
+
+pm_word_instruction:
+ mov ah,al
+ shr ah,4
+ and al,111b
+ mov [base_code],0Fh
+ mov [extended_code],ah
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pm_reg
+ pm_mem:
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,2
+ je pm_mem_store
+ or al,al
+ jnz invalid_operand_size
+ pm_mem_store:
+ jmp instruction_ready
+ pm_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ cmp ah,2
+ jne invalid_operand_size
+ jmp nomem_instruction_ready
+pm_store_word_instruction:
+ mov ah,al
+ shr ah,4
+ and al,111b
+ mov [base_code],0Fh
+ mov [extended_code],ah
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne pm_mem
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ call operand_autodetect
+ jmp nomem_instruction_ready
+lgdt_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],1
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,6
+ je lgdt_mem_48bit
+ cmp al,10
+ je lgdt_mem_80bit
+ or al,al
+ jnz invalid_operand_size
+ jmp lgdt_mem_store
+ lgdt_mem_80bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ jmp lgdt_mem_store
+ lgdt_mem_48bit:
+ cmp [code_type],64
+ je illegal_instruction
+ cmp [postbyte_register],2
+ jb lgdt_mem_store
+ call operand_32bit
+ lgdt_mem_store:
+ jmp instruction_ready
+lar_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ xor al,al
+ xchg al,[operand_size]
+ call operand_autodetect
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je lar_reg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz lar_reg_mem
+ cmp al,2
+ jne invalid_operand_size
+ lar_reg_mem:
+ jmp instruction_ready
+ lar_reg_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,2
+ jne invalid_operand_size
+ mov bl,al
+ jmp nomem_instruction_ready
+invlpg_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],1
+ mov [postbyte_register],7
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ jmp instruction_ready
+swapgs_instruction:
+ cmp [code_type],64
+ jne illegal_instruction
+rdtscp_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],1
+ mov [postbyte_register],7
+ mov bl,al
+ jmp nomem_instruction_ready
+
+basic_486_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je basic_486_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov al,ah
+ cmp al,1
+ je basic_486_mem_reg_8bit
+ call operand_autodetect
+ inc [extended_code]
+ basic_486_mem_reg_8bit:
+ jmp instruction_ready
+ basic_486_reg:
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,[postbyte_register]
+ mov [postbyte_register],al
+ mov al,ah
+ cmp al,1
+ je basic_486_reg_reg_8bit
+ call operand_autodetect
+ inc [extended_code]
+ basic_486_reg_reg_8bit:
+ jmp nomem_instruction_ready
+bswap_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ test al,1000b
+ jz bswap_reg_code_ok
+ or [rex_prefix],41h
+ and al,111b
+ bswap_reg_code_ok:
+ add al,0C8h
+ mov [extended_code],al
+ mov [base_code],0Fh
+ cmp ah,8
+ je bswap_reg64
+ cmp ah,4
+ jne invalid_operand_size
+ call operand_32bit
+ call store_instruction_code
+ jmp instruction_assembled
+ bswap_reg64:
+ call operand_64bit
+ call store_instruction_code
+ jmp instruction_assembled
+cmpxchgx_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],0C7h
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov ah,1
+ xchg [postbyte_register],ah
+ mov al,[operand_size]
+ or al,al
+ jz cmpxchgx_size_ok
+ cmp al,ah
+ jne invalid_operand_size
+ cmpxchgx_size_ok:
+ cmp ah,16
+ jne cmpxchgx_store
+ call operand_64bit
+ cmpxchgx_store:
+ jmp instruction_ready
+nop_instruction:
+ mov ah,[esi]
+ cmp ah,10h
+ je extended_nop
+ cmp ah,11h
+ je extended_nop
+ cmp ah,'['
+ je extended_nop
+ stos byte [edi]
+ jmp instruction_assembled
+ extended_nop:
+ mov [base_code],0Fh
+ mov [extended_code],1Fh
+ mov [postbyte_register],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je extended_nop_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz extended_nop_store
+ call operand_autodetect
+ extended_nop_store:
+ jmp instruction_ready
+ extended_nop_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ call operand_autodetect
+ jmp nomem_instruction_ready
+
+basic_fpu_instruction:
+ mov [postbyte_register],al
+ mov [base_code],0D8h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je basic_fpu_streg
+ cmp al,'['
+ je basic_fpu_mem
+ dec esi
+ mov ah,[postbyte_register]
+ cmp ah,2
+ jb invalid_operand
+ cmp ah,3
+ ja invalid_operand
+ mov bl,1
+ jmp nomem_instruction_ready
+ basic_fpu_mem:
+ call get_address
+ mov al,[operand_size]
+ cmp al,4
+ je basic_fpu_mem_32bit
+ cmp al,8
+ je basic_fpu_mem_64bit
+ or al,al
+ jnz invalid_operand_size
+ call recoverable_unknown_size
+ basic_fpu_mem_32bit:
+ jmp instruction_ready
+ basic_fpu_mem_64bit:
+ mov [base_code],0DCh
+ jmp instruction_ready
+ basic_fpu_streg:
+ lods byte [esi]
+ call convert_fpu_register
+ mov bl,al
+ mov ah,[postbyte_register]
+ cmp ah,2
+ je basic_fpu_single_streg
+ cmp ah,3
+ je basic_fpu_single_streg
+ or al,al
+ jz basic_fpu_st0
+ test ah,110b
+ jz basic_fpu_streg_st0
+ xor [postbyte_register],1
+ basic_fpu_streg_st0:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_fpu_register
+ or al,al
+ jnz invalid_operand
+ mov [base_code],0DCh
+ jmp nomem_instruction_ready
+ basic_fpu_st0:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_fpu_register
+ mov bl,al
+ basic_fpu_single_streg:
+ mov [base_code],0D8h
+ jmp nomem_instruction_ready
+simple_fpu_instruction:
+ mov ah,al
+ or ah,11000000b
+ mov al,0D9h
+ stos word [edi]
+ jmp instruction_assembled
+fi_instruction:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,2
+ je fi_mem_16bit
+ cmp al,4
+ je fi_mem_32bit
+ or al,al
+ jnz invalid_operand_size
+ call recoverable_unknown_size
+ fi_mem_32bit:
+ mov [base_code],0DAh
+ jmp instruction_ready
+ fi_mem_16bit:
+ mov [base_code],0DEh
+ jmp instruction_ready
+fld_instruction:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je fld_streg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,4
+ je fld_mem_32bit
+ cmp al,8
+ je fld_mem_64bit
+ cmp al,10
+ je fld_mem_80bit
+ or al,al
+ jnz invalid_operand_size
+ call recoverable_unknown_size
+ fld_mem_32bit:
+ mov [base_code],0D9h
+ jmp instruction_ready
+ fld_mem_64bit:
+ mov [base_code],0DDh
+ jmp instruction_ready
+ fld_mem_80bit:
+ mov al,[postbyte_register]
+ cmp al,0
+ je fld_mem_80bit_store
+ dec [postbyte_register]
+ cmp al,3
+ je fld_mem_80bit_store
+ jmp invalid_operand_size
+ fld_mem_80bit_store:
+ add [postbyte_register],5
+ mov [base_code],0DBh
+ jmp instruction_ready
+ fld_streg:
+ lods byte [esi]
+ call convert_fpu_register
+ mov bl,al
+ cmp [postbyte_register],2
+ jae fst_streg
+ mov [base_code],0D9h
+ jmp nomem_instruction_ready
+ fst_streg:
+ mov [base_code],0DDh
+ jmp nomem_instruction_ready
+fild_instruction:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,2
+ je fild_mem_16bit
+ cmp al,4
+ je fild_mem_32bit
+ cmp al,8
+ je fild_mem_64bit
+ or al,al
+ jnz invalid_operand_size
+ call recoverable_unknown_size
+ fild_mem_32bit:
+ mov [base_code],0DBh
+ jmp instruction_ready
+ fild_mem_16bit:
+ mov [base_code],0DFh
+ jmp instruction_ready
+ fild_mem_64bit:
+ mov al,[postbyte_register]
+ cmp al,1
+ je fisttp_64bit_store
+ jb fild_mem_64bit_store
+ dec [postbyte_register]
+ cmp al,3
+ je fild_mem_64bit_store
+ jmp invalid_operand_size
+ fild_mem_64bit_store:
+ add [postbyte_register],5
+ mov [base_code],0DFh
+ jmp instruction_ready
+ fisttp_64bit_store:
+ mov [base_code],0DDh
+ jmp instruction_ready
+fbld_instruction:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz fbld_mem_80bit
+ cmp al,10
+ je fbld_mem_80bit
+ jmp invalid_operand_size
+ fbld_mem_80bit:
+ mov [base_code],0DFh
+ jmp instruction_ready
+faddp_instruction:
+ mov [postbyte_register],al
+ mov [base_code],0DEh
+ mov edx,esi
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je faddp_streg
+ mov esi,edx
+ mov bl,1
+ jmp nomem_instruction_ready
+ faddp_streg:
+ lods byte [esi]
+ call convert_fpu_register
+ mov bl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_fpu_register
+ or al,al
+ jnz invalid_operand
+ jmp nomem_instruction_ready
+fcompp_instruction:
+ mov ax,0D9DEh
+ stos word [edi]
+ jmp instruction_assembled
+fucompp_instruction:
+ mov ax,0E9DAh
+ stos word [edi]
+ jmp instruction_assembled
+fxch_instruction:
+ mov dx,01D9h
+ jmp fpu_single_operand
+ffreep_instruction:
+ mov dx,00DFh
+ jmp fpu_single_operand
+ffree_instruction:
+ mov dl,0DDh
+ mov dh,al
+ fpu_single_operand:
+ mov ebx,esi
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je fpu_streg
+ or dh,dh
+ jz invalid_operand
+ mov esi,ebx
+ shl dh,3
+ or dh,11000001b
+ mov ax,dx
+ stos word [edi]
+ jmp instruction_assembled
+ fpu_streg:
+ lods byte [esi]
+ call convert_fpu_register
+ shl dh,3
+ or dh,al
+ or dh,11000000b
+ mov ax,dx
+ stos word [edi]
+ jmp instruction_assembled
+
+fstenv_instruction:
+ mov byte [edi],9Bh
+ inc edi
+fldenv_instruction:
+ mov [base_code],0D9h
+ jmp fpu_mem
+fstenv_instruction_16bit:
+ mov byte [edi],9Bh
+ inc edi
+fldenv_instruction_16bit:
+ call operand_16bit
+ jmp fldenv_instruction
+fstenv_instruction_32bit:
+ mov byte [edi],9Bh
+ inc edi
+fldenv_instruction_32bit:
+ call operand_32bit
+ jmp fldenv_instruction
+fsave_instruction_32bit:
+ mov byte [edi],9Bh
+ inc edi
+fnsave_instruction_32bit:
+ call operand_32bit
+ jmp fnsave_instruction
+fsave_instruction_16bit:
+ mov byte [edi],9Bh
+ inc edi
+fnsave_instruction_16bit:
+ call operand_16bit
+ jmp fnsave_instruction
+fsave_instruction:
+ mov byte [edi],9Bh
+ inc edi
+fnsave_instruction:
+ mov [base_code],0DDh
+ fpu_mem:
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ jne invalid_operand_size
+ jmp instruction_ready
+fstcw_instruction:
+ mov byte [edi],9Bh
+ inc edi
+fldcw_instruction:
+ mov [postbyte_register],al
+ mov [base_code],0D9h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz fldcw_mem_16bit
+ cmp al,2
+ je fldcw_mem_16bit
+ jmp invalid_operand_size
+ fldcw_mem_16bit:
+ jmp instruction_ready
+fstsw_instruction:
+ mov al,9Bh
+ stos byte [edi]
+fnstsw_instruction:
+ mov [base_code],0DDh
+ mov [postbyte_register],7
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je fstsw_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz fstsw_mem_16bit
+ cmp al,2
+ je fstsw_mem_16bit
+ jmp invalid_operand_size
+ fstsw_mem_16bit:
+ jmp instruction_ready
+ fstsw_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ax,0200h
+ jne invalid_operand
+ mov ax,0E0DFh
+ stos word [edi]
+ jmp instruction_assembled
+finit_instruction:
+ mov byte [edi],9Bh
+ inc edi
+fninit_instruction:
+ mov ah,al
+ mov al,0DBh
+ stos word [edi]
+ jmp instruction_assembled
+fcmov_instruction:
+ mov dh,0DAh
+ jmp fcomi_streg
+fcomi_instruction:
+ mov dh,0DBh
+ jmp fcomi_streg
+fcomip_instruction:
+ mov dh,0DFh
+ fcomi_streg:
+ mov dl,al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_fpu_register
+ mov ah,al
+ cmp byte [esi],','
+ je fcomi_st0_streg
+ add ah,dl
+ mov al,dh
+ stos word [edi]
+ jmp instruction_assembled
+ fcomi_st0_streg:
+ or ah,ah
+ jnz invalid_operand
+ inc esi
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_fpu_register
+ mov ah,al
+ add ah,dl
+ mov al,dh
+ stos word [edi]
+ jmp instruction_assembled
+
+basic_mmx_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ mmx_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je mmx_mmreg_mmreg
+ cmp al,'['
+ jne invalid_operand
+ mmx_mmreg_mem:
+ call get_address
+ jmp instruction_ready
+ mmx_mmreg_mmreg:
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ jmp nomem_instruction_ready
+mmx_bit_shift_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je mmx_mmreg_mmreg
+ cmp al,'('
+ je mmx_ps_mmreg_imm8
+ cmp al,'['
+ je mmx_mmreg_mem
+ jmp invalid_operand
+ mmx_ps_mmreg_imm8:
+ call get_byte_value
+ mov byte [value],al
+ test [operand_size],not 1
+ jnz invalid_value
+ mov bl,[extended_code]
+ mov al,bl
+ shr bl,4
+ and al,1111b
+ add al,70h
+ mov [extended_code],al
+ sub bl,0Ch
+ shl bl,1
+ xchg bl,[postbyte_register]
+ call store_nomem_instruction
+ mov al,byte [value]
+ stos byte [edi]
+ jmp instruction_assembled
+pmovmskb_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ je pmovmskb_reg_size_ok
+ cmp [code_type],64
+ jne invalid_operand_size
+ cmp ah,8
+ jnz invalid_operand_size
+ pmovmskb_reg_size_ok:
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ call make_mmx_prefix
+ cmp [extended_code],0C5h
+ je mmx_nomem_imm8
+ jmp nomem_instruction_ready
+ mmx_imm8:
+ push ebx ecx edx
+ xor cl,cl
+ xchg cl,[operand_size]
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ test ah,not 1
+ jnz invalid_operand_size
+ mov [operand_size],cl
+ cmp al,'('
+ jne invalid_operand
+ call get_byte_value
+ mov byte [value],al
+ pop edx ecx ebx
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ mmx_nomem_imm8:
+ call store_nomem_instruction
+ call append_imm8
+ jmp instruction_assembled
+ append_imm8:
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ test ah,not 1
+ jnz invalid_operand_size
+ cmp al,'('
+ jne invalid_operand
+ call get_byte_value
+ stosb
+ ret
+pinsrw_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pinsrw_mmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je mmx_imm8
+ cmp [operand_size],2
+ jne invalid_operand_size
+ jmp mmx_imm8
+ pinsrw_mmreg_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ jne invalid_operand_size
+ mov bl,al
+ jmp mmx_nomem_imm8
+pshufw_instruction:
+ mov [mmx_size],8
+ mov [opcode_prefix],al
+ jmp pshuf_instruction
+pshufd_instruction:
+ mov [mmx_size],16
+ mov [opcode_prefix],al
+ pshuf_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],70h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,[mmx_size]
+ jne invalid_operand_size
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pshuf_mmreg_mmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ jmp mmx_imm8
+ pshuf_mmreg_mmreg:
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ jmp mmx_nomem_imm8
+movd_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],7Eh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movd_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ test [operand_size],not 4
+ jnz invalid_operand_size
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ jmp instruction_ready
+ movd_reg:
+ lods byte [esi]
+ cmp al,0B0h
+ jae movd_mmreg
+ call convert_register
+ cmp ah,4
+ jne invalid_operand_size
+ mov [operand_size],0
+ mov bl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ mov [postbyte_register],al
+ call make_mmx_prefix
+ jmp nomem_instruction_ready
+ movd_mmreg:
+ mov [extended_code],6Eh
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movd_mmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ test [operand_size],not 4
+ jnz invalid_operand_size
+ jmp instruction_ready
+ movd_mmreg_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ jne invalid_operand_size
+ mov bl,al
+ jmp nomem_instruction_ready
+ make_mmx_prefix:
+ cmp [vex_required],0
+ jne mmx_prefix_for_vex
+ cmp [operand_size],16
+ jne no_mmx_prefix
+ mov [operand_prefix],66h
+ no_mmx_prefix:
+ ret
+ mmx_prefix_for_vex:
+ cmp [operand_size],16
+ jne invalid_operand
+ mov [opcode_prefix],66h
+ ret
+movq_instruction:
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movq_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ test [operand_size],not 8
+ jnz invalid_operand_size
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ mov [postbyte_register],al
+ cmp ah,16
+ je movq_mem_xmmreg
+ mov [extended_code],7Fh
+ jmp instruction_ready
+ movq_mem_xmmreg:
+ mov [extended_code],0D6h
+ mov [opcode_prefix],66h
+ jmp instruction_ready
+ movq_reg:
+ lods byte [esi]
+ cmp al,0B0h
+ jae movq_mmreg
+ call convert_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov bl,al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call convert_mmx_register
+ mov [postbyte_register],al
+ call make_mmx_prefix
+ mov [extended_code],7Eh
+ call operand_64bit
+ jmp nomem_instruction_ready
+ movq_mmreg:
+ call convert_mmx_register
+ mov [postbyte_register],al
+ mov [extended_code],6Fh
+ mov [mmx_size],ah
+ cmp ah,16
+ jne movq_mmreg_
+ mov [extended_code],7Eh
+ mov [opcode_prefix],0F3h
+ movq_mmreg_:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movq_mmreg_reg
+ call get_address
+ test [operand_size],not 8
+ jnz invalid_operand_size
+ jmp instruction_ready
+ movq_mmreg_reg:
+ lods byte [esi]
+ cmp al,0B0h
+ jae movq_mmreg_mmreg
+ mov [operand_size],0
+ call convert_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov [extended_code],6Eh
+ mov [opcode_prefix],0
+ mov bl,al
+ cmp [mmx_size],16
+ jne movq_mmreg_reg_store
+ mov [opcode_prefix],66h
+ movq_mmreg_reg_store:
+ call operand_64bit
+ jmp nomem_instruction_ready
+ movq_mmreg_mmreg:
+ call convert_mmx_register
+ cmp ah,[mmx_size]
+ jne invalid_operand_size
+ mov bl,al
+ jmp nomem_instruction_ready
+movdq_instruction:
+ mov [opcode_prefix],al
+ mov [base_code],0Fh
+ mov [extended_code],6Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movdq_mmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ mov [extended_code],7Fh
+ jmp instruction_ready
+ movdq_mmreg:
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je movdq_mmreg_mmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ jmp instruction_ready
+ movdq_mmreg_mmreg:
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ jmp nomem_instruction_ready
+lddqu_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ push eax
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ pop eax
+ mov [postbyte_register],al
+ mov [opcode_prefix],0F2h
+ mov [base_code],0Fh
+ mov [extended_code],0F0h
+ jmp instruction_ready
+
+movdq2q_instruction:
+ mov [opcode_prefix],0F2h
+ mov [mmx_size],8
+ jmp movq2dq_
+movq2dq_instruction:
+ mov [opcode_prefix],0F3h
+ mov [mmx_size],16
+ movq2dq_:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,[mmx_size]
+ jne invalid_operand_size
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ xor [mmx_size],8+16
+ cmp ah,[mmx_size]
+ jne invalid_operand_size
+ mov bl,al
+ mov [base_code],0Fh
+ mov [extended_code],0D6h
+ jmp nomem_instruction_ready
+
+sse_ps_instruction_imm8:
+ mov [immediate_size],1
+sse_ps_instruction:
+ mov [mmx_size],16
+ jmp sse_instruction
+sse_pd_instruction_imm8:
+ mov [immediate_size],1
+sse_pd_instruction:
+ mov [mmx_size],16
+ mov [opcode_prefix],66h
+ jmp sse_instruction
+sse_ss_instruction:
+ mov [mmx_size],4
+ mov [opcode_prefix],0F3h
+ jmp sse_instruction
+sse_sd_instruction:
+ mov [mmx_size],8
+ mov [opcode_prefix],0F2h
+ jmp sse_instruction
+cmp_pd_instruction:
+ mov [opcode_prefix],66h
+cmp_ps_instruction:
+ mov [mmx_size],16
+ mov byte [value],al
+ mov al,0C2h
+ jmp sse_instruction
+cmp_ss_instruction:
+ mov [mmx_size],4
+ mov [opcode_prefix],0F3h
+ jmp cmp_sx_instruction
+cmpsd_instruction:
+ mov al,0A7h
+ mov ah,[esi]
+ or ah,ah
+ jz simple_instruction_32bit
+ cmp ah,0Fh
+ je simple_instruction_32bit
+ mov al,-1
+cmp_sd_instruction:
+ mov [mmx_size],8
+ mov [opcode_prefix],0F2h
+ cmp_sx_instruction:
+ mov byte [value],al
+ mov al,0C2h
+ jmp sse_instruction
+comiss_instruction:
+ mov [mmx_size],4
+ jmp sse_instruction
+comisd_instruction:
+ mov [mmx_size],8
+ mov [opcode_prefix],66h
+ jmp sse_instruction
+cvtdq2pd_instruction:
+ mov [opcode_prefix],0F3h
+cvtps2pd_instruction:
+ mov [mmx_size],8
+ jmp sse_instruction
+cvtpd2dq_instruction:
+ mov [mmx_size],16
+ mov [opcode_prefix],0F2h
+ jmp sse_instruction
+movshdup_instruction:
+ mov [mmx_size],16
+ mov [opcode_prefix],0F3h
+sse_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ sse_xmmreg:
+ lods byte [esi]
+ call convert_xmm_register
+ sse_reg:
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je sse_xmmreg_xmmreg
+ sse_reg_mem:
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je sse_mem_size_ok
+ mov al,[mmx_size]
+ cmp [operand_size],al
+ jne invalid_operand_size
+ sse_mem_size_ok:
+ mov al,[extended_code]
+ mov ah,[supplemental_code]
+ cmp al,0C2h
+ je sse_cmp_mem_ok
+ cmp ax,443Ah
+ je sse_cmp_mem_ok
+ cmp [immediate_size],1
+ je mmx_imm8
+ cmp [immediate_size],-1
+ jne sse_ok
+ call take_additional_xmm0
+ mov [immediate_size],0
+ sse_ok:
+ jmp instruction_ready
+ sse_cmp_mem_ok:
+ cmp byte [value],-1
+ je mmx_imm8
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ sse_xmmreg_xmmreg:
+ cmp [operand_prefix],66h
+ jne sse_xmmreg_xmmreg_ok
+ cmp [extended_code],12h
+ je invalid_operand
+ cmp [extended_code],16h
+ je invalid_operand
+ sse_xmmreg_xmmreg_ok:
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ mov al,[extended_code]
+ mov ah,[supplemental_code]
+ cmp al,0C2h
+ je sse_cmp_nomem_ok
+ cmp ax,443Ah
+ je sse_cmp_nomem_ok
+ cmp [immediate_size],1
+ je mmx_nomem_imm8
+ cmp [immediate_size],-1
+ jne sse_nomem_ok
+ call take_additional_xmm0
+ mov [immediate_size],0
+ sse_nomem_ok:
+ jmp nomem_instruction_ready
+ sse_cmp_nomem_ok:
+ cmp byte [value],-1
+ je mmx_nomem_imm8
+ call store_nomem_instruction
+ mov al,byte [value]
+ stosb
+ jmp instruction_assembled
+ take_additional_xmm0:
+ cmp byte [esi],','
+ jne additional_xmm0_ok
+ inc esi
+ lods byte [esi]
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ test al,al
+ jnz invalid_operand
+ additional_xmm0_ok:
+ ret
+
+pslldq_instruction:
+ mov [postbyte_register],al
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],73h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ jmp mmx_nomem_imm8
+movpd_instruction:
+ mov [opcode_prefix],66h
+movps_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ mov [mmx_size],16
+ jmp sse_mov_instruction
+movss_instruction:
+ mov [mmx_size],4
+ mov [opcode_prefix],0F3h
+ jmp sse_movs
+movsd_instruction:
+ mov al,0A5h
+ mov ah,[esi]
+ or ah,ah
+ jz simple_instruction_32bit
+ cmp ah,0Fh
+ je simple_instruction_32bit
+ mov [mmx_size],8
+ mov [opcode_prefix],0F2h
+ sse_movs:
+ mov [base_code],0Fh
+ mov [extended_code],10h
+ jmp sse_mov_instruction
+sse_mov_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je sse_xmmreg
+ sse_mem:
+ cmp al,'['
+ jne invalid_operand
+ inc [extended_code]
+ call get_address
+ cmp [operand_size],0
+ je sse_mem_xmmreg
+ mov al,[mmx_size]
+ cmp [operand_size],al
+ jne invalid_operand_size
+ mov [operand_size],0
+ sse_mem_xmmreg:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ jmp instruction_ready
+movlpd_instruction:
+ mov [opcode_prefix],66h
+movlps_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ mov [mmx_size],8
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne sse_mem
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ jmp sse_reg_mem
+movhlps_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ mov [mmx_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je sse_xmmreg_xmmreg_ok
+ jmp invalid_operand
+maskmovq_instruction:
+ mov cl,8
+ jmp maskmov_instruction
+maskmovdqu_instruction:
+ mov cl,16
+ mov [opcode_prefix],66h
+ maskmov_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],0F7h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,cl
+ jne invalid_operand_size
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ jmp nomem_instruction_ready
+movmskpd_instruction:
+ mov [opcode_prefix],66h
+movmskps_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],50h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ cmp ah,4
+ je movmskps_reg_ok
+ cmp ah,8
+ jne invalid_operand_size
+ cmp [code_type],64
+ jne invalid_operand
+ movmskps_reg_ok:
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je sse_xmmreg_xmmreg_ok
+ jmp invalid_operand
+
+cvtpi2pd_instruction:
+ mov [opcode_prefix],66h
+cvtpi2ps_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je cvtpi_xmmreg_xmmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je cvtpi_size_ok
+ cmp [operand_size],8
+ jne invalid_operand_size
+ cvtpi_size_ok:
+ jmp instruction_ready
+ cvtpi_xmmreg_xmmreg:
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov bl,al
+ jmp nomem_instruction_ready
+cvtsi2ss_instruction:
+ mov [opcode_prefix],0F3h
+ jmp cvtsi_instruction
+cvtsi2sd_instruction:
+ mov [opcode_prefix],0F2h
+ cvtsi_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ cvtsi_xmmreg:
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je cvtsi_xmmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je cvtsi_size_ok
+ cmp [operand_size],4
+ je cvtsi_size_ok
+ cmp [operand_size],8
+ jne invalid_operand_size
+ call operand_64bit
+ cvtsi_size_ok:
+ jmp instruction_ready
+ cvtsi_xmmreg_reg:
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ je cvtsi_xmmreg_reg_store
+ cmp ah,8
+ jne invalid_operand_size
+ call operand_64bit
+ cvtsi_xmmreg_reg_store:
+ mov bl,al
+ jmp nomem_instruction_ready
+cvtps2pi_instruction:
+ mov [mmx_size],8
+ jmp cvtpd_instruction
+cvtpd2pi_instruction:
+ mov [opcode_prefix],66h
+ mov [mmx_size],16
+ cvtpd_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov [operand_size],0
+ jmp sse_reg
+cvtss2si_instruction:
+ mov [opcode_prefix],0F3h
+ mov [mmx_size],4
+ jmp cvt2si_instruction
+cvtsd2si_instruction:
+ mov [opcode_prefix],0F2h
+ mov [mmx_size],8
+ cvt2si_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [operand_size],0
+ cmp ah,4
+ je sse_reg
+ cmp ah,8
+ jne invalid_operand_size
+ call operand_64bit
+ jmp sse_reg
+
+ssse3_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],38h
+ mov [supplemental_code],al
+ jmp mmx_instruction
+palignr_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],3Ah
+ mov [supplemental_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ call make_mmx_prefix
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je palignr_mmreg_mmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ jmp mmx_imm8
+ palignr_mmreg_mmreg:
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ jmp mmx_nomem_imm8
+amd3dnow_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],0Fh
+ mov byte [value],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je amd3dnow_mmreg_mmreg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ call store_instruction_with_imm8
+ jmp instruction_assembled
+ amd3dnow_mmreg_mmreg:
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,8
+ jne invalid_operand_size
+ mov bl,al
+ call store_nomem_instruction
+ mov al,byte [value]
+ stos byte [edi]
+ jmp instruction_assembled
+
+sse4_instruction_38_xmm0:
+ mov [immediate_size],-1
+sse4_instruction_38:
+ mov [mmx_size],16
+ mov [opcode_prefix],66h
+ mov [supplemental_code],al
+ mov al,38h
+ jmp sse_instruction
+sse4_ss_instruction_3a_imm8:
+ mov [immediate_size],1
+ mov [mmx_size],4
+ jmp sse4_instruction_3a_setup
+sse4_sd_instruction_3a_imm8:
+ mov [immediate_size],1
+ mov [mmx_size],8
+ jmp sse4_instruction_3a_setup
+sse4_instruction_3a_imm8:
+ mov [immediate_size],1
+ mov [mmx_size],16
+ sse4_instruction_3a_setup:
+ mov [opcode_prefix],66h
+ mov [supplemental_code],al
+ mov al,3Ah
+ jmp sse_instruction
+pclmulqdq_instruction:
+ mov byte [value],al
+ mov [mmx_size],16
+ mov al,44h
+ jmp sse4_instruction_3a_setup
+extractps_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],3Ah
+ mov [supplemental_code],17h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je extractps_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],4
+ je extractps_size_ok
+ cmp [operand_size],0
+ jne invalid_operand_size
+ extractps_size_ok:
+ push edx ebx ecx
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ jmp mmx_imm8
+ extractps_reg:
+ lods byte [esi]
+ call convert_register
+ push eax
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ pop ebx
+ mov al,bh
+ cmp al,4
+ je mmx_nomem_imm8
+ cmp al,8
+ jne invalid_operand_size
+ call operand_64bit
+ jmp mmx_nomem_imm8
+insertps_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ insertps_xmmreg:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],3Ah
+ mov [supplemental_code],21h
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je insertps_xmmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],4
+ je insertps_size_ok
+ cmp [operand_size],0
+ jne invalid_operand_size
+ insertps_size_ok:
+ jmp mmx_imm8
+ insertps_xmmreg_reg:
+ lods byte [esi]
+ call convert_mmx_register
+ mov bl,al
+ jmp mmx_nomem_imm8
+pextrq_instruction:
+ mov [mmx_size],8
+ jmp pextr_instruction
+pextrd_instruction:
+ mov [mmx_size],4
+ jmp pextr_instruction
+pextrw_instruction:
+ mov [mmx_size],2
+ jmp pextr_instruction
+pextrb_instruction:
+ mov [mmx_size],1
+ pextr_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],3Ah
+ mov [supplemental_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pextr_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[mmx_size]
+ cmp al,[operand_size]
+ je pextr_size_ok
+ cmp [operand_size],0
+ jne invalid_operand_size
+ pextr_size_ok:
+ cmp al,8
+ jne pextr_prefix_ok
+ call operand_64bit
+ pextr_prefix_ok:
+ push edx ebx ecx
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ jmp mmx_imm8
+ pextr_reg:
+ lods byte [esi]
+ call convert_register
+ cmp [mmx_size],4
+ ja pextrq_reg
+ cmp ah,4
+ je pextr_reg_size_ok
+ cmp [code_type],64
+ jne pextr_invalid_size
+ cmp ah,8
+ je pextr_reg_size_ok
+ pextr_invalid_size:
+ jmp invalid_operand_size
+ pextrq_reg:
+ cmp ah,8
+ jne pextr_invalid_size
+ call operand_64bit
+ pextr_reg_size_ok:
+ mov [operand_size],0
+ push eax
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ mov ebx,eax
+ pop eax
+ mov [postbyte_register],al
+ mov al,ah
+ cmp [mmx_size],2
+ jne pextr_reg_store
+ mov [opcode_prefix],0
+ mov [extended_code],0C5h
+ call make_mmx_prefix
+ jmp mmx_nomem_imm8
+ pextr_reg_store:
+ cmp bh,16
+ jne invalid_operand_size
+ xchg bl,[postbyte_register]
+ call operand_autodetect
+ jmp mmx_nomem_imm8
+pinsrb_instruction:
+ mov [mmx_size],1
+ jmp pinsr_instruction
+pinsrd_instruction:
+ mov [mmx_size],4
+ jmp pinsr_instruction
+pinsrq_instruction:
+ mov [mmx_size],8
+ call operand_64bit
+ pinsr_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],3Ah
+ mov [supplemental_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ pinsr_xmmreg:
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pinsr_xmmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je mmx_imm8
+ mov al,[mmx_size]
+ cmp al,[operand_size]
+ je mmx_imm8
+ jmp invalid_operand_size
+ pinsr_xmmreg_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ cmp [mmx_size],8
+ je pinsrq_xmmreg_reg
+ cmp ah,4
+ je mmx_nomem_imm8
+ jmp invalid_operand_size
+ pinsrq_xmmreg_reg:
+ cmp ah,8
+ je mmx_nomem_imm8
+ jmp invalid_operand_size
+pmovsxbw_instruction:
+ mov [mmx_size],8
+ jmp pmovsx_instruction
+pmovsxbd_instruction:
+ mov [mmx_size],4
+ jmp pmovsx_instruction
+pmovsxbq_instruction:
+ mov [mmx_size],2
+ jmp pmovsx_instruction
+pmovsxwd_instruction:
+ mov [mmx_size],8
+ jmp pmovsx_instruction
+pmovsxwq_instruction:
+ mov [mmx_size],4
+ jmp pmovsx_instruction
+pmovsxdq_instruction:
+ mov [mmx_size],8
+ pmovsx_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],38h
+ mov [supplemental_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je pmovsx_xmmreg_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ cmp [operand_size],0
+ je instruction_ready
+ mov al,[mmx_size]
+ cmp al,[operand_size]
+ jne invalid_operand_size
+ jmp instruction_ready
+ pmovsx_xmmreg_reg:
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ jmp nomem_instruction_ready
+
+fxsave_instruction_64bit:
+ call operand_64bit
+fxsave_instruction:
+ mov [extended_code],0AEh
+ mov [base_code],0Fh
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov ah,[operand_size]
+ or ah,ah
+ jz fxsave_size_ok
+ mov al,[postbyte_register]
+ cmp al,111b
+ je clflush_size_check
+ cmp al,10b
+ jb invalid_operand_size
+ cmp al,11b
+ ja invalid_operand_size
+ cmp ah,4
+ jne invalid_operand_size
+ jmp fxsave_size_ok
+ clflush_size_check:
+ cmp ah,1
+ jne invalid_operand_size
+ fxsave_size_ok:
+ jmp instruction_ready
+prefetch_instruction:
+ mov [extended_code],18h
+ prefetch_mem_8bit:
+ mov [base_code],0Fh
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ or ah,ah
+ jz prefetch_size_ok
+ cmp ah,1
+ jne invalid_operand_size
+ prefetch_size_ok:
+ call get_address
+ jmp instruction_ready
+amd_prefetch_instruction:
+ mov [extended_code],0Dh
+ jmp prefetch_mem_8bit
+fence_instruction:
+ mov bl,al
+ mov ax,0AE0Fh
+ stos word [edi]
+ mov al,bl
+ stos byte [edi]
+ jmp instruction_assembled
+pause_instruction:
+ mov ax,90F3h
+ stos word [edi]
+ jmp instruction_assembled
+movntq_instruction:
+ mov [mmx_size],8
+ jmp movnt_instruction
+movntpd_instruction:
+ mov [opcode_prefix],66h
+movntps_instruction:
+ mov [mmx_size],16
+ movnt_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_mmx_register
+ cmp ah,[mmx_size]
+ jne invalid_operand_size
+ mov [postbyte_register],al
+ jmp instruction_ready
+
+movntsd_instruction:
+ mov [opcode_prefix],0F2h
+ mov [mmx_size],8
+ jmp movnts_instruction
+movntss_instruction:
+ mov [opcode_prefix],0F3h
+ mov [mmx_size],4
+ movnts_instruction:
+ mov [extended_code],al
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ cmp al,[mmx_size]
+ je movnts_size_ok
+ test al,al
+ jnz invalid_operand_size
+ movnts_size_ok:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ jmp instruction_ready
+
+movnti_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ah,4
+ je movnti_store
+ cmp ah,8
+ jne invalid_operand_size
+ call operand_64bit
+ movnti_store:
+ mov [postbyte_register],al
+ jmp instruction_ready
+monitor_instruction:
+ mov [postbyte_register],al
+ cmp byte [esi],0
+ je monitor_instruction_store
+ cmp byte [esi],0Fh
+ je monitor_instruction_store
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ax,0400h
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ax,0401h
+ jne invalid_operand
+ cmp [postbyte_register],0C8h
+ jne monitor_instruction_store
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ax,0402h
+ jne invalid_operand
+ monitor_instruction_store:
+ mov ax,010Fh
+ stos word [edi]
+ mov al,[postbyte_register]
+ stos byte [edi]
+ jmp instruction_assembled
+movntdqa_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],38h
+ mov [supplemental_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ jmp instruction_ready
+
+extrq_instruction:
+ mov [opcode_prefix],66h
+ mov [base_code],0Fh
+ mov [extended_code],78h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je extrq_xmmreg_xmmreg
+ test ah,not 1
+ jnz invalid_operand_size
+ cmp al,'('
+ jne invalid_operand
+ xor bl,bl
+ xchg bl,[postbyte_register]
+ call store_nomem_instruction
+ call get_byte_value
+ stosb
+ call append_imm8
+ jmp instruction_assembled
+ extrq_xmmreg_xmmreg:
+ inc [extended_code]
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ jmp nomem_instruction_ready
+insertq_instruction:
+ mov [opcode_prefix],0F2h
+ mov [base_code],0Fh
+ mov [extended_code],78h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov [postbyte_register],al
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_xmm_register
+ mov bl,al
+ cmp byte [esi],','
+ je insertq_with_imm
+ inc [extended_code]
+ jmp nomem_instruction_ready
+ insertq_with_imm:
+ call store_nomem_instruction
+ call append_imm8
+ call append_imm8
+ jmp instruction_assembled
+
+crc32_instruction:
+ mov [opcode_prefix],0F2h
+ mov [base_code],0Fh
+ mov [extended_code],38h
+ mov [supplemental_code],0F0h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ cmp ah,8
+ je crc32_reg64
+ cmp ah,4
+ jne invalid_operand
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je crc32_reg32_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ test al,al
+ jz crc32_unknown_size
+ cmp al,1
+ je crc32_reg32_mem_store
+ cmp al,4
+ ja invalid_operand_size
+ inc [supplemental_code]
+ call operand_autodetect
+ crc32_reg32_mem_store:
+ jmp instruction_ready
+ crc32_unknown_size:
+ call recoverable_unknown_size
+ jmp crc32_reg32_mem_store
+ crc32_reg32_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ cmp al,1
+ je crc32_reg32_reg_store
+ cmp al,4
+ ja invalid_operand_size
+ inc [supplemental_code]
+ call operand_autodetect
+ crc32_reg32_reg_store:
+ jmp nomem_instruction_ready
+ crc32_reg64:
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ mov [operand_size],0
+ call operand_64bit
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je crc32_reg64_reg
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov ah,[operand_size]
+ mov al,8
+ test ah,ah
+ jz crc32_unknown_size
+ cmp ah,1
+ je crc32_reg32_mem_store
+ cmp ah,al
+ jne invalid_operand_size
+ inc [supplemental_code]
+ jmp crc32_reg32_mem_store
+ crc32_reg64_reg:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,8
+ cmp ah,1
+ je crc32_reg32_reg_store
+ cmp ah,al
+ jne invalid_operand_size
+ inc [supplemental_code]
+ jmp crc32_reg32_reg_store
+popcnt_instruction:
+ mov [opcode_prefix],0F3h
+ jmp bs_instruction
+movbe_instruction:
+ mov [supplemental_code],al
+ mov [extended_code],38h
+ mov [base_code],0Fh
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ je movbe_mem
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_argument
+ call get_address
+ mov al,[operand_size]
+ call operand_autodetect
+ jmp instruction_ready
+ movbe_mem:
+ inc [supplemental_code]
+ call get_address
+ push edx ebx ecx
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ pop ecx ebx edx
+ mov al,[operand_size]
+ call operand_autodetect
+ jmp instruction_ready
+adx_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],38h
+ mov [supplemental_code],0F6h
+ mov [operand_prefix],al
+ call get_reg_mem
+ jc adx_reg_reg
+ mov al,[operand_size]
+ cmp al,4
+ je instruction_ready
+ cmp al,8
+ jne invalid_operand_size
+ call operand_64bit
+ jmp instruction_ready
+ adx_reg_reg:
+ cmp ah,4
+ je nomem_instruction_ready
+ cmp ah,8
+ jne invalid_operand_size
+ call operand_64bit
+ jmp nomem_instruction_ready
+
+simple_vmx_instruction:
+ mov ah,al
+ mov al,0Fh
+ stos byte [edi]
+ mov al,1
+ stos word [edi]
+ jmp instruction_assembled
+vmclear_instruction:
+ mov [opcode_prefix],66h
+ jmp vmx_instruction
+vmxon_instruction:
+ mov [opcode_prefix],0F3h
+vmx_instruction:
+ mov [postbyte_register],al
+ mov [extended_code],0C7h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz vmx_size_ok
+ cmp al,8
+ jne invalid_operand_size
+ vmx_size_ok:
+ mov [base_code],0Fh
+ jmp instruction_ready
+vmread_instruction:
+ mov [extended_code],78h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je vmread_nomem
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ call vmread_check_size
+ jmp vmx_size_ok
+ vmread_nomem:
+ lods byte [esi]
+ call convert_register
+ push eax
+ call vmread_check_size
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ call vmread_check_size
+ pop ebx
+ mov [base_code],0Fh
+ jmp nomem_instruction_ready
+ vmread_check_size:
+ cmp [code_type],64
+ je vmread_long
+ cmp [operand_size],4
+ jne invalid_operand_size
+ ret
+ vmread_long:
+ cmp [operand_size],8
+ jne invalid_operand_size
+ ret
+vmwrite_instruction:
+ mov [extended_code],79h
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ je vmwrite_nomem
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ call vmread_check_size
+ jmp vmx_size_ok
+ vmwrite_nomem:
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov [base_code],0Fh
+ jmp nomem_instruction_ready
+vmx_inv_instruction:
+ mov [opcode_prefix],66h
+ mov [extended_code],38h
+ mov [supplemental_code],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov [postbyte_register],al
+ call vmread_check_size
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,'['
+ jne invalid_operand
+ call get_address
+ mov al,[operand_size]
+ or al,al
+ jz vmx_size_ok
+ cmp al,16
+ jne invalid_operand_size
+ jmp vmx_size_ok
+simple_svm_instruction:
+ push eax
+ mov [base_code],0Fh
+ mov [extended_code],1
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ or al,al
+ jnz invalid_operand
+ simple_svm_detect_size:
+ cmp ah,2
+ je simple_svm_16bit
+ cmp ah,4
+ je simple_svm_32bit
+ cmp [code_type],64
+ jne invalid_operand_size
+ jmp simple_svm_store
+ simple_svm_16bit:
+ cmp [code_type],16
+ je simple_svm_store
+ cmp [code_type],64
+ je invalid_operand_size
+ jmp prefixed_svm_store
+ simple_svm_32bit:
+ cmp [code_type],32
+ je simple_svm_store
+ prefixed_svm_store:
+ mov al,67h
+ stos byte [edi]
+ simple_svm_store:
+ call store_instruction_code
+ pop eax
+ stos byte [edi]
+ jmp instruction_assembled
+skinit_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ax,0400h
+ jne invalid_operand
+ mov al,0DEh
+ jmp simple_vmx_instruction
+invlpga_instruction:
+ push eax
+ mov [base_code],0Fh
+ mov [extended_code],1
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ or al,al
+ jnz invalid_operand
+ mov bl,ah
+ mov [operand_size],0
+ lods byte [esi]
+ cmp al,','
+ jne invalid_operand
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ cmp ax,0401h
+ jne invalid_operand
+ mov ah,bl
+ jmp simple_svm_detect_size
+
+rdrand_instruction:
+ mov [base_code],0Fh
+ mov [extended_code],0C7h
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ call operand_autodetect
+ jmp nomem_instruction_ready
+rdfsbase_instruction:
+ cmp [code_type],64
+ jne illegal_instruction
+ mov [opcode_prefix],0F3h
+ mov [base_code],0Fh
+ mov [extended_code],0AEh
+ mov [postbyte_register],al
+ lods byte [esi]
+ call get_size_operator
+ cmp al,10h
+ jne invalid_operand
+ lods byte [esi]
+ call convert_register
+ mov bl,al
+ mov al,ah
+ cmp ah,2
+ je invalid_operand_size
+ call operand_autodetect
+ jmp nomem_instruction_ready
+
+xabort_instruction:
+ lods byte [esi]
+ call get_size_operator
+ cmp ah,1
+ ja invalid_operand_size
+ cmp al,'('
+ jne invalid_operand
+ call get_byte_value
+ mov dl,al
+ mov ax,0F8C6h
+ stos word [edi]
+ mov al,dl
+ stos byte [edi]
+ jmp instruction_assembled
+xbegin_instruction:
+ lods byte [esi]
+ cmp al,'('
+ jne invalid_operand
+ mov al,[code_type]
+ cmp al,64
+ je xbegin_64bit
+ cmp al,32
+ je xbegin_32bit
+ xbegin_16bit:
+ call get_address_word_value
+ add edi,4
+ mov ebp,[addressing_space]
+ call calculate_relative_offset
+ sub edi,4
+ shl eax,16
+ mov ax,0F8C7h
+ stos dword [edi]
+ jmp instruction_assembled
+ xbegin_32bit:
+ call get_address_dword_value
+ jmp xbegin_address_ok
+ xbegin_64bit:
+ call get_address_qword_value
+ xbegin_address_ok:
+ add edi,5
+ mov ebp,[addressing_space]
+ call calculate_relative_offset
+ sub edi,5
+ mov edx,eax
+ cwde
+ cmp eax,edx
+ jne xbegin_rel32
+ mov al,66h
+ stos byte [edi]
+ mov eax,edx
+ shl eax,16
+ mov ax,0F8C7h
+ stos dword [edi]
+ jmp instruction_assembled
+ xbegin_rel32:
+ sub edx,1
+ jno xbegin_rel32_ok
+ cmp [code_type],64
+ je relative_jump_out_of_range
+ xbegin_rel32_ok:
+ mov ax,0F8C7h
+ stos word [edi]
+ mov eax,edx
+ stos dword [edi]
+ jmp instruction_assembled
+
+convert_register:
+ mov ah,al
+ shr ah,4
+ and al,0Fh
+ cmp ah,8
+ je match_register_size
+ cmp ah,4
+ ja invalid_operand
+ cmp ah,1
+ ja match_register_size
+ cmp al,4
+ jb match_register_size
+ or ah,ah
+ jz high_byte_register
+ or [rex_prefix],40h
+ match_register_size:
+ cmp ah,[operand_size]
+ je register_size_ok
+ cmp [operand_size],0
+ jne operand_sizes_do_not_match
+ mov [operand_size],ah
+ register_size_ok:
+ ret
+ high_byte_register:
+ mov ah,1
+ or [rex_prefix],80h
+ jmp match_register_size
+convert_fpu_register:
+ mov ah,al
+ shr ah,4
+ and al,111b
+ cmp ah,10
+ jne invalid_operand
+ jmp match_register_size
+convert_mmx_register:
+ mov ah,al
+ shr ah,4
+ cmp ah,0Ch
+ je xmm_register
+ ja invalid_operand
+ and al,111b
+ cmp ah,0Bh
+ jne invalid_operand
+ mov ah,8
+ cmp [vex_required],0
+ jne invalid_operand
+ jmp match_register_size
+ xmm_register:
+ and al,0Fh
+ mov ah,16
+ cmp al,8
+ jb match_register_size
+ cmp [code_type],64
+ jne invalid_operand
+ jmp match_register_size
+convert_xmm_register:
+ mov ah,al
+ shr ah,4
+ cmp ah,0Ch
+ je xmm_register
+ jmp invalid_operand
+get_size_operator:
+ xor ah,ah
+ cmp al,11h
+ jne no_size_operator
+ mov [size_declared],1
+ lods word [esi]
+ xchg al,ah
+ mov [size_override],1
+ cmp ah,[operand_size]
+ je size_operator_ok
+ cmp [operand_size],0
+ jne operand_sizes_do_not_match
+ mov [operand_size],ah
+ size_operator_ok:
+ ret
+ no_size_operator:
+ mov [size_declared],0
+ cmp al,'['
+ jne size_operator_ok
+ mov [size_override],0
+ ret
+get_jump_operator:
+ mov [jump_type],0
+ cmp al,12h
+ jne jump_operator_ok
+ lods word [esi]
+ mov [jump_type],al
+ mov al,ah
+ jump_operator_ok:
+ ret
+get_address:
+ mov [segment_register],0
+ mov [address_size],0
+ mov [free_address_range],0
+ mov al,[code_type]
+ shr al,3
+ mov [value_size],al
+ mov al,[esi]
+ and al,11110000b
+ cmp al,60h
+ jne get_size_prefix
+ lods byte [esi]
+ sub al,60h
+ mov [segment_register],al
+ mov al,[esi]
+ and al,11110000b
+ get_size_prefix:
+ cmp al,70h
+ jne address_size_prefix_ok
+ lods byte [esi]
+ sub al,70h
+ cmp al,2
+ jb invalid_address_size
+ cmp al,8
+ ja invalid_address_size
+ mov [address_size],al
+ mov [value_size],al
+ address_size_prefix_ok:
+ call calculate_address
+ cmp byte [esi-1],']'
+ jne invalid_address
+ mov [address_high],edx
+ mov edx,eax
+ cmp [code_type],64
+ jne address_ok
+ or bx,bx
+ jnz address_ok
+ test ch,0Fh
+ jnz address_ok
+ calculate_relative_address:
+ mov edx,[address_symbol]
+ mov [symbol_identifier],edx
+ mov edx,[address_high]
+ mov ebp,[addressing_space]
+ call calculate_relative_offset
+ mov [address_high],edx
+ cdq
+ cmp edx,[address_high]
+ je address_high_ok
+ call recoverable_overflow
+ address_high_ok:
+ mov edx,eax
+ ror ecx,16
+ mov cl,[value_type]
+ rol ecx,16
+ mov bx,0FF00h
+ address_ok:
+ ret
+operand_16bit:
+ cmp [code_type],16
+ je size_prefix_ok
+ mov [operand_prefix],66h
+ ret
+operand_32bit:
+ cmp [code_type],16
+ jne size_prefix_ok
+ mov [operand_prefix],66h
+ size_prefix_ok:
+ ret
+operand_64bit:
+ cmp [code_type],64
+ jne illegal_instruction
+ or [rex_prefix],48h
+ ret
+operand_autodetect:
+ cmp al,2
+ je operand_16bit
+ cmp al,4
+ je operand_32bit
+ cmp al,8
+ je operand_64bit
+ jmp invalid_operand_size
+store_segment_prefix_if_necessary:
+ mov al,[segment_register]
+ or al,al
+ jz segment_prefix_ok
+ cmp al,4
+ ja segment_prefix_386
+ cmp [code_type],64
+ je segment_prefix_ok
+ cmp al,3
+ je ss_prefix
+ jb segment_prefix_86
+ cmp bl,25h
+ je segment_prefix_86
+ cmp bh,25h
+ je segment_prefix_86
+ cmp bh,45h
+ je segment_prefix_86
+ cmp bh,44h
+ je segment_prefix_86
+ ret
+ ss_prefix:
+ cmp bl,25h
+ je segment_prefix_ok
+ cmp bh,25h
+ je segment_prefix_ok
+ cmp bh,45h
+ je segment_prefix_ok
+ cmp bh,44h
+ je segment_prefix_ok
+ jmp segment_prefix_86
+store_segment_prefix:
+ mov al,[segment_register]
+ or al,al
+ jz segment_prefix_ok
+ cmp al,5
+ jae segment_prefix_386
+ segment_prefix_86:
+ dec al
+ shl al,3
+ add al,26h
+ stos byte [edi]
+ jmp segment_prefix_ok
+ segment_prefix_386:
+ add al,64h-5
+ stos byte [edi]
+ segment_prefix_ok:
+ ret
+store_instruction_code:
+ cmp [vex_required],0
+ jne store_vex_instruction_code
+ mov al,[operand_prefix]
+ or al,al
+ jz operand_prefix_ok
+ stos byte [edi]
+ operand_prefix_ok:
+ mov al,[opcode_prefix]
+ or al,al
+ jz opcode_prefix_ok
+ stos byte [edi]
+ opcode_prefix_ok:
+ mov al,[rex_prefix]
+ test al,40h
+ jz rex_prefix_ok
+ cmp [code_type],64
+ jne invalid_operand
+ test al,0B0h
+ jnz disallowed_combination_of_registers
+ stos byte [edi]
+ rex_prefix_ok:
+ mov al,[base_code]
+ stos byte [edi]
+ cmp al,0Fh
+ jne instruction_code_ok
+ store_extended_code:
+ mov al,[extended_code]
+ stos byte [edi]
+ cmp al,38h
+ je store_supplemental_code
+ cmp al,3Ah
+ je store_supplemental_code
+ instruction_code_ok:
+ ret
+ store_supplemental_code:
+ mov al,[supplemental_code]
+ stos byte [edi]
+ ret
+store_nomem_instruction:
+ test [postbyte_register],1000b
+ jz nomem_reg_code_ok
+ or [rex_prefix],44h
+ and [postbyte_register],111b
+ nomem_reg_code_ok:
+ test bl,1000b
+ jz nomem_rm_code_ok
+ or [rex_prefix],41h
+ and bl,111b
+ nomem_rm_code_ok:
+ call store_instruction_code
+ mov al,[postbyte_register]
+ shl al,3
+ or al,bl
+ or al,11000000b
+ stos byte [edi]
+ ret
+store_instruction:
+ mov [current_offset],edi
+ test [postbyte_register],1000b
+ jz reg_code_ok
+ or [rex_prefix],44h
+ and [postbyte_register],111b
+ reg_code_ok:
+ cmp [code_type],64
+ jne address_value_ok
+ xor eax,eax
+ bt edx,31
+ sbb eax,[address_high]
+ jz address_value_ok
+ cmp [address_high],0
+ jne address_value_out_of_range
+ test ch,44h
+ jnz address_value_ok
+ test bx,8080h
+ jz address_value_ok
+ address_value_out_of_range:
+ call recoverable_overflow
+ address_value_ok:
+ call store_segment_prefix_if_necessary
+ test [vex_required],4
+ jnz address_vsib
+ or bx,bx
+ jz address_immediate
+ cmp bx,0F800h
+ je address_rip_based
+ cmp bx,0F400h
+ je address_eip_based
+ cmp bx,0FF00h
+ je address_relative
+ mov al,bl
+ or al,bh
+ and al,11110000b
+ cmp al,80h
+ je postbyte_64bit
+ cmp al,40h
+ je postbyte_32bit
+ cmp al,20h
+ jne invalid_address
+ cmp [code_type],64
+ je invalid_address_size
+ call address_16bit_prefix
+ call store_instruction_code
+ cmp bl,bh
+ jbe determine_16bit_address
+ xchg bl,bh
+ determine_16bit_address:
+ cmp bx,2600h
+ je address_si
+ cmp bx,2700h
+ je address_di
+ cmp bx,2300h
+ je address_bx
+ cmp bx,2500h
+ je address_bp
+ cmp bx,2625h
+ je address_bp_si
+ cmp bx,2725h
+ je address_bp_di
+ cmp bx,2723h
+ je address_bx_di
+ cmp bx,2623h
+ jne invalid_address
+ address_bx_si:
+ xor al,al
+ jmp postbyte_16bit
+ address_bx_di:
+ mov al,1
+ jmp postbyte_16bit
+ address_bp_si:
+ mov al,10b
+ jmp postbyte_16bit
+ address_bp_di:
+ mov al,11b
+ jmp postbyte_16bit
+ address_si:
+ mov al,100b
+ jmp postbyte_16bit
+ address_di:
+ mov al,101b
+ jmp postbyte_16bit
+ address_bx:
+ mov al,111b
+ jmp postbyte_16bit
+ address_bp:
+ mov al,110b
+ postbyte_16bit:
+ test ch,22h
+ jnz address_16bit_value
+ or ch,ch
+ jnz address_sizes_do_not_agree
+ cmp edx,10000h
+ jge value_out_of_range
+ cmp edx,-8000h
+ jl value_out_of_range
+ or dx,dx
+ jz address
+ cmp dx,80h
+ jb address_8bit_value
+ cmp dx,-80h
+ jae address_8bit_value
+ address_16bit_value:
+ or al,10000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ mov eax,edx
+ stos word [edi]
+ ret
+ address_8bit_value:
+ or al,01000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ mov al,dl
+ stos byte [edi]
+ cmp dx,80h
+ jge value_out_of_range
+ cmp dx,-80h
+ jl value_out_of_range
+ ret
+ address:
+ cmp al,110b
+ je address_8bit_value
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ ret
+ address_vsib:
+ mov al,bl
+ shr al,4
+ cmp al,0Ch
+ je vector_index_ok
+ cmp al,0Dh
+ jne invalid_address
+ vector_index_ok:
+ mov al,bh
+ shr al,4
+ cmp al,4
+ je postbyte_32bit
+ cmp [code_type],64
+ je address_prefix_ok
+ test al,al
+ jnz invalid_address
+ postbyte_32bit:
+ call address_32bit_prefix
+ jmp address_prefix_ok
+ postbyte_64bit:
+ cmp [code_type],64
+ jne invalid_address_size
+ address_prefix_ok:
+ cmp bl,44h
+ je invalid_address
+ cmp bl,84h
+ je invalid_address
+ test bh,1000b
+ jz base_code_ok
+ or [rex_prefix],41h
+ base_code_ok:
+ test bl,1000b
+ jz index_code_ok
+ or [rex_prefix],42h
+ index_code_ok:
+ call store_instruction_code
+ or cl,cl
+ jz only_base_register
+ base_and_index:
+ mov al,100b
+ xor ah,ah
+ cmp cl,1
+ je scale_ok
+ cmp cl,2
+ je scale_1
+ cmp cl,4
+ je scale_2
+ or ah,11000000b
+ jmp scale_ok
+ scale_2:
+ or ah,10000000b
+ jmp scale_ok
+ scale_1:
+ or ah,01000000b
+ scale_ok:
+ or bh,bh
+ jz only_index_register
+ and bl,111b
+ shl bl,3
+ or ah,bl
+ and bh,111b
+ or ah,bh
+ sib_ready:
+ test ch,44h
+ jnz sib_address_32bit_value
+ test ch,88h
+ jnz sib_address_32bit_value
+ or ch,ch
+ jnz address_sizes_do_not_agree
+ cmp bh,5
+ je address_value
+ or edx,edx
+ jz sib_address
+ address_value:
+ cmp edx,80h
+ jb sib_address_8bit_value
+ cmp edx,-80h
+ jae sib_address_8bit_value
+ sib_address_32bit_value:
+ or al,10000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos word [edi]
+ jmp store_address_32bit_value
+ sib_address_8bit_value:
+ or al,01000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos word [edi]
+ mov al,dl
+ stos byte [edi]
+ cmp edx,80h
+ jge value_out_of_range
+ cmp edx,-80h
+ jl value_out_of_range
+ ret
+ sib_address:
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos word [edi]
+ ret
+ only_index_register:
+ or ah,101b
+ and bl,111b
+ shl bl,3
+ or ah,bl
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos word [edi]
+ test ch,44h
+ jnz store_address_32bit_value
+ test ch,88h
+ jnz store_address_32bit_value
+ or ch,ch
+ jnz invalid_address_size
+ jmp store_address_32bit_value
+ zero_index_register:
+ mov bl,4
+ mov cl,1
+ jmp base_and_index
+ only_base_register:
+ mov al,bh
+ and al,111b
+ cmp al,4
+ je zero_index_register
+ test ch,44h
+ jnz simple_address_32bit_value
+ test ch,88h
+ jnz simple_address_32bit_value
+ or ch,ch
+ jnz address_sizes_do_not_agree
+ or edx,edx
+ jz simple_address
+ cmp edx,80h
+ jb simple_address_8bit_value
+ cmp edx,-80h
+ jae simple_address_8bit_value
+ simple_address_32bit_value:
+ or al,10000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ jmp store_address_32bit_value
+ simple_address_8bit_value:
+ or al,01000000b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ mov al,dl
+ stos byte [edi]
+ cmp edx,80h
+ jge value_out_of_range
+ cmp edx,-80h
+ jl value_out_of_range
+ ret
+ simple_address:
+ cmp al,5
+ je simple_address_8bit_value
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ ret
+ address_immediate:
+ cmp [code_type],64
+ je address_immediate_sib
+ test ch,44h
+ jnz address_immediate_32bit
+ test ch,88h
+ jnz address_immediate_32bit
+ test ch,22h
+ jnz address_immediate_16bit
+ or ch,ch
+ jnz invalid_address_size
+ cmp [code_type],16
+ je addressing_16bit
+ address_immediate_32bit:
+ call address_32bit_prefix
+ call store_instruction_code
+ store_immediate_address:
+ mov al,101b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ store_address_32bit_value:
+ test ch,0F0h
+ jz address_32bit_relocation_ok
+ mov eax,ecx
+ shr eax,16
+ cmp al,4
+ jne address_32bit_relocation
+ mov al,2
+ address_32bit_relocation:
+ xchg [value_type],al
+ mov ebx,[address_symbol]
+ xchg ebx,[symbol_identifier]
+ call mark_relocation
+ mov [value_type],al
+ mov [symbol_identifier],ebx
+ address_32bit_relocation_ok:
+ mov eax,edx
+ stos dword [edi]
+ ret
+ store_address_64bit_value:
+ test ch,0F0h
+ jz address_64bit_relocation_ok
+ mov eax,ecx
+ shr eax,16
+ xchg [value_type],al
+ mov ebx,[address_symbol]
+ xchg ebx,[symbol_identifier]
+ call mark_relocation
+ mov [value_type],al
+ mov [symbol_identifier],ebx
+ address_64bit_relocation_ok:
+ mov eax,edx
+ stos dword [edi]
+ mov eax,[address_high]
+ stos dword [edi]
+ ret
+ address_immediate_sib:
+ test ch,44h
+ jnz address_immediate_sib_32bit
+ test ch,not 88h
+ jnz invalid_address_size
+ address_immediate_sib_store:
+ call store_instruction_code
+ mov al,100b
+ mov ah,100101b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos word [edi]
+ jmp store_address_32bit_value
+ address_immediate_sib_32bit:
+ test ecx,0FF0000h
+ jnz address_immediate_sib_nosignextend
+ test edx,80000000h
+ jz address_immediate_sib_store
+ address_immediate_sib_nosignextend:
+ call address_32bit_prefix
+ jmp address_immediate_sib_store
+ address_eip_based:
+ mov al,67h
+ stos byte [edi]
+ address_rip_based:
+ cmp [code_type],64
+ jne invalid_address
+ call store_instruction_code
+ jmp store_immediate_address
+ address_relative:
+ call store_instruction_code
+ movzx eax,[immediate_size]
+ add eax,edi
+ sub eax,[current_offset]
+ add eax,5
+ sub edx,eax
+ jo value_out_of_range
+ mov al,101b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ shr ecx,16
+ xchg [value_type],cl
+ mov ebx,[address_symbol]
+ xchg ebx,[symbol_identifier]
+ mov eax,edx
+ call mark_relocation
+ mov [value_type],cl
+ mov [symbol_identifier],ebx
+ stos dword [edi]
+ ret
+ addressing_16bit:
+ cmp edx,10000h
+ jge address_immediate_32bit
+ cmp edx,-8000h
+ jl address_immediate_32bit
+ movzx edx,dx
+ address_immediate_16bit:
+ call address_16bit_prefix
+ call store_instruction_code
+ mov al,110b
+ mov cl,[postbyte_register]
+ shl cl,3
+ or al,cl
+ stos byte [edi]
+ mov eax,edx
+ stos word [edi]
+ cmp edx,10000h
+ jge value_out_of_range
+ cmp edx,-8000h
+ jl value_out_of_range
+ ret
+ address_16bit_prefix:
+ cmp [code_type],16
+ je instruction_prefix_ok
+ mov al,67h
+ stos byte [edi]
+ ret
+ address_32bit_prefix:
+ cmp [code_type],32
+ je instruction_prefix_ok
+ mov al,67h
+ stos byte [edi]
+ instruction_prefix_ok:
+ ret
+store_instruction_with_imm8:
+ mov [immediate_size],1
+ call store_instruction
+ mov al,byte [value]
+ stos byte [edi]
+ ret
+store_instruction_with_imm16:
+ mov [immediate_size],2
+ call store_instruction
+ mov ax,word [value]
+ call mark_relocation
+ stos word [edi]
+ ret
+store_instruction_with_imm32:
+ mov [immediate_size],4
+ call store_instruction
+ mov eax,dword [value]
+ call mark_relocation
+ stos dword [edi]
+ ret
diff --git a/samples/C++/Math.inl b/samples/C++/Math.inl
new file mode 100644
index 00000000..194370a3
--- /dev/null
+++ b/samples/C++/Math.inl
@@ -0,0 +1,530 @@
+/*
+===========================================================================
+The Open Game Libraries.
+Copyright (C) 2007-2010 Lusito Software
+
+Author: Santo Pfingsten (TTK-Bandit)
+Purpose: Math namespace
+-----------------------------------------
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
+===========================================================================
+*/
+
+#ifndef __OG_MATH_INL__
+#define __OG_MATH_INL__
+
+namespace og {
+
+/*
+==============================================================================
+
+ Math
+
+==============================================================================
+*/
+
+/*
+================
+Math::Abs
+================
+*/
+OG_INLINE int Math::Abs( int i ) {
+#if 1
+ if ( i & 0x80000000 )
+ return 0x80000000 - (i & MASK_SIGNED);
+ return i;
+#else
+ int y = x >> 31;
+ return ( ( x ^ y ) - y );
+#endif
+}
+
+/*
+================
+Math::Fabs
+================
+*/
+OG_INLINE float Math::Fabs( float f ) {
+#if 1
+ uInt *pf = reinterpret_cast(&f);
+ *(pf) &= MASK_SIGNED;
+ return f;
+#else
+ return fabsf( f );
+#endif
+}
+
+/*
+================
+Math::Round
+================
+*/
+OG_INLINE float Math::Round( float f ) {
+ return floorf( f + 0.5f );
+}
+
+/*
+================
+Math::Floor
+================
+*/
+OG_INLINE float Math::Floor( float f ) {
+ return floorf( f );
+}
+
+/*
+================
+Math::Ceil
+================
+*/
+OG_INLINE float Math::Ceil( float f ) {
+ return ceilf( f );
+}
+
+/*
+================
+Math::Ftoi
+
+ok since this is SSE, why should the other ftoi be the faster one ?
+and: we might need to add a check for SSE extensions..
+because sse isn't *really* faster (I actually read that GCC does not handle
+SSE extensions perfectly. I'll find the link and send it to you when you're online)
+================
+*/
+OG_INLINE int Math::Ftoi( float f ) {
+ //! @todo needs testing
+ // note: sse function cvttss2si
+#if OG_ASM_MSVC
+ int i;
+#if defined(OG_FTOI_USE_SSE)
+ if( SysInfo::cpu.general.SSE ) {
+ __asm cvttss2si eax, f
+ __asm mov i, eax
+ return i;
+ } else
+#endif
+ {
+ __asm fld f
+ __asm fistp i
+ //__asm mov eax, i // do we need this ? O_o
+ }
+ return i;
+#elif OG_ASM_GNU
+ int i;
+#if defined(OG_FTOI_USE_SSE)
+ if( SysInfo::cpu.general.SSE ) {
+ __asm__ __volatile__( "cvttss2si %1 \n\t"
+ : "=m" (i)
+ : "m" (f)
+ );
+ } else
+#endif
+ {
+ __asm__ __volatile__( "flds %1 \n\t"
+ "fistpl %0 \n\t"
+ : "=m" (i)
+ : "m" (f)
+ );
+ }
+ return i;
+#else
+ // we use c++ cast instead of c cast (not sure why id did that)
+ return static_cast(f);
+#endif
+}
+
+/*
+================
+Math::FtoiFast
+================
+*/
+OG_INLINE int Math::FtoiFast( float f ) {
+#if OG_ASM_MSVC
+ int i;
+ __asm fld f
+ __asm fistp i
+ //__asm mov eax, i // do we need this ? O_o
+ return i;
+#elif OG_ASM_GNU
+ int i;
+ __asm__ __volatile__( "flds %1 \n\t"
+ "fistpl %0 \n\t"
+ : "=m" (i)
+ : "m" (f)
+ );
+ return i;
+#else
+ // we use c++ cast instead of c cast (not sure why id did that)
+ return static_cast(f);
+#endif
+}
+
+/*
+================
+Math::Ftol
+================
+*/
+OG_INLINE long Math::Ftol( float f ) {
+#if OG_ASM_MSVC
+ long i;
+ __asm fld f
+ __asm fistp i
+ //__asm mov eax, i // do we need this ? O_o
+ return i;
+#elif OG_ASM_GNU
+ long i;
+ __asm__ __volatile__( "flds %1 \n\t"
+ "fistpl %0 \n\t"
+ : "=m" (i)
+ : "m" (f)
+ );
+ return i;
+#else
+ // we use c++ cast instead of c cast (not sure why id did that)
+ return static_cast(f);
+#endif
+}
+
+/*
+================
+Math::Sign
+================
+*/
+OG_INLINE float Math::Sign( float f ) {
+ if ( f > 0.0f )
+ return 1.0f;
+ if ( f < 0.0f )
+ return -1.0f;
+ return 0.0f;
+}
+
+/*
+================
+Math::Fmod
+================
+*/
+OG_INLINE float Math::Fmod( float numerator, float denominator ) {
+ return fmodf( numerator, denominator );
+}
+
+/*
+================
+Math::Modf
+================
+*/
+OG_INLINE float Math::Modf( float f, float& i ) {
+ return modff( f, &i );
+}
+OG_INLINE float Math::Modf( float f ) {
+ float i;
+ return modff( f, &i );
+}
+
+/*
+================
+Math::Sqrt
+================
+*/
+OG_INLINE float Math::Sqrt( float f ) {
+ return sqrtf( f );
+}
+
+/*
+================
+Math::InvSqrt
+
+Cannot be 0.0f
+================
+*/
+OG_INLINE float Math::InvSqrt( float f ) {
+ OG_ASSERT( f != 0.0f );
+ return 1.0f / sqrtf( f );
+}
+
+/*
+================
+Math::RSqrt
+
+Can be 0.0f
+================
+*/
+OG_INLINE float Math::RSqrt( float f ) {
+ float g = 0.5f * f;
+ int i = *reinterpret_cast(&f);
+
+ // do a guess
+ i = 0x5f375a86 - ( i>>1 );
+ f = *reinterpret_cast(&i);
+
+ // Newtons calculation
+ f = f * ( 1.5f - g * f * f );
+ return f;
+}
+
+/*
+================
+Math::Log/Log2/Log10
+
+Log of 0 is bad.
+I've also heard you're not really
+supposed to do log of negatives, yet
+they work fine.
+================
+*/
+OG_INLINE float Math::Log( float f ) {
+ OG_ASSERT( f != 0.0f );
+ return logf( f );
+}
+OG_INLINE float Math::Log2( float f ) {
+ OG_ASSERT( f != 0.0f );
+ return INV_LN_2 * logf( f );
+}
+OG_INLINE float Math::Log10( float f ) {
+ OG_ASSERT( f != 0.0f );
+ return INV_LN_10 * logf( f );
+}
+
+/*
+================
+Math::Pow
+================
+*/
+OG_INLINE float Math::Pow( float base, float exp ) {
+ return powf( base, exp );
+}
+
+/*
+================
+Math::Exp
+================
+*/
+OG_INLINE float Math::Exp( float f ) {
+ return expf( f );
+}
+
+/*
+================
+Math::IsPowerOfTwo
+================
+*/
+OG_INLINE bool Math::IsPowerOfTwo( int x ) {
+ // This is the faster of the two known methods
+ // with the x > 0 check moved to the beginning
+ return x > 0 && ( x & ( x - 1 ) ) == 0;
+}
+
+/*
+================
+Math::HigherPowerOfTwo
+================
+*/
+OG_INLINE int Math::HigherPowerOfTwo( int x ) {
+ x--;
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ return x + 1;
+}
+
+/*
+================
+Math::LowerPowerOfTwo
+================
+*/
+OG_INLINE int Math::LowerPowerOfTwo( int x ) {
+ return HigherPowerOfTwo( x ) >> 1;
+}
+
+/*
+================
+Math::FloorPowerOfTwo
+================
+*/
+OG_INLINE int Math::FloorPowerOfTwo( int x ) {
+ return IsPowerOfTwo( x ) ? x : LowerPowerOfTwo( x );
+}
+
+/*
+================
+Math::CeilPowerOfTwo
+================
+*/
+OG_INLINE int Math::CeilPowerOfTwo( int x ) {
+ return IsPowerOfTwo( x ) ? x : HigherPowerOfTwo( x );
+}
+
+/*
+================
+Math::ClosestPowerOfTwo
+================
+*/
+OG_INLINE int Math::ClosestPowerOfTwo( int x ) {
+ if ( IsPowerOfTwo( x ) )
+ return x;
+ int high = HigherPowerOfTwo( x );
+ int low = high >> 1;
+ return ((high-x) < (x-low)) ? high : low;
+}
+
+/*
+================
+Math::Digits
+================
+*/
+OG_INLINE int Math::Digits( int x ) {
+ int digits = 1;
+ int step = 10;
+ while (step <= x) {
+ digits++;
+ step *= 10;
+ }
+ return digits;
+}
+
+/*
+================
+Math::Sin/ASin
+================
+*/
+OG_INLINE float Math::Sin( float f ) {
+ return sinf( f );
+}
+OG_INLINE float Math::ASin( float f ) {
+ if ( f <= -1.0f )
+ return -HALF_PI;
+ if ( f >= 1.0f )
+ return HALF_PI;
+ return asinf( f );
+}
+
+/*
+================
+Math::Cos/ACos
+================
+*/
+OG_INLINE float Math::Cos( float f ) {
+ return cosf( f );
+}
+OG_INLINE float Math::ACos( float f ) {
+ if ( f <= -1.0f )
+ return PI;
+ if ( f >= 1.0f )
+ return 0.0f;
+ return acosf( f );
+}
+
+/*
+================
+Math::Tan/ATan
+================
+*/
+OG_INLINE float Math::Tan( float f ) {
+ return tanf( f );
+}
+OG_INLINE float Math::ATan( float f ) {
+ return atanf( f );
+}
+OG_INLINE float Math::ATan( float f1, float f2 ) {
+ return atan2f( f1, f2 );
+}
+
+/*
+================
+Math::SinCos
+================
+*/
+OG_INLINE void Math::SinCos( float f, float &s, float &c ) {
+#if OG_ASM_MSVC
+ // sometimes assembler is just waaayy faster
+ _asm {
+ fld f
+ fsincos
+ mov ecx, c
+ mov edx, s
+ fstp dword ptr [ecx]
+ fstp dword ptr [edx]
+ }
+#elif OG_ASM_GNU
+ asm ("fsincos" : "=t" (c), "=u" (s) : "0" (f));
+#else
+ s = Sin(f);
+ c = Sqrt( 1.0f - s * s ); // faster than calling Cos(f)
+#endif
+}
+
+/*
+================
+Math::Deg2Rad
+================
+*/
+OG_INLINE float Math::Deg2Rad( float f ) {
+ return f * DEG_TO_RAD;
+}
+
+/*
+================
+Math::Rad2Deg
+================
+*/
+OG_INLINE float Math::Rad2Deg( float f ) {
+ return f * RAD_TO_DEG;
+}
+
+/*
+================
+Math::Square
+================
+*/
+OG_INLINE float Math::Square( float v ) {
+ return v * v;
+}
+
+/*
+================
+Math::Cube
+================
+*/
+OG_INLINE float Math::Cube( float v ) {
+ return v * v * v;
+}
+
+/*
+================
+Math::Sec2Ms
+================
+*/
+OG_INLINE int Math::Sec2Ms( int sec ) {
+ return sec * 1000;
+}
+
+/*
+================
+Math::Ms2Sec
+================
+*/
+OG_INLINE int Math::Ms2Sec( int ms ) {
+ return FtoiFast( ms * 0.001f );
+}
+
+}
+
+#endif
diff --git a/samples/C++/epoll_reactor.ipp b/samples/C++/epoll_reactor.ipp
new file mode 100644
index 00000000..5d592aff
--- /dev/null
+++ b/samples/C++/epoll_reactor.ipp
@@ -0,0 +1,664 @@
+//
+// detail/impl/epoll_reactor.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include
+
+#if defined(BOOST_ASIO_HAS_EPOLL)
+
+#include
+#include
+#include
+#include
+#include
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+# include
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+#include
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+epoll_reactor::epoll_reactor(boost::asio::io_service& io_service)
+ : boost::asio::detail::service_base(io_service),
+ io_service_(use_service(io_service)),
+ mutex_(),
+ interrupter_(),
+ epoll_fd_(do_epoll_create()),
+ timer_fd_(do_timerfd_create()),
+ shutdown_(false)
+{
+ // Add the interrupter's descriptor to epoll.
+ epoll_event ev = { 0, { 0 } };
+ ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+ ev.data.ptr = &interrupter_;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
+ interrupter_.interrupt();
+
+ // Add the timer descriptor to epoll.
+ if (timer_fd_ != -1)
+ {
+ ev.events = EPOLLIN | EPOLLERR;
+ ev.data.ptr = &timer_fd_;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
+ }
+}
+
+epoll_reactor::~epoll_reactor()
+{
+ if (epoll_fd_ != -1)
+ close(epoll_fd_);
+ if (timer_fd_ != -1)
+ close(timer_fd_);
+}
+
+void epoll_reactor::shutdown_service()
+{
+ mutex::scoped_lock lock(mutex_);
+ shutdown_ = true;
+ lock.unlock();
+
+ op_queue ops;
+
+ while (descriptor_state* state = registered_descriptors_.first())
+ {
+ for (int i = 0; i < max_ops; ++i)
+ ops.push(state->op_queue_[i]);
+ state->shutdown_ = true;
+ registered_descriptors_.free(state);
+ }
+
+ timer_queues_.get_all_timers(ops);
+
+ io_service_.abandon_operations(ops);
+}
+
+void epoll_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
+{
+ if (fork_ev == boost::asio::io_service::fork_child)
+ {
+ if (epoll_fd_ != -1)
+ ::close(epoll_fd_);
+ epoll_fd_ = -1;
+ epoll_fd_ = do_epoll_create();
+
+ if (timer_fd_ != -1)
+ ::close(timer_fd_);
+ timer_fd_ = -1;
+ timer_fd_ = do_timerfd_create();
+
+ interrupter_.recreate();
+
+ // Add the interrupter's descriptor to epoll.
+ epoll_event ev = { 0, { 0 } };
+ ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+ ev.data.ptr = &interrupter_;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
+ interrupter_.interrupt();
+
+ // Add the timer descriptor to epoll.
+ if (timer_fd_ != -1)
+ {
+ ev.events = EPOLLIN | EPOLLERR;
+ ev.data.ptr = &timer_fd_;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
+ }
+
+ update_timeout();
+
+ // Re-register all descriptors with epoll.
+ mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+ for (descriptor_state* state = registered_descriptors_.first();
+ state != 0; state = state->next_)
+ {
+ ev.events = state->registered_events_;
+ ev.data.ptr = state;
+ int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, state->descriptor_, &ev);
+ if (result != 0)
+ {
+ boost::system::error_code ec(errno,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(ec, "epoll re-registration");
+ }
+ }
+ }
+}
+
+void epoll_reactor::init_task()
+{
+ io_service_.init_task();
+}
+
+int epoll_reactor::register_descriptor(socket_type descriptor,
+ epoll_reactor::per_descriptor_data& descriptor_data)
+{
+ descriptor_data = allocate_descriptor_state();
+
+ {
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ descriptor_data->reactor_ = this;
+ descriptor_data->descriptor_ = descriptor;
+ descriptor_data->shutdown_ = false;
+ }
+
+ epoll_event ev = { 0, { 0 } };
+ ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
+ descriptor_data->registered_events_ = ev.events;
+ ev.data.ptr = descriptor_data;
+ int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
+ if (result != 0)
+ return errno;
+
+ return 0;
+}
+
+int epoll_reactor::register_internal_descriptor(
+ int op_type, socket_type descriptor,
+ epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op)
+{
+ descriptor_data = allocate_descriptor_state();
+
+ {
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ descriptor_data->reactor_ = this;
+ descriptor_data->descriptor_ = descriptor;
+ descriptor_data->shutdown_ = false;
+ descriptor_data->op_queue_[op_type].push(op);
+ }
+
+ epoll_event ev = { 0, { 0 } };
+ ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
+ descriptor_data->registered_events_ = ev.events;
+ ev.data.ptr = descriptor_data;
+ int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
+ if (result != 0)
+ return errno;
+
+ return 0;
+}
+
+void epoll_reactor::move_descriptor(socket_type,
+ epoll_reactor::per_descriptor_data& target_descriptor_data,
+ epoll_reactor::per_descriptor_data& source_descriptor_data)
+{
+ target_descriptor_data = source_descriptor_data;
+ source_descriptor_data = 0;
+}
+
+void epoll_reactor::start_op(int op_type, socket_type descriptor,
+ epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op,
+ bool is_continuation, bool allow_speculative)
+{
+ if (!descriptor_data)
+ {
+ op->ec_ = boost::asio::error::bad_descriptor;
+ post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ if (descriptor_data->shutdown_)
+ {
+ post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ if (descriptor_data->op_queue_[op_type].empty())
+ {
+ if (allow_speculative
+ && (op_type != read_op
+ || descriptor_data->op_queue_[except_op].empty()))
+ {
+ if (op->perform())
+ {
+ descriptor_lock.unlock();
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+
+ if (op_type == write_op)
+ {
+ if ((descriptor_data->registered_events_ & EPOLLOUT) == 0)
+ {
+ epoll_event ev = { 0, { 0 } };
+ ev.events = descriptor_data->registered_events_ | EPOLLOUT;
+ ev.data.ptr = descriptor_data;
+ if (epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev) == 0)
+ {
+ descriptor_data->registered_events_ |= ev.events;
+ }
+ else
+ {
+ op->ec_ = boost::system::error_code(errno,
+ boost::asio::error::get_system_category());
+ io_service_.post_immediate_completion(op, is_continuation);
+ return;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (op_type == write_op)
+ {
+ descriptor_data->registered_events_ |= EPOLLOUT;
+ }
+
+ epoll_event ev = { 0, { 0 } };
+ ev.events = descriptor_data->registered_events_;
+ ev.data.ptr = descriptor_data;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev);
+ }
+ }
+
+ descriptor_data->op_queue_[op_type].push(op);
+ io_service_.work_started();
+}
+
+void epoll_reactor::cancel_ops(socket_type,
+ epoll_reactor::per_descriptor_data& descriptor_data)
+{
+ if (!descriptor_data)
+ return;
+
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ op_queue ops;
+ for (int i = 0; i < max_ops; ++i)
+ {
+ while (reactor_op* op = descriptor_data->op_queue_[i].front())
+ {
+ op->ec_ = boost::asio::error::operation_aborted;
+ descriptor_data->op_queue_[i].pop();
+ ops.push(op);
+ }
+ }
+
+ descriptor_lock.unlock();
+
+ io_service_.post_deferred_completions(ops);
+}
+
+void epoll_reactor::deregister_descriptor(socket_type descriptor,
+ epoll_reactor::per_descriptor_data& descriptor_data, bool closing)
+{
+ if (!descriptor_data)
+ return;
+
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ if (!descriptor_data->shutdown_)
+ {
+ if (closing)
+ {
+ // The descriptor will be automatically removed from the epoll set when
+ // it is closed.
+ }
+ else
+ {
+ epoll_event ev = { 0, { 0 } };
+ epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
+ }
+
+ op_queue ops;
+ for (int i = 0; i < max_ops; ++i)
+ {
+ while (reactor_op* op = descriptor_data->op_queue_[i].front())
+ {
+ op->ec_ = boost::asio::error::operation_aborted;
+ descriptor_data->op_queue_[i].pop();
+ ops.push(op);
+ }
+ }
+
+ descriptor_data->descriptor_ = -1;
+ descriptor_data->shutdown_ = true;
+
+ descriptor_lock.unlock();
+
+ free_descriptor_state(descriptor_data);
+ descriptor_data = 0;
+
+ io_service_.post_deferred_completions(ops);
+ }
+}
+
+void epoll_reactor::deregister_internal_descriptor(socket_type descriptor,
+ epoll_reactor::per_descriptor_data& descriptor_data)
+{
+ if (!descriptor_data)
+ return;
+
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+ if (!descriptor_data->shutdown_)
+ {
+ epoll_event ev = { 0, { 0 } };
+ epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
+
+ op_queue ops;
+ for (int i = 0; i < max_ops; ++i)
+ ops.push(descriptor_data->op_queue_[i]);
+
+ descriptor_data->descriptor_ = -1;
+ descriptor_data->shutdown_ = true;
+
+ descriptor_lock.unlock();
+
+ free_descriptor_state(descriptor_data);
+ descriptor_data = 0;
+ }
+}
+
+void epoll_reactor::run(bool block, op_queue& ops)
+{
+ // This code relies on the fact that the task_io_service queues the reactor
+ // task behind all descriptor operations generated by this function. This
+ // means, that by the time we reach this point, any previously returned
+ // descriptor operations have already been dequeued. Therefore it is now safe
+ // for us to reuse and return them for the task_io_service to queue again.
+
+ // Calculate a timeout only if timerfd is not used.
+ int timeout;
+ if (timer_fd_ != -1)
+ timeout = block ? -1 : 0;
+ else
+ {
+ mutex::scoped_lock lock(mutex_);
+ timeout = block ? get_timeout() : 0;
+ }
+
+ // Block on the epoll descriptor.
+ epoll_event events[128];
+ int num_events = epoll_wait(epoll_fd_, events, 128, timeout);
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+ bool check_timers = (timer_fd_ == -1);
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+ bool check_timers = true;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+ // Dispatch the waiting events.
+ for (int i = 0; i < num_events; ++i)
+ {
+ void* ptr = events[i].data.ptr;
+ if (ptr == &interrupter_)
+ {
+ // No need to reset the interrupter since we're leaving the descriptor
+ // in a ready-to-read state and relying on edge-triggered notifications
+ // to make it so that we only get woken up when the descriptor's epoll
+ // registration is updated.
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+ if (timer_fd_ == -1)
+ check_timers = true;
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+ check_timers = true;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+ }
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+ else if (ptr == &timer_fd_)
+ {
+ check_timers = true;
+ }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+ else
+ {
+ // The descriptor operation doesn't count as work in and of itself, so we
+ // don't call work_started() here. This still allows the io_service to
+ // stop if the only remaining operations are descriptor operations.
+ descriptor_state* descriptor_data = static_cast(ptr);
+ descriptor_data->set_ready_events(events[i].events);
+ ops.push(descriptor_data);
+ }
+ }
+
+ if (check_timers)
+ {
+ mutex::scoped_lock common_lock(mutex_);
+ timer_queues_.get_ready_timers(ops);
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+ if (timer_fd_ != -1)
+ {
+ itimerspec new_timeout;
+ itimerspec old_timeout;
+ int flags = get_timeout(new_timeout);
+ timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
+ }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+ }
+}
+
+void epoll_reactor::interrupt()
+{
+ epoll_event ev = { 0, { 0 } };
+ ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+ ev.data.ptr = &interrupter_;
+ epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, interrupter_.read_descriptor(), &ev);
+}
+
+int epoll_reactor::do_epoll_create()
+{
+#if defined(EPOLL_CLOEXEC)
+ int fd = epoll_create1(EPOLL_CLOEXEC);
+#else // defined(EPOLL_CLOEXEC)
+ int fd = -1;
+ errno = EINVAL;
+#endif // defined(EPOLL_CLOEXEC)
+
+ if (fd == -1 && (errno == EINVAL || errno == ENOSYS))
+ {
+ fd = epoll_create(epoll_size);
+ if (fd != -1)
+ ::fcntl(fd, F_SETFD, FD_CLOEXEC);
+ }
+
+ if (fd == -1)
+ {
+ boost::system::error_code ec(errno,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(ec, "epoll");
+ }
+
+ return fd;
+}
+
+int epoll_reactor::do_timerfd_create()
+{
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+# if defined(TFD_CLOEXEC)
+ int fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
+# else // defined(TFD_CLOEXEC)
+ int fd = -1;
+ errno = EINVAL;
+# endif // defined(TFD_CLOEXEC)
+
+ if (fd == -1 && errno == EINVAL)
+ {
+ fd = timerfd_create(CLOCK_MONOTONIC, 0);
+ if (fd != -1)
+ ::fcntl(fd, F_SETFD, FD_CLOEXEC);
+ }
+
+ return fd;
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+ return -1;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+}
+
+epoll_reactor::descriptor_state* epoll_reactor::allocate_descriptor_state()
+{
+ mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+ return registered_descriptors_.alloc();
+}
+
+void epoll_reactor::free_descriptor_state(epoll_reactor::descriptor_state* s)
+{
+ mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+ registered_descriptors_.free(s);
+}
+
+void epoll_reactor::do_add_timer_queue(timer_queue_base& queue)
+{
+ mutex::scoped_lock lock(mutex_);
+ timer_queues_.insert(&queue);
+}
+
+void epoll_reactor::do_remove_timer_queue(timer_queue_base& queue)
+{
+ mutex::scoped_lock lock(mutex_);
+ timer_queues_.erase(&queue);
+}
+
+void epoll_reactor::update_timeout()
+{
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+ if (timer_fd_ != -1)
+ {
+ itimerspec new_timeout;
+ itimerspec old_timeout;
+ int flags = get_timeout(new_timeout);
+ timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
+ return;
+ }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+ interrupt();
+}
+
+int epoll_reactor::get_timeout()
+{
+ // By default we will wait no longer than 5 minutes. This will ensure that
+ // any changes to the system clock are detected after no longer than this.
+ return timer_queues_.wait_duration_msec(5 * 60 * 1000);
+}
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+int epoll_reactor::get_timeout(itimerspec& ts)
+{
+ ts.it_interval.tv_sec = 0;
+ ts.it_interval.tv_nsec = 0;
+
+ long usec = timer_queues_.wait_duration_usec(5 * 60 * 1000 * 1000);
+ ts.it_value.tv_sec = usec / 1000000;
+ ts.it_value.tv_nsec = usec ? (usec % 1000000) * 1000 : 1;
+
+ return usec ? 0 : TFD_TIMER_ABSTIME;
+}
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+struct epoll_reactor::perform_io_cleanup_on_block_exit
+{
+ explicit perform_io_cleanup_on_block_exit(epoll_reactor* r)
+ : reactor_(r), first_op_(0)
+ {
+ }
+
+ ~perform_io_cleanup_on_block_exit()
+ {
+ if (first_op_)
+ {
+ // Post the remaining completed operations for invocation.
+ if (!ops_.empty())
+ reactor_->io_service_.post_deferred_completions(ops_);
+
+ // A user-initiated operation has completed, but there's no need to
+ // explicitly call work_finished() here. Instead, we'll take advantage of
+ // the fact that the task_io_service will call work_finished() once we
+ // return.
+ }
+ else
+ {
+ // No user-initiated operations have completed, so we need to compensate
+ // for the work_finished() call that the task_io_service will make once
+ // this operation returns.
+ reactor_->io_service_.work_started();
+ }
+ }
+
+ epoll_reactor* reactor_;
+ op_queue ops_;
+ operation* first_op_;
+};
+
+epoll_reactor::descriptor_state::descriptor_state()
+ : operation(&epoll_reactor::descriptor_state::do_complete)
+{
+}
+
+operation* epoll_reactor::descriptor_state::perform_io(uint32_t events)
+{
+ mutex_.lock();
+ perform_io_cleanup_on_block_exit io_cleanup(reactor_);
+ mutex::scoped_lock descriptor_lock(mutex_, mutex::scoped_lock::adopt_lock);
+
+ // Exception operations must be processed first to ensure that any
+ // out-of-band data is read before normal data.
+ static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI };
+ for (int j = max_ops - 1; j >= 0; --j)
+ {
+ if (events & (flag[j] | EPOLLERR | EPOLLHUP))
+ {
+ while (reactor_op* op = op_queue_[j].front())
+ {
+ if (op->perform())
+ {
+ op_queue_[j].pop();
+ io_cleanup.ops_.push(op);
+ }
+ else
+ break;
+ }
+ }
+ }
+
+ // The first operation will be returned for completion now. The others will
+ // be posted for later by the io_cleanup object's destructor.
+ io_cleanup.first_op_ = io_cleanup.ops_.front();
+ io_cleanup.ops_.pop();
+ return io_cleanup.first_op_;
+}
+
+void epoll_reactor::descriptor_state::do_complete(
+ io_service_impl* owner, operation* base,
+ const boost::system::error_code& ec, std::size_t bytes_transferred)
+{
+ if (owner)
+ {
+ descriptor_state* descriptor_data = static_cast(base);
+ uint32_t events = static_cast(bytes_transferred);
+ if (operation* op = descriptor_data->perform_io(events))
+ {
+ op->complete(*owner, ec, 0);
+ }
+ }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include
+
+#endif // defined(BOOST_ASIO_HAS_EPOLL)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
diff --git a/samples/Common Lisp/macros-advanced.cl b/samples/Common Lisp/macros-advanced.cl
new file mode 100644
index 00000000..b746d769
--- /dev/null
+++ b/samples/Common Lisp/macros-advanced.cl
@@ -0,0 +1,82 @@
+;; @file macros-advanced.cl
+;;
+;; @breif Advanced macro practices - defining your own macros
+;;
+;; Macro definition skeleton:
+;; (defmacro name (parameter*)
+;; "Optional documentation string"
+;; body-form*)
+;;
+;; Note that backquote expression is most often used in the `body-form`
+;;
+
+; `primep` test a number for prime
+(defun primep (n)
+ "test a number for prime"
+ (if (< n 2) (return-from primep))
+ (do ((i 2 (1+ i)) (p t (not (zerop (mod n i)))))
+ ((> i (sqrt n)) p)
+ (when (not p) (return))))
+; `next-prime` return the next prime bigger than the specified number
+(defun next-prime (n)
+ "return the next prime bigger than the speicified number"
+ (do ((i (1+ n) (1+ i)))
+ ((primep i) i)))
+;
+; The recommended procedures to writting a new macro are as follows:
+; 1. Write a sample call to the macro and the code it should expand into
+(do-primes (p 0 19)
+ (format t "~d " p))
+; Expected expanded codes
+(do ((p (next-prime (- 0 1)) (next-prime p)))
+ ((> p 19))
+ (format t "~d " p))
+; 2. Write code that generate the hardwritten expansion from the arguments in
+; the sample call
+(defmacro do-primes (var-and-range &rest body)
+ (let ((var (first var-and-range))
+ (start (second var-and-range))
+ (end (third var-and-range)))
+ `(do ((,var (next-prime (- ,start 1)) (next-prime ,var)))
+ ((> ,var ,end))
+ ,@body)))
+; 2-1. More concise implementations with the 'parameter list destructuring' and
+; '&body' synonym, it also emits more friendly messages on incorrent input.
+(defmacro do-primes ((var start end) &body body)
+ `(do ((,var (next-prime (- ,start 1)) (next-prime ,var)))
+ ((> ,var ,end))
+ ,@body))
+; 2-2. Test the result of macro expansion with the `macroexpand-1` function
+(macroexpand-1 '(do-primes (p 0 19) (format t "~d " p)))
+; 3. Make sure the macro abstraction does not "leak"
+(defmacro do-primes ((var start end) &body body)
+ (let ((end-value-name (gensym)))
+ `(do ((,var (next-prime (- ,start 1)) (next-prime ,var))
+ (,end-value-name ,end))
+ ((> ,var ,end-value-name))
+ ,@body)))
+; 3-1. Rules to observe to avoid common and possible leaks
+; a. include any subforms in the expansion in positions that will be evaluated
+; in the same order as the subforms appear in the macro call
+; b. make sure subforms are evaluated only once by creating a variable in the
+; expansion to hold the value of evaluating the argument form, and then
+; using that variable anywhere else the value is needed in the expansion
+; c. use `gensym` at macro expansion time to create variable names used in the
+; expansion
+;
+; Appendix I. Macro-writting macros, 'with-gensyms', to guranttee that rule c
+; gets observed.
+; Example usage of `with-gensyms`
+(defmacro do-primes-a ((var start end) &body body)
+ "do-primes implementation with macro-writting macro 'with-gensyms'"
+ (with-gensyms (end-value-name)
+ `(do ((,var (next-prime (- ,start 1)) (next-prime ,var))
+ (,end-value-name ,end))
+ ((> ,var ,end-value-name))
+ ,@body)))
+; Define the macro, note how comma is used to interpolate the value of the loop
+; expression
+(defmacro with-gensyms ((&rest names) &body body)
+ `(let ,(loop for n in names collect `(,n (gensym)))
+ ,@body)
+)
\ No newline at end of file
diff --git a/samples/Common Lisp/motor-inferencia.cl b/samples/Common Lisp/motor-inferencia.cl
new file mode 100644
index 00000000..6a2a97ea
--- /dev/null
+++ b/samples/Common Lisp/motor-inferencia.cl
@@ -0,0 +1,475 @@
+#|
+ESCUELA POLITECNICA SUPERIOR - UNIVERSIDAD AUTONOMA DE MADRID
+INTELIGENCIA ARTIFICIAL
+
+Motor de inferencia
+Basado en parte en "Paradigms of AI Programming: Case Studies
+in Common Lisp", de Peter Norvig, 1992
+|#
+
+
+;;;;;;;;;;;;;;;;;;;;;
+;;;; Global variables
+;;;;;;;;;;;;;;;;;;;;;
+
+
+(defvar *hypothesis-list*)
+(defvar *rule-list*)
+(defvar *fact-list*)
+
+;;;;;;;;;;;;;;;;;;;;;
+;;;; Constants
+;;;;;;;;;;;;;;;;;;;;;
+
+(defconstant +fail+ nil "Indicates unification failure")
+
+(defconstant +no-bindings+ '((nil))
+ "Indicates unification success, with no variables.")
+
+(defconstant *mundo-abierto* nil)
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Functions for the user
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;; Resets *fact-list* to NIL
+(defun erase-facts () (setq *fact-list* nil))
+
+(defun set-hypothesis-list (h) (setq *hypothesis-list* h))
+
+
+;; Returns a list of solutions, each one satisfying all the hypothesis contained
+;; in *hypothesis-list*
+(defun motor-inferencia ()
+ (consulta *hypothesis-list*))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Auxiliary functions
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+#|____________________________________________________________________________
+FUNCTION: CONSULTA
+
+COMMENTS:
+CONSULTA receives a list of hypothesis (variable ), and returns
+a list of binding lists (each binding list being a solution).
+
+EXAMPLES:
+hypotheses is:
+((brothers ?x ?y) (neighbours juan ?x)).
+
+That is, we are searching the brothers of the possible neighbors of Juan.
+
+The function can return in this case:
+
+(((?x . sergio) (?y . javier)) ((?x . julian) (?y . mario)) ((?x . julian) (?y . pedro))).
+That is, the neighbors of Juan (Sergio and Julian) have 3 brothers in total(Javier, Mario, Pedro)
+____________________________________________________________________________|#
+
+(defun consulta (hypotheses)
+ (if (null hypotheses) (list +no-bindings+)
+ (mapcan #'(lambda (b)
+ (mapcar #'(lambda (x) (une-bindings-con-bindings b x))
+ (consulta (subst-bindings b (rest hypotheses)))))
+ (find-hypothesis-value (first hypotheses)))))
+
+
+
+#|____________________________________________________________________________
+FUNCTION: FIND-HYPOTHESIS-VALUE
+
+COMMENTS:
+This function manages the query a single query (only one hypothesis) given a binding list.
+It tries (in the following order) to:
+- Answer the query from *fact-list*
+- Answer the query from the rules in *rule-list*
+- Ask the user
+
+The function returns a list of solutions (list of binding lists).
+
+EXAMPLES:
+If hypothesis is (brothers ?x ?y)
+and the function returns:
+(((?x . sergio) (?y . javier)) ((?x . julian) (?y . maria)) ((?x . alberto) (?y . pedro))).
+
+Means that Sergio and Javier and brothers, Julian and Mario are brothers, and Alberto and Pedro are brothers.
+____________________________________________________________________________|#
+
+(defun find-hypothesis-value (hypothesis)
+ (let (rules)
+ (cond
+ ((equality? hypothesis)
+ (value-from-equality hypothesis))
+ ((value-from-facts hypothesis))
+ ((setq good-rules (find-rules hypothesis))
+ (value-from-rules hypothesis good-rules))
+ (t (ask-user hypothesis)))))
+
+
+
+; une-bindings-con-bindings takes two binding lists and returns a binding list
+; Assumes that b1 and b2 are not +fail+
+(defun une-bindings-con-bindings (b1 b2)
+ (cond
+ ((equal b1 +no-bindings+) b2)
+ ((equal b2 +no-bindings+) b1)
+ (T (append b1 b2))))
+
+
+
+#|____________________________________________________________________________
+FUNCTION: VALUE-FROM-FACTS
+
+COMMENTS:
+Returns all the solutions of obtained directly from *fact-list*
+
+EXAMPLES:
+> (setf *fact-list* '((man luis) (man pedro)(woman mart)(man daniel)(woman laura)))
+
+> (value-from-facts '(man ?x))
+returns:
+
+(((?X . LUIS)) ((?X . PEDRO)) ((?X . DANIEL)))
+____________________________________________________________________________|#
+
+(defun value-from-facts (hypothesis)
+ (mapcan #'(lambda(x) (let ((aux (unify hypothesis x)))
+ (when aux (list aux)))) *fact-list*))
+
+
+
+
+#|____________________________________________________________________________
+FUNCTION: FIND-RULES
+
+COMMENTS:
+Returns the rules in *rule-list* whose THENs unify with the term given in
+The variables in the rules that satisfy this requirement are renamed.
+
+EXAMPLES:
+> (setq *rule-list*
+ '((R1 (pertenece ?E (?E . ?_)))
+ (R2 (pertenece ?E (?_ . ?Xs)) :- ((pertenece ?E ?Xs)))))
+
+Then:
+> (FIND-RULES (PERTENECE 1 (2 5)))
+returns:
+((R2 (PERTENECE ?E.1 (?_ . ?XS.2)) :- ((PERTENECE ?E.1 ?XS.2))))
+That is, only the THEN of rule R2 unify with
+
+However,
+> (FIND-RULES (PERTENECE 1 (1 6 7)))
+
+returns:
+((R1 (PERTENECE ?E.6 (?E.6 . ?_)))
+ (R2 (PERTENECE ?E.7 (?_ . ?XS.8)) :- ((PERTENECE ?E.7 ?XS.8))))
+So the THEN of both rules unify with
+____________________________________________________________________________|#
+
+(defun find-rules (hypothesis)
+ (mapcan #'(lambda(b) (let ((renamed-rule (rename-variables b)))
+ (when (in-then? hypothesis renamed-rule)
+ (list renamed-rule)))) *rule-list*))
+
+(defun in-then? (hypothesis rule)
+ (unless (null (rule-then rule))
+ (not (equal +fail+ (unify hypothesis (rule-then rule))))))
+
+
+
+#|____________________________________________________________________________
+FUNCTION: VALUE-FROM-RULES
+
+COMMENTS:
+Returns all the solutions to found using all the rules given in
+the list . Note that a single rule can have multiple solutions.
+____________________________________________________________________________|#
+(defun value-from-rules (hypothesis rules)
+ (mapcan #'(lambda (r) (eval-rule hypothesis r)) rules))
+
+(defun limpia-vinculos (termino bindings)
+ (unify termino (subst-bindings bindings termino)))
+
+
+#|____________________________________________________________________________
+FUNCTION: EVAL-RULE
+
+COMMENTS:
+Returns all the solutions found using the rule given as input argument.
+
+EXAMPLES:
+> (setq *rule-list*
+ '((R1 (pertenece ?E (?E . ?_)))
+ (R2 (pertenece ?E (?_ . ?Xs)) :- ((pertenece ?E ?Xs)))))
+Then:
+> (EVAL-RULE
+ (PERTENECE 1 (1 6 7))
+ (R1 (PERTENECE ?E.42 (?E.42 . ?_))))
+returns:
+(((NIL)))
+That is, the query (PERTENECE 1 (1 6 7)) can be proven from the given rule, and
+no binding in the variables in the query is necessary (in fact, the query has no variables).
+On the other hand:
+> (EVAL-RULE
+ (PERTENECE 1 (7))
+ (R2 (PERTENECE ?E.49 (?_ . ?XS.50)) :- ((PERTENECE ?E.49 ?XS.50))))
+returns:
+NIL
+That is, the query can not be proven from the rule R2.
+____________________________________________________________________________|#
+
+(defun eval-rule (hypothesis rule)
+ (let ((bindings-then
+ (unify (rule-then rule) hypothesis)))
+ (unless (equal +fail+ bindings-then)
+ (if (rule-ifs rule)
+ (mapcar #'(lambda(b) (limpia-vinculos hypothesis (append bindings-then b)))
+ (consulta (subst-bindings bindings-then (rule-ifs rule))))
+ (list (limpia-vinculos hypothesis bindings-then))))))
+
+
+(defun ask-user (hypothesis)
+ (let ((question hypothesis))
+ (cond
+ ((variables-in question) +fail+)
+ ((not-in-fact-list? question) +fail+)
+ (*mundo-abierto*
+ (format t "~%Es cierto el hecho ~S? (T/nil)" question)
+ (cond
+ ((read) (add-fact question) +no-bindings+)
+ (T (add-fact (list 'NOT question)) +fail+)))
+ (T +fail+))))
+
+
+; value-from-equality:
+(defun value-from-equality (hypothesis)
+ (let ((new-bindings (unify (second hypothesis) (third hypothesis))))
+ (if (not (equal +fail+ new-bindings))
+ (list new-bindings))))
+
+
+
+#|____________________________________________________________________________
+FUNCTION: UNIFY
+
+COMMENTS:
+Finds the most general unifier of two input expressions, taking into account the
+bindings specified in the input
+In case the two expressions can unify, the function returns the total bindings necessary
+for that unification. Otherwise, returns +fail+
+
+EXAMPLES:
+> (unify '1 '1)
+((NIL)) ;; which is the constant +no-bindings+
+> (unify 1 '2)
+nil ;; which is the constant +fail+
+> (unify '?x 1)
+((?x . 1))
+> (unify '(1 1) ?x)
+((? x 1 1))
+> (unify '?_ '?x)
+((NIL))
+> (unify '(p ?x 1 2) '(p ?y ?_ ?_))
+((?x . ?y))
+> (unify '(?a . ?_) '(1 2 3))
+((?a . 1))
+> (unify '(?_ ?_) '(1 2))
+((nil))
+> (unify '(?a . ?b) '(1 2 3))
+((?b 2 3) (?a . 1))
+> (unify '(?a . ?b) '(?v . ?d))
+((?b . ?d) (?a . ?v))
+> (unify '(?eval (+ 1 1)) '1)
+nil
+> (unify '(?eval (+ 1 1)) '2)
+(nil))
+____________________________________________________________________________|#
+
+(defun unify (x y &optional (bindings +no-bindings+))
+ "See if x and y match with given bindings. If they do,
+ return a binding list that would make them equal [p 303]."
+ (cond ((eq bindings +fail+) +fail+)
+ ((eql x y) bindings)
+ ((eval? x) (unify-eval x y bindings))
+ ((eval? y) (unify-eval y x bindings))
+ ((variable? x) (unify-var x y bindings))
+ ((variable? y) (unify-var y x bindings))
+ ((and (consp x) (consp y))
+ (unify (rest x) (rest y)
+ (unify (first x) (first y) bindings)))
+ (t +fail+)))
+
+
+;; rename-variables: renombra ?X por ?X.1, ?Y por ?Y.2 etc. salvo ?_ que no se renombra
+(defun rename-variables (x)
+ "Replace all variables in x with new ones. Excepto ?_"
+ (sublis (mapcar #'(lambda (var)
+ (if (anonymous-var? var)
+ (make-binding var var)
+ (make-binding var (new-variable var))))
+ (variables-in x))
+ x))
+
+
+
+;;;; Auxiliary Functions
+
+(defun unify-var (var x bindings)
+ "Unify var with x, using (and maybe extending) bindings [p 303]."
+ (cond ((or (anonymous-var? var)(anonymous-var? x)) bindings)
+ ((get-binding var bindings)
+ (unify (lookup var bindings) x bindings))
+ ((and (variable? x) (get-binding x bindings))
+ (unify var (lookup x bindings) bindings))
+ ((occurs-in? var x bindings)
+ +fail+)
+ (t (extend-bindings var x bindings))))
+
+(defun variable? (x)
+ "Is x a variable (a symbol starting with ?)?"
+ (and (symbolp x) (eql (char (symbol-name x) 0) #\?)))
+
+(defun get-binding (var bindings)
+ "Find a (variable . value) pair in a binding list."
+ (assoc var bindings))
+
+(defun binding-var (binding)
+ "Get the variable part of a single binding."
+ (car binding))
+
+(defun binding-val (binding)
+ "Get the value part of a single binding."
+ (cdr binding))
+
+(defun make-binding (var val) (cons var val))
+
+(defun lookup (var bindings)
+ "Get the value part (for var) from a binding list."
+ (binding-val (get-binding var bindings)))
+
+(defun extend-bindings (var val bindings)
+ "Add a (var . value) pair to a binding list."
+ (append
+ (unless (eq bindings +no-bindings+) bindings)
+ (list (make-binding var val))))
+
+(defun occurs-in? (var x bindings)
+ "Does var occur anywhere inside x?"
+ (cond ((eq var x) t)
+ ((and (variable? x) (get-binding x bindings))
+ (occurs-in? var (lookup x bindings) bindings))
+ ((consp x) (or (occurs-in? var (first x) bindings)
+ (occurs-in? var (rest x) bindings)))
+ (t nil)))
+
+(defun subst-bindings (bindings x)
+ "Substitute the value of variables in bindings into x,
+ taking recursively bound variables into account."
+ (cond ((eq bindings +fail+) +fail+)
+ ((eq bindings +no-bindings+) x)
+ ((and (listp x) (eq '?eval (car x)))
+ (subst-bindings-quote bindings x))
+ ((and (variable? x) (get-binding x bindings))
+ (subst-bindings bindings (lookup x bindings)))
+ ((atom x) x)
+ (t (cons (subst-bindings bindings (car x)) ;; s/reuse-cons/cons
+ (subst-bindings bindings (cdr x))))))
+
+(defun unifier (x y)
+ "Return something that unifies with both x and y (or fail)."
+ (subst-bindings (unify x y) x))
+
+(defun variables-in (exp)
+ "Return a list of all the variables in EXP."
+ (unique-find-anywhere-if #'variable? exp))
+
+(defun unique-find-anywhere-if (predicate tree &optional found-so-far)
+ "Return a list of leaves of tree satisfying predicate,
+ with duplicates removed."
+ (if (atom tree)
+ (if (funcall predicate tree)
+ (pushnew tree found-so-far)
+ found-so-far)
+ (unique-find-anywhere-if
+ predicate
+ (first tree)
+ (unique-find-anywhere-if predicate (rest tree)
+ found-so-far))))
+
+(defun find-anywhere-if (predicate tree)
+ "Does predicate apply to any atom in the tree?"
+ (if (atom tree)
+ (funcall predicate tree)
+ (or (find-anywhere-if predicate (first tree))
+ (find-anywhere-if predicate (rest tree)))))
+
+(defun new-variable (var)
+ "Create a new variable. Assumes user never types variables of form ?X.9"
+ (gentemp (format nil "~S." var)))
+; (gentemp "?") )
+;;;
+
+(defun anonymous-var? (x)
+ (eq x '?_))
+
+(defun subst-bindings-quote (bindings x)
+ "Substitute the value of variables in bindings into x,
+ taking recursively bound variables into account."
+ (cond ((eq bindings +fail+) +fail+)
+ ((eq bindings +no-bindings+) x)
+ ((and (variable? x) (get-binding x bindings))
+ (if (variable? (lookup x bindings))
+ (subst-bindings-quote bindings (lookup x bindings))
+ (subst-bindings-quote bindings (list 'quote (lookup x bindings)))
+ )
+ )
+ ((atom x) x)
+ (t (cons (subst-bindings-quote bindings (car x)) ;; s/reuse-cons/cons
+ (subst-bindings-quote bindings (cdr x))))))
+
+(defun eval? (x)
+ (and (consp x) (eq (first x) '?eval)))
+
+(defun unify-eval (x y bindings)
+ (let ((exp (subst-bindings-quote bindings (second x))))
+ (if (variables-in exp)
+ +fail+
+ (unify (eval exp) y bindings))))
+
+
+
+(defun rule-ifs (rule) (fourth rule))
+(defun rule-then (rule) (second rule))
+
+
+(defun equality? (term)
+ (and (consp term) (eql (first term) '?=)))
+
+
+(defun in-fact-list? (expresion)
+ (some #'(lambda(x) (equal x expresion)) *fact-list*))
+
+(defun not-in-fact-list? (expresion)
+ (if (eq (car expresion) 'NOT)
+ (in-fact-list? (second expresion))
+ (in-fact-list? (list 'NOT expresion))))
+
+
+;; add-fact:
+
+(defun add-fact (fact)
+ (setq *fact-list* (cons fact *fact-list*)))
+
+
+(defun variable? (x)
+ "Is x a variable (a symbol starting with ?) except ?eval and ?="
+ (and (not (equal x '?eval)) (not (equal x '?=))
+ (symbolp x) (eql (char (symbol-name x) 0) #\?)))
+
+
+;; EOF
\ No newline at end of file
diff --git a/samples/Component Pascal/Example.cp b/samples/Component Pascal/Example.cp
new file mode 100644
index 00000000..5bace2c4
--- /dev/null
+++ b/samples/Component Pascal/Example.cp
@@ -0,0 +1,130 @@
+MODULE ObxControls;
+(**
+ project = "BlackBox"
+ organization = "www.oberon.ch"
+ contributors = "Oberon microsystems"
+ version = "System/Rsrc/About"
+ copyright = "System/Rsrc/About"
+ license = "Docu/BB-License"
+ changes = ""
+ issues = ""
+
+**)
+
+IMPORT Dialog, Ports, Properties, Views;
+
+CONST beginner = 0; advanced = 1; expert = 2; guru = 3; (* user classes *)
+
+TYPE
+ View = POINTER TO RECORD (Views.View)
+ size: INTEGER (* border size in mm *)
+ END;
+
+VAR
+ data*: RECORD
+ class*: INTEGER; (* current user class *)
+ list*: Dialog.List; (* list of currently available sizes, derived from class *)
+ width*: INTEGER (* width of next view to be opened. Derived from
+ class, or entered through a text entry field *)
+ END;
+
+ predef: ARRAY 6 OF INTEGER; (* table of predefined sizes *)
+
+
+PROCEDURE SetList;
+BEGIN
+ IF data.class = beginner THEN
+ data.list.SetLen(1);
+ data.list.SetItem(0, "default")
+ ELSIF data.class = advanced THEN
+ data.list.SetLen(4);
+ data.list.SetItem(0, "default");
+ data.list.SetItem(1, "small");
+ data.list.SetItem(2, "medium");
+ data.list.SetItem(3, "large");
+ ELSE
+ data.list.SetLen(6);
+ data.list.SetItem(0, "default");
+ data.list.SetItem(1, "small");
+ data.list.SetItem(2, "medium");
+ data.list.SetItem(3, "large");
+ data.list.SetItem(4, "tiny");
+ data.list.SetItem(5, "huge");
+ END
+END SetList;
+
+(* View *)
+
+PROCEDURE (v: View) CopyFromSimpleView (source: Views.View);
+BEGIN
+ v.size := source(View).size
+END CopyFromSimpleView;
+
+PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: INTEGER);
+BEGIN (* fill view with a red square of size v.size *)
+ IF v.size = 0 THEN v.size := predef[0] END; (* lazy initialization of size *)
+ f.DrawRect(0, 0, v.size, v.size, Ports.fill, Ports.red)
+END Restore;
+
+PROCEDURE (v: View) HandlePropMsg (VAR msg: Views.PropMessage);
+BEGIN
+ WITH msg: Properties.SizePref DO
+ IF v.size = 0 THEN v.size := predef[0] END; (* lazy initialization of size *)
+ msg.w := v.size; msg.h := v.size (* tell environment about desired width and height *)
+ ELSE (* ignore other messages *)
+ END
+END HandlePropMsg;
+
+(* notifiers *)
+
+PROCEDURE ClassNotify* (op, from, to: INTEGER);
+BEGIN (* react to change in data.class *)
+ IF op = Dialog.changed THEN
+ IF (to = beginner) OR (to = advanced) & (data.list.index > 3) THEN
+ (* if class is reduced, make sure that selection contains legal elements *)
+ data.list.index := 0; data.width := predef[0]; (* modify interactor *)
+ Dialog.Update(data) (* redraw controls where necessary *)
+ END;
+ SetList;
+ Dialog.UpdateList(data.list) (* reconstruct list box contents *)
+ END
+END ClassNotify;
+
+PROCEDURE ListNotify* (op, from, to: INTEGER);
+BEGIN (* reacto to change in data.list (index to was selected) *)
+ IF op = Dialog.changed THEN
+ data.width := predef[to]; (* modify interactor *)
+ Dialog.Update(data) (* redraw controls where necessary *)
+ END
+END ListNotify;
+
+(* guards *)
+
+PROCEDURE ListGuard* (VAR par: Dialog.Par);
+BEGIN (* disable list box for a beginner *)
+ par.disabled := data.class = beginner
+END ListGuard;
+
+PROCEDURE WidthGuard* (VAR par: Dialog.Par);
+BEGIN (* make text entry field read-only if user is not guru *)
+ par.readOnly := data.class # guru
+END WidthGuard;
+
+(* commands *)
+
+PROCEDURE Open*;
+ VAR v: View;
+BEGIN
+ NEW(v); (* create and initialize a new view *)
+ v.size := data.width * Ports.mm; (* define view's size in function of class *)
+ Views.OpenAux(v, "Example") (* open the view in a window *)
+END Open;
+
+BEGIN (* initialization of global variables *)
+ predef[0] := 40; predef[1] := 30; predef[2] := 50; (* predefined sizes *)
+ predef[3] := 70; predef[4] := 20; predef[5] := 100;
+ data.class := beginner; (* default values *)
+ data.list.index := 0;
+ data.width := predef[0];
+ SetList
+END ObxControls.
diff --git a/samples/Component Pascal/Example2.cps b/samples/Component Pascal/Example2.cps
new file mode 100644
index 00000000..4c4b3930
--- /dev/null
+++ b/samples/Component Pascal/Example2.cps
@@ -0,0 +1,71 @@
+MODULE ObxFact;
+(**
+ project = "BlackBox"
+ organization = "www.oberon.ch"
+ contributors = "Oberon microsystems"
+ version = "System/Rsrc/About"
+ copyright = "System/Rsrc/About"
+ license = "Docu/BB-License"
+ changes = ""
+ issues = ""
+
+**)
+
+IMPORT
+ Stores, Models, TextModels, TextControllers, Integers;
+
+PROCEDURE Read(r: TextModels.Reader; VAR x: Integers.Integer);
+ VAR i, len, beg: INTEGER; ch: CHAR; buf: POINTER TO ARRAY OF CHAR;
+BEGIN
+ r.ReadChar(ch);
+ WHILE ~r.eot & (ch <= " ") DO r.ReadChar(ch) END;
+ ASSERT(~r.eot & (((ch >= "0") & (ch <= "9")) OR (ch = "-")));
+ beg := r.Pos() - 1; len := 0;
+ REPEAT INC(len); r.ReadChar(ch) UNTIL r.eot OR (ch < "0") OR (ch > "9");
+ NEW(buf, len + 1);
+ i := 0; r.SetPos(beg);
+ REPEAT r.ReadChar(buf[i]); INC(i) UNTIL i = len;
+ buf[i] := 0X;
+ Integers.ConvertFromString(buf^, x)
+END Read;
+
+PROCEDURE Write(w: TextModels.Writer; x: Integers.Integer);
+ VAR i: INTEGER;
+BEGIN
+ IF Integers.Sign(x) < 0 THEN w.WriteChar("-") END;
+ i := Integers.Digits10Of(x);
+ IF i # 0 THEN
+ REPEAT DEC(i); w.WriteChar(Integers.ThisDigit10(x, i)) UNTIL i = 0
+ ELSE w.WriteChar("0")
+ END
+END Write;
+
+PROCEDURE Compute*;
+ VAR beg, end, i, n: INTEGER; ch: CHAR;
+ s: Stores.Operation;
+ r: TextModels.Reader; w: TextModels.Writer; attr: TextModels.Attributes;
+ c: TextControllers.Controller;
+ x: Integers.Integer;
+BEGIN
+ c := TextControllers.Focus();
+ IF (c # NIL) & c.HasSelection() THEN
+ c.GetSelection(beg, end);
+ r := c.text.NewReader(NIL); r.SetPos(beg); r.ReadChar(ch);
+ WHILE ~r.eot & (beg < end) & (ch <= " ") DO r.ReadChar(ch); INC(beg) END;
+ IF ~r.eot & (beg < end) THEN
+ r.ReadPrev; Read(r, x);
+ end := r.Pos(); r.ReadPrev; attr :=r.attr;
+ IF (Integers.Sign(x) > 0) & (Integers.Compare(x, Integers.Long(MAX(LONGINT))) <= 0) THEN
+ n := SHORT(Integers.Short(x)); i := 2; x := Integers.Long(1);
+ WHILE i <= n DO x := Integers.Product(x, Integers.Long(i)); INC(i) END;
+ Models.BeginScript(c.text, "computation", s);
+ c.text.Delete(beg, end);
+ w := c.text.NewWriter(NIL); w.SetPos(beg); w.SetAttr(attr);
+ Write(w, x);
+ Models.EndScript(c.text, s)
+ END
+ END
+ END
+END Compute;
+
+END ObxFact.
\ No newline at end of file
diff --git a/samples/Crystal/const_spec.cr b/samples/Crystal/const_spec.cr
new file mode 100644
index 00000000..3ab20f14
--- /dev/null
+++ b/samples/Crystal/const_spec.cr
@@ -0,0 +1,169 @@
+#!/usr/bin/env bin/crystal --run
+require "../../spec_helper"
+
+describe "Codegen: const" do
+ it "define a constant" do
+ run("A = 1; A").to_i.should eq(1)
+ end
+
+ it "support nested constant" do
+ run("class B; A = 1; end; B::A").to_i.should eq(1)
+ end
+
+ it "support constant inside a def" do
+ run("
+ class Foo
+ A = 1
+
+ def foo
+ A
+ end
+ end
+
+ Foo.new.foo
+ ").to_i.should eq(1)
+ end
+
+ it "finds nearest constant first" do
+ run("
+ A = 1
+
+ class Foo
+ A = 2.5_f32
+
+ def foo
+ A
+ end
+ end
+
+ Foo.new.foo
+ ").to_f32.should eq(2.5)
+ end
+
+ it "allows constants with same name" do
+ run("
+ A = 1
+
+ class Foo
+ A = 2.5_f32
+
+ def foo
+ A
+ end
+ end
+
+ A
+ Foo.new.foo
+ ").to_f32.should eq(2.5)
+ end
+
+ it "constants with expression" do
+ run("
+ A = 1 + 1
+ A
+ ").to_i.should eq(2)
+ end
+
+ it "finds global constant" do
+ run("
+ A = 1
+
+ class Foo
+ def foo
+ A
+ end
+ end
+
+ Foo.new.foo
+ ").to_i.should eq(1)
+ end
+
+ it "define a constant in lib" do
+ run("lib Foo; A = 1; end; Foo::A").to_i.should eq(1)
+ end
+
+ it "invokes block in const" do
+ run("require \"prelude\"; A = [\"1\"].map { |x| x.to_i }; A[0]").to_i.should eq(1)
+ end
+
+ it "declare constants in right order" do
+ run("A = 1 + 1; B = true ? A : 0; B").to_i.should eq(2)
+ end
+
+ it "uses correct types lookup" do
+ run("
+ module A
+ class B
+ def foo
+ 1
+ end
+ end
+
+ C = B.new;
+ end
+
+ def foo
+ A::C.foo
+ end
+
+ foo
+ ").to_i.should eq(1)
+ end
+
+ it "codegens variable assignment in const" do
+ run("
+ class Foo
+ def initialize(@x)
+ end
+
+ def x
+ @x
+ end
+ end
+
+ A = begin
+ f = Foo.new(1)
+ f
+ end
+
+ def foo
+ A.x
+ end
+
+ foo
+ ").to_i.should eq(1)
+ end
+
+ it "declaring var" do
+ run("
+ BAR = begin
+ a = 1
+ while 1 == 2
+ b = 2
+ end
+ a
+ end
+ class Foo
+ def compile
+ BAR
+ end
+ end
+
+ Foo.new.compile
+ ").to_i.should eq(1)
+ end
+
+ it "initialize const that might raise an exception" do
+ run("
+ require \"prelude\"
+ CONST = (raise \"OH NO\" if 1 == 2)
+
+ def doit
+ CONST
+ rescue
+ end
+
+ doit.nil?
+ ").to_b.should be_true
+ end
+end
diff --git a/samples/Crystal/declare_var_spec.cr b/samples/Crystal/declare_var_spec.cr
new file mode 100644
index 00000000..c6a44127
--- /dev/null
+++ b/samples/Crystal/declare_var_spec.cr
@@ -0,0 +1,79 @@
+#!/usr/bin/env bin/crystal --run
+require "../../spec_helper"
+
+describe "Type inference: declare var" do
+ it "types declare var" do
+ assert_type("a :: Int32") { int32 }
+ end
+
+ it "types declare var and reads it" do
+ assert_type("a :: Int32; a") { int32 }
+ end
+
+ it "types declare var and changes its type" do
+ assert_type("a :: Int32; while 1 == 2; a = 'a'; end; a") { union_of(int32, char) }
+ end
+
+ it "declares instance var which appears in initialize" do
+ result = assert_type("
+ class Foo
+ @x :: Int32
+ end
+
+ Foo.new") { types["Foo"] }
+
+ mod = result.program
+
+ foo = mod.types["Foo"] as NonGenericClassType
+ foo.instance_vars["@x"].type.should eq(mod.int32)
+ end
+
+ it "declares instance var of generic class" do
+ result = assert_type("
+ class Foo(T)
+ @x :: T
+ end
+
+ Foo(Int32).new") do
+ foo = types["Foo"] as GenericClassType
+ foo_i32 = foo.instantiate([int32] of Type | ASTNode)
+ foo_i32.lookup_instance_var("@x").type.should eq(int32)
+ foo_i32
+ end
+ end
+
+ it "declares instance var of generic class after reopen" do
+ result = assert_type("
+ class Foo(T)
+ end
+
+ f = Foo(Int32).new
+
+ class Foo(T)
+ @x :: T
+ end
+
+ f") do
+ foo = types["Foo"] as GenericClassType
+ foo_i32 = foo.instantiate([int32] of Type | ASTNode)
+ foo_i32.lookup_instance_var("@x").type.should eq(int32)
+ foo_i32
+ end
+ end
+
+ it "declares an instance variable in initialize" do
+ assert_type("
+ class Foo
+ def initialize
+ @x :: Int32
+ end
+
+ def x
+ @x
+ end
+ end
+
+ Foo.new.x
+ ") { int32 }
+ end
+end
diff --git a/samples/Crystal/transformer.cr b/samples/Crystal/transformer.cr
new file mode 100644
index 00000000..8bb78fbe
--- /dev/null
+++ b/samples/Crystal/transformer.cr
@@ -0,0 +1,515 @@
+module Crystal
+ class ASTNode
+ def transform(transformer)
+ transformer.before_transform self
+ node = transformer.transform self
+ transformer.after_transform self
+ node
+ end
+ end
+
+ class Transformer
+ def before_transform(node)
+ end
+
+ def after_transform(node)
+ end
+
+ def transform(node : Expressions)
+ exps = [] of ASTNode
+ node.expressions.each do |exp|
+ new_exp = exp.transform(self)
+ if new_exp
+ if new_exp.is_a?(Expressions)
+ exps.concat new_exp.expressions
+ else
+ exps << new_exp
+ end
+ end
+ end
+
+ if exps.length == 1
+ exps[0]
+ else
+ node.expressions = exps
+ node
+ end
+ end
+
+ def transform(node : Call)
+ if node_obj = node.obj
+ node.obj = node_obj.transform(self)
+ end
+ transform_many node.args
+
+ if node_block = node.block
+ node.block = node_block.transform(self)
+ end
+
+ if node_block_arg = node.block_arg
+ node.block_arg = node_block_arg.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : And)
+ node.left = node.left.transform(self)
+ node.right = node.right.transform(self)
+ node
+ end
+
+ def transform(node : Or)
+ node.left = node.left.transform(self)
+ node.right = node.right.transform(self)
+ node
+ end
+
+ def transform(node : StringInterpolation)
+ transform_many node.expressions
+ node
+ end
+
+ def transform(node : ArrayLiteral)
+ transform_many node.elements
+
+ if node_of = node.of
+ node.of = node_of.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : HashLiteral)
+ transform_many node.keys
+ transform_many node.values
+
+ if of_key = node.of_key
+ node.of_key = of_key.transform(self)
+ end
+
+ if of_value = node.of_value
+ node.of_value = of_value.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : If)
+ node.cond = node.cond.transform(self)
+ node.then = node.then.transform(self)
+ node.else = node.else.transform(self)
+ node
+ end
+
+ def transform(node : Unless)
+ node.cond = node.cond.transform(self)
+ node.then = node.then.transform(self)
+ node.else = node.else.transform(self)
+ node
+ end
+
+ def transform(node : IfDef)
+ node.cond = node.cond.transform(self)
+ node.then = node.then.transform(self)
+ node.else = node.else.transform(self)
+ node
+ end
+
+ def transform(node : MultiAssign)
+ transform_many node.targets
+ transform_many node.values
+ node
+ end
+
+ def transform(node : SimpleOr)
+ node.left = node.left.transform(self)
+ node.right = node.right.transform(self)
+ node
+ end
+
+ def transform(node : Def)
+ transform_many node.args
+ node.body = node.body.transform(self)
+
+ if receiver = node.receiver
+ node.receiver = receiver.transform(self)
+ end
+
+ if block_arg = node.block_arg
+ node.block_arg = block_arg.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : Macro)
+ transform_many node.args
+ node.body = node.body.transform(self)
+
+ if receiver = node.receiver
+ node.receiver = receiver.transform(self)
+ end
+
+ if block_arg = node.block_arg
+ node.block_arg = block_arg.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : PointerOf)
+ node.exp = node.exp.transform(self)
+ node
+ end
+
+ def transform(node : SizeOf)
+ node.exp = node.exp.transform(self)
+ node
+ end
+
+ def transform(node : InstanceSizeOf)
+ node.exp = node.exp.transform(self)
+ node
+ end
+
+ def transform(node : IsA)
+ node.obj = node.obj.transform(self)
+ node.const = node.const.transform(self)
+ node
+ end
+
+ def transform(node : RespondsTo)
+ node.obj = node.obj.transform(self)
+ node
+ end
+
+ def transform(node : Case)
+ node.cond = node.cond.transform(self)
+ transform_many node.whens
+
+ if node_else = node.else
+ node.else = node_else.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : When)
+ transform_many node.conds
+ node.body = node.body.transform(self)
+ node
+ end
+
+ def transform(node : ImplicitObj)
+ node
+ end
+
+ def transform(node : ClassDef)
+ node.body = node.body.transform(self)
+
+ if superclass = node.superclass
+ node.superclass = superclass.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : ModuleDef)
+ node.body = node.body.transform(self)
+ node
+ end
+
+ def transform(node : While)
+ node.cond = node.cond.transform(self)
+ node.body = node.body.transform(self)
+ node
+ end
+
+ def transform(node : Generic)
+ node.name = node.name.transform(self)
+ transform_many node.type_vars
+ node
+ end
+
+ def transform(node : ExceptionHandler)
+ node.body = node.body.transform(self)
+ transform_many node.rescues
+
+ if node_ensure = node.ensure
+ node.ensure = node_ensure.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : Rescue)
+ node.body = node.body.transform(self)
+ transform_many node.types
+ node
+ end
+
+ def transform(node : Union)
+ transform_many node.types
+ node
+ end
+
+ def transform(node : Hierarchy)
+ node.name = node.name.transform(self)
+ node
+ end
+
+ def transform(node : Metaclass)
+ node.name = node.name.transform(self)
+ node
+ end
+
+ def transform(node : Arg)
+ if default_value = node.default_value
+ node.default_value = default_value.transform(self)
+ end
+
+ if restriction = node.restriction
+ node.restriction = restriction.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : BlockArg)
+ node.fun = node.fun.transform(self)
+ node
+ end
+
+ def transform(node : Fun)
+ transform_many node.inputs
+
+ if output = node.output
+ node.output = output.transform(self)
+ end
+
+ node
+ end
+
+ def transform(node : Block)
+ node.args.map! { |exp| exp.transform(self) as Var }
+ node.body = node.body.transform(self)
+ node
+ end
+
+ def transform(node : FunLiteral)
+ node.def.body = node.def.body.transform(self)
+ node
+ end
+
+ def transform(node : FunPointer)
+ if obj = node.obj
+ node.obj = obj.transform(self)
+ end
+ node
+ end
+
+ def transform(node : Return)
+ transform_many node.exps
+ node
+ end
+
+ def transform(node : Break)
+ transform_many node.exps
+ node
+ end
+
+ def transform(node : Next)
+ transform_many node.exps
+ node
+ end
+
+ def transform(node : Yield)
+ if scope = node.scope
+ node.scope = scope.transform(self)
+ end
+ transform_many node.exps
+ node
+ end
+
+ def transform(node : Include)
+ node.name = node.name.transform(self)
+ node
+ end
+
+ def transform(node : Extend)
+ node.name = node.name.transform(self)
+ node
+ end
+
+ def transform(node : RangeLiteral)
+ node.from = node.from.transform(self)
+ node.to = node.to.transform(self)
+ node
+ end
+
+ def transform(node : Assign)
+ node.target = node.target.transform(self)
+ node.value = node.value.transform(self)
+ node
+ end
+
+ def transform(node : Nop)
+ node
+ end
+
+ def transform(node : NilLiteral)
+ node
+ end
+
+ def transform(node : BoolLiteral)
+ node
+ end
+
+ def transform(node : NumberLiteral)
+ node
+ end
+
+ def transform(node : CharLiteral)
+ node
+ end
+
+ def transform(node : StringLiteral)
+ node
+ end
+
+ def transform(node : SymbolLiteral)
+ node
+ end
+
+ def transform(node : RegexLiteral)
+ node
+ end
+
+ def transform(node : Var)
+ node
+ end
+
+ def transform(node : MetaVar)
+ node
+ end
+
+ def transform(node : InstanceVar)
+ node
+ end
+
+ def transform(node : ClassVar)
+ node
+ end
+
+ def transform(node : Global)
+ node
+ end
+
+ def transform(node : Require)
+ node
+ end
+
+ def transform(node : Path)
+ node
+ end
+
+ def transform(node : Self)
+ node
+ end
+
+ def transform(node : LibDef)
+ node.body = node.body.transform(self)
+ node
+ end
+
+ def transform(node : FunDef)
+ if body = node.body
+ node.body = body.transform(self)
+ end
+ node
+ end
+
+ def transform(node : TypeDef)
+ node
+ end
+
+ def transform(node : StructDef)
+ node
+ end
+
+ def transform(node : UnionDef)
+ node
+ end
+
+ def transform(node : EnumDef)
+ node
+ end
+
+ def transform(node : ExternalVar)
+ node
+ end
+
+ def transform(node : IndirectRead)
+ node.obj = node.obj.transform(self)
+ node
+ end
+
+ def transform(node : IndirectWrite)
+ node.obj = node.obj.transform(self)
+ node.value = node.value.transform(self)
+ node
+ end
+
+ def transform(node : TypeOf)
+ transform_many node.expressions
+ node
+ end
+
+ def transform(node : Primitive)
+ node
+ end
+
+ def transform(node : Not)
+ node
+ end
+
+ def transform(node : TypeFilteredNode)
+ node
+ end
+
+ def transform(node : TupleLiteral)
+ transform_many node.exps
+ node
+ end
+
+ def transform(node : Cast)
+ node.obj = node.obj.transform(self)
+ node.to = node.to.transform(self)
+ node
+ end
+
+ def transform(node : DeclareVar)
+ node.var = node.var.transform(self)
+ node.declared_type = node.declared_type.transform(self)
+ node
+ end
+
+ def transform(node : Alias)
+ node.value = node.value.transform(self)
+ node
+ end
+
+ def transform(node : TupleIndexer)
+ node
+ end
+
+ def transform(node : Attribute)
+ node
+ end
+
+ def transform_many(exps)
+ exps.map! { |exp| exp.transform(self) } if exps
+ end
+ end
+end
diff --git a/samples/Dogescript/example.djs b/samples/Dogescript/example.djs
new file mode 100644
index 00000000..6903cc5a
--- /dev/null
+++ b/samples/Dogescript/example.djs
@@ -0,0 +1,16 @@
+quiet
+ wow
+ such language
+ very syntax
+ github recognized wow
+loud
+
+such language much friendly
+ rly friendly is true
+ plz console.loge with 'such friend, very inclusive'
+ but
+ plz console.loge with 'no love for doge'
+ wow
+wow
+
+module.exports is language
\ No newline at end of file
diff --git a/samples/E/Extends.E b/samples/E/Extends.E
new file mode 100644
index 00000000..002a9105
--- /dev/null
+++ b/samples/E/Extends.E
@@ -0,0 +1,31 @@
+# from
+# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/Objects_and_Functions
+def makeVehicle(self) {
+ def vehicle {
+ to milesTillEmpty() {
+ return self.milesPerGallon() * self.getFuelRemaining()
+ }
+ }
+ return vehicle
+}
+
+def makeCar() {
+ var fuelRemaining := 20
+ def car extends makeVehicle(car) {
+ to milesPerGallon() {return 19}
+ to getFuelRemaining() {return fuelRemaining}
+ }
+ return car
+}
+
+def makeJet() {
+ var fuelRemaining := 2000
+ def jet extends makeVehicle(jet) {
+ to milesPerGallon() {return 2}
+ to getFuelRemaining() {return fuelRemaining}
+ }
+ return jet
+}
+
+def car := makeCar()
+println(`The car can go ${car.milesTillEmpty()} miles.`)
diff --git a/samples/E/Functions.E b/samples/E/Functions.E
new file mode 100644
index 00000000..086e4f7a
--- /dev/null
+++ b/samples/E/Functions.E
@@ -0,0 +1,21 @@
+# from
+# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/Objects_and_Functions
+def makeCar(var name) {
+ var x := 0
+ var y := 0
+ def car {
+ to moveTo(newX,newY) {
+ x := newX
+ y := newY
+ }
+ to getX() {return x}
+ to getY() {return y}
+ to setName(newName) {name := newName}
+ to getName() {return name}
+ }
+ return car
+}
+# Now use the makeCar function to make a car, which we will move and print
+def sportsCar := makeCar("Ferrari")
+sportsCar.moveTo(10,20)
+println(`The car ${sportsCar.getName()} is at X location ${sportsCar.getX()}`)
diff --git a/samples/E/Guards.E b/samples/E/Guards.E
new file mode 100644
index 00000000..e3e841ae
--- /dev/null
+++ b/samples/E/Guards.E
@@ -0,0 +1,69 @@
+# from
+# http://wiki.erights.org/wiki/Walnut/Advanced_Topics/Build_your_Own_Guards
+def makeVOCPair(brandName :String) :near {
+
+ var myTempContents := def none {}
+
+ def brand {
+ to __printOn(out :TextWriter) :void {
+ out.print(brandName)
+ }
+ }
+
+ def ProveAuth {
+ to __printOn(out :TextWriter) :void {
+ out.print(`<$brandName prover>`)
+ }
+ to getBrand() :near { return brand }
+ to coerce(specimen, optEjector) :near {
+ def sealedBox {
+ to getBrand() :near { return brand }
+ to offerContent() :void {
+ myTempContents := specimen
+ }
+ }
+ return sealedBox
+ }
+ }
+ def CheckAuth {
+ to __printOn(out :TextWriter) :void {
+ out.print(`<$brandName checker template>`)
+ }
+ to getBrand() :near { return brand }
+ match [`get`, authList :any[]] {
+ def checker {
+ to __printOn(out :TextWriter) :void {
+ out.print(`<$brandName checker>`)
+ }
+ to getBrand() :near { return brand }
+ to coerce(specimenBox, optEjector) :any {
+ myTempContents := null
+ if (specimenBox.__respondsTo("offerContent", 0)) {
+ # XXX Using __respondsTo/2 here is a kludge
+ specimenBox.offerContent()
+ } else {
+ myTempContents := specimenBox
+ }
+ for auth in authList {
+ if (auth == myTempContents) {
+ return auth
+ }
+ }
+ myTempContents := none
+ throw.eject(optEjector,
+ `Unmatched $brandName authorization`)
+ }
+ }
+ }
+ match [`__respondsTo`, [`get`, _]] {
+ true
+ }
+ match [`__respondsTo`, [_, _]] {
+ false
+ }
+ match [`__getAllegedType`, []] {
+ null.__getAllegedType()
+ }
+ }
+ return [ProveAuth, CheckAuth]
+}
diff --git a/samples/E/IO.E b/samples/E/IO.E
new file mode 100644
index 00000000..e96e41ad
--- /dev/null
+++ b/samples/E/IO.E
@@ -0,0 +1,14 @@
+# E sample from
+# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/InputOutput
+#File objects for hardwired files:
+def file1 :=
+def file2 :=
+
+#Using a variable for a file name:
+def filePath := "c:\\docs\\myFile.txt"
+def file3 := [filePath]
+
+#Using a single character to specify a Windows drive
+def file4 :=
+def file5 :=
+def file6 :=
diff --git a/samples/E/Promises.E b/samples/E/Promises.E
new file mode 100644
index 00000000..ae03c6ec
--- /dev/null
+++ b/samples/E/Promises.E
@@ -0,0 +1,9 @@
+# E snippet from
+# http://wiki.erights.org/wiki/Walnut/Distributed_Computing/Promises
+when (tempVow) -> {
+ #...use tempVow
+} catch prob {
+ #.... report problem
+} finally {
+ #....log event
+}
diff --git a/samples/E/minChat.E b/samples/E/minChat.E
new file mode 100644
index 00000000..b422a71e
--- /dev/null
+++ b/samples/E/minChat.E
@@ -0,0 +1,18 @@
+# from
+# http://wiki.erights.org/wiki/Walnut/Secure_Distributed_Computing/Auditing_minChat
+pragma.syntax("0.9")
+to send(message) {
+ when (friend<-receive(message)) -> {
+ chatUI.showMessage("self", message)
+ } catch prob {chatUI.showMessage("system", "connection lost")}
+}
+to receive(message) {chatUI.showMessage("friend", message)}
+to receiveFriend(friendRcvr) {
+ bind friend := friendRcvr
+ chatUI.showMessage("system", "friend has arrived")
+}
+to save(file) {file.setText(makeURIFromObject(chatController))}
+to load(file) {
+ bind friend := getObjectFromURI(file.getText())
+ friend <- receiveFriend(chatController)
+}
diff --git a/samples/Eagle/Eagle.brd b/samples/Eagle/Eagle.brd
new file mode 100644
index 00000000..27f3cbdd
--- /dev/null
+++ b/samples/Eagle/Eagle.brd
@@ -0,0 +1,1396 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<b>Resistors, Capacitors, Inductors</b><p>
+Based on the previous libraries:
+<ul>
+<li>r.lbr
+<li>cap.lbr
+<li>cap-fe.lbr
+<li>captant.lbr
+<li>polcap.lbr
+<li>ipc-smd.lbr
+</ul>
+All SMD packages are defined according to the IPC specifications and CECC<p>
+<author>Created by librarian@cadsoft.de</author><p>
+<p>
+for Electrolyt Capacitors see also :<p>
+www.bccomponents.com <p>
+www.panasonic.com<p>
+www.kemet.com<p>
+http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b>
+<p>
+for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p>
+
+<table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0>
+<tr valign="top">
+
+<! <td width="10"> </td>
+<td width="90%">
+
+<b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b>
+<P>
+<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI TECH</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT>
+ </B>
+ </TD><TD> </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 >
+ 3005P<BR>
+ 3006P<BR>
+ 3006W<BR>
+ 3006Y<BR>
+ 3009P<BR>
+ 3009W<BR>
+ 3009Y<BR>
+ 3057J<BR>
+ 3057L<BR>
+ 3057P<BR>
+ 3057Y<BR>
+ 3059J<BR>
+ 3059L<BR>
+ 3059P<BR>
+ 3059Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 89P<BR>
+ 89W<BR>
+ 89X<BR>
+ 89PH<BR>
+ 76P<BR>
+ 89XH<BR>
+ 78SLT<BR>
+ 78L ALT<BR>
+ 56P ALT<BR>
+ 78P ALT<BR>
+ T8S<BR>
+ 78L<BR>
+ 56P<BR>
+ 78P<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ T18/784<BR>
+ 783<BR>
+ 781<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 2199<BR>
+ 1697/1897<BR>
+ 1680/1880<BR>
+ 2187<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 8035EKP/CT20/RJ-20P<BR>
+ -<BR>
+ RJ-20X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 1211L<BR>
+ 8012EKQ ALT<BR>
+ 8012EKR ALT<BR>
+ 1211P<BR>
+ 8012EKJ<BR>
+ 8012EKL<BR>
+ 8012EKQ<BR>
+ 8012EKR<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 2101P<BR>
+ 2101W<BR>
+ 2101Y<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 2102L<BR>
+ 2102S<BR>
+ 2102Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ EVMCOG<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 43P<BR>
+ 43W<BR>
+ 43Y<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 40L<BR>
+ 40P<BR>
+ 40Y<BR>
+ 70Y-T602<BR>
+ 70L<BR>
+ 70P<BR>
+ 70Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ RT/RTR12<BR>
+ RT/RTR12<BR>
+ RT/RTR12<BR>
+ -<BR>
+ RJ/RJR12<BR>
+ RJ/RJR12<BR>
+ RJ/RJR12<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3250L<BR>
+ 3250P<BR>
+ 3250W<BR>
+ 3250X<BR>
+ 3252P<BR>
+ 3252W<BR>
+ 3252X<BR>
+ 3260P<BR>
+ 3260W<BR>
+ 3260X<BR>
+ 3262P<BR>
+ 3262W<BR>
+ 3262X<BR>
+ 3266P<BR>
+ 3266W<BR>
+ 3266X<BR>
+ 3290H<BR>
+ 3290P<BR>
+ 3290W<BR>
+ 3292P<BR>
+ 3292W<BR>
+ 3292X<BR>
+ 3296P<BR>
+ 3296W<BR>
+ 3296X<BR>
+ 3296Y<BR>
+ 3296Z<BR>
+ 3299P<BR>
+ 3299W<BR>
+ 3299X<BR>
+ 3299Y<BR>
+ 3299Z<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66X ALT<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66X ALT<BR>
+ -<BR>
+ 64W ALT<BR>
+ -<BR>
+ 64P ALT<BR>
+ 64W ALT<BR>
+ 64X ALT<BR>
+ 64P<BR>
+ 64W<BR>
+ 64X<BR>
+ 66X ALT<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66P<BR>
+ 66W<BR>
+ 66X<BR>
+ 67P<BR>
+ 67W<BR>
+ 67X<BR>
+ 67Y<BR>
+ 67Z<BR>
+ 68P<BR>
+ 68W<BR>
+ 68X<BR>
+ 67Y ALT<BR>
+ 67Z ALT<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 5050<BR>
+ 5091<BR>
+ 5080<BR>
+ 5087<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ T63YB<BR>
+ T63XB<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 5887<BR>
+ 5891<BR>
+ 5880<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ T93Z<BR>
+ T93YA<BR>
+ T93XA<BR>
+ T93YB<BR>
+ T93XB<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 8026EKP<BR>
+ 8026EKW<BR>
+ 8026EKM<BR>
+ 8026EKP<BR>
+ 8026EKB<BR>
+ 8026EKM<BR>
+ 1309X<BR>
+ 1309P<BR>
+ 1309W<BR>
+ 8024EKP<BR>
+ 8024EKW<BR>
+ 8024EKN<BR>
+ RJ-9P/CT9P<BR>
+ RJ-9W<BR>
+ RJ-9X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3103P<BR>
+ 3103Y<BR>
+ 3103Z<BR>
+ 3103P<BR>
+ 3103Y<BR>
+ 3103Z<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3105P/3106P<BR>
+ 3105W/3106W<BR>
+ 3105X/3106X<BR>
+ 3105Y/3106Y<BR>
+ 3105Z/3105Z<BR>
+ 3102P<BR>
+ 3102W<BR>
+ 3102X<BR>
+ 3102Y<BR>
+ 3102Z<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMCBG<BR>
+ EVMCCG<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 55-1-X<BR>
+ 55-4-X<BR>
+ 55-3-X<BR>
+ 55-2-X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 50-2-X<BR>
+ 50-4-X<BR>
+ 50-3-X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 64P<BR>
+ 64W<BR>
+ 64X<BR>
+ 64Y<BR>
+ 64Z<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RJ/RJR22<BR>
+ RJ/RJR22<BR>
+ RJ/RJR22<BR>
+ RT/RTR26<BR>
+ RT/RTR26<BR>
+ RT/RTR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RT/RTR24<BR>
+ RT/RTR24<BR>
+ RT/RTR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3323P<BR>
+ 3323S<BR>
+ 3323W<BR>
+ 3329H<BR>
+ 3329P<BR>
+ 3329W<BR>
+ 3339H<BR>
+ 3339P<BR>
+ 3339W<BR>
+ 3352E<BR>
+ 3352H<BR>
+ 3352K<BR>
+ 3352P<BR>
+ 3352T<BR>
+ 3352V<BR>
+ 3352W<BR>
+ 3362H<BR>
+ 3362M<BR>
+ 3362P<BR>
+ 3362R<BR>
+ 3362S<BR>
+ 3362U<BR>
+ 3362W<BR>
+ 3362X<BR>
+ 3386B<BR>
+ 3386C<BR>
+ 3386F<BR>
+ 3386H<BR>
+ 3386K<BR>
+ 3386M<BR>
+ 3386P<BR>
+ 3386S<BR>
+ 3386W<BR>
+ 3386X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 25P<BR>
+ 25S<BR>
+ 25RX<BR>
+ 82P<BR>
+ 82M<BR>
+ 82PA<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 91E<BR>
+ 91X<BR>
+ 91T<BR>
+ 91B<BR>
+ 91A<BR>
+ 91V<BR>
+ 91W<BR>
+ 25W<BR>
+ 25V<BR>
+ 25P<BR>
+ -<BR>
+ 25S<BR>
+ 25U<BR>
+ 25RX<BR>
+ 25X<BR>
+ 72XW<BR>
+ 72XL<BR>
+ 72PM<BR>
+ 72RX<BR>
+ -<BR>
+ 72PX<BR>
+ 72P<BR>
+ 72RXW<BR>
+ 72RXL<BR>
+ 72X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ T7YB<BR>
+ T7YA<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ TXD<BR>
+ TYA<BR>
+ TYP<BR>
+ -<BR>
+ TYD<BR>
+ TX<BR>
+ -<BR>
+ 150SX<BR>
+ 100SX<BR>
+ 102T<BR>
+ 101S<BR>
+ 190T<BR>
+ 150TX<BR>
+ 101<BR>
+ -<BR>
+ -<BR>
+ 101SX<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ET6P<BR>
+ ET6S<BR>
+ ET6X<BR>
+ RJ-6W/8014EMW<BR>
+ RJ-6P/8014EMP<BR>
+ RJ-6X/8014EMX<BR>
+ TM7W<BR>
+ TM7P<BR>
+ TM7X<BR>
+ -<BR>
+ 8017SMS<BR>
+ -<BR>
+ 8017SMB<BR>
+ 8017SMA<BR>
+ -<BR>
+ -<BR>
+ CT-6W<BR>
+ CT-6H<BR>
+ CT-6P<BR>
+ CT-6R<BR>
+ -<BR>
+ CT-6V<BR>
+ CT-6X<BR>
+ -<BR>
+ -<BR>
+ 8038EKV<BR>
+ -<BR>
+ 8038EKX<BR>
+ -<BR>
+ -<BR>
+ 8038EKP<BR>
+ 8038EKZ<BR>
+ 8038EKW<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3321H<BR>
+ 3321P<BR>
+ 3321N<BR>
+ 1102H<BR>
+ 1102P<BR>
+ 1102T<BR>
+ RVA0911V304A<BR>
+ -<BR>
+ RVA0911H413A<BR>
+ RVG0707V100A<BR>
+ RVA0607V(H)306A<BR>
+ RVA1214H213A<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3104B<BR>
+ 3104C<BR>
+ 3104F<BR>
+ 3104H<BR>
+ -<BR>
+ 3104M<BR>
+ 3104P<BR>
+ 3104S<BR>
+ 3104W<BR>
+ 3104X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ EVMQ0G<BR>
+ EVMQIG<BR>
+ EVMQ3G<BR>
+ EVMS0G<BR>
+ EVMQ0G<BR>
+ EVMG0G<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMK4GA00B<BR>
+ EVM30GA00B<BR>
+ EVMK0GA00B<BR>
+ EVM38GA00B<BR>
+ EVMB6<BR>
+ EVLQ0<BR>
+ -<BR>
+ EVMMSG<BR>
+ EVMMBG<BR>
+ EVMMAG<BR>
+ -<BR>
+ -<BR>
+ EVMMCS<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMM1<BR>
+ -<BR>
+ -<BR>
+ EVMM0<BR>
+ -<BR>
+ -<BR>
+ EVMM3<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ 62-3-1<BR>
+ 62-1-2<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 67R<BR>
+ -<BR>
+ 67P<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 67X<BR>
+ 63V<BR>
+ 63S<BR>
+ 63M<BR>
+ -<BR>
+ -<BR>
+ 63H<BR>
+ 63P<BR>
+ -<BR>
+ -<BR>
+ 63X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ RJ/RJR50<BR>
+ RJ/RJR50<BR>
+ RJ/RJR50<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+</TABLE>
+<P> <P>
+<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3>
+ <TR>
+ <TD COLSPAN=7>
+ <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT>
+ <P>
+ <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3224G<BR>
+ 3224J<BR>
+ 3224W<BR>
+ 3269P<BR>
+ 3269W<BR>
+ 3269X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 44G<BR>
+ 44J<BR>
+ 44W<BR>
+ 84P<BR>
+ 84W<BR>
+ 84X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST63Z<BR>
+ ST63Y<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST5P<BR>
+ ST5W<BR>
+ ST5X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=7>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=7>
+ <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3314G<BR>
+ 3314J<BR>
+ 3364A/B<BR>
+ 3364C/D<BR>
+ 3364W/X<BR>
+ 3313G<BR>
+ 3313J<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 23B<BR>
+ 23A<BR>
+ 21X<BR>
+ 21W<BR>
+ -<BR>
+ 22B<BR>
+ 22A<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ST5YL/ST53YL<BR>
+ ST5YJ/5T53YJ<BR>
+ ST-23A<BR>
+ ST-22B<BR>
+ ST-22<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ST-4B<BR>
+ ST-4A<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST-3B<BR>
+ ST-3A<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ EVM-6YS<BR>
+ EVM-1E<BR>
+ EVM-1G<BR>
+ EVM-1D<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ G4B<BR>
+ G4A<BR>
+ TR04-3S1<BR>
+ TRG04-2S1<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ DVR-43A<BR>
+ CVR-42C<BR>
+ CVR-42A/C<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+</TABLE>
+<P>
+<FONT SIZE=4 FACE=ARIAL><B>ALT = ALTERNATE</B></FONT>
+<P>
+
+
+<P>
+</td>
+</tr>
+</table>
+
+
+<b>RESISTOR</b><p>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+
+<b>Pin Header Connectors</b><p>
+<author>Created by librarian@cadsoft.de</author>
+
+
+<b>PIN HEADER</b>
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<b>EAGLE Design Rules</b>
+<p>
+Die Standard-Design-Rules sind so gewählt, dass sie für
+die meisten Anwendungen passen. Sollte ihre Platine
+besondere Anforderungen haben, treffen Sie die erforderlichen
+Einstellungen hier und speichern die Design Rules unter
+einem neuen Namen ab.
+<b>EAGLE Design Rules</b>
+<p>
+The default Design Rules have been set to cover
+a wide range of applications. Your particular design
+may have different requirements, so please make the
+necessary adjustments and save your customized
+design rules under a new name.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Eagle/Eagle.sch b/samples/Eagle/Eagle.sch
new file mode 100644
index 00000000..5a72a868
--- /dev/null
+++ b/samples/Eagle/Eagle.sch
@@ -0,0 +1,3612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<b>Frames for Sheet and Layout</b>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>DRAWING_NAME
+>LAST_DATE_TIME
+>SHEET
+Sheet:
+
+
+
+
+
+<b>FRAME</b><p>
+DIN A4, landscape with location and doc. field
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<b>Resistors, Capacitors, Inductors</b><p>
+Based on the previous libraries:
+<ul>
+<li>r.lbr
+<li>cap.lbr
+<li>cap-fe.lbr
+<li>captant.lbr
+<li>polcap.lbr
+<li>ipc-smd.lbr
+</ul>
+All SMD packages are defined according to the IPC specifications and CECC<p>
+<author>Created by librarian@cadsoft.de</author><p>
+<p>
+for Electrolyt Capacitors see also :<p>
+www.bccomponents.com <p>
+www.panasonic.com<p>
+www.kemet.com<p>
+http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b>
+<p>
+for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p>
+
+<table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0>
+<tr valign="top">
+
+<! <td width="10"> </td>
+<td width="90%">
+
+<b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b>
+<P>
+<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI TECH</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT>
+ </B>
+ </TD>
+ <TD ALIGN=CENTER>
+ <B>
+ <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT>
+ </B>
+ </TD><TD> </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 >
+ 3005P<BR>
+ 3006P<BR>
+ 3006W<BR>
+ 3006Y<BR>
+ 3009P<BR>
+ 3009W<BR>
+ 3009Y<BR>
+ 3057J<BR>
+ 3057L<BR>
+ 3057P<BR>
+ 3057Y<BR>
+ 3059J<BR>
+ 3059L<BR>
+ 3059P<BR>
+ 3059Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 89P<BR>
+ 89W<BR>
+ 89X<BR>
+ 89PH<BR>
+ 76P<BR>
+ 89XH<BR>
+ 78SLT<BR>
+ 78L ALT<BR>
+ 56P ALT<BR>
+ 78P ALT<BR>
+ T8S<BR>
+ 78L<BR>
+ 56P<BR>
+ 78P<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ T18/784<BR>
+ 783<BR>
+ 781<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 2199<BR>
+ 1697/1897<BR>
+ 1680/1880<BR>
+ 2187<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 8035EKP/CT20/RJ-20P<BR>
+ -<BR>
+ RJ-20X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 1211L<BR>
+ 8012EKQ ALT<BR>
+ 8012EKR ALT<BR>
+ 1211P<BR>
+ 8012EKJ<BR>
+ 8012EKL<BR>
+ 8012EKQ<BR>
+ 8012EKR<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 2101P<BR>
+ 2101W<BR>
+ 2101Y<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 2102L<BR>
+ 2102S<BR>
+ 2102Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ EVMCOG<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 43P<BR>
+ 43W<BR>
+ 43Y<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 40L<BR>
+ 40P<BR>
+ 40Y<BR>
+ 70Y-T602<BR>
+ 70L<BR>
+ 70P<BR>
+ 70Y<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ RT/RTR12<BR>
+ RT/RTR12<BR>
+ RT/RTR12<BR>
+ -<BR>
+ RJ/RJR12<BR>
+ RJ/RJR12<BR>
+ RJ/RJR12<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3250L<BR>
+ 3250P<BR>
+ 3250W<BR>
+ 3250X<BR>
+ 3252P<BR>
+ 3252W<BR>
+ 3252X<BR>
+ 3260P<BR>
+ 3260W<BR>
+ 3260X<BR>
+ 3262P<BR>
+ 3262W<BR>
+ 3262X<BR>
+ 3266P<BR>
+ 3266W<BR>
+ 3266X<BR>
+ 3290H<BR>
+ 3290P<BR>
+ 3290W<BR>
+ 3292P<BR>
+ 3292W<BR>
+ 3292X<BR>
+ 3296P<BR>
+ 3296W<BR>
+ 3296X<BR>
+ 3296Y<BR>
+ 3296Z<BR>
+ 3299P<BR>
+ 3299W<BR>
+ 3299X<BR>
+ 3299Y<BR>
+ 3299Z<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66X ALT<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66X ALT<BR>
+ -<BR>
+ 64W ALT<BR>
+ -<BR>
+ 64P ALT<BR>
+ 64W ALT<BR>
+ 64X ALT<BR>
+ 64P<BR>
+ 64W<BR>
+ 64X<BR>
+ 66X ALT<BR>
+ 66P ALT<BR>
+ 66W ALT<BR>
+ 66P<BR>
+ 66W<BR>
+ 66X<BR>
+ 67P<BR>
+ 67W<BR>
+ 67X<BR>
+ 67Y<BR>
+ 67Z<BR>
+ 68P<BR>
+ 68W<BR>
+ 68X<BR>
+ 67Y ALT<BR>
+ 67Z ALT<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 5050<BR>
+ 5091<BR>
+ 5080<BR>
+ 5087<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ T63YB<BR>
+ T63XB<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 5887<BR>
+ 5891<BR>
+ 5880<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ T93Z<BR>
+ T93YA<BR>
+ T93XA<BR>
+ T93YB<BR>
+ T93XB<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 8026EKP<BR>
+ 8026EKW<BR>
+ 8026EKM<BR>
+ 8026EKP<BR>
+ 8026EKB<BR>
+ 8026EKM<BR>
+ 1309X<BR>
+ 1309P<BR>
+ 1309W<BR>
+ 8024EKP<BR>
+ 8024EKW<BR>
+ 8024EKN<BR>
+ RJ-9P/CT9P<BR>
+ RJ-9W<BR>
+ RJ-9X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3103P<BR>
+ 3103Y<BR>
+ 3103Z<BR>
+ 3103P<BR>
+ 3103Y<BR>
+ 3103Z<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3105P/3106P<BR>
+ 3105W/3106W<BR>
+ 3105X/3106X<BR>
+ 3105Y/3106Y<BR>
+ 3105Z/3105Z<BR>
+ 3102P<BR>
+ 3102W<BR>
+ 3102X<BR>
+ 3102Y<BR>
+ 3102Z<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMCBG<BR>
+ EVMCCG<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 55-1-X<BR>
+ 55-4-X<BR>
+ 55-3-X<BR>
+ 55-2-X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 50-2-X<BR>
+ 50-4-X<BR>
+ 50-3-X<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 64P<BR>
+ 64W<BR>
+ 64X<BR>
+ 64Y<BR>
+ 64Z<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RT/RTR22<BR>
+ RJ/RJR22<BR>
+ RJ/RJR22<BR>
+ RJ/RJR22<BR>
+ RT/RTR26<BR>
+ RT/RTR26<BR>
+ RT/RTR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RJ/RJR26<BR>
+ RT/RTR24<BR>
+ RT/RTR24<BR>
+ RT/RTR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ RJ/RJR24<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=8>
+ <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
+ </TD>
+ <TD ALIGN=CENTER>
+ <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3323P<BR>
+ 3323S<BR>
+ 3323W<BR>
+ 3329H<BR>
+ 3329P<BR>
+ 3329W<BR>
+ 3339H<BR>
+ 3339P<BR>
+ 3339W<BR>
+ 3352E<BR>
+ 3352H<BR>
+ 3352K<BR>
+ 3352P<BR>
+ 3352T<BR>
+ 3352V<BR>
+ 3352W<BR>
+ 3362H<BR>
+ 3362M<BR>
+ 3362P<BR>
+ 3362R<BR>
+ 3362S<BR>
+ 3362U<BR>
+ 3362W<BR>
+ 3362X<BR>
+ 3386B<BR>
+ 3386C<BR>
+ 3386F<BR>
+ 3386H<BR>
+ 3386K<BR>
+ 3386M<BR>
+ 3386P<BR>
+ 3386S<BR>
+ 3386W<BR>
+ 3386X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 25P<BR>
+ 25S<BR>
+ 25RX<BR>
+ 82P<BR>
+ 82M<BR>
+ 82PA<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 91E<BR>
+ 91X<BR>
+ 91T<BR>
+ 91B<BR>
+ 91A<BR>
+ 91V<BR>
+ 91W<BR>
+ 25W<BR>
+ 25V<BR>
+ 25P<BR>
+ -<BR>
+ 25S<BR>
+ 25U<BR>
+ 25RX<BR>
+ 25X<BR>
+ 72XW<BR>
+ 72XL<BR>
+ 72PM<BR>
+ 72RX<BR>
+ -<BR>
+ 72PX<BR>
+ 72P<BR>
+ 72RXW<BR>
+ 72RXL<BR>
+ 72X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ T7YB<BR>
+ T7YA<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ TXD<BR>
+ TYA<BR>
+ TYP<BR>
+ -<BR>
+ TYD<BR>
+ TX<BR>
+ -<BR>
+ 150SX<BR>
+ 100SX<BR>
+ 102T<BR>
+ 101S<BR>
+ 190T<BR>
+ 150TX<BR>
+ 101<BR>
+ -<BR>
+ -<BR>
+ 101SX<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ET6P<BR>
+ ET6S<BR>
+ ET6X<BR>
+ RJ-6W/8014EMW<BR>
+ RJ-6P/8014EMP<BR>
+ RJ-6X/8014EMX<BR>
+ TM7W<BR>
+ TM7P<BR>
+ TM7X<BR>
+ -<BR>
+ 8017SMS<BR>
+ -<BR>
+ 8017SMB<BR>
+ 8017SMA<BR>
+ -<BR>
+ -<BR>
+ CT-6W<BR>
+ CT-6H<BR>
+ CT-6P<BR>
+ CT-6R<BR>
+ -<BR>
+ CT-6V<BR>
+ CT-6X<BR>
+ -<BR>
+ -<BR>
+ 8038EKV<BR>
+ -<BR>
+ 8038EKX<BR>
+ -<BR>
+ -<BR>
+ 8038EKP<BR>
+ 8038EKZ<BR>
+ 8038EKW<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3321H<BR>
+ 3321P<BR>
+ 3321N<BR>
+ 1102H<BR>
+ 1102P<BR>
+ 1102T<BR>
+ RVA0911V304A<BR>
+ -<BR>
+ RVA0911H413A<BR>
+ RVG0707V100A<BR>
+ RVA0607V(H)306A<BR>
+ RVA1214H213A<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 3104B<BR>
+ 3104C<BR>
+ 3104F<BR>
+ 3104H<BR>
+ -<BR>
+ 3104M<BR>
+ 3104P<BR>
+ 3104S<BR>
+ 3104W<BR>
+ 3104X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ EVMQ0G<BR>
+ EVMQIG<BR>
+ EVMQ3G<BR>
+ EVMS0G<BR>
+ EVMQ0G<BR>
+ EVMG0G<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMK4GA00B<BR>
+ EVM30GA00B<BR>
+ EVMK0GA00B<BR>
+ EVM38GA00B<BR>
+ EVMB6<BR>
+ EVLQ0<BR>
+ -<BR>
+ EVMMSG<BR>
+ EVMMBG<BR>
+ EVMMAG<BR>
+ -<BR>
+ -<BR>
+ EVMMCS<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ EVMM1<BR>
+ -<BR>
+ -<BR>
+ EVMM0<BR>
+ -<BR>
+ -<BR>
+ EVMM3<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ 62-3-1<BR>
+ 62-1-2<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 67R<BR>
+ -<BR>
+ 67P<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ 67X<BR>
+ 63V<BR>
+ 63S<BR>
+ 63M<BR>
+ -<BR>
+ -<BR>
+ 63H<BR>
+ 63P<BR>
+ -<BR>
+ -<BR>
+ 63X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ RJ/RJR50<BR>
+ RJ/RJR50<BR>
+ RJ/RJR50<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+</TABLE>
+<P> <P>
+<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3>
+ <TR>
+ <TD COLSPAN=7>
+ <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT>
+ <P>
+ <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3224G<BR>
+ 3224J<BR>
+ 3224W<BR>
+ 3269P<BR>
+ 3269W<BR>
+ 3269X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 44G<BR>
+ 44J<BR>
+ 44W<BR>
+ 84P<BR>
+ 84W<BR>
+ 84X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST63Z<BR>
+ ST63Y<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST5P<BR>
+ ST5W<BR>
+ ST5X<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=7>
+ </TD>
+ </TR>
+ <TR>
+ <TD COLSPAN=7>
+ <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
+ </TD>
+ <TD>
+ <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
+ </TD>
+ </TR>
+ <TR>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 3314G<BR>
+ 3314J<BR>
+ 3364A/B<BR>
+ 3364C/D<BR>
+ 3364W/X<BR>
+ 3313G<BR>
+ 3313J<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ 23B<BR>
+ 23A<BR>
+ 21X<BR>
+ 21W<BR>
+ -<BR>
+ 22B<BR>
+ 22A<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ST5YL/ST53YL<BR>
+ ST5YJ/5T53YJ<BR>
+ ST-23A<BR>
+ ST-22B<BR>
+ ST-22<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ ST-4B<BR>
+ ST-4A<BR>
+ -<BR>
+ -<BR>
+ -<BR>
+ ST-3B<BR>
+ ST-3A<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ EVM-6YS<BR>
+ EVM-1E<BR>
+ EVM-1G<BR>
+ EVM-1D<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ G4B<BR>
+ G4A<BR>
+ TR04-3S1<BR>
+ TRG04-2S1<BR>
+ -<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
+ -<BR>
+ -<BR>
+ DVR-43A<BR>
+ CVR-42C<BR>
+ CVR-42A/C<BR>
+ -<BR>
+ -<BR></FONT>
+ </TD>
+ </TR>
+</TABLE>
+<P>
+<FONT SIZE=4 FACE=ARIAL><B>ALT = ALTERNATE</B></FONT>
+<P>
+
+
+<P>
+</td>
+</tr>
+</table>
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b> wave soldering<p>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b>
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+wave soldering
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b> wave soldering<p>
+Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.10 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.25 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.12 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.10 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.25 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.25 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.12 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+MELF 0.25 W
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b><p>
+type 0204, grid 5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0204, grid 7.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 10 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 12 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 15mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 2.5 mm
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 5 mm
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>RESISTOR</b><p>
+type 0207, grid 7.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0309, grid 10mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0309, grid 12.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0411, grid 12.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0411, grid 15 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0411, grid 3.81 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+<b>RESISTOR</b><p>
+type 0414, grid 15 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0414, grid 5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+<b>RESISTOR</b><p>
+type 0617, grid 17.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0617, grid 22.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0617, grid 5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+<b>RESISTOR</b><p>
+type 0922, grid 22.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+<b>RESISTOR</b><p>
+type 0613, grid 5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+<b>RESISTOR</b><p>
+type 0613, grid 15 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type 0817, grid 22.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+0817
+
+
+
+
+<b>RESISTOR</b><p>
+type 0817, grid 6.35 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+0817
+
+
+
+<b>RESISTOR</b><p>
+type V234, grid 12.5 mm
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type V235, grid 17.78 mm
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>RESISTOR</b><p>
+type V526-0, grid 2.5 mm
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Mini MELF 0102 Axial</b>
+
+
+
+
+>NAME
+>VALUE
+
+
+
+<b>RESISTOR</b><p>
+type 0922, grid 7.5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+0922
+
+
+
+<b>CECC Size RC2211</b> Reflow Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CECC Size RC2211</b> Wave Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CECC Size RC3715</b> Reflow Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CECC Size RC3715</b> Wave Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CECC Size RC6123</b> Reflow Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CECC Size RC6123</b> Wave Soldering<p>
+source Beyschlag
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>RESISTOR</b><p>
+type RDH, grid 15 mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+RDH
+
+
+
+
+<b>RESISTOR</b><p>
+type 0204, grid 2.5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>RESISTOR</b><p>
+type 0309, grid 2.5 mm
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>RESISTOR</b> chip<p>
+Source: http://www.vishay.com/docs/20008/dcrcw.pdf
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RNC55<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RNC60<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RBR52<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RBR53<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RBR54<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RBR55<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p>
+MIL SIZE RBR56<br>
+Source: VISHAY .. vta56.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Package 4527</b><p>
+Source: http://www.vishay.com/docs/31059/wsrhigh.pdf
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>Wirewound Resistors, Precision Power</b><p>
+Source: VISHAY wscwsn.pdf
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+<b>CRCW1218 Thick Film, Rectangular Chip Resistors</b><p>
+Source: http://www.vishay.com .. dcrcw.pdf
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+<b>Chip Monolithic Ceramic Capacitors</b> Medium Voltage High Capacitance for General Use<p>
+Source: http://www.murata.com .. GRM43DR72E224KW01.pdf
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+<B>RESISTOR</B>, American symbol
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<b>Pin Header Connectors</b><p>
+<author>Created by librarian@cadsoft.de</author>
+
+
+<b>PIN HEADER</b>
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+
+
+
+
+>NAME
+>VALUE
+
+
+
+
+
+<b>PIN HEADER</b>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Frege/CommandLineClock.fr b/samples/Frege/CommandLineClock.fr
new file mode 100644
index 00000000..5bdde621
--- /dev/null
+++ b/samples/Frege/CommandLineClock.fr
@@ -0,0 +1,44 @@
+{--
+ This program displays the
+ current time on stdandard output
+ every other second.
+ -}
+
+module examples.CommandLineClock where
+
+data Date = native java.util.Date where
+ native new :: () -> IO (MutableIO Date) -- new Date()
+ native toString :: Mutable s Date -> ST s String -- d.toString()
+
+--- 'IO' action to give us the current time as 'String'
+current :: IO String
+current = do
+ d <- Date.new ()
+ d.toString
+
+{-
+ "java.lang.Thread.sleep" takes a "long" and
+ returns nothing, but may throw an InterruptedException.
+ This is without doubt an IO action.
+
+ public static void sleep(long millis)
+ throws InterruptedException
+
+ Encoded in Frege:
+ - argument type long Long
+ - result void ()
+ - does IO IO ()
+ - throws ... throws ....
+
+-}
+-- .... defined in frege.java.Lang
+-- native sleep java.lang.Thread.sleep :: Long -> IO () throws InterruptedException
+
+
+main args =
+ forever do
+ current >>= print
+ print "\r"
+ stdout.flush
+ Thread.sleep 999
+
\ No newline at end of file
diff --git a/samples/Frege/Concurrent.fr b/samples/Frege/Concurrent.fr
new file mode 100644
index 00000000..5f9df994
--- /dev/null
+++ b/samples/Frege/Concurrent.fr
@@ -0,0 +1,147 @@
+module examples.Concurrent where
+
+import System.Random
+import Java.Net (URL)
+import Control.Concurrent as C
+
+main2 args = do
+ m <- newEmptyMVar
+ forkIO do
+ m.put 'x'
+ m.put 'y'
+ m.put 'z'
+ replicateM_ 3 do
+ c <- m.take
+ print "got: "
+ println c
+
+
+example1 = do
+ forkIO (replicateM_ 100000 (putChar 'a'))
+ replicateM_ 100000 (putChar 'b')
+
+example2 = do
+ s <- getLine
+ case s.long of
+ Right n -> forkIO (setReminder n) >> example2
+ Left _ -> println ("exiting ...")
+
+setReminder :: Long -> IO ()
+setReminder n = do
+ println ("Ok, I remind you in " ++ show n ++ " seconds")
+ Thread.sleep (1000L*n)
+ println (show n ++ " seconds is up!")
+
+table = "table"
+
+mainPhil _ = do
+ [fork1,fork2,fork3,fork4,fork5] <- mapM MVar.new [1..5]
+ forkIO (philosopher "Kant" fork5 fork1)
+ forkIO (philosopher "Locke" fork1 fork2)
+ forkIO (philosopher "Wittgenstein" fork2 fork3)
+ forkIO (philosopher "Nozick" fork3 fork4)
+ forkIO (philosopher "Mises" fork4 fork5)
+ return ()
+
+philosopher :: String -> MVar Int -> MVar Int -> IO ()
+philosopher me left right = do
+ g <- Random.newStdGen
+ let phil g = do
+ let (tT,g1) = Random.randomR (60L, 120L) g
+ (eT, g2) = Random.randomR (80L, 160L) g1
+ thinkTime = 300L * tT
+ eatTime = 300L * eT
+
+ println(me ++ " is going to the dining room and takes his seat.")
+ fl <- left.take
+ println (me ++ " takes up left fork (" ++ show fl ++ ")")
+ rFork <- right.poll
+ case rFork of
+ Just fr -> do
+ println (me ++ " takes up right fork. (" ++ show fr ++ ")")
+ println (me ++ " is going to eat for " ++ show eatTime ++ "ms")
+ Thread.sleep eatTime
+ println (me ++ " finished eating.")
+ right.put fr
+ println (me ++ " took down right fork.")
+ left.put fl
+ println (me ++ " took down left fork.")
+ table.notifyAll
+ println(me ++ " is going to think for " ++ show thinkTime ++ "ms.")
+ Thread.sleep thinkTime
+ phil g2
+ Nothing -> do
+ println (me ++ " finds right fork is already in use.")
+ left.put fl
+ println (me ++ " took down left fork.")
+ table.notifyAll
+ println (me ++ " is going to the bar to await notifications from table.")
+ table.wait
+ println (me ++ " got notice that something changed at the table.")
+ phil g2
+
+ inter :: InterruptedException -> IO ()
+ inter _ = return ()
+
+ phil g `catch` inter
+
+
+getURL xx = do
+ url <- URL.new xx
+ con <- url.openConnection
+ con.connect
+ is <- con.getInputStream
+ typ <- con.getContentType
+ -- stderr.println ("content-type is " ++ show typ)
+ ir <- InputStreamReader.new is (fromMaybe "UTF-8" (charset typ))
+ `catch` unsupportedEncoding is
+ br <- BufferedReader.new ir
+ br.getLines
+ where
+ unsupportedEncoding :: InputStream -> UnsupportedEncodingException -> IO InputStreamReader
+ unsupportedEncoding is x = do
+ stderr.println x.catched
+ InputStreamReader.new is "UTF-8"
+
+ charset ctyp = do
+ typ <- ctyp
+ case typ of
+ m~´charset=(\S+)´ -> m.group 1
+ _ -> Nothing
+
+
+type SomeException = Throwable
+
+main ["dining"] = mainPhil []
+
+main _ = do
+ m1 <- MVar.newEmpty
+ m2 <- MVar.newEmpty
+ m3 <- MVar.newEmpty
+
+ forkIO do
+ r <- (catchAll . getURL) "http://www.wikipedia.org/wiki/Haskell"
+ m1.put r
+
+ forkIO do
+ r <- (catchAll . getURL) "htto://www.wikipedia.org/wiki/Java"
+ m2.put r
+
+ forkIO do
+ r <- (catchAll . getURL) "http://www.wikipedia.org/wiki/Frege"
+ m3.put r
+
+ r1 <- m1.take
+ r2 <- m2.take
+ r3 <- m3.take
+ println (result r1, result r2, result r3)
+ -- case r3 of
+ -- Right ss -> mapM_ putStrLn ss
+ -- Left _ -> return ()
+ where
+ result :: (SomeException|[String]) -> (String|Int)
+ result (Left x) = Left x.getClass.getName
+ result (Right y) = (Right . sum . map length) y
+ -- mapM_ putStrLn r2
+
+
\ No newline at end of file
diff --git a/samples/Frege/Sudoku.fr b/samples/Frege/Sudoku.fr
new file mode 100644
index 00000000..88bfd966
--- /dev/null
+++ b/samples/Frege/Sudoku.fr
@@ -0,0 +1,561 @@
+package examples.Sudoku where
+
+import Data.TreeMap (Tree, keys)
+import Data.List as DL hiding (find, union)
+
+
+type Element = Int -- 1,2,3,4,5,6,7,8,9
+type Zelle = [Element] -- set of candidates
+type Position = Int -- 0..80
+type Feld = (Position, Zelle)
+type Brett = [Feld]
+
+--- data type for assumptions and conclusions
+data Assumption =
+ !ISNOT Position Element
+ | !IS Position Element
+
+
+derive Eq Assumption
+derive Ord Assumption
+instance Show Assumption where
+ show (IS p e) = pname p ++ "=" ++ e.show
+ show (ISNOT p e) = pname p ++ "/" ++ e.show
+
+showcs cs = joined " " (map Assumption.show cs)
+
+elements :: [Element] -- all possible elements
+elements = [1 .. 9]
+
+{-
+ a b c d e f g h i
+ 0 1 2 | 3 4 5 | 6 7 8 1
+ 9 10 11 |12 13 14 |15 16 17 2
+ 18 19 20 |21 22 23 |24 25 26 3
+ ---------|---------|--------
+ 27 28 29 |30 31 32 |33 34 35 4
+ 36 37 38 |39 40 41 |42 43 44 5
+ 45 46 47 |48 49 50 |51 52 53 6
+ ---------|---------|--------
+ 54 55 56 |57 58 59 |60 61 62 7
+ 63 64 65 |66 67 68 |69 70 71 8
+ 72 73 74 |75 76 77 |78 79 80 9
+-}
+
+positions :: [Position] -- all possible positions
+positions = [0..80]
+rowstarts :: [Position] -- all positions where a row is starting
+rowstarts = [0,9,18,27,36,45,54,63,72]
+colstarts :: [Position] -- all positions where a column is starting
+colstarts = [0,1,2,3,4,5,6,7,8]
+boxstarts :: [Position] -- all positions where a box is starting
+boxstarts = [0,3,6,27,30,33,54,57,60]
+boxmuster :: [Position] -- pattern for a box, by adding upper left position results in real box
+boxmuster = [0,1,2,9,10,11,18,19,20]
+
+
+--- extract field for position
+getf :: Brett -> Position -> Feld
+getf (f:fs) p
+ | fst f == p = f
+ | otherwise = getf fs p
+getf [] p = (p,[])
+
+
+--- extract cell for position
+getc :: Brett -> Position -> Zelle
+getc b p = snd (getf b p)
+
+--- compute the list of all positions that belong to the same row as a given position
+row :: Position -> [Position]
+row p = [z..(z+8)] where z = (p `quot` 9) * 9
+
+--- compute the list of all positions that belong to the same col as a given position
+col :: Position -> [Position]
+col p = map (c+) rowstarts where c = p `mod` 9
+
+--- compute the list of all positions that belong to the same box as a given position
+box :: Position -> [Position]
+box p = map (z+) boxmuster where
+ ri = p `div` 27 * 27 -- 0, 27 or 54, depending on row
+ ci = p `mod` 9 -- column index 0..8, 0,1,2 is left, 3,4,5 is middle, 6,7,8 is right
+ cs = ci `div` 3 * 3 -- 0, 3 or 6
+ z = ri + cs
+
+--- check if candidate set has exactly one member, i.e. field has been solved
+single :: Zelle -> Bool
+single [_] = true
+single _ = false
+
+unsolved :: Zelle -> Bool
+unsolved [_] = false
+unsolved _ = true
+
+-- list of rows, cols, boxes
+allrows = map row rowstarts
+allcols = map col colstarts
+allboxs = map box boxstarts
+allrcb = zip (repeat "row") allrows
+ ++ zip (repeat "col") allcols
+ ++ zip (repeat "box") allboxs
+
+
+containers :: [(Position -> [Position], String)]
+containers = [(row, "row"), (col, "col"), (box, "box")]
+
+-- ----------------- PRINTING ------------------------------------
+-- printable coordinate of field, upper left is a1, lower right is i9
+pname p = packed [chr (ord 'a' + p `mod` 9), chr (ord '1' + p `div` 9)]
+
+-- print board
+printb b = mapM_ p1line allrows >> println ""
+ where
+ p1line row = do
+ print (joined "" (map pfld line))
+ where line = map (getc b) row
+
+-- print field (brief)
+-- ? = no candidate
+-- 5 = field is 5
+-- . = some candidates
+pfld [] = "?"
+pfld [x] = show x
+pfld zs = "0"
+
+-- print initial/final board
+result msg b = do
+ println ("Result: " ++ msg)
+ print ("Board: ")
+ printb b
+ return b
+
+res012 b = case concatMap (getc b) [0,1,2] of
+ [a,b,c] -> a*100+b*10+c
+ _ -> 9999999
+
+-- -------------------------- BOARD ALTERATION ACTIONS ---------------------------------
+-- print a message about what is done to the board and return the new board
+turnoff1 :: Position -> Zelle -> Brett -> IO Brett
+turnoff1 i off b
+ | single nc = do
+ -- print (pname i)
+ -- print ": set to "
+ -- print (head nc)
+ -- println " (naked single)"
+ return newb
+ | otherwise = return newb
+ where
+ cell = getc b i
+ nc = filter (`notElem` off) cell
+ newb = (i, nc) : [ f | f <- b, fst f != i ]
+
+turnoff :: Int -> Zelle -> String -> Brett -> IO Brett
+turnoff i off msg b = do
+ -- print (pname i)
+ -- print ": set to "
+ -- print nc
+ -- print " by clearing "
+ -- print off
+ -- print " "
+ -- println msg
+ return newb
+ where
+ cell = getc b i
+ nc = filter (`notElem` off) cell
+ newb = (i, nc) : [ f | f <- b, fst f != i ]
+
+turnoffh ps off msg b = foldM toh b ps
+ where
+ toh b p = turnoff p off msg b
+
+setto :: Position -> Element -> String -> Brett -> IO Brett
+setto i n cname b = do
+ -- print (pname i)
+ -- print ": set to "
+ -- print n
+ -- print " (hidden single in "
+ -- print cname
+ -- println ")"
+ return newb
+ where
+ nf = [n]
+ newb = (i, nf) : [ f | f <- b, fst f != i ]
+
+
+-- ----------------------------- SOLVING STRATEGIES ---------------------------------------------
+-- reduce candidate sets that contains numbers already in same row, col or box
+-- This finds (and logs) NAKED SINGLEs in passing.
+reduce b = [ turnoff1 p sss | (p,cell) <- b, -- for each field
+ unsolved cell, -- with more than 1 candidate
+ -- single fields in containers that are candidates of that field
+ sss = [ s | (rcb, _) <- containers, [s] <- map (getc b) (rcb p), s `elem` cell],
+ sss != [] ] -- collect field index, elements to remove from candidate set
+
+-- look for a number that appears in exactly 1 candidate set of a container
+-- this number can go in no other place (HIDDEN SINGLE)
+hiddenSingle b = [ setto i n cname | -- select index, number, containername
+ (cname, rcb) <- allrcb, -- FOR rcb IN allrcb
+ n <- elements, -- FOR n IN elements
+ fs = filter (unsolved • snd) (map (getf b) rcb),
+ occurs = filter ((n `elem`) • snd) fs,
+ length occurs == 1,
+ (i, _) <- occurs ]
+
+-- look for NAKED PAIRS, TRIPLES, QUADS
+nakedPair n b = [ turnoff p t ("(naked tuple in " ++ nm ++ ")") | -- SELECT pos, tuple, name
+ -- n <- [2,3,4], // FOR n IN [2,3,4]
+ (nm, rcb) <- allrcb, -- FOR rcb IN containers
+ fs = map (getf b) rcb, -- let fs = fields for rcb positions
+ u = (fold union [] . filter unsolved . map snd) fs, -- let u = union of non single candidates
+ t <- n `outof` u, -- FOR t IN n-tuples
+ hit = (filter ((`subset` t) . snd) . filter (unsolved . snd)) fs,
+ length hit == n,
+ (p, cell) <- fs,
+ p `notElem` map fst hit,
+ any (`elem` cell) t
+ ]
+
+-- look for HIDDEN PAIRS, TRIPLES or QUADS
+hiddenPair n b = [ turnoff p off ("(hidden " ++ show t ++ " in " ++ nm ++ ")") | -- SELECT pos, tuple, name
+ -- n <- [2,3,4], // FOR n IN [2,3,4]
+ (nm, rcb) <- allrcb, -- FOR rcb IN containers
+ fs = map (getf b) rcb, -- let fs = fields for rcb positions
+ u = (fold union [] . filter ((>1) . length) . map snd) fs, -- let u = union of non single candidates
+ t <- n `outof` u, -- FOR t IN n-tuples
+ hit = (filter (any ( `elem` t) . snd) . filter (unsolved . snd)) fs,
+ length hit == n,
+ off = (fold union [] . map snd) hit `minus` t,
+ off != [],
+ (p, cell) <- hit,
+ ! (cell `subset` t)
+ ]
+
+a `subset` b = all (`elem` b) a
+a `union` b = uniq (sort (a ++ b))
+a `minus` b = filter (`notElem` b) a
+a `common` b = filter (`elem` b) a
+n `outof` as
+ | length as < n = []
+ | [] <- as = []
+ | 1 >= n = map (:[]) as
+ | (a:bs) <- as = map (a:) ((n-1) `outof` bs) ++ (n `outof` bs)
+ | otherwise = undefined -- cannot happen because either as is empty or not
+
+same f a b = b `elem` f a
+
+intersectionlist = [(allboxs, row, "box/row intersection"), (allboxs, col, "box/col intersection"),
+ (allrows ++ allcols, box, "line/box intersection")]
+intersections b = [
+ turnoff pos [c] reason | -- SELECT position, candidate, reson
+ (from, container, reason) <- intersectionlist,
+ rcb <- from,
+ fs = (filter (unsolved . snd) . map (getf b)) rcb, -- fs = fields in from with more than 1 candidate
+ c <- (fold union [] • map snd) fs, -- FOR c IN union of candidates
+ cpos = (map fst • filter ((c `elem`) • snd)) fs, -- cpos = positions where c occurs
+ cpos != [], -- WHERE cpos is not empty
+ all (same container (head cpos)) (tail cpos), -- WHERE all positions are in the intersection
+ -- we can remove all occurences of c that are in container, but not in from
+ (pos, cell) <- map (getf b) (container (head cpos)),
+ c `elem` cell,
+ pos `notElem` rcb ]
+
+
+-- look for an XY Wing
+-- - there exists a cell A with candidates X and Y
+-- - there exists a cell B with candidates X and Z that shares a container with A
+-- - there exists a cell C with candidates Y and Z that shares a container with A
+-- reasoning
+-- - if A is X, B will be Z
+-- - if A is Y, C will be Z
+-- - since A will indeed be X or Y -> B or C will be Z
+-- - thus, no cell that can see B and C can be Z
+xyWing board = [ turnoff p [z] ("xy wing " ++ pname b ++ " " ++ pname c ++ " because of " ++ pname a) |
+ (a, [x,y]) <- board, -- there exists a cell a with candidates x and y
+ rcba = map (getf board) (row a ++ col a ++ box a), -- rcba = all fields that share a container with a
+ (b, [b1, b2]) <- rcba,
+ b != a,
+ b1 == x && b2 != y || b2 == x && b1 != y, -- there exists a cell B with candidates x and z
+ z = if b1 == x then b2 else b1,
+ (c, [c1, c2]) <- rcba,
+ c != a, c!= b,
+ c1 == y && c2 == z || c1 == z && c2 == y, -- there exists a cell C with candidates y and z
+ ps = (uniq . sort) ((row b ++ col b ++ box b) `common` (row c ++ col c ++ box c)),
+ -- remove z in ps
+ (p, cs) <- map (getf board) ps,
+ p != b, p != c,
+ z `elem` cs ]
+
+-- look for a N-Fish (2: X-Wing, 3: Swordfish, 4: Jellyfish)
+-- When all candidates for a particular digit in N rows are located
+-- in only N columns, we can eliminate all candidates from those N columns
+-- which are not located on those N rows
+fish n board = fish "row" allrows row col ++ fish "col" allcols col row where
+ fishname 2 = "X-Wing"
+ fishname 3 = "Swordfish"
+ fishname 4 = "Jellyfish"
+ fishname _ = "unknown fish"
+ fish nm allrows row col = [ turnoff p [x] (fishname n ++ " in " ++ nm ++ " " ++ show (map (pname . head) rset)) |
+ rset <- n `outof` allrows, -- take n rows (or cols)
+ x <- elements, -- look for certain number
+ rflds = map (filter ((>1) . length . snd) . map (getf board)) rset, -- unsolved fields in the rowset
+ colss = (map (map (head . col . fst) . filter ((x `elem`) . snd)) rflds), -- where x occurs in candidates
+ all ((>1) . length) colss, -- x must appear in at least 2 cols
+ cols = fold union [] colss,
+ length cols == n,
+ cstart <- cols,
+ (p, cell) <- map (getf board) (col cstart),
+ x `elem` cell,
+ all (p `notElem`) rset]
+
+
+-- compute immediate consequences of an assumption of the form (p `IS` e) or (p `ISNOT` e)
+conseq board (IS p e) = uniq (sort ([ p `ISNOT` x | x <- getc board p, x != e ] ++
+ [ a `ISNOT` e |
+ (a,cs) <- map (getf board) (row p ++ col p ++ box p),
+ a != p,
+ e `elem` cs
+ ]))
+conseq board (ISNOT p e) = uniq (sort ([ p `IS` x | cs = getc board p, length cs == 2, x <- cs, x != e ] ++
+ [ a `IS` e |
+ cp <- [row p, box p, col p],
+ as = (filter ((e `elem`) . getc board) . filter (p!=)) cp,
+ length as == 1,
+ a = head as
+ ]))
+
+-- check if two assumptions contradict each other
+contradicts (IS a x) (IS b y) = a==b && x!=y
+contradicts (IS a x) (ISNOT b y) = a==b && x==y
+contradicts (ISNOT a x) (IS b y) = a==b && x==y
+contradicts (ISNOT _ _) (ISNOT _ _) = false
+
+-- get the Position of an Assumption
+aPos (IS p _) = p
+aPos (ISNOT p _) = p
+
+-- get List of elements that must be turned off when assumption is true/false
+toClear board true (IS p x) = filter (x!=) (getc board p)
+toClear board false (IS p x) = [x]
+toClear board true (ISNOT p x) = [x]
+toClear board false (ISNOT p x) = filter (x!=) (getc board p)
+
+
+-- look for assumptions whose implications contradict themself
+chain board paths = [ solution a (head cs) (reverse cs) |
+ (a, css) <- paths,
+ cs <- take 1 [ cs | cs <- css, contradicts a (head cs) ]
+ ]
+ where
+ solution a c cs = turnoff (aPos a) (toClear board false a) reason where
+ reason = "Assumption " ++ show a ++ " implies " ++ show c ++ "\n\t"
+ ++ showcs cs ++ "\n\t"
+ ++ "Therefore, " ++ show a ++ " must be false."
+
+-- look for an assumption that yields to contradictory implications
+-- this assumption must be false
+chainContra board paths = [ solution a (reverse pro) (reverse contra) |
+ (a, css) <- paths, -- FOR ALL assumptions "a" with list of conlusions "css"
+ (pro, contra) <- take 1 [ (pro, contra) |
+ pro <- (uniqBy (using head) . sortBy (comparing head)) css, -- FOR ALL conslusion chains "pro"
+ c = head pro, -- LET "c" BE the final conclusion
+ contra <- take 1 (filter ((contradicts c) . head) css) -- THE FIRST conclusion that contradicts c
+ ]
+ ]
+ where
+ solution a pro con = turnoff (aPos a) (toClear board false a) reason where
+ reason = ("assumption " ++ show a ++ " leads to contradictory conclusions\n\t"
+ ++ showcs pro ++ "\n\t" ++ showcs con)
+
+
+
+-- look for a common implication c of some assumptions ai, where at least 1 ai is true
+-- so that (a0 OR a1 OR a2 OR ...) IMPLIES c
+-- For all cells pi in same container that have x as candidate, we can construct (p0==x OR p1==x OR ... OR pi==x)
+-- For a cell p with candidates ci, we can construct (p==c0 OR p==c1)
+cellRegionChain board paths = [ solution b as (map head os) |
+ as <- cellas ++ regionas, -- one of as must be true
+ iss = filter ((`elem` as) . fst) paths, -- the implications for as
+ (a, ass) <- take 1 iss, -- implications for first assumption
+ fs <- (uniqBy (using head) . sortBy (comparing head)) ass,
+ b = head fs, -- final conclusions of first assumption
+ os = [fs] : map (take 1 . filter ((b==) . head) . snd) (tail iss), -- look for implications with same conclusion
+ all ([]!=) os]
+ where
+ cellas = [ map (p `IS`) candidates | (p, candidates@(_:_:_)) <- board ]
+ regionas = [ map (`IS` e) ps |
+ region <- map (map (getf board)) (allrows ++ allcols ++ allboxs),
+ e <- elements,
+ ps = map fst (filter ((e `elem`) . snd) region),
+ length ps > 1 ]
+ solution b as oss = turnoff (aPos b) (toClear board true b) reason where
+ reason = "all of the assumptions " ++ joined ", " (map show as) ++ " imply " ++ show b ++ "\n\t"
+ ++ joined "\n\t" (map (showcs . reverse) oss) ++ "\n\t"
+ ++ "One of them must be true, so " ++ show b ++ " must be true."
+
+
+{-
+ Wir brauchen für einige Funktionen eine Datenstruktur wie
+ [ (Assumption, [[Assumption]]) ]
+ d.i. eine Liste von möglichen Annahmen samt aller Schlußketten.
+ Idealerweise sollte die Schlußkette in umgekehrter Reihenfolge vorliegen,
+ dann kann man einfach finden:
+ - Annahmen, die zum Selbstwiderspruch führen.
+ - alles, was aus einer bestimmten Annahme folgt (map (map head) [[a]])
+ -...
+-}
+--- Liste aller Annahmen für ein bestimmtes Brett
+assumptions :: Brett -> [Assumption]
+assumptions board = [ a |
+ (p, cs) <- board,
+ !(single cs),
+ a <- map (ISNOT p) cs ++ map (IS p) cs ]
+
+consequences :: Brett -> [Assumption] -> [[Assumption]]
+consequences board as = map (conseq board) as
+
+acstree :: Brett -> Tree Assumption [Assumption]
+acstree board = Tree.fromList (zip as cs)
+ where
+ as = assumptions board
+ cs = consequences board as
+
+-- bypass maybe on tree lookup
+find :: Tree Assumption [Assumption] -> Assumption -> [Assumption]
+find t a
+ | Just cs <- t.lookup a = cs
+ | otherwise = error ("no consequences for " ++ show a)
+
+-- for performance resons, we confine ourselves to implication chains of length 20 per assumption
+mkPaths :: Tree Assumption [Assumption] -> [ (Assumption, [[Assumption]]) ]
+mkPaths acst = map impl (keys acst) -- {[a1], [a2], [a3] ]
+ where
+ -- [Assumption] -> [(a, [chains, ordered by length]
+ impl a = (a, impls [[a]])
+ impls ns = (take 1000 • concat • takeUntil null • iterate expandchain) ns
+ -- expandchain :: [[Assumption]] -> [[Assumption]]
+ expandchain css = [ (n:a:as) |
+ (a : as) <- css, -- list of assumptions
+ n <- find acst a, -- consequences of a
+ n `notElem` as -- avoid loops
+ ]
+ -- uni (a:as) = a : uni (filter ((head a !=) • head) as)
+ -- uni [] = empty
+ -- empty = []
+
+
+-- ------------------ SOLVE A SUDOKU --------------------------
+-- Apply all available strategies until nothing changes anymore
+-- Strategy functions are supposed to return a list of
+-- functions, which, when applied to a board, give a changed board.
+-- When a strategy does not find anything to alter,
+-- it returns [], and the next strategy can be tried.
+solve b
+ | all (single . snd) b = result "Solved" b
+ | any (([]==) . snd) b = result "not solvable" b
+ | res@(_:_) <- reduce b = apply b res >>=solve -- compute smallest candidate sets
+ -- comment "candidate sets are up to date" = ()
+ | res@(_:_) <- hiddenSingle b = apply b res >>= solve -- find HIDDEN SINGLES
+ -- comment "no more hidden singles" = ()
+ | res@(_:_) <- intersections b = apply b res >>= solve -- find locked candidates
+ -- comment "no more intersections" = ()
+ | res@(_:_) <- nakedPair 2 b = apply b res >>= solve -- find NAKED PAIRS, TRIPLES or QUADRUPELS
+ -- comment "no more naked pairs" = ()
+ | res@(_:_) <- hiddenPair 2 b = apply b res >>= solve -- find HIDDEN PAIRS, TRIPLES or QUADRUPELS
+ -- comment "no more hidden pairs" = ()
+ -- res@(_:_) <- nakedPair 3 b = apply b res >>= solve // find NAKED PAIRS, TRIPLES or QUADRUPELS
+ -- | comment "no more naked triples" = ()
+ -- res@(_:_) <- hiddenPair 3 b = apply b res >>= solve // find HIDDEN PAIRS, TRIPLES or QUADRUPELS
+ -- | comment "no more hidden triples" = ()
+ -- res@(_:_) <- nakedPair 4 b = apply b res >>=solve // find NAKED PAIRS, TRIPLES or QUADRUPELS
+ -- | comment "no more naked quadruples" = ()
+ -- res@(_:_) <- hiddenPair 4 b = apply b res >>=solve // find HIDDEN PAIRS, TRIPLES or QUADRUPELS
+ -- | comment "no more hidden quadruples" = ()
+ | res@(_:_) <- xyWing b = apply b res >>=solve -- find XY WINGS
+ -- comment "no more xy wings" = ()
+ | res@(_:_) <- fish 2 b = apply b res >>=solve -- find 2-FISH
+ -- comment "no more x-wings" = ()
+ -- res@(_:_) <- fish 3 b = apply b res >>=solve // find 3-FISH
+ -- | comment "no more swordfish" = ()
+ -- res@(_:_) <- fish 4 b = apply b res >>=solve // find 4-FISH
+ -- | comment "no more jellyfish" = ()
+ -- | comment pcomment = ()
+ | res@(_:_) <- chain b paths = apply b (take 9 res) >>= solve -- find forcing chains
+ | res@(_:_) <- cellRegionChain b paths = apply b (take 9 res) >>= solve -- find common conclusion for true assumption
+ | res@(_:_) <- chainContra b paths = apply b (take 9 res) >>= solve -- find assumptions that allow to infer both a and !a
+ -- comment "consistent conclusions only" = ()
+
+ | otherwise = result "ambiguous" b
+ where
+ apply brd fs = foldM (\b\f -> f b) brd fs
+ paths = mkPaths (acstree b)
+ -- pcomment = show (length paths) ++ " assumptions with " ++ show (fold (+) 0 (map (length <~ snd) paths))
+ -- ++ " implication chains"
+
+-- comment com = do stderr << com << "\n" for false
+-- log com = do stderr << com << "\n" for true
+
+--- turn a string into a row
+mkrow :: String -> [Zelle]
+mkrow s = mkrow1 xs
+ where
+ xs = s ++ "---------" -- make sure at least 9 elements
+ mkrow1 xs = (take 9 • filter ([]!=) • map f • unpacked) xs
+ f x | x >= '1' && x <= '9' = [ord x - ord '0']
+ | x == ' ' = [] -- ignored
+ | otherwise = elements
+
+main ["-h"] = main []
+main ["-help"] = main []
+main [] = do
+ mapM_ stderr.println [
+ "usage: java Sudoku file ...",
+ " java Sudoku position",
+ "where position is a 81 char string consisting of digits",
+ "One can get such a string by going to",
+ "http://www.sudokuoftheday.com/pages/s-o-t-d.php",
+ "Right click on the puzzle and open it in new tab",
+ "Copy the 81 digits from the URL in the address field of your browser.",
+ "",
+ "There is also a file with hard sudokus in examples/top95.txt\n"]
+ return ()
+
+
+main [s@#^[0-9\W]{81}$#] = solve board >> return ()
+ where
+ board = zip positions felder
+ felder = decode s
+
+main files = forM_ files sudoku
+ where
+ sudoku file = do
+ br <- openReader file
+ lines <- BufferedReader.getLines br
+ bs <- process lines
+ ss <- mapM (\b -> print "Puzzle: " >> printb b >> solve b) bs
+ println ("Euler: " ++ show (sum (map res012 ss)))
+ return ()
+
+-- "--3-" => [1..9, 1..9, [3], 1..9]
+decode s = map candi (unpacked s) where
+ candi c | c >= '1' && c <= '9' = [(ord c - ord '0')]
+ | otherwise = elements
+process [] = return []
+process (s:ss)
+ | length s == 81 = consider b1
+ | length s == 9,
+ length acht == 8,
+ all ((9==) • length) acht = consider b2
+ | otherwise = do
+ stderr.println ("skipped line: " ++ s)
+ process ss
+ where
+ acht = take 8 ss
+ neun = fold (++) "" (s:acht)
+ b1 = zip positions (decode s)
+ b2 = zip positions (decode neun)
+ consider b = do
+ -- print "Puzzle: "
+ -- printb b
+ bs <- process ss
+ return (b:bs)
+
diff --git a/samples/Frege/SwingExamples.fr b/samples/Frege/SwingExamples.fr
new file mode 100644
index 00000000..73569546
--- /dev/null
+++ b/samples/Frege/SwingExamples.fr
@@ -0,0 +1,79 @@
+package examples.SwingExamples where
+
+import Java.Awt (ActionListener)
+import Java.Swing
+
+
+main _ = do
+ rs <- mapM Runnable.new [helloWorldGUI, buttonDemoGUI, celsiusConverterGUI]
+ mapM_ invokeLater rs
+ println "Hit enter to end ...."
+ s <- getLine
+ return ()
+
+celsiusConverterGUI = do
+ tempTextField <- JTextField.new()
+ celsiusLabel <- JLabel.new ()
+ convertButton <- JButton.new ()
+ fahrenheitLabel <- JLabel.new ()
+ frame <- JFrame.new ()
+ frame.setDefaultCloseOperation JFrame.dispose_on_close
+ frame.setTitle "Celsius Converter"
+ celsiusLabel.setText "Celsius"
+ convertButton.setText "Convert"
+ let convertButtonActionPerformed _ = do
+ celsius <- tempTextField.getText
+ case celsius.double of
+ Left _ -> fahrenheitLabel.setText ("not a valid number: " ++ celsius)
+ Right c -> fahrenheitLabel.setText (show (c*1.8 + 32.0).long ++ " Fahrenheit")
+ return ()
+ ActionListener.new convertButtonActionPerformed >>= convertButton.addActionListener
+ fahrenheitLabel.setText "Fahrenheit"
+ contentPane <- frame.getContentPane
+ layout <- GroupLayout.new contentPane
+ contentPane.setLayout layout
+ -- TODO continue
+ -- http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/learn/CelsiusConverterProject/src/learn/CelsiusConverterGUI.java
+ frame.pack
+ frame.setVisible true
+
+helloWorldGUI = do
+ frame <- JFrame.new "Hello World Frege"
+ frame.setDefaultCloseOperation(JFrame.dispose_on_close)
+ label <- JLabel.new "Hello World!"
+ cp <- frame.getContentPane
+ cp.add label
+ frame.pack
+ frame.setVisible true
+
+buttonDemoGUI = do
+ frame <- JFrame.new "Button Demo"
+ frame.setDefaultCloseOperation(JFrame.dispose_on_close)
+ newContentPane <- JPanel.new ()
+ b1::JButton <- JButton.new "Disable middle button"
+ b1.setVerticalTextPosition SwingConstants.center
+ b1.setHorizontalTextPosition SwingConstants.leading
+ b2::JButton <- JButton.new "Middle button"
+ b2.setVerticalTextPosition SwingConstants.center
+ b2.setHorizontalTextPosition SwingConstants.leading
+ b3::JButton <- JButton.new "Enable middle button"
+ b3.setVerticalTextPosition SwingConstants.center
+ b3.setHorizontalTextPosition SwingConstants.leading
+ b3.setEnabled false
+ let action1 _ = do
+ b2.setEnabled false
+ b1.setEnabled false
+ b3.setEnabled true
+ action3 _ = do
+ b2.setEnabled true
+ b1.setEnabled true
+ b3.setEnabled false
+ ActionListener.new action1 >>= b1.addActionListener
+ ActionListener.new action3 >>= b3.addActionListener
+ newContentPane.add b1
+ newContentPane.add b2
+ newContentPane.add b3
+ newContentPane.setOpaque true
+ frame.setContentPane newContentPane
+ frame.pack
+ frame.setVisible true
diff --git a/samples/GAMS/transport.gms b/samples/GAMS/transport.gms
new file mode 100644
index 00000000..fb6ccbc9
--- /dev/null
+++ b/samples/GAMS/transport.gms
@@ -0,0 +1,76 @@
+*Basic example of transport model from GAMS model library
+
+$Title A Transportation Problem (TRNSPORT,SEQ=1)
+$Ontext
+
+This problem finds a least cost shipping schedule that meets
+requirements at markets and supplies at factories.
+
+
+Dantzig, G B, Chapter 3.3. In Linear Programming and Extensions.
+Princeton University Press, Princeton, New Jersey, 1963.
+
+This formulation is described in detail in:
+Rosenthal, R E, Chapter 2: A GAMS Tutorial. In GAMS: A User's Guide.
+The Scientific Press, Redwood City, California, 1988.
+
+The line numbers will not match those in the book because of these
+comments.
+
+$Offtext
+
+
+ Sets
+ i canning plants / seattle, san-diego /
+ j markets / new-york, chicago, topeka / ;
+ Parameters
+ a(i) capacity of plant i in cases
+ / seattle 350
+ san-diego 600 /
+ b(j) demand at market j in cases
+ / new-york 325
+ chicago 300
+ topeka 275 / ;
+ Table d(i,j) distance in thousands of miles
+ new-york chicago topeka
+ seattle 2.5 1.7 1.8
+ san-diego 2.5 1.8 1.4 ;
+ Scalar f freight in dollars per case per thousand miles /90/ ;
+ Parameter c(i,j) transport cost in thousands of dollars per case ;
+ c(i,j) = f * d(i,j) / 1000 ;
+ Variables
+ x(i,j) shipment quantities in cases
+ z total transportation costs in thousands of dollars ;
+
+ Positive Variable x ;
+
+ Equations
+ cost define objective function
+ supply(i) observe supply limit at plant i
+ demand(j) satisfy demand at market j ;
+
+ cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
+
+ supply(i) .. sum(j, x(i,j)) =l= a(i) ;
+
+ demand(j) .. sum(i, x(i,j)) =g= b(j) ;
+
+ Model transport /all/ ;
+
+ Solve transport using lp minimizing z ;
+
+ Display x.l, x.m ;
+
+$ontext
+#user model library stuff
+Main topic Basic GAMS
+Featured item 1 Trnsport model
+Featured item 2
+Featured item 3
+Featured item 4
+Description
+Basic example of transport model from GAMS model library
+
+
+
+$offtext
\ No newline at end of file
diff --git a/samples/GAP/Magic.gd b/samples/GAP/Magic.gd
new file mode 100644
index 00000000..cdd8baec
--- /dev/null
+++ b/samples/GAP/Magic.gd
@@ -0,0 +1,307 @@
+#############################################################################
+##
+## Magic.gd AutoDoc package
+##
+## Copyright 2013, Max Horn, JLU Giessen
+## Sebastian Gutsche, University of Kaiserslautern
+##
+#############################################################################
+
+
+#! @Description
+#! This is the main function of the &AutoDoc; package. It can perform
+#! any combination of the following three tasks:
+#!
+#! -
+#! It can (re)generate a scaffold for your package manual.
+#! That is, it can produce two XML files in &GAPDoc; format to be used as part
+#! of your manual: First, a file named
doc/PACKAGENAME.xml
+#! (with your package's name substituted) which is used as
+#! main file for the package manual, i.e. this file sets the
+#! XML DOCTYPE and defines various XML entities, includes
+#! other XML files (both those generated by &AutoDoc; as well
+#! as additional files created by other means), tells &GAPDoc;
+#! to generate a table of content and an index, and more.
+#! Secondly, it creates a file doc/title.xml containing a title
+#! page for your documentation, with information about your package
+#! (name, description, version), its authors and more, based
+#! on the data in your PackageInfo.g .
+#!
+#! -
+#! It can scan your package for &AutoDoc; based documentation (by using &AutoDoc;
+#! tags and the Autodoc command.
+#! This will
+#! produce further XML files to be used as part of the package manual.
+#!
+#! -
+#! It can use &GAPDoc; to generate PDF, text and HTML (with
+#! MathJaX enabled) documentation from the &GAPDoc; XML files it
+#! generated as well as additional such files provided by you. For
+#! this, it invokes
+#! to convert the XML sources, and it also instructs &GAPDoc; to copy
+#! supplementary files (such as CSS style files) into your doc directory
+#! (see ).
+#!
+#!
+#! For more information and some examples, please refer to Chapter .
+#!
+#! The parameters have the following meanings:
+#!
+#!
+#! package_name
+#! -
+#! The name of the package whose documentation should be(re)generated.
+#!
+#!
+#!
+#! option_record
+#! -
+#! option_record can be a record with some additional options.
+#! The following are currently supported:
+#!
+#! dir
+#! -
+#! This should be a string containing a (relative) path or a
+#! Directory() object specifying where the package documentation
+#! (i.e. the &GAPDoc; XML files) are stored.
+#!
+#! Default value: "doc/" .
+#!
+#! scaffold
+#! -
+#! This controls whether and how to generate scaffold XML files
+#! for the main and title page of the package's documentation.
+#!
+#! The value should be either
true , false or a
+#! record. If it is a record or true (the latter is
+#! equivalent to specifying an empty record), then this feature is
+#! enabled. It is also enabled if opt.scaffold is missing but the
+#! package's info record in PackageInfo.g has an AutoDoc entry.
+#! In all other cases (in particular if opt.scaffold is
+#! false ), scaffolding is disabled.
+#!
+#!
+#! If opt.scaffold is a record, it may contain the following entries.
+#!
+#### TODO: mention merging with PackageInfo.AutoDoc!
+#!
+#!
+#! includes
+#! -
+#! A list of XML files to be included in the body of the main XML file.
+#! If you specify this list and also are using &AutoDoc; to document
+#! your operations with &AutoDoc; comments,
+#! you can add
AutoDocMainFile.xml to this list
+#! to control at which point the documentation produced by &AutoDoc;
+#! is inserted. If you do not do this, it will be added after the last
+#! of your own XML files.
+#!
+#!
+#! appendix
+#! -
+#! This entry is similar to opt.scaffold.includes but is used
+#! to specify files to include after the main body of the manual,
+#! i.e. typically appendices.
+#!
+#!
+#! bib
+#! -
+#! The name of a bibliography file, in Bibtex or XML format.
+#! If this key is not set, but there is a file
doc/PACKAGENAME.bib
+#! then it is assumed that you want to use this as your bibliography.
+#!
+#!
+#### TODO: The 'entities' param is a bit strange. We should probably change it to be a bit more
+#### general, as one might want to define other entities... For now, we do not document it
+#### to leave us the choice of revising how it works.
+####
+#### entities
+#### -
+#### A list of package names or other entities which are used to define corresponding XML entities.
+#### For example, if set to a list containing the string
SomePackage
,
+#### then the following is added to the XML preamble:
+#### SomePackage'>]]>
+#### This allows you to write &SomePackage;
in your documentation
+#### to reference that package. If another type of entity is desired, one can simply add,
+#### instead of a string, add a two entry list a to the list. It will be handled as
+#### a[ 2 ]'>]]> ,
+#### so please be careful.
+####
+#!
+#! TitlePage
+#! -
+#! A record whose entries are used to embellish the generated titlepage
+#! for the package manual with extra information, such as a copyright
+#! statement or acknowledgments. To this end, the names of the record
+#! components are used as XML element names, and the values of the
+#! components are outputted as content of these XML elements. For
+#! example, you could pass the following record to set a custom
+#! acknowledgements text:
+#!
+#! For a list of valid entries in the titlepage, please refer to the
+#! &GAPDoc; manual, specifically section
+#! and following.
+#!
+#! document_class
+#! -
+#! Sets the document class of the resulting pdf. The value can either be a string
+#! which has to be the name of the new document class, a list containing this string, or
+#! a list of two strings. Then the first one has to be the document class name, the second one
+#! the option string ( contained in [ ] ) in LaTeX.
+#!
+#! latex_header_file
+#! -
+#! Replaces the standard header from &GAPDoc; completely with the header in this LaTeX file.
+#! Please be careful here, and look at GAPDoc's latexheader.tex file for an example.
+#!
+#! gapdoc_latex_options
+#! -
+#! Must be a record with entries which can be understood by SetGapDocLaTeXOptions. Each entry can be a string, which
+#! will be given to &GAPDoc; directly, or a list containing of two entries: The first one must be the string "file",
+#! the second one a filename. This file will be read and then its content is passed to &GAPDoc; as option with the name
+#! of the entry.
+#!
+#!
+#!
+#!
+#!
+#!
+#! autodoc
+#! -
+#! This controls whether and how to generate addition XML documentation files
+#! by scanning for &AutoDoc; documentation comments.
+#!
+#! The value should be either
true , false or a
+#! record. If it is a record or true (the latter is
+#! equivalent to specifying an empty record), then this feature is
+#! enabled. It is also enabled if opt.autodoc is missing but the
+#! package depends (directly) on the &AutoDoc; package.
+#! In all other cases (in particular if opt.autodoc is
+#! false ), this feature is disabled.
+#!
+#!
+#! If opt.autodoc is a record, it may contain the following entries.
+#!
+#!
+#!
+#! files
+#! -
+#! A list of files (given by paths relative to the package directory)
+#! to be scanned for &AutoDoc; documentation comments.
+#! Usually it is more convenient to use autodoc.scan_dirs, see below.
+#!
+#!
+#! scan_dirs
+#! -
+#! A list of subdirectories of the package directory (given as relative paths)
+#! which &AutoDoc; then scans for .gi, .gd and .g files; all of these files
+#! are then scanned for &AutoDoc; documentation comments.
+#!
+#! Default value: [ "gap", "lib", "examples", "examples/doc" ] .
+#!
+#!
+#! level
+#! -
+#! This defines the level of the created documentation. The default value is 0.
+#! When parts of the manual are declared with a higher value
+#! they will not be printed into the manual.
+#!
+#!
+#### TODO: Document section_intros later on.
+#### However, note that thanks to the new AutoDoc comment syntax, the only remaining
+#### use for this seems to be the ability to specify the order of chapters and
+#### sections.
+#### section_intros
+#### -
+#### TODO.
+####
+#!
+#!
+#!
+#!
+#!
+#! gapdoc
+#! -
+#! This controls whether and how to invoke &GAPDoc; to create HTML, PDF and text
+#! files from your various XML files.
+#!
+#! The value should be either
true , false or a
+#! record. If it is a record or true (the latter is
+#! equivalent to specifying an empty record), then this feature is
+#! enabled. It is also enabled if opt.gapdoc is missing.
+#! In all other cases (in particular if opt.gapdoc is
+#! false ), this feature is disabled.
+#!
+#!
+#! If opt.gapdoc is a record, it may contain the following entries.
+#!
+#!
+#!
+#!
+#### Note: 'main' is strictly speaking also used for the scaffold.
+#### However, if one uses the scaffolding mechanism, then it is not
+#### really necessary to specify a custom name for the main XML file.
+#### Thus, the purpose of this parameter is to cater for packages
+#### that have existing documentation using a different XML name,
+#### and which do not wish to use scaffolding.
+####
+#### This explain why we only allow specifying gapdoc.main.
+#### The scaffolding code will still honor it, though, just in case.
+#! main
+#! -
+#! The name of the main XML file of the package manual.
+#! This exists primarily to support packages with existing manual
+#! which use a filename here which differs from the default.
+#! In particular, specifying this is unnecessary when using scaffolding.
+#!
+#! Default value: PACKAGENAME.xml .
+#!
+#!
+#! files
+#! -
+#! A list of files (given by paths relative to the package directory)
+#! to be scanned for &GAPDoc; documentation comments.
+#! Usually it is more convenient to use gapdoc.scan_dirs, see below.
+#!
+#!
+#! scan_dirs
+#! -
+#! A list of subdirectories of the package directory (given as relative paths)
+#! which &AutoDoc; then scans for .gi, .gd and .g files; all of these files
+#! are then scanned for &GAPDoc; documentation comments.
+#!
+#! Default value: [ "gap", "lib", "examples", "examples/doc" ] .
+#!
+#!
+#!
+#!
+## This is the maketest part. Still under construction.
+#! maketest
+#! -
+#! The maketest item can be true or a record. When it is true,
+#! a simple maketest.g is created in the main package directory,
+#! which can be used to test the examples from the manual. As a record,
+#! the entry can have the following entries itself, to specify some options.
+#!
+#! filename
+#! -
+#! Sets the name of the test file.
+#!
+#! commands
+#! -
+#! A list of strings, each one a command, which
+#! will be executed at the beginning of the test file.
+#!
+#!
+#!
+#!
+#!
+#!
+#!
+#!
+#! @Returns nothing
+#! @Arguments package_name[, option_record ]
+#! @ChapterInfo AutoDoc, The AutoDoc() function
+DeclareGlobalFunction( "AutoDoc" );
+
diff --git a/samples/GAP/Magic.gi b/samples/GAP/Magic.gi
new file mode 100644
index 00000000..5202a1de
--- /dev/null
+++ b/samples/GAP/Magic.gi
@@ -0,0 +1,534 @@
+#############################################################################
+##
+## Magic.gi AutoDoc package
+##
+## Copyright 2013, Max Horn, JLU Giessen
+## Sebastian Gutsche, University of Kaiserslautern
+##
+#############################################################################
+
+# Check if a string has the given suffix or not. Another
+# name for this would "StringEndsWithOtherString".
+# For example, AUTODOC_HasSuffix("file.gi", ".gi") returns
+# true while AUTODOC_HasSuffix("file.txt", ".gi") returns false.
+BindGlobal( "AUTODOC_HasSuffix",
+function(str, suffix)
+ local n, m;
+ n := Length(str);
+ m := Length(suffix);
+ return n >= m and str{[n-m+1..n]} = suffix;
+end );
+
+# Given a string containing a ".", , return its suffix,
+# i.e. the bit after the last ".". For example, given "test.txt",
+# it returns "txt".
+BindGlobal( "AUTODOC_GetSuffix",
+function(str)
+ local i;
+ i := Length(str);
+ while i > 0 and str[i] <> '.' do i := i - 1; od;
+ if i < 0 then return ""; fi;
+ return str{[i+1..Length(str)]};
+end );
+
+# Check whether the given directory exists, and if not, attempt
+# to create it.
+BindGlobal( "AUTODOC_CreateDirIfMissing",
+function(d)
+ local tmp;
+ if not IsDirectoryPath(d) then
+ tmp := CreateDir(d); # Note: CreateDir is currently undocumented
+ if tmp = fail then
+ Error("Cannot create directory ", d, "\n",
+ "Error message: ", LastSystemError().message, "\n");
+ return false;
+ fi;
+ fi;
+ return true;
+end );
+
+
+# Scan the given (by name) subdirs of a package dir for
+# files with one of the given extensions, and return the corresponding
+# filenames, as relative paths (relative to the package dir).
+#
+# For example, the invocation
+# AUTODOC_FindMatchingFiles("AutoDoc", [ "gap/" ], [ "gi", "gd" ]);
+# might return a list looking like
+# [ "gap/AutoDocMainFunction.gd", "gap/AutoDocMainFunction.gi", ... ]
+BindGlobal( "AUTODOC_FindMatchingFiles",
+function (pkg, subdirs, extensions)
+ local d_rel, d, tmp, files, result;
+
+ result := [];
+
+ for d_rel in subdirs do
+ # Get the absolute path to the directory in side the package...
+ d := DirectoriesPackageLibrary( pkg, d_rel );
+ if IsEmpty( d ) then
+ continue;
+ fi;
+ d := d[1];
+ # ... but also keep the relative path (such as "gap")
+ d_rel := Directory( d_rel );
+
+ files := DirectoryContents( d );
+ Sort( files );
+ for tmp in files do
+ if not AUTODOC_GetSuffix( tmp ) in [ "g", "gi", "gd", "autodoc" ] then
+ continue;
+ fi;
+ if not IsReadableFile( Filename( d, tmp ) ) then
+ continue;
+ fi;
+ Add( result, Filename( d_rel, tmp ) );
+ od;
+ od;
+ return result;
+end );
+
+
+# AutoDoc(pkg[, opt])
+#
+## Make this function callable with the package_name AutoDocWorksheet.
+## Which will then create a worksheet!
+InstallGlobalFunction( AutoDoc,
+function( arg )
+ local pkg, package_info, opt, scaffold, gapdoc, maketest,
+ autodoc, pkg_dir, doc_dir, doc_dir_rel, d, tmp,
+ title_page, tree, is_worksheet, position_document_class, i, gapdoc_latex_option_record;
+
+ pkg := arg[1];
+
+ if LowercaseString( pkg ) = "autodocworksheet" then
+ is_worksheet := true;
+ package_info := rec( );
+ pkg_dir := DirectoryCurrent( );
+ else
+ is_worksheet := false;
+ package_info := PackageInfo( pkg )[ 1 ];
+ pkg_dir := DirectoriesPackageLibrary( pkg, "" )[1];
+ fi;
+
+ if Length(arg) >= 2 then
+ opt := arg[2];
+ else
+ opt := rec();
+ fi;
+
+ # Check for certain user supplied options, and if present, add them
+ # to the opt record.
+ tmp := function( key )
+ local val;
+ val := ValueOption( key );
+ if val <> fail then
+ opt.(key) := val;
+ fi;
+ end;
+
+ tmp( "dir" );
+ tmp( "scaffold" );
+ tmp( "autodoc" );
+ tmp( "gapdoc" );
+ tmp( "maketest" );
+
+ #
+ # Setup the output directory
+ #
+ if not IsBound( opt.dir ) then
+ doc_dir := "doc";
+ elif IsString( opt.dir ) or IsDirectory( opt.dir ) then
+ doc_dir := opt.dir;
+ else
+ Error( "opt.dir must be a string containing a path, or a directory object" );
+ fi;
+
+ if IsString( doc_dir ) then
+ # Record the relative version of the path
+ doc_dir_rel := Directory( doc_dir );
+
+ # We intentionally do not use
+ # DirectoriesPackageLibrary( pkg, "doc" )
+ # because it returns an empty list if the subdirectory is missing.
+ # But we want to handle that case by creating the directory.
+ doc_dir := Filename(pkg_dir, doc_dir);
+ doc_dir := Directory(doc_dir);
+
+ else
+ # TODO: doc_dir_rel = ... ?
+ fi;
+
+ # Ensure the output directory exists, create it if necessary
+ AUTODOC_CreateDirIfMissing(Filename(doc_dir, ""));
+
+ # Let the developer know where we are generating the documentation.
+ # This helps diagnose problems where multiple instances of a package
+ # are visible to GAP and the wrong one is used for generating the
+ # documentation.
+ # TODO: Using Info() instead of Print?
+ Print( "Generating documentation in ", doc_dir, "\n" );
+
+ #
+ # Extract scaffolding settings, which can be controlled via
+ # opt.scaffold or package_info.AutoDoc. The former has precedence.
+ #
+ if not IsBound(opt.scaffold) then
+ # Default: enable scaffolding if and only if package_info.AutoDoc is present
+ if IsBound( package_info.AutoDoc ) then
+ scaffold := rec( );
+ fi;
+ elif IsRecord(opt.scaffold) then
+ scaffold := opt.scaffold;
+ elif IsBool(opt.scaffold) then
+ if opt.scaffold = true then
+ scaffold := rec();
+ fi;
+ else
+ Error("opt.scaffold must be a bool or a record");
+ fi;
+
+ # Merge package_info.AutoDoc into scaffold
+ if IsBound(scaffold) and IsBound( package_info.AutoDoc ) then
+ AUTODOC_APPEND_RECORD_WRITEONCE( scaffold, package_info.AutoDoc );
+ fi;
+
+ if IsBound( scaffold ) then
+ AUTODOC_WriteOnce( scaffold, "TitlePage", true );
+ AUTODOC_WriteOnce( scaffold, "MainPage", true );
+ fi;
+
+
+ #
+ # Extract AutoDoc settings
+ #
+ if not IsBound(opt.autodoc) and not is_worksheet then
+ # Enable AutoDoc support if the package depends on AutoDoc.
+ tmp := Concatenation( package_info.Dependencies.NeededOtherPackages,
+ package_info.Dependencies.SuggestedOtherPackages );
+ if ForAny( tmp, x -> LowercaseString(x[1]) = "autodoc" ) then
+ autodoc := rec();
+ fi;
+ elif IsRecord(opt.autodoc) then
+ autodoc := opt.autodoc;
+ elif IsBool(opt.autodoc) and opt.autodoc = true then
+ autodoc := rec();
+ fi;
+
+ if IsBound(autodoc) then
+ if not IsBound( autodoc.files ) then
+ autodoc.files := [ ];
+ fi;
+
+ if not IsBound( autodoc.scan_dirs ) and not is_worksheet then
+ autodoc.scan_dirs := [ "gap", "lib", "examples", "examples/doc" ];
+ elif not IsBound( autodoc.scan_dirs ) and is_worksheet then
+ autodoc.scan_dirs := [ ];
+ fi;
+
+ if not IsBound( autodoc.level ) then
+ autodoc.level := 0;
+ fi;
+
+ PushOptions( rec( level_value := autodoc.level ) );
+
+ if not is_worksheet then
+ Append( autodoc.files, AUTODOC_FindMatchingFiles(pkg, autodoc.scan_dirs, [ "g", "gi", "gd" ]) );
+ fi;
+ fi;
+
+ #
+ # Extract GAPDoc settings
+ #
+ if not IsBound( opt.gapdoc ) then
+ # Enable GAPDoc support by default
+ gapdoc := rec();
+ elif IsRecord( opt.gapdoc ) then
+ gapdoc := opt.gapdoc;
+ elif IsBool( opt.gapdoc ) and opt.gapdoc = true then
+ gapdoc := rec();
+ fi;
+
+ #
+ # Extract test settings
+ #
+
+ if IsBound( opt.maketest ) then
+ if IsRecord( opt.maketest ) then
+ maketest := opt.maketest;
+ elif opt.maketest = true then
+ maketest := rec( );
+ fi;
+ fi;
+
+ if IsBound( gapdoc ) then
+
+ if not IsBound( gapdoc.main ) then
+ gapdoc.main := pkg;
+ fi;
+
+ # FIXME: the following may break if a package uses more than one book
+ if IsBound( package_info.PackageDoc ) and IsBound( package_info.PackageDoc[1].BookName ) then
+ gapdoc.bookname := package_info.PackageDoc[1].BookName;
+ elif not is_worksheet then
+ # Default: book name = package name
+ gapdoc.bookname := pkg;
+
+ Print("\n");
+ Print("WARNING: PackageInfo.g is missing a PackageDoc entry!\n");
+ Print("Without this, your package manual will not be recognized by the GAP help system.\n");
+ Print("You can correct this by adding the following to your PackageInfo.g:\n");
+ Print("PackageDoc := rec(\n");
+ Print(" BookName := ~.PackageName,\n");
+ #Print(" BookName := \"", pkg, "\",\n");
+ Print(" ArchiveURLSubset := [\"doc\"],\n");
+ Print(" HTMLStart := \"doc/chap0.html\",\n");
+ Print(" PDFFile := \"doc/manual.pdf\",\n");
+ Print(" SixFile := \"doc/manual.six\",\n");
+ Print(" LongTitle := ~.Subtitle,\n");
+ Print("),\n");
+ Print("\n");
+ fi;
+
+ if not IsBound( gapdoc.files ) then
+ gapdoc.files := [];
+ fi;
+
+ if not IsBound( gapdoc.scan_dirs ) and not is_worksheet then
+ gapdoc.scan_dirs := [ "gap", "lib", "examples", "examples/doc" ];
+ fi;
+
+ if not is_worksheet then
+ Append( gapdoc.files, AUTODOC_FindMatchingFiles(pkg, gapdoc.scan_dirs, [ "g", "gi", "gd" ]) );
+ fi;
+
+ # Attempt to weed out duplicates as they may confuse GAPDoc (this
+ # won't work if there are any non-normalized paths in the list).
+ gapdoc.files := Set( gapdoc.files );
+
+ # Convert the file paths in gapdoc.files, which are relative to
+ # the package directory, to paths which are relative to the doc directory.
+ # For this, we assume that doc_dir_rel is normalized (e.g.
+ # it does not contains '//') and relative.
+ d := Number( Filename( doc_dir_rel, "" ), x -> x = '/' );
+ d := Concatenation( ListWithIdenticalEntries(d, "../") );
+ gapdoc.files := List( gapdoc.files, f -> Concatenation( d, f ) );
+ fi;
+
+
+ # read tree
+ # FIXME: shouldn't tree be declared inside of an 'if IsBound(autodoc)' section?
+ tree := DocumentationTree( );
+
+ if IsBound( autodoc ) then
+ if IsBound( autodoc.section_intros ) then
+ AUTODOC_PROCESS_INTRO_STRINGS( autodoc.section_intros : Tree := tree );
+ fi;
+
+ AutoDocScanFiles( autodoc.files : PackageName := pkg, Tree := tree );
+ fi;
+
+ if is_worksheet then
+ # FIXME: We use scaffold and autodoc here without checking whether
+ # they are bound. Does that mean worksheets always use them?
+ if IsRecord( scaffold.TitlePage ) and IsBound( scaffold.TitlePage.Title ) then
+ pkg := scaffold.TitlePage.Title;
+
+ elif IsBound( tree!.TitlePage.Title ) then
+ pkg := tree!.TitlePage.Title;
+
+ elif IsBound( autodoc.files ) and Length( autodoc.files ) > 0 then
+ pkg := autodoc.files[ 1 ];
+
+ while Position( pkg, '/' ) <> fail do
+ Remove( pkg, 1 );
+ od;
+
+ while Position( pkg, '.' ) <> fail do
+ Remove( pkg, Length( pkg ) );
+ od;
+
+ else
+ Error( "could not figure out a title." );
+ fi;
+
+ if not IsString( pkg ) then
+ pkg := JoinStringsWithSeparator( pkg, " " );
+ fi;
+
+ gapdoc.main := ReplacedString( pkg, " ", "_" );
+ gapdoc.bookname := ReplacedString( pkg, " ", "_" );
+ fi;
+
+ #
+ # Generate scaffold
+ #
+ gapdoc_latex_option_record := rec( );
+
+ if IsBound( scaffold ) then
+ ## Syntax is [ "class", [ "options" ] ]
+ if IsBound( scaffold.document_class ) then
+ position_document_class := PositionSublist( GAPDoc2LaTeXProcs.Head, "documentclass" );
+
+ if IsString( scaffold.document_class ) then
+ scaffold.document_class := [ scaffold.document_class ];
+ fi;
+
+ if position_document_class = fail then
+ Error( "something is wrong with the LaTeX header" );
+ fi;
+
+ GAPDoc2LaTeXProcs.Head := Concatenation(
+ GAPDoc2LaTeXProcs.Head{[ 1 .. PositionSublist( GAPDoc2LaTeXProcs.Head, "{", position_document_class ) ]},
+ scaffold.document_class[ 1 ],
+ GAPDoc2LaTeXProcs.Head{[ PositionSublist( GAPDoc2LaTeXProcs.Head, "}", position_document_class ) .. Length( GAPDoc2LaTeXProcs.Head ) ]} );
+
+ if Length( scaffold.document_class ) = 2 then
+
+ GAPDoc2LaTeXProcs.Head := Concatenation(
+ GAPDoc2LaTeXProcs.Head{[ 1 .. PositionSublist( GAPDoc2LaTeXProcs.Head, "[", position_document_class ) ]},
+ scaffold.document_class[ 2 ],
+ GAPDoc2LaTeXProcs.Head{[ PositionSublist( GAPDoc2LaTeXProcs.Head, "]", position_document_class ) .. Length( GAPDoc2LaTeXProcs.Head ) ]} );
+ fi;
+ fi;
+
+ if IsBound( scaffold.latex_header_file ) then
+ GAPDoc2LaTeXProcs.Head := StringFile( scaffold.latex_header_file );
+ fi;
+
+ if IsBound( scaffold.gapdoc_latex_options ) then
+ if IsRecord( scaffold.gapdoc_latex_options ) then
+ for i in RecNames( scaffold.gapdoc_latex_options ) do
+ if not IsString( scaffold.gapdoc_latex_options.( i ) )
+ and IsList( scaffold.gapdoc_latex_options.( i ) )
+ and LowercaseString( scaffold.gapdoc_latex_options.( i )[ 1 ] ) = "file" then
+ scaffold.gapdoc_latex_options.( i ) := StringFile( scaffold.gapdoc_latex_options.( i )[ 2 ] );
+ fi;
+ od;
+
+ gapdoc_latex_option_record := scaffold.gapdoc_latex_options;
+ fi;
+ fi;
+
+ if not IsBound( scaffold.includes ) then
+ scaffold.includes := [ ];
+ fi;
+
+ if IsBound( autodoc ) then
+ # If scaffold.includes is already set, then we add
+ # AutoDocMainFile.xml to it, but *only* if it not already
+ # there. This way, package authors can control where
+ # it is put in their includes list.
+ if not "AutoDocMainFile.xml" in scaffold.includes then
+ Add( scaffold.includes, "AutoDocMainFile.xml" );
+ fi;
+ fi;
+
+ if IsBound( scaffold.bib ) and IsBool( scaffold.bib ) then
+ if scaffold.bib = true then
+ scaffold.bib := Concatenation( pkg, ".bib" );
+ else
+ Unbind( scaffold.bib );
+ fi;
+ elif not IsBound( scaffold.bib ) then
+ # If there is a doc/PKG.bib file, assume that we want to reference it in the scaffold.
+ if IsReadableFile( Filename( doc_dir, Concatenation( pkg, ".bib" ) ) ) then
+ scaffold.bib := Concatenation( pkg, ".bib" );
+ fi;
+ fi;
+
+ AUTODOC_WriteOnce( scaffold, "index", true );
+
+ if IsBound( gapdoc ) then
+ if AUTODOC_GetSuffix( gapdoc.main ) = "xml" then
+ scaffold.main_xml_file := gapdoc.main;
+ else
+ scaffold.main_xml_file := Concatenation( gapdoc.main, ".xml" );
+ fi;
+ fi;
+
+ # TODO: It should be possible to only rebuild the title page. (Perhaps also only the main page? but this is less important)
+ if IsBound( scaffold.TitlePage ) then
+ if IsRecord( scaffold.TitlePage ) then
+ title_page := scaffold.TitlePage;
+ else
+ title_page := rec( );
+ fi;
+
+ AUTODOC_WriteOnce( title_page, "dir", doc_dir );
+ AUTODOC_APPEND_RECORD_WRITEONCE( title_page, tree!.TitlePage );
+
+ if not is_worksheet then
+ AUTODOC_APPEND_RECORD_WRITEONCE( title_page, ExtractTitleInfoFromPackageInfo( pkg ) );
+ fi;
+
+ CreateTitlePage( title_page );
+ fi;
+
+ if IsBound( scaffold.MainPage ) and scaffold.MainPage <> false then
+ scaffold.dir := doc_dir;
+ scaffold.book_name := pkg;
+ CreateMainPage( scaffold );
+ fi;
+ fi;
+
+ #
+ # Run AutoDoc
+ #
+ if IsBound( autodoc ) then
+ WriteDocumentation( tree, doc_dir );
+ fi;
+
+
+ #
+ # Run GAPDoc
+ #
+ if IsBound( gapdoc ) then
+
+ # Ask GAPDoc to use UTF-8 as input encoding for LaTeX, as the XML files
+ # of the documentation are also in UTF-8 encoding, and may contain characters
+ # not contained in the default Latin 1 encoding.
+ SetGapDocLaTeXOptions( "utf8", gapdoc_latex_option_record );
+
+ MakeGAPDocDoc( doc_dir, gapdoc.main, gapdoc.files, gapdoc.bookname, "MathJax" );
+
+ CopyHTMLStyleFiles( Filename( doc_dir, "" ) );
+
+ # The following (undocumented) API is there for compatibility
+ # with old-style gapmacro.tex based package manuals. It
+ # produces a manual.lab file which those packages can use if
+ # they wish to link to things in the manual we are currently
+ # generating. This can probably be removed eventually, but for
+ # now, doing it does not hurt.
+
+ # FIXME: It seems that this command does not work if pdflatex
+ # is not present. Maybe we should remove it.
+
+ if not is_worksheet then
+ GAPDocManualLab( pkg );
+ fi;
+
+ fi;
+
+ if IsBound( maketest ) then
+
+ AUTODOC_WriteOnce( maketest, "filename", "maketest.g" );
+ AUTODOC_WriteOnce( maketest, "folder", pkg_dir );
+ AUTODOC_WriteOnce( maketest, "scan_dir", doc_dir );
+ AUTODOC_WriteOnce( maketest, "files_to_scan", gapdoc.files );
+
+ if IsString( maketest.folder ) then
+ maketest.folder := Directory( maketest.folder );
+ fi;
+
+ if IsString( maketest.scan_dir ) then
+ maketest.scan_dir := Directory( maketest.scan_dir );
+ fi;
+
+ AUTODOC_WriteOnce( maketest, "commands", [ ] );
+ AUTODOC_WriteOnce( maketest, "book_name", gapdoc.main );
+
+ CreateMakeTest( maketest );
+ fi;
+
+ return true;
+end );
diff --git a/samples/GAP/PackageInfo.g b/samples/GAP/PackageInfo.g
new file mode 100644
index 00000000..68e5ecdb
--- /dev/null
+++ b/samples/GAP/PackageInfo.g
@@ -0,0 +1,115 @@
+#############################################################################
+##
+## PackageInfo.g for the package `cvec' Max Neunhoeffer
+##
+## (created from Frank Lübeck's PackageInfo.g template file)
+##
+
+SetPackageInfo( rec(
+
+PackageName := "cvec",
+Subtitle := "Compact vectors over finite fields",
+Version := "2.5.1",
+Date := "04/04/2014", # dd/mm/yyyy format
+
+## Information about authors and maintainers.
+Persons := [
+ rec(
+ LastName := "Neunhoeffer",
+ FirstNames := "Max",
+ IsAuthor := true,
+ IsMaintainer := false,
+ Email := "neunhoef@mcs.st-and.ac.uk",
+ WWWHome := "http://www-groups.mcs.st-and.ac.uk/~neunhoef/",
+ PostalAddress := Concatenation( [
+ "School of Mathematics and Statistics\n",
+ "University of St Andrews\n",
+ "Mathematical Institute\n",
+ "North Haugh\n",
+ "St Andrews, Fife KY16 9SS\n",
+ "Scotland, UK" ] ),
+ Place := "St Andrews",
+ Institution := "University of St Andrews"
+ ),
+],
+
+## Status information. Currently the following cases are recognized:
+## "accepted" for successfully refereed packages
+## "deposited" for packages for which the GAP developers agreed
+## to distribute them with the core GAP system
+## "dev" for development versions of packages
+## "other" for all other packages
+##
+# Status := "accepted",
+Status := "deposited",
+
+## You must provide the next two entries if and only if the status is
+## "accepted" because is was successfully refereed:
+# format: 'name (place)'
+# CommunicatedBy := "Mike Atkinson (St. Andrews)",
+#CommunicatedBy := "",
+# format: mm/yyyy
+# AcceptDate := "08/1999",
+#AcceptDate := "",
+
+PackageWWWHome := "http://neunhoef.github.io/cvec/",
+README_URL := Concatenation(~.PackageWWWHome, "README"),
+PackageInfoURL := Concatenation(~.PackageWWWHome, "PackageInfo.g"),
+ArchiveURL := Concatenation("https://github.com/neunhoef/cvec/",
+ "releases/download/v", ~.Version,
+ "/cvec-", ~.Version),
+ArchiveFormats := ".tar.gz .tar.bz2",
+
+## Here you must provide a short abstract explaining the package content
+## in HTML format (used on the package overview Web page) and an URL
+## for a Webpage with more detailed information about the package
+## (not more than a few lines, less is ok):
+## Please, use 'GAP' and
+## 'MyPKG' for specifing package names.
+##
+AbstractHTML :=
+ "This package provides an implementation of compact vectors over finite\
+ fields. Contrary to earlier implementations no table lookups are used\
+ but only word-based processor arithmetic. This allows for bigger finite\
+ fields and higher speed.",
+
+PackageDoc := rec(
+ BookName := "cvec",
+ ArchiveURLSubset := ["doc"],
+ HTMLStart := "doc/chap0.html",
+ PDFFile := "doc/manual.pdf",
+ SixFile := "doc/manual.six",
+ LongTitle := "Compact vectors over finite fields",
+),
+
+Dependencies := rec(
+ GAP := ">=4.5.5",
+ NeededOtherPackages := [
+ ["GAPDoc", ">= 1.2"],
+ ["IO", ">= 4.1"],
+ ["orb", ">= 4.2"],
+ ],
+ SuggestedOtherPackages := [],
+ ExternalConditions := []
+),
+
+AvailabilityTest := function()
+ if not "cvec" in SHOW_STAT() and
+ Filename(DirectoriesPackagePrograms("cvec"), "cvec.so") = fail then
+ #Info(InfoWarning, 1, "cvec: kernel cvec functions not available.");
+ return fail;
+ fi;
+ return true;
+end,
+
+## *Optional*, but recommended: path relative to package root to a file which
+## contains as many tests of the package functionality as sensible.
+#TestFile := "tst/testall.g",
+
+## *Optional*: Here you can list some keyword related to the topic
+## of the package.
+Keywords := []
+
+));
+
+
diff --git a/samples/GAP/example.gd b/samples/GAP/example.gd
new file mode 100644
index 00000000..c285ea32
--- /dev/null
+++ b/samples/GAP/example.gd
@@ -0,0 +1,23 @@
+#############################################################################
+##
+#W example.gd
+##
+## This file contains a sample of a GAP declaration file.
+##
+DeclareProperty( "SomeProperty", IsLeftModule );
+DeclareGlobalFunction( "SomeGlobalFunction" );
+
+
+#############################################################################
+##
+#C IsQuuxFrobnicator()
+##
+##
+##
+##
+##
+## Tests whether R is a quux frobnicator.
+##
+##
+##
+DeclareSynonym( "IsQuuxFrobnicator", IsField and IsGroup );
diff --git a/samples/GAP/example.gi b/samples/GAP/example.gi
new file mode 100644
index 00000000..c9c5e55d
--- /dev/null
+++ b/samples/GAP/example.gi
@@ -0,0 +1,64 @@
+#############################################################################
+##
+#W example.gd
+##
+## This file contains a sample of a GAP implementation file.
+##
+
+
+#############################################################################
+##
+#M SomeOperation( )
+##
+## performs some operation on
+##
+InstallMethod( SomeProperty,
+ "for left modules",
+ [ IsLeftModule ], 0,
+ function( M )
+ if IsFreeLeftModule( M ) and not IsTrivial( M ) then
+ return true;
+ fi;
+ TryNextMethod();
+ end );
+
+
+
+#############################################################################
+##
+#F SomeGlobalFunction( )
+##
+## A global variadic funfion.
+##
+InstallGlobalFunction( SomeGlobalFunction, function( arg )
+ if Length( arg ) = 3 then
+ return arg[1] + arg[2] * arg[3];
+ elif Length( arg ) = 2 then
+ return arg[1] - arg[2]
+ else
+ Error( "usage: SomeGlobalFunction( , [, ] )" );
+ fi;
+ end );
+
+
+#
+# A plain function.
+#
+SomeFunc := function(x, y)
+ local z, func, tmp, j;
+ z := x * 1.0;
+ y := 17^17 - y;
+ func := a -> a mod 5;
+ tmp := List( [1..50], func );
+ while y > 0 do
+ for j in tmp do
+ Print(j, "\n");
+ od;
+ repeat
+ y := y - 1;
+ until 0 < 1;
+ y := y -1;
+ od;
+ return z;
+end;
+
\ No newline at end of file
diff --git a/samples/GAP/vspc.gd b/samples/GAP/vspc.gd
new file mode 100644
index 00000000..d381e6f1
--- /dev/null
+++ b/samples/GAP/vspc.gd
@@ -0,0 +1,822 @@
+#############################################################################
+##
+#W vspc.gd GAP library Thomas Breuer
+##
+##
+#Y Copyright (C) 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany
+#Y (C) 1998 School Math and Comp. Sci., University of St Andrews, Scotland
+#Y Copyright (C) 2002 The GAP Group
+##
+## This file declares the operations for vector spaces.
+##
+## The operations for bases of free left modules can be found in the file
+## lib/basis.gd.
+##
+
+
+#############################################################################
+##
+#C IsLeftOperatorRing()
+##
+##
+##
+##
+##
+##
+##
+##
+DeclareSynonym( "IsLeftOperatorRing",
+ IsLeftOperatorAdditiveGroup and IsRing and IsAssociativeLOpDProd );
+#T really?
+
+
+#############################################################################
+##
+#C IsLeftOperatorRingWithOne()
+##
+##
+##
+##
+##
+##
+##
+##
+DeclareSynonym( "IsLeftOperatorRingWithOne",
+ IsLeftOperatorAdditiveGroup and IsRingWithOne
+ and IsAssociativeLOpDProd );
+#T really?
+
+
+#############################################################################
+##
+#C IsLeftVectorSpace( )
+#C IsVectorSpace( )
+##
+## <#GAPDoc Label="IsLeftVectorSpace">
+##
+##
+##
+##
+##
+## A vector space in &GAP; is a free left module
+## (see ) over a division ring
+## (see Chapter ).
+##
+## Whenever we talk about an F -vector space V then V is
+## an additive group (see ) on which the
+## division ring F acts via multiplication from the left such that
+## this action and the addition in V are left and right distributive.
+## The division ring F can be accessed as value of the attribute
+## .
+##
+## Vector spaces in &GAP; are always left vector spaces,
+## and are
+## synonyms.
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "IsLeftVectorSpace",
+ IsLeftModule and IsLeftActedOnByDivisionRing );
+
+DeclareSynonym( "IsVectorSpace", IsLeftVectorSpace );
+
+InstallTrueMethod( IsFreeLeftModule,
+ IsLeftModule and IsLeftActedOnByDivisionRing );
+
+
+#############################################################################
+##
+#F IsGaussianSpace( )
+##
+## <#GAPDoc Label="IsGaussianSpace">
+##
+##
+##
+##
+## The filter (see )
+## for the row space (see )
+## or matrix space (see ) V
+## over the field F , say,
+## indicates that the entries of all row vectors or matrices in V,
+## respectively, are all contained in F .
+## In this case, V is called a Gaussian vector space.
+## Bases for Gaussian spaces can be computed using Gaussian elimination for
+## a given list of vector space generators.
+## mats:= [ [[1,1],[2,2]], [[3,4],[0,1]] ];;
+## gap> V:= VectorSpace( Rationals, mats );;
+## gap> IsGaussianSpace( V );
+## true
+## gap> mats[1][1][1]:= E(4);; # an element in an extension field
+## gap> V:= VectorSpace( Rationals, mats );;
+## gap> IsGaussianSpace( V );
+## false
+## gap> V:= VectorSpace( Field( Rationals, [ E(4) ] ), mats );;
+## gap> IsGaussianSpace( V );
+## true
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareFilter( "IsGaussianSpace", IsVectorSpace );
+
+InstallTrueMethod( IsGaussianSpace,
+ IsVectorSpace and IsFullMatrixModule );
+
+InstallTrueMethod( IsGaussianSpace,
+ IsVectorSpace and IsFullRowModule );
+
+
+#############################################################################
+##
+#C IsDivisionRing( )
+##
+## <#GAPDoc Label="IsDivisionRing">
+##
+##
+##
+##
+## A division ring in &GAP; is a nontrivial associative algebra
+## D with a multiplicative inverse for each nonzero element.
+## In &GAP; every division ring is a vector space over a division ring
+## (possibly over itself).
+## Note that being a division ring is thus not a property that a ring can
+## get, because a ring is usually not represented as a vector space.
+##
+## The field of coefficients is stored as the value of the attribute
+## of D.
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonymAttr( "IsDivisionRing",
+ IsMagmaWithInversesIfNonzero
+ and IsLeftOperatorRingWithOne
+ and IsLeftVectorSpace
+ and IsNonTrivial
+ and IsAssociative
+ and IsEuclideanRing );
+
+
+#############################################################################
+##
+#A GeneratorsOfLeftVectorSpace( )
+#A GeneratorsOfVectorSpace( )
+##
+## <#GAPDoc Label="GeneratorsOfLeftVectorSpace">
+##
+##
+##
+##
+##
+## For an F -vector space V,
+## returns a list of vectors in
+## V that generate V as an F -vector space.
+## GeneratorsOfVectorSpace( FullRowSpace( Rationals, 3 ) );
+## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ]
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonymAttr( "GeneratorsOfLeftVectorSpace",
+ GeneratorsOfLeftOperatorAdditiveGroup );
+
+DeclareSynonymAttr( "GeneratorsOfVectorSpace",
+ GeneratorsOfLeftOperatorAdditiveGroup );
+
+
+#############################################################################
+##
+#A CanonicalBasis( )
+##
+## <#GAPDoc Label="CanonicalBasis">
+##
+##
+##
+##
+## If the vector space V supports a canonical basis then
+## returns this basis,
+## otherwise fail is returned.
+##
+## The defining property of a canonical basis is that its vectors are
+## uniquely determined by the vector space.
+## If canonical bases exist for two vector spaces over the same left acting
+## domain (see ) then the equality of
+## these vector spaces can be decided by comparing the canonical bases.
+##
+## The exact meaning of a canonical basis depends on the type of V.
+## Canonical bases are defined for example for Gaussian row and matrix
+## spaces (see ).
+##
+## If one designs a new kind of vector spaces
+## (see ) and
+## defines a canonical basis for these spaces then the
+## method one installs
+## (see )
+## must not call .
+## On the other hand, one probably should install a
+## method that simply calls ,
+## the value of the method
+## (see and
+## )
+## being CANONICAL_BASIS_FLAGS .
+## vecs:= [ [ 1, 2, 3 ], [ 1, 1, 1 ], [ 1, 1, 1 ] ];;
+## gap> V:= VectorSpace( Rationals, vecs );;
+## gap> B:= CanonicalBasis( V );
+## CanonicalBasis( )
+## gap> BasisVectors( B );
+## [ [ 1, 0, -1 ], [ 0, 1, 2 ] ]
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareAttribute( "CanonicalBasis", IsFreeLeftModule );
+
+
+#############################################################################
+##
+#F IsRowSpace( )
+##
+## <#GAPDoc Label="IsRowSpace">
+##
+##
+##
+##
+## A row space in &GAP; is a vector space that consists of
+## row vectors (see Chapter ).
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "IsRowSpace", IsRowModule and IsVectorSpace );
+
+
+#############################################################################
+##
+#F IsGaussianRowSpace( )
+##
+##
+##
+##
+##
+## A row space is Gaussian if the left acting domain contains all
+## scalars that occur in the vectors.
+## Thus one can use Gaussian elimination in the calculations.
+##
+## (Otherwise the space is non-Gaussian.
+## We will need a flag for this to write down methods that delegate from
+## non-Gaussian spaces to Gaussian ones.)
+##
+##
+##
+##
+DeclareSynonym( "IsGaussianRowSpace", IsGaussianSpace and IsRowSpace );
+
+
+#############################################################################
+##
+#F IsNonGaussianRowSpace( )
+##
+##
+##
+##
+##
+## If an F -vector space V is in the filter
+## then this expresses that V
+## consists of row vectors (see ) such
+## that not all entries in these row vectors are contained in F
+## (so Gaussian elimination cannot be used to compute an F -basis
+## from a list of vector space generators),
+## and that V is handled via the mechanism of nice bases
+## (see ) in the following way.
+## Let K be the field spanned by the entries of all vectors in
+## V.
+## Then the value of V is
+## a basis B of the field extension K / ( K \cap F ) ,
+## and the value of v \in V
+## is defined by replacing each entry of v by the list of its
+## B -coefficients, and then forming the concatenation.
+##
+## So the associated nice vector space is a Gaussian row space
+## (see ).
+##
+##
+##
+DeclareHandlingByNiceBasis( "IsNonGaussianRowSpace",
+ "for non-Gaussian row spaces" );
+
+
+#############################################################################
+##
+#F IsMatrixSpace( )
+##
+## <#GAPDoc Label="IsMatrixSpace">
+##
+##
+##
+##
+## A matrix space in &GAP; is a vector space that consists of matrices
+## (see Chapter ).
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "IsMatrixSpace", IsMatrixModule and IsVectorSpace );
+
+
+#############################################################################
+##
+#F IsGaussianMatrixSpace( )
+##
+##
+##
+##
+##
+## A matrix space is Gaussian if the left acting domain contains all
+## scalars that occur in the vectors.
+## Thus one can use Gaussian elimination in the calculations.
+##
+## (Otherwise the space is non-Gaussian.
+## We will need a flag for this to write down methods that delegate from
+## non-Gaussian spaces to Gaussian ones.)
+##
+##
+##
+DeclareSynonym( "IsGaussianMatrixSpace", IsGaussianSpace and IsMatrixSpace );
+
+
+#############################################################################
+##
+#F IsNonGaussianMatrixSpace( )
+##
+##
+##
+##
+##
+## If an F -vector space V is in the filter
+##
+## then this expresses that V consists of matrices
+## (see )
+## such that not all entries in these matrices are contained in F
+## (so Gaussian elimination cannot be used to compute an F -basis
+## from a list of vector space generators),
+## and that V is handled via the mechanism of nice bases
+## (see ) in the following way.
+## Let K be the field spanned by the entries of all vectors in V.
+## The value of V is irrelevant,
+## and the value of v \in V
+## is defined as the concatenation of the rows of v .
+##
+## So the associated nice vector space is a (not necessarily Gaussian)
+## row space (see ).
+##
+##
+##
+DeclareHandlingByNiceBasis( "IsNonGaussianMatrixSpace",
+ "for non-Gaussian matrix spaces" );
+
+
+#############################################################################
+##
+#A NormedRowVectors( ) . . . normed vectors in a Gaussian row space
+##
+## <#GAPDoc Label="NormedRowVectors">
+##
+##
+##
+##
+## For a finite Gaussian row space V
+## (see , ),
+## returns a list of those nonzero
+## vectors in V that have a one in the first nonzero component.
+##
+## The result list can be used as action domain for the action of a matrix
+## group via , which yields the natural action on
+## one-dimensional subspaces of V
+## (see also ).
+## vecs:= NormedRowVectors( GF(3)^2 );
+## [ [ 0*Z(3), Z(3)^0 ], [ Z(3)^0, 0*Z(3) ], [ Z(3)^0, Z(3)^0 ],
+## [ Z(3)^0, Z(3) ] ]
+## gap> Action( GL(2,3), vecs, OnLines );
+## Group([ (3,4), (1,2,4) ])
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareAttribute( "NormedRowVectors", IsGaussianSpace );
+
+
+#############################################################################
+##
+#A TrivialSubspace( )
+##
+## <#GAPDoc Label="TrivialSubspace">
+##
+##
+##
+##
+## For a vector space V, returns the
+## subspace of V that consists of the zero vector in V.
+## V:= GF(3)^3;;
+## gap> triv:= TrivialSubspace( V );
+##
+## gap> AsSet( triv );
+## [ [ 0*Z(3), 0*Z(3), 0*Z(3) ] ]
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonymAttr( "TrivialSubspace", TrivialSubmodule );
+
+
+#############################################################################
+##
+#F VectorSpace( , [, ][, "basis"] )
+##
+## <#GAPDoc Label="VectorSpace">
+##
+##
+##
+##
+## For a field F and a collection gens of vectors,
+## returns the F-vector space spanned by
+## the elements in gens.
+##
+## The optional argument zero can be used to specify the zero element
+## of the space; zero must be given if gens is empty.
+## The optional string "basis" indicates that gens is known to
+## be linearly independent over F, in particular the dimension of the
+## vector space is immediately set;
+## note that need not return the basis formed by
+## gens if the string "basis" is given as an argument.
+##
+## V:= VectorSpace( Rationals, [ [ 1, 2, 3 ], [ 1, 1, 1 ] ] );
+##
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareGlobalFunction( "VectorSpace" );
+
+
+#############################################################################
+##
+#F Subspace( , [, "basis"] ) . subspace of generated by
+#F SubspaceNC( , [, "basis"] )
+##
+## <#GAPDoc Label="Subspace">
+##
+##
+##
+##
+##
+## For an F -vector space V and a list or collection
+## gens that is a subset of V,
+## returns the F -vector space spanned by
+## gens; if gens is empty then the trivial subspace
+## (see ) of V is returned.
+## The parent (see ) of the returned vector space
+## is set to V.
+##
+## does the same as ,
+## except that it omits the check whether gens is a subset of
+## V.
+##
+## The optional string "basis" indicates that gens is known to
+## be linearly independent over F .
+## In this case the dimension of the subspace is immediately set,
+## and both and do
+## not check whether gens really is linearly independent and
+## whether gens is a subset of V.
+##
+## V:= VectorSpace( Rationals, [ [ 1, 2, 3 ], [ 1, 1, 1 ] ] );;
+## gap> W:= Subspace( V, [ [ 0, 1, 2 ] ] );
+##
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "Subspace", Submodule );
+
+DeclareSynonym( "SubspaceNC", SubmoduleNC );
+
+
+#############################################################################
+##
+#O AsVectorSpace( , ) . . . . . . . . . view as -vector space
+##
+## <#GAPDoc Label="AsVectorSpace">
+##
+##
+##
+##
+## Let F be a division ring and D a domain.
+## If the elements in D form an F-vector space then
+## returns this F-vector space,
+## otherwise fail is returned.
+##
+## can be used for example to view a given
+## vector space as a vector space over a smaller or larger division ring.
+## V:= FullRowSpace( GF( 27 ), 3 );
+## ( GF(3^3)^3 )
+## gap> Dimension( V ); LeftActingDomain( V );
+## 3
+## GF(3^3)
+## gap> W:= AsVectorSpace( GF( 3 ), V );
+##
+## gap> Dimension( W ); LeftActingDomain( W );
+## 9
+## GF(3)
+## gap> AsVectorSpace( GF( 9 ), V );
+## fail
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "AsVectorSpace", AsLeftModule );
+
+
+#############################################################################
+##
+#O AsSubspace( , ) . . . . . . . . . . . view as subspace of
+##
+## <#GAPDoc Label="AsSubspace">
+##
+##
+##
+##
+## Let V be an F -vector space, and U a collection.
+## If U is a subset of V such that the elements of U
+## form an F -vector space then returns this
+## vector space, with parent set to V
+## (see ).
+## Otherwise fail is returned.
+## V:= VectorSpace( Rationals, [ [ 1, 2, 3 ], [ 1, 1, 1 ] ] );;
+## gap> W:= VectorSpace( Rationals, [ [ 1/2, 1/2, 1/2 ] ] );;
+## gap> U:= AsSubspace( V, W );
+##
+## gap> Parent( U ) = V;
+## true
+## gap> AsSubspace( V, [ [ 1, 1, 1 ] ] );
+## fail
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareOperation( "AsSubspace", [ IsVectorSpace, IsCollection ] );
+
+
+#############################################################################
+##
+#F Intersection2Spaces( , , )
+##
+##
+##
+##
+##
+## is a function that takes two arguments V and W which must
+## be finite dimensional vector spaces,
+## and returns the intersection of V and W.
+##
+## If the left acting domains are different then let F be their
+## intersection.
+## The intersection of V and W is computed as intersection of
+## AsStruct( F, V ) and
+## AsStruct( F, V ) .
+##
+## If the left acting domains are equal to F then the intersection of
+## V and W is returned either as F -Substruct
+## with the common parent of V and W or as
+## F -Struct, in both cases with known basis.
+##
+## This function is used to handle the intersections of two vector spaces,
+## two algebras, two algebras-with-one, two left ideals, two right ideals,
+## two two-sided ideals.
+##
+##
+##
+DeclareGlobalFunction( "Intersection2Spaces" );
+
+
+#############################################################################
+##
+#F FullRowSpace( , )
+##
+## <#GAPDoc Label="FullRowSpace">
+##
+##
+##
+##
+##
+## For a field F and a nonnegative integer n,
+## returns the F-vector space that
+## consists of all row vectors (see ) of
+## length n with entries in F.
+##
+## An alternative to construct this vector space is via
+## F^ n.
+## FullRowSpace( GF( 9 ), 3 );
+## ( GF(3^2)^3 )
+## gap> GF(9)^3; # the same as above
+## ( GF(3^2)^3 )
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "FullRowSpace", FullRowModule );
+DeclareSynonym( "RowSpace", FullRowModule );
+
+
+#############################################################################
+##
+#F FullMatrixSpace( , , )
+##
+## <#GAPDoc Label="FullMatrixSpace">
+##
+##
+##
+##
+##
+## For a field F and two positive integers m and n,
+## returns the F-vector space that
+## consists of all m by n matrices
+## (see ) with entries in F.
+##
+## If m = n then the result is in fact an algebra
+## (see ).
+##
+## An alternative to construct this vector space is via
+## F^[ m,n] .
+## FullMatrixSpace( GF(2), 4, 5 );
+## ( GF(2)^[ 4, 5 ] )
+## gap> GF(2)^[ 4, 5 ]; # the same as above
+## ( GF(2)^[ 4, 5 ] )
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareSynonym( "FullMatrixSpace", FullMatrixModule );
+DeclareSynonym( "MatrixSpace", FullMatrixModule );
+DeclareSynonym( "MatSpace", FullMatrixModule );
+
+
+#############################################################################
+##
+#C IsSubspacesVectorSpace( )
+##
+## <#GAPDoc Label="IsSubspacesVectorSpace">
+##
+##
+##
+##
+## The domain of all subspaces of a (finite) vector space or of all
+## subspaces of fixed dimension, as returned by
+## (see ) lies in the category
+## .
+## D:= Subspaces( GF(3)^3 );
+## Subspaces( ( GF(3)^3 ) )
+## gap> Size( D );
+## 28
+## gap> iter:= Iterator( D );;
+## gap> NextIterator( iter );
+##
+## gap> NextIterator( iter );
+##
+## gap> IsSubspacesVectorSpace( D );
+## true
+## ]]>
+##
+##
+## <#/GAPDoc>
+##
+DeclareCategory( "IsSubspacesVectorSpace", IsDomain );
+
+
+#############################################################################
+##
+#M IsFinite( ) . . . . . . . . . . . . . . . . . for a subspaces domain
+##
+## Returns `true' if is finite.
+## We allow subspaces domains in `IsSubspacesVectorSpace' only for finite
+## vector spaces.
+##
+InstallTrueMethod( IsFinite, IsSubspacesVectorSpace );
+
+
+#############################################################################
+##
+#A Subspaces( [, ] )
+##
+## <#GAPDoc Label="Subspaces">
+##
+##
+##
+##
+## Called with a finite vector space v,
+## returns the domain of all subspaces of V.
+##
+## Called with V and a nonnegative integer k,
+## returns the domain of all k-dimensional
+## subspaces of V.
+##
+## Special and methods are
+## provided for these domains.
+##
+##
+##
+## <#/GAPDoc>
+##
+DeclareAttribute( "Subspaces", IsLeftModule );
+DeclareOperation( "Subspaces", [ IsLeftModule, IsInt ] );
+
+
+#############################################################################
+##
+#F IsSubspace( , )
+##
+##
+##
+##
+##
+## check that U is a vector space that is contained in V
+##
+##
+##
+##
+DeclareGlobalFunction( "IsSubspace" );
+
+
+#############################################################################
+##
+#A OrthogonalSpaceInFullRowSpace( )
+##
+##
+##
+##
+##
+## For a Gaussian row space U over F ,
+##
+## returns a complement of U in the full row space of same vector
+## dimension as U over F .
+##
+##
+##
+DeclareAttribute( "OrthogonalSpaceInFullRowSpace", IsGaussianSpace );
+
+
+#############################################################################
+##
+#P IsVectorSpaceHomomorphism(