opencrbasic 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opencrbasic/__init__.py +3 -0
- opencrbasic/__main__.py +5 -0
- opencrbasic/analysis.py +184 -0
- opencrbasic/bindings.py +1034 -0
- opencrbasic/catalog.py +173 -0
- opencrbasic/checkconfig.py +144 -0
- opencrbasic/checker/__init__.py +977 -0
- opencrbasic/checker/cr3xx.py +3118 -0
- opencrbasic/checker/ess.py +81 -0
- opencrbasic/checker/expressions.py +3581 -0
- opencrbasic/checker/instr_data.py +1802 -0
- opencrbasic/checker/instr_measure.py +1547 -0
- opencrbasic/checker/instr_rules.py +3540 -0
- opencrbasic/checker/instructions.py +17 -0
- opencrbasic/checker/intervals.py +678 -0
- opencrbasic/checker/longconv.py +133 -0
- opencrbasic/checker/scan_time.py +580 -0
- opencrbasic/checker/storage.py +456 -0
- opencrbasic/checker/structs.py +240 -0
- opencrbasic/checker/structure.py +6213 -0
- opencrbasic/checker/symbols.py +609 -0
- opencrbasic/checker/terminals.py +249 -0
- opencrbasic/checker/unused.py +186 -0
- opencrbasic/checker/var_types.py +564 -0
- opencrbasic/checker/warnings.py +661 -0
- opencrbasic/checks.py +491 -0
- opencrbasic/cli.py +391 -0
- opencrbasic/commands.py +128 -0
- opencrbasic/compiler.py +320 -0
- opencrbasic/consteval.py +327 -0
- opencrbasic/data/background_calibration.json +4 -0
- opencrbasic/data/before_beginprog.json +99 -0
- opencrbasic/data/cr1000x/background_calibration.json +4 -0
- opencrbasic/data/cr1000x/before_beginprog.json +138 -0
- opencrbasic/data/cr1000x/ess_variables.json +1087 -0
- opencrbasic/data/cr1000x/fnotch.json +29 -0
- opencrbasic/data/cr1000x/functions.json +1337 -0
- opencrbasic/data/cr1000x/instructions.json +4836 -0
- opencrbasic/data/cr1000x/measure.json +121 -0
- opencrbasic/data/cr1000x/mode.json +111 -0
- opencrbasic/data/cr1000x/pipeline_tasks.json +88 -0
- opencrbasic/data/cr1000x/settings_fields.json +321 -0
- opencrbasic/data/cr1000x/status_members.json +318 -0
- opencrbasic/data/cr1000x/symbols.json +872 -0
- opencrbasic/data/cr1000x/terminals.json +225 -0
- opencrbasic/data/cr300/before_beginprog.json +42 -0
- opencrbasic/data/cr300/ess_variables.json +1087 -0
- opencrbasic/data/cr300/fnotch.json +22 -0
- opencrbasic/data/cr300/functions.json +1261 -0
- opencrbasic/data/cr300/instructions.json +2837 -0
- opencrbasic/data/cr300/measure.json +33 -0
- opencrbasic/data/cr300/mode.json +121 -0
- opencrbasic/data/cr300/settings_fields.json +259 -0
- opencrbasic/data/cr300/status_members.json +303 -0
- opencrbasic/data/cr300/symbols.json +584 -0
- opencrbasic/data/cr300/terminals.json +193 -0
- opencrbasic/data/cr350/before_beginprog.json +44 -0
- opencrbasic/data/cr350/ess_variables.json +1087 -0
- opencrbasic/data/cr350/fnotch.json +22 -0
- opencrbasic/data/cr350/functions.json +1262 -0
- opencrbasic/data/cr350/instructions.json +2848 -0
- opencrbasic/data/cr350/measure.json +35 -0
- opencrbasic/data/cr350/mode.json +121 -0
- opencrbasic/data/cr350/settings_fields.json +292 -0
- opencrbasic/data/cr350/status_members.json +303 -0
- opencrbasic/data/cr350/symbols.json +572 -0
- opencrbasic/data/cr350/terminals.json +190 -0
- opencrbasic/data/ess_variables.json +1087 -0
- opencrbasic/data/fnotch.json +34 -0
- opencrbasic/data/functions.json +1337 -0
- opencrbasic/data/instructions.json +4965 -0
- opencrbasic/data/measure.json +123 -0
- opencrbasic/data/mode.json +121 -0
- opencrbasic/data/notices_cr6.json +890 -0
- opencrbasic/data/pipeline_tasks.json +84 -0
- opencrbasic/data/settings_fields.json +322 -0
- opencrbasic/data/status_members.json +319 -0
- opencrbasic/data/status_table.json +684 -0
- opencrbasic/data/symbols.json +902 -0
- opencrbasic/data/terminals.json +195 -0
- opencrbasic/data/type_codes.json +249 -0
- opencrbasic/diagnostics.py +196 -0
- opencrbasic/editing.py +827 -0
- opencrbasic/formatting.py +310 -0
- opencrbasic/helpdocs.py +677 -0
- opencrbasic/hover.py +667 -0
- opencrbasic/inlay.py +169 -0
- opencrbasic/lexer.py +183 -0
- opencrbasic/lsp/__init__.py +5 -0
- opencrbasic/lsp/__main__.py +7 -0
- opencrbasic/lsp/config.py +202 -0
- opencrbasic/lsp/features.py +602 -0
- opencrbasic/lsp/server.py +741 -0
- opencrbasic/lsp/session.py +1189 -0
- opencrbasic/lsp/worker.py +128 -0
- opencrbasic/mode.py +143 -0
- opencrbasic/navigation.py +401 -0
- opencrbasic/parser.py +3264 -0
- opencrbasic/positions.py +274 -0
- opencrbasic/preprocess.py +269 -0
- opencrbasic/profiles.py +266 -0
- opencrbasic/provenance.py +17 -0
- opencrbasic/quickfix.py +331 -0
- opencrbasic/rename.py +662 -0
- opencrbasic/signature.py +33 -0
- opencrbasic/source.py +600 -0
- opencrbasic/sources.py +125 -0
- opencrbasic/syntax.py +337 -0
- opencrbasic/tables.py +2173 -0
- opencrbasic/tables_hook.py +14 -0
- opencrbasic/tdf.py +142 -0
- opencrbasic/timing.py +565 -0
- opencrbasic-1.0.0.dist-info/METADATA +223 -0
- opencrbasic-1.0.0.dist-info/RECORD +117 -0
- opencrbasic-1.0.0.dist-info/WHEEL +4 -0
- opencrbasic-1.0.0.dist-info/entry_points.txt +3 -0
- opencrbasic-1.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: opencrbasic
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Open-source re-implementation of the Campbell Scientific CRBasic pre-compilers (CR6, CR1000X, CR300, CR350)
|
|
5
|
+
Project-URL: Repository, https://github.com/UtrechtUniversity/open-crbasic
|
|
6
|
+
Author: Utrecht University
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Topic :: Scientific/Engineering
|
|
12
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
13
|
+
Requires-Python: >=3.15
|
|
14
|
+
Provides-Extra: lsp
|
|
15
|
+
Requires-Dist: pygls<3,>=2.1.1; extra == 'lsp'
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# opencrbasic
|
|
19
|
+
|
|
20
|
+
A native re-implementation of Campbell Scientific's CRBasic pre-compilers for the CR6, CR1000X,
|
|
21
|
+
CR300 and CR350 dataloggers (`CR6Comp.exe`, `cr1000xcomp.exe`, `cr300comp.exe`, `cr350comp.exe`),
|
|
22
|
+
with a language server. It runs on Linux, macOS and Windows with only Python 3.15+, no Wine and no
|
|
23
|
+
Windows binaries. It is MIT licensed and not affiliated with Campbell Scientific; provenance and
|
|
24
|
+
what this repository deliberately leaves out are in the [legal notes](docs/legal.md). Version 1.0:
|
|
25
|
+
[release record](docs/release-1.0.md).
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install opencrbasic # crbc, the compiler
|
|
29
|
+
pip install "opencrbasic[lsp]" # also crbc-lsp, the language server
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The VS Code extension lives in [open-crbasic-vsix](https://github.com/UtrechtUniversity/open-crbasic-vsix);
|
|
33
|
+
agent skills for writing CRBasic in [open-crbasic-skills](https://github.com/UtrechtUniversity/open-crbasic-skills).
|
|
34
|
+
|
|
35
|
+
Status, measured against the real compilers: `PROGRESS.md`. Design and the v1.0 milestones:
|
|
36
|
+
[`PLAN.md`](PLAN.md#v10-milestones).
|
|
37
|
+
|
|
38
|
+
## Scope
|
|
39
|
+
|
|
40
|
+
- **Gated profiles: CR6 and CR1000X.** On these, v1.0 gates the reference verdict in the relevant
|
|
41
|
+
area (the FirnMelt/GEUS instruction set and language constructs), the execution mode, and the
|
|
42
|
+
first error for realistic mistakes on relevant rules, measured on the FirnMelt programs, the 507
|
|
43
|
+
CRBasic help examples, the 66 GEUS programs, the saved fuzz replay and fresh `--relevant` fuzz
|
|
44
|
+
seeds. The help examples and GEUS programs are not redistributed here; see
|
|
45
|
+
[tests/corpus/README.md](tests/corpus/README.md) for running against local copies. One relevant-area false accept is known: a `Sub` name that is also another routine's
|
|
46
|
+
parameter, used as a value. CR300 and CR350 are best effort: measured and kept, not gated (human
|
|
47
|
+
decision 2026-10-24).
|
|
48
|
+
- **Outputs.** stdout, the message file, `-s`, `-u`, `-p`/`-i`, `-l`/`-c` and the CR6 TDF (`-z`) are
|
|
49
|
+
compared byte for byte by the [artifact matrix](docs/artifacts.md), which also lists what is best
|
|
50
|
+
effort per profile. `-t` covers the oracle-fitted instruction set (`docs/cli.md`).
|
|
51
|
+
- **Excluded:** the CDM binary image of `-b` ([PLAN](PLAN.md#explicit-exclusions-from-parity)).
|
|
52
|
+
- Known remaining cases (false accepts outside the relevant set, first-error decisions, matrix
|
|
53
|
+
differences) are listed in the release record.
|
|
54
|
+
|
|
55
|
+
## Three channels
|
|
56
|
+
|
|
57
|
+
Every finding belongs to one channel ([PLAN](PLAN.md#three-diagnostic-channels)):
|
|
58
|
+
|
|
59
|
+
1. **Reference diagnostics**: what the reference compiler reports. Default `crbc` stdout, the message
|
|
60
|
+
file and the exit status carry only these, so `crbc` stays a drop-in.
|
|
61
|
+
2. **opencrbasic checks** (`OCB001`-`OCB007`): likely defects the reference accepts, each with
|
|
62
|
+
evidence, controls and a default severity; `crbc --strict` (stderr, exit 3 on a check error),
|
|
63
|
+
`--report`, `opencrbasic.toml`, and the editor (source `opencrbasic (check)`). See
|
|
64
|
+
`docs/checker.md` "opencrbasic checks OCB002-OCB007 (M3)".
|
|
65
|
+
3. **Coverage notices**: CR6 reference rules opencrbasic is known not to model, from the
|
|
66
|
+
[evidence inventory](docs/inventory.md); `--report` and, when enabled, editor hints. Information,
|
|
67
|
+
never a verdict.
|
|
68
|
+
|
|
69
|
+
## Accepted differences
|
|
70
|
+
|
|
71
|
+
In the differential tools, equal means equal exit status and equal stdout after whitespace
|
|
72
|
+
normalization (line endings, trailing spaces); the artifact matrix compares bytes. By the human decision of 2026-10-24, differences in the order,
|
|
73
|
+
wording or cascade of diagnostics after the first error are accepted and do not block a release;
|
|
74
|
+
differences in the first error are fixed when they come from a realistic mistake and otherwise
|
|
75
|
+
recorded in [`docs/first-error-review.md`](docs/first-error-review.md). Runner failures and
|
|
76
|
+
reference crashes are never counted as verdicts.
|
|
77
|
+
|
|
78
|
+
## Versions
|
|
79
|
+
|
|
80
|
+
- The package version (`pyproject.toml`) and `opencrbasic.__version__` are one number
|
|
81
|
+
(`tests/test_versions.py`). Major: a change to the drop-in contract or a gated verdict policy;
|
|
82
|
+
minor: new checks, notices or features; patch: fixes. The VS Code extension, in its own repository, has its
|
|
83
|
+
own version.
|
|
84
|
+
- `analysis.API_VERSION` (now 2) versions the editor facade; the language server refuses to start
|
|
85
|
+
with another (`docs/lsp-api.md`). `checks.SCHEMA_VERSION` (now 2) versions the `--report` JSON.
|
|
86
|
+
Each is bumped only on an incompatible change.
|
|
87
|
+
|
|
88
|
+
## Use
|
|
89
|
+
|
|
90
|
+
Python dependencies are managed with [uv](https://docs.astral.sh/uv/). The package itself has
|
|
91
|
+
no runtime dependencies; the `dev` group adds pytest, pefile (for the reverse-engineering tools),
|
|
92
|
+
pygls, pyrefly and pre-commit.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
uv sync # environment from uv.lock
|
|
96
|
+
uv run pre-commit install # ruff, pyrefly and file hygiene on every commit
|
|
97
|
+
uv run crbc Program.CR6 # compile
|
|
98
|
+
uv run pytest -q -n auto # tests
|
|
99
|
+
uv tool install . # optional: `crbc` on PATH outside the project
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Contributor and agent conventions: [AGENTS.md](AGENTS.md).
|
|
103
|
+
|
|
104
|
+
`crbc` is a drop-in for `CR6Comp.exe` (`docs/cli.md`):
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
crbc [options] program [messagefile]
|
|
108
|
+
-s also print ProgSignature
|
|
109
|
+
-z FILE write the binary table definition file (TDF)
|
|
110
|
+
-l FILE write the text table list (also -c)
|
|
111
|
+
-v / -d print version (then compile / and exit)
|
|
112
|
+
--logger L cr6 | cr1000x | cr300 | cr350 (default: from the file extension
|
|
113
|
+
.CR6/.CR1X/.CR300/.CR350, else cr6)
|
|
114
|
+
--no-message-file do not write the message file (CR6cmple.xxx, CR1000Xcmple.xxx, ...)
|
|
115
|
+
--strict also run opencrbasic checks (likely defects the reference accepts) on stderr;
|
|
116
|
+
exit 3 when the program compiles but a check reports an error
|
|
117
|
+
(exit 4: invalid opencrbasic.toml)
|
|
118
|
+
--report FILE write a JSON report (reference verdict and diagnostics, check findings)
|
|
119
|
+
--config FILE use this opencrbasic.toml (default: nearest ancestor of the program)
|
|
120
|
+
--check CODE=SEVERITY set a check severity (error|warning|info|off); repeatable
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Check configuration and the report schema: `docs/checker.md` "Check configuration and report file".
|
|
124
|
+
|
|
125
|
+
Output follows the exe's format: `Program.CR6 -- Compiled in SequentialMode.` (CR300/CR350:
|
|
126
|
+
`-- Compiled OK.`), `Warning: ...` lines, or `-- Compile Failed!` followed by `line N: message`
|
|
127
|
+
lines; the same text goes to `<LOGGER>cmple.xxx` (for example `CR6cmple.xxx`) with CRLF line
|
|
128
|
+
endings; exit status 0 or 1.
|
|
129
|
+
|
|
130
|
+
As a library:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from pathlib import Path
|
|
134
|
+
from opencrbasic import profiles
|
|
135
|
+
from opencrbasic.compiler import compile_file
|
|
136
|
+
|
|
137
|
+
result = compile_file(Path("Main.CR6"), profiles.get("cr6"))
|
|
138
|
+
result.ok, result.mode, result.signature
|
|
139
|
+
[d.cr6comp() for d in result.diagnostics.items]
|
|
140
|
+
result.tables # list of tdf.TdfTable (Status, DataTables, DataTableInfo, ConstTable, Public)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
`parser.parse_file()` gives the syntax tree (`syntax.py`) for other tools.
|
|
144
|
+
|
|
145
|
+
[openloggernet](https://github.com/UtrechtUniversity/open-loggernet) uses opencrbasic when
|
|
146
|
+
`CR6COMP=opencrbasic` is set, and the FirnMelt station repository compiles every program with it in
|
|
147
|
+
CI.
|
|
148
|
+
|
|
149
|
+
## Editor support
|
|
150
|
+
|
|
151
|
+
`crbc-lsp` (`python -m opencrbasic.lsp`) is a language server for CRBasic programs; the `logger`
|
|
152
|
+
setting selects the CR6 profile (default) or CR1000X, CR300 or CR350. It reports the compiler's
|
|
153
|
+
diagnostics and offers hover, completion, signature help, outline, folding, go to definition,
|
|
154
|
+
references, highlighting, rename, formatting and quick fixes. Its highlighting names are the CR6 ones.
|
|
155
|
+
The VS Code client is [open-crbasic-vsix](https://github.com/UtrechtUniversity/open-crbasic-vsix). Setup, settings, feature limits and the
|
|
156
|
+
host-tested status are in [`docs/lsp-user-guide.md`](docs/lsp-user-guide.md). It also shows the
|
|
157
|
+
opencrbasic checks and, with `opencrbasic.coverageNotices`, the coverage notices. The editor features
|
|
158
|
+
were host-tested in VS Code on macOS (T-01 to T-18, `LSP_TO_BE_TESTED.md`); the check and notice display
|
|
159
|
+
(M6) has not been host-tested yet, and Windows and Linux are not claimed.
|
|
160
|
+
|
|
161
|
+
## How it was built
|
|
162
|
+
|
|
163
|
+
The exe is the logger's own compiler built for Windows. Its instruction, function and
|
|
164
|
+
predefined-symbol tables were extracted from the binary (`tools/extract_tables.py`), its
|
|
165
|
+
behaviour was studied with Ghidra and with thousands of runs of the real exe under Wine, and
|
|
166
|
+
everything is checked differentially:
|
|
167
|
+
|
|
168
|
+
| Tool | Checks |
|
|
169
|
+
|---|---|
|
|
170
|
+
| `tools/oracle.py` | runs the real exe under Wine (cached) |
|
|
171
|
+
| `tools/difftest.py --logger L` | normalized output vs the exe over repository programs and 507 CHM help examples |
|
|
172
|
+
| `tools/tdftest.py` | `-z` TDF and `-l` table list, byte for byte |
|
|
173
|
+
| `tools/fuzz.py`, `tools/fuzz_replay.py` | mutated programs, differential; reproducers in `tests/corpus/fuzz/` |
|
|
174
|
+
| `tools/artifact_matrix.py` | every output file per profile and option set, with a baseline gate |
|
|
175
|
+
| `tools/inventory.py` | the CR6 evidence inventory and the coverage-notice table |
|
|
176
|
+
| `uv run pytest -q` | unit tests, corpus parse tests, TDF fixtures |
|
|
177
|
+
|
|
178
|
+
The tools that run the real compilers need them in a local, git-ignored `compiler/` directory
|
|
179
|
+
(copy `CR6Comp.exe`, `cr1000xcomp.exe`, `cr300comp.exe` and `cr350comp.exe` from a CRBasic Editor
|
|
180
|
+
install) and Wine on macOS and Linux.
|
|
181
|
+
|
|
182
|
+
Differential and replay runs default to reporting differences without failing on known gaps. Use
|
|
183
|
+
the gates when a nonzero exit is required:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
uv run tools/difftest.py --logger cr6 --gate no-regressions
|
|
187
|
+
uv run tools/difftest.py --logger cr6 --gate exact
|
|
188
|
+
uv run tools/fuzz_replay.py --gate no-regressions --json replay.json
|
|
189
|
+
uv run tools/fuzz_replay.py --gate exact --json replay.json
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`no-regressions` fails for a false rejection, opencrbasic crash or hang (and both tools
|
|
193
|
+
fail for an oracle error). `exact` fails for any result that does not match the normalized
|
|
194
|
+
reference output. Replay's `--json FILE` writes summary counts and individual result rows for CI
|
|
195
|
+
and later triage. See [`PLAN.md`](PLAN.md#remaining-work-strategy) for how remaining differences
|
|
196
|
+
are measured and fixed.
|
|
197
|
+
|
|
198
|
+
Reverse-engineering notes: `docs/binary.md` (exe layout), `docs/cli.md`, `docs/type-codes.md`
|
|
199
|
+
(parameter kinds), `docs/frontend.md` (language quirks), `docs/checker.md` and
|
|
200
|
+
`docs/instructions.md` (diagnostic rules), `docs/modes.md` (Sequential/Pipeline),
|
|
201
|
+
`docs/tdf-rules.md` (table definitions), `docs/loggers.md` (per-logger differences),
|
|
202
|
+
`docs/fuzz-findings.md`. Provenance and licensing questions: `docs/legal.md`.
|
|
203
|
+
|
|
204
|
+
## Layout
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
src/opencrbasic/
|
|
208
|
+
lexer.py source.py consteval.py parser.py syntax.py front end
|
|
209
|
+
checker/ semantic checks and diagnostics
|
|
210
|
+
mode.py tables.py tdf.py signature.py outputs
|
|
211
|
+
profiles.py data/<logger>/*.json per-logger tables and rules
|
|
212
|
+
compiler.py cli.py driver and crbc
|
|
213
|
+
tools/ oracle, difftest, tdftest, fuzzing, table extraction, Ghidra script
|
|
214
|
+
tests/ unit tests, corpora, fixtures
|
|
215
|
+
docs/ behaviour of the original compilers, with evidence
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Releasing
|
|
219
|
+
|
|
220
|
+
Every push to `dev` that passes CI is published to TestPyPI as `<version>.dev<run number>`. A push
|
|
221
|
+
to `main` publishes to PyPI when `version` in `pyproject.toml` (and `opencrbasic.__version__`) has
|
|
222
|
+
not been released yet. Publishing uses PyPI trusted publishing from the `pypi` and `testpypi` GitHub
|
|
223
|
+
environments; no API token is stored in the repository.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
opencrbasic/__init__.py,sha256=BTMymX9P3mluEMxr5RSpJKQlAE3P9EEz-5HGWA4Q2Ws,69
|
|
2
|
+
opencrbasic/__main__.py,sha256=E6Gls0DNz8GQK2K-kOUIx8cYhgANW_CH54VKrfCfs14,52
|
|
3
|
+
opencrbasic/analysis.py,sha256=x9os9CEeTioNgO9WcFggC5mLtvV9Qx5Q8DD7fOR6uvI,8035
|
|
4
|
+
opencrbasic/bindings.py,sha256=XBsAIwaOxNdXqmDLnpAUmJacUCsW9-JeihNI-H0igPo,44517
|
|
5
|
+
opencrbasic/catalog.py,sha256=LdS6XsLfjSZKKC_UDpzQaZsvzSA788_IxyA7EPZU5ow,5997
|
|
6
|
+
opencrbasic/checkconfig.py,sha256=GrTXqcCllmWXS7uI-femtlf8HGzep48Ot7bhYrIiTms,5843
|
|
7
|
+
opencrbasic/checks.py,sha256=sp1fSTw0BfeBqR8TjyVZVLELqdVAMEbgWUhU7v3JOnI,21069
|
|
8
|
+
opencrbasic/cli.py,sha256=AXkK0f2RZeldXSlsRZ6DOys3CTV03n1ACmo3WwBXwSQ,15864
|
|
9
|
+
opencrbasic/commands.py,sha256=JhzUNBRZpd7w9RiJNYSUWA3kHRMob7l8nUjDJw5YZZs,5103
|
|
10
|
+
opencrbasic/compiler.py,sha256=8h81LC02K_dPr9hO6CLlqBvYxMdE30PWLHstcGyY9VY,17275
|
|
11
|
+
opencrbasic/consteval.py,sha256=lwV3Q3R7uEe3sJE_lDYl_y9AnMeRyC9OTwrkC7GjLAc,12610
|
|
12
|
+
opencrbasic/diagnostics.py,sha256=5F9gm-Hi-yLmAloNc_QwLsaCU4SG7v2jMNASK-LgwoI,8537
|
|
13
|
+
opencrbasic/editing.py,sha256=34sMHIwSu2ZvtMOFqnZesbHjv3wKSyyu9UPQ0qviLyQ,35582
|
|
14
|
+
opencrbasic/formatting.py,sha256=DB1PWxHRJevXE72S4GSbrMk0PiLHjFJqHWS1SWzV0Bs,12858
|
|
15
|
+
opencrbasic/helpdocs.py,sha256=LYaGpFKwKkNANWpwijXlH6TZYHgdWaJbtzBZFA6LPbs,24271
|
|
16
|
+
opencrbasic/hover.py,sha256=s97KVTMzGhPGdKgOYp4cMnoqiiYLM96NY6x8bBkN3nk,26366
|
|
17
|
+
opencrbasic/inlay.py,sha256=lh0u41VU8NhqH01mZ0Bo9-9d83W9SHChbp7u1BK2GG8,6814
|
|
18
|
+
opencrbasic/lexer.py,sha256=Ti3toK7AGGWAbyhe_yAok-T6QhKhbslvDIpbclsopYM,6273
|
|
19
|
+
opencrbasic/mode.py,sha256=RSAPFGQDOfyVDjemYG8EKX2kEmxVunNjOTEdreaEALk,5923
|
|
20
|
+
opencrbasic/navigation.py,sha256=-XIouoUxehuiw_GH3ma70KBfkDL-CRzlcwTenuMKOmc,15989
|
|
21
|
+
opencrbasic/parser.py,sha256=XO-yGB40hCNqecChKiRMwvw58hK1ylqsN-4CNnZrIHE,163551
|
|
22
|
+
opencrbasic/positions.py,sha256=a6PJ7cDOG8Gn6jNfh564fr1R-A4lcdQAqvYe5vS9ON4,11782
|
|
23
|
+
opencrbasic/preprocess.py,sha256=FAtaPNSamKzxHfgCz7EK0sepzYxx-fs4BPSwpvoubIc,11969
|
|
24
|
+
opencrbasic/profiles.py,sha256=OZAP984-cWTmfhvhbM43t70JF45-6eMF3D54_mW40f0,12664
|
|
25
|
+
opencrbasic/provenance.py,sha256=_jVlW5WUnSuVw7j-iY43cOIwcwKAh3s4BxMq_78XiTY,557
|
|
26
|
+
opencrbasic/quickfix.py,sha256=3ztbHJNTWTaC2aahOtRBJTH-oVJk-JmIBYYwMeW7cHc,13090
|
|
27
|
+
opencrbasic/rename.py,sha256=6pQaajBZmMTjAIfmWiVtsoPtTVQFWnCR_snO6b-283M,28877
|
|
28
|
+
opencrbasic/signature.py,sha256=QbrMu40XZfAneOlac_i5QDWDTuqNAzv2ZndTyXWuyDw,1137
|
|
29
|
+
opencrbasic/source.py,sha256=J21X_WvLAf6z0nkC6mRriGusWi_DdBHSW7O8iygQCm4,28420
|
|
30
|
+
opencrbasic/sources.py,sha256=_837MNZMNOjP0JXuVs35RMXrhm4I6fAYzxEyP8ydOnk,5121
|
|
31
|
+
opencrbasic/syntax.py,sha256=CGdzo6_b5zwRcpyGnY61xZeVH4b2yVNzZB8EYEgcpg8,11935
|
|
32
|
+
opencrbasic/tables.py,sha256=bVseoJ5-LOQs4_MHc8Xk7zF6xGCJEe3SJye7Vt9Qcig,90787
|
|
33
|
+
opencrbasic/tables_hook.py,sha256=X7VCkEFGA0uwtypTzRNVo_WwH10Jmd2CbvLpLbLsdXA,534
|
|
34
|
+
opencrbasic/tdf.py,sha256=-ak5_5B1-cOko6getMkq54CHAU6JMMPNHMK2AZk6_24,4720
|
|
35
|
+
opencrbasic/timing.py,sha256=-MzcWFSBuk0FILLK6RiF5WTAhvHnrisRZ11pTIyBYBc,22936
|
|
36
|
+
opencrbasic/checker/__init__.py,sha256=VIyp5WxC8uOXQO9-SIHh9T6tdiao4O07SJjCEqy9uG8,59792
|
|
37
|
+
opencrbasic/checker/cr3xx.py,sha256=3zn_S5fTeeR9TANIak_-Uy-8KMgPz-_GQFowirZCcEY,164392
|
|
38
|
+
opencrbasic/checker/ess.py,sha256=wIxWWfNElxC9zm2T8LYhhWNny7Zh_cMpACtftprYld4,3609
|
|
39
|
+
opencrbasic/checker/expressions.py,sha256=EYdyX191lNc79qDzpbQ_aBlsSl7tGCq2OUJzQYHCZGw,191338
|
|
40
|
+
opencrbasic/checker/instr_data.py,sha256=pqQLOYK4PHyYwKa7jClD1_RpEb-EXwfJde1UIJPY7N0,87938
|
|
41
|
+
opencrbasic/checker/instr_measure.py,sha256=s6vck3DVwGuBXJ2hSL90nPPQgdnSfHJ-h064g48_PMw,73765
|
|
42
|
+
opencrbasic/checker/instr_rules.py,sha256=DQd7R5xdA-0Kk2QRuYLaALPg7Za3Eg_DmDM7q5knlKY,178354
|
|
43
|
+
opencrbasic/checker/instructions.py,sha256=k_XMmLmLxF3HXWt4FSrdAX__zU67Hwf4v7Y3ZyDeua0,784
|
|
44
|
+
opencrbasic/checker/intervals.py,sha256=vdBlSq5QBBfEhTnJzKlinCorO-sB4glo74csU-FmkS8,31697
|
|
45
|
+
opencrbasic/checker/longconv.py,sha256=x1ho3u93OFYCtWwSt20gjCFj6nO6A0DBUsTcKsCi6R8,5291
|
|
46
|
+
opencrbasic/checker/scan_time.py,sha256=GUWpiw93mX7aWSr3TAVjsLKKyrbqQD4S-IJWh08bJ8U,21580
|
|
47
|
+
opencrbasic/checker/storage.py,sha256=sm__XDOXDRkRBy3kTuKO3tzC0dABnHyL5QgUYRbLEc8,18521
|
|
48
|
+
opencrbasic/checker/structs.py,sha256=I7mIwdlztcmZHsaeJGPRgFIIQ9x-mm9xYxAZnysxG4k,11315
|
|
49
|
+
opencrbasic/checker/structure.py,sha256=hnZb9vlv5jm9c6bSJeH4jkLD4TrgRCEGpBoEjKmDRP8,322774
|
|
50
|
+
opencrbasic/checker/symbols.py,sha256=0pkuAUsilKV8SXHBmiXIL22Gb027AHeHe7ympRGUwog,29612
|
|
51
|
+
opencrbasic/checker/terminals.py,sha256=BgE-VdDCG2PzF9ad65ttB5nERweQkon8HDGfs2dGCOg,13739
|
|
52
|
+
opencrbasic/checker/unused.py,sha256=7u4_WWt-B1O5fUJTO-Nwq_EGOvAcnG7vjRm7sc8e92o,9423
|
|
53
|
+
opencrbasic/checker/var_types.py,sha256=kmORx5c96psla0ClFXz3YVZMaIUtyjMeRVlEQP0P5zc,25836
|
|
54
|
+
opencrbasic/checker/warnings.py,sha256=5wtNxuNuoZEMDKu0LzaZhh_2RecWWhmqcKkOj2WF4xE,33007
|
|
55
|
+
opencrbasic/data/background_calibration.json,sha256=XqSQJXprkcF2HVIhDTBzgXQEaJI00sH74Q8T3aCCxvk,44
|
|
56
|
+
opencrbasic/data/before_beginprog.json,sha256=aEaV-wzP9-34WTPQyjQcRQgZ4C4q5Jd-gh4m87IihFQ,1466
|
|
57
|
+
opencrbasic/data/ess_variables.json,sha256=eYvXOS2OLevn79SzCdvkwpduCqlu4NiCLBHt9gANeu8,15513
|
|
58
|
+
opencrbasic/data/fnotch.json,sha256=mYtASxm44XYtIQbCLBwTroVU2AIHt7zNxsDnbl1knTk,545
|
|
59
|
+
opencrbasic/data/functions.json,sha256=lEofqWCAs__soCkchMwj86p_vet1jkzKE9SOwJPQvTA,15224
|
|
60
|
+
opencrbasic/data/instructions.json,sha256=a4dU3BSu5s1COCy4BbnWwJIbw1oBwG5QHAFlZ4SCb90,58153
|
|
61
|
+
opencrbasic/data/measure.json,sha256=V4E4lxFmV6UagFIzmOG5yFyKOMgeYCxCwV2ltN1jAb8,12913
|
|
62
|
+
opencrbasic/data/mode.json,sha256=aDL5GiXrQw4VUeaYkcara16DzAB1AvEXfPRDYwnVN8o,1535
|
|
63
|
+
opencrbasic/data/notices_cr6.json,sha256=DgPQa8q8jVhyLXY3l3S-mexN5v_WiNl2LI27SaDKeQs,29057
|
|
64
|
+
opencrbasic/data/pipeline_tasks.json,sha256=_6UO-7SOzGtkXAit03wgRi9Mg7mSPLUil2vGYORz_6o,4586
|
|
65
|
+
opencrbasic/data/settings_fields.json,sha256=UzGR5zNHsZ_ruEWW4CCZ_BRJ0aJ4lGnMaWUZp5XucKo,6395
|
|
66
|
+
opencrbasic/data/status_members.json,sha256=1p62OFu_slAZY92UcGFwbzmnk70jRn4oZSCx8qvp0C8,6335
|
|
67
|
+
opencrbasic/data/status_table.json,sha256=642vlfxyfgNNXF4dIUE_DOSJ1c4psW0z4cyxL9hc3jU,12917
|
|
68
|
+
opencrbasic/data/symbols.json,sha256=5Ut5nXjo78njWvQtW-qZxhfY13DDL7MGkC9MssBMDco,10876
|
|
69
|
+
opencrbasic/data/terminals.json,sha256=G4WBfkQhok-Efy2i1bNdIEy04gYYgRk7UKYJHcMJx9E,4284
|
|
70
|
+
opencrbasic/data/type_codes.json,sha256=4efa4SGr01ARQ0piC2Zou-sTNdiwRwyIwkJE4KRdkF0,9340
|
|
71
|
+
opencrbasic/data/cr1000x/background_calibration.json,sha256=xZE2t5VfIdkXPYOhTR96KqBJOxNh403gLH-Vgzpy3Ik,44
|
|
72
|
+
opencrbasic/data/cr1000x/before_beginprog.json,sha256=ubD3TTRNUlIwOHgWt9JyfSDo13FNqyTtCqMsqH_I6xM,2018
|
|
73
|
+
opencrbasic/data/cr1000x/ess_variables.json,sha256=eYvXOS2OLevn79SzCdvkwpduCqlu4NiCLBHt9gANeu8,15513
|
|
74
|
+
opencrbasic/data/cr1000x/fnotch.json,sha256=9QRaPaJw9v5RZO6IjY_BLYC4lP1AvBKZpQoNBr1ATmo,447
|
|
75
|
+
opencrbasic/data/cr1000x/functions.json,sha256=lEofqWCAs__soCkchMwj86p_vet1jkzKE9SOwJPQvTA,15224
|
|
76
|
+
opencrbasic/data/cr1000x/instructions.json,sha256=Ju5M7UDbasBPPU9m3NWzTEfFk7E57h0scp0v4Ppz4w8,56841
|
|
77
|
+
opencrbasic/data/cr1000x/measure.json,sha256=IW9p6s9iIfHTZBnRRBfMuhRGCIHsNOxtFHnFlQeZYpY,12989
|
|
78
|
+
opencrbasic/data/cr1000x/mode.json,sha256=Hs63jVv1FwgQTDI5uRvMQqjxHBj2I5UQXGHTlTr7FBE,1425
|
|
79
|
+
opencrbasic/data/cr1000x/pipeline_tasks.json,sha256=bSn4fyC5QzwoAjCBYmYdEKoMdb3-fv6ndL-NtcTzrLk,4605
|
|
80
|
+
opencrbasic/data/cr1000x/settings_fields.json,sha256=xGiHlDDI2iWgp1ucO5TULmAo_UBFnnYB5IzL-AXUrfI,6376
|
|
81
|
+
opencrbasic/data/cr1000x/status_members.json,sha256=zVXzSz66fM95b63qAgpPCatlTGKGHYVr403qeNBgGYA,6316
|
|
82
|
+
opencrbasic/data/cr1000x/symbols.json,sha256=ffDM8PrhSipJzEPY_E048SvMNegPP2tThtmSEApXp9U,10519
|
|
83
|
+
opencrbasic/data/cr1000x/terminals.json,sha256=MjOjqslmcUU1W8-l8EIdl_M_bBXkPgXIwX1CHoJV3kY,5077
|
|
84
|
+
opencrbasic/data/cr300/before_beginprog.json,sha256=ZwoWHseTZj7V4974t8O3h7gGCizsFZuokrcK7_eT40M,607
|
|
85
|
+
opencrbasic/data/cr300/ess_variables.json,sha256=eYvXOS2OLevn79SzCdvkwpduCqlu4NiCLBHt9gANeu8,15513
|
|
86
|
+
opencrbasic/data/cr300/fnotch.json,sha256=dDO-lnXJVLdh0f4ZKESPAjY4GWzXtYQVTJJ5l5UtLOI,424
|
|
87
|
+
opencrbasic/data/cr300/functions.json,sha256=aSh-01P9mvlah2-sl7z6_io2t8Pke6ThRynOh22XqZQ,14384
|
|
88
|
+
opencrbasic/data/cr300/instructions.json,sha256=mSwN1W4fIgLqqFD8qC5UAVXFSBNUAo_Nje5yZy7avRs,33504
|
|
89
|
+
opencrbasic/data/cr300/measure.json,sha256=J-pBRau5loX9FSNI3sMCc_vptRcwxLgwIQLVQVSKyD4,3479
|
|
90
|
+
opencrbasic/data/cr300/mode.json,sha256=aDL5GiXrQw4VUeaYkcara16DzAB1AvEXfPRDYwnVN8o,1535
|
|
91
|
+
opencrbasic/data/cr300/settings_fields.json,sha256=O-v9-uZMSJhJy0-fhfOQlgZpvTgryKai-9n1JeoP1qM,5125
|
|
92
|
+
opencrbasic/data/cr300/status_members.json,sha256=1NSTlkeCkH1vV2O0Myrn7BjTj3GCSHJy-aspJYKzoxU,5918
|
|
93
|
+
opencrbasic/data/cr300/symbols.json,sha256=DNaQuY6sRD5DF_5_4Jk2Cs8Wc8PwCUvhmXCuRkSh_Iw,6862
|
|
94
|
+
opencrbasic/data/cr300/terminals.json,sha256=0_wJlb-mjF2RDnZIW3Uyo9JlNnUpWC578kKalmm-zao,2578
|
|
95
|
+
opencrbasic/data/cr350/before_beginprog.json,sha256=e729hC9gegiimlMtd7uxE6E0f4xwFRlAtgneMjKgTVs,634
|
|
96
|
+
opencrbasic/data/cr350/ess_variables.json,sha256=eYvXOS2OLevn79SzCdvkwpduCqlu4NiCLBHt9gANeu8,15513
|
|
97
|
+
opencrbasic/data/cr350/fnotch.json,sha256=dDO-lnXJVLdh0f4ZKESPAjY4GWzXtYQVTJJ5l5UtLOI,424
|
|
98
|
+
opencrbasic/data/cr350/functions.json,sha256=dkJVu1sXw9q46bkC4cvec4zWUS9a2T1pTk76U4Ikcw4,14390
|
|
99
|
+
opencrbasic/data/cr350/instructions.json,sha256=VjyHRuK7LRWceh7Dt5SC4n18DGg6aY0IR4aTTD83iTs,33633
|
|
100
|
+
opencrbasic/data/cr350/measure.json,sha256=aS7yfBTRLbg_T2Lu-SvVWDP7q9i9s3XT8wFzTOXvvkQ,3570
|
|
101
|
+
opencrbasic/data/cr350/mode.json,sha256=aDL5GiXrQw4VUeaYkcara16DzAB1AvEXfPRDYwnVN8o,1535
|
|
102
|
+
opencrbasic/data/cr350/settings_fields.json,sha256=egq67rA2IK1W1L--IEnuqlR2Lk1Adu2wBVP7tLUF0B4,5718
|
|
103
|
+
opencrbasic/data/cr350/status_members.json,sha256=pcerKWE4-T-JP9e4jQQB-jgswcE1XqYDighi1aP8Zro,5910
|
|
104
|
+
opencrbasic/data/cr350/symbols.json,sha256=aBzFEzsx--MiNUaZSfUTS03J9sgpw0lBG8UrUd9FKSk,6739
|
|
105
|
+
opencrbasic/data/cr350/terminals.json,sha256=rKq1sSAxOmL3WA8cRXFb4pQeKqOy8xp_gZKNOSwLtVs,2461
|
|
106
|
+
opencrbasic/lsp/__init__.py,sha256=rM9KU1MmqPhA4cGoNshuJqcc0SmuyC2DOR2oSZ4ndMM,288
|
|
107
|
+
opencrbasic/lsp/__main__.py,sha256=6QFKhUdX-RoROkY3t2whBZOVJqN7VI2JiKvLmcKsTB8,238
|
|
108
|
+
opencrbasic/lsp/config.py,sha256=wfF8wKiy_SidYrTXEu1cyg9Xs_odjWdv1JymGSnXzF4,8160
|
|
109
|
+
opencrbasic/lsp/features.py,sha256=6jIM1JIh1Pw92__5x5lKtcQ9e7G4-9I5FsLlvDyNGaA,24757
|
|
110
|
+
opencrbasic/lsp/server.py,sha256=HCDvHvH9R6P1Gf2m83_az4oIJZVkgvqpbbY8wtsas_Q,34162
|
|
111
|
+
opencrbasic/lsp/session.py,sha256=ME2275mN_asYFtSETQQgGUROJ9_C_IpgZfEU_TThNTw,51651
|
|
112
|
+
opencrbasic/lsp/worker.py,sha256=ndYNwMZQvmUBzRooQzOc1xtQOtznnxNtIGbCoY9N6eo,4510
|
|
113
|
+
opencrbasic-1.0.0.dist-info/METADATA,sha256=XD-uaqg_f6o1MkY4IM97WA2949zLoxSTx37y2oeuz8A,11997
|
|
114
|
+
opencrbasic-1.0.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
115
|
+
opencrbasic-1.0.0.dist-info/entry_points.txt,sha256=DzdZzqpQ8PRSqacUSH72RavZVOmqm2vZBuKZy3rv6ak,85
|
|
116
|
+
opencrbasic-1.0.0.dist-info/licenses/LICENSE,sha256=s06qSrrNAXyntCFucwYn5JUqqEcrUnYLEzO_OOef4-g,1075
|
|
117
|
+
opencrbasic-1.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Utrecht University
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|