code: drawterm

ref: a43c1e6fab4d75c8d173a482ee8f4aa04de151c0
dir: /win32-386/tas.c/

View raw version
// could also use windozy InterlockedCompareExchange(p, 1, 0), but why
int
tas(long *p)
{	
	int v;
	
	_asm {
		mov	eax, p
		mov	ebx, 1
		xchg	ebx, [eax]
		mov	v, ebx
	}

	switch(v) {
	case 0:
	case 1:
		return v;
	default:
		print("canlock: corrupted 0x%lux\n", v);
		return 1;
	}
}