X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrvutil.c;h=85d4434d3cb48a1af7bc6f8f5193b8707c9b6d9f;hb=356ff4d71c6f5753e7a13473145c45a54dc5d8cf;hp=0af88b3450a6b33a93be1a6a94dda2b88ded101e;hpb=1e7db40300bc594cf708bb6082a6e05a268da946;p=tpg%2Facess2.git diff --git a/Kernel/drvutil.c b/Kernel/drvutil.c index 0af88b34..85d4434d 100644 --- a/Kernel/drvutil.c +++ b/Kernel/drvutil.c @@ -3,10 +3,90 @@ * Common Driver/Filesystem Helper Functions */ #define DEBUG 0 -#include +#include #include +#include // === CODE === +// --- Video Driver Helpers --- +Uint64 DrvUtil_Video_2DStream(void *Ent, void *Buffer, int Length, + tDrvUtil_Video_2DHandlers *Handlers, int SizeofHandlers) +{ + Uint8 *stream = Buffer; + int rem = Length; + int op; + while( rem ) + { + rem --; + op = *stream++; + + if(op > NUM_VIDEO_2DOPS) { + Log_Warning("DrvUtil", "DrvUtil_Video_2DStream: Unknown" + " operation %i", op); + } + + if(op*4 > SizeofHandlers) { + Log_Warning("DrvUtil", "DrvUtil_Video_2DStream: Driver does" + " not support op %i", op); + return Length-rem; + } + + switch(op) + { + case VIDEO_2DOP_NOP: break; + + case VIDEO_2DOP_FILL: + if(rem < 12) return Length-rem; + + if(!Handlers->Fill) { + Log_Warning("DrvUtil", "DrvUtil_Video_2DStream: Driver" + " does not support VIDEO_2DOP_FILL"); + return Length-rem; + } + + Handlers->Fill( + Ent, + *(Uint16*)(&stream[0]), *(Uint16*)(&stream[2]), + *(Uint16*)(&stream[4]), *(Uint16*)(&stream[6]), + *(Uint32*)(&stream[8]) + ); + + rem -= 12; + stream += 12; + break; + + case VIDEO_2DOP_BLIT: + if(rem < 12) return Length-rem; + + if(!Handlers->Blit) { + Log_Warning("DrvUtil", "DrvUtil_Video_2DStream: Driver" + " does not support VIDEO_2DOP_BLIT"); + return Length-rem; + } + + //Log("Handlers->Blit{%}}(%p, %i,%i, %i,%i, %i,%i)", + // Handlers->Blit, Ent, + // *(Uint16*)(&stream[0]), *(Uint16*)(&stream[2]), + // *(Uint16*)(&stream[4]), *(Uint16*)(&stream[6]), + // *(Uint16*)(&stream[8]), *(Uint16*)(&stream[10]) + // ); + Handlers->Blit( + Ent, + *(Uint16*)(&stream[0]), *(Uint16*)(&stream[2]), + *(Uint16*)(&stream[4]), *(Uint16*)(&stream[6]), + *(Uint16*)(&stream[8]), *(Uint16*)(&stream[10]) + ); + + rem -= 12; + stream += 12; + break; + + } + } + return 0; +} + +// --- Disk Driver Helpers --- Uint64 DrvUtil_ReadBlock(Uint64 Start, Uint64 Length, void *Buffer, tDrvUtil_Callback ReadBlocks, Uint64 BlockSize, Uint Argument) {