X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrvutil.c;h=99d02f6235e0b2a69349e8a0ab16ef815cbf6a5f;hb=eecce4b7a55315f6c385ad8be35c25dbb12d43d8;hp=0af88b3450a6b33a93be1a6a94dda2b88ded101e;hpb=1e7db40300bc594cf708bb6082a6e05a268da946;p=tpg%2Facess2.git diff --git a/Kernel/drvutil.c b/Kernel/drvutil.c index 0af88b34..99d02f62 100644 --- a/Kernel/drvutil.c +++ b/Kernel/drvutil.c @@ -3,10 +3,84 @@ * 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; + } + + 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) {