⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdio.c

📁 一个操作系统的源码部分
💻 C
字号:
#include "stdio.h"
#include "unistd.h"
#include "string.h"


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void os_info(void)
{
	sys_os_info();
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
int Fork(void)
{
	int pid=0;
	pid=sys_Fork(2);
  return pid;
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void LockProc(BOOL bLock)
{
	sys_LockProc((unsigned)bLock);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void WakeUpProc(HINSTANCE hInstance)
{
	//Printf(0,320,"Wake Up Proc %d",hInstance);
  sys_WakeUpProc((unsigned)hInstance);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void BlockProc(HINSTANCE hInstance)
{
	sys_BlcokProc((unsigned)hInstance);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
HINSTANCE GetCurInstance(void)
{
	return (HINSTANCE)sys_GetCurInstance();
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
HINSTANCE GetWndInstance(HWND hWnd)
{
	return (HINSTANCE)sys_GetWndInstance((unsigned)hWnd);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
WNDPROC GetWndProc(HWND hWnd)
{
	return (WNDPROC)sys_GetWndProc(hWnd);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
unsigned long kmalloc(unsigned long size)
{
	unsigned long addr;
	LockProc(TRUE);
	addr=sys_kmalloc((unsigned)size);
	memset((void*)addr,0,size);               //<----------??关键??
	LockProc(FALSE);
	return addr;
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void kfree(unsigned long base,unsigned long size)
{
	LockProc(TRUE);
	sys_kfree((unsigned)base,(unsigned)size);
	LockProc(FALSE);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void GetPagesInfo(int* TotalPages,int* FreePages)
{

	sys_GetPageInfo((unsigned)TotalPages,(unsigned)FreePages);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void GetMemHoleInfo(unsigned long* HoleSize,unsigned long* HoleNum)
{
	sys_GetMemHoleInfo((unsigned)HoleSize,(unsigned)HoleNum);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void RefreshMsBuf(RECT aInvRect)
{
	sys_RefreshMsBuf((unsigned)&aInvRect);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
HWND RegisterWin(WINSTRUCT* pWin)
{
	return (HWND)sys_RegisterWin((unsigned)pWin);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
HDC  GetDC(HWND hWnd)
{
  return (HDC)sys_GetDC((unsigned)hWnd);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void GetWndRect(HWND hWnd,RECT* pRect)
{
	sys_GetWndRect((unsigned)hWnd,(unsigned)pRect);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
BOOL SetWndSize(HWND hWnd,int w,int h)
{
	return (BOOL)sys_SetWndSize((unsigned)hWnd,(unsigned)w,(unsigned)h);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
BOOL SetWndPos(HWND hWnd,int x,int y)
{
	POINT pt;
	pt.x=x;
	pt.y=y;
	return (BOOL)sys_SetWndPos((unsigned)hWnd,(unsigned)&pt);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
BOOL SendMessage(HWND hWnd,S_Mes* Mes)
{
	//HINSTANCE hInstance=GetWndInstance(hWnd);
	Mes->hInstance=GetCurInstance();                //获得当前的进程号
	sys_SendMessage((unsigned)hWnd,(unsigned)Mes);
	//if(hInstance!=Mes->hInstance)
	//BlockProc(Mes->hInstance);                      //要阻塞当前进程      
	return TRUE;
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
S_Queue* GetMsgQueue(HWND hWnd)
{
	return (S_Queue*)sys_GetMsgQueue((unsigned)hWnd);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
BOOL GetMessage(S_Mes* mes,HWND hWnd,unsigned int Param1,unsigned int Param2)
{
	S_Queue* MsgQueue=GetMsgQueue(hWnd);


	while(1)
	{
		if(!QueueEmpty(MsgQueue))
		 {		  
			  *mes=QueueGetMessage(MsgQueue);
				mes->hWnd=hWnd;
				return TRUE;
		 }
	}
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
int DispatchMessage(const S_Mes* mes)
{
	WNDPROC     WndProc;
	HINSTANCE   hInstance;
  int iRet;

	WndProc=GetWndProc(mes->hWnd);
  hInstance=GetWndInstance(mes->hWnd);


	iRet = (*WndProc)(mes->hWnd, mes->MessageType, mes->Param1, mes->Param2);

	//if(hInstance!=mes->hInstance)               //发送消息的不是本进程,则要唤醒发送消息进程
  //   WakeUpProc(mes->hInstance);

	return iRet;
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
FILE* OpenFile(char* filename)
{
	return (FILE*)sys_openfile((unsigned)filename);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
unsigned long  ReadFile(FILE* fp,void* buf,unsigned long size)
{
	LockProc(TRUE);
	return sys_readfile((unsigned)fp,(unsigned)buf,(unsigned)size);
	LockProc(FALSE);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void SetBelowClipRgn(HWND hWnd)
{
	sys_SetBelowClipRgn((unsigned)hWnd);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void SetAboveClipRgn(HWND hWnd)
{
	sys_SetAboveClipRgn((unsigned)hWnd);
}


//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void SetBelowInvalidRgn(HWND hWnd,RECT* pRect)
{
	sys_SetBelowInvalidRgn((unsigned)hWnd,(unsigned)pRect);
}

//----------------------------------------------------------------------------------------------////  ////----------------------------------------------------------------------------------------------
void TextOut(HDC hdc,unsigned short x,unsigned short y,char * str)
{
	 RECT eRect;
	 int i=0;
	 char *p=str;
	 hdc->brushColor=hdc->bkColor;
	 if(!hdc->bTextTransparent)
	 HdcFillRect(hdc,x,y,x+8*strlen(str),y+16);
	 while(*p!='\0')
	 {           
		HdcOutAsc(hdc,x+i,y,*p++);          
		i+=8;
	 }
	 eRect=SetRect(x,y,x+8*strlen(str),y+16);
   InvalidRectToVram(hdc,&eRect);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -