Annotation of Examples/UNIX/Subprocess/Subprocess.h, revision 1.1

1.1     ! root        1: /*
        !             2:        Subprocess.h    (v10)
        !             3:        by Charles L. Oei
        !             4:        pty support by Joe Freeman
        !             5:        with encouragement from Kristofer Younger
        !             6:        Subprocess Example, Release 2.0
        !             7:        NeXT Computer, Inc.
        !             8: 
        !             9:        You may freely copy, distribute and reuse the code in this example.
        !            10:        NeXT disclaims any warranty of any kind, expressed or implied, as to
        !            11:        its fitness for any particular use.
        !            12: */
        !            13: 
        !            14: #import <objc/Object.h>
        !            15: #import <stdio.h>
        !            16: 
        !            17: /*
        !            18:     This subprocess object sends/receives data to/from any UNIX
        !            19:     subprocess asynchronously (via vfork/pipe).
        !            20:     Its delegate, if any, will receive the following messages:
        !            21: 
        !            22:        - subprocessDone;
        !            23:            // sent when the subprocess exits
        !            24:     
        !            25:        - subprocessOutput:(char *)buffer;
        !            26:            // sent whenever there is data on the standard output pipe;
        !            27:            // buffer is only valid until next call
        !            28:        
        !            29:        - subprocessError:(const char *)errorString;
        !            30:            // sent when an error occurs;
        !            31:            // if it ever happens, it's usually only at startup time
        !            32: */
        !            33: 
        !            34: 
        !            35: #define BUFFERSIZE 2048
        !            36: 
        !            37: @interface Subprocess:Object
        !            38: {
        !            39:     FILE *fpToChild;
        !            40:     int fromChild;
        !            41:     int childPid;
        !            42:     id delegate;
        !            43:     int masterPty;     // file descriptor for master/slave pty
        !            44:     int slavePty;
        !            45:     int bufferCount;
        !            46:     char outputBuffer[BUFFERSIZE];
        !            47: }
        !            48: 
        !            49: - init:(const char *)subprocessString;
        !            50:     // a cover for the below withDelegate:nil, andPtySupport:NO, andStdErr:YES
        !            51: 
        !            52: - init:(const char *)subprocessString
        !            53:     withDelegate:theDelegate
        !            54:     andPtySupport:(BOOL)wantsPty
        !            55:     andStdErr:(BOOL)wantsStdErr;
        !            56:     // optional requests for pseudo terminal support and
        !            57:     // redirecting the standard error stream thru standard output
        !            58: 
        !            59: - send:(const char *)string withNewline:(BOOL)wantNewline;
        !            60:     // send the string optionally followed by a new line
        !            61: - send:(const char *)string;
        !            62:     // sends the string followed by a new line
        !            63:     // shorthand for above withNewline:YES
        !            64: - terminateInput;
        !            65:     // sends an end-of-file (EOF) to the subprocess
        !            66:     // (and closes input pipe to child)
        !            67: - terminate:sender;
        !            68:     // forces the subprocess to terminate (w/ SIGTERM)
        !            69: 
        !            70: - setDelegate:anObject;
        !            71: - delegate;
        !            72: 
        !            73: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.