This is osc.c in view mode; [Download] [Up]
/* Copyright (c) 1992, Scott Hess. No rights reserved. No * warranty is provided for this software, neither explicit nor * implied. The source and object code for this file may be used * and modified as the user sees fit. */ #import <stdio.h> #import <libc.h> #import <sys/param.h> #import <strings.h> #import <sys/types.h> #import <sys/uio.h> #define USAGE \ "Usage: osc [directory] [-title aTitle] [-mini aTitle] [-window aTitle]\n" \ "\n" \ "osc sends Stuart OSC sequences to its standard output. If the\n" \ "directory parameter is present, it is sent as part of the\n" \ "Directory-setting OSC sequence. With no parameters, the current\n" \ "working directory is used as the directory. -title causes the next\n" \ "string in the parameter list to be sent as part of a title-setting\n" \ "sequence. -mini is similar except that it only sets the miniwindow\n" \ "title, and -window only sets the main window title.\n" static inline void sendOSC( int which, const char *string) { /* Use an iovec because that _has_ to be about 400 times faster * than a printf. No? * * Well, yes, it is a slight bit faster (around 15%), but it's * still no match for a shell's built-in echo. */ #ifdef USEIOVEC struct iovec output[]={ { "\033] ;", 4}, { (char *)string, strlen( string)}, { "\007", 1}, }; output->iov_base[ 2]=which+'0'; writev( 0, output, 3); #else printf( "\033]%d;%s\007", which, string); #endif } void main( int argc, char *argv[]) { const char *dir=NULL; char buf[ MAXPATHLEN+1]; const char *names[]={ "Title", "Mini", "Window"}; if( argc==1) { dir=getwd( buf); } for( argv++; *argv; argv++) { if( **argv=='-') { int which; for( which=0; which<3; which++) { if( !strcasecmp( *argv+1, names[ which])) { break; } } if( which==3) { fprintf( stderr, "%s", USAGE); exit( 0); } argv++; sendOSC( which, *argv); if( !*argv) { break; } } else { dir=*argv; } } if( dir) { sendOSC( 3, dir); } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.