かなり古い文献のプログラムなのですが、
�@
funcA(data)
short *data;
{
char max;
  
  max = *data;

�A
funcB(number)
char *number;
{
short no;
  
  *number = no;
  
�B
short data;
unsigned short cnt;

cnt = (long)data;
sprintf(data, "%5ld",(long)cnt);

このような表現がありました。
�@�Aはchar型にshort型を代入(?)してるみたいだし、�Bはわざわざlong型にキャストしてshort型に代入してる?
試しにVisual C++6でビルドしてみたところ、エラーにはならないが、ワーニング(データが失われる・・・)となりました。これは、
1.この文献の記述がそもそも間違っている
2.意図的に大きい型を小さい型に代入しようとしている(warningは気にしていない?)
3.昔のC言語の仕様と今の仕様が違う(昔はエラーにならなかった?)
4.VCでコンパイルしたのがダメ
どれなのでしょうか?