home *** CD-ROM | disk | FTP | other *** search
/ RISC User... in a Nutshell / RISC User... in a Nutshell.iso / !Nutshell / !OvnPro / Library / PSsupport < prev   
Encoding:
Text File  |  1997-06-12  |  4.1 KB  |  191 lines

  1. // PSsupport 1.02 12/06/97
  2.  
  3.  
  4. int pssupport_prtype;
  5. int pssupport_printing = 0;
  6. string pssupport_paper;
  7.  
  8.  
  9. // when printer driver changes, read the printer driver type
  10.  
  11. void pssupport_prchange(int user)
  12. {
  13.  pssupport_prtype = (prinfo("") >> 16) & 0xFFFF;
  14. }
  15.  
  16.  
  17. void pssupport_prstart(int user, int view)
  18. {
  19.  int i;
  20.  string c;
  21.  string e = "PDriver$PSextra";
  22.  string p = "PDriver$PSPaper";
  23.  string t = "%%BeginFeature: PageSize ";
  24.  
  25.  if(pssupport_prtype)
  26.   return;
  27.  
  28.  osclis("set OvationPro$PSextra <PDriver$PSextra>");
  29.  osclis("set OvationPro$PSPaper <PDriver$PSPaper>");
  30.  
  31.  pssupport_paper = "";
  32.  
  33.  if(getenvs(e) && (i = e / t) >= 0)
  34.  {
  35.   osclis("set PDriver$PSextra %%BeginFeature: ManualFeed False|Jstatusdict begin /manualfeed false store end|J%%EndFeature|J");
  36.  
  37.   while(mids(e, i++ + slen(t), 1) != "\n");
  38.  
  39.   while((c = mids(e, i + slen(t), 1)) != "\n")
  40.   {
  41.    pssupport_paper += c;
  42.    ++i;
  43.   }
  44.  }
  45.  else
  46.  if(getenvs(p))
  47.  {
  48.   osclis("set PDriver$PSPaper null:");
  49.  
  50.   for(i = slen(p); i > 0; --i)
  51.   {
  52.    if(mids(p, i - 1, 1) == ".")
  53.    {
  54.     pssupport_paper = p << i;
  55.     break;
  56.    }
  57.   }
  58.  }
  59.  else
  60.   messagebox("PDriver$PSextra and PDriver$PSPaper do not specify paper size.");
  61. }
  62.  
  63.  
  64. void pssupport_prend(int user, int view)
  65. {
  66.  string p = "PDriver$PSPaper";
  67.  
  68.  if(pssupport_prtype)
  69.   return;
  70.  
  71.  // reset PDriver$PSextra
  72.  osclis("set PDriver$PSextra <OvationPro$PSextra>");
  73.  osclis("unset OvationPro$PSextra");
  74.  
  75.  // reset PDriver$PSPaper if it exists
  76.  if(getenvs(p))
  77.  {
  78.   osclis("set PDriver$PSPaper <OvationPro$PSPaper>");
  79.   osclis("unset OvationPro$PSPaper");
  80.  }
  81. }
  82.  
  83. void pssupport_goprinter(int user, int view)
  84. {
  85.  pssupport_printing = 1;
  86. }
  87.  
  88.  
  89. void pssupport_gonormal(int user, int view)
  90. {
  91.  pssupport_printing = 0;
  92. }
  93.  
  94.  
  95. void pssupport_prcache0(int user,int view)
  96. {
  97.  // set paper size
  98.  
  99.  if(pssupport_prtype == 0 && pssupport_printing)
  100.  {
  101.   prprints("\nstatusdict /setpageparams known\n");
  102.   prprints("{statusdict begin " + itos(paperwidth() / 1000) + " " + itos(paperheight() / 1000) + " 0 1 setpageparams end}\n");
  103.   prprints("{" + pssupport_paper + "}\n");
  104.   prprints("ifelse\n\n");
  105.  }
  106. }
  107.  
  108.  
  109. void pssupport_prcopies2(int user, int view)
  110. {
  111.  // re-insert Acorn PAR function to override ArtWorks version
  112.  
  113.  if(pssupport_prtype == 0 && pssupport_printing)
  114.  {
  115.   prprints("\n/PAR{6 -2 roll pop pop 10 dict begin dup 0 lt/hflip ED abs/h ED
  116. dup 0 lt/wflip ED abs/w ED 256. div/uly ED 256. div/ulx ED 256. div/lry ED
  117. 256. div/lrx ED 256. div/lly ED 256. div/llx ED[lrx llx sub w div lry lly
  118. sub w div ulx llx sub h div uly lly sub h div llx lly]concat hflip{0 h T 1
  119. -1 scale}if wflip{w 0 T -1 1 scale}if end}BD\n\n");
  120.  }
  121. }
  122.  
  123.  
  124. int pssupport_clipquery(int user, int claim)
  125. {
  126.  // if printing to PostScript, acknowledge that clipping is required
  127.  
  128.  if(!claim)
  129.  {
  130.   if(pssupport_prtype == 0 && pssupport_printing)
  131.    claim = 1;
  132.  }
  133.  return(claim);
  134. }
  135.  
  136.  
  137. string pssupport_getx(int n)
  138. {
  139.  return(itos((getclipcurve(n) + prpagex() - prareax0()) / 400));
  140. }
  141.  
  142.  
  143. string pssupport_gety(int n)
  144. {
  145.  return(itos((prpagey() - getclipcurve(n) - prareay0()) / 400));
  146. }
  147.  
  148.  
  149. void pssupport_doclip(int user)
  150. {
  151.  int c, n;
  152.  
  153.  n = 0;
  154.  
  155.  while(c = getclipcurve(n++))
  156.  {
  157.   switch(c)
  158.   {
  159.    case 2:
  160.           prprints(pssupport_getx(n++) + " " + pssupport_gety(n++) + " moveto\n");
  161.           break;
  162.    case 8:
  163.           prprints(pssupport_getx(n++) + " " + pssupport_gety(n++) + " lineto\n");
  164.           break;
  165.    case 6:
  166.           prprints(pssupport_getx(n++) + " " + pssupport_gety(n++) + " " + pssupport_getx(n++) + " " + pssupport_gety(n++) + " " + pssupport_getx(n++) + " " + pssupport_gety(n++) + " curveto\n");
  167.           break;
  168.    case 5:
  169.           prprints("closepath\n");
  170.           break;
  171.   }
  172.  }
  173.  prprints("clip\n");
  174.  prprints("newpath\n");
  175. }
  176.  
  177.  
  178. void main(void)
  179. {
  180.  addeventhandler(0x003,0,"pssupport_prchange");
  181.  addeventhandler(0x116,0,"pssupport_prchange");
  182.  addeventhandler(0x10C,0,"pssupport_prstart");
  183.  addeventhandler(0x10D,0,"pssupport_prend");
  184.  addeventhandler(0x100,0,"pssupport_goprinter");
  185.  addeventhandler(0x102,0,"pssupport_gonormal");
  186.  addeventhandler(0x10E,0,"pssupport_prcache0");
  187.  addeventhandler(0x11A,0,"pssupport_prcopies2");
  188.  addeventhandler(0x30A,0,"pssupport_clipquery");
  189.  addeventhandler(0x30B,0,"pssupport_doclip");
  190. }
  191.