The only thing I saw that was weird was that it skipped completely over the scanLine for loop and I think it's because bi.biHeight is -3 throughout the whole process.
I ran debug50 on my code and then someone elses that I copied into a different file but same results happen each time. The FILE reads and writes before INFO headers in both instances. My code is edited from copy.c and a few other resources.
I know that this question has been 'answered' numerous times but those revelations haven't related to me for some reason.