int add_splinekey(PARAM_CONTROL *pc,SPLINE_KEY **nsk,int x,int y) { int result=FALSE; EnterCriticalSection(&mutex); if(pc){ if(pc->control.type==CSPLINE){ SPLINE_CONTROL *sc=pc->control.data; if(sc){ int i=sc->selected; ANIMATE_DATA *a=sc->anim; if(a){ SPLINE_KEY *sk=0; alloc_key(&sk); if(sk){ SPLINE_KEY_CONTROL *skc=0; add_splinekey_control(sc,sk,&skc); if(skc){ skc->x=x; skc->y=y; init_skc_pos(sc,skc); } insert_keylist(&a[i],sk); if(nsk) *nsk=sk; result=TRUE; } } } } } LeaveCriticalSection(&mutex); return result; }
int x_insert( int argc, char *argv[] ) { const char *status = NULL, *out_fname = NULL, *list1_fname = NULL, *list2_fname = NULL; for( ; argc ; --argc, ++argv ) { if( '-' != argv[0][0] ) break; for( char *p = argv[0] + 1 ; '\0' != *p ; ++p ) { switch( *p ) { case 'o': { if( '\0' != *(p+1) || !(--argc) ) { fprintf( stderr, "%s: -o must be followed by a file name\n", __func__ ); return 1; } out_fname = *(++argv); } break; case 'i': ignore_missing = 1; break; case 'f': { if( '\0' != *(p+1) || !(--argc) ) { fprintf( stderr, "%s: -f must be followed by a file name\n", __func__ ); return 1; } list1_fname = *(++argv); } break; case 'F': { if( '\0' != *(p+1) || !(--argc) ) { fprintf( stderr, "%s: -F must be followed by a file name\n", __func__ ); return 1; } list2_fname = *(++argv); } break; default: { fprintf( stderr, "%s: unknown parameter -%c\n", __func__, *p ); return 1; } } } } if( NULL != list1_fname && NULL != list2_fname && 0 == strcmp( list1_fname, "-" ) && 0 == strcmp( list2_fname, "-" ) ) { fprintf( stderr, "%s: both pre- and post-list cannot be '-'(stdin)\n", __func__ ); return 1; } if( NULL == out_fname ) { fprintf( stderr, "%s: output file name must be specified; try 'lhpc-aff help insert'\n", __func__ ); return 1; } if( argc % 3 ) { fprintf( stderr, "%s: unpaired aff-file and keypath; " "try 'lhpc-aff help insert'\n", __func__ ); return 1; } char *tmp_fname; if( NULL == ( tmp_fname = mk_tmp_filename( ".aff-tmp.", out_fname ) ) ) { fprintf( stderr, "%s: cannot create a unique writable file\n", __func__ ); perror( __func__ ); return 1; } struct AffWriter_s *w; if (NULL == (w = aff_writer( tmp_fname ))) { fprintf(stderr, "%s: not enough memory\n", __func__); goto errclean_free; } if( NULL != aff_writer_errstr( w ) ) { fprintf( stderr, "%s: %s: %s\n", __func__, tmp_fname, aff_writer_errstr( w ) ); goto errclean_w; } // insert data from pre-list if( NULL != list1_fname ) { if( insert_keylist( w, list1_fname ) ) goto errclean_w; } // insert data from cmdline key list for( ; argc ; argc -= 3, argv += 3 ) { if(insert_data( w, argv[1], argv[2], argv[0])) goto errclean_w; } // insert data from post-list if( NULL != list2_fname ) { if( insert_keylist( w, list2_fname ) ) goto errclean_w; } if( NULL != ( status = aff_writer_close( w ) ) ) { fprintf( stderr, "%s: %s\n", __func__, status ); goto errclean_file; } if( rename( tmp_fname, out_fname ) ) { perror( __func__ ); fprintf( stderr, "%s: output is saved to %s\n", __func__, tmp_fname ); goto errclean_free; } free( tmp_fname ); return 0; errclean_w: aff_writer_close( w ); errclean_file: if( remove( tmp_fname ) ) perror( __func__ ); errclean_free: free(tmp_fname); return 1; }