> "Orton, Yves" wrote:
>
> > by 'not working' i mean i get undefined sub-rules and
> > such as if i was getting file/stream type redirection
> > instead of the shifts i want.
> > as a result, i've ended up with exe blocks that look like:
> >
> > {
> > $main::Instruction_upper = 0x440000
> > | ($item[1] / 2048)
> > | $item[4]
> > | ($item[8] / 512)
> > | ($item[10] * 16)
> > | (($item[26] & 0x000010) / 16)
> > | ($item[32] / 2)
> > ;
> > $main::Instruction_lower = 0x000000
> > | ($item[14] * 2)
> > | ($item[16] / 2048)
> > | ($item[20] * 16)
> > | ($item[22] / 128)
> > | (($item[26] & 0x00000C) * 1048576)
> > | (($item[28] & 0xC00000) / 16384)
> > | (($item[28] & 0x000003) * 1024)
> > | (($item[34] & 0xC00000) / 1024)
> > | (($item[34] & 0x000003) * 16384)
> > ;
> > 1
> > }
> >
> > it does what's desired, but from a maintenance point of view
> > it is just not clear, without doing some math, what the
> > various shifts are.
> > not to mention the increased chances of a typo in these magic
> > numbers!
> >
> > any ideas about where i've gone wrong in trying to use the
> > bit shifts?
> > or is this a bug in p::rd ?
>
> Dunno about the cause of this. But the obvious solution is to put
> stuff like this in a sub that you call. Frankly I would do that
> anyway. I find large chunks of code intermingled with the grammer is
> difficult to grok. And by using
>
> $item{$name}
> instead of
> $item[$num]
> your code would be much more resiliant to future changes, especially
> if you do move stuff into subs.
>
> Cheers,
> yves
yes, point taken: i've not been happy with the absolute position
information, but i was more focussed on getting something/anything
up quickly and it flowed right from the p::rd stuff i read.
the instruction bit packing is ugly -- at least it happens only at
the point where an instruction has been fully parsed.
i'm a c-hack in perl newbie's clothing....thank you for the ideas, i'll
study them.
hwn