Mich kotzt an das der Lite-C compiler nicht in der Lage ist einfach mal ein scheiß Struct das im stack liegt über eine Funktion zurückzugeben... Ich mein, ja, es ist auch beim GCC sehr hässlich, aber es funktioniert halt...
Am liebsten wäre mir ja eh inline x(

Hab jetzt das hier und es geht immer noch nicht, blick aber selber eh nicht mehr durch (SED braucht dringend syntax highlighting!)
Code:
struct __LFRange
{
	LFIndex location;
	LFIndex length;
};

#ifndef LF_TARGET_LITEC
typedef struct LFRange __LFRange;
#endif


#ifdef LF_INLINE
LF_INLINE LFRange LFRangeMake(LFIndex loc, LFIndex len) 
{
    LFRange range;
    range.location = loc;
    range.length = len;
	
    return range;
}
#else
	#ifdef LF_TARGET_LITEC
		typedef struct __LFRange *LFRange;
	
		#define LF_TEMPRANGECOUNT 10
		LFIndex __LFTempRangesIndex = 0;
		struct __LFRange *__LFTempRanges[LF_TEMPRANGECOUNT];

		#define LFRangeMake(loc, len) __LFTempRanges[__LFRangeMake(loc, len)]
	#else
		#define LFRangeMake(loc, len) __LFRangeMake(loc, len)
	#endif
#endif


Code:
#ifdef LF_TARGET_LITEC
short __LFTempRangesInitialized = 0;

LFIndex __LFRangeMake(LFIndex loc, LFIndex len) 
{
	if(!__LFTempRangesInitialized)
	{
		int i;
		for(i=0; i<LF_TEMPRANGECOUNT; i++)
			__LFTempRanges[i] = (struct __LFRange *)malloc(sizeof(struct __LFRange));
		
		__LFTempRangesInitialized = 1;	
	}
	
	__LFTempRangesIndex ++;
	if(__LFTempRangesIndex >= LF_TEMPRANGECOUNT)
		__LFTempRangesIndex = 0;
	
	(__LFTempRanges[__LFTempRangesIndex]).location = loc;
	(__LFTempRanges[__LFTempRangesIndex]).length = len;
	
	return __LFTempRangesIndex;
}
#else
LFRange __LFRangeMake(LFIndex loc, LFIndex len) 
    LFRange range;
    range.location = loc;
    range.length = len;
	
    return range;
}
#endif




Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com