source: buchla-68k/ram/setwq.c@ 7258c6a

Last change on this file since 7258c6a was 7258c6a, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Use standard integer types.

  • Property mode set to 100644
File size: 3.0 KB
RevLine 
[f40a309]1/*
2 ============================================================================
3 setwq.c -- word queue functions
4 Version 1 -- 1988-11-02 -- D.N. Lynx Crowe
5 ============================================================================
6*/
7
8#define WORDQHDR /* so wordq.h gets it right */
9
10#include "stddefs.h"
11#include "wordq.h"
12
13/*
14 ============================================================================
15 setwq(qp, qadr, qsiz, hi, lo) -- setup a word queue
16
17 Where:
18
19 struct wordq *qp queue structure pointer
20 unsigned short *qadr queue buffer pointer
21 unsigned short qsiz maximum length of queue
22 unsigned short hi high water mark count
23 unsigned short lo low water mark count
24
25 Return value:
26
27 unsigned short qsiz size of queue
28 ============================================================================
29*/
30
[7258c6a]31uint16_t setwq(struct wordq *qp, uint16_t *qadr, uint16_t qsiz, uint16_t hi, uint16_t lo)
[f40a309]32{
[7258c6a]33 if ((uint16_t *)0L EQ qadr)
[f40a309]34 qsiz = 0;
35
36 qp->qbuf = qadr;
37 qp->qsize = qsiz;
38 qp->qlen = 0;
39 qp->qin = 0;
40 qp->qout = 0;
41 qp->qhi = hi;
42 qp->qlo = lo;
43
44 return(qsiz);
45}
46
47/*
48
49*/
50
51/*
52 ============================================================================
53 putwq(qp, c) -- put a word in a word queue
54
55 Where:
56
57 qp queue structure pointer
58 c word to put in the queue
59
60 Return values:
61
62 -2 error, queue size was 0
63 -1 queue was full, word not added to queue
64 0 word added to queue
65 1 at high water mark, word added to queue
66 ============================================================================
67*/
[7258c6a]68
[f40a309]69int16_t putwq(struct wordq *qp, uint16_t c)
70{
71 if (0 NE qp->qsize) { /* verify queue is ok */
72
73 if (qp->qlen EQ qp->qsize) /* check queue length */
74 return(-1); /* -1 = full */
75
76 qp->qbuf[qp->qin++] = c; /* put word in queue */
77
78 if (qp->qin GE qp->qsize) /* update input index */
79 qp->qin = 0; /* wrap around */
80
81 if (++qp->qlen EQ qp->qhi) /* check length again */
82 return(1); /* 1 = at hi water */
83 else
84 return(0); /* 0 = OK */
85
86 } else {
87
88 return(-2); /* -2 = error */
89 }
90}
91
92/*
93
94*/
95
96/*
97 ============================================================================
98 getwq(qp, p) -- get a word from a word queue
99
100 Where:
101
102 qp queue structure pointer
103 p word pointer for returned word
104
105 Return values:
106
107 -2 error, queue size was 0
108 -1 queue was empty, no word returned
109 0 word returned
110 1 at low water, word returned
111 ============================================================================
[7258c6a]112*/
[f40a309]113
114int16_t getwq(struct wordq *qp, uint16_t *p)
115{
116 if (0 NE qp->qsize) { /* check queue is ok */
117
118 if (0 NE qp->qlen) { /* check queue length */
119
120 *p = qp->qbuf[qp->qout++]; /* get word from queue */
121
122 if (qp->qout GE qp->qsize) /* check out pointer */
123 qp->qout = 0; /* wrap around */
124
125 if (--qp->qlen EQ qp->qlo) /* check length again */
126 return(1); /* 1 = at low water */
127 else
128 return(0); /* 0 = OK */
129
130 } else {
131
132 return(-1); /* -1 = emtpy */
133 }
134
135 } else {
136
137 return(-2); /* -2 = error */
138 }
139}
Note: See TracBrowser for help on using the repository browser.