Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/teraprn.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4031 - (hide annotations) (download) (as text)
Sat Aug 21 03:12:13 2010 UTC (13 years, 7 months ago) by maya
File MIME type: text/x-c++src
File size: 14613 byte(s)
ファイル名に使う配列の長さを見直した
  ファイル名の長さに MAXPATHLEN を使っていたところは MAX_PATH を使うようにした
  MAXPATHLEN はフォルダ名の長さとしては正しいはず
1 maya 3227 /* Tera Term
2     Copyright(C) 1994-1998 T. Teranishi
3     All rights reserved. */
4    
5     /* TERATERM.EXE, Printing routines */
6     #include "stdafx.h"
7     #include "teraterm.h"
8     #include "tttypes.h"
9     #include <commdlg.h>
10     #include <stdio.h>
11    
12     #include "ttwinman.h"
13     #include "commlib.h"
14     #include "ttcommon.h"
15     #include "ttlib.h"
16    
17     #include "tt_res.h"
18     #include "prnabort.h"
19    
20     #include "teraprn.h"
21    
22     #ifdef _DEBUG
23     #define new DEBUG_NEW
24     #undef THIS_FILE
25     static char THIS_FILE[] = __FILE__;
26     #endif
27    
28     static PRINTDLG PrnDlg;
29    
30     static HDC PrintDC;
31     static LOGFONT Prnlf;
32     static HFONT PrnFont[AttrFontMask+1];
33     static int PrnFW, PrnFH;
34     static RECT Margin;
35     static COLORREF White, Black;
36     static int PrnX, PrnY;
37     static int PrnDx[256];
38     static TCharAttr PrnAttr;
39    
40     static BOOL Printing = FALSE;
41     static BOOL PrintAbortFlag = FALSE;
42    
43     /* pass-thru printing */
44 maya 4031 static char PrnFName[MAX_PATH];
45 maya 3227 static int HPrnFile = 0;
46     static char PrnBuff[TermWidthMax];
47     static int PrnBuffCount = 0;
48    
49     static CPrnAbortDlg *PrnAbortDlg;
50     static HWND HPrnAbortDlg;
51    
52     /* Print Abortion Call Back Function */
53     BOOL CALLBACK PrnAbortProc(HDC PDC, int Code)
54     {
55 maya 3392 MSG m;
56 maya 3227
57 maya 3392 while ((! PrintAbortFlag) && PeekMessage(&m, 0,0,0, PM_REMOVE))
58     if ((HPrnAbortDlg==NULL) || (! IsDialogMessage(HPrnAbortDlg, &m))) {
59     TranslateMessage(&m);
60     DispatchMessage(&m);
61     }
62 maya 3227
63 maya 3392 if (PrintAbortFlag) {
64     HPrnAbortDlg = NULL;
65     PrnAbortDlg = NULL;
66     return FALSE;
67     }
68     else {
69     return TRUE;
70     }
71 maya 3227 }
72    
73     extern "C" {
74     HDC PrnBox(HWND HWin, PBOOL Sel)
75     {
76 maya 3392 /* initialize PrnDlg record */
77     memset(&PrnDlg, 0, sizeof(PRINTDLG));
78     PrnDlg.lStructSize = sizeof(PRINTDLG);
79     PrnDlg.hwndOwner = HWin;
80     PrnDlg.Flags = PD_RETURNDC | PD_NOPAGENUMS | PD_SHOWHELP;
81     if (! *Sel) {
82     PrnDlg.Flags = PrnDlg.Flags | PD_NOSELECTION;
83     }
84     PrnDlg.nCopies = 1;
85 maya 3227
86 maya 3392 /* 'Print' dialog box */
87     if (! PrintDlg(&PrnDlg)) {
88     return NULL; /* if 'Cancel' button clicked, exit */
89     }
90     if (PrnDlg.hDC == NULL) {
91     return NULL;
92     }
93     PrintDC = PrnDlg.hDC;
94     *Sel = (PrnDlg.Flags & PD_SELECTION) != 0;
95     return PrintDC;
96 maya 3227 }
97     }
98    
99     extern "C" {
100     BOOL PrnStart(LPSTR DocumentName)
101     {
102 maya 3392 DOCINFO Doc;
103     char DocName[50];
104     CWnd* pParent;
105     char uimsg[MAX_UIMSG];
106 maya 3227
107 maya 3392 Printing = FALSE;
108     PrintAbortFlag = FALSE;
109 maya 3227
110 maya 3392 PrnAbortDlg = new CPrnAbortDlg();
111     if (PrnAbortDlg==NULL) {
112     return FALSE;
113     }
114     if (ActiveWin==IdVT) {
115     pParent = (CWnd*)pVTWin;
116     }
117     else {
118     pParent = (CWnd*)pTEKWin;
119     }
120     PrnAbortDlg->Create(pParent,&PrintAbortFlag,&ts);
121     HPrnAbortDlg = PrnAbortDlg->GetSafeHwnd();
122 maya 3227
123 maya 3392 GetDlgItemText(HPrnAbortDlg, IDC_PRNABORT_PRINTING, uimsg, sizeof(uimsg));
124     get_lang_msg("DLG_PRNABORT_PRINTING", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
125     SetDlgItemText(HPrnAbortDlg, IDC_PRNABORT_PRINTING, ts.UIMsg);
126     GetDlgItemText(HPrnAbortDlg, IDCANCEL, uimsg, sizeof(uimsg));
127     get_lang_msg("BTN_CANCEL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
128     SetDlgItemText(HPrnAbortDlg, IDCANCEL, ts.UIMsg);
129 maya 3227
130 maya 3392 SetAbortProc(PrintDC,PrnAbortProc);
131 maya 3227
132 maya 3392 Doc.cbSize = sizeof(DOCINFO);
133     strncpy_s(DocName,sizeof(DocName),DocumentName,_TRUNCATE);
134     Doc.lpszDocName = DocName;
135     Doc.lpszOutput = NULL;
136     Doc.lpszDatatype = NULL;
137     Doc.fwType = 0;
138     if (StartDoc(PrintDC, &Doc) > 0) {
139     Printing = TRUE;
140     }
141     else {
142     if (PrnAbortDlg != NULL) {
143     PrnAbortDlg->DestroyWindow();
144     PrnAbortDlg = NULL;
145     HPrnAbortDlg = NULL;
146     }
147     }
148     return Printing;
149 maya 3227 }
150     }
151    
152     extern "C" {
153     void PrnStop()
154     {
155 maya 3392 if (Printing) {
156     EndDoc(PrintDC);
157     DeleteDC(PrintDC);
158     Printing = FALSE;
159     }
160     if (PrnAbortDlg != NULL) {
161     PrnAbortDlg->DestroyWindow();
162     PrnAbortDlg = NULL;
163     HPrnAbortDlg = NULL;
164     }
165 maya 3227 }
166     }
167    
168     extern "C" {
169     int VTPrintInit(int PrnFlag)
170     // Initialize printing of VT window
171     // PrnFlag: specifies object to be printed
172     // = IdPrnScreen Current screen
173     // = IdPrnSelectedText Selected text
174     // = IdPrnScrollRegion Scroll region
175     // = IdPrnFile Spooled file (printer sequence)
176     // Return: print object ID specified by user
177     // = IdPrnCancel (user clicks "Cancel" button)
178     // = IdPrnScreen (user don't select "print selection" option)
179     // = IdPrnSelectedText (user selects "print selection")
180     // = IdPrnScrollRegion (always when PrnFlag=IdPrnScrollRegion)
181     // = IdPrnFile (always when PrnFlag=IdPrnFile)
182     {
183 maya 3392 BOOL Sel;
184     TEXTMETRIC Metrics;
185     POINT PPI, PPI2;
186     HDC DC;
187     int i;
188     TCharAttr TempAttr = {
189     AttrDefault,
190     AttrDefault,
191     AttrDefaultFG,
192     AttrDefaultBG
193     };
194 maya 3227
195 maya 3392 Sel = (PrnFlag & IdPrnSelectedText)!=0;
196     if (PrnBox(HVTWin,&Sel)==NULL) {
197     return (IdPrnCancel);
198     }
199 maya 3227
200 maya 3392 if (PrintDC==0) {
201     return (IdPrnCancel);
202     }
203 maya 3227
204 maya 3392 /* start printing */
205     if (! PrnStart(ts.Title)) {
206     return (IdPrnCancel);
207     }
208 maya 3227
209 maya 3392 /* initialization */
210     StartPage(PrintDC);
211 maya 3227
212 maya 3392 /* pixels per inch */
213     if ((ts.VTPPI.x>0) && (ts.VTPPI.y>0)) {
214     PPI = ts.VTPPI;
215     }
216     else {
217     PPI.x = GetDeviceCaps(PrintDC,LOGPIXELSX);
218     PPI.y = GetDeviceCaps(PrintDC,LOGPIXELSY);
219     }
220 maya 3227
221 maya 3392 /* left margin */
222     Margin.left = (int)((float)ts.PrnMargin[0] / 100.0 * (float)PPI.x);
223     /* right margin */
224     Margin.right = GetDeviceCaps(PrintDC,HORZRES) -
225     (int)((float)ts.PrnMargin[1] / 100.0 * (float)PPI.x);
226     /* top margin */
227     Margin.top = (int)((float)ts.PrnMargin[2] / 100.0 * (float)PPI.y);
228     /* bottom margin */
229     Margin.bottom = GetDeviceCaps(PrintDC,VERTRES) -
230     (int)((float)ts.PrnMargin[3] / 100.0 * (float)PPI.y);
231 maya 3227
232 maya 3392 /* create test font */
233     memset(&Prnlf, 0, sizeof(LOGFONT));
234 maya 3227
235 maya 3392 if (ts.PrnFont[0]==0) {
236     Prnlf.lfHeight = ts.VTFontSize.y;
237     Prnlf.lfWidth = ts.VTFontSize.x;
238     Prnlf.lfCharSet = ts.VTFontCharSet;
239     strncpy_s(Prnlf.lfFaceName, sizeof(Prnlf.lfFaceName), ts.VTFont, _TRUNCATE);
240     }
241     else {
242     Prnlf.lfHeight = ts.PrnFontSize.y;
243     Prnlf.lfWidth = ts.PrnFontSize.x;
244     Prnlf.lfCharSet = ts.PrnFontCharSet;
245     strncpy_s(Prnlf.lfFaceName, sizeof(Prnlf.lfFaceName), ts.PrnFont, _TRUNCATE);
246     }
247     Prnlf.lfWeight = FW_NORMAL;
248     Prnlf.lfItalic = 0;
249     Prnlf.lfUnderline = 0;
250     Prnlf.lfStrikeOut = 0;
251     Prnlf.lfOutPrecision = OUT_CHARACTER_PRECIS;
252     Prnlf.lfClipPrecision = CLIP_CHARACTER_PRECIS;
253     Prnlf.lfQuality = DEFAULT_QUALITY;
254     Prnlf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
255 maya 3227
256 maya 3392 PrnFont[0] = CreateFontIndirect(&Prnlf);
257 maya 3227
258 maya 3392 DC = GetDC(HVTWin);
259     SelectObject(DC, PrnFont[0]);
260     GetTextMetrics(DC, &Metrics);
261     PPI2.x = GetDeviceCaps(DC,LOGPIXELSX);
262     PPI2.y = GetDeviceCaps(DC,LOGPIXELSY);
263     ReleaseDC(HVTWin,DC);
264     DeleteObject(PrnFont[0]); /* Delete test font */
265 maya 3227
266 maya 3392 /* Adjust font size */
267     Prnlf.lfHeight = (int)((float)Metrics.tmHeight * (float)PPI.y / (float)PPI2.y);
268     Prnlf.lfWidth = (int)((float)Metrics.tmAveCharWidth * (float)PPI.x / (float)PPI2.x);
269 maya 3227
270 maya 3392 /* Create New Fonts */
271 maya 3227
272 maya 3392 /* Normal Font */
273     Prnlf.lfWeight = FW_NORMAL;
274     Prnlf.lfUnderline = 0;
275     PrnFont[0] = CreateFontIndirect(&Prnlf);
276     SelectObject(PrintDC,PrnFont[0]);
277     GetTextMetrics(PrintDC, &Metrics);
278     PrnFW = Metrics.tmAveCharWidth;
279     PrnFH = Metrics.tmHeight;
280     /* Under line */
281     Prnlf.lfUnderline = 1;
282     PrnFont[AttrUnder] = CreateFontIndirect(&Prnlf);
283 maya 3227
284 doda 3666 if (ts.FontFlag & FF_BOLD) {
285 maya 3392 /* Bold */
286     Prnlf.lfUnderline = 0;
287     Prnlf.lfWeight = FW_BOLD;
288     PrnFont[AttrBold] = CreateFontIndirect(&Prnlf);
289     /* Bold + Underline */
290     Prnlf.lfUnderline = 1;
291     PrnFont[AttrBold | AttrUnder] = CreateFontIndirect(&Prnlf);
292     }
293     else {
294     PrnFont[AttrBold] = PrnFont[AttrDefault];
295     PrnFont[AttrBold | AttrUnder] = PrnFont[AttrUnder];
296     }
297     /* Special font */
298     Prnlf.lfWeight = FW_NORMAL;
299     Prnlf.lfUnderline = 0;
300     Prnlf.lfWidth = PrnFW; /* adjust width */
301     Prnlf.lfHeight = PrnFH;
302     Prnlf.lfCharSet = SYMBOL_CHARSET;
303 maya 3227
304 maya 3392 strncpy_s(Prnlf.lfFaceName, sizeof(Prnlf.lfFaceName),"Tera Special", _TRUNCATE);
305     PrnFont[AttrSpecial] = CreateFontIndirect(&Prnlf);
306     PrnFont[AttrSpecial | AttrBold] = PrnFont[AttrSpecial];
307     PrnFont[AttrSpecial | AttrUnder] = PrnFont[AttrSpecial];
308     PrnFont[AttrSpecial | AttrBold | AttrUnder] = PrnFont[AttrSpecial];
309 maya 3227
310 maya 3392 Black = RGB(0,0,0);
311     White = RGB(255,255,255);
312     for (i = 0 ; i <= 255 ; i++) {
313     PrnDx[i] = PrnFW;
314     }
315     PrnSetAttr(TempAttr);
316 maya 3227
317 maya 3392 PrnY = Margin.top;
318     PrnX = Margin.left;
319 maya 3227
320 maya 3392 if (PrnFlag == IdPrnScrollRegion) {
321     return (IdPrnScrollRegion);
322     }
323     if (PrnFlag == IdPrnFile) {
324     return (IdPrnFile);
325     }
326     if (Sel) {
327     return (IdPrnSelectedText);
328     }
329     else {
330     return (IdPrnScreen);
331     }
332 maya 3227 }
333     }
334     extern "C" {
335     void PrnSetAttr(TCharAttr Attr)
336     // Set text attribute of printing
337     //
338     {
339 maya 3392 PrnAttr = Attr;
340     SelectObject(PrintDC, PrnFont[Attr.Attr & AttrFontMask]);
341 maya 3227
342 maya 3392 if ((Attr.Attr & AttrReverse) != 0) {
343     SetTextColor(PrintDC,White);
344     SetBkColor( PrintDC,Black);
345     }
346     else {
347     SetTextColor(PrintDC,Black);
348     SetBkColor( PrintDC,White);
349     }
350 maya 3227 }
351     }
352    
353     extern "C" {
354     void PrnOutText(PCHAR Buff, int Count)
355     // Print out text
356     // Buff: points text buffer
357     // Count: number of characters to be printed
358     {
359 maya 3392 int i;
360     RECT RText;
361     PCHAR Ptr, Ptr1, Ptr2;
362     char Buff2[256];
363 maya 3227
364 maya 3392 if (Count<=0) {
365     return;
366     }
367     if (Count>(sizeof(Buff2)-1)) {
368     Count=sizeof(Buff2)-1;
369     }
370     memcpy(Buff2,Buff,Count);
371     Buff2[Count] = 0;
372     Ptr = Buff2;
373 maya 3227
374 maya 3392 if (ts.Language==IdRussian) {
375     if (ts.PrnFont[0]==0) {
376     RussConvStr(ts.RussClient,ts.RussFont,Buff2,Count);
377     }
378     else {
379     RussConvStr(ts.RussClient,ts.RussPrint,Buff2,Count);
380     }
381     }
382 maya 3227
383 maya 3392 do {
384     if (PrnX+PrnFW > Margin.right) {
385     /* new line */
386     PrnX = Margin.left;
387     PrnY = PrnY + PrnFH;
388     }
389     if (PrnY+PrnFH > Margin.bottom) {
390     /* next page */
391     EndPage(PrintDC);
392     StartPage(PrintDC);
393     PrnSetAttr(PrnAttr);
394     PrnY = Margin.top;
395     }
396 maya 3227
397 maya 3392 i = (Margin.right-PrnX) / PrnFW;
398     if (i==0) {
399     i=1;
400     }
401     if (i>Count) {
402     i=Count;
403     }
404 maya 3227
405 maya 3392 if (i<Count) {
406     Ptr2 = Ptr;
407     do {
408     Ptr1 = Ptr2;
409     Ptr2 = CharNext(Ptr1);
410     } while ((Ptr2!=NULL) && ((Ptr2-Ptr)<=i));
411     i = Ptr1-Ptr;
412     if (i<=0) {
413     i=1;
414     }
415     }
416 maya 3227
417 maya 3392 RText.left = PrnX;
418     RText.right = PrnX + i*PrnFW;
419     RText.top = PrnY;
420     RText.bottom = PrnY+PrnFH;
421     ExtTextOut(PrintDC,PrnX,PrnY,6,&RText,Ptr,i,&PrnDx[0]);
422     PrnX = RText.right;
423     Count=Count-i;
424     Ptr = Ptr + i;
425     } while (Count>0);
426 maya 3227
427     }
428     }
429    
430     extern "C" {
431     void PrnNewLine()
432     // Moves to the next line in printing
433     {
434 maya 3392 PrnX = Margin.left;
435     PrnY = PrnY + PrnFH;
436 maya 3227 }
437     }
438    
439     extern "C" {
440     void VTPrintEnd()
441     {
442 maya 3392 int i, j;
443 maya 3227
444 maya 3392 EndPage(PrintDC);
445 maya 3227
446 maya 3392 for (i = 0 ; i <= AttrFontMask ; i++) {
447     for (j = i+1 ; j <= AttrFontMask ; j++) {
448     if (PrnFont[j]==PrnFont[i]) {
449     PrnFont[j] = NULL;
450     }
451     }
452     if (PrnFont[i] != NULL) {
453     DeleteObject(PrnFont[i]);
454     }
455     }
456 maya 3227
457 maya 3392 PrnStop();
458     return;
459 maya 3227 }
460     }
461    
462     /* printer emulation routines */
463     extern "C" {
464     void OpenPrnFile()
465     {
466 maya 4031 char Temp[MAX_PATH];
467 maya 3227
468 maya 3392 KillTimer(HVTWin,IdPrnStartTimer);
469     if (HPrnFile > 0) {
470     return;
471     }
472     if (PrnFName[0] == 0) {
473     GetTempPath(sizeof(Temp),Temp);
474     if (GetTempFileName(Temp,"tmp",0,PrnFName)==0) {
475     return;
476     }
477     HPrnFile = _lcreat(PrnFName,0);
478     }
479     else {
480     HPrnFile = _lopen(PrnFName,OF_WRITE);
481     if (HPrnFile <= 0) {
482     HPrnFile = _lcreat(PrnFName,0);
483     }
484     }
485     if (HPrnFile > 0) {
486     _llseek(HPrnFile,0,2);
487     }
488 maya 3227 }
489     }
490    
491     void PrintFile()
492     {
493 maya 3392 char Buff[256];
494     BOOL CRFlag = FALSE;
495     int c, i;
496     BYTE b;
497 maya 3227
498 maya 3392 if (VTPrintInit(IdPrnFile)==IdPrnFile) {
499     HPrnFile = _lopen(PrnFName,OF_READ);
500     if (HPrnFile>0) {
501     do {
502     i = 0;
503     do {
504     c = _lread(HPrnFile,&b,1);
505     if (c==1) {
506     switch (b) {
507     case HT:
508     memset(&(Buff[i]),0x20,8);
509     i = i + 8;
510     CRFlag = FALSE;
511     break;
512     case LF:
513     CRFlag = ! CRFlag;
514     break;
515     case FF:
516     case CR:
517     CRFlag = TRUE;
518     break;
519     default:
520     if (b >= 0x20) {
521     Buff[i] = b;
522     i++;
523     }
524     CRFlag = FALSE;
525     break;
526     }
527     }
528     if (i>=(sizeof(Buff)-7)) {
529     CRFlag=TRUE;
530     }
531     } while ((c>0) && (! CRFlag));
532     if (i>0) {
533     PrnOutText(Buff, i);
534     }
535     if (CRFlag) {
536     PrnX = Margin.left;
537     if ((b==FF) && (ts.PrnConvFF==0)) { // new page
538     PrnY = Margin.bottom;
539     }
540     else { // new line
541     PrnY = PrnY + PrnFH;
542     }
543     }
544     CRFlag = (b==CR);
545     } while (c>0);
546     _lclose(HPrnFile);
547 maya 3227 }
548 maya 3392 HPrnFile = 0;
549     VTPrintEnd();
550 maya 3227 }
551 maya 3392 remove(PrnFName);
552     PrnFName[0] = 0;
553 maya 3227 }
554    
555     void PrintFileDirect()
556     {
557 maya 3392 CWnd* pParent;
558 maya 3227
559 maya 3392 PrnAbortDlg = new CPrnAbortDlg();
560     if (PrnAbortDlg==NULL) {
561     remove(PrnFName);
562     PrnFName[0] = 0;
563     return;
564     }
565     if (ActiveWin==IdVT) {
566     pParent = (CWnd*)pVTWin;
567     }
568     else {
569     pParent = (CWnd*)pTEKWin;
570     }
571     PrnAbortDlg->Create(pParent,&PrintAbortFlag,&ts);
572     HPrnAbortDlg = PrnAbortDlg->GetSafeHwnd();
573 maya 3227
574 maya 3392 HPrnFile = _lopen(PrnFName,OF_READ);
575     PrintAbortFlag = (HPrnFile<=HFILE_ERROR) || ! PrnOpen(ts.PrnDev);
576     PrnBuffCount = 0;
577     SetTimer(HVTWin,IdPrnProcTimer,0,NULL);
578 maya 3227 }
579    
580     void PrnFileDirectProc()
581     {
582 maya 3392 int c;
583 maya 3227
584 maya 3392 if (HPrnFile==0) {
585     return;
586     }
587     if (PrintAbortFlag) {
588     HPrnAbortDlg = NULL;
589     PrnAbortDlg = NULL;
590     PrnCancel();
591     }
592     if (!PrintAbortFlag && (HPrnFile>0)) {
593     do {
594     if (PrnBuffCount==0) {
595     PrnBuffCount = _lread(HPrnFile,PrnBuff,1);
596     if (ts.Language==IdRussian) {
597     RussConvStr(ts.RussClient,ts.RussPrint,PrnBuff,PrnBuffCount);
598     }
599     }
600 maya 3227
601 maya 3392 if (PrnBuffCount==1) {
602     c = PrnWrite(PrnBuff,1);
603     if (c==0) {
604     SetTimer(HVTWin,IdPrnProcTimer,10,NULL);
605     return;
606     }
607     PrnBuffCount = 0;
608     }
609     else {
610     c = 0;
611     }
612     } while (c>0);
613 maya 3227 }
614 maya 3392 if (HPrnFile > 0) {
615     _lclose(HPrnFile);
616     }
617     HPrnFile = 0;
618     PrnClose();
619     remove(PrnFName);
620     PrnFName[0] = 0;
621     if (PrnAbortDlg!=NULL) {
622     PrnAbortDlg->DestroyWindow();
623     PrnAbortDlg = NULL;
624     HPrnAbortDlg = NULL;
625     }
626 maya 3227 }
627    
628     void PrnFileStart()
629     {
630 maya 3392 if (HPrnFile>0) {
631     return;
632     }
633     if (PrnFName[0]==0) {
634     return;
635     }
636     if (ts.PrnDev[0]!=0) {
637     PrintFileDirect(); // send file directry to printer port
638     }
639     else { // print file by using Windows API
640     PrintFile();
641     }
642 maya 3227 }
643    
644     extern "C" {
645     void ClosePrnFile()
646     {
647 maya 3392 PrnBuffCount = 0;
648     if (HPrnFile > 0) {
649     _lclose(HPrnFile);
650     }
651     HPrnFile = 0;
652     SetTimer(HVTWin,IdPrnStartTimer,ts.PassThruDelay*1000,NULL);
653 maya 3227 }
654     }
655    
656     extern "C" {
657     void WriteToPrnFile(BYTE b, BOOL Write)
658     // (b,Write) =
659     // (0,FALSE): clear buffer
660     // (0,TRUE): write buffer to file
661     // (b,FALSE): put b in buff
662     // (b,TRUE): put b in buff and
663     // write buffer to file
664     {
665 maya 3392 if ((b>0) && (PrnBuffCount<sizeof(PrnBuff))) {
666     PrnBuff[PrnBuffCount++] = b;
667     }
668 maya 3227
669 maya 3392 if (Write) {
670     _lwrite(HPrnFile,PrnBuff,PrnBuffCount);
671     PrnBuffCount = 0;
672     }
673     if ((b==0) && ! Write) {
674     PrnBuffCount = 0;
675     }
676 maya 3227 }
677     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26