Discussion:
[EE]: shift left << shift right >> in c
Justin Richards
2018-08-11 11:09:39 UTC
Permalink
Probably best posed in an arduino forum but hoping someone could pick an
obvious mistake, steer me in the right direction or suggest a better way.

I have generally avoided the << and >> operators but I thought they would
be ideal to pack a 32bit variable with commands.

So trying this

uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');

when compiled for an ESP8266 target in arduino IDE and printed gives

0x44434241 as expected.

when the target is UNO it produces

0x4241

Doing this

uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';

for either target works ok.

I have tried type casting (not sure that is the right phrase) like

uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');

But no joy for the uno target.

The final goal is to construct SPI commands with a esp8266 master with a
UNO slave.

The following compiles and works fine for the esp8266 target but has the
issues mentioned above for the UNO target.

#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address UNO1
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))

Any tips?

Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Jason White
2018-08-11 12:09:31 UTC
Permalink
Method A: Cast each of the characters to uint32_t and be sure to completely
surround the casted value in parentheses.

Method B (probably better in my opinion): structure , union, or even just
an array of uint8_t.
Post by Justin Richards
Probably best posed in an arduino forum but hoping someone could pick an
obvious mistake, steer me in the right direction or suggest a better way.
I have generally avoided the << and >> operators but I thought they would
be ideal to pack a 32bit variable with commands.
So trying this
uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');
when compiled for an ESP8266 target in arduino IDE and printed gives
0x44434241 as expected.
when the target is UNO it produces
0x4241
Doing this
uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';
for either target works ok.
I have tried type casting (not sure that is the right phrase) like
uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');
But no joy for the uno target.
The final goal is to construct SPI commands with a esp8266 master with a
UNO slave.
The following compiles and works fine for the esp8266 target but has the
issues mentioned above for the UNO target.
#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address UNO1
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))
Any tips?
Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
Jason White
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Michael Graff
2018-08-11 12:37:46 UTC
Permalink
I believe you want to cast the characters. Example, from memory vs trial:

(((uint32_t)’D’) << 24)

The problem seems to be when the arduino 16-bit compiler promotes the char to its longest natural integer size, which is 16 bits. The ESP handles 32 bit into natively so chars become the desired length automatically.

On the arduino, without casting the target of the shift to a long enough size manually, it basically shifts all the bits off the end and becomes zero. There’s probably a warning about this in your compile logs.

--Michael (from an iPhone)
Post by Jason White
Method A: Cast each of the characters to uint32_t and be sure to completely
surround the casted value in parentheses.
Method B (probably better in my opinion): structure , union, or even just
an array of uint8_t.
Post by Justin Richards
Probably best posed in an arduino forum but hoping someone could pick an
obvious mistake, steer me in the right direction or suggest a better way.
I have generally avoided the << and >> operators but I thought they would
be ideal to pack a 32bit variable with commands.
So trying this
uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');
when compiled for an ESP8266 target in arduino IDE and printed gives
0x44434241 as expected.
when the target is UNO it produces
0x4241
Doing this
uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';
for either target works ok.
I have tried type casting (not sure that is the right phrase) like
uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');
But no joy for the uno target.
The final goal is to construct SPI commands with a esp8266 master with a
UNO slave.
The following compiles and works fine for the esp8266 target but has the
issues mentioned above for the UNO target.
#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address UNO1
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))
Any tips?
Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
Jason White
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/p
Justin Richards
2018-08-11 12:59:12 UTC
Permalink
Awesome, you guys nailed it.

(((uint32_t)’D’) << 24) does the trick.

Thanks

justin
Post by Michael Graff
(((uint32_t)’D’) << 24)
The problem seems to be when the arduino 16-bit compiler promotes the char
to its longest natural integer size, which is 16 bits. The ESP handles 32
bit into natively so chars become the desired length automatically.
On the arduino, without casting the target of the shift to a long enough
size manually, it basically shifts all the bits off the end and becomes
zero. There’s probably a warning about this in your compile logs.
--Michael (from an iPhone)
Post by Jason White
Method A: Cast each of the characters to uint32_t and be sure to
completely
Post by Jason White
surround the casted value in parentheses.
Method B (probably better in my opinion): structure , union, or even just
an array of uint8_t.
Post by Justin Richards
Probably best posed in an arduino forum but hoping someone could pick an
obvious mistake, steer me in the right direction or suggest a better
way.
Post by Jason White
Post by Justin Richards
I have generally avoided the << and >> operators but I thought they
would
Post by Jason White
Post by Justin Richards
be ideal to pack a 32bit variable with commands.
So trying this
uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');
when compiled for an ESP8266 target in arduino IDE and printed gives
0x44434241 as expected.
when the target is UNO it produces
0x4241
Doing this
uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';
for either target works ok.
I have tried type casting (not sure that is the right phrase) like
uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');
But no joy for the uno target.
The final goal is to construct SPI commands with a esp8266 master with a
UNO slave.
The following compiles and works fine for the esp8266 target but has the
issues mentioned above for the UNO target.
#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address
UNO1
Post by Jason White
Post by Justin Richards
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))
Any tips?
Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
Jason White
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mai
Harold Hallikainen
2018-08-12 17:37:17 UTC
Permalink
Glad you got it worked out! I typically do this as a union of the UINT32
and a UINT8 array. This DOES rely on the endianness of the processor, so
it's not completely portable. But I think it makes pretty clean code.

Harold
Post by Justin Richards
Awesome, you guys nailed it.
(((uint32_t)’D’) << 24) does the trick.
Thanks
justin
Post by Michael Graff
(((uint32_t)’D’) << 24)
The problem seems to be when the arduino 16-bit compiler promotes the char
to its longest natural integer size, which is 16 bits. The ESP handles 32
bit into natively so chars become the desired length automatically.
On the arduino, without casting the target of the shift to a long enough
size manually, it basically shifts all the bits off the end and becomes
zero. There’s probably a warning about this in your compile logs.
--Michael (from an iPhone)
Post by Jason White
Method A: Cast each of the characters to uint32_t and be sure to
completely
Post by Jason White
surround the casted value in parentheses.
Method B (probably better in my opinion): structure , union, or even
just
Post by Jason White
an array of uint8_t.
On Saturday, August 11, 2018, Justin Richards
Post by Justin Richards
Probably best posed in an arduino forum but hoping someone could pick
an
Post by Jason White
Post by Justin Richards
obvious mistake, steer me in the right direction or suggest a better
way.
Post by Jason White
Post by Justin Richards
I have generally avoided the << and >> operators but I thought they
would
Post by Jason White
Post by Justin Richards
be ideal to pack a 32bit variable with commands.
So trying this
uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');
when compiled for an ESP8266 target in arduino IDE and printed gives
0x44434241 as expected.
when the target is UNO it produces
0x4241
Doing this
uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';
for either target works ok.
I have tried type casting (not sure that is the right phrase) like
uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');
But no joy for the uno target.
The final goal is to construct SPI commands with a esp8266 master
with a
Post by Jason White
Post by Justin Richards
UNO slave.
The following compiles and works fine for the esp8266 target but has
the
Post by Jason White
Post by Justin Richards
issues mentioned above for the UNO target.
#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address
UNO1
Post by Jason White
Post by Justin Richards
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))
Any tips?
Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
Jason White
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
FCC Rules Updated Daily at http://www.hallikainen.com
Not sent from an iPhone.
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Forrest Christian (List Account)
2018-08-11 14:20:27 UTC
Permalink
Try this:

uint32_t ds =(( ( uint32_t)'D')<<24)|
(((uint32_t)'C')<<16)|
(((uint32_t)'B')<<8)|
((uint32_t)('A'));

What is probably happening is that the compiler is using 16 bit math.
There are some rules about how the compiler determines the width of the
arguments and what math width is used. I think the term you may want to
search for is coersion.

Personally, I prefer constructs like:

uint32_t ds;
ds='D';
ds<<=8;
ds|='C';
ds<<=8;
ds|='B';
ds<<=8;
ds|='A';

Most decent compilers will optimize the code so that the above options have
a similar construct.

I also have just replaced the shifts with multiplies since multiplying by
256ul, 65536ul and similar is the same as a left shift. The compilers I
use typically know this and the multiplication by a 2^x constant will be
replaced by a shift. In addition, by stating that the multiplication
constant is a 32 bit integer, it will usually use the correct math.


On Aug 11, 2018 5:17 AM, "Justin Richards" <***@gmail.com>
wrote:

Probably best posed in an arduino forum but hoping someone could pick an
obvious mistake, steer me in the right direction or suggest a better way.

I have generally avoided the << and >> operators but I thought they would
be ideal to pack a 32bit variable with commands.

So trying this

uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');

when compiled for an ESP8266 target in arduino IDE and printed gives

0x44434241 as expected.

when the target is UNO it produces

0x4241

Doing this

uint32_t ds = 'D';
ds = (ds << 8)| 'C';
ds = (ds << 8)| 'B';
ds = (ds << 8)| 'A';

for either target works ok.

I have tried type casting (not sure that is the right phrase) like

uint32_t ds = uint32_t('D'<<24)|uint32_t('C'<<16)
|uint32_t('B'<<8)|uint32_t('A');

But no joy for the uno target.

The final goal is to construct SPI commands with a esp8266 master with a
UNO slave.

The following compiles and works fine for the esp8266 target but has the
issues mentioned above for the UNO target.

#define UNO1_ADDR uint32_t(uint32_t('U')|uint32_t('1'<<8)) //Address UNO1
#define cmdREADPIN uint32_t(UNO1_ADDR | uint32_t('R'<<16))
#define cmdWRITEPIN uint32_t((UNO1_ADDR | uint32_t('W'<<16))
#define cmdREADPIN1 uint32_t(cmdREADPIN | uint32_t('1'<<24))
#define cmdREADPIN2 uint32_t(cmdREADPIN | uint32_t('2'<<24))
#define cmdREADPIN3 uint32_t(cmdREADPIN | uint32_t('3'<<24))

Any tips?


Justin
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
RussellMc
2018-08-11 13:01:32 UTC
Permalink
As you have received good answers I hoped I might be allowed a weak joke
which otherwise might annoy.
[ :-) ? ]


_____________________________________________________
I have tried type casting (not sure that is the right phrase)
etaoin shrdlu?



R

thus <https://e2f.com/5760/>
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Jason Harper
2018-08-11 12:21:11 UTC
Permalink
The thing to understand about C is that the type of an expression (or sub-expression) depends SOLELY on the types of the operands; the type of a variable to which the result will be assigned plays no part in the process. So on a platform with 16-bit ints, you are performing four 16-bit shifts, which are OR’d together to produce a 16-bit result. In fact, the ('D'<<24) and ('C'<<16) parts have undefined results - you aren’t allowed to shift by an amount equal to or greater than the bit size of the type, as CPUs generally don’t implement a range any larger than that in their shift opcodes.

Typecasting the results of the shifts cannot possibly fix the problem, as the damage was already done in the shifts themselves. You have to cast at least one operand of the overflowing shifts to a 32-bit type, so that the shift works correctly. You could upcast the char constants - but that gets rather verbose; it works just as well to upcast the shift amounts, and that’s a lot shorter to write. The C language treats both operand types equally, despite how little sense that makes in the case of shifts. So I’d write this as:

uint32_t ds = ('D'<<24L)|('C'<<16L) |('B'<<8)|('A');
Post by Justin Richards
So trying this
uint32_t ds = ('D'<<24)|('C'<<16) |('B'<<8)|('A');
when compiled for an ESP8266 target in arduino IDE and printed gives
0x44434241 as expected.
when the target is UNO it produces
0x4241
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/list
Justin Richards
2018-08-16 10:24:35 UTC
Permalink
Post by Jason Harper
Typecasting the results of the shifts cannot possibly fix the problem, as
the damage was already done in the shifts themselves. You have to cast at
least one operand of the overflowing shifts to a 32-bit type, so that the
shift works correctly. You could upcast the char constants - but that gets
rather verbose; it works just as well to upcast the shift amounts, and
that’s a lot shorter to write. The C language treats both operand types
equally, despite how little sense that makes in the case of shifts. So I’d
uint32_t ds = ('D'<<24L)|('C'<<16L) |('B'<<8)|('A');
Have incorporated this syntax as I (think I) understand how it works now.
Thanks

I am assuming i should be using UL to upcast the shift amounts as Unsigned
Long.

Russel: the etaoin shrdlu link proved to be a very interesting time sink.
Just wish the cameras got closer and more personal with the equipment.
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
RussellMc
2018-08-16 13:28:19 UTC
Permalink
Post by Justin Richards
Russel: the etaoin shrdlu link proved to be a very interesting time sink.
Just wish the cameras got closer and more personal with the equipment.
*pictures galore
<https://www.google.co.nz/search?biw=1680&bih=864&tbm=isch&sa=1&ei=wnh1W5vrE477-QbA9IWIBQ&q=etaoin+shrdlu+linotype+machine&oq=etaoin+shrdlu+linotype+machine&gs_l=img.3...14771.24398.0.24574.28.20.8.0.0.0.227.3279.0j2j14.16.0....0...1c.1.64.img..4.0.0....0.WkrDREAQWOw>*

*Videos galore
<https://www.google.co.nz/search?q=etaoin+shrdlu+linotype+machine&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiguavb0_HcAhUTfd4KHc3jClMQ_AUICygC&biw=1680&bih=864&dpr=1>*

Quite good. http://karenkavett.com/blog/1249/visiting-a-linotype-machine.php

Full size image
Loading Image...
from less good
https://rarecachebroadcast.wordpress.com/2014/01/22/linotypes-future-etaoin-shrdlu/

Good http://www.digitalcheck.com/phototypesetters-printing/
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Allen Mulvey
2018-08-16 14:27:00 UTC
Permalink
About 15 years ago I was in a small print shop in Oswego, NY
where they still had a Linotype machine. It was not in use
but he maintained it anyway. It was one of the most
impressive (complex) mechanical devices I have ever seen.

In one of the photos I noticed a platen press very similar
to those we used in high school.

I recently had to troubleshoot a WordPerfect macro that
didn't always seem to work. It seems that WordPerfect still
distinguishes between an em dash and an en dash. The macro
worked perfectly when adjusted to look for both. I wonder
how many people today have problems with page layout because
they don't understand the typesetting terminology. I knew
someone who was talking about lead, pronounced like to lead
a band, when in fact she meant lead, Pb, bars of which were
inserted between lines of type for spacing.

Allen

-----Original Message-----
From: piclist-***@mit.edu
[mailto:piclist-***@mit.edu] On Behalf Of RussellMc
Sent: Thursday, August 16, 2018 9:28 AM
To: Microcontroller discussion list - Public.
Subject: Re: [EE]: shift left << shift right >> in c

On 16 August 2018 at 22:24, Justin Richards
Post by Justin Richards
Russel: the etaoin shrdlu link proved to be a very
interesting time sink.
Post by Justin Richards
Just wish the cameras got closer and more personal with
the equipment.
*pictures galore
<https://www.google.co.nz/search?biw=1680&bih=864&tbm=isch&s
a=1&ei=wnh1W5vrE477-QbA9IWIBQ&q=etaoin+shrdlu+linotype+machi
ne&oq=etaoin+shrdlu+linotype+machine&gs_l=img.3...14771.2439
8.0.24574.28.20.8.0.0.0.227.3279.0j2j14.16.0....0...1c.1.64.
img..4.0.0....0.WkrDREAQWOw>*

*Videos galore
<https://www.google.co.nz/search?q=etaoin+shrdlu+linotype+ma
chine&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiguavb0_HcAhUTfd4K
Hc3jClMQ_AUICygC&biw=1680&bih=864&dpr=1>*

Quite good.
http://karenkavett.com/blog/1249/visiting-a-linotype-machine
.php

Full size image
https://rarecachebroadcast.files.wordpress.com/2014/01/linot
ype_operators_of_the_chicago_defender.png
from less good
https://rarecachebroadcast.wordpress.com/2014/01/22/linotype
s-future-etaoin-shrdlu/

Good http://www.digitalcheck.com/phototypesetters-printing/
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list
archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
John Gardner
2018-08-17 00:23:59 UTC
Permalink
"8)
Post by Allen Mulvey
About 15 years ago I was in a small print shop in Oswego, NY
where they still had a Linotype machine. It was not in use
but he maintained it anyway. It was one of the most
impressive (complex) mechanical devices I have ever seen.
In one of the photos I noticed a platen press very similar
to those we used in high school.
I recently had to troubleshoot a WordPerfect macro that
didn't always seem to work. It seems that WordPerfect still
distinguishes between an em dash and an en dash. The macro
worked perfectly when adjusted to look for both. I wonder
how many people today have problems with page layout because
they don't understand the typesetting terminology. I knew
someone who was talking about lead, pronounced like to lead
a band, when in fact she meant lead, Pb, bars of which were
inserted between lines of type for spacing.
Allen
-----Original Message-----
Sent: Thursday, August 16, 2018 9:28 AM
To: Microcontroller discussion list - Public.
Subject: Re: [EE]: shift left << shift right >> in c
On 16 August 2018 at 22:24, Justin Richards
Post by Justin Richards
Russel: the etaoin shrdlu link proved to be a very
interesting time sink.
Post by Justin Richards
Just wish the cameras got closer and more personal with
the equipment.
*pictures galore
<https://www.google.co.nz/search?biw=1680&bih=864&tbm=isch&s
a=1&ei=wnh1W5vrE477-QbA9IWIBQ&q=etaoin+shrdlu+linotype+machi
ne&oq=etaoin+shrdlu+linotype+machine&gs_l=img.3...14771.2439
8.0.24574.28.20.8.0.0.0.227.3279.0j2j14.16.0....0...1c.1.64.
img..4.0.0....0.WkrDREAQWOw>*
*Videos galore
<https://www.google.co.nz/search?q=etaoin+shrdlu+linotype+ma
chine&tbm=vid&source=lnms&sa=X&ved=0ahUKEwiguavb0_HcAhUTfd4K
Hc3jClMQ_AUICygC&biw=1680&bih=864&dpr=1>*
Quite good.
http://karenkavett.com/blog/1249/visiting-a-linotype-machine
.php
Full size image
https://rarecachebroadcast.files.wordpress.com/2014/01/linot
ype_operators_of_the_chicago_defender.png
from less good
https://rarecachebroadcast.wordpress.com/2014/01/22/linotype
s-future-etaoin-shrdlu/
Good http://www.digitalcheck.com/phototypesetters-printing/
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list
archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
--
http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Loading...