[comp.sys.mac.programmer] SetLineWidth problem on HP DeskWriter

vbob@umd5.umd.edu (Bob Shields) (06/10/90)

I seem to be having problems with SetLineWidth as described in Tech Note #175
on the HP DeskWriter.  The program below is a translation of the example
code from the Tech Note (in Pascal) to Think C 4.0.  When run with the
DeskWriter printer, the third line printed, which should be 1 point
in thickness, gets printed as a hairline (0.25 in thickness).  However, the
other three lines come out correctly.  Can anyone explain what is happening?
(I am using Rev A.01.00 of the DeskWriter driver.)

Bob Shields		vbob@umd5.umd.edu

/* linetest.c */
#include <stdio.h>
#include <PrintTraps.h>
#define SetLineWidth	182

typedef Point		widthPt;
typedef widthPt		*widthPtr;
typedef widthPtr	*widthHdl;

drawtest()
{
	widthHdl	theWidth;
	
	theWidth = (widthHdl) NewHandle(sizeof(widthPt));
	SetPt(*theWidth, 1, 1);
	PicComment(SetLineWidth, sizeof(widthPt), theWidth);
	
	PenSize(1, 1);
	MoveTo(50, 100);
	LineTo(500, 100);
	MoveTo(50, 125);
	DrawString("\p1 point thickness.");
	
	SetPt(*theWidth, 1, 5);
	PicComment(SetLineWidth, sizeof(widthPt), theWidth);
	MoveTo(50, 200);
	LineTo(500, 200);
	MoveTo(50, 225);
	DrawString("\p5.0 times 1 point pen size = 5 point thickness.");
	
	SetPt(*theWidth, 5, 1);
	PicComment(SetLineWidth, sizeof(widthPt), theWidth);
	MoveTo(50, 300);
	LineTo(500, 300);
	MoveTo(50, 325);
	DrawString("\p0.2 times 5 point pen size = 1 point thickness.");
	
	SetPt(*theWidth, 1, 1);
	PicComment(SetLineWidth, sizeof(widthPt), theWidth);
	PenSize(1, 1);
	MoveTo(50, 400);
	LineTo(500, 400);
	MoveTo(50, 425);
	DrawString("\p1.0 times 1 point pen size = 1 point thickness.");
	
	DisposHandle(theWidth);
}

main()
{
	THPrint		hPrint;
	TPPrPort	pPort;
	TPrStatus	statRec;
	
	puts("Starting test...");
	hPrint = (THPrint)NewHandle(sizeof(TPrint));
	PrOpen();
	if (PrStlDialog(hPrint) && PrJobDialog(hPrint)) {
		pPort = PrOpenDoc(hPrint, NULL, NULL);
		if (PrError() == noErr) {
			PrOpenPage(pPort, NULL);
			if (PrError() == noErr)
				drawtest();
			PrClosePage(pPort);
		}
		PrCloseDoc(pPort);
		
		if ((PrError() == noErr) &&
			((*hPrint)->prJob.bJDocLoop == bSpoolLoop))
			PrPicFile(hPrint, NULL, NULL, NULL, &statRec);
	}
	PrClose();
	DisposHandle(hPrint);
}
-- 
----------- 
Bob Shields		 vbob@umd5.umd.edu