- char *complete_program = 0;
- int complete_size = 0;
- int current_shader = 0;
-
- va_list list;
- va_start(list, x);
-
- while(1)
- {
- char *text = va_arg(list, char*);
- if(!text) break;
-
-// Replace one occurrance in each source of main() with a unique id.
- char main_replacement[BCTEXTLEN];
- sprintf(main_replacement, "main%03d()", current_shader);
-//printf("VFrame::make_shader %s %s\n", text, main_replacement);
- char *source_replacement = new char[strlen(text) + strlen(main_replacement) + 1];
- char *ptr = strstr(text, "main()");
-
- if(ptr)
- {
- memcpy(source_replacement, text, ptr - text);
- source_replacement[ptr - text] = 0;
- strcat(source_replacement, main_replacement);
- ptr += strlen("main()");
- strcat(source_replacement, ptr);
- current_shader++;
- }
- else
- {
- memcpy(source_replacement, text, strlen(text));
- source_replacement[strlen(text)] = 0;
- }
-
- if(!complete_program)
- {
- complete_size = strlen(source_replacement) + 1;
- complete_program = (char*)malloc(complete_size);
- strcpy(complete_program, source_replacement);
- }
- else
- {
- complete_size += strlen(source_replacement);
- complete_program = (char*)realloc(complete_program, complete_size);
- strcat(complete_program, source_replacement);
- }
-
- delete [] source_replacement;