home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CTASK22.ZIP / TSKTICK.C < prev    next >
C/C++ Source or Header  |  1990-10-12  |  2KB  |  122 lines

  1. /*
  2.    --- Version 2.2 90-10-12 10:34 ---
  3.  
  4.    TSKTICK.C - CTask - Ticker routines.
  5.  
  6.    CTask - a Multitasking Kernel for C
  7.  
  8.    Public Domain Software written by
  9.       Thomas Wagner
  10.       Ferrari electronic Gmbh
  11.       Beusselstrasse 27
  12.       D-1000 Berlin 21
  13.       Germany
  14.  
  15.    No rights reserved.
  16.  
  17.    This file is new with 2.1. The ticker related functions were moved
  18.    from tsktimer to this module.
  19.  
  20.    Timer logic has been significantly changed in version 2.0.
  21. */
  22.  
  23. #include "tsk.h"
  24. #include "tsklocal.h"
  25.  
  26. /*
  27.    create_ticker
  28.       link element into ticker chain.
  29. */
  30.  
  31. tick_ptr Globalfunc create_ticker (tick_ptr elem, dword val)
  32. {
  33.    CRITICAL;
  34.  
  35. #if (TSK_DYNAMIC)
  36.    if (elem == LNULL)
  37.       {
  38.       if ((elem = tsk_palloc (sizeof (ticker))) == LNULL)
  39.          return LNULL;
  40.       elem->flags = F_TEMP;
  41.       }
  42.    else
  43.       elem->flags = 0;
  44. #else
  45.    if (elem == LNULL)
  46.       return LNULL;
  47. #endif
  48.  
  49.    elem->ticks = val;
  50.    C_ENTER;
  51.    elem->next = GLOBDATA ticker_chain;
  52.    GLOBDATA ticker_chain = elem;
  53.    tsk_putqueue (&GLOBDATA current_task->group->ticker_list, (queptr)&elem->chain);
  54.    C_LEAVE;
  55.  
  56.    return elem;
  57. }
  58.  
  59.  
  60. /*
  61.    delete_ticker
  62.       unlink element from ticker chain.
  63. */
  64.  
  65. void Globalfunc delete_ticker (tick_ptr elem)
  66. {
  67.    tick_ptr curr;
  68.    CRITICAL;
  69.  
  70.    curr = (tick_ptr)&GLOBDATA ticker_chain;
  71.  
  72.    C_ENTER;
  73.    while (curr->next != LNULL && curr->next != elem)
  74.       curr = curr->next;
  75.  
  76.    curr->next = elem->next;
  77. #if (GROUPS)
  78.    tsk_dequeue ((queptr)&elem->chain);
  79. #endif
  80.    C_LEAVE;
  81. #if (TSK_DYNAMIC)
  82.    if (elem->flags & F_TEMP)
  83.       tsk_pfree (elem);
  84. #endif
  85. }
  86.  
  87. /*
  88.    set_ticker
  89.       set new ticker value.
  90. */
  91.  
  92. void Globalfunc set_ticker (tick_ptr elem, dword val)
  93. {
  94.    CRITICAL;
  95.  
  96.    C_ENTER;
  97.    elem->ticks = val;
  98.    C_LEAVE;
  99. }
  100.  
  101.  
  102. /*
  103.    get_ticker
  104.       get current ticker value.
  105. */
  106.  
  107. dword Globalfunc get_ticker (tick_ptr elem)
  108. {
  109.    dword tck;
  110.    CRITICAL;
  111.  
  112.    C_ENTER;
  113.    tck = elem->ticks;
  114.    C_LEAVE;
  115.    return tck;
  116. }
  117.  
  118.  
  119.  
  120.  
  121.  
  122.