Skip to content

Commit ab08c95

Browse files
committed
Added mapping definition listing
1 parent d7926ce commit ab08c95

9 files changed

Lines changed: 75 additions & 39 deletions

File tree

app/components/file/index.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
import React, { useEffect, useState, useRef } from 'react';
22
import { observer } from 'mobx-react';
33
import { Item, Input, File as FileInput, Select, Editor } from '#ui';
4-
import { scriptListing } from '#formats/scripts';
5-
// console.log(require('electron').remote.app.getAppPath())
6-
// const chokidar = require('chokidar');
7-
8-
// chokidar.watch('./scripts').on('all', console.log)
9-
10-
// just load scripts from dropdown
4+
import { listing } from '#formats/scripts';
115

126
export const File = observer(() => {
137

14-
useEffect(() => {
8+
// useEffect(() => {
159

1610

17-
}, []);
11+
// }, []);
1812
return <div>
1913
left align
2014
<FileInput />
21-
{JSON.stringify(scriptListing())}
15+
{JSON.stringify(listing)}
2216
</div>;
2317
});

app/formats/scripts/index.js

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,6 @@
1-
import fs from 'fs';
2-
import { join, dirname } from 'path';
3-
import { errorMsg } from '#util/dialog';
4-
import { uniq } from 'lodash';
5-
6-
// if it can't find it, ask to specify
7-
8-
const scriptPaths = uniq([
9-
process.cwd(),
10-
dirname(process.execPath),
11-
]).map(path => join(path, 'scripts2'));
12-
13-
const scriptDir = scriptPaths.find(path => fs.existsSync(path));
14-
15-
if (!scriptDir) {
16-
errorMsg(`Script Error`, `
17-
Could not find 'scripts' directory for mapping definition files
18-
Searched in;
19-
\t${scriptPaths.join('\n\t')}`);
20-
}
21-
22-
export async function scriptListing() {
23-
// readdirSync(scriptDir)
24-
// console.log(await readdir(scriptDir))
25-
}
1+
// listing.js
2+
3+
export { default as listing } from './listing';
264

275
// function scriptDir() {
286

app/formats/scripts/listing.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import fs from 'fs';
2+
import { join, dirname, parse } from 'path';
3+
import { errorMsg } from '#util/dialog';
4+
import { uniq, debounce } from 'lodash';
5+
import { observable } from 'mobx';
6+
7+
const scriptPaths = uniq([
8+
dirname(process.execPath),
9+
process.cwd(),
10+
]).map(path => join(path, 'scripts'));
11+
12+
const scriptDir = scriptPaths.find(path => fs.existsSync(path) && fs.lstatSync(path).isDirectory());
13+
14+
const scripts = observable([]);
15+
16+
const { readdir } = fs.promises;
17+
18+
async function loadScripts(...args) {
19+
try {
20+
const list = await readdir(scriptDir);
21+
scripts.replace(list.map(filename => ({
22+
value: filename,
23+
label: parse(filename).name,
24+
})));
25+
} catch (e) {
26+
console.error(e);
27+
}
28+
}
29+
30+
if (!scriptDir) {
31+
errorMsg(`Script Error`, `Could not find 'scripts' directory for mapping definition files
32+
Searched in;\n\t${scriptPaths.join('\n\t')}`);
33+
} else {
34+
loadScripts();
35+
fs.watch(scriptDir, debounce(loadScripts, 100));
36+
}
37+
38+
export default scripts;

app/formats/scripts/load.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const globals = {
2+
dc: {
3+
b: 8,
4+
w: 16,
5+
l: 32,
6+
},
7+
nybble: 4,
8+
read: (size) => ({ read: size }),
9+
write: (_write) => {},
10+
};
11+
12+
export default function(source) {
13+
const config = {};
14+
const definition = [];
15+
(new Function('Flex2', source))(new Proxy({}, {
16+
get: (_target, prop) => {
17+
if (globals[prop]) {
18+
return globals[prop];
19+
}
20+
return (...args) => {
21+
definition[prop] = args;
22+
};
23+
},
24+
}));
25+
return definition;
26+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
// Flex2 Mapping Definition
1+
// Flex 2 Mapping Definition
22

33
const {
4+
label,
45
info,
56
offsetTable,
6-
mapping,
7-
mappingHeader,
7+
mappings,
8+
dplcs,
89
write,
910
read,
1011
nybble,
1112
dc,
1213
} = Flex2;
1314

14-
label('Sonic 1');
1515
offsetTable(dc.w, 'mappings');
1616
mappings(
1717
(mapping, i) => {
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)