convert more files to typescript

This commit is contained in:
Steven Hugg 2018-07-07 22:10:51 -05:00
parent a66c889412
commit 1c9817d155
7 changed files with 575 additions and 94 deletions

View File

@ -211,14 +211,6 @@ if (window.location.host.endsWith('8bitworkshop.com')) {
<script src="codemirror/addon/selection/active-line.js"></script>
<link rel="stylesheet" href="codemirror/addon/dialog/dialog.css">
<script>
var exports = {};
function require(modname) {
if (modname == 'jquery') return $;
else console.log("Unknown require()", modname);
}
</script>
<script src="javatari.js/release/javatari/javatari.js"></script>
<script src="src/cpu/z80fast.js"></script>
<!--<script src="src/cpu/6809.js"></script>-->
@ -226,10 +218,6 @@ function require(modname) {
<script src="jsnes/build/jsnes.min.js"></script>
<script src="jsnes/lib/dynamicaudio-min.js" type="text/javascript" charset="utf-8"></script>
-->
<script src="tss/js/tss/PsgDeviceChannel.js"></script>
<script src="tss/js/tss/MasterChannel.js"></script>
<script src="tss/js/tss/AudioLooper.js"></script>
<script src="tss/js/Log.js"></script>
<!--
<script src="local/williams/defender.js"></script>
<script src="local/williams/robotron.js"></script>
@ -240,6 +228,20 @@ function require(modname) {
<script src="gif.js/dist/gif.js"></script>
<script src="localForage/dist/localforage.nopromises.js"></script>
<script>
var exports = {};
function require(modname) {
if (modname == 'jquery') return $;
else if (modname.startsWith('.')) return exports;
else { console.log("Unknown require()", modname); return exports; }
}
</script>
<script src="tss/js/tss/PsgDeviceChannel.js"></script>
<script src="tss/js/tss/MasterChannel.js"></script>
<script src="tss/js/tss/AudioLooper.js"></script>
<script src="tss/js/Log.js"></script>
<script src="src/store.js"></script>
<script src="src/vlist.js"></script>
<script src="src/emu.js"></script>
@ -249,7 +251,7 @@ function require(modname) {
<script src="gen/project.js"></script>
<script src="gen/windows.js"></script>
<script src="gen/views.js"></script>
<script src="src/ui.js"></script>
<script src="gen/ui.js"></script>
<!-- <script src="src/audio/votrax.js"></script> -->
<script>

421
package-lock.json generated
View File

@ -4,18 +4,76 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/bootstrap": {
"version": "3.3.39",
"resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-3.3.39.tgz",
"integrity": "sha512-UGvzSQFkv0Oh2vjj30AfZructi7XvY0aRa1Y/vrgFq+tfrTMxtqQ9+s5liCYLJnrISc9LinEtOY5N8Ibrhj2Tg==",
"dev": true,
"requires": {
"@types/jquery": "2.0.49"
}
},
"@types/jquery": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.4.tgz",
"integrity": "sha512-KqgLNDh8oTl43/2B78S7tjwPnOxPtP9wQsLptbuQCmMwqH5QuPZOk36RsNgbs3mnq/3SCyG1l/GJmhKk5Dg68g==",
"version": "2.0.49",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.49.tgz",
"integrity": "sha512-/9xLnYmohN/vD2gDnLS4cym8TUmrJu7DvZa/LELKzZjdPsvWVJiedsdu2SXNtb/DA7FGimqL2g0IoyhbNKLl8g==",
"dev": true
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"adm-zip": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.2.1.tgz",
"integrity": "sha1-6AHO3rW9mk6Y1pnFwPQjnicx3L8=",
"dev": true
},
"asn1": {
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
"integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
"dev": true,
"optional": true
},
"assert-plus": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
"integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
"dev": true,
"optional": true
},
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
"dev": true,
"optional": true
},
"aws-sign2": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
"integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
"dev": true,
"optional": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"boom": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
"integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
"dev": true,
"requires": {
"hoek": "0.9.1"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -32,6 +90,16 @@
"integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
"dev": true
},
"combined-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
"integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
"dev": true,
"optional": true,
"requires": {
"delayed-stream": "0.0.5"
}
},
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
@ -47,6 +115,41 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"config-chain": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz",
"integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=",
"dev": true,
"requires": {
"ini": "1.3.5",
"proto-list": "1.2.4"
},
"dependencies": {
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
}
}
},
"cryptiles": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
"integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
"dev": true,
"optional": true,
"requires": {
"boom": "0.4.2"
}
},
"ctype": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
"integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=",
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
@ -56,6 +159,13 @@
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
"integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
"dev": true,
"optional": true
},
"diff": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
@ -68,6 +178,24 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"forever-agent": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
"integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
"dev": true
},
"form-data": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
"integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=",
"dev": true,
"optional": true,
"requires": {
"async": "0.9.2",
"combined-stream": "0.0.7",
"mime": "1.2.11"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -106,12 +234,43 @@
"integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
"dev": true
},
"hawk": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz",
"integrity": "sha1-uQuxaYByhUEdp//LjdJZhQLTtS0=",
"dev": true,
"optional": true,
"requires": {
"boom": "0.4.2",
"cryptiles": "0.2.2",
"hoek": "0.9.1",
"sntp": "0.2.4"
}
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"hoek": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
"integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
"dev": true
},
"http-signature": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
"integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
"dev": true,
"optional": true,
"requires": {
"asn1": "0.1.11",
"assert-plus": "0.1.5",
"ctype": "0.5.3"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -128,12 +287,30 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"ini": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
"integrity": "sha1-ToCMLOFExsF4iRjgNNZ5e8bPYoE=",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"json3": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
"integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
"dev": true
},
"kew": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/kew/-/kew-0.1.7.tgz",
"integrity": "sha1-CjKoF/8amzsSuMm6z0vE1nmvjnI=",
"dev": true
},
"lodash._baseassign": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
@ -202,6 +379,12 @@
"lodash.isarray": "3.0.4"
}
},
"mime": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@ -246,12 +429,93 @@
"supports-color": "3.1.2"
}
},
"mocha-phantomjs": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mocha-phantomjs/-/mocha-phantomjs-4.1.0.tgz",
"integrity": "sha1-x14WYS4aavCtjSgeOi/vSdVeUFs=",
"dev": true,
"requires": {
"commander": "2.9.0",
"mocha-phantomjs-core": "1.3.1",
"phantomjs": "1.9.7-15"
}
},
"mocha-phantomjs-core": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/mocha-phantomjs-core/-/mocha-phantomjs-core-1.3.1.tgz",
"integrity": "sha1-WGU4yNcfqN6QxBpGrMBIHB+4Phg=",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"ncp": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz",
"integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=",
"dev": true
},
"node-uuid": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
"integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
"dev": true
},
"nopt": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz",
"integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=",
"dev": true,
"requires": {
"abbrev": "1.1.1"
}
},
"npmconf": {
"version": "0.0.24",
"resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.0.24.tgz",
"integrity": "sha1-t4h1sIjMw8Cvo+zrPOMkSxtSOQw=",
"dev": true,
"requires": {
"config-chain": "1.1.11",
"inherits": "1.0.2",
"ini": "1.1.0",
"mkdirp": "0.3.5",
"nopt": "2.2.1",
"once": "1.1.1",
"osenv": "0.0.3",
"semver": "1.1.4"
},
"dependencies": {
"inherits": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
"integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
"dev": true
},
"mkdirp": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
"integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
"dev": true
},
"once": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz",
"integrity": "sha1-nbV0kzzLCMOnYU0VQDLAnqbzOec=",
"dev": true
}
}
},
"oauth-sign": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
"integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@ -261,12 +525,127 @@
"wrappy": "1.0.2"
}
},
"osenv": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz",
"integrity": "sha1-zWrY3bKQkVrZ4idlV2Al1BHynLY=",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"phantomjs": {
"version": "1.9.7-15",
"resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.7-15.tgz",
"integrity": "sha1-Czp85jBIaoO+kf9Ogy7uIOlxEVs=",
"dev": true,
"requires": {
"adm-zip": "0.2.1",
"kew": "0.1.7",
"mkdirp": "0.3.5",
"ncp": "0.4.2",
"npmconf": "0.0.24",
"progress": "1.1.8",
"request": "2.36.0",
"request-progress": "0.3.1",
"rimraf": "2.2.8",
"which": "1.0.9"
},
"dependencies": {
"mkdirp": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
"integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
"dev": true
}
}
},
"progress": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
"integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
"dev": true
},
"proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
"dev": true
},
"psl": {
"version": "1.1.28",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz",
"integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==",
"dev": true,
"optional": true
},
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true,
"optional": true
},
"qs": {
"version": "0.6.6",
"resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
"integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
"dev": true
},
"request": {
"version": "2.36.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.36.0.tgz",
"integrity": "sha1-KMbAQmLHuf/dIbklU3RRfubZQ/U=",
"dev": true,
"requires": {
"aws-sign2": "0.5.0",
"forever-agent": "0.5.2",
"form-data": "0.1.4",
"hawk": "1.0.0",
"http-signature": "0.10.1",
"json-stringify-safe": "5.0.1",
"mime": "1.2.11",
"node-uuid": "1.4.8",
"oauth-sign": "0.3.0",
"qs": "0.6.6",
"tough-cookie": "2.4.3",
"tunnel-agent": "0.4.3"
}
},
"request-progress": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
"integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=",
"dev": true,
"requires": {
"throttleit": "0.0.2"
}
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
"integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
"dev": true
},
"semver": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-1.1.4.tgz",
"integrity": "sha1-LlpOcrqwNHLMl/cnU7RQiRLvVUA=",
"dev": true
},
"sntp": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
"integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
"dev": true,
"optional": true,
"requires": {
"hoek": "0.9.1"
}
},
"supports-color": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
@ -276,12 +655,48 @@
"has-flag": "1.0.0"
}
},
"throttleit": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
"integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
"dev": true
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"dev": true,
"optional": true,
"requires": {
"psl": "1.1.28",
"punycode": "1.4.1"
}
},
"tunnel-agent": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
"integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
"dev": true,
"optional": true
},
"typescript": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true
},
"wavedrom-cli": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/wavedrom-cli/-/wavedrom-cli-0.5.0.tgz",
"integrity": "sha1-h+lb+naRpbaTmPJzL13QycKkiCE=",
"dev": true
},
"which": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
"integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",

View File

@ -5,7 +5,8 @@
"dependencies": {},
"devDependencies": {
"typescript": "^2.9.2",
"@types/jquery": "^3.3.4",
"@types/jquery": "^2.x",
"@types/bootstrap": "^3.x",
"mocha": "^3.2.0",
"mocha-phantomjs": "^4.1.0",
"wavedrom-cli": "^0.5.0"

View File

@ -2,18 +2,68 @@
// 8bitworkshop IDE user interface
// make sure VCS doesn't start
if (window.Javatari) Javatari.AUTO_START = false;
import $ = require("jquery");
import * as bootstrap from "bootstrap";
import { SourceFile, CodeProject } from "./project";
import { ProjectWindows } from "./windows";
import * as Views from "./views";
var PRESETS; // presets array
var platform_id; // platform ID string
var platform; // platform object
// external libs (TODO)
declare var Octokat, ga, Tour, GIF, saveAs;
declare function createNewPersistentStore(platform_id : string);
declare function showLoopTimingForPC(pc:number, sourcefile:SourceFile, wnd:Views.ProjectView);
// loaded by platform js file
declare var PLATFORMS;
// make sure VCS doesn't start
if (window['Javatari']) window['Javatari'].AUTO_START = false;
interface Preset {
id : string;
name : string;
chapter? : number;
title? : string;
}
interface Platform {
start() : void;
reset() : void;
isRunning() : boolean;
getToolForFilename(s:string) : string;
getDefaultExtension() : string;
getPresets() : Preset[];
pause() : void;
resume() : void;
loadROM(title:string, rom:Uint8Array);
inspect?(ident:string) : void;
disassemble?(addr:number, readfn:(addr:number)=>number) : any; // TODO
readAddress?(addr:number) : number;
setFrameRate?(fps:number) : void;
getFrameRate?() : number;
cpuStateToLongString?(state) : string;
ramStateToLongString?(state) : string;
getRasterPosition() : {x:number, y:number};
setupDebug?(debugfn : (state)=>void) : void;
clearDebug?() : void;
step?() : void;
runToVsync?() : void;
runToPC?(pc:number) : void;
runUntilReturn?() : void;
stepBack?() : void;
//TODO runEval?(evalfn : (cpustate) => boolean) : void;
runEval?(evalfn : Function) : void;
}
var PRESETS : Preset[]; // presets array
var platform_id : string; // platform ID string
var platform : Platform; // platform object
var toolbar = $("#controls_top");
var current_project; // current CodeProject object
var current_project : CodeProject; // current CodeProject object
var projectWindows; // window manager
var projectWindows : ProjectWindows; // window manager
// TODO: codemirror multiplex support?
@ -33,11 +83,11 @@ function newWorker() {
return new Worker("./src/worker/workermain.js");
}
var userPaused; // did user explicitly pause?
var userPaused : boolean; // did user explicitly pause?
var current_output; // current ROM
var current_preset_entry; // current preset object (if selected)
var main_file_id; // main file ID
var current_output; // current ROM
var current_preset_entry : Preset; // current preset object (if selected)
var main_file_id : string; // main file ID
var symbolmap; // symbol map
var addr2symbol; // address to symbol name map
var compparams; // received build params from worker
@ -114,7 +164,7 @@ function refreshWindowList() {
function loadEditor(path) {
var tool = platform.getToolForFilename(path);
var mode = tool && TOOL_TO_SOURCE_STYLE[tool];
return new SourceEditor(path, mode, current_project.getFile(path));
return new Views.SourceEditor(path, mode);
}
// add main file editor
@ -135,7 +185,7 @@ function refreshWindowList() {
var lst = listings[lstfn];
if (lst.assemblyfile) {
addWindowItem(lstfn, getFilenameForPath(lstfn), function(path) {
return new ListingView(lst.assemblyfile);
return new Views.ListingView(lst.assemblyfile);
});
}
}
@ -145,12 +195,12 @@ function refreshWindowList() {
separate = true;
if (platform.disassemble) {
addWindowItem("#disasm", "Disassembly", function() {
return new DisassemblerView();
return new Views.DisassemblerView();
});
}
if (platform.readAddress && platform_id != 'vcs') {
addWindowItem("#memory", "Memory Browser", function() {
return new MemoryView();
return new Views.MemoryView();
});
}
}
@ -314,17 +364,17 @@ function _downloadSourceFile(e) {
function populateExamples(sel) {
// make sure to use callback so it follows other sections
store.length(function(err, len) {
sel.append($("<option />").text("--------- Examples ---------").attr('disabled',true));
sel.append($("<option />").text("--------- Examples ---------").attr('disabled','true'));
for (var i=0; i<PRESETS.length; i++) {
var preset = PRESETS[i];
var name = preset.chapter ? (preset.chapter + ". " + preset.name) : preset.name;
sel.append($("<option />").val(preset.id).text(name).attr('selected',preset.id==main_file_id));
sel.append($("<option />").val(preset.id).text(name).attr('selected',(preset.id==main_file_id)?'selected':null));
}
});
}
function populateFiles(sel, category, prefix) {
store.keys(function(err, keys) {
store.keys(function(err, keys : string[]) {
var foundSelected = false;
var numFound = 0;
if (!keys) keys = [];
@ -332,16 +382,16 @@ function populateFiles(sel, category, prefix) {
var key = keys[i];
if (key.startsWith(prefix)) {
if (numFound++ == 0)
sel.append($("<option />").text("------- " + category + " -------").attr('disabled',true));
sel.append($("<option />").text("------- " + category + " -------").attr('disabled','true'));
var name = key.substring(prefix.length);
sel.append($("<option />").val(key).text(name).attr('selected',key==main_file_id));
sel.append($("<option />").val(key).text(name).attr('selected',(key==main_file_id)?'selected':null));
if (key == main_file_id) foundSelected = true;
}
}
if (!foundSelected && main_file_id && main_file_id.startsWith(prefix)) {
var name = main_file_id.slice(prefix.length);
var name = main_file_id.substring(prefix.length);
var key = prefix + name;
sel.append($("<option />").val(key).text(name).attr('selected',true));
sel.append($("<option />").val(key).text(name).attr('selected','true'));
}
});
}
@ -394,7 +444,7 @@ function setCompileOutput(data) {
}
}
function showMemory(state) {
function showMemory(state?) {
var s = state && platform.cpuStateToLongString && platform.cpuStateToLongString(state.c);
if (s) {
if (platform.getRasterPosition) {
@ -418,7 +468,7 @@ function setDebugButtonState(btnid, btnstate) {
$("#dbg_"+btnid).addClass("btn_"+btnstate);
}
function setupBreakpoint(btnid) {
function setupBreakpoint(btnid? : string) {
platform.setupDebug(function(state) {
lastDebugState = state;
showMemory(state);
@ -662,7 +712,7 @@ function setupDebugControls(){
else
$("#dbg_stepback").hide();
if (window.showLoopTimingForPC) { // VCS-only (TODO: put in platform)
if (window['showLoopTimingForPC']) { // VCS-only (TODO: put in platform)
$("#dbg_timing").click(traceTiming).show();
}
$("#disassembly").hide();
@ -747,8 +797,8 @@ function showWelcomeMessage() {
///////////////////////////////////////////////////
var qs = (function (a) {
if (!a || a == "")
var qs = (function (a : string[]) {
if (!a || a.length == 0)
return {};
var b = {};
for (var i = 0; i < a.length; ++i) {
@ -782,7 +832,7 @@ function uninstallErrorHandler() {
function gotoNewLocation() {
uninstallErrorHandler();
window.location = "?" + $.param(qs);
window.location.href = "?" + $.param(qs);
}
function initPlatform() {

View File

@ -4,13 +4,16 @@ import $ = require("jquery");
import { SourceFile, WorkerError, CodeProject } from "./project";
export interface ProjectView {
createDiv(parent:HTMLElement, text:string);
refresh();
createDiv(parent:HTMLElement, text:string) : HTMLElement;
refresh() : void;
tick?() : void;
getValue?() : string;
getCursorPC?() : number;
getSourceFile?() : SourceFile;
setGutterBytes?(line:number, s:string);
openBitmapEditorAtCursor?();
// TODO
setGutterBytes?(line:number, s:string) : void;
openBitmapEditorAtCursor?() : void;
markErrors?(errors:WorkerError[]) : void;
clearErrors?() : void;
};
// TODO: move to different namespace
@ -39,7 +42,7 @@ function getVisibleEditorLineHeight() : number{
/////
class SourceEditor implements ProjectView {
export class SourceEditor implements ProjectView {
constructor(path:string, mode:string) {
this.path = path;
this.mode = mode;
@ -323,7 +326,7 @@ class SourceEditor implements ProjectView {
///
class DisassemblerView implements ProjectView {
export class DisassemblerView implements ProjectView {
disasmview;
getDisasmView() { return this.disasmview; }
@ -405,7 +408,7 @@ class DisassemblerView implements ProjectView {
///
class ListingView extends DisassemblerView implements ProjectView {
export class ListingView extends DisassemblerView implements ProjectView {
assemblyfile : SourceFile;
constructor(assemblyfile : SourceFile) {
@ -438,7 +441,7 @@ class ListingView extends DisassemblerView implements ProjectView {
///
class MemoryView implements ProjectView {
export class MemoryView implements ProjectView {
memorylist;
dumplines;
maindiv : HTMLElement;

View File

@ -6,34 +6,42 @@ import { ProjectView } from "./views";
type WindowCreateFunction = (id:string) => ProjectView;
function ProjectWindows(containerdiv:HTMLElement, project:CodeProject) {
var self = this;
var id2window = {};
var id2createfn = {};
var id2div = {};
var activewnd;
var activediv;
var lasterrors;
export class ProjectWindows {
containerdiv:HTMLElement;
project:CodeProject;
id2window : {[id:string]:ProjectView} = {};
id2createfn : {[id:string]:WindowCreateFunction} = {};
id2div : {[id:string]:HTMLElement} = {};
activewnd : ProjectView;
activediv : HTMLElement;
lasterrors : WorkerError[];
constructor(containerdiv:HTMLElement, project:CodeProject) {
this.containerdiv = containerdiv;
this.project = project;
}
// TODO: delete windows ever?
this.setCreateFunc = function(id:string, createfn:WindowCreateFunction) {
id2createfn[id] = createfn;
setCreateFunc(id:string, createfn:WindowCreateFunction) {
this.id2createfn[id] = createfn;
}
this.createOrShow = function(id:string) {
var wnd = id2window[id];
createOrShow(id:string) {
var wnd = this.id2window[id];
if (!wnd) {
wnd = id2window[id] = id2createfn[id](id);
wnd = this.id2window[id] = this.id2createfn[id](id);
}
var div = id2div[id];
var div = this.id2div[id];
if (!div) {
div = id2div[id] = wnd.createDiv(containerdiv, project.getFile(id));
var data = this.project.getFile(id)+""; // TODO: binary files
div = this.id2div[id] = wnd.createDiv(this.containerdiv, data);
}
if (activewnd != wnd) {
if (activediv)
$(activediv).hide();
activediv = div;
activewnd = wnd;
if (this.activewnd != wnd) {
if (this.activediv)
$(this.activediv).hide();
this.activediv = div;
this.activewnd = wnd;
$(div).show();
this.refresh();
this.refreshErrors();
@ -41,39 +49,39 @@ function ProjectWindows(containerdiv:HTMLElement, project:CodeProject) {
return wnd;
}
this.put = function(id:string, window:ProjectView) {
id2window[id] = window;
put(id:string, window:ProjectView) {
this.id2window[id] = window;
}
this.refresh = function() {
if (activewnd && activewnd.refresh)
activewnd.refresh();
refresh() {
if (this.activewnd && this.activewnd.refresh)
this.activewnd.refresh();
}
this.tick = function() {
if (activewnd && activewnd.tick)
activewnd.tick();
tick() {
if (this.activewnd && this.activewnd.tick)
this.activewnd.tick();
}
this.setErrors = function(errors:WorkerError[]) {
lasterrors = errors;
setErrors(errors:WorkerError[]) {
this.lasterrors = errors;
this.refreshErrors();
}
this.refreshErrors = function() {
if (activewnd && activewnd.markErrors) {
if (lasterrors && lasterrors.length)
activewnd.markErrors(lasterrors);
refreshErrors() {
if (this.activewnd && this.activewnd.markErrors) {
if (this.lasterrors && this.lasterrors.length)
this.activewnd.markErrors(this.lasterrors);
else
activewnd.clearErrors();
this.activewnd.clearErrors();
}
}
this.getActive = function() : ProjectView { return activewnd; }
getActive() : ProjectView { return this.activewnd; }
this.getCurrentText = function() : string {
if (activewnd && activewnd.getValue)
return activewnd.getValue();
getCurrentText() : string {
if (this.activewnd && this.activewnd.getValue)
return this.activewnd.getValue();
else
alert("Please switch to an editor window.");
}

View File

@ -7,7 +7,9 @@
"lib": [
"es2016",
"dom"
]
],
"noImplicitThis": false,
"noImplicitAny": false
},
"include": [
"./src/*.ts",