home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d6xx / d683 / printfiles.lha / PrintFiles / Source.lha / Source / prf_gfx.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-16  |  4.3 KB  |  166 lines

  1. /* prf_gfx.c */
  2. /* V091 */
  3.  
  4. #include "prf.h"
  5.  
  6. long __regargs PrintRaster(struct prf_info *);
  7.  
  8. long __regargs PrintIconGfx(struct prf_info *info, UBYTE *name)
  9. {
  10.  struct DiskObject *dobj;
  11.  struct Image      *NormalImage;
  12.  struct Image      *SelectImage;
  13.  struct ViewPort   *vp;
  14.  FILE              *printer;
  15.  UBYTE             filename[STR_SIZE];
  16.  ULONG             ModeID;
  17.  long rc = CMD_NEUTRAL;
  18.  if(!stricmp(name + (strlen(name) - 5), ".info"))
  19.    stccpy(filename,name,strlen(name) - 4);
  20.  else strcpy(filename,name);
  21.  if(dobj = GetDiskObject(filename))
  22.  {
  23.   if(printer = fopen("prt:","w"))
  24.   {
  25.    PrintSettings(info,printer);
  26.    BuildStatusline(info,name);
  27.    if(*(info->Statusline)) fprintf(printer,"%s\n",info->Statusline);
  28.    if(*(info->Headline)) fprintf(printer,"%s\n",info->Headline);
  29.    fprintf(printer,"\n" T_ICONGFX_HEADER "%s\n",filename);
  30.    fclose(printer);
  31.   }
  32.   if(OpenPrinter(info))
  33.   {
  34.    NormalImage = (struct Image *)dobj->do_Gadget.GadgetRender;
  35.    SelectImage = (struct Image *)dobj->do_Gadget.SelectRender;
  36.    vp = &info->PubScr->ViewPort;
  37.    if((ModeID = GetVPModeID(vp)) != INVALID_ID)
  38.    {
  39.     InitRastPort(&info->ilbm.rp);
  40.     if(SelectImage)
  41.     InitBitMap(&info->ilbm.bmap,NormalImage->Depth,info->PubScr->Width,NormalImage->Height + SelectImage->Height + 15);
  42.      else
  43.     InitBitMap(&info->ilbm.bmap,NormalImage->Depth,info->PubScr->Width,NormalImage->Height + 10);
  44.     info->ilbm.rp.BitMap = &info->ilbm.bmap;
  45.     if(get_planes(info))
  46.     {
  47.      DrawImage(&info->ilbm.rp,NormalImage,0,5);
  48.      if(SelectImage) DrawImage(&info->ilbm.rp,SelectImage,0,NormalImage->Height + 10 );
  49.      info->PIO->iodrp.io_Command = PRD_DUMPRPORT;
  50.      info->PIO->iodrp.io_RastPort = &info->ilbm.rp;
  51.      info->PIO->iodrp.io_ColorMap = vp->ColorMap;
  52.      info->PIO->iodrp.io_Modes = ModeID;
  53.      info->PIO->iodrp.io_SrcX  = 0;
  54.      info->PIO->iodrp.io_SrcY  = 0;
  55.      info->PIO->iodrp.io_SrcWidth  = info->PubScr->Width ;
  56.      info->PIO->iodrp.io_SrcHeight = info->ilbm.bmap.Rows;
  57.      info->PIO->iodrp.io_Special = SPECIAL_NOFORMFEED | SPECIAL_CENTER | SPECIAL_ASPECT;
  58.      if(PrintRaster(info) == CMD_QUIT)rc = CMD_QUIT;
  59.      free_planes(info);
  60.     }
  61.    }
  62.    ClosePrinter(info);
  63.   }
  64.   if(printer = fopen("prt:","w"))
  65.   {
  66.    PrintSettings(info,printer);
  67.    if(*(info->Footline))fprintf(printer,"%s\n",info->Footline);
  68.    fprintf(printer,"\n" T_ICONGFX_FOOT );
  69.    fprintf(printer,"%s\n",filename);
  70.    if(info->flags.ff) fprintf(printer,"\f");
  71.    fclose(printer);
  72.   }
  73.   FreeDiskObject(dobj);
  74.  }
  75.  return rc;
  76. }
  77.  
  78.  
  79. long __regargs PrintRaster(struct prf_info *info)
  80. {
  81.  long end = FALSE;
  82.  long rc  = CMD_NEUTRAL;
  83.  SetPrfSignals(info);
  84.  SendIO((struct IORequest *)info->PIO);
  85.  while(!end)
  86.  {
  87.   SetPrfSignals(info);
  88.   Wait(info->signals);
  89.   switch(DoCommand(info,HandleMsgs(info)))
  90.   {
  91.    case CMD_QUIT         : rc = CMD_QUIT;
  92.                            end = TRUE;
  93.                            break;
  94.    case CMD_CLOSEPRINTER : end = TRUE;
  95.                            break;
  96.    default               : break;
  97.   }
  98.  }
  99.  return rc;
  100. }
  101.  
  102. long __regargs OpenPrinter(struct prf_info *info)
  103. {
  104.  int rc = FALSE;
  105.  if(info->prtPort = CreateMsgPort())
  106.  {
  107.   if(info->PIO = (union PrinterIO *)CreateExtIO(info->prtPort,sizeof(union PrinterIO)))
  108.   {
  109.    if(!(OpenDevice("printer.device",0,(struct IORequest *)info->PIO,0)))
  110.    {
  111.     info->device = TRUE;
  112.     rc = TRUE;
  113.    }
  114.   }
  115.  }
  116.  return rc;
  117. }
  118.  
  119. void __regargs ClosePrinter(struct prf_info *info)
  120. {
  121.  AbortIO((struct IORequest *)info->PIO);
  122.  WaitIO((struct IORequest *)info->PIO);
  123.  if(info->device == TRUE)
  124.  {
  125.   CloseDevice((struct IORequest *)info->PIO);
  126.   info->device = FALSE;
  127.  }
  128.  if(info->PIO)
  129.  {
  130.   DeleteExtIO((struct IORequest *)info->PIO);
  131.   info->PIO = NULL;
  132.  }
  133.  if(info->prtPort)
  134.  {
  135.   DeletePort(info->prtPort);
  136.   info->prtPort = NULL;
  137.  }
  138. }
  139.  
  140.  
  141. void __regargs free_planes(struct prf_info *info)
  142. {
  143.  long i;
  144.  for (i=0;i < info->ilbm.bmap.Depth;i++)
  145.  {
  146.   if(info->ilbm.bmap.Planes[i])FreeRaster(info->ilbm.bmap.Planes[i],info->ilbm.bmap.BytesPerRow * 8,info->ilbm.bmap.Rows);
  147.  }
  148. }
  149.  
  150. long __regargs get_planes(struct prf_info *info)
  151. {
  152.  long rc = TRUE;
  153.  long i;
  154.  for (i=0;i < info->ilbm.bmap.Depth;i++)
  155.  {
  156.   info->ilbm.bmap.Planes[i] = (PLANEPTR)AllocRaster(info->ilbm.bmap.BytesPerRow * 8,info->ilbm.bmap.Rows);
  157.   if(info->ilbm.bmap.Planes[i] == NULL)rc = FALSE;
  158.   else memset(info->ilbm.bmap.Planes[i],'\0',info->ilbm.bmap.BytesPerRow * info->ilbm.bmap.Rows);
  159.  }
  160.  return rc;
  161. }
  162.  
  163.  
  164.  
  165.  
  166.