for(;;){
if((result = fgets(line, MAX_LEN, stream)) != NULL){
p1=result;
p3=p1+strlen(line);
p2=strtok(p1, "=");
}
}

これで、p1とp2から左辺、p2とp3から右辺が取り出せる。
$の展開は、マクロ展開処理の要領で
右辺に$があるかチェックして、あったら定義値に置き換えるという
10ステップ程度の処理でできるだろ。