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

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

Point of no return.

  • Property mode set to 100644
File size: 3.0 KB
Line 
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
31unsigned short setwq(struct wordq *qp, unsigned short *qadr, unsigned short qsiz, unsigned short hi, unsigned short lo)
32{
33 if ((unsigned short *)0L EQ qadr)
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*/
68
69short putwq(struct wordq *qp, unsigned short 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 ============================================================================
112*/
113
114short getwq(struct wordq *qp, unsigned short *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.