File: queue.c

package info (click to toggle)
joe 2.8-10
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 1,080 kB
  • ctags: 1,764
  • sloc: ansic: 18,800; asm: 224; makefile: 122; sh: 9
file content (57 lines) | stat: -rw-r--r-- 1,442 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* Doubly linked list primitives
   Copyright (C) 1992 Joseph H. Allen

This file is part of JOE (Joe's Own Editor)

JOE is free software; you can redistribute it and/or modify it under the 
terms of the GNU General Public License as published by the Free Software 
Foundation; either version 1, or (at your option) any later version.  

JOE is distributed in the hope that it will be useful, but WITHOUT ANY 
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
details.  

You should have received a copy of the GNU General Public License along with 
JOE; see the file COPYING.  If not, write to the Free Software Foundation, 
675 Mass Ave, Cambridge, MA 02139, USA.  */ 

#include "config.h"
#include "queue.h"

void *QUEUE;
void *ITEM;
void *LAST;

typedef struct stditem STDITEM;
struct stditem
 {
 LINK(STDITEM) link;
 };

void *alitem(freelist,itemsize)
STDITEM *freelist;
 {
 if(qempty(STDITEM,link,freelist))
  {
  STDITEM *i=(STDITEM *)malloc(itemsize*16);
  STDITEM *z=(STDITEM *)((char *)i+itemsize*16);
  while(i!=z)
   {
   enquef(STDITEM,link,freelist,i);
   i=(STDITEM *)((char *)i+itemsize);
   }
  }
 return (void *)deque(STDITEM,link,freelist->link.prev);
 }

void frchn(freelist,chn)
STDITEM *freelist, *chn;
 {
 STDITEM *i;
 if((i=chn->link.prev)!=chn)
  {
  deque(STDITEM,link,chn);
  splicef(STDITEM,link,freelist,i);
  }
 }