83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
| #!/usr/bin/tclsh
 | |
| #
 | |
| # This script splits the sqlite3.c amalgamated source code files into
 | |
| # several smaller files such that no single files is more than a fixed
 | |
| # number of lines in length (32k or 64k).  Each of the split out files
 | |
| # is #include-ed by the master file.
 | |
| #
 | |
| # Splitting files up this way allows them to be used with older compilers
 | |
| # that cannot handle really long source files.
 | |
| #
 | |
| set MAX 32768    ;# Maximum number of lines per file.
 | |
| 
 | |
| set BEGIN {^/\*+ Begin file ([a-zA-Z0-9_.]+) \*+/}
 | |
| set END   {^/\*+ End of %s \*+/}
 | |
| 
 | |
| set in [open sqlite3.c]
 | |
| set out1 [open sqlite3-all.c w]
 | |
| 
 | |
| # Copy the header from sqlite3.c into sqlite3-all.c
 | |
| #
 | |
| while {[gets $in line]} {
 | |
|   if {[regexp $BEGIN $line]} break
 | |
|   puts $out1 $line
 | |
| }
 | |
| 
 | |
| # Gather the complete content of a file into memory.  Store the
 | |
| # content in $bufout.  Store the number of lines is $nout
 | |
| #
 | |
| proc gather_one_file {firstline bufout nout} {
 | |
|   regexp $::BEGIN $firstline all filename
 | |
|   set end [format $::END $filename]
 | |
|   upvar $bufout buf $nout n
 | |
|   set buf $firstline\n
 | |
|   global in
 | |
|   set n 0
 | |
|   while {[gets $in line]>=0} {
 | |
|     incr n
 | |
|     append buf $line\n
 | |
|     if {[regexp $end $line]} break
 | |
|   }
 | |
| }
 | |
| 
 | |
| # Write a big chunk of text in to an auxiliary file "sqlite3-NNN.c".
 | |
| # Also add an appropriate #include to sqlite3-all.c
 | |
| #
 | |
| set filecnt 0
 | |
| proc write_one_file {content} {
 | |
|   global filecnt
 | |
|   incr filecnt
 | |
|   set out [open sqlite3-$filecnt.c w]
 | |
|   puts -nonewline $out $content
 | |
|   close $out
 | |
|   puts $::out1 "#include \"sqlite3-$filecnt.c\""
 | |
| }
 | |
| 
 | |
| # Continue reading input.  Store chunks in separate files and add
 | |
| # the #includes to the main sqlite3-all.c file as necessary to reference
 | |
| # the extra chunks.
 | |
| #
 | |
| set all {}
 | |
| set N 0
 | |
| while {[regexp $BEGIN $line]} {
 | |
|   set buf {}
 | |
|   set n 0
 | |
|   gather_one_file $line buf n
 | |
|   if {$n+$N>=$MAX} {
 | |
|     write_one_file $all
 | |
|     set all {}
 | |
|     set N 0
 | |
|   }
 | |
|   append all $buf
 | |
|   incr N $n
 | |
|   while {[gets $in line]>=0} {
 | |
|     if {[regexp $BEGIN $line]} break
 | |
|     puts $out1 $line
 | |
|   }
 | |
| }
 | |
| if {$N>0} {
 | |
|   write_one_file $all
 | |
| }
 | |
| close $out1
 | |
| close $in
 | 
