void pcopy(Array* a) { if(a->dynamic_elems) { // BUG: No OOM checking. size_t dynamic_bytes = a->dynamic_capacity * sizeof(Value); Value* new_mem = malloc(dynamic_bytes); memcpy(new_mem, a->dynamic_elems, dynamic_bytes); a->dynamic_elems = new_mem; } // Recursively call pcopy on every element of the array. for(size_t i = 0; i < a->static_length; ++i) pcopy(&a->static_elems[i]); for(size_t i = 0; i < a->dynamic_length; ++i) pcopy(&a->dynamic_elems[i]); }
void Frame::polygon(const Polygon& polygon) { Polygon pcopy(polygon); pcopy.translate(originX,originY); fixFillColor(&pcopy); fixStrokeStyle(&pcopy); display->polygon(pcopy); }
static void recolor( /* recolor the given node */ PNODE *p ) { while (p->kid != NULL) { /* need to propogate down */ int mx = (p->xmin + p->xmax) >> 1; int my = (p->ymin + p->ymax) >> 1; int ki; if (p->x >= mx) ki = (p->y >= my) ? UR : DR; else ki = (p->y >= my) ? UL : DL; pcopy(p, p->kid+ki); p = p->kid + ki; } (*dev->paintr)(greyscale?greyof(p->v):p->v, p->xmin, p->ymin, p->xmax, p->ymax); }
void pstring_t<F>::pcopy(const mem_t *from) { pcopy(from, strlen(from)); }
_WCRTLINK void __F_NAME(_splitpath2,_wsplitpath2)( CHAR_TYPE const *inp, CHAR_TYPE *outp, CHAR_TYPE **drive, CHAR_TYPE **path, CHAR_TYPE **fn, CHAR_TYPE **ext ) { /*=====================================================================*/ CHAR_TYPE const *dotp; CHAR_TYPE const *fnamep; CHAR_TYPE const *startp; UINT_WC_TYPE ch; /* take apart specification like -> //0/hd/user/fred/filename.ext for QNX */ /* take apart specification like -> \\disk2\fred\filename.ext for UNC names */ /* take apart specification like -> c:\fred\filename.ext for DOS, OS/2 */ /* process node/drive/UNC specification */ startp = inp; if( IS_PC( inp[ 0 ] ) && IS_PC( inp[ 1 ] ) ) { inp += 2; for( ;; ) { if( *inp == NULLCHAR ) break; if( IS_PC( *inp ) ) break; if( *inp == '.' ) break; #if defined( __WIDECHAR__ ) || defined( __UNIX__ ) ++inp; #else inp = (char *)_mbsinc( (unsigned char *)inp ); #endif } outp = pcopy( drive, outp, startp, inp ); #if !defined(__UNIX__) /* process drive specification */ } else if( inp[ 0 ] != NULLCHAR && inp[ 1 ] == ':' ) { if( drive != NULL ) { *drive = outp; outp[ 0 ] = inp[ 0 ]; outp[ 1 ] = ':'; outp[ 2 ] = NULLCHAR; outp += 3; } inp += 2; #endif } else if( drive != NULL ) { *drive = outp; *outp = NULLCHAR; ++outp; } /* process /user/fred/filename.ext for QNX */ /* process \fred\filename.ext for DOS, OS/2 */ /* process /fred/filename.ext for DOS, OS/2 */ dotp = NULL; fnamep = inp; startp = inp; for( ;; ) { #if defined( __WIDECHAR__ ) || defined( __UNIX__ ) ch = *inp; #else ch = _mbsnextc( (unsigned char *)inp ); #endif if( ch == 0 ) break; if( ch == '.' ) { dotp = inp; ++inp; continue; } #if defined( __WIDECHAR__ ) || defined( __UNIX__ ) inp++; #else inp = (char *)_mbsinc( (unsigned char *)inp ); #endif if( IS_PC( ch ) ) { fnamep = inp; dotp = NULL; } } outp = pcopy( path, outp, startp, fnamep ); if( dotp == NULL ) dotp = inp; outp = pcopy( fn, outp, fnamep, dotp ); outp = pcopy( ext, outp, dotp, inp ); }
/* Runs the main program. Prints the result of the specified function. */ int main(int argc, char *argv[]) { char func=*argv[argc-1]; //The function number. if (argc<3 || argc>4) { printf("Error: Invalid number of arguments given\n"); return 0; } if (toInt(argv[argc-1]) == 1) //Convert To Integer { if (argc != 3) { printf("Error: Function 1 only takes 3 arguments\n"); return 0; } printf("%d\n",toInt(argv[argc-2])); } else if (func=='2') //Convert To float { if (argc != 3) { printf("Error: Function 2 only takes 3 arguments\n"); return 0; } printf("%f\n",toFloat(argv[argc-2])); } else if (func=='3') //Parse string for integers { if (argc != 3) { printf("Error: Function 3 only takes 3 arguments\n"); return 0; } parseList(argv[argc-2]); } else if (func=='4') //Covert string to upper case { if (argc != 3) { printf("Error: Function 4 only takes 3 arguments\n"); return 0; } toUpper(argv[argc-2]); } else if (func=='5') //Convert string to lower case { if (argc != 3) { printf("Error: Function 5 only takes 3 arguments"); return 0; } toLower(argv[argc-2]); } else if (func=='6') //Reverse a string { if (argc != 3) { printf("Error: Function 6 only takes 3 arguments\n"); } printf("%s\n",reverseString(argv[argc-2])); } else if (func=='7') //Check string to see if it's a palindrome { if (argc != 3) { printf("Error: Function 7 only takes 3 arguments\n"); return 0; } isPalindrome(argv[argc-2]); } else if (func=='8') //Reverse list of words { if (argc != 3) { printf("Error: Function 8 only takes 3 arguments\n"); return 0; } reverseSentence(argv[argc-2]); } else if (func=='9') //Subset check { if (argc != 4) { printf("Error: Function 9 only takes 4 arguments\n"); return 0; } contains(argv[argc-3],argv[argc-2]); } else if (toInt(argv[argc-1]) == 10) //Partial Copy { if (argc != 4) { printf("Error: Function 10 only takes 4 arguments\n"); return 0; } pcopy(argv[argc-3],*argv[argc-2]); } else printf("Error: Invalid function specified. Must be between 1-10\n"); printf("\n"); return 0; }