MAFUS Tenes toda la razon  

Tengo poco tiempo... pero me pude poner un rato y lo saqué  

- int main(void) {	 
- 	int diag = 6; 
-   
- 	make_board(diag+1,diag+1,' ');						 
-   
- 	// rombo 
- 	line(diag/2,0,1,1,diag/2,'a'); 
- 	line(diag,diag/2,-1,1,diag/2,'b'); 
- 	line(diag/2,diag,-1,-1,diag/2,'c'); 
- 	line(0,diag/2,1,-1,diag/2,'d'); 
-   
- 	// linea para x=0 
- 	yblock(0,0,diag+1,'+'); 
-   
- 	//centro 
- 	yblock(0,0,1,'&'); 
-   
- 	render();		 
-   
- 	release(); 
-     return 0; 
- } 
-   
Uso una implementación similar a la del problema de la pirámide y la definicion de line() es esta:
- // Las lineas pueden ser discontinuas con deltas <> -1,0,+1 (por diseño) 
- void line(int x1, int y1, int delta_x, int delta_y, int len, char c = '*'){ 
-   
Otras implementaciones de lineas que me hice fueron para:
- void sline(int x1,int y1, int x2, int y2, char c = '*'); 
- void xblock(int x, int y, int len, char c = '*'); 
- void yblock(int x, int y, int len, char c = '*') 
-   
Obviamente todo se puede hacer con line() y no se necesita más pero para lineas verticales y horizontales usar yblock() y xblock() puede ser mas comodo.
Si lo tuviera que re-hacer, dejaria un cursor en la posicion final de cada punto, linea, figura dibujada para no tener que calcular a mano ese valor de nuevo como punto de inicio de otras subsiguientes.
Obviamente el programa no compila porque no lo posté completo haciendo caso a recomendaciones del 
staff