home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / gnuforth / src / queues.v < prev    next >
Text File  |  1992-05-19  |  2KB  |  79 lines

  1. /*
  2.   C BASED FORTH-83 MULTI-TASKING KERNEL: DOUBLE LINKED LIST
  3.  
  4.   Copyright (C) 1990 by Mikael R.K. Patel
  5.  
  6.   Computer Aided Design Laboratory (CADLAB)
  7.   Department of Computer and Information Science
  8.   Linkoping University
  9.   S-581 83 LINKOPING
  10.   SWEDEN
  11.  
  12.   Email: mip@ida.liu.se
  13.  
  14.   Started on: 12 April 1990
  15.  
  16.   Last updated on: 26 June 1990
  17.  
  18.   Dependencies:
  19.     (cc) kernel.c, kernel.h
  20.  
  21.   Description:
  22.     Double linked list (queues) extension vocabulary for the tile
  23.     forth multi-tasking kernel.
  24.  
  25.   Copying:
  26.        This program is free software; you can redistribute it and/or modify
  27.        it under the terms of the GNU General Public License as published by
  28.        the Free Software Foundation; either version 1, or (at your option)
  29.        any later version.
  30.  
  31.        This program is distributed in the hope that it will be useful,
  32.        but WITHOUT ANY WARRANTY; without even the implied warranty of
  33.        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  34.        GNU General Public License for more details.
  35.  
  36.        You should have received a copy of the GNU General Public License
  37.        along with this program; see the file COPYING.  If not, write to
  38.        the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  39.  
  40. */
  41.  
  42. VOID doqemptyqueue()
  43. {
  44.     compare(== ((INT32) tos.QUEUE -> succ), INT32);
  45. }
  46.  
  47. NORMAL_CODE(qemptyqueue, forth, "?empty-queue", doqemptyqueue);
  48.  
  49. VOID doenqueue()
  50. {
  51.     register QUEUE t, q;
  52.  
  53.     q = spop(QUEUE);
  54.     t = spop(QUEUE);
  55.  
  56.     t -> pred = q -> pred;
  57.     t -> succ = q;
  58.  
  59.     q -> pred -> succ = t;
  60.     q -> pred = t;
  61. }
  62.  
  63. NORMAL_CODE(enqueue, qemptyqueue, "enqueue", doenqueue);
  64.  
  65. VOID dodequeue()
  66. {
  67.     register QUEUE t;
  68.  
  69.     t = spop(QUEUE);
  70.  
  71.     t -> succ -> pred = t -> pred;
  72.     t -> pred -> succ = t -> succ;
  73.  
  74.     t -> succ = t -> pred = t;
  75. }
  76.  
  77. NORMAL_CODE(dequeue, enqueue, "dequeue", dodequeue);
  78.  
  79.