home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyOSQueues.p < prev    next >
Encoding:
Text File  |  1994-09-01  |  1.7 KB  |  74 lines  |  [TEXT/PJMM]

  1. unit MyOSQueues;
  2.  
  3. interface
  4.  
  5.     type
  6.         MyQElem = record
  7.                 qLink: QElemPtr;
  8.                 qType: integer;
  9.             end;
  10.         MyQElemPtr = ^MyQElem;
  11.  
  12.     procedure XEnqueue (qElement: QElemPtr; qHeader: QHdrPtr);
  13.     function XDequeue (qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  14.     procedure Enque (var queue: QHdr; pbp: univ MyQElemPtr; event: integer);
  15.     function Deque (var queue: QHdr; pbp: univ MyQElemPtr; var event: integer): boolean;
  16.     procedure AddEvent (var events: QHdr; pbp: univ MyQElemPtr; event: integer);
  17.     function GetEvent (var events: QHdr; var pbp: univ MyQElemPtr; var event: integer): boolean;
  18.  
  19. implementation
  20.  
  21.     uses
  22.         MyAssertions;
  23.  
  24. {$D-}
  25.     procedure XEnqueue (qElement: QElemPtr; qHeader: QHdrPtr);
  26.     begin
  27. {    Assert(qElement^.ioQElem.qLink = nil);}
  28.         Enqueue(qElement, qHeader);
  29.     end;
  30.  
  31.     function XDequeue (qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  32.         var
  33.             err: OSErr;
  34.     begin
  35.         err := Dequeue(qElement, qHeader);
  36.         if err = noErr then begin
  37.             qElement^.ioQElem.qLink := nil;
  38.         end;
  39.         XDequeue := err;
  40.     end;
  41.  
  42.     procedure Enque (var queue: QHdr; pbp: univ MyQElemPtr; event: integer);
  43.     begin
  44.         pbp^.qType := event;
  45.         XEnqueue(QElemPtr(pbp), @queue);
  46.     end;
  47.  
  48.     procedure AddEvent (var events: QHdr; pbp: univ MyQElemPtr; event: integer);
  49.     begin
  50.         pbp^.qType := event;
  51.         XEnqueue(QElemPtr(pbp), @events);
  52.     end;
  53.  
  54.     function Deque (var queue: QHdr; pbp: univ MyQElemPtr; var event: integer): boolean;
  55.         var
  56.             oe: OSErr;
  57.     begin
  58.         Deque := false;
  59.         if pbp <> nil then begin
  60.             oe := XDequeue(QElemPtr(pbp), @queue);
  61.             if oe = noErr then begin
  62.                 event := pbp^.qType;
  63.                 Deque := true;
  64.             end;
  65.         end;
  66.     end;
  67.  
  68.     function GetEvent (var events: QHdr; var pbp: univ MyQElemPtr; var event: integer): boolean;
  69.     begin
  70.         pbp := MyQElemPtr(events.qHead);
  71.         GetEvent := Deque(events, pbp, event);
  72.     end;
  73.  
  74. end.