+/*
+===============
+PRVM_LoadLNO
+===============
+*/
+void PRVM_LoadLNO( const char *progname ) {
+ fs_offset_t filesize;
+ unsigned char *lno;
+ unsigned int *header;
+ char filename[512];
+
+ FS_StripExtension( progname, filename, sizeof( filename ) );
+ strlcat( filename, ".lno", sizeof( filename ) );
+
+ lno = FS_LoadFile( filename, tempmempool, false, &filesize );
+ if( !lno ) {
+ return;
+ }
+
+/*
+<Spike> SafeWrite (h, &lnotype, sizeof(int));
+<Spike> SafeWrite (h, &version, sizeof(int));
+<Spike> SafeWrite (h, &numglobaldefs, sizeof(int));
+<Spike> SafeWrite (h, &numpr_globals, sizeof(int));
+<Spike> SafeWrite (h, &numfielddefs, sizeof(int));
+<Spike> SafeWrite (h, &numstatements, sizeof(int));
+<Spike> SafeWrite (h, statement_linenums, numstatements*sizeof(int));
+*/
+ if( (unsigned) filesize < (6 + prog->progs->numstatements) * sizeof( int ) ) {
+ Mem_Free(lno);
+ return;
+ }
+
+ header = (unsigned int *) lno;
+ if( header[ 0 ] == *(unsigned int *) "LNOF" &&
+ LittleLong( header[ 1 ] ) == 1 &&
+ (unsigned int)LittleLong( header[ 2 ] ) == (unsigned int)prog->progs->numglobaldefs &&
+ (unsigned int)LittleLong( header[ 3 ] ) == (unsigned int)prog->progs->numglobals &&
+ (unsigned int)LittleLong( header[ 4 ] ) == (unsigned int)prog->progs->numfielddefs &&
+ (unsigned int)LittleLong( header[ 5 ] ) == (unsigned int)prog->progs->numstatements )
+ {
+ prog->statement_linenums = (int *)Mem_Alloc(prog->progs_mempool, prog->progs->numstatements * sizeof( int ) );
+ memcpy( prog->statement_linenums, (int *) lno + 6, prog->progs->numstatements * sizeof( int ) );
+ }
+ Mem_Free( lno );
+}
+