BOOL DemDispatch (ULONG iSvc) { #if DBG if(iSvc < SVC_DEMLASTSVC && (fShowSVCMsg & DEMSVCTRACE) && apfnSVC[iSvc] != demNotYetImplemented){ sprintf(demDebugBuffer,"DemDispatch: Entering %s\n\tAX=%.4x BX=%.4x CX=%.4x DX=%.4x DI=%.4x SI=%.4x\n", aSVCNames[iSvc],getAX(),getBX(),getCX(),getDX(),getDI(),getSI()); OutputDebugStringOem(demDebugBuffer); sprintf(demDebugBuffer,"\tCS=%.4x IP=%.4x DS=%.4x ES=%.4x SS=%.4x SP=%.4x BP=%.4x\n", getCS(),getIP(), getDS(),getES(),getSS(),getSP(),getBP()); OutputDebugStringOem(demDebugBuffer); } #endif if (iSvc >= SVC_DEMLASTSVC){ #if DBG sprintf(demDebugBuffer,"Unimplemented SVC index %x\n",iSvc); OutputDebugStringOem(demDebugBuffer); #endif setCF(1); return FALSE; } if (pHardErrPacket) { pHardErrPacket->vhe_fbInt24 = 0; } CurrentISVC = iSvc; (apfnSVC [iSvc])(); #if DBG if((fShowSVCMsg & DEMSVCTRACE)){ sprintf(demDebugBuffer,"DemDispatch:On Leaving %s\n\tAX=%.4x BX=%.4x CX=%.4x DX=%.4x DI=%.4x SI=%.4x\n", aSVCNames[iSvc],getAX(),getBX(),getCX(),getDX(),getDI(),getSI()); OutputDebugStringOem(demDebugBuffer); sprintf(demDebugBuffer,"\tCS=%.4x IP=%.4x DS=%.4x ES=%.4x SS=%.4x SP=%.4x BP=%.4x CF=%x\n", getCS(),getIP(), getDS(),getES(),getSS(),getSP(),getBP(),getCF()); OutputDebugStringOem(demDebugBuffer); } #endif return TRUE; }
VOID demLockOper (VOID) { HANDLE hFile; DWORD dwFileOffset,cbLock; // Collect all the parameters hFile = GETHANDLE(getBX(),getBP()); dwFileOffset = GETULONG (getCX(),getDX()); cbLock = GETULONG (getSI(),getDI()); if(getAL() == 0){ // Locking case if (LockFile (hFile, dwFileOffset, 0, cbLock, 0 ) == TRUE) { setCF (0); return; } } else { if (UnlockFile (hFile, dwFileOffset, 0, cbLock, 0 ) == TRUE) { setCF (0); return; } } // Operation failed demClientError(hFile, (CHAR)-1); return; }
void Adaptive_Color_Plane_Interpolation(uint8_t * in,uint8_t * out,uint32_t img_w,uint32_t img_h){// http://www.ece.ncsu.edu/imaging/Publications/2002/demosaicking-JEI-02.pdf uint32_t x,y; for (y=0;y<img_h/2;++y){ for (x=0;x<img_w/2;++x){ //Start by estimating green at red int a=abs(-getBP(x-1,y,RED)+(2*getBP(x,y,RED))-getBP(x+1,y,RED))+abs(getBP(x,y,GREEN_RED)-getBP(x+1,y,GREEN_RED)); int B=abs(-getBP(x-1,y-1,RED)+(2*getBP(x,y,RED))-getBP(x+1,y+1,RED))+abs(getBP(x,y-1,GREEN_BLUE)-getBP(x,y,GREEN_BLUE)); setPX(x*2,y*2,BLUE_RGB,getBP(x,y,BLUE)); setPX(x*2+1,y*2,GREEN_RGB,getBP(x,y,GREEN_BLUE)); setPX(x*2,y*2+1,GREEN_RGB,getBP(x,y,GREEN_RED)); setPX(x*2+1,y*2+1,RED_RGB,getBP(x,y,RED)); } } }
VOID cmdCreateProcess ( VOID ) { VDMINFO VDMInfoForCount; STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInformation; HANDLE hStd16In,hStd16Out,hStd16Err; CHAR CurDirVar [] = "=?:"; CHAR Buffer [MAX_DIR]; CHAR *CurDir = Buffer; DWORD dwRet; BOOL Status; NTSTATUS NtStatus; UNICODE_STRING Unicode; OEM_STRING OemString; LPVOID lpNewEnv=NULL; PSTD_HANDLES pStdHandles; ANSI_STRING Env_A; // we have one more 32 executable active Exe32ActiveCount++; // Increment the Re-enterancy count for the VDM VDMInfoForCount.VDMState = INCREMENT_REENTER_COUNT; GetNextVDMCommand (&VDMInfoForCount); RtlZeroMemory((PVOID)&StartupInfo,sizeof(STARTUPINFO)); StartupInfo.cb = sizeof(STARTUPINFO); CurDirVar [1] = chDefaultDrive; dwRet = GetEnvironmentVariable (CurDirVar,Buffer,MAX_DIR); if (dwRet == 0 || dwRet == MAX_DIR) CurDir = NULL; pStdHandles = (PSTD_HANDLES) GetVDMAddr (getSS(), getBP()); if ((hStd16In = (HANDLE) FETCHDWORD(pStdHandles->hStdIn)) != (HANDLE)-1) SetStdHandle (STD_INPUT_HANDLE, hStd16In); if ((hStd16Out = (HANDLE) FETCHDWORD(pStdHandles->hStdOut)) != (HANDLE)-1) SetStdHandle (STD_OUTPUT_HANDLE, hStd16Out); if ((hStd16Err = (HANDLE) FETCHDWORD(pStdHandles->hStdErr)) != (HANDLE)-1) SetStdHandle (STD_ERROR_HANDLE, hStd16Err); /* * Warning, pEnv32 currently points to an ansi environment. * The DOS is using an ANSI env which isn't quite correct. * If the DOS is changed to use an OEM env then we will * have to convert the env back to ansi before spawning * non-dos exes ?!? * 16-Jan-1993 Jonle */ Env_A.Buffer = NULL; RtlInitString((PSTRING)&OemString, pCommand32); NtStatus = RtlOemStringToUnicodeString(&Unicode,&OemString,TRUE); if (NT_SUCCESS(NtStatus)) { NtStatus = RtlUnicodeStringToAnsiString((PANSI_STRING)&OemString, &Unicode, FALSE); RtlFreeUnicodeString( &Unicode ); } if (!NT_SUCCESS(NtStatus)) { SetLastError(RtlNtStatusToDosError(NtStatus)); Status = FALSE; } else { if (pEnv32 != NULL && !cmdXformEnvironment (pEnv32, &Env_A)) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); Status = FALSE; } else { Status = CreateProcess ( NULL, (LPTSTR)pCommand32, NULL, NULL, TRUE, CREATE_SUSPENDED | CREATE_DEFAULT_ERROR_MODE, Env_A.Buffer, (LPTSTR)CurDir, &StartupInfo, &ProcessInformation); } } if (Status == FALSE) dwExitCode32 = GetLastError (); if (hStd16In != (HANDLE)-1) SetStdHandle (STD_INPUT_HANDLE, SCS_hStdIn); if (hStd16Out != (HANDLE)-1) SetStdHandle (STD_OUTPUT_HANDLE, SCS_hStdOut); if (hStd16Err != (HANDLE)-1) SetStdHandle (STD_ERROR_HANDLE, SCS_hStdErr); if (Status) { ResumeThread (ProcessInformation.hThread); WaitForSingleObject(ProcessInformation.hProcess, (DWORD)-1); GetExitCodeProcess (ProcessInformation.hProcess, &dwExitCode32); CloseHandle (ProcessInformation.hProcess); CloseHandle (ProcessInformation.hThread); } if (Env_A.Buffer) RtlFreeAnsiString(&Env_A); // Decrement the Re-enterancy count for the VDM VDMInfoForCount.VDMState = DECREMENT_REENTER_COUNT; GetNextVDMCommand (&VDMInfoForCount); // one less 32 executable active Exe32ActiveCount--; // Kill this thread ExitThread (0); }