Ik heb de volgende stukken ULP code uit een programma wat een library moet maken vanuit een schema.
code:
P.wires(w)
{ if((w.x1==oldX)&&(w.y1==oldY))
{ if(strlen(wrk)-strrchr(wrk,'\n')>LineLengthLimit) wrk+="\\\n ";
if(w.arc) sprintf(wrk,"%s (%g %g) %g",wrk,u2mm(w.x2),u2mm(w.y2),w.curve);
else sprintf(wrk,"%s (%g %g)",wrk,u2mm(w.x2),u2mm(w.y2));
}
else
{ sprintf(wrk,"%s(%g %g)",wrk,u2mm(w.x1),u2mm(w.y1));
if(w.arc) sprintf(wrk,"%s %g (%g %+g)",wrk,w.curve,u2mm(w.x2),u2mm(w.y2));
else sprintf(wrk,"%s (%g %g)",wrk,u2mm(w.x2),u2mm(w.y2));
}
oldX=w.x2;
oldY=w.y2;
}
wrk+=";\n";
code:
S.wires(w)
{ hasWires=TRUE;
lineFull=FALSE;
if(strlen(wrk)-strrchr(wrk,'\n') > LineLengthLimit) lineFull=TRUE;
wrk+=makeWire(w,oldX,oldY);
oldX=w.x2;
oldY=w.y2;
}
if(hasWires) wrk+=";\n";
code:
string makeWire(UL_WIRE w,real oldX,real oldY)
{ string tmp;
if((w.x1==oldX)&&(w.y1==oldY))
{ if(lineFull) tmp+="\\\n ";
if(w.arc) sprintf(tmp," (%g %g) %s%g",u2mm(w.x2),u2mm(w.y2),Pcap(w.arc.cap),w.curve);
else sprintf(tmp," (%g %g)",u2mm(w.x2),u2mm(w.y2));
}
else
{ tmp+=checkLayer(w.layer);
tmp+=checkStyle(w.style);
sprintf(tmp,"%s\nwire %g (%g %g)",tmp,u2mm(w.width),u2mm(w.x1),u2mm(w.y1));
if(w.arc) sprintf(tmp,"%s%s %g (%g %g)",tmp,Pcap(w.arc.cap),w.curve,u2mm(w.x2),u2mm(w.y2));
else sprintf(tmp,"%s (%g %g)",tmp,u2mm(w.x2),u2mm(w.y2));
}
return tmp;
}
Het eerste stuk komt uit een routine die polygons maakt, het tweede deel uit een routine die symbolen maakt.
De variabele lineFull is globaal gedefinieerd, de rest is lokaal per routine.
LineLengthLimit is een globaal gedefinieerde 'constante' en heeft de waarde 80.
Nu werkt de 'volle regel afhandeling' wèl bij de polygonen maar niet bij de symbolen, ik zie alleen niet waarom. Het moet iets blatant eenvoudigs zijn, op het stomme af.
Okokok, de geproduceerde data is ook nog niet 100%, maar dat is het probleem niet.
Wie weet waar ik de plank mis sla?