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

📄 sysmsgs.c

📁 freedos32的源代码
💻 C
字号:
/* Message Queues for FD32: core functions * by Hanzac Chen and Luca Abeni *  * This is free software; see GPL.txt */#include <ll/i386/hw-data.h>#include <ll/i386/error.h>#include <ll/stdlib.h>#include <kmem.h>#include <logger.h>#include "msg.h"struct fd32_msgqueue {  struct fd32_msg *pool;  int head;  int tail;  int num;  int size;};struct fd32_msg{        DWORD type;        DWORD data;};struct fd32_msgqueue *fd32_msg_newqueue(int size){  struct fd32_msg *p;  struct fd32_msgqueue *q;  q = (struct fd32_msgqueue *)mem_get(sizeof(struct fd32_msgqueue));  if (q == NULL) {    return NULL;  }  p = (struct fd32_msg *)mem_get(size * sizeof(struct fd32_msg));  if (p == NULL) {    mem_free((DWORD)q, sizeof(struct fd32_msgqueue));        return NULL;  }  q->pool = p;  q->head = 0;  q->tail = 0;  q->num = 0;  q->size = size;  return q;}void fd32_msg_killqueue(struct fd32_msgqueue *q){  mem_free((DWORD)q->pool, q->size * sizeof(struct fd32_msg));  mem_free((DWORD)q, sizeof(struct fd32_msgqueue));}DWORD fd32_msg_enqueue(struct fd32_msgqueue *q, DWORD type, DWORD data){  if(type == MSG_NULL_TYPE) {    return -1;	/* FIXME: Better error code??? */  }    if(q->num == q->size) {    /* The queue is full */    return -1;	/* FIXME: Better error code??? */  }	  /* Enqueue now */  q->pool[q->tail].type = type;  q->pool[q->tail].data = data;  q->tail = (q->tail + 1) % q->size;	  q->num++;  fd32_log_printf("Enqueued Message %d: %lx: %lx\n", q->num, type, data);	  return 1;}/* On success return TRUE else return FALSE */DWORD fd32_msg_dequeue(struct fd32_msgqueue *q, DWORD *type, DWORD *data){  if((type == NULL) || (data == NULL)) {    return FALSE;  }    if(q->num == 0) {    /* The queue is empty */    return -1;	/* FIXME: Better error code??? */  }    /* Dequeue now */  *type = q->pool[q->head].type;  *data = q->pool[q->head].data;  q->head = (q->head + 1) % q->size;  q->num--;  return 1;}

⌨️ 快捷键说明

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