Roxen.git
/
server
/
font_handlers
/
compactimgfile.pike
version
»
Context lines:
10
20
40
80
file
none
3
Roxen.git/server/font_handlers/compactimgfile.pike:52:
{ data = d; } } class CIF { Stdio.File fd; array filelist ; mapping offsets;
+
string prefix="";
array get_dir( string f ) {
-
// #ifdef THREADS
-
// object lock = lock->trylock();
-
// #endif
+
if(!filelist) { offsets = ([]); filelist = ({ "/fontname" }); fd->seek( 64 + 4 ); // header. int c; while( c = getint() ) { offsets[c] = fd->tell(); if( c < 48 || c > 127 ) if( c == 0xffffffff ) filelist += ({ "/fontinfo" }); else filelist += ({ sprintf( "/0x%x", c ) }); else filelist += ({ sprintf( "/%c", c ) });
-
fd->read( getint() );
//
skip
data.
+
if( c == 0xfffffffe )
+
prefix =
fd->read( getint() );
+
else
+
fd->read( getint() );
} } return filelist; } int getint( ) { int c; sscanf( fd->read( 4 ), "%4c", c ); return c;
Roxen.git/server/font_handlers/compactimgfile.pike:105:
{ fd->seek( 4 ); return StringFile( fd->read( 64 )-"\0" ); } // werror("open "+fname+"\n"); int wc; sscanf( fname, "%s.", fname ); if( strlen(fname) > 2 ) sscanf( fname, "0x%x", wc ); else wc=fname[0]; int c;
-
if( fname == "fontinfo" ) wc = 0xffffffff;
+
if( fname == "fontinfo" )
+
wc = 0xffffffff;
if( offsets[ wc ] ) { fd->seek( offsets[ wc ] );
-
+
if( wc <= 0x7fffffff ) // Normal character
+
return StringFile( prefix+fd->read( getint() ) );
return StringFile( fd->read( getint() ) ); } return 0; } void create( string fname ) { fd = Stdio.File( ); if( !fd->open( fname, "r" ) ) error( "Illegal CIF\n"); if( fd->read( 4 ) != "CIF1" ) error( "Illegal CIF\n");