22 TVirtualPS *gVirtualPS = 0;
24 const Int_t kMaxBuffer = 250;
32 TVirtualPS::TVirtualPS()
36 fSizBuffer = kMaxBuffer;
37 fBuffer =
new char[fSizBuffer+1];
47 TVirtualPS::TVirtualPS(
const char *name, Int_t)
48 : TNamed(name,
"Postscript interface")
52 fSizBuffer = kMaxBuffer;
53 fBuffer =
new char[fSizBuffer+1];
63 TVirtualPS::~TVirtualPS()
65 if (fBuffer)
delete [] fBuffer;
72 void TVirtualPS::PrintStr(
const char *str)
76 Int_t len = strlen(str);
80 fStream->write(fBuffer, fLenBuffer);
83 fStream->write(
"\n", 1);
91 if (str[len-1] ==
'@') lenText--;
92 PrintFast(lenText, str);
103 void TVirtualPS::PrintFast(Int_t len,
const char *str)
105 if (!len || !str)
return;
106 while ((len + fLenBuffer) > kMaxBuffer) {
107 Int_t nWrite = kMaxBuffer;
108 if (fImplicitCREsc) {
109 if (fLenBuffer > 0) nWrite = fLenBuffer;
111 if ((len + fLenBuffer) > nWrite) {
113 while ((nWrite >= fLenBuffer) && (str[nWrite - fLenBuffer] !=
' ')) nWrite--;
114 if (nWrite < fLenBuffer) {
115 while ((nWrite >= 0) && (fBuffer[nWrite] !=
' ')) nWrite--;
123 if (nWrite >= fLenBuffer) {
124 if (fLenBuffer > 0) {
125 fStream->write(fBuffer, fLenBuffer);
126 fNByte += fLenBuffer;
127 nWrite -= fLenBuffer;
131 fStream->write(str, nWrite);
138 fStream->write(fBuffer, nWrite);
140 memmove(fBuffer, fBuffer + nWrite, fLenBuffer - nWrite);
141 fBuffer[fLenBuffer - nWrite] = 0;
142 fLenBuffer -= nWrite;
145 if (fImplicitCREsc) {
148 Int_t crlen = strlen(fImplicitCREsc);
149 fStream->write(fImplicitCREsc, crlen);
152 fStream->write(
"\n",1);
156 strlcpy(fBuffer + fLenBuffer, str, len+1);
158 fBuffer[fLenBuffer] = 0;
170 void TVirtualPS::WriteInteger(Int_t n, Bool_t space )
174 snprintf(str,15,
" %d", n);
176 snprintf(str,15,
"%d", n);
185 void TVirtualPS::WriteReal(Float_t z, Bool_t space)
189 snprintf(str,15,
" %g", z);
191 snprintf(str,15,
"%g", z);
200 void TVirtualPS::PrintRaw(Int_t len,
const char *str)
203 if ((len + fLenBuffer) > kMaxBuffer - 1) {
204 fStream->write(fBuffer, fLenBuffer);
205 while(len > kMaxBuffer-1) {
206 fStream->write(str,kMaxBuffer);
210 memcpy(fBuffer, str, len);
213 memcpy(fBuffer + fLenBuffer, str, len);