home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / OpenStepConversion / IntermediateFrameworks3 / AppKit.framework / Headers / dpsclient.h < prev    next >
Text File  |  1995-01-16  |  11KB  |  295 lines

  1.  
  2. /*
  3.   dpsclient.h
  4.     Application interface to the Display PostScript Library.
  5.  
  6.   This header file is intended to be identical across all
  7.   implementations of the Display PostScript System. It defines types
  8.   and procedures needed by DPS applications to access DPS. It does not
  9.   include operations for creating new DPSContexts.
  10.  
  11.   Copyright (c) 1988 Adobe Systems Incorporated.
  12.   All rights reserved.
  13.   
  14. */
  15.  
  16. #ifndef DPSCLIENT_H
  17. #define DPSCLIENT_H
  18.  
  19. #import "dpsfriends.h"
  20.  
  21. /*=== TYPES ===*/
  22.  
  23. /* Standard error codes (type DPSErrorCode)
  24.  * These are intended to be used with dpsexcept.h
  25.  * System-specific extensions can be made. Codes 1000 through 1099 are
  26.  * reserved for use by Adobe.
  27.  *
  28.  * Codes 1100-1999 are reserved by NeXT.
  29.  */
  30.  
  31. #define DPS_ERROR_BASE        1000
  32. #define DPS_OPENSTEP_ERROR_BASE    1100
  33.  
  34. typedef enum _DPSErrorCode {
  35.     dps_err_ps = DPS_ERROR_BASE,
  36.     dps_err_nameTooLong,
  37.     dps_err_resultTagCheck,
  38.     dps_err_resultTypeCheck,
  39.     dps_err_invalidContext,
  40.     dps_err_select = DPS_OPENSTEP_ERROR_BASE,
  41.     dps_err_connectionClosed,
  42.     dps_err_read,
  43.     dps_err_write,
  44.     dps_err_invalidFD,
  45.     dps_err_invalidTE,
  46.     dps_err_invalidPort,
  47.     dps_err_outOfMemory,
  48.     dps_err_cantConnect
  49. } DPSErrorCode;
  50.  
  51.   /* The above definitions specify the error codes passed to a DPSErrorProc:
  52.  
  53.        dps_err_ps identifies standard PostScript language interpreter
  54.        errors. The arg1 argument to the errorProc is the address of the
  55.        binary object sequence sent by the handleerror (or resynchandleerror)
  56.        operator to report the error. The sequence has 1 object, which is an
  57.        array of 4 objects. See the language extensions document for details
  58.        on the contents of this sequence. arg2 is the number of bytes in the
  59.        entire binary object sequence.
  60.  
  61.        dps_err_nameTooLong flags user names that are too long. 128 chars
  62.        is the maximum length for PostScript language names. The name and its
  63.        length are passed as arg1 and arg2 to the error proc.
  64.  
  65.        dps_err_resultTagCheck flags erroneous result tags, most likely
  66.        due to erroneous explicit use of the printobject operator. The
  67.        pointer to the binary object sequence and its length are passed
  68.        as arg1 and arg2 to the error proc. There is one object in the
  69.        sequence.
  70.  
  71.        dps_err_resultTypeCheck flags incompatible result types. A pointer
  72.        to the offending binary object is passed as arg1; arg2 is unused.
  73.  
  74.        dps_err_invalidContext flags an invalid DPSContext argument. An
  75.        attempt to send PostScript language code to a context that has
  76.        terminated is the most likely cause of this error. arg1 to the
  77.        DPSErrorProc is the context id (see the fork operator); arg2 is
  78.        unused.
  79.  
  80.        dps_err_select, dps_err_read and dps_err_write signal communication
  81.        errors in the connection.  The OS return code is passed in arg1;
  82.        arg2 is unused.
  83.  
  84.        dps_err_connectionClosed indicates the connection to a windowserver
  85.        went away.  arg1 and arg2 are unused.
  86.  
  87.        dps_err_invalidFD, dps_err_invalidTE and dps_err_invalidPort 
  88.        indicate a illegal item of the given type was passed to a DPS
  89.        routine.  The illegal item is passed in arg1; arg2 is unused.
  90.  
  91.        dps_err_outOfMemory indicates a storage allocation failure.  The size
  92.        of the block requested is passed in arg1; arg2 is unused.
  93.  
  94.        dps_err_cantConnect signals an error during the creation of a
  95.        connection to a window server.  The host that was being connected
  96.        to is passed in arg1; arg2 is unused. 
  97.   */
  98.  
  99. typedef void (*DPSTextProc)(
  100.   DPSContext ctxt,
  101.   const char *buf,
  102.   long unsigned int count );
  103.  
  104.   /* Call-back procedure to handle text from the PostScript interpreter.
  105.      'buf' contains 'count' bytes of ASCII text. */
  106.  
  107. typedef void (*DPSErrorProc)(
  108.   DPSContext ctxt,
  109.   DPSErrorCode errorCode,
  110.   long unsigned int arg1, 
  111.   long unsigned int arg2 );
  112.   
  113.   /* Call-back procedure to report errors from the PostScript interpreter.
  114.      The meaning of arg1 and arg2 depend on 'errorCode', as described above.
  115.      See DPSDefaultErrorProc, below.
  116.    */
  117.  
  118.  
  119. /*=== PROCEDURES ===*/
  120.  
  121. extern void DPSDefaultErrorProc(
  122.   DPSContext ctxt,
  123.   DPSErrorCode errorCode,
  124.   long unsigned int arg1,
  125.   long unsigned int arg2 );
  126.   
  127.   /* This is the default error proc that is used for both contexts'
  128.      individual errors and the global error backstop.  It raises an
  129.      exception using NX_RAISE.  For all DPS errors, the context is the
  130.      first piece of data put in the NXHandler record.  The second
  131.      data field is value passed to this routine in arg1.
  132.      */
  133.  
  134. extern void DPSSetTextBackstop( DPSTextProc textProc );
  135.  
  136.   /* Call this to establish textProc as the handler for text output from
  137.      DPSDefaultErrorProc or from contexts created by the 'fork' operator but
  138.      not made known to the dps client library. NULL will be passed as the ctxt
  139.      argument to textProc in the latter case. */
  140.  
  141. extern DPSTextProc DPSGetCurrentTextBackstop(void);
  142.  
  143.   /* Returns the textProc passed most recently to DPSSetTextBackstop, or NULL
  144.      if none */
  145.  
  146. extern void DPSSetErrorBackstop( DPSErrorProc errorProc );
  147.  
  148.   /* Call this to establish errorProc as the handler for PostScript interpreter
  149.      errors from contexts created by the 'fork' operator but not made
  150.      known to the dps client library. NULL will be passed as the ctxt
  151.      argument to errorProc. */
  152.  
  153. extern DPSErrorProc DPSGetCurrentErrorBackstop(void);
  154.  
  155.   /* Returns the errorProc passed most recently to DPSSetErrorBackstop, or NULL
  156.      if none */
  157.  
  158. #define DPSWritePostScript(ctxt, buf, count)\
  159.   (*(ctxt)->procs->WritePostScript)((ctxt), (buf), (count))
  160.  
  161.   /* Send as input to 'ctxt' 'count' bytes of PostScript language contained
  162.      in 'buf'. The code may be in either of the 3 encodings for PostScript
  163.      language programs: plain text, encoded tokens, or binary object sequence.
  164.      If the form is encoded tokens or binary object sequence, an entire
  165.      one of these must be sent (perhaps in a series of calls on
  166.      DPSWritePostScript) before PostScript language in a different encoding
  167.      can be sent.
  168.      
  169.      DPSWritePostScript may transform the PostScript language to a different
  170.      encoding, depending on the characteristics established for 'ctxt' when
  171.      it was created. For example, a context created to store its PostScript
  172.      in an ASCII file would convert binary object sequences to ASCII.
  173.  
  174.      If 'ctxt' represents an invalid context, for example because
  175.      the context has terminated in the server, the dps_err_invalidContext
  176.      error will be reported via ctxt's error proc.
  177.      
  178.      If 'ctxt' is incapable of accepting more PostScript language, for example
  179.      because it is backlogged with code that was sent earlier to be executed,
  180.      this will block until transmission of 'count' bytes can be completed. */
  181.  
  182. extern void DPSPrintf( DPSContext ctxt, const char *fmt, ... );
  183.  
  184.   /* Write string 'fmt' to ctxt with the optional arguments converted,
  185.      formatted and logically inserted into the string in a manner
  186.      identical to the C library routine printf.
  187.  
  188.      If 'ctxt' represents an invalid context, for example because
  189.      the context has terminated in the server, the dps_err_invalidContext
  190.      error will be reported via ctxt's error proc.
  191.      
  192.      If 'ctxt' is incapable of accepting more PostScript language, for example
  193.      because it is backlogged with code that was sent earlier to be executed,
  194.      this will block until transmission of the string can be completed. */
  195.  
  196. #define DPSWriteData(ctxt, buf, count)\
  197.   (*(ctxt)->procs->WriteData)((ctxt), (buf), (count))
  198.   
  199.   /* Write 'count' bytes of data from 'buf' to 'ctxt'. This will not
  200.      change the data.
  201.  
  202.      If 'ctxt' represents an invalid context, for example because
  203.      the context has terminated in the server, the dps_err_invalidContext
  204.      error will be reported via ctxt's error proc.
  205.      
  206.      If 'ctxt' is incapable of accepting more PostScript language, for example
  207.      because it is backlogged with code that was sent earlier to be executed,
  208.      this will block until transmission of 'count' bytes can be completed. */
  209.   
  210. #define DPSFlushContext(ctxt) (*(ctxt)->procs->FlushContext)((ctxt))
  211.   
  212.   /* Force any buffered data to be sent to ctxt.
  213.  
  214.      If 'ctxt' represents an invalid context, for example because
  215.      the context has terminated in the server, the dps_err_invalidContext
  216.      error will be reported via ctxt's error proc.
  217.      
  218.      If 'ctxt' is incapable of accepting more PostScript language, for example
  219.      because it is backlogged with code that was sent earlier to be executed,
  220.      this will block until transmission of all buffered bytes can be completed.
  221.      */
  222.   
  223. extern int DPSChainContext( DPSContext parent, DPSContext child );
  224.  
  225.   /* This links child and all of child's children onto parent's 'chainChild'
  226.      list. The 'chainChild' list threads those contexts that automatically
  227.      receive copies of any PostScript code sent to parent. A context may
  228.      appear on only one such list.
  229.      
  230.      Normally, DPSChainContext returns 0. It returns -1 if child already
  231.      appears on some other context's 'chainChild' list. */
  232.  
  233. extern void DPSUnchainContext( DPSContext ctxt );
  234.  
  235.   /* This unlinks ctxt from the chain that it is on, if any. It leaves
  236.     ctxt->chainParent == ctxt->chainChild == NULL
  237.    */
  238.  
  239. #define DPSResetContext(ctxt) (*(ctxt)->procs->ResetContext)((ctxt))
  240.   
  241.   /* This routine is unimplemented in the NeXT implementation of
  242.      Display PostScript.  See the documentation. */
  243.   
  244. #define DPSWaitContext(ctxt) (*(ctxt)->procs->WaitContext)(ctxt)
  245.  
  246.   /* Waits until the PostScript interpreter is ready for more input to
  247.      this context.  This is useful for synchronizing an application
  248.      with the DPS server.
  249.  
  250.      If 'ctxt' represents an invalid context, for example because
  251.      the context has terminated in the server, the dps_err_invalidContext
  252.      error will be reported via ctxt's error proc. */
  253.  
  254. #define DPSSetTextProc(ctxt, tp) ((ctxt)->textProc = (tp))
  255.  
  256.   /* Change ctxt's textProc. */
  257.   
  258. #define DPSSetErrorProc(ctxt, ep) ((ctxt)->errorProc = (ep))
  259.  
  260.   /* Change ctxt's errorProc. */
  261.   
  262. #define DPSInterruptContext(ctxt) (*(ctxt)->procs->Interrupt)((ctxt))
  263.  
  264.   /* This routine is unimplemented in the NeXT implementation of
  265.      Display PostScript. */
  266.  
  267. #define DPSDestroyContext(ctxt) (*(ctxt)->procs->DestroyContext)((ctxt))
  268.  
  269.   /* This calls DPSUnchainContext, then (for an interpreter context) sends a
  270.      request to the interpreter to terminate ctxt, then frees the storage
  271.      referenced by ctxt. The termination request is ignored by the
  272.      server if the context is invalid, for example if it has already
  273.      terminated. */
  274.   
  275. #define DPSSpaceFromContext(ctxt) ((ctxt)->space)
  276.  
  277.   /* Extract space handle from context. */
  278.  
  279. #define DPSDestroySpace(spc) (*(spc)->procs->DestroySpace)((spc))
  280.  
  281.   /* Calls DPSDestroyContext for each of the contexts in the space, then
  282.      sends a request to the server to terminate the space, then frees the
  283.      storage referenced by spc. */
  284.  
  285. extern int DPSSetWrapSynchronization(DPSContext ctxt, int flag);
  286.  
  287.   /* Causes a DPSWaitContext to be done after each wrap.  Used during
  288.      debugging to isolate the cause of PS errors. */
  289.  
  290.  
  291. #import "dpsOpenStep.h"
  292.  
  293. #endif DPSCLIENT_H
  294.  
  295.