mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 08:47:35 +02:00
Relocated all of these files
This commit is contained in:
parent
dfb5e3826d
commit
da2c2e6f25
11 changed files with 0 additions and 9336 deletions
2
terminal/jquery-3.3.1.min.js
vendored
2
terminal/jquery-3.3.1.min.js
vendored
File diff suppressed because one or more lines are too long
17
terminal/jquery.terminal.min.css
vendored
17
terminal/jquery.terminal.min.css
vendored
File diff suppressed because one or more lines are too long
47
terminal/jquery.terminal.min.js
vendored
47
terminal/jquery.terminal.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,121 +0,0 @@
|
||||||
(function (Prism) {
|
|
||||||
Prism.languages.scheme = {
|
|
||||||
// this supports "normal" single-line comments:
|
|
||||||
// ; comment
|
|
||||||
// and (potentially nested) multiline comments:
|
|
||||||
// #| comment #| nested |# still comment |#
|
|
||||||
// (only 1 level of nesting is supported)
|
|
||||||
'comment': /;.*|#;\s*\((?:[^()]|\([^()]*\))*\)|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,
|
|
||||||
'string': {
|
|
||||||
pattern: /"(?:[^"\\]|\\.)*"/,
|
|
||||||
greedy: true
|
|
||||||
},
|
|
||||||
'symbol': {
|
|
||||||
pattern: /'[^()#'\s]+/,
|
|
||||||
greedy: true
|
|
||||||
},
|
|
||||||
'character': {
|
|
||||||
pattern: /#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|\S)/,
|
|
||||||
greedy: true,
|
|
||||||
alias: 'string'
|
|
||||||
},
|
|
||||||
'lambda-parameter': [
|
|
||||||
// https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_6.html#SEC30
|
|
||||||
{
|
|
||||||
pattern: /((?:^|[^'`#])\(lambda\s+)(?:[^|()'\s]+|\|(?:[^\\|]|\\.)*\|)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
pattern: /((?:^|[^'`#])\(lambda\s+\()[^()']+/,
|
|
||||||
lookbehind: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'keyword': {
|
|
||||||
pattern: /((?:^|[^'`#])\()(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|export|except|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\s]|$)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'builtin': {
|
|
||||||
// all functions of the base library of R7RS plus some of built-ins of R5Rs
|
|
||||||
pattern: /((?:^|[^'`#])\()(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\s]|$)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'operator': {
|
|
||||||
pattern: /((?:^|[^'`#])\()(?:[-+*%/]|[<>]=?|=>?)(?=[()\s]|$)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'number': {
|
|
||||||
// The number pattern from [the R7RS spec](https://small.r7rs.org/attachment/r7rs.pdf).
|
|
||||||
//
|
|
||||||
// <number> := <num 2>|<num 8>|<num 10>|<num 16>
|
|
||||||
// <num R> := <prefix R><complex R>
|
|
||||||
// <complex R> := <real R>(?:@<real R>|<imaginary R>)?|<imaginary R>
|
|
||||||
// <imaginary R> := [+-](?:<ureal R>|(?:inf|nan)\.0)?i
|
|
||||||
// <real R> := [+-]?<ureal R>|[+-](?:inf|nan)\.0
|
|
||||||
// <ureal R> := <uint R>(?:\/<uint R>)?
|
|
||||||
// | <decimal R>
|
|
||||||
//
|
|
||||||
// <decimal 10> := (?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?
|
|
||||||
// <uint R> := <digit R>+
|
|
||||||
// <prefix R> := <radix R>(?:#[ei])?|(?:#[ei])?<radix R>
|
|
||||||
// <radix 2> := #b
|
|
||||||
// <radix 8> := #o
|
|
||||||
// <radix 10> := (?:#d)?
|
|
||||||
// <radix 16> := #x
|
|
||||||
// <digit 2> := [01]
|
|
||||||
// <digit 8> := [0-7]
|
|
||||||
// <digit 10> := \d
|
|
||||||
// <digit 16> := [0-9a-f]
|
|
||||||
//
|
|
||||||
// The problem with this grammar is that the resulting regex is way to complex, so we simplify by grouping all
|
|
||||||
// non-decimal bases together. This results in a decimal (dec) and combined binary, octal, and hexadecimal (box)
|
|
||||||
// pattern:
|
|
||||||
pattern: RegExp(SortedBNF({
|
|
||||||
'<ureal dec>': /\d+(?:\/\d+)?|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/.source,
|
|
||||||
'<real dec>': /[+-]?<ureal dec>|[+-](?:inf|nan)\.0/.source,
|
|
||||||
'<imaginary dec>': /[+-](?:<ureal dec>|(?:inf|nan)\.0)?i/.source,
|
|
||||||
'<complex dec>': /<real dec>(?:@<real dec>|<imaginary dec>)?|<imaginary dec>/.source,
|
|
||||||
'<num dec>': /(?:#d(?:#[ei])?|#[ei](?:#d)?)?<complex dec>/.source,
|
|
||||||
|
|
||||||
'<ureal box>': /[0-9a-f]+(?:\/[0-9a-f]+)?/.source,
|
|
||||||
'<real box>': /[+-]?<ureal box>|[+-](?:inf|nan)\.0/.source,
|
|
||||||
'<imaginary box>': /[+-](?:<ureal box>|(?:inf|nan)\.0)?i/.source,
|
|
||||||
'<complex box>': /<real box>(?:@<real box>|<imaginary box>)?|<imaginary box>/.source,
|
|
||||||
'<num box>': /#[box](?:#[ei])?|(?:#[ei])?#[box]<complex box>/.source,
|
|
||||||
|
|
||||||
'<number>': /(^|[\s()])(?:<num dec>|<num box>)(?=[()\s]|$)/.source,
|
|
||||||
}), 'i'),
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'boolean': {
|
|
||||||
pattern: /(^|[\s()])#(?:[ft]|false|true)(?=[()\s]|$)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'function': {
|
|
||||||
pattern: /((?:^|[^'`#])\()(?:[^|()'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\s]|$)/,
|
|
||||||
lookbehind: true
|
|
||||||
},
|
|
||||||
'identifier': {
|
|
||||||
pattern: /(^|[\s()])\|(?:[^\\|]|\\.)*\|(?=[()\s]|$)/,
|
|
||||||
lookbehind: true,
|
|
||||||
greedy: true
|
|
||||||
},
|
|
||||||
'punctuation': /[()']/
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a topologically sorted BNF grammar, this will return the RegExp source of last rule of the grammar.
|
|
||||||
*
|
|
||||||
* @param {Record<string, string>} grammar
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function SortedBNF(grammar) {
|
|
||||||
for (var key in grammar) {
|
|
||||||
grammar[key] = grammar[key].replace(/<[\w\s]+>/g, function (key) {
|
|
||||||
return '(?:' + grammar[key].trim() + ')';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// return the last item
|
|
||||||
return grammar[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
})(Prism);
|
|
1
terminal/prism-scheme.min.js
vendored
1
terminal/prism-scheme.min.js
vendored
|
@ -1 +0,0 @@
|
||||||
Prism.languages.scheme={comment:/;.*|#;\s*\((?:[^()]|\([^()]*\))*\)|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|\S)/,greedy:!0,alias:"string"},"lambda-parameter":[{pattern:/((?:^|[^'`#])\(lambda\s+)(?:[^|()'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])\(lambda\s+\()[^()']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])\()(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|export|except|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])\()(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])\()(?:[-+*%/]|[<>]=?|=>?)(?=[()\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(r){for(var e in r)r[e]=r[e].replace(/<[\w\s]+>/g,function(e){return"(?:"+r[e].trim()+")"});return r[e]}({"<ureal dec>":"\\d+(?:/\\d+)?|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?","<real dec>":"[+-]?<ureal dec>|[+-](?:inf|nan)\\.0","<imaginary dec>":"[+-](?:<ureal dec>|(?:inf|nan)\\.0)?i","<complex dec>":"<real dec>(?:@<real dec>|<imaginary dec>)?|<imaginary dec>","<num dec>":"(?:#d(?:#[ei])?|#[ei](?:#d)?)?<complex dec>","<ureal box>":"[0-9a-f]+(?:/[0-9a-f]+)?","<real box>":"[+-]?<ureal box>|[+-](?:inf|nan)\\.0","<imaginary box>":"[+-](?:<ureal box>|(?:inf|nan)\\.0)?i","<complex box>":"<real box>(?:@<real box>|<imaginary box>)?|<imaginary box>","<num box>":"#[box](?:#[ei])?|(?:#[ei])?#[box]<complex box>","<number>":"(^|[\\s()])(?:<num dec>|<num box>)(?=[()\\s]|$)"}),"i"),lookbehind:!0},boolean:{pattern:/(^|[\s()])#(?:[ft]|false|true)(?=[()\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])\()(?:[^|()'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[\s()])\|(?:[^\\|]|\\.)*\|(?=[()\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()']/};
|
|
|
@ -1,140 +0,0 @@
|
||||||
/**
|
|
||||||
* prism.js default theme for JavaScript, CSS and HTML
|
|
||||||
* Based on dabblet (http://dabblet.com)
|
|
||||||
* @author Lea Verou
|
|
||||||
*/
|
|
||||||
|
|
||||||
code[class*="language-"],
|
|
||||||
pre[class*="language-"] {
|
|
||||||
color: black;
|
|
||||||
background: none;
|
|
||||||
text-shadow: 0 1px white;
|
|
||||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
|
||||||
font-size: 1em;
|
|
||||||
text-align: left;
|
|
||||||
white-space: pre;
|
|
||||||
word-spacing: normal;
|
|
||||||
word-break: normal;
|
|
||||||
word-wrap: normal;
|
|
||||||
line-height: 1.5;
|
|
||||||
|
|
||||||
-moz-tab-size: 4;
|
|
||||||
-o-tab-size: 4;
|
|
||||||
tab-size: 4;
|
|
||||||
|
|
||||||
-webkit-hyphens: none;
|
|
||||||
-moz-hyphens: none;
|
|
||||||
-ms-hyphens: none;
|
|
||||||
hyphens: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
|
|
||||||
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
|
|
||||||
text-shadow: none;
|
|
||||||
background: #b3d4fc;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
|
|
||||||
code[class*="language-"]::selection, code[class*="language-"] ::selection {
|
|
||||||
text-shadow: none;
|
|
||||||
background: #b3d4fc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
code[class*="language-"],
|
|
||||||
pre[class*="language-"] {
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Code blocks */
|
|
||||||
pre[class*="language-"] {
|
|
||||||
padding: 1em;
|
|
||||||
margin: .5em 0;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
:not(pre) > code[class*="language-"],
|
|
||||||
pre[class*="language-"] {
|
|
||||||
background: #f5f2f0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inline code */
|
|
||||||
:not(pre) > code[class*="language-"] {
|
|
||||||
padding: .1em;
|
|
||||||
border-radius: .3em;
|
|
||||||
white-space: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.comment,
|
|
||||||
.token.prolog,
|
|
||||||
.token.doctype,
|
|
||||||
.token.cdata {
|
|
||||||
color: slategray;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.punctuation {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.namespace {
|
|
||||||
opacity: .7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.property,
|
|
||||||
.token.tag,
|
|
||||||
.token.boolean,
|
|
||||||
.token.number,
|
|
||||||
.token.constant,
|
|
||||||
.token.symbol,
|
|
||||||
.token.deleted {
|
|
||||||
color: #905;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.selector,
|
|
||||||
.token.attr-name,
|
|
||||||
.token.string,
|
|
||||||
.token.char,
|
|
||||||
.token.builtin,
|
|
||||||
.token.inserted {
|
|
||||||
color: #690;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.operator,
|
|
||||||
.token.entity,
|
|
||||||
.token.url,
|
|
||||||
.language-css .token.string,
|
|
||||||
.style .token.string {
|
|
||||||
color: #9a6e3a;
|
|
||||||
/* This background color was intended by the author of this theme. */
|
|
||||||
background: hsla(0, 0%, 100%, .5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.atrule,
|
|
||||||
.token.attr-value,
|
|
||||||
.token.keyword {
|
|
||||||
color: #07a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.function,
|
|
||||||
.token.class-name {
|
|
||||||
color: #DD4A68;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.regex,
|
|
||||||
.token.important,
|
|
||||||
.token.variable {
|
|
||||||
color: #e90;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.important,
|
|
||||||
.token.bold {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.token.italic {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.token.entity {
|
|
||||||
cursor: help;
|
|
||||||
}
|
|
1720
terminal/prism.js
1720
terminal/prism.js
File diff suppressed because it is too large
Load diff
|
@ -1,269 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en-us">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
||||||
<title>Emscripten-Generated Code</title>
|
|
||||||
<!--
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
|
|
||||||
<script src="https://unpkg.com/jquery.terminal@2.x.x/js/jquery.terminal.min.js"></script>
|
|
||||||
<link rel="stylesheet" href="https://unpkg.com/jquery.terminal@2.x.x/css/jquery.terminal.min.css"/>
|
|
||||||
-->
|
|
||||||
<script src="jquery-3.3.1.min.js"></script>
|
|
||||||
<script src="jquery.terminal.min.js"></script>
|
|
||||||
<script src="prism.js"></script>
|
|
||||||
<script src="prism-scheme.min.js"></script>
|
|
||||||
<link rel="stylesheet" href="jquery.terminal.min.css"/>
|
|
||||||
<link rel="stylesheet" href="prism.css"/>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: arial;
|
|
||||||
margin: 0;
|
|
||||||
padding: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
|
||||||
div.emscripten { text-align: center; }
|
|
||||||
div.emscripten_border { border: 1px solid black; }
|
|
||||||
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
|
||||||
canvas.emscripten { border: 0px none; background-color: black; }
|
|
||||||
|
|
||||||
#emscripten_logo {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spinner {
|
|
||||||
height: 30px;
|
|
||||||
width: 30px;
|
|
||||||
margin: 0;
|
|
||||||
margin-top: 20px;
|
|
||||||
margin-left: 20px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
|
|
||||||
-webkit-animation: rotation .8s linear infinite;
|
|
||||||
-moz-animation: rotation .8s linear infinite;
|
|
||||||
-o-animation: rotation .8s linear infinite;
|
|
||||||
animation: rotation 0.8s linear infinite;
|
|
||||||
|
|
||||||
border-left: 5px solid rgb(235, 235, 235);
|
|
||||||
border-right: 5px solid rgb(235, 235, 235);
|
|
||||||
border-bottom: 5px solid rgb(235, 235, 235);
|
|
||||||
border-top: 5px solid rgb(120, 120, 120);
|
|
||||||
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: rgb(189, 215, 46);
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes rotation {
|
|
||||||
from {-webkit-transform: rotate(0deg);}
|
|
||||||
to {-webkit-transform: rotate(360deg);}
|
|
||||||
}
|
|
||||||
@-moz-keyframes rotation {
|
|
||||||
from {-moz-transform: rotate(0deg);}
|
|
||||||
to {-moz-transform: rotate(360deg);}
|
|
||||||
}
|
|
||||||
@-o-keyframes rotation {
|
|
||||||
from {-o-transform: rotate(0deg);}
|
|
||||||
to {-o-transform: rotate(360deg);}
|
|
||||||
}
|
|
||||||
@keyframes rotation {
|
|
||||||
from {transform: rotate(0deg);}
|
|
||||||
to {transform: rotate(360deg);}
|
|
||||||
}
|
|
||||||
|
|
||||||
#status {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
margin-top: 30px;
|
|
||||||
margin-left: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: rgb(120, 120, 120);
|
|
||||||
}
|
|
||||||
|
|
||||||
#progress {
|
|
||||||
height: 20px;
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#controls {
|
|
||||||
display: inline-block;
|
|
||||||
float: right;
|
|
||||||
vertical-align: top;
|
|
||||||
margin-top: 30px;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#output {
|
|
||||||
width: 100%;
|
|
||||||
height: 200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
margin-top: 10px;
|
|
||||||
border-left: 0px;
|
|
||||||
border-right: 0px;
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 0px;
|
|
||||||
display: block;
|
|
||||||
background-color: black;
|
|
||||||
color: white;
|
|
||||||
font-family: 'Lucida Console', Monaco, monospace;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<div id="term"></div>
|
|
||||||
<!--
|
|
||||||
<div class="spinner" id='spinner'></div>
|
|
||||||
<div class="emscripten" id="status">Downloading...</div>
|
|
||||||
<span id='controls'>
|
|
||||||
<span><input type="checkbox" id="resize">Resize canvas</span>
|
|
||||||
<span><input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer </span>
|
|
||||||
<span><input type="button" value="Fullscreen" onclick="Module.requestFullscreen(document.getElementById('pointerLock').checked,
|
|
||||||
document.getElementById('resize').checked)">
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<div class="emscripten">
|
|
||||||
<progress value="0" max="100" id="progress" hidden=1></progress>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="emscripten_border">
|
|
||||||
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" tabindex=-1></canvas>
|
|
||||||
</div>
|
|
||||||
<textarea id="input" rows="8"></textarea>
|
|
||||||
<input type="button" value="Eval" onclick="sendToWasm();">
|
|
||||||
<textarea id="output" rows="8"></textarea>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script type='text/javascript'>
|
|
||||||
var statusElement = document.getElementById('status');
|
|
||||||
var progressElement = document.getElementById('progress');
|
|
||||||
var spinnerElement = document.getElementById('spinner');
|
|
||||||
|
|
||||||
var term;
|
|
||||||
var isReady = false;
|
|
||||||
|
|
||||||
function term_echo(str) {
|
|
||||||
if(!str) {
|
|
||||||
str = ' ';
|
|
||||||
}
|
|
||||||
term.echo(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
var Module = {
|
|
||||||
preRun: [],
|
|
||||||
postRun: [],
|
|
||||||
print: term_echo,
|
|
||||||
printErr: term_echo,
|
|
||||||
//print: (function() {
|
|
||||||
// var element = document.getElementById('output');
|
|
||||||
// if (element) element.value = ''; // clear browser cache
|
|
||||||
// return function(text) {
|
|
||||||
// if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
|
|
||||||
// // These replacements are necessary if you render to raw HTML
|
|
||||||
// //text = text.replace(/&/g, "&");
|
|
||||||
// //text = text.replace(/</g, "<");
|
|
||||||
// //text = text.replace(/>/g, ">");
|
|
||||||
// //text = text.replace('\n', '<br>', 'g');
|
|
||||||
// console.log(text);
|
|
||||||
// if (element) {
|
|
||||||
// element.value += text + "\n";
|
|
||||||
// element.scrollTop = element.scrollHeight; // focus on bottom
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
//})(),
|
|
||||||
//printErr: function(text) {
|
|
||||||
// if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
|
|
||||||
// console.error(text);
|
|
||||||
//},
|
|
||||||
//canvas: (function() {
|
|
||||||
// var canvas = document.getElementById('canvas');
|
|
||||||
|
|
||||||
// // As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
|
||||||
// // application robust, you may want to override this behavior before shipping!
|
|
||||||
// // See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
|
||||||
// canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
|
|
||||||
|
|
||||||
// return canvas;
|
|
||||||
//})(),
|
|
||||||
//setStatus: function(text) {
|
|
||||||
// if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
|
|
||||||
// if (text === Module.setStatus.last.text) return;
|
|
||||||
// var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
|
|
||||||
// var now = Date.now();
|
|
||||||
// if (m && now - Module.setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon
|
|
||||||
// Module.setStatus.last.time = now;
|
|
||||||
// Module.setStatus.last.text = text;
|
|
||||||
// if (m) {
|
|
||||||
// text = m[1];
|
|
||||||
// progressElement.value = parseInt(m[2])*100;
|
|
||||||
// progressElement.max = parseInt(m[4])*100;
|
|
||||||
// progressElement.hidden = false;
|
|
||||||
// spinnerElement.hidden = false;
|
|
||||||
// } else {
|
|
||||||
// progressElement.value = null;
|
|
||||||
// progressElement.max = null;
|
|
||||||
// progressElement.hidden = true;
|
|
||||||
// if (!text) spinnerElement.style.display = 'none';
|
|
||||||
// }
|
|
||||||
// statusElement.innerHTML = text;
|
|
||||||
//},
|
|
||||||
//totalDependencies: 0,
|
|
||||||
//monitorRunDependencies: function(left) {
|
|
||||||
// this.totalDependencies = Math.max(this.totalDependencies, left);
|
|
||||||
// Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
|
|
||||||
//}
|
|
||||||
};
|
|
||||||
//Module.setStatus('Downloading...');
|
|
||||||
//window.onerror = function(event) {
|
|
||||||
// // TODO: do not warn on ok events like simulating an infinite loop or exitStatus
|
|
||||||
// Module.setStatus('Exception thrown, see JavaScript console');
|
|
||||||
// spinnerElement.style.display = 'none';
|
|
||||||
// Module.setStatus = function(text) {
|
|
||||||
// if (text) Module.printErr('[post-exception status] ' + text);
|
|
||||||
// };
|
|
||||||
//};
|
|
||||||
|
|
||||||
Module['onRuntimeInitialized'] = function() {
|
|
||||||
isReady = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function interpret(command, term) {
|
|
||||||
if(!isReady) {
|
|
||||||
term.echo("not ready");
|
|
||||||
} else {
|
|
||||||
if(command != '') {
|
|
||||||
var txt = command;
|
|
||||||
Module.ccall('sendToEval', null, ['string'], [txt]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendToWasm(){
|
|
||||||
var txt = document.getElementById("input").value;
|
|
||||||
Module.ccall('sendToEval', null, ['string'], [txt]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var termOpts = {
|
|
||||||
height: 400,
|
|
||||||
prompt: 'cyclone> ',
|
|
||||||
greetings: '',
|
|
||||||
onClear: function(term){
|
|
||||||
term.echo(this.greetings);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
jQuery(document).ready(function($) {
|
|
||||||
term = $('#term').terminal(interpret, termOpts);
|
|
||||||
//$.terminal.syntax('scheme');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<script async type="text/javascript" src="terminal.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
|
|
6792
terminal/terminal.js
6792
terminal/terminal.js
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,227 +0,0 @@
|
||||||
/**
|
|
||||||
* @license
|
|
||||||
* Copyright 2015 The Emscripten Authors
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Pthread Web Worker startup routine:
|
|
||||||
// This is the entry point file that is loaded first by each Web Worker
|
|
||||||
// that executes pthreads on the Emscripten application.
|
|
||||||
|
|
||||||
// Thread-local:
|
|
||||||
|
|
||||||
var Module = {};
|
|
||||||
|
|
||||||
function assert(condition, text) {
|
|
||||||
if (!condition) abort('Assertion failed: ' + text);
|
|
||||||
}
|
|
||||||
|
|
||||||
function threadPrintErr() {
|
|
||||||
var text = Array.prototype.slice.call(arguments).join(' ');
|
|
||||||
console.error(text);
|
|
||||||
}
|
|
||||||
function threadAlert() {
|
|
||||||
var text = Array.prototype.slice.call(arguments).join(' ');
|
|
||||||
postMessage({cmd: 'alert', text: text, threadId: Module['_pthread_self']()});
|
|
||||||
}
|
|
||||||
// We don't need out() for now, but may need to add it if we want to use it
|
|
||||||
// here. Or, if this code all moves into the main JS, that problem will go
|
|
||||||
// away. (For now, adding it here increases code size for no benefit.)
|
|
||||||
var out = function() {
|
|
||||||
throw 'out() is not defined in worker.js.';
|
|
||||||
}
|
|
||||||
var err = threadPrintErr;
|
|
||||||
this.alert = threadAlert;
|
|
||||||
|
|
||||||
Module['instantiateWasm'] = function(info, receiveInstance) {
|
|
||||||
// Instantiate from the module posted from the main thread.
|
|
||||||
// We can just use sync instantiation in the worker.
|
|
||||||
var instance = new WebAssembly.Instance(Module['wasmModule'], info);
|
|
||||||
// We don't need the module anymore; new threads will be spawned from the main thread.
|
|
||||||
Module['wasmModule'] = null;
|
|
||||||
receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here.
|
|
||||||
return instance.exports;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.onmessage = function(e) {
|
|
||||||
try {
|
|
||||||
if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code.
|
|
||||||
|
|
||||||
// Module and memory were sent from main thread
|
|
||||||
Module['wasmModule'] = e.data.wasmModule;
|
|
||||||
|
|
||||||
Module['wasmMemory'] = e.data.wasmMemory;
|
|
||||||
|
|
||||||
Module['buffer'] = Module['wasmMemory'].buffer;
|
|
||||||
|
|
||||||
Module['ENVIRONMENT_IS_PTHREAD'] = true;
|
|
||||||
|
|
||||||
if (typeof e.data.urlOrBlob === 'string') {
|
|
||||||
importScripts(e.data.urlOrBlob);
|
|
||||||
} else {
|
|
||||||
var objectUrl = URL.createObjectURL(e.data.urlOrBlob);
|
|
||||||
importScripts(objectUrl);
|
|
||||||
URL.revokeObjectURL(objectUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// MINIMAL_RUNTIME always compiled Wasm (&Wasm2JS) asynchronously, even in pthreads. But
|
|
||||||
// regular runtime and asm.js are loaded synchronously, so in those cases
|
|
||||||
// we are now loaded, and can post back to main thread.
|
|
||||||
postMessage({ 'cmd': 'loaded' });
|
|
||||||
|
|
||||||
} else if (e.data.cmd === 'objectTransfer') {
|
|
||||||
Module['PThread'].receiveObjectTransfer(e.data);
|
|
||||||
} else if (e.data.cmd === 'run') {
|
|
||||||
// This worker was idle, and now should start executing its pthread entry
|
|
||||||
// point.
|
|
||||||
// performance.now() is specced to return a wallclock time in msecs since
|
|
||||||
// that Web Worker/main thread launched. However for pthreads this can
|
|
||||||
// cause subtle problems in emscripten_get_now() as this essentially
|
|
||||||
// would measure time from pthread_create(), meaning that the clocks
|
|
||||||
// between each threads would be wildly out of sync. Therefore sync all
|
|
||||||
// pthreads to the clock on the main browser thread, so that different
|
|
||||||
// threads see a somewhat coherent clock across each of them
|
|
||||||
// (+/- 0.1msecs in testing).
|
|
||||||
Module['__performance_now_clock_drift'] = performance.now() - e.data.time;
|
|
||||||
var threadInfoStruct = e.data.threadInfoStruct;
|
|
||||||
|
|
||||||
// Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out.
|
|
||||||
Module['__emscripten_thread_init'](threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0);
|
|
||||||
|
|
||||||
// Establish the stack frame for this thread in global scope
|
|
||||||
// The stack grows downwards
|
|
||||||
var max = e.data.stackBase;
|
|
||||||
var top = e.data.stackBase + e.data.stackSize;
|
|
||||||
assert(threadInfoStruct);
|
|
||||||
assert(top != 0);
|
|
||||||
assert(max != 0);
|
|
||||||
assert(top > max);
|
|
||||||
// Also call inside JS module to set up the stack frame for this pthread in JS module scope
|
|
||||||
Module['establishStackSpace'](top, max);
|
|
||||||
Module['_emscripten_tls_init']();
|
|
||||||
|
|
||||||
Module['PThread'].receiveObjectTransfer(e.data);
|
|
||||||
Module['PThread'].setThreadStatus(Module['_pthread_self'](), 1/*EM_THREAD_STATUS_RUNNING*/);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// pthread entry points are always of signature 'void *ThreadMain(void *arg)'
|
|
||||||
// Native codebases sometimes spawn threads with other thread entry point signatures,
|
|
||||||
// such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain().
|
|
||||||
// That is not acceptable per C/C++ specification, but x86 compiler ABI extensions
|
|
||||||
// enable that to work. If you find the following line to crash, either change the signature
|
|
||||||
// to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker
|
|
||||||
// flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension.
|
|
||||||
var result = Module['invokeEntryPoint'](e.data.start_routine, e.data.arg);
|
|
||||||
|
|
||||||
Module['checkStackCookie']();
|
|
||||||
// In MINIMAL_RUNTIME the noExitRuntime concept does not apply to
|
|
||||||
// pthreads. To exit a pthread with live runtime, use the function
|
|
||||||
// emscripten_unwind_to_js_event_loop() in the pthread body.
|
|
||||||
// The thread might have finished without calling pthread_exit(). If so,
|
|
||||||
// then perform the exit operation ourselves.
|
|
||||||
// (This is a no-op if explicit pthread_exit() had been called prior.)
|
|
||||||
if (!Module['getNoExitRuntime']())
|
|
||||||
Module['PThread'].threadExit(result);
|
|
||||||
} catch(ex) {
|
|
||||||
if (ex === 'Canceled!') {
|
|
||||||
Module['PThread'].threadCancel();
|
|
||||||
} else if (ex != 'unwind') {
|
|
||||||
// FIXME(sbc): Figure out if this is still needed or useful. Its not
|
|
||||||
// clear to me how this check could ever fail. In order to get into
|
|
||||||
// this try/catch block at all we have already called bunch of
|
|
||||||
// functions on `Module`.. why is this one special?
|
|
||||||
if (typeof(Module['_emscripten_futex_wake']) !== "function") {
|
|
||||||
err("Thread Initialisation failed.");
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
// ExitStatus not present in MINIMAL_RUNTIME
|
|
||||||
if (ex instanceof Module['ExitStatus']) {
|
|
||||||
if (Module['getNoExitRuntime']()) {
|
|
||||||
err('Pthread 0x' + _pthread_self().toString(16) + ' called exit(), staying alive due to noExitRuntime.');
|
|
||||||
} else {
|
|
||||||
err('Pthread 0x' + _pthread_self().toString(16) + ' called exit(), calling threadExit.');
|
|
||||||
Module['PThread'].threadExit(ex.status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Module['PThread'].threadExit(-2);
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// else e == 'unwind', and we should fall through here and keep the pthread alive for asynchronous events.
|
|
||||||
err('Pthread 0x' + threadInfoStruct.toString(16) + ' completed its pthread main entry point with an unwind, keeping the pthread worker alive for asynchronous operation.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread.
|
|
||||||
if (threadInfoStruct) {
|
|
||||||
Module['PThread'].threadCancel();
|
|
||||||
}
|
|
||||||
} else if (e.data.target === 'setimmediate') {
|
|
||||||
// no-op
|
|
||||||
} else if (e.data.cmd === 'processThreadQueue') {
|
|
||||||
if (threadInfoStruct) { // If this thread is actually running?
|
|
||||||
Module['_emscripten_current_thread_process_queued_calls']();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
err('worker.js received unknown command ' + e.data.cmd);
|
|
||||||
err(e.data);
|
|
||||||
}
|
|
||||||
} catch(ex) {
|
|
||||||
err('worker.js onmessage() captured an uncaught exception: ' + ex);
|
|
||||||
if (ex && ex.stack) err(ex.stack);
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Node.js support
|
|
||||||
if (typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string') {
|
|
||||||
// Create as web-worker-like an environment as we can.
|
|
||||||
self = {
|
|
||||||
location: {
|
|
||||||
href: __filename
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var onmessage = this.onmessage;
|
|
||||||
|
|
||||||
var nodeWorkerThreads = require('worker_threads');
|
|
||||||
|
|
||||||
global.Worker = nodeWorkerThreads.Worker;
|
|
||||||
|
|
||||||
var parentPort = nodeWorkerThreads.parentPort;
|
|
||||||
|
|
||||||
parentPort.on('message', function(data) {
|
|
||||||
onmessage({ data: data });
|
|
||||||
});
|
|
||||||
|
|
||||||
var nodeFS = require('fs');
|
|
||||||
|
|
||||||
var nodeRead = function(filename) {
|
|
||||||
return nodeFS.readFileSync(filename, 'utf8');
|
|
||||||
};
|
|
||||||
|
|
||||||
function globalEval(x) {
|
|
||||||
global.require = require;
|
|
||||||
global.Module = Module;
|
|
||||||
eval.call(null, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
importScripts = function(f) {
|
|
||||||
globalEval(nodeRead(f));
|
|
||||||
};
|
|
||||||
|
|
||||||
postMessage = function(msg) {
|
|
||||||
parentPort.postMessage(msg);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof performance === 'undefined') {
|
|
||||||
performance = {
|
|
||||||
now: function() {
|
|
||||||
return Date.now();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue