home *** CD-ROM | disk | FTP | other *** search
- /* prf_gfx.c */
- /* V091 */
-
- #include "prf.h"
-
- long __regargs PrintRaster(struct prf_info *);
-
- long __regargs PrintIconGfx(struct prf_info *info, UBYTE *name)
- {
- struct DiskObject *dobj;
- struct Image *NormalImage;
- struct Image *SelectImage;
- struct ViewPort *vp;
- FILE *printer;
- UBYTE filename[STR_SIZE];
- ULONG ModeID;
- long rc = CMD_NEUTRAL;
- if(!stricmp(name + (strlen(name) - 5), ".info"))
- stccpy(filename,name,strlen(name) - 4);
- else strcpy(filename,name);
- if(dobj = GetDiskObject(filename))
- {
- if(printer = fopen("prt:","w"))
- {
- PrintSettings(info,printer);
- BuildStatusline(info,name);
- if(*(info->Statusline)) fprintf(printer,"%s\n",info->Statusline);
- if(*(info->Headline)) fprintf(printer,"%s\n",info->Headline);
- fprintf(printer,"\n" T_ICONGFX_HEADER "%s\n",filename);
- fclose(printer);
- }
- if(OpenPrinter(info))
- {
- NormalImage = (struct Image *)dobj->do_Gadget.GadgetRender;
- SelectImage = (struct Image *)dobj->do_Gadget.SelectRender;
- vp = &info->PubScr->ViewPort;
- if((ModeID = GetVPModeID(vp)) != INVALID_ID)
- {
- InitRastPort(&info->ilbm.rp);
- if(SelectImage)
- InitBitMap(&info->ilbm.bmap,NormalImage->Depth,info->PubScr->Width,NormalImage->Height + SelectImage->Height + 15);
- else
- InitBitMap(&info->ilbm.bmap,NormalImage->Depth,info->PubScr->Width,NormalImage->Height + 10);
- info->ilbm.rp.BitMap = &info->ilbm.bmap;
- if(get_planes(info))
- {
- DrawImage(&info->ilbm.rp,NormalImage,0,5);
- if(SelectImage) DrawImage(&info->ilbm.rp,SelectImage,0,NormalImage->Height + 10 );
- info->PIO->iodrp.io_Command = PRD_DUMPRPORT;
- info->PIO->iodrp.io_RastPort = &info->ilbm.rp;
- info->PIO->iodrp.io_ColorMap = vp->ColorMap;
- info->PIO->iodrp.io_Modes = ModeID;
- info->PIO->iodrp.io_SrcX = 0;
- info->PIO->iodrp.io_SrcY = 0;
- info->PIO->iodrp.io_SrcWidth = info->PubScr->Width ;
- info->PIO->iodrp.io_SrcHeight = info->ilbm.bmap.Rows;
- info->PIO->iodrp.io_Special = SPECIAL_NOFORMFEED | SPECIAL_CENTER | SPECIAL_ASPECT;
- if(PrintRaster(info) == CMD_QUIT)rc = CMD_QUIT;
- free_planes(info);
- }
- }
- ClosePrinter(info);
- }
- if(printer = fopen("prt:","w"))
- {
- PrintSettings(info,printer);
- if(*(info->Footline))fprintf(printer,"%s\n",info->Footline);
- fprintf(printer,"\n" T_ICONGFX_FOOT );
- fprintf(printer,"%s\n",filename);
- if(info->flags.ff) fprintf(printer,"\f");
- fclose(printer);
- }
- FreeDiskObject(dobj);
- }
- return rc;
- }
-
-
- long __regargs PrintRaster(struct prf_info *info)
- {
- long end = FALSE;
- long rc = CMD_NEUTRAL;
- SetPrfSignals(info);
- SendIO((struct IORequest *)info->PIO);
- while(!end)
- {
- SetPrfSignals(info);
- Wait(info->signals);
- switch(DoCommand(info,HandleMsgs(info)))
- {
- case CMD_QUIT : rc = CMD_QUIT;
- end = TRUE;
- break;
- case CMD_CLOSEPRINTER : end = TRUE;
- break;
- default : break;
- }
- }
- return rc;
- }
-
- long __regargs OpenPrinter(struct prf_info *info)
- {
- int rc = FALSE;
- if(info->prtPort = CreateMsgPort())
- {
- if(info->PIO = (union PrinterIO *)CreateExtIO(info->prtPort,sizeof(union PrinterIO)))
- {
- if(!(OpenDevice("printer.device",0,(struct IORequest *)info->PIO,0)))
- {
- info->device = TRUE;
- rc = TRUE;
- }
- }
- }
- return rc;
- }
-
- void __regargs ClosePrinter(struct prf_info *info)
- {
- AbortIO((struct IORequest *)info->PIO);
- WaitIO((struct IORequest *)info->PIO);
- if(info->device == TRUE)
- {
- CloseDevice((struct IORequest *)info->PIO);
- info->device = FALSE;
- }
- if(info->PIO)
- {
- DeleteExtIO((struct IORequest *)info->PIO);
- info->PIO = NULL;
- }
- if(info->prtPort)
- {
- DeletePort(info->prtPort);
- info->prtPort = NULL;
- }
- }
-
-
- void __regargs free_planes(struct prf_info *info)
- {
- long i;
- for (i=0;i < info->ilbm.bmap.Depth;i++)
- {
- if(info->ilbm.bmap.Planes[i])FreeRaster(info->ilbm.bmap.Planes[i],info->ilbm.bmap.BytesPerRow * 8,info->ilbm.bmap.Rows);
- }
- }
-
- long __regargs get_planes(struct prf_info *info)
- {
- long rc = TRUE;
- long i;
- for (i=0;i < info->ilbm.bmap.Depth;i++)
- {
- info->ilbm.bmap.Planes[i] = (PLANEPTR)AllocRaster(info->ilbm.bmap.BytesPerRow * 8,info->ilbm.bmap.Rows);
- if(info->ilbm.bmap.Planes[i] == NULL)rc = FALSE;
- else memset(info->ilbm.bmap.Planes[i],'\0',info->ilbm.bmap.BytesPerRow * info->ilbm.bmap.Rows);
- }
- return rc;
- }
-
-
-
-
-