Mac-Pasteboard

 view release on metacpan or  search on metacpan

pbl.c  view on Meta::CPAN

    FREE ("pbl_free_all data", data);
}

#undef ROUTINE
#define ROUTINE "pbl_release"
OSStatus pbl_release (void * pbref) {

    LOG_ENTRY;
    LOG_ARG_P (pbref, ")\n");

    if (pbref != NULL) CFRelease (pbref);

    return (OSStatus) 0;
}

#undef ROUTINE
#define ROUTINE "pbl_retain"
OSStatus pbl_retain (void * pbref) {

    LOG_ENTRY;
    LOG_ARG_P (pbref, ")\n");

    if (pbref != NULL) CFRetain (pbref);

    return (OSStatus) 0;
}

#include "constant-h.inc"
#include "constant-c.inc"

#ifdef TEST

#define ARGUMENT(x) (argc > x ? argv[x] : NULL)
#define ARGUMENT_D(x,y) (argc > x ? argv[x] : y )

void help () {
    fprintf( stderr, "Valid commands are:\n" );
    fprintf( stderr, "clear [pasteboard_name]\n" );
    fprintf( stderr, "copy data [flavor [pasteboard_name]]\n" );
    fprintf( stderr, "create [pasteboard_name]\n" );
    fprintf( stderr, "paste [pasteboard_name [flavor]]\n" );
    fprintf( stderr, "pbl_all [pasteboard_name]\n" );
}

int main (int argc, char **argv) {
    OSStatus stat = 1;
    if (argc > 1) {
	if (!strcmp (argv[1], "clear")) {
	    PasteboardRef pbref;
	    stat = pbl_create (ARGUMENT(2), (void **) &pbref, NULL);
	    if (!stat && pbref != NULL) {
		stat = pbl_clear (pbref);
		CFRelease (pbref);
	    }
	} else if (!strcmp (argv[1], "copy")) {
	    if (ARGUMENT(2) == NULL) {
		fprintf (stderr, "You must supply an argument to 'copy'\n");
	    } else {
		PasteboardRef pbref;
		stat = pbl_create(
			ARGUMENT_D( 4, "com.apple.pasteboard.clipboard" ),
			(void **) &pbref, NULL );
		if (!stat && pbref != NULL) {
		    stat = pbl_clear (pbref);
		    if (!stat)
			stat = pbl_copy (
				pbref,
				(const unsigned char *) ARGUMENT(2),
				strlen (ARGUMENT(2)),
				1, ARGUMENT(3), 0);
		    CFRelease (pbref);
		}
	    }
	} else if (!strcmp (argv[1], "create")) {
	    PasteboardRef pbref = NULL;
	    char *pbname = NULL;
	    stat = pbl_create (
		    ARGUMENT_D( 2, "com.apple.pasteboard.clipboard" ),
		    (void **) &pbref, &pbname);
	    if (pbname != NULL) {
		fprintf (stderr, "Created pasteboard \"%s\"\n", pbname);
		FREE ("main pbname", pbname);
	    }
	    if (pbref != NULL)
		CFRelease (pbref);
	} else if (!strcmp (argv[1], "paste")) {
	    PasteboardRef pbref;
	    stat = pbl_create(
		    ARGUMENT_D( 2, "com.apple.pasteboard.clipboard" ),
		    (void **) &pbref, NULL );
	    if (!stat && pbref != NULL) {
		unsigned char* data;
		size_t size;
		PB_FLAVOR_FLAGS flags;
		stat = pbl_paste( pbref, 1, 0UL, ARGUMENT( 3 ),
			&data, &size, &flags );
		if ( data != NULL ) {
		    data[size] = '\0';
		    printf( "data: '%s'\n", data );
		    printf( "size: %lu\n", size );
		    printf( "flags: %#lx\n", ( unsigned long ) flags );
		}
		CFRelease (pbref);
	    }
	} else if (!strcmp (argv[1], "pbl_all")) {
	    PasteboardRef pbref;
	    stat = pbl_create(
		    ARGUMENT_D( 2, "com.apple.pasteboard.clipboard" ),
		    (void **) &pbref, NULL );
	    if (!stat && pbref != NULL) {
		pbl_rqst_t rqst = {
		    1,
		    0,
		    NULL,
		    1,
		};
		pbl_resp_t *resp;
		size_t num_resp;
		int inx;
		stat = pbl_all( pbref, &rqst, &resp, &num_resp );
		for ( inx = 0; inx < num_resp; inx++ ) {
		    printf( "\nid: %lu\n", resp[inx].id );
		    printf( "flavor: %s\n", resp[inx].flavor );
		    printf( "flavor flags: %#lx\n", ( unsigned long ) resp[inx].flags );
		    if ( resp[inx].data != NULL ) {
			printf( "data: %s\n", resp[inx].data );
			printf( "size: %lu\n", resp[inx].size );
		    }
		}
		pbl_free_all( resp, num_resp );
		CFRelease (pbref);
	    }
	} else {
	    fprintf (stderr, "%s command %s not recognized.\n", argv[0],
		    argv[1]);
	    help ();
	}
    } else {
	fprintf (stderr, "%s needs at least one argument.\n", argv[0]);
	help ();
    }
    if (stat) {
	fprintf (stderr, "Error - Status = %li\n", ( long ) stat);
    }
    return stat ? 1 : 0;
}

#endif



( run in 0.908 second using v1.01-cache-2.11-cpan-84e82930d8c )