This is plmtex.c in view mode; [Download] [Up]
/* Prints out "text" at specified position relative to viewport */ /* (may be inside or outside) */ /* side String which is one of the following: */ /* B or b : Bottom of viewport */ /* T or t : Top of viewport */ /* L or l : Left of viewport */ /* R or r : Right of viewport */ /* LV or lv : Left of viewport, vertical text */ /* RV or rv : Right of viewport, vertical text */ /* disp Displacement from specified edge of viewport, measured */ /* outwards from the viewport in units of the current */ /* character height. The CENTRELINES of the characters are */ /* aligned with the specified position. */ /* pos Position of the reference point of the string relative */ /* to the viewport edge, ranging from 0.0 (left-hand edge) */ /* to 1.0 (right-hand edge) */ /* just Justification of string relative to reference point */ /* just = 0.0 => left hand edge of string is at reference */ /* just = 1.0 => right hand edge of string is at reference */ /* just = 0.5 => centre of string is at reference */ #include "plplot.h" void plmtex(side,disp,pos,just,text) char *side, *text; double disp, pos, just; { int clpxmi, clpxma, clpymi, clpyma; int sppxmi, sppxma, sppymi, sppyma; int vert, refx, refy; double shift, xform[4]; double vpdxmi, vpdxma, vpdymi, vpdyma; double chrdef, chrht; double mpxscl, mpxoff, mpyscl, mpyoff; int level; glev(&level); if (level < 2) plexit("Please set up viewport before calling plmtex."); /* Open clip limits to subpage limits */ gclp(&clpxmi,&clpxma,&clpymi,&clpyma); gspp(&sppxmi,&sppxma,&sppymi,&sppyma); sclp(sppxmi,sppxma,sppymi,sppyma); gvpd(&vpdxmi,&vpdxma,&vpdymi,&vpdyma); gmp(&mpxscl,&mpxoff,&mpyscl,&mpyoff); gchr(&chrdef,&chrht); shift = 0.0; if (just!=0.0) shift = just * plstrl(text); if (stsearch(side,'b')) { vert = 0; refx = dcpcx((vpdxmi + (vpdxma-vpdxmi) * pos)) - shift*mpxscl; refy = mmpcy((dcmmy(vpdymi) - disp * chrht)); } else if (stsearch(side,'t')) { vert = 0; refx = dcpcx((vpdxmi + (vpdxma-vpdxmi) * pos)) - shift*mpxscl; refy = mmpcy((dcmmy(vpdyma) + disp * chrht)); } else if (stindex(side,"LV")!=-1 || stindex(side,"lv")!=-1) { vert = 0; refy = dcpcy((vpdymi + (vpdyma-vpdymi) * pos)); refx = mmpcx((dcmmx(vpdxmi) - disp * chrht - shift)); } else if (stindex(side,"RV")!=-1 || stindex(side,"rv")!=-1) { vert = 0; refy = dcpcy((vpdymi + (vpdyma-vpdymi) * pos)); refx = mmpcx((dcmmx(vpdxma) + disp * chrht - shift)); } else if (stsearch(side,'l')) { vert = 1; refy = dcpcy((vpdymi + (vpdyma-vpdymi) * pos)) - shift*mpyscl; refx = mmpcx((dcmmx(vpdxmi) - disp * chrht)); } else if (stsearch(side,'r')) { vert = 1; refy = dcpcy((vpdymi + (vpdyma-vpdymi) * pos)) - shift*mpyscl; refx = mmpcx((dcmmx(vpdxma) + disp * chrht)); } else { sclp(clpxmi,clpxma,clpymi,clpyma); return; } if (vert != 0) { xform[0] = 0.0; xform[1] = -1.0; xform[2] = 1.0; xform[3] = 0.0; } else { xform[0] = 1.0; xform[1] = 0.0; xform[2] = 0.0; xform[3] = 1.0; } plstr(0,xform,refx,refy,text); sclp(clpxmi,clpxma,clpymi,clpyma); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.