home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / e / Modules / AmigaLib2.lha / Src / AmigaLib / tasks.e < prev    next >
Encoding:
Text File  |  1997-02-12  |  1.1 KB  |  47 lines

  1. OPT MODULE
  2.  
  3. MODULE 'amigalib/lists',
  4.        'exec/memory',
  5.        'exec/nodes',
  6.        'exec/tasks'
  7.  
  8. OBJECT fakememlist
  9.   ln_succ:LONG
  10.   ln_pred:LONG
  11.   ln_type:CHAR
  12.   ln_pri:CHAR
  13.   ln_name:LONG
  14.   numentries:INT
  15.   tsk_reqs:LONG
  16.   tsk_length:LONG
  17.   stk_reqs:LONG
  18.   stk_length:LONG
  19. ENDOBJECT
  20.  
  21. EXPORT PROC createTask(name, pri, initPC, stackSize, data=NIL)
  22.   DEF ml:fakememlist, newTask=NIL:PTR TO tc
  23.   stackSize:=(stackSize+3) AND -4  -> Not(3) is -4 (honest!)
  24.   CopyMem([0, 0, 0, 0, 0, 2,
  25.            MEMF_PUBLIC OR MEMF_CLEAR, SIZEOF tc,
  26.            MEMF_CLEAR, stackSize]:fakememlist,
  27.           ml, SIZEOF fakememlist)
  28.   IF ml:=AllocEntry(ml)
  29.     newTask:=ml.tsk_reqs
  30.     newTask.splower:=ml.stk_reqs
  31.     newTask.spupper:=newTask.splower+stackSize
  32.     newTask.spreg:=newTask.spupper
  33.     newTask.userdata:=data
  34.     newTask.ln.type:=NT_TASK
  35.     newTask.ln.pri:=pri
  36.     newTask.ln.name:=name
  37.     newList(newTask.mementry)
  38.     AddHead(newTask.mementry, ml)
  39.     IF (AddTask(newTask, initPC, 0)=NIL) AND KickVersion(37)
  40.       FreeEntry(ml)
  41.       RETURN NIL
  42.     ENDIF
  43.   ENDIF
  44. ENDPROC newTask
  45.  
  46. EXPORT PROC deleteTask(tc) IS RemTask(tc)
  47.