mirror of
https://github.com/bobbimanners/ProDOS-Utils.git
synced 2024-06-08 19:29:28 +00:00
More README!!
This commit is contained in:
parent
2d891f38fc
commit
08e3cb7c88
65
README.md
65
README.md
|
@ -205,7 +205,6 @@ For example `sortdir -rw -snf /foo` will sort the tree rooted at directory
|
||||||
`/foo` first by name (ascending), then sort directories to the top, and will
|
`/foo` first by name (ascending), then sort directories to the top, and will
|
||||||
write the sorted directory to disk.
|
write the sorted directory to disk.
|
||||||
|
|
||||||
|
|
||||||
### Understanding the Display
|
### Understanding the Display
|
||||||
|
|
||||||
![](/Screenshots/Running.png)
|
![](/Screenshots/Running.png)
|
||||||
|
@ -234,11 +233,71 @@ For each directory processed, *Sortdir* performs the following steps:
|
||||||
|
|
||||||
### Directory Check and Repair
|
### Directory Check and Repair
|
||||||
|
|
||||||
TODO
|
*Sortdir* performs raw block I/O and implements its own logic for walking
|
||||||
|
through the filesystem. When run in whole disk / volume mode, it starts out
|
||||||
|
reading the volume directory (beginning at block 2) and ends up recursively
|
||||||
|
descending throughout the entire directory tree, visiting all directories.
|
||||||
|
|
||||||
|
Every directory (volume directory or subdirectory) is processed the same way.
|
||||||
|
*Sortdir* first checks certain constants are the expected value in the
|
||||||
|
directory header and then iterates through each of the directory entries,
|
||||||
|
checking each one in turn.
|
||||||
|
|
||||||
|
Directory entries may refer to files or directories. In ProDOS there are three
|
||||||
|
types of file - seedling, sapling and tree. For each of these types of file,
|
||||||
|
*Sortdir* explores the file structure, counts the blocks assigned to the file
|
||||||
|
and checks that the total matches the number of blocks recorded in the
|
||||||
|
directory entry.
|
||||||
|
|
||||||
|
*Sortdir* checks directory entries which refer to directories in a similar way,
|
||||||
|
verifying that the number of blocks allocated to storing the directory matches
|
||||||
|
the number of blocks recorded in the directory entry. If *Sortdir* is
|
||||||
|
operating in recursive mode, the directory will be recorded in a list and
|
||||||
|
visited later (rather than directly recursing, which would use too much
|
||||||
|
stack.)
|
||||||
|
|
||||||
|
**Note:** In the final release of *Sortdir* I plan to enable the 'free list'
|
||||||
|
functionality which is currently disabled (due to lack of memory.) When
|
||||||
|
this is enabled, *Sortdir* will also check that disk blocks which are
|
||||||
|
allocated to a directory or a file are *not* marked as free. When performing
|
||||||
|
whole disk / volume checks *Sortdir* will check for blocks which are not
|
||||||
|
assigned to any file or directory and are also not marked as free.
|
||||||
|
|
||||||
|
If a directory is badly corrupted, *Sortdir* will most likely crash or at the
|
||||||
|
very least be unable to correct the problem. More isolated problems, such
|
||||||
|
as incorrect block counts or free list problems can be more readily
|
||||||
|
corrected. Fortunately, in day-to-day use of ProDOS these latter types of
|
||||||
|
problems occur far more frequently than more extensive corruption.
|
||||||
|
|
||||||
|
However, if *Sortdir* is able to traverse the entire disk and does not find
|
||||||
|
any problems, one can be reasonably well assured that the filesystem structure
|
||||||
|
is valid.
|
||||||
|
|
||||||
|
*Sortdir* currently does not validate the modification and creation times are
|
||||||
|
valid.
|
||||||
|
|
||||||
### Directory Sort
|
### Directory Sort
|
||||||
|
|
||||||
TODO
|
*Sortdir* can sort directories on up to four fields. A stable sorting method
|
||||||
|
is used which allows, for example, for directories to be sorted in
|
||||||
|
alphabetical order by filename, but with directories sorted to the top.
|
||||||
|
This may be done by first sorting on filename (ascending) and then on folders
|
||||||
|
(directories). Another example of a two level sort would be to sort by size
|
||||||
|
and then by type, so that directory entries are grouped by type and ordered
|
||||||
|
within those groups by size. Sorting is quite fast, even on 1MHz 6502,
|
||||||
|
because the Quicksort algorithm is used.
|
||||||
|
|
||||||
|
The following fields are supported for sorting (each is ascending and
|
||||||
|
descending order):
|
||||||
|
|
||||||
|
- Filename - case sensitive
|
||||||
|
- Filename - case insensitive
|
||||||
|
- File size in terms of blocks allocated
|
||||||
|
- File size in terms of EOF position
|
||||||
|
- File type
|
||||||
|
- Modification date/time
|
||||||
|
- Creation date/time
|
||||||
|
- Directory or non-directory
|
||||||
|
|
||||||
### Filename Case Change
|
### Filename Case Change
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user