hummmm....well i found a fix - but its a strange one. I put the bmap_lock in a subroutine with the bmap its locking passed as a parameter and now it works fine.

Heres the code:

function my_bmap_lock_func(BMAP* letter_bmap)
{ bmap_lock(letter_bmap,0);
....
<bitmap manipulation code goes here>
....
return;
}

function main()
{ BMAP* letter_bmap;
level_load("my_level.wmb");
wait(1);
letter_bmap = bmap_create("georgia_font2.tga");
wait(1);
bmap_to_format(letter_bmap,8888);
my_bmap_lock_func(letter_bmap);
}

so very very odd.....