Skip to content

Latest commit

 

History

History
518 lines (411 loc) · 26.8 KB

File metadata and controls

518 lines (411 loc) · 26.8 KB

ISMS user guide

How to use ISMS to edit an IVAO Aurora sectorfile: open one, find your way around it, change it, check it against the format and the IVAO standards, and package the release.

This is the manual for the person editing a sector. For what the project is, how it is built and how a version of the app is released, see the README; for the format itself, the format specification and the IVAO standards.

What ISMS is not

ISMS is an independent, unofficial tool. IVAO did not make it, does not endorse it and does not support it. Aurora, the sectorfile format and the standards checked here are IVAO's; ISMS is one person's reading of the documents they publish, offered as is and with no warranty. Nothing that follows from using it — a damaged file, a lost afternoon, a release sent back — is the author's responsibility.

Three consequences are worth carrying with you through the rest of this guide:

  • The validator is not an authority. Its rules are written from the format specification and the IVAO standards, and both are prose. A finding can be raised on a row that is perfectly correct, and a row that is wrong can pass unmentioned. Read what a finding says and decide; do not treat a sector with no findings as approved, or one with findings as broken.
  • A fix writes to your files. The Fix buttons in the validator change rows you are not looking at — one of them, or every one across the sector. Each says what it is about to write, every one is a single step of undo, and nothing touches the disk until you save. Check the result anyway.
  • What you see is what ISMS understood. A record drawn in the wrong place, or a file that comes up empty, means ISMS misread it — not that Aurora will. Aurora is the only authority on what Aurora accepts.

The first time you run the app it says this in a window of its own, with a box to tick so it stops asking. Until that box is ticked it comes back on every launch, and Help ▸ About ISMS opens it again afterwards.

None of this touches the one promise ISMS does make, which is in the next section: your bytes are safe. Work on a Git checkout of the sector, and read the diff before you commit it.

Before you start

Install ISMS from the Releases page — ISMS_<version>_x64-setup.exe installs per user and needs no administrator rights. Windows will warn that it does not recognise the publisher; the installer is not code-signed, and the README explains why. Click More info ▸ Run anyway.

You need a sectorfile on disk: an .isc file with its Include directory beside it, exactly as Aurora installs it. ISMS reads and writes that directory in place, so work on a Git checkout of the sector, not on your live Aurora install — every change you make is a change you will have to review.

The single promise ISMS makes is worth knowing before you trust it with a repository: opening a file and saving it without editing produces the same bytes it had before. ISMS never regenerates a file from a model. It keeps the original bytes and replaces only the span you edited, so a commit's diff is the lines you changed and nothing else.

A first pass, end to end

The shortest useful path through the app: open a sector, change one thing, see that it is still valid, and save it.

The window before a sector is open

  1. File ▸ Open .isc… and pick the .isc at the root of the sector. If the directory holds several, ISMS lists them rather than making you type a path. The sectors you have opened before are on the front page and under Open in the File menu, which after the first time is the whole of this step. Opening resolves the whole include graph — every F; directive along the [INFO] search paths, and every file auto-loaded because it is named after an ICAO declared in [AIRPORT] — so what you get is what Aurora gets.
  2. Find what you want to change. Type into the Project panel's search box. It matches file names and file contents, so BARDI3S finds the file that defines the procedure even if nothing in its name says so. Click the group — a SID, a polygon, an airspace — and the inspector opens its source; the ⤢ button beside it zooms the render onto it.
  3. Change a line in the inspector. The render and the diagnostics follow as you type. Nothing has touched the disk yet.
  4. Read the diagnostics. The bottom panel lists what the validator found in the whole sector. Click a finding to jump to the line that caused it. If your edit broke something, it appears here immediately.
  5. Ctrl+S saves every file with unsaved changes. Until you do, the title bar and the tree carry the unsaved marks and the disk is untouched.
  6. When the work of a cycle is done, Tools ▸ Prepare a release… writes the Changelog.txt entry and builds the distribution .zip.

Everything below is the detail of those steps.

The window

The four panels: the include tree, the render, the source of the selection and the validator's findings

Panel What it holds
Project (left) The include tree, grouped by directory. The checkbox beside a file switches its layer on the render; the twisty opens what is inside it — SID and STAR procedures, [FILLCOLOR] polygons, airspace identifiers — each with its own checkbox and its own ⤢, which zooms the render onto it. Clicking a file's name opens the whole file in the inspector, which is the only way into a file that draws nothing: a .def, a colour scheme, the header comments of a .geo. A file with findings against it carries their count.
Render (centre) The sector drawn with the colours of the loaded [COLORSCHEME].
Inspector (right) The source of whatever is selected — the group by default, the whole file on request — editable in place.
Diagnostics (bottom) The validator's findings, with the per-severity totals doubling as a filter.

Drag the rules between panels to resize them, or use the arrow keys once a rule has focus. View ▸ Reset the panel sizes puts them back.

The editor and the render can each be torn off into a window of their own from the Window menu, which is what you want on two monitors. A detached panel is a second view of the same state, not a second document: it shares the project, the buffers and the undo history, because those live in the backend. Closing the main window closes them.

Panel sizes, hidden layers, hidden groups, unfolded directories and where the render was looking are remembered per sector, so reopening one puts you back on the apron you were working on rather than at the whole-sector extent. The window's own size and position are remembered too, including a detached pane's — the point of pulling the render onto the second monitor is that it stays there. All of it lives in ISMS's own configuration directory, never inside the sector: the tool does not drop its own files into a repository other people have to review.

The render

The ground of Madrid with only its taxiways, gates and geo switched on, and the coordinate under the pointer read out top right

  • Pan by dragging, zoom with the wheel. Rotation is off; a sector chart that is not north-up is a chart nobody can read.
  • Click geometry to select it. The selection is the line that drew it: the inspector opens there, with the caret on that line.
  • The other direction works too. The line the caret is on is marked in magenta — the segment that line draws and the points at its ends — so walking a procedure with the arrow keys shows you the drawing leg by leg. A detached render window follows the editor's caret as well.
  • View ▸ Waypoint labels draws the identifiers next to the points. Useful when you are checking a procedure against a chart, noisy the rest of the time.
  • The coordinate under the pointer is read out in the top right, in canonical DMS and in decimal degrees. Ctrl+C over the render copies it as the pair of tokens a record is written with — N040.27.47.100;W003.33.14.040; — ready to paste. The reading is only ever as precise as the pixel the cursor is on, so zoom in before trusting one. A selection in the editor or in a dialog still owns Ctrl+C.
  • View ▸ Show every layer / Hide every layer are the fast way back from a tree where you have switched off half the sector.

Measuring

Hold Shift and the render frames itself in white, the pointer becomes a ruler, and clicks measure instead of selecting — the pen's red frame and pencil say the same thing about drawing, and both are there because a click is about to do something other than what it did a moment ago. Click once to anchor the ruler; the reading then follows the pointer — the distance in nautical miles and in metres, and the bearing both true and magnetic. The magnetic one uses the sector's own declared variation from [INFO], not a model, so it is the figure Aurora draws its radials with.

The far end snaps to drawn points exactly as the pen does, so a runway is measured from its threshold and an apron from its corner rather than from a pixel near one. A second Shift+click fixes it, and so does letting go of Shift — the reading stays on the map, with the distance on the leg and the whole of it in the corner, until Escape clears it or the next Shift+click starts another.

Distances are great-circle, worked out from the coordinates rather than from the drawing: at 40°N a degree of longitude is 76% of a degree of latitude, and a ruler that measured the plane would be wrong by a quarter along every east-west leg.

Editing

Edits change the in-memory buffer, the render and the diagnostics. Nothing is written to disk until you save. Undo and redo are unlimited within a session and are labelled in the Edit menu with the operation they will reverse, so you can see what Ctrl+Z is about to take back before you press it.

Inside a text field, Ctrl+Z and Ctrl+Y are that field's own undo, not the file's. Ctrl+S saves from anywhere, including from inside the editor.

By default the inspector shows the group you selected. View ▸ Edit the whole file widens it to the entire file, for the times when the change is not confined to one procedure.

Adding a record

Edit ▸ Add a record at the caret… builds a record from a form that knows the schema of the section it is going into, so you fill in fields rather than counting semicolons. The record is inserted at the caret.

Its coordinate fields take whatever the publication printed, not just the format's own notation: 432826.9N, 41°00'25.6"N, N40 28.426, decimal with either separator, and the typographic marks a PDF hands over instead of the real ones. Paste the pair into either box and both are filled — which is how a plate gives it to you. Anything already written the way the format wants is left exactly as typed; only what the strict reader could not take is rewritten, and it is rewritten to padded DMS so you can see what was understood before the row is composed. The same fields, and the same rule, in the holding generator below.

Pasting a table from a publication

Edit ▸ Paste a table from a publication… takes a table copied straight out of an AIP.

A pasted table with its columns identified, every row shown as the record it will become

Column roles are detected from the shape of the cells, not from their headings — an AIP is a national document and every state lays its tables out differently — and you can correct the detection before anything is inserted. Coordinates come out as the canonical padded DMS the manual specifies, whatever form the publication used. Names are matched against the sector, so a pasted coordinate that is already a known fix is written as BARDI;BARDI; rather than as a duplicate point.

Finding text, and going to a line

Ctrl+F opens a search over the source of the whole sector. The Project panel's filter matches file names and procedure ids; this one matches the bytes, which is the only way to reach a colour token, a coordinate, a callsign or a comment — none of those is the name of anything. It searches the buffers, so a line you typed a moment ago and have not saved is found.

Results are grouped by file. Enter goes to the one marked and then to the next; Shift+Enter walks back; the arrow keys do the same, and each hit opens in the inspector as you reach it, so the panel is a way of reading the results rather than of choosing one of them. Aa matches case, and this file narrows the search to the file the inspector is showing. Escape closes it.

A query that starts with a colon is a line number instead: Ctrl+G opens the same panel with the colon already there, so :412 and Enter puts the caret on line 412 of the file you are in.

Finding what uses a waypoint

Everything that names BARDI, and the row that defines it

Edit ▸ Who uses this waypoint… lists everything that names the identifier on the current line, and where it is defined. It works off the parsed record, so it behaves the same on the [FIXES] row that defines a point and on a procedure leg that flies through it. Use it before renaming or removing anything.

Tracing a shape

For drawing an apron edge, a taxiway line or any outline that exists on a chart but not yet in the sector.

Hold Ctrl. The render frames itself in red and the pointer becomes a pencil, its point on the pixel a click would take. Every click places a point:

The render framed in red, with four points of a draft placed against the taxiways

  • Points snap to a point already drawn or to the nearest vertex of whatever is under the cursor, so a traced apron edge meets the taxiway it runs into exactly. A white ring shows the point a click would take, before it is taken.
  • Ctrl+drag still pans.
  • Ctrl+Z takes back the last point.
  • Enter, or Close outline, closes the shape back onto its own first corner exactly — which snapping cannot do once that corner is off screen.
  • Escape ends the run; the next click starts another one.
  • Releasing Ctrl changes nothing. The draft is a drawing, not a mode: letting go of the key can never cost you work.

Export… writes the draft out as [GEO] segments, as a [FILLCOLOR] polygon with its header and colour, or as bare coordinate rows. It shows the row count and a preview of the shape before anything is copied.

Written as coordinates, the first point of each run carries <br>. A blank line breaks a [GEO] path, but in a procedure section it breaks nothing — there a new path starts at the point carrying the marker, and rows pasted without it join the procedure above and the one below. Turn the check box off only when the points belong to a path that is already being drawn.

The draft written out as a FILLCOLOR polygon, with its header, its colours and a preview of the shape

The draft is never an edit. Nothing reaches a file until you paste the rows in yourself.

Drawing a holding

Some shapes are not traced, they are computed. Tools → Holding / racetrack… draws one from the numbers on the plate.

The holding dialog: the fix, an inbound course of 288 magnetic, a one-minute leg at 220 knots and FL050 on the left; on the right the racetrack it draws, the figures it arrived at, and the rows it would write

The fix is where the inbound leg ends — where the aircraft crosses and starts turning, which is where the symbol is anchored on the chart. It opens filled in from the last point on the draft, so clicking the fix on the render first saves typing it, and it takes a coordinate in the plate's own notation — paste 432826.9N 0053932.5W into either box and both are filled.

  • The course is the inbound one, which is what plates publish. Say Outbound if you are reading the other track off the plate instead, and Magnetic or True for which one it is. A magnetic course is converted through the sector's own [INFO] variation — the figure Aurora draws its own radials with, not a model.
  • The leg is minutes or nautical miles. Minutes are the ICAO way — one below FL140, one and a half above — and are flown at the true airspeed below.
  • The turn radius is stated, or computed from the maximum holding speed and the level. Computed, it uses the gentler of 25° of bank and rate one, which is how the pattern is designed. The figures it arrived at are listed beside the drawing: check the true airspeed and the radius against the plate.
  • Arc detail is degrees per segment, and it is the row count in disguise: 5° is thirty-six points a turn, 15° is twelve.

The drawing and the rows are both shown before anything leaves the dialog. The arrow is a run of its own, so both it and the track start with <br> and neither runs into the procedure it is pasted next to.

Copy takes the plain coordinates; Add to the draft puts the pattern on the render, where it can be undone, drawn over, and exported as [GEO] or a [FILLCOLOR] with everything else on the draft.

The files of the sector

The Project panel's right-click menu manages the files:

Entry What it does
New file here… Creates a file and declares it in the .isc. These are one operation — a file nothing includes is a file Aurora never reads — and if the declaration fails, the file is undone.
Add an existing file… Declares a file that is already on disk.
Duplicate… Copies a file and declares the copy.
Rename… Renames the file and rewrites the declaration that names it.
Remove from the sector Undeclares it, leaving the file on disk.
Delete from disk… Undeclares it and deletes it.
Open the whole file The same as clicking the file's name.
Paste a table from a publication… As above, into that file.

Anything that adds or removes a file reopens the project, because file ids are positions in the include graph and those renumber. That is why these operations clear the undo history — save before you reach for them.

When files change underneath you

ISMS assumes it is never the only writer. Sectorfiles get edited in whatever text editor is already open, and Aurora reloads them from disk. A watcher reparses external changes in place and the render follows them, with no need to reopen the project.

If a file changes on disk while ISMS is holding unsaved edits to it, that is a conflict: nothing is reloaded and nothing is overwritten, and ISMS says so. You resolve it, either by saving over the file or by File ▸ Reload from disk… and discarding your work. The tool will not choose for you which of two people's edits survives.

Validation

The findings for one rule, filtered by its code, with the rule's explanation above them

The validator walks what the parser already produced, so a rule can never disagree with what is drawn on the render. Every finding carries a permanent code, which means you can filter on it and cite it in an issue:

Range Domain
V1xx Project structure and the include graph
V2xx Coordinates
V3xx Colours
V4xx Identifiers and references
V5xx Record schema
V6xx IVAO quality standards
V9xx Metrics

Click a finding to go to the line. Click a severity total to see only that severity; View ▸ Clear the diagnostics filter removes it. In the inspector, the line numbers of rows that carry a finding are marked in the severity's own colour, so the source and the panel are looking at the same thing. Those marks are not capped the way the list is.

Fixing what does not need you

Most rules are decisions. An include that resolves to nothing, an ICAO declared twice, a missing changelog — each of those needs somebody to know what was meant, and a tool that guessed would be editing the sector rather than checking it.

Four are not decisions, and those carry a Fix:

Code What it writes
V203 N039.32.14 → N039.32.14.000, the fraction Aurora truncates to
V204 W003.10.0.0 → W003.10.00.000, padded as the manual specifies
V205 N044.47.60.000 → N044.48.00.000, sixty seconds carried into the minute
V302 STOPLINE → STOPBAR, APPRON → APRON

Fix on a finding writes that row. Fix all on a rule's heading writes every one of them across the sector — a thousand of them on a sector nobody has run a validator over, which is the difference between a report worth reading and a report worth ignoring.

Either way it is one step of history: Ctrl+Z takes the whole thing back, and nothing is on disk until you Save. The button says what it will write before you press it.

A repair never moves a point. It is arithmetic on the digits the token already has, not a conversion out to decimal degrees and back, so the coordinate that comes out denotes exactly the coordinate that went in. Where that is not possible it is not offered: N040.27.47.6271 cannot be written in fourteen characters without losing its last digit, so it stays a finding and you decide.

The .isc's own rules — a trailing semicolon on an include, an include whose case does not match the disk — have no Fix yet. The .isc is not edited through a buffer like the rest of the sector; changing it reopens the project.

Severity is not encoded in the code. A rule may be promoted or demoted as we learn more about the real data, but its code never moves — so a code you cited last year still means the same thing.

Expect findings on a sector nobody has run a validator over before, and expect many of them to be pre-existing. The parser accepts everything Aurora accepts, including the thousands of unpadded DMS tokens the real corpus contains, precisely so the validator can make that tolerance visible instead of letting a sectorfile quietly rot until someone's approach chart stops drawing.

Preparing a release

Tools ▸ Prepare a release…

The changelog entry, with the edited files already listed, above the contents of the distribution zip

Changelog.txt is what an ATC Advisor reviews, its template is fixed, and a contribution without a complete one is not approved. It is also the one part nobody can reconstruct after the fact — so ISMS keeps a journal as the work happens: every save, every file added, renamed or removed.

The dialog therefore opens with the added, removed and edited lists already filled in. You supply the FIR name, the date and the AIRAC cycle, and a description of what the update does; ISMS appends the entry newest first, in the template's exact shape.

Then it builds the distribution .zip from the files you tick.

delete.upd is offered from the same journal and stays opt-in. Unzipping an update deletes nothing, so a file that moved leaves its old copy behind on every install — still loaded, and still auto-loaded if its name is an ICAO. But no delete.upd exists anywhere in the reference corpus, and shipping one nobody asked for is not a decision a tool gets to make. It is yours.

The journal is cleared when you explicitly start a new cycle, not when the changelog is written: a release is not finished until it is packaged.

Keeping the app up to date

ISMS tells you when there is a new version. A few seconds after the window is up it asks GitHub once, and if a release is waiting a button appears in the status bar beside the version you are running: Update to 0.1.4. A check that finds nothing, or that cannot reach GitHub at all, says nothing.

Tools ▸ Check for updates… does the same thing on demand, at any time.

Either way, nothing is downloaded until you confirm in the dialog that names the version and its release notes. Both are disabled while there are unsaved edits, since installing restarts the app.

When ISMS comes back up on the new version it opens What's new in ISMS 0.1.4 once: that version's entry from CHANGELOG.md, which is the same text the release notes on GitHub carry. Closing it is the end of it — it does not come back, and it never appears on a first install or on a build from source.

You can also just install a newer version over an older one; there is no need to uninstall first, and your per-sector state survives because it lives in the configuration directory, not in the install.

Shortcuts

F1 — or Help ▸ Keyboard shortcuts… — shows this list inside the app, built from the same table the menus print their accelerators from.

Ctrl+O Open an .isc
Ctrl+S Save every file with unsaved changes
Ctrl+Z Undo — or, while tracing, take back the last point
Ctrl+Y / Ctrl+Shift+Z Redo
Ctrl+F Find text in the sector
Ctrl+G Go to a line
F1 The keyboard reference
Ctrl+Enter (in the inspector) Apply the region being edited
Ctrl (held, over the render) Trace
Ctrl+C (over the render) Copy the coordinate under the pointer
Shift (held, over the render) Measure
Enter (while tracing) Close the outline
Escape (while tracing) End the run
Escape (over the render) Clear the measurement
Escape (in a dialog) Cancel

On a Spanish keyboard, AltGr reports itself to the window as Ctrl+Alt. ISMS ignores anything with Alt held, so typing @, #, [, ], {, } or \ does not trip a shortcut.

When something goes wrong

  • A window shows an error screen with a stack trace. Something in the UI threw. Nothing on disk is at risk, and the button reloads the window — but unsaved edits in that window are not recoverable. The message and the stack are the useful part of a bug report.
  • A file will not reload. It has unsaved edits and has also changed on disk. See When files change underneath you.
  • The render is empty after opening. Check the layer checkboxes in the Project panel — hidden layers are remembered per sector, so a layer you switched off weeks ago is still off.
  • Windows warns about the installer. Expected, and explained in the README.