home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
ZCPR33
/
S-Z
/
ZFILER.BZG
/
ZFILER.BUG
Wrap
Text File
|
2000-06-30
|
5KB
|
109 lines
ADVENTURES IN BUG-SQUOOSHING: ZFILER
by Rick Charnes, after too much wine, 4/25/87, San Francisco
I just spent 45 minutes or so on one of those fun tasks
known as "bug-squooshing". It's not something at which I make
any pretense at making a living and don't do with any frequency.
But it was satisfying to figure out and you always learn
something after one of these sessions. I thought I'd share it
with other Z-ers in case you're in need of some good coffee-table
gossip.
I have a ZFILER script in which one of the commands is:
erase $f,$n.bak
[note: for those using VFILER, substitute "%f" and "%n"]
Easy enough. Erase the pointer file and its backup. I like the
classical ZCPR3 utilities with their file list capability. This
is an excellent and important feature, a big advance over CP/M
programs that is not enough appreciated. For some reason a good
number of the Conn Z3 oldies but goodies have this feature
(ERASE, FINDF, HELPPR [betcha didn't know that], LDR, MCOPY,
PAGE, PRINT, PROTECT, etc.) but the new ZRDOS utilities don't
(SFA, DFA, AC, VIEW, VTYPE). Tell me why.
Anyway, something strange kept happening when I ran this
macro on only a very few of my files. ERASE.COM wouldn't
properly erase the file but instead would return me its help
message. With most files it worked fine. Why?
I got another glass of wine and hunkered down. I tried
this, I tried that, I tried the other thing. You know, the
usual: Did I have stray control characters in the script? No.
I rebooted. No difference. Then I noticed that the files on
which it wasn't working all had one thing in common: they all had
a filetype and this filetype consisted of exactly two letters, as
in "HELLO.LT".
But why would that make a difference?
So, using the time-tested routine of "isolate as much as
possible," I tried simply
ECHO TRYING TO ERASE $f...
OK, nothing special. Then I tried it on another file, one
without a filetype. Something registered in my brain. It was
like one of those "what can you find wrong with this picture?"
experiences where it only comes to you after you turn away and
stop thinking about it. The first file had displayed as
TRYING TO ERASE IFCONT. ...
whereas the second was
TRYING TO ERASE LETTER...
Notice anything different?
An extra space after the first filename.
It hit me: that was it. Because what ended up getting sent
to the CCP was exactly:
ERASE IFCONT.HG ,IFCONT.BAK
See? ERASE.COM couldn't figure out what I was trying to tell it.
It thought I _might_ be sending it a file list, but that <SPACE>
before the comma confused it. Genuine filelists don't have
spaces between the filenames. Parameters do, but filelists
don't.
What seemed to be going on was that as per convention, the
symbol "$f" was "padding" the filetype out to the 3 possible
spaces. Could I then never get my ERASE.COM filelist to work
properly?
Well, I dug further. I tried renaming it to "IFCONT.H" ---
ONE character in the filetype. It did NOT do the padding.
Bizarre.
But at this point I guess somebody up there decided the plot
wasn't thick enough yet, because after playing around a bit more
I found a file with a two-character filetype that did not do the
padding.
Then something in my brain went into automatic which happens
if you use Z-Sys enough. Images and lessons learned from past
late-nighters float past your mind's eye like clouds in front of
the moon on a chilly winter's night and help you out as
beneficent and supportive friends. I remembered back to a few
months ago when noticing that VMENU's pointer _sometimes_ (and
only sometimes) did not return to the pointed-to file after a
command script was run. One of the joys of Z-System is that you
end up learning things that you never really wanted to learn, and
I discovered after many, many hours of tracking this baby down
that it would exhibit this strange behavior only on files whose
archive bit was set. Could this be the same thing?
Yes.
Result of bug-squooshing: ZFILER's "$f" symbol pads out the
filename only on those files that (1) have a filetype, (2) said
filetype is exactly two characters long, and (3) said file's
archive (and perhaps other) bit is set.
Now to see if I can "bug" Jay enough to fix it...