(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")(FILECREATED "11-Jun-90 14:34:47" {DSK}<usr>local>lde>lispcore>library>CENTRONICS.;2 6993         changes to%:  (VARS CENTRONICSCOMS)      previous date%: " 8-Nov-85 14:07:01" {DSK}<usr>local>lde>lispcore>library>CENTRONICS.;1)(* ; "Copyright (c) 1985, 1990 by Venue & Xerox Corporation.  All rights reserved.")(PRETTYCOMPRINT CENTRONICSCOMS)(RPAQQ CENTRONICSCOMS [(FNS CENTRONICS.RESET CENTRONICS.BUSYWAIT)                           (FNS \CreateCentronicsDevice \CENTRONICS.OPENFILE \CENTRONICS.CLOSEFILE                                 \CENTRONICS.BOUT \CENTRONICS.BUSYWAIT \CENTRONICS.EVENTFN)                           (FNS \DANDETIGERP \CENTRONICS-CHECK-FOR-PORT)                           (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\CreateCentronicsDevice])(DEFINEQ(CENTRONICS.RESET  [LAMBDA (C150STREAM)                                   (* hdj " 8-Nov-85 14:06")         (* * only do it if we're talking about the real centronics device, and not a        disk file or something)    (\CENTRONICS-CHECK-FOR-PORT)    (if (OR (NULL C150STREAM)                (EQ (fetch (FDEV DEVICENAME) of (fetch (STREAM DEVICE) of C150STREAM)                           )                    'CENTRONICS))        then (WRITEPRINTERPORT 40960)              (WRITEPRINTERPORT 32768)              (DISMISS 1)                                    (* 32768 means init printer)              (WRITEPRINTERPORT 40960)                       (* turn off initialization and                                                            control lines)              NIL])(CENTRONICS.BUSYWAIT  [LAMBDA NIL                                            (* hdj "11-Oct-85 17:58")    (PROG (C150STATUSLINE)      RETRY          (SETQ C150STATUSLINE (LOGAND (READPRINTERPORT)                                      31744))                (* If printer is busy, return T)                                                             (* If other than busy, then there is                                                            an error)          (RETURN (if (EQ C150STATUSLINE 8192)                      then T                    else (if (NEQ (LOGAND (READPRINTERPORT)                                                 31744)                                          24576)                                 then (PRINTOUT PROMPTWINDOW "Printer error" T)                                       (HELP "Printer error - RETURN to continue")                                       (GO RETRY]))(DEFINEQ(\CreateCentronicsDevice  [LAMBDA NIL                                            (* hdj " 9-Sep-85 22:27")    (LET [(DEVICE (create FDEV                         DEVICENAME _ 'CENTRONICS                         EVENTFN _ (FUNCTION \CENTRONICS.EVENTFN)                         BOUT _ (FUNCTION \CENTRONICS.BOUT)                         OPENFILE _ (FUNCTION \CENTRONICS.OPENFILE)                         CLOSEFILE _ (FUNCTION \CENTRONICS.CLOSEFILE)                         GETFILENAME _ [FUNCTION (LAMBDA (NAME RECOG DEVICE)                                                   NAME]                         DELETEFILE _ (FUNCTION NILL)                         GETFILEINFO _ (FUNCTION NILL)                         SETFILEINFO _ (FUNCTION NILL]         (\DEFINEDEVICE 'CENTRONICS DEVICE)         DEVICE])(\CENTRONICS.OPENFILE  [LAMBDA (NAME ACCESS RECOG PARAMETERS DEVICE)          (* hdj " 8-Nov-85 14:06")    (if (OR (EQ ACCESS 'OUTPUT)                (EQ ACCESS 'APPEND))        then [LET ((OLDSTREAM (fetch (FDEV DEVICEINFO) of DEVICE)))                      (\CENTRONICS-CHECK-FOR-PORT)                      (if OLDSTREAM                          then (ERROR "Only one open stream allowed on this device" NAME)                        else (replace (FDEV DEVICEINFO) of DEVICE                                    with (create STREAM                                                    DEVICE _ DEVICE                                                    FULLFILENAME _ '{CENTRONICS}]      else (ERROR "Centronics can only be used for output" NAME])(\CENTRONICS.CLOSEFILE  [LAMBDA (STREAM)                                       (* hdj " 4-Sep-85 17:30")    (replace (FDEV DEVICEINFO) of (fetch (STREAM DEVICE) of STREAM) with NIL])(\CENTRONICS.BOUT  [LAMBDA (STREAM BYTE)                                  (* hdj " 4-Sep-85 16:31")    (if (NEQ (LOGAND (READPRINTERPORT)                        31744)                 24576)        then (while (\CENTRONICS.BUSYWAIT)))     (* Check if printer is busy)    (LET ((C150DATANOSTB (LOGOR BYTE 40960)))                (* Send data, turn off strobe signal)         (WRITEPRINTERPORT C150DATANOSTB)         (WRITEPRINTERPORT (LOGAND 32767 C150DATANOSTB))     (* Send data, turn on strobe signal)         (WRITEPRINTERPORT C150DATANOSTB))                   (* Turn off strobe signal)    NIL])(\CENTRONICS.BUSYWAIT  [LAMBDA NIL                                            (* edited%: "16-Jul-85 14:54")    (PROG (C150STATUSLINE)      RETRY          (SETQ C150STATUSLINE (LOGAND (READPRINTERPORT)                                      31744))                (* If printer is busy, return T)                                                             (* If other than busy, then there is                                                            an error)          (RETURN (if (EQ C150STATUSLINE 8192)                      then T                    else (if (NEQ (LOGAND (READPRINTERPORT)                                                 31744)                                          24576)                                 then (PRINTOUT PROMPTWINDOW "Printer error" T)                                       (HELP "Printer error - type (RETURN) to continue")                                       (GO RETRY])(\CENTRONICS.EVENTFN  [LAMBDA (DEVICE EVENT)                                 (* hdj " 4-Sep-85 16:34")    (SELECTQ EVENT        ((AFTERLOGOUT AFTERSYSOUT AFTERMAKESYS)              (CENTRONICS.RESET))        NIL]))(DEFINEQ(\DANDETIGERP  [LAMBDA NIL                                            (* hdj " 8-Nov-85 14:00")    (AND (EQ \MACHINETYPE \DANDELION)         (ODDP (\DEVICE.INPUT 8])(\CENTRONICS-CHECK-FOR-PORT  [LAMBDA NIL                                            (* hdj " 8-Nov-85 14:05")    (if (NOT (\DANDETIGERP))        then (ERROR "This machine has no Centronics port"]))(DECLARE%: DONTEVAL@LOAD DOCOPY (\CreateCentronicsDevice))(PUTPROPS CENTRONICS COPYRIGHT ("Venue & Xerox Corporation" 1985 1990))(DECLARE%: DONTCOPY  (FILEMAP (NIL (847 2667 (CENTRONICS.RESET 857 . 1703) (CENTRONICS.BUSYWAIT 1705 . 2665)) (2668 6414 (\CreateCentronicsDevice 2678 . 3506) (\CENTRONICS.OPENFILE 3508 . 4328) (\CENTRONICS.CLOSEFILE 4330 . 4546) (\CENTRONICS.BOUT 4548 . 5201) (\CENTRONICS.BUSYWAIT 5203 . 6176) (\CENTRONICS.EVENTFN 6178 . 6412)) (6415 6832 (\DANDETIGERP 6425 . 6605) (\CENTRONICS-CHECK-FOR-PORT 6607 . 6830)))))STOP