Hardcopy to printer (#2290)
* Separate interface for imagefile creation from the send-to-printer interface * SEND.FILE.TO.PRINTER recognizes :DEFAULTPRINTER * Various changes to address #2414 * Move BITMAP properties from PRINTERTYPES to PRINTFILETYPES. * Fix ShellOpen, add UNIX-TMP-FILE-NAME * Include COERCEFONTSPEC changes in anticipation of HTML streams * PDFSTREAM compatible with new imagefile architecture plus able to convert non-local Postscript streams * SKETCH compatible with new imagefile/printing architecture * TEDIT compatible with new printing architecture * Tedit files are of type TEDIT, not TEXT, new interface function TEDIT.TO.IMAGEFILE * ATTACHEDWINDOW: DOATTACHEDWINDOWCOM allows menu to have a form to EVAL, like the background menu * WINDOW: fix menus for new hardcopy architecture * Remove FLUSHFONTSINCORE--FLUSHFONTCACHE is more general * LOAD character names as suggested in PR #2398 * HARDCOPYW respects file extension * VIEWER as default printinghost * SLASHIT interprets '. * MCCS to UTF8 conversion on printer name * Deal with {LPT}.LOCAL and upper casing * @ LPT printers work with exact upper/lower matching * Using NSPRINT functions to recognize fax * Let "UNIX" be the name of the default printer of type UNIX
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "23-Aug-2025 10:53:33" {WMEDLEY}<library>PDFSTREAM.;70 15659
|
||||
(FILECREATED "19-Jan-2026 17:03:36" {WMEDLEY}<library>PDFSTREAM.;107 17186
|
||||
|
||||
:EDIT-BY rmk
|
||||
|
||||
:CHANGES-TO (FNS PDF.FONTSAVAILABLE)
|
||||
:CHANGES-TO (VARS PDFSTREAMCOMS)
|
||||
(FNS SEE-PDF)
|
||||
|
||||
:PREVIOUS-DATE "30-Jul-2025 18:01:04" {WMEDLEY}<library>PDFSTREAM.;68)
|
||||
:PREVIOUS-DATE "17-Jan-2026 12:11:04" {WMEDLEY}<library>PDFSTREAM.;105)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT PDFSTREAMCOMS)
|
||||
@@ -14,26 +15,13 @@
|
||||
(RPAQQ PDFSTREAMCOMS
|
||||
((FILES (SYSLOAD)
|
||||
POSTSCRIPTSTREAM)
|
||||
(INITVARS (PDFFONTCOERCIONS POSTSCRIPTFONTCOERCIONS)
|
||||
(PDFCHARCOERCIONS POSTSCRIPTCHARCOERCIONS))
|
||||
[COMS (* ; "Hook into hardcopy interface")
|
||||
[ADDVARS [PRINTERTYPES ((PDF)
|
||||
(CANPRINT (PDF))
|
||||
(STATUS TRUE)
|
||||
(PROPERTIES NILL)
|
||||
(SEND POSTSCRIPTSEND)
|
||||
(BITMAPSCALE POSTSCRIPT.BITMAPSCALE)
|
||||
(BITMAPFILE (PDF.HARDCOPYW FILE BITMAP SCALEFACTOR REGION
|
||||
ROTATION TITLE]
|
||||
[PRINTFILETYPES (PDF (TEST PDFFILEP)
|
||||
(EXTENSION (PDF))
|
||||
(CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT]
|
||||
(IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
|
||||
(FONTCREATE POSTSCRIPT.FONTCREATE)
|
||||
(FONTSAVAILABLE PDF.FONTSAVAILABLE)
|
||||
(CREATECHARSET \CREATECHARSET.PSC)
|
||||
(FONTEXISTS? POSTSCRIPT.FONTEXISTS?]
|
||||
(ALISTS (DEFAULTFILETYPELIST PDF))
|
||||
(VARS (DEFAULTPRINTERTYPE 'PDF))
|
||||
(FNS PDFFILEP PDF.HARDCOPYW PDF.TEXT PDF.TEDIT PDF.FONTSAVAILABLE)
|
||||
(ALISTS (PRINTFILETYPES PDF)
|
||||
(IMAGESTREAMTYPES PDF)
|
||||
(DEFAULTFILETYPELIST PDF))
|
||||
(FNS PDFFILEP PDF.HARDCOPYW PDF.TEDIT PDF.FONTSAVAILABLE)
|
||||
(P (FONTPROFILE.ADDDEVICE 'PDF 'POSTSCRIPT]
|
||||
|
||||
(* ;; "")
|
||||
@@ -46,29 +34,31 @@
|
||||
(ALISTS (PDF-CONVERTER-TEMPLATES ps2pdf pstopdf))
|
||||
(GLOBALVARS PDFCONVERTER PDF-CONVERTER-TEMPLATES)
|
||||
(FNS OPEN-PDF-STREAM CLOSE-PDF-STREAM PS-TO-PDF)
|
||||
(FNS PDF.POSTSCRIPT)
|
||||
(FNS SEE-PDF)
|
||||
(ADDVARS (FB.SEE.METHODS (PDFFILEP SEE-PDF)))
|
||||
(FNS PDFCONVERTER)))
|
||||
(FNS PDFCONVERTER)
|
||||
(FNS \PDFINIT)
|
||||
(P (\PDFINIT))))
|
||||
|
||||
(FILESLOAD (SYSLOAD)
|
||||
POSTSCRIPTSTREAM)
|
||||
|
||||
(RPAQ? PDFFONTCOERCIONS POSTSCRIPTFONTCOERCIONS)
|
||||
|
||||
(RPAQ? PDFCHARCOERCIONS POSTSCRIPTCHARCOERCIONS)
|
||||
|
||||
|
||||
|
||||
(* ; "Hook into hardcopy interface")
|
||||
|
||||
|
||||
(ADDTOVAR PRINTERTYPES ((PDF)
|
||||
(CANPRINT (PDF))
|
||||
(STATUS TRUE)
|
||||
(PROPERTIES NILL)
|
||||
(SEND POSTSCRIPTSEND)
|
||||
(BITMAPSCALE POSTSCRIPT.BITMAPSCALE)
|
||||
(BITMAPFILE (PDF.HARDCOPYW FILE BITMAP SCALEFACTOR REGION ROTATION TITLE))))
|
||||
|
||||
(ADDTOVAR PRINTFILETYPES (PDF (TEST PDFFILEP)
|
||||
(EXTENSION (PDF))
|
||||
(CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT))))
|
||||
(CONVERSION (POSTSCRIPT PDF.POSTSCRIPT))
|
||||
(BITMAPSCALE POSTSCRIPT.BITMAPSCALE)
|
||||
(BITMAPFILE (PDF.HARDCOPYW IMAGEFILE BITMAP SCALEFACTOR REGION ROTATION
|
||||
TITLE))))
|
||||
|
||||
(ADDTOVAR IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
|
||||
(FONTCREATE POSTSCRIPT.FONTCREATE)
|
||||
@@ -77,54 +67,56 @@
|
||||
(FONTEXISTS? POSTSCRIPT.FONTEXISTS?)))
|
||||
|
||||
(ADDTOVAR DEFAULTFILETYPELIST (PDF . BINARY))
|
||||
|
||||
(RPAQQ DEFAULTPRINTERTYPE PDF)
|
||||
(DEFINEQ
|
||||
|
||||
(PDFFILEP
|
||||
[LAMBDA (FILE) (* ; "Edited 23-Jun-2023 14:43 by rmk")
|
||||
[LAMBDA (FILE) (* ; "Edited 13-Sep-2025 23:24 by rmk")
|
||||
(* ; "Edited 23-Jun-2023 14:43 by rmk")
|
||||
(* ; "Edited 5-Mar-93 21:40 by rmk:")
|
||||
(* ; "Edited 14-Jan-93 10:56 by jds")
|
||||
(OR (CL:MEMBER (UNPACKFILENAME.STRING FILE 'EXTENSION)
|
||||
'("PDF")
|
||||
:TEST
|
||||
(FUNCTION STRING-EQUAL))
|
||||
(CL:WHEN (STREAMP FILE)
|
||||
(SETFILEPTR FILE 0)
|
||||
(PROG1 (AND (EQ (BIN FILE)
|
||||
(CHARCODE %%))
|
||||
(EQ (BIN FILE)
|
||||
(CHARCODE P))
|
||||
(EQ (BIN FILE)
|
||||
(CHARCODE D))
|
||||
(EQ (BIN FILE)
|
||||
(CHARCODE F)))
|
||||
(SETFILEPTR FILE 0)))])
|
||||
(RESETLST
|
||||
[LET (STRM)
|
||||
[if (SETQ STRM (\GETSTREAM FILE 'INPUT T))
|
||||
then [RESETSAVE NIL `(PROGN (SETFILEPTR ,STRM ,(GETFILEPTR STRM]
|
||||
(SETFILEPTR STRM 0)
|
||||
else (RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT))
|
||||
`(PROGN (CLOSEF? OLDVALUE]
|
||||
(AND (EQ (BIN STRM)
|
||||
(CHARCODE %%))
|
||||
(EQ (BIN STRM)
|
||||
(CHARCODE P))
|
||||
(EQ (BIN STRM)
|
||||
(CHARCODE D))
|
||||
(EQ (BIN STRM)
|
||||
(CHARCODE F])])
|
||||
|
||||
(PDF.HARDCOPYW
|
||||
[LAMBDA (PDFFILE BITMAP SCALEFACTOR REGION Landscape? TITLE)
|
||||
(* ; "Edited 12-Jan-2026 23:35 by rmk")
|
||||
(* ; "Edited 11-Jan-2026 14:07 by rmk")
|
||||
(* ; "Edited 19-Sep-2025 17:36 by rmk")
|
||||
(* ; "Edited 24-Jul-2023 10:37 by rmk")
|
||||
(* ; "Edited 23-Jun-2023 13:28 by rmk")
|
||||
(* ; "Edited 6-Mar-2023 22:43 by rmk")
|
||||
(LET ((PSTTMP (PACKFILENAME 'EXTENSION 'TMPPS 'BODY PDFFILE)))
|
||||
(PS-TO-PDF (POSTSCRIPT.HARDCOPYW PSTTMP BITMAP SCALEFACTOR REGION Landscape? TITLE)
|
||||
PDFFILE])
|
||||
|
||||
(PDF.TEXT
|
||||
[LAMBDA (FILE PDFFILE FONTS HEADING TABS) (* ; "Edited 1-Oct-2023 15:24 by rmk")
|
||||
(* ; "Edited 23-Jun-2023 13:23 by rmk")
|
||||
(* ; "Edited 7-Mar-2023 08:39 by rmk")
|
||||
(TEXTTOIMAGEFILE FILE PDFFILE 'PDF FONTS HEADING TABS `(REGION ,POSTSCRIPT.DEFAULT.PAGEREGION
|
||||
ROTATION ,(NOT (NOT
|
||||
POSTSCRIPT.TEXTFILE.LANDSCAPE
|
||||
])
|
||||
(* ; "Edited 23-Jun-2023 13:28 by rmk")
|
||||
(PS-TO-PDF (POSTSCRIPT.HARDCOPYW (OPENSTREAM (UNIX-TMP-FILE-NAME 'bitmap 'ps)
|
||||
'OUTPUT)
|
||||
BITMAP SCALEFACTOR REGION Landscape? TITLE)
|
||||
PDFFILE])
|
||||
|
||||
(PDF.TEDIT
|
||||
[LAMBDA (FILE PDFFILE) (* ; "Edited 23-Jun-2023 13:22 by rmk")
|
||||
(* ; "Edited 7-Mar-2023 08:39 by rmk")
|
||||
(LET ((TSTREAM (OPENTEXTSTREAM FILE)))
|
||||
(TEDIT.FORMAT.HARDCOPY FILE PDFFILE T NIL NIL NIL 'PDF)
|
||||
(CLOSEF TSTREAM])
|
||||
[LAMBDA (FILE IMAGESTREAM IMAGETYPE OPTIONS) (* ; "Edited 13-Jan-2026 15:47 by rmk")
|
||||
(* ; "Edited 26-Sep-2025 23:02 by rmk")
|
||||
(* ; "Edited 19-Sep-2025 07:33 by rmk")
|
||||
|
||||
(* ;; "Make a scratch postscript stream, then convert it to a PDF that is stored in the caller's IMAGESTREAM (which may have been opened with some postscript preamble, which we discard)")
|
||||
|
||||
(PS-TO-PDF (TEDIT.TO.IMAGEFILE FILE (OPENSTREAM (UNIX-TMP-FILE-NAME 'tedit IMAGETYPE)
|
||||
'OUTPUT)
|
||||
'POSTSCRIPT OPTIONS)
|
||||
IMAGESTREAM])
|
||||
|
||||
(PDF.FONTSAVAILABLE
|
||||
[LAMBDA (FONTSPEC) (* ; "Edited 23-Aug-2025 10:53 by rmk")
|
||||
@@ -162,137 +154,165 @@
|
||||
(DEFINEQ
|
||||
|
||||
(OPEN-PDF-STREAM
|
||||
[LAMBDA (FILE OPTIONS) (* ; "Edited 5-Jun-2025 08:41 by rmk")
|
||||
[LAMBDA (FILE OPTIONS) (* ; "Edited 14-Sep-2025 11:15 by rmk")
|
||||
(* ; "Edited 5-Jun-2025 08:41 by rmk")
|
||||
(* ; "Edited 23-Feb-2025 12:18 by rmk")
|
||||
(* ; "Edited 23-Sep-2023 15:38 by rmk")
|
||||
(* ; "Edited 22-Sep-2023 11:04 by rmk")
|
||||
(* ; "Edited 24-Jun-2023 14:49 by rmk")
|
||||
|
||||
(* ;; "Open a temporary PS file, but set it up so that at closing it gets converted to PDF using an operating-system utility (if available), and then gets renamed to the original intended filename.")
|
||||
(* ;; "Open FILE as a postscript file, but with IMAGETYPE=PDF and a closefn that calls PS-TO-PDF after the PS file closefn.")
|
||||
|
||||
(* ;; "We have to stash the original filename someplace. We could put it in the tmp filename and then parse it out, but then we would have to worry about how unix filenames might parse against our {, }, etc. ")
|
||||
|
||||
(* ;;
|
||||
"Simplest thing for now is to just add an extra field at the end of the \POSTSCRIPTDATA record.")
|
||||
|
||||
(if [AND NIL (EQ 'LPT (FILENAMEFIELD FILE 'HOST]
|
||||
then
|
||||
(* ;; "If FILE is on the LPT device, we could just ssume that it can be printed directly, no point in converting. But then we would alo have to lie and give it a PDF extension so it thinks that we are heading to a PDF printer.")
|
||||
|
||||
(OPENPOSTSCRIPTSTREAM FILE OPTIONS)
|
||||
elseif (EQ 'NULL (FILENAMEFIELD (TRUEFILENAME FILE)
|
||||
'HOST))
|
||||
then
|
||||
(* ;; "Device NULL used by TMAX, maybe others, to get page number for table of contents, index. Nothing to convert")
|
||||
|
||||
(OPENPOSTSCRIPTSTREAM FILE OPTIONS)
|
||||
elseif (SETQ FILE (OR [AND (NEQ FILE T)
|
||||
(OR (OUTFILEP FILE)
|
||||
(OPENSTREAM FILE 'OUTPUT]
|
||||
(ERROR "PDF target file not found" FILE)))
|
||||
then (CL:UNLESS (ASSOC (PDFCONVERTER)
|
||||
PDF-CONVERTER-TEMPLATES)
|
||||
(ERROR "Can't find a POSTSCRIPT-to-PDF converter"))
|
||||
(LET ((PSSTREAM (OPENPOSTSCRIPTSTREAM (CONCAT "{UNIX}/tmp/medley-pdf-" (IDATE)
|
||||
"-"
|
||||
(RAND)
|
||||
".ps")
|
||||
OPTIONS)))
|
||||
(STREAMPROP PSSTREAM 'AFTERCLOSE (CONS (FUNCTION CLOSE-PDF-STREAM)))
|
||||
(STREAMPROP PSSTREAM 'PDFTARGETINFO FILE)
|
||||
PSSTREAM])
|
||||
(DECLARE (GLOBALVARS \PDFIMAGEOPS))
|
||||
(CL:UNLESS (ASSOC (PDFCONVERTER)
|
||||
PDF-CONVERTER-TEMPLATES)
|
||||
(ERROR "Can't find a POSTSCRIPT-to-PDF converter"))
|
||||
(LET ((STRM (OPENPOSTSCRIPTSTREAM FILE OPTIONS)))
|
||||
(replace (STREAM IMAGEOPS) of STRM with \PDFIMAGEOPS)
|
||||
STRM])
|
||||
|
||||
(CLOSE-PDF-STREAM
|
||||
[LAMBDA (PSSTREAM) (* ; "Edited 22-Sep-2023 11:18 by rmk")
|
||||
[LAMBDA (PSSTREAM) (* ; "Edited 17-Jan-2026 12:10 by rmk")
|
||||
(* ; "Edited 15-Jan-2026 10:16 by rmk")
|
||||
(* ; "Edited 13-Jan-2026 15:49 by rmk")
|
||||
(* ; "Edited 27-Sep-2025 14:02 by rmk")
|
||||
(* ; "Edited 19-Sep-2025 14:16 by rmk")
|
||||
(* ; "Edited 14-Sep-2025 12:16 by rmk")
|
||||
(* ; "Edited 22-Sep-2023 11:18 by rmk")
|
||||
(* ; "Edited 24-Jul-2023 10:37 by rmk")
|
||||
(* ; "Edited 17-Jul-2023 22:32 by rmk")
|
||||
(* ; "Edited 24-Jun-2023 13:57 by rmk")
|
||||
|
||||
(* ;; "PSSTREAM is a postscript (maybe in tmp) rendition of what is intended to end up as a pdf. If we are going directly to a printer, we can probably just pass it along without worrying about conversion. In fact, in that case we probably should not have bothered even setting up the PDF stream.")
|
||||
|
||||
(* ;; "But for a file we execute the PDFCONVERTER as a shell command to make a pdf, and then we rename it to the intended filename")
|
||||
|
||||
(STREAMPROP PSSTREAM 'AFTERCLOSE NIL) (* ;
|
||||
"Maybe just remove only CLOSE-PDF-STREAMfrom the list?")
|
||||
(LET ((TARGETINFO (STREAMPROP PSSTREAM 'PDFTARGETINFO NIL)))
|
||||
(CL:IF TARGETINFO
|
||||
(RENAMEFILE (PS-TO-PDF PSSTREAM)
|
||||
TARGETINFO)
|
||||
PSSTREAM)])
|
||||
(* ;
|
||||
"Don't run again for internal closing")
|
||||
(CL:WHEN (IMAGESTREAMTYPE PSSTREAM 'PDF) (* ;
|
||||
"If it's still a PDF stream, it hasn't been converted")
|
||||
(CLOSEPOSTSCRIPTSTREAM PSSTREAM)
|
||||
(replace (STREAM IMAGEOPS) of PSSTREAM with \NOIMAGEOPS)
|
||||
(* ;
|
||||
"Don't run again for internal closing")
|
||||
(CLOSEF? PSSTREAM) (* ; "PS-TO-PDF wants it closed?")
|
||||
(RESETLST
|
||||
(LET (PDFSTREAM) (* ;
|
||||
"PS-TO-PDF returns a /tmp file if not given a PDFFILE, we copy it into our stream")
|
||||
[RESETSAVE (SETQ PDFSTREAM (OPENSTREAM (PS-TO-PDF (FULLNAME PSSTREAM)
|
||||
(UNIX-TMP-FILE-NAME 'closepdf
|
||||
'pdf))
|
||||
'INPUT))
|
||||
`(PROGN (DELFILE (CLOSEF? OLDVALUE]
|
||||
[RESETSAVE (SETQ PSSTREAM (OPENSTREAM PSSTREAM 'OUTPUT))
|
||||
`(PROGN (CLOSEF? OLDVALUE]
|
||||
(SETFILEPTR PSSTREAM 0)
|
||||
(SETFILEINFO PSSTREAM 'LENGTH 0)
|
||||
(COPYBYTES PDFSTREAM PSSTREAM 0 -1))))])
|
||||
|
||||
(PS-TO-PDF
|
||||
[LAMBDA (PSFILE PDFFILE DONTDELETE) (* ; "Edited 1-Oct-2023 15:18 by rmk")
|
||||
(* ; "Edited 23-Sep-2023 22:54 by rmk")
|
||||
[LAMBDA (PSFILE PDFFILE MAKEERRORFILE) (* ; "Edited 14-Jan-2026 21:02 by rmk")
|
||||
(* ; "Edited 13-Jan-2026 15:44 by rmk")
|
||||
(* ; "Edited 27-Sep-2025 16:51 by rmk")
|
||||
(* ; "Edited 19-Sep-2025 14:14 by rmk")
|
||||
(* ; "Edited 14-Sep-2025 09:44 by rmk")
|
||||
(* ; "Edited 1-Oct-2023 15:18 by rmk")
|
||||
(* ; "Edited 23-Jul-2023 22:30 by rmk")
|
||||
(* ; "Edited 24-Jun-2023 15:01 by rmk")
|
||||
(* ; "Edited 16-Jul-2022 13:06 by rmk")
|
||||
(* ; "Edited 8-Jul-2022 10:20 by rmk")
|
||||
(* ; "Edited 7-May-2022 22:40 by rmk")
|
||||
(* ; "Edited 7-Oct-2021 11:15 by rmk:")
|
||||
|
||||
(* ;; "PSFILE is the name of a closed PS file on a DSK/UNIX device. This function uses the PDFCONVERTER utility to convert that to a parallel pdf file, which is then renamed to PDFFILE. ")
|
||||
(* ;; "PSFILE is a postscript file or stream whose contents are to be converted to a PDF-formatted file PDFFILE by means of a Shell PDFCONVERTER utility.")
|
||||
|
||||
(* ;; "DONTDELETE is just for debugging, keeps the /tmp/ files")
|
||||
(* ;; "")
|
||||
|
||||
(* ;; "PSFILE may be a Medley filename or a stream that is recognized as a PS formatted file. If its contents do not reside in the Unix file system, it will be copied to a /tmp/ file to be given to the Shell. The /tmp/ file may be deleted at the end.")
|
||||
|
||||
(* ;; "")
|
||||
|
||||
(* ;; "PDFFILE is NIL, a file name, or perhaps a stream to receive the pdf.")
|
||||
|
||||
(* ;; " If NIL, a name is made by attaching PDF to PSFILE; a stream without a name goes to a scratch stream.")
|
||||
|
||||
(* ;; "")
|
||||
|
||||
(SETQ PSFILE (FULLNAME (TRUEFILENAME PSFILE)))
|
||||
(CL:UNLESS (INFILEP PSFILE)
|
||||
(ERROR "NO PS FILE TO CONVERT"))
|
||||
(CL:UNLESS (ASSOC (PDFCONVERTER)
|
||||
PDF-CONVERTER-TEMPLATES)
|
||||
(ERROR "A specified POSTSCRIPT-to-PDF converter cannot be found"))
|
||||
(SETQ PDFFILE (if PDFFILE
|
||||
then (TRUEFILENAME PDFFILE)
|
||||
else (PACKFILENAME 'EXTENSION 'pdf 'BODY PSFILE)))
|
||||
(LET ((ERRORFILE (PACKFILENAME 'EXTENSION 'error 'BODY PSFILE))
|
||||
COMPLETIONCODE)
|
||||
(ERROR "A POSTSCRIPT-to-PDF converter cannot be found for this system"))
|
||||
(CL:UNLESS (POSTSCRIPTFILEP PSFILE)
|
||||
(ERROR "NOT A POSTSCRIPT FILE" PSFILE))
|
||||
(SETQ PSFILE (TRUEFILENAME PSFILE))
|
||||
(SETQ PDFFILE (TRUEFILENAME PDFFILE))
|
||||
(RESETLST
|
||||
(LET* ((PSNAMEU (SLASHIT (CL:IF (EQ 'UNIX (FILENAMEFIELD PSFILE 'HOST))
|
||||
(FULLNAME PSFILE)
|
||||
(COPYFILE PSFILE (UNIX-TMP-FILE-NAME PSFILE 'ps)))
|
||||
NIL T))
|
||||
TMPPDFFILE
|
||||
[PDFNAMEU (CL:IF (EQ 'UNIX (FILENAMEFIELD PDFFILE 'HOST))
|
||||
(FULLNAME PDFFILE)
|
||||
(SETQ TMPPDFFILE (UNIX-TMP-FILE-NAME PDFFILE 'pdf)))]
|
||||
(ERRORFILE (CL:IF MAKEERRORFILE
|
||||
(UNIX-TMP-FILE-NAME (OR TMPPDFFILE PDFFILE)
|
||||
'error)
|
||||
"/dev/null"))
|
||||
COMPLETIONCODE)
|
||||
|
||||
(* ;; "PROCESS-COMMAND is currently from GITFNS. Not sure whether ShellCommand in UNIXUTILS is appropriate.")
|
||||
(* ;; "PROCESS-COMMAND is currently from GITFNS. Not sure whether ShellCommand in UNIXUTILS is appropriate.")
|
||||
|
||||
(* ;;
|
||||
"We have to map the filenames down to Unix conventions: (not pseudohost or host, slashes, etc.")
|
||||
[SETQ COMPLETIONCODE (PROCESS-COMMAND (CONCATLIST (SUBLIS `((PSFILE \, PSNAMEU)
|
||||
(PDFFILE \,
|
||||
(SLASHIT PDFNAMEU
|
||||
NIL T))
|
||||
(ERRORFILE \,
|
||||
(SLASHIT ERRORFILE
|
||||
NIL T)))
|
||||
(ASSOC (PDFCONVERTER)
|
||||
PDF-CONVERTER-TEMPLATES
|
||||
]
|
||||
|
||||
[SETQ COMPLETIONCODE (PROCESS-COMMAND (CONCATLIST (SUBLIS
|
||||
`((PSFILE \, (SLASHIT (TRUEFILENAME
|
||||
PSFILE)
|
||||
NIL T))
|
||||
(PDFFILE \, (SLASHIT (TRUEFILENAME
|
||||
PDFFILE)
|
||||
NIL T))
|
||||
(ERRORFILE \, (SLASHIT (TRUEFILENAME
|
||||
ERRORFILE)
|
||||
NIL T)))
|
||||
(ASSOC (PDFCONVERTER)
|
||||
PDF-CONVERTER-TEMPLATES]
|
||||
(* ;; "Now use Medley names")
|
||||
|
||||
(* ;; "Now use Medley names")
|
||||
(CL:WHEN (IGREATERP COMPLETIONCODE 0)
|
||||
(CL:WHEN (AND MAKEERRORFILE (INFILEP ERRORFILE))
|
||||
(CLOSEF? ERRORFILE)
|
||||
(CL:WHEN (IGREATERP (GETFILEINFO ERRORFILE 'LENGTH)
|
||||
0)
|
||||
(PRINTOUT T "See error file at " '%" ERRORFILE '%" T)))
|
||||
(ERROR "Cannot create PDF file for " PSFILE))
|
||||
(if TMPPDFFILE
|
||||
then (* ; "Not on {UNIX}, could be {DSK}")
|
||||
(PROG1 (COPYFILE TMPPDFFILE PDFFILE)
|
||||
(DELFILE TMPPDFFILE))
|
||||
else (* ; "Originally on UNIX")
|
||||
(FULLNAME PDFFILE))))])
|
||||
)
|
||||
(DEFINEQ
|
||||
|
||||
(CLOSEF? PSFILE)
|
||||
(CL:UNLESS DONTDELETE (DELFILE PSFILE))
|
||||
(CLOSEF? ERRORFILE)
|
||||
(CL:WHEN (INFILEP ERRORFILE)
|
||||
(CL:WHEN (IGREATERP (PROG1 (GETFILEINFO ERRORFILE 'LENGTH)
|
||||
(CL:UNLESS DONTDELETE (DELFILE ERRORFILE)))
|
||||
0)
|
||||
(ERROR "Cannot create PDF file for " PDFFILE)))
|
||||
(CL:WHEN (IGREATERP COMPLETIONCODE 0)
|
||||
(ERROR "Cannot create PDF file for " PDFFILE))
|
||||
PDFFILE])
|
||||
(PDF.POSTSCRIPT
|
||||
[LAMBDA (PSFILE IMAGEFILE IMAGETYPE OPTIONS) (* ; "Edited 18-Sep-2025 23:49 by rmk")
|
||||
|
||||
(* ;; "Can't pass OPTIONS, until the MAKEERROFILE flag goes away.")
|
||||
|
||||
(PS-TO-PDF PSFILE IMAGEFILE])
|
||||
)
|
||||
(DEFINEQ
|
||||
|
||||
(SEE-PDF
|
||||
[LAMBDA (PDFFILE) (* ; "Edited 30-Jul-2025 18:00 by rmk")
|
||||
[LAMBDA (PDFFILE) (* ; "Edited 19-Jan-2026 14:06 by rmk")
|
||||
(* ; "Edited 24-Dec-2025 23:32 by rmk")
|
||||
(* ; "Edited 30-Jul-2025 18:00 by rmk")
|
||||
(* ; "Edited 25-Dec-2024 14:25 by rmk")
|
||||
(* ; "Edited 1-Oct-2023 20:47 by rmk")
|
||||
(* ; "Edited 26-Sep-2023 16:52 by rmk")
|
||||
|
||||
(* ;; "Use the ShellOpener for this machine to open the PDF file outside of Medley")
|
||||
|
||||
(LET [(FOUND (FINDFILE-WITH-EXTENSIONS PDFFILE NIL '(PDF]
|
||||
(if FOUND
|
||||
(LET (FOUND)
|
||||
[SETQ FOUND (if (AND (STREAMP PDFFILE)
|
||||
(PDFFILEP PDFFILE))
|
||||
then (UNIX-FILE-NAME PDFFILE 'INPUT 'pdf 'pdf)
|
||||
else (FINDFILE-WITH-EXTENSIONS PDFFILE NIL '(PDF]
|
||||
(if (NOT FOUND)
|
||||
then (ERROR "FILE NOT FOUND" PDFFILE)
|
||||
elseif (PDFFILEP FOUND)
|
||||
then (ShellOpen FOUND)
|
||||
FOUND
|
||||
else (ERROR "FILE NOT FOUND" PDFFILE])
|
||||
else (ERROR FOUND "is not a PDF file"])
|
||||
)
|
||||
|
||||
(ADDTOVAR FB.SEE.METHODS (PDFFILEP SEE-PDF))
|
||||
@@ -304,9 +324,18 @@
|
||||
(CAR (for TEMPLATE in PDF-CONVERTER-TEMPLATES
|
||||
thereis (ShellWhich (CAR TEMPLATE])
|
||||
)
|
||||
(DEFINEQ
|
||||
|
||||
(\PDFINIT
|
||||
[LAMBDA NIL (* ; "Edited 14-Sep-2025 01:15 by rmk")
|
||||
(SETQ \PDFIMAGEOPS (create IMAGEOPS using \POSTSCRIPTIMAGEOPS IMAGETYPE _ 'PDF IMCLOSEFN _
|
||||
(FUNCTION CLOSE-PDF-STREAM])
|
||||
)
|
||||
|
||||
(\PDFINIT)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (3421 6457 (PDFFILEP 3431 . 4345) (PDF.HARDCOPYW 4347 . 4945) (PDF.TEXT 4947 . 5664) (
|
||||
PDF.TEDIT 5666 . 6033) (PDF.FONTSAVAILABLE 6035 . 6455)) (6897 14542 (OPEN-PDF-STREAM 6907 . 9628) (
|
||||
CLOSE-PDF-STREAM 9630 . 10917) (PS-TO-PDF 10919 . 14540)) (14543 15301 (SEE-PDF 14553 . 15299)) (15352
|
||||
15636 (PDFCONVERTER 15362 . 15634)))))
|
||||
(FILEMAP (NIL (2498 5822 (PDFFILEP 2508 . 3785) (PDF.HARDCOPYW 3787 . 4639) (PDF.TEDIT 4641 . 5398) (
|
||||
PDF.FONTSAVAILABLE 5400 . 5820)) (6262 14970 (OPEN-PDF-STREAM 6272 . 7422) (CLOSE-PDF-STREAM 7424 .
|
||||
10136) (PS-TO-PDF 10138 . 14968)) (14971 15227 (PDF.POSTSCRIPT 14981 . 15225)) (15228 16499 (SEE-PDF
|
||||
15238 . 16497)) (16550 16834 (PDFCONVERTER 16560 . 16832)) (16835 17147 (\PDFINIT 16845 . 17145)))))
|
||||
STOP
|
||||
|
||||
Reference in New Issue
Block a user