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 5196 - (hide annotations) (download) (as text)
Sun Apr 14 12:10:40 2013 UTC (10 years, 11 months ago) by yutakapon
File MIME type: text/x-c++src
File size: 14830 byte(s)
テキストが選択されている場合にプリントダイアログを表示すると、デフォルトの選択肢が
"Selection"になるようにした。
チケット #31153

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

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