jayacotton / find

A find command for cp/m written in C
9 stars 1 forks source link

using the -o option causes find to fail oddly. #3

Closed jayacotton closed 3 years ago

jayacotton commented 3 years ago

The -o option make find log entries to a disk log file. To do this we have to switch from the current drive of interest to the drive that has the log file, where we write a record, and then switch back.

That action of switching from drive to drive blows the CP/M file search out of the water. It looks like its find the correct number of things but the things are nonsense.

A possible work around it to buffer all the file names in memory, and waiting until done to print. This unearths a new problem, you can't know how many drives are present until you try to read each one. At some point you run off the end of the list, and get the system error message. No way to recover from that. Another issue is that the amount of ram (64k) really limits the number of file names that can be buffered in ram. With 32k of empty ram I can get about 2700 file names stashed.

Login vector is not satisfactory, since it only shows which drives have been logged on, not all the drives in the system.

jayacotton commented 3 years ago

To fix this we will have to solve the problem of getting a definitive list of drives that CP/M knows about. It keeps a list of drives, and we can get at it via skullduggery. As for network mounted drives, there also a way to find them.

jayacotton commented 3 years ago

part of this problem is now fixed. I can reliably detect if a drive letter is assigned. If there a are gaps it should now skip over them. This problem is a non issue on cp/m 3 since we just ignore the drive select error. As for network drives, I need to find a way to detect that cpnet is loaded on cp/m 2.2, again on cp/m 3 this is a non issue.

jayacotton commented 3 years ago

I now can figure out what drives are up on the cp/m system and also detect network drives.

jayacotton commented 3 years ago

Fixed this one, it needed 4 other added features. Find all the known drives, find all the network drives, don't list to a file while reading directory entries, and don't allocate a log file then delay writing until all the scans are done, this one writes trash all over the place.