About | ACP | Buy | Industry Watch | Learning Curve | Search | Test Drive
Home » Products » Reviews

Orthodox File Management

A closer look.

Get It

Try It

Orthodox file management? What's that? Let's ask our good friends at Wikipedia.


'Orthodox file managers, or command-based file managers, are text-menu based file managers that commonly have three windows... one of the longest running families of file managers, preceding graphical user interface-based types. Developers create applications that duplicate and extend the manager that was introduced by PathMinder and John Socha's famous Norton Commander for DOS...'

Of PathMinder, Wikipedia share the following.

'PathMinder was the first DOS shell to incorporate an integrated text editor, the first to include an application manager, and the first to include activity logging.'

So a bit of a 'kitchen sink'?

'The program filled a required niche in the market, as DOS shipped with no graphical file manager, until the generally unsuccessful DOS Shell that was provided with MS-DOS 4.'

But it's 'Norton Commander' that's more well known.

'Norton Commander (NC) is a discontinued prototypical orthodox file manager (OFM), written by John Socha and released by Peter Norton Computing (later acquired in 1990 by the Symantec corporation). NC provides a text-based user interface for managing files on top of MS-DOS. It was officially produced between 1986 and 1998. The last MS-DOS version was released on July 1, 1998.'

The word 'prototypical' seems ill-advised, as PathMinder was the prototype, but whatever: for there's a certain fervour for these dinosaurs, despite all and even today - and yes, even on the Mac.

So let's take a look at a brand new release for Mojave: 'Commander One' from Eltima. (Lots of screenshots here.)

Round One

Initial download. 38,951,744.

That's 991 items.

There's a .DS_Store in there. With extended attributes.

The total DMG is 991 items, 80,308,919 bytes, 159,752 blocks, and 144 bytes in extended attributes.

The app bundle itself is 987 items.

Or 987 items, 79,920,098 bytes, 158,976 blocks, and 0 bytes in extended attributes.

There's a PkgInfo in there. A completely useless file. Consumes 4 KB for eight bytes that have no meaning. Xcode generates it anyway.

The Frameworks subdirectory has 455 items, 17,292,503 bytes, 34,912 blocks, 0 bytes in extended attributes.

The Swift dylibs are 15 in number, consuming 11,028,672 bytes or 21,608 blocks, with 0 bytes in extended attributes. Just imagine if each and every application linked with Swift has to carry these around, as is the case today.

This screenshot tells us three things.

  1. The code author is 'dima'.
  2. As we can see that name, this must be a 'debug' rather than a 'release' or 'install' build.
  3. Dima's a bit weak on spelling.

The Plugins subdirectory. 255 items, 40,218,080 bytes, 79,176 blocks, 0 bytes in extended attributes. That's over half the total size of the bundle.

The Resources subdirectory. 239 items, 14,991,658 bytes, 30,280 blocks, 0 bytes in extended attributes. What's curious here is that there are several monster image files here, but the bundle doesn't seem to have them in its 'assets' file.

The assets file. 3.5 MB.

Inside the assets file.

Time to load this into Tracker.

Tracker is up.

'Starting Target'. This relates to the 'Oompa Loompa' exploit and how 'Finder info' was hacked. When the iPhone team left OS X development, an ambitious 'left-behind' changed the legacy NeXT code - couldn't understand how the default application to open an application was the application itself - and so the bug in 10.4 Tiger.

Fortunately the NeXT programmers were a bit smarter. We reported the bug, and Apple restored the old code - but only for going forward. The 10.4 code still needs a band-aid to this day.

This question comes up immediately. The answer of course is 'no'.

And we're up! (Why aren't the tableviews in Dark Mode?)

By default the app hides things. This is perhaps not a good idea, even though ls does it too (but not as frenetically).

Note that directories are given the size 'DIR' which is a lie. Directories do have size, and the filesystem reports back the actual bytes in use. (Cluster use can be easily calculated as well.)

As for 'Kind': that's a bit redundant, as we can already see the icon in the opposite margin.

Doug McIlroy would have a shit-fit if he saw this. It's a process listing inside a file manager?

The first thing you do, taught Doug, is sit down and define what your program is going to do. If your program is a file manager, then that's easy: it's going to manage files. If you want everything under one roof, the beige Shangri-La of one program and one folder to put it in, then you take a step back and look around: you're already doing that - it's called your operating system.

As for this column data: what is it? Sometimes we show file extensions? Where? Only sometimes? Why? And this 'modified', 'created', 'added', 'opened': what exactly are they? We have four (4) time stamps today.

atimeLast accessed
ctimeinode last changed
mtimeLast modified

What is 'added'?

And how about file flags? How about legacy 'catalog info'? How about access control lists?

And we can open our own Terminal right inside the program! We could always do that outside the program at no additional charge but... For some reason, this one always wants to scoot to root by default, for some unfathomable reason...

You need to be able to determine the starting directory dynamically, based on your own current working directory in the program itself. Otherwise it's pretty useless.

Time to call on Doug again. We don't need these options all over the place (and redundantly too) and without keyboard shortcuts. That's why we have the Dock.

And 'Restart as Root'? From within the app? That's going to require authentication services...

Here they come... Nope, not that way, thanks. Gotta know exactly what's going on, and that way you don't know what's going on. So thanks anyway.

A look at the Preferences panel.

How about 'Goto'? This is a bit sensitive. The text in the entry field is red until you complete a valid path, whereupon it turns black and becomes illegible. But this is any easy bug to fix.

And it can go to exotic locations like /dev. (Finder can't.) But there the fun stops: it uses Finder's bloody useless info popups which tell you actually less than nothing.

Full Turbo Mode™. Note text in the leftmost columns is truncated in the middle, not the end, making it harder to figure out what's what.

And again: why isn't this in Dark Mode? And what's this '0 bytes / 5 KB in 0 / 5 file(s). 0 / 25 dir(s)'? And you can't figure out programmatically whether to add the 's', Mr Programmer?

Searching is fun. Well actually it's not. For starters: searching from where? And we don't need search in in the same function. And make your text at the bottom legible.

This search didn't work. A 'RegEx' option was offered but the program didn't seem to catch on when fed a regex.

Strip the regex of its regexiness and just give the program a plain old text string and it still can't catch on.

And we're through. For now.

Round Two

Now back to Tracker, who says what?

Tracker says 190 items were changed (and 6335 were accessed).

Here's one file that was created.

And it's a genuine log file. But there are some funky things in it. They're highlighted in red.

2019-07-03 15:13:28.122 Commander One[4555:409410] ApplePersistence=NO
2019-07-03 15:13:28.163 Commander One[4555:409431] NetworkStorageDB:_openDBReadConnections: failed to open read connection to DB @ /Users/rixstep/Library/Caches/com.eltima.cmd1/Cache.db.  Error=14. Cause=unable to open database file
2019-07-03 15:13:28.163 Commander One[4555:409431] CacheRead: unable to open cache files in /Users/rixstep/Library/Caches/com.eltima.cmd1
2019-07-03 15:13:28.756 Commander One[4555:409432] osxfuse found: false
2019-07-03 15:13:28.758 Commander One[4555:409410] com.eltima.cmd1 : load address (0x10efd6000)
2019-07-03 15:13:28.758 Commander One[4555:409410] com.eltima.Appstatico : load address (0x10f7a8000)
2019-07-03 15:13:28.759 Commander One[4555:409410] com.eltima.TCXCore : load address (0x10f89e000)
objc[4555]: Class XAttributes is implemented in both /Volumes/Commander One/Commander One.app/Contents/MacOS/Commander One (0x10f611030) and /Volumes/Commander One/Commander One.app/Contents/PlugIns/TCX7ZipFS.bundle/Contents/MacOS/TCX7ZipFS (0x1141e7bd8). One of the two will be used. Which one is undefined.
2019-07-03 15:13:28.797 Commander One[4555:409410] com.eltima.TCX7ZipFS : load address (0x114018000)
2019-07-03 15:13:28.827 Commander One[4555:409410] com.eltima.TCXBBFS : load address (0x114228000)
2019-07-03 15:13:28.847 Commander One[4555:409410] com.eltima.TCXBonjourFS : load address (0x11427c000)
2019-07-03 15:13:28.881 Commander One[4555:409410] com.eltima.TCXBoxComFS : load address (0x11429f000)
2019-07-03 15:13:28.997 Commander One[4555:409410] com.eltima.TCXDropboxFS : load address (0x1142ea000)
2019-07-03 15:13:29.117 Commander One[4555:409410] com.eltima.TCXFtpFS : load address (0x114b57000)
2019-07-03 15:13:29.168 Commander One[4555:409410] com.eltima.TCXGDrive : load address (0x114eb1000)
2019-07-03 15:13:29.206 Commander One[4555:409410] com.eltima.TCXIosFS : load address (0x114fab000)
2019-07-03 15:13:29.230 Commander One[4555:409410] com.eltima.TCXMtpFS : load address (0x115169000)
2019-07-03 15:13:29.405 Commander One[4555:409410] com.eltima.TCXOneDrive : load address (0x1151f8000)
2019-07-03 15:13:29.433 Commander One[4555:409410] com.eltima.TCXOpenStackFS : load address (0x1153a0000)
2019-07-03 15:13:29.446 Commander One[4555:409410] com.eltima.TCXProcessesFS : load address (0x1153e5000)
2019-07-03 15:13:29.460 Commander One[4555:409410] com.eltima.TCXRarFS : load address (0x115402000)
2019-07-03 15:13:29.628 Commander One[4555:409410] com.eltima.TCXS3FS : load address (0x11547c000)
2019-07-03 15:13:29.654 Commander One[4555:409410] com.eltima.TCXTarFS : load address (0x1157d1000)
2019-07-03 15:13:29.668 Commander One[4555:409410] com.eltima.TCXWebDAV : load address (0x1158bc000)
2019-07-03 15:13:30.048 Commander One[4555:409410] program(/Volumes/Commander One/Commander One.app/Contents/MacOS/Commander One), arguments((
2019-07-03 15:13:30.464 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:13:45.203 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:13:57.351 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:17:16.449 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:18:04.633 Commander One[4555:409410] File descriptor server exited with status 0
2019-07-03 15:18:16.797 Commander One[4555:409410] program(/Volumes/Commander One/Commander One.app/Contents/MacOS/Commander One), arguments((
2019-07-03 15:18:17.082 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:18:41.064 Commander One[4555:409410] File descriptor server exited with status 0
2019-07-03 15:19:13.973 Commander One[4555:409410] start as root error -60006
2019-07-03 15:19:17.348 Commander One[4555:409410] program(/Volumes/Commander One/Commander One.app/Contents/MacOS/Commander One), arguments((
2019-07-03 15:19:17.619 Commander One[4555:409410] Can't install keyboard hook.
2019-07-03 15:19:26.495 Commander One[4555:410402] failed read content for /.DocumentRevisions-V100 (The file “.DocumentRevisions-V100” couldn’t be opened because you don’t have permission to view it.)
2019-07-03 15:24:06.224 Commander One[4555:411906] failed read content for /usr/sbin/authserver (The file “authserver” couldn’t be opened because you don’t have permission to view it.)
2019-07-03 15:24:08.009 Commander One[4555:411906] failed read content for /private/var/at/tabs (The file “tabs” couldn’t be opened because you don’t have permission to view it.)
2019-07-03 15:24:08.012 Commander One[4555:411906] failed read content for /private/var/at/tmp (The file “tmp” couldn’t be opened because you don’t have permission to view it.)
2019-07-03 15:26:54.568 Commander One[4555:409410] File descriptor server exited with status 0
Empty exitMovePaneMode!
Empty exitMovePaneMode!
Empty exitMovePaneMode!
Empty exitMovePaneMode!
Empty exitMovePaneMode!
Empty exitMovePaneMode!

Another curious critter is ~/Library/Application Support/com.eltima.cmd1/.uploads. Note the '.' to make it sort of invisible.

But 'uploads'? Uploads of what? To where?

Further files were found in /var/folders.

The file 'com.eltima.TCXGDrive.plist was found. It was empty.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

The file 'com.eltima.cmd1.plist' was also found. It was a bit more complex - here are its keys.

<key>Default Bookmark Guid</key>
<key>NSToolbar Configuration 51C56BB8-D7DA-43BA-9630-5AEE90A47B51</key>
<key>NSWindow Frame CopyDialog</key>
<key>NSWindow Frame MoveDialog</key>
<key>NSWindow Frame NSFontPanel</key>
<key>NSWindow Frame PreferencesWindow</key>
<key>NSWindow Frame TCXWindow</key>
<key>eTerm Version</key>

87 of the 190 affected files had to do with icon services.

Round Three

There are 233,873 directories on this test machine. (Yes, it's running Mojave 10.14.5.)

Two hundred and thirty-three thousand, eight hundred seventy-three directories.

You can't see even a sliver of the hierarchy with the above app. Nothing.

You get to see two directories at once.

That leaves two hundred and thirty-three thousand, eight hundred seventy-one directories unseen.

Norton Commander, for some bizarre reason called an orthodox file manager, was written for MS-DOS and released in 1986.

Back then, Microsoft didn't even like the idea of 'subdirectories'. It took them several years to do the same everyone else did, namely put the system files in another directory, as 'root' was always limited in size. (Microsoft chose the path C:\DOS.)

Those 'two file manipulation objects' that Norton Commander creator John Socha saw, side by side: there weren't many others in the system. And if you want 'two file manipulation objects' side by side today, you just ask OS X to give you tabs. In most any Cocoa application.

C1V2 is big, bulky... but seems well-written and robust. If this is your cuppa, if this is the way you feel comfortable on a major league system like Unix, then go for it.

But read the final section first in any case.

Round Four

From the talk page of the Wikipedia article.

Advertising article!

I have noticed that the software company 'Eltima' is massively abusing Wikipedia for advertising. I first noticed it in links to fake How-Tos on the[i]r blog that all suggest: Use our product! This software product doesn't seem to be relevant at all. --Eliza Winterborn (talk) 10:19, 27 June 2016 (UTC) Eliza Winterborn (talk) 10:19, 27 June 2016 (UTC)

But relevant it surely is. OK, that's all. Go download away if you want.


See Also
ACP: Tracker: Go Ahead, Have Fun
Industry Watch: The Legend of Oompa Loompa

About Rixstep

Stockholm/London-based Rixstep are a constellation of programmers and support staff from Radsoft Laboratories who tired of Windows vulnerabilities, Linux driver issues, and cursing x86 hardware all day long. Rixstep have many years of experience behind their efforts, with teaching and consulting credentials from the likes of British Aerospace, General Electric, Lockheed Martin, Lloyds TSB, SAAB Defence Systems, British Broadcasting Corporation, Barclays Bank, IBM, Microsoft, and Sony/Ericsson.

Rixstep and Radsoft products are or have been in use by Sweden's Royal Mail, Sony/Ericsson, the US Department of Defense, the offices of the US Supreme Court, the Government of Western Australia, the German Federal Police, Verizon Wireless, Los Alamos National Laboratory, Microsoft Corporation, the New York Times, Apple Inc, Oxford University, and hundreds of research institutes around the globe. See here.

All Content and Software Copyright © Rixstep. All Rights Reserved.

John Cattelin
Media Contact
ACP/Xfile licences
About | ACP | Buy | Industry Watch | Learning Curve | Search | Test Drive
Copyright © Rixstep. All rights reserved.