⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 etker.h

📁 its creates virtual multi tasking i DOS
💻 H
字号:
/*******************************************************
 *                                                     *
 *  Program : EasyTask            Language : C++       *
 *                                                     *
 *  Modified : 20 nov 2003                             *
 *                                                     *
 *  Copyright (c) 1988,2003, ORITECH    V 5.1          *
 *  All rights reserved.                               *
 *                                                     *
 *******************************************************
 *  You may not give away or cell or copy any part of  *
 *  the source code.                                   *
 *******************************************************
 *                                                     *
 *  ETKER.H       multitasking functions               *
 *                                                     *
 *******************************************************/


#if !defined(etker_h)   // Sentry, use file only if it's not already included.
#define etker_h 

#define registered_user_name "unregistered user"
#define registered_user_company "evaluation software"
#define registered_user_id  0000L

#ifdef _MSC_VER
  #define _MICROSOFTC
  #define _MSC
#endif

#ifdef __BORLANDC__
  #define _BORLANDC
#endif

#ifdef __WATCOMC__
  #define _WATCOMC
  #ifdef __FLAT__
    #define _FLAT
  #endif
  #if defined(__DOS__) && defined(__386__)
    #define _DPMI
    #define _DPMI32
    #define _W_DPMI32
  #endif
  #if defined(__DOS__) && !defined(__386__)   
    #define _DOS16
  #endif
  #if defined(__WINDOWS__) && !defined(__386__)
    #define _WIN
    #define _WINDOWS
    #define _WIN16
  #endif  
  #if defined(__WINDOWS_386__) && defined(__386__)
    #define _WIN
    #define _WINDOWS
    #define _WIN386
  #endif  
  #ifdef __NT__
    #define _NT
    #define _WIN
    #define _WINDOWS
    #define _WINNT
    #define _WIN32
    #define _W_WIN32
  #endif
#endif

#ifdef _MICROSOFTC
  #ifdef __FLAT__
    #define _FLAT
  #endif
  #if !defined(_WINDOWS) && defined(__386__)
    #define _DPMI
    #define _DPMI32
  #endif
  #if !defined(_WINDOWS) && !defined(__386__)   
    #define _DOS16  
  #endif
  #if defined(_WINDOWS) && !defined(__386__)  && !defined(WIN32)
    #define _WIN
    #define _WIN16
  #endif  
  #if defined(__NT__) || defined(WIN32)
    #define _NT
    #define _WIN
    #define _WINNT
    #define _FLAT
    #define __386__
    #define _386
    #define _M_WIN32
  #endif  
#endif

#ifdef _BORLANDC
  #ifdef __FLAT__
    #define _FLAT
  #endif
  #ifdef _Windows
    #define _WINDOWS
  #endif
  #if !defined(_WINDOWS) && defined(__386__)
    #define _DPMI
    #define _DPMI32
    #define _B_DPMI32
  #endif
  #ifdef __DPMI16__
    #define _DPMI
    #define _DPMI16
    #define _B_DPMI16
  #endif
  #ifdef __DPMI32__
    #define _DPMI
    #define _DPMI32
    #define _B_DPMI32
    #define __386__
    #define _FLAT
  #endif
  #if !defined(_WINDOWS) && !defined(__386__)
    #define _DOS16  
  #endif
  #if defined(_WINDOWS) && !defined(__386__)  && !defined(__WIN32__)
    #define _WIN
    #define _WIN16
  #endif
  #if defined(__NT__) || defined(__WIN32__)
    #define _NT
    #define _WIN
    #define _WINNT
    #ifndef _WIN32
      #define _WIN32
    #endif
    #define _FLAT
    #define __386__
    #define _386
    #define _B_WIN32
  #endif
#endif

#if defined(M_I86TM) || defined(M_I86SM) || defined(M_I86MM) || defined(__386__)
  #define _NEARDATA  
#endif
#if defined(M_I86CM) || defined(M_I86LM) || defined(M_I86HM)    
  #define _FARDATA
#endif
#if defined(M_I86TM) || defined(M_I86SM) || defined(M_I86CM) || defined(__386__)       
  #define _NEARCODE
#endif
#if defined(M_I86MM) || defined(M_I86LM) || defined(M_I86HM)    
  #define _FARCODE  
#endif 


#if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__) || defined(__386__)
  #define _NEARDATA  
#endif
#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
  #define _FARDATA  
#endif
#if defined(__TINY__) || defined(__SMALL__) || defined(__COMPACT__) || defined(__386__)
  #define _NEARCODE
#endif
#if defined(__MEDIUM__) || defined(__LARGE__) || defined(__HUGE__)
  #define _FARCODE  
#endif

#ifdef _WATCOMC
  #ifdef _DOS16
    #ifdef M_I86SM
      #pragma library (etask_ws);
    #endif
    #ifdef M_I86MM
      #pragma library (etask_wm);
    #endif
    #ifdef M_I86CM
      #pragma library (etask_wc);
    #endif
    #ifdef M_I86LM
      #pragma library (etask_wl);
    #endif
  #endif
  #ifdef _DPMI32
    #pragma library (etask_wp);
  #endif
  #ifdef _WIN16
    #pragma library (etask_ww);
  #endif
  #ifdef _WIN32
    #pragma library (etask_wn);
  #endif
  #ifdef _WIN386
    #pragma library (etask_we);
  #endif
#endif


#if defined ( __386__ )
  #define _NEARDATA  
  #define _NEARCODE
#endif

#ifdef _WATCOMC
  #define _wfar __far
#else
  #define _wfar 
#endif 

#ifdef __386__ 
  #define _FAR16
#else
  #define _FAR16 __far
#endif

// 

#ifdef _MICROSOFTC
  #define check_stack_off check_stack(off)    
  #define check_stack_on  check_stack()    
#endif

#ifdef _WATCOMC
  #define check_stack_off off (check_stack)     
  #define check_stack_on  on (check_stack)    
#endif                         
 
#ifdef _BORLANDC
  #define check_stack_off option -N-     
  #define check_stack_on  option -N+     
#endif

//

#ifndef HIBYTE
  #define HIBYTE(w)  ((unsigned char)(((unsigned short)(w) >> 8) & 0xFF))
  #define LOBYTE(w)  ((unsigned char)(w))

  typedef unsigned short WORD;
  typedef unsigned long DWORD;
    #ifdef STRICT
      typedef signed long LONG;
    #else
      #define LONG long
    #endif    
  #define MAKELONG(low, high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
#endif

#ifndef _WIN386
  typedef int BOOL;
#endif

  typedef unsigned char byte;
  typedef unsigned char Byte;
  
  typedef unsigned short word;
  typedef unsigned long dword;
  typedef unsigned int uint;
  typedef unsigned char uchar;

  #define FALSE 0
  #define False 0
  #define TRUE 1
  #define True 1
  #define pvoid void *
  #define pointer void *
  #define PVAR *
  #define VAR &
  #define var &
  #define Tstring char *


  #define and &&
  #define or ||
  #define andb &
  #define orb |
  #define not !

  void pokel(unsigned segment, unsigned offset, long value);
  long peekl(unsigned segment, unsigned offset);
  
  #define pokel(a,b,c)  (*((long __far *)MK_FP((a),(b))) = (long)(c))
  #define peekl(a,b)    (*((long __far *)MK_FP((a),(b))))
  
  typedef void TFunc();
  typedef TFunc *PFunc;
  typedef void TTaskFunc(pvoid,pvoid);
  typedef TTaskFunc *PTaskFunc;

  typedef void TIrqCallFunc(int nirq);
  typedef TIrqCallFunc *PIrqCallFunc;

  #if !defined(_WIN32) //or defined(_DPMI)
    #ifdef _BORLANDC
      #ifdef __cplusplus
        #define __CPPARGS ...
      #else
        #define __CPPARGS
      #endif
    #else
      #define __CPPARGS
    #endif
    typedef void __interrupt __far TInterruptFunc(__CPPARGS);
    typedef TInterruptFunc *PInterruptFunc;
  #endif


#define TSTATUS_FREE    0
#define TSTATUS_START   1
#define TStatus_Start   1
#define TSTATUS_KILL    2
#define TStatus_Kill    2
#define TSTATUS_PAUSE   3
#define TStatus_Pause   3
#define TSTATUS_WAITGET 6
#define TStatus_WaitGet 6
#define TSTATUS_DELAY   7
#define TStatus_Delay   7
#define TSTATUS_STOP    8
#define TStatus_Stop    8
#define TSTATUS_ONKILL  9
#define TStatus_OnKill  9
#define TSTATUS_KILLED  10
#define TStatus_Killed  10
#define TSTATUS_WAITKILLCHILD   11
#define TStatus_WaitKillChild   11  


#define MT_MASTER       0
#define MT_SISTER       1
#define MT_CHILD        2


typedef struct t_TMultiTask
{
  long ident;  // user variable 
  int status;
  int prio;
  int priocnt;
  dword delaycnt;
  dword delaystart;
  struct t_TMultiTask * *getptr;
  TTaskFunc *processptr;
  void *stack;
  uint lenstack;  // SP min 
  word stk_ss;
  uint stk_sp;
  uint stk_bp;
  uint stk_len;
  struct t_TMultiTask *predlink;
  struct t_TMultiTask *nextlink;
  void *taskparam;  
  uint taskparamlen;
  int modepause;  // type mode pause 
  TFunc *pauseproc;  // pause function pointer
  int ioerror;
  int doserr;
  dword delaytimer;
  dword endtimer;
  TTaskFunc *proctimer;
  TTaskFunc *killtsk;
  struct t_TMultiTask *removetask;
  struct t_TMultiTask *parenttask;
  struct t_TMultiTask *childtask;
  struct t_TMultiTask *predsister;
  struct t_TMultiTask *nextsister;
  word onkillflag;
  word inkillflag;
  pvoid taskself;
} TMultiTask;

typedef TMultiTask *PMultiTask;
typedef PMultiTask *HMultiTask;
                                

typedef struct t_TETResource
{
  PMultiTask task;
  struct t_TETResource *last;
  struct t_TETResource *link;
} TETResource;

typedef TETResource *PETResource;
                               
                               
typedef struct t_TETmem
{ 
  void *p; 
  uint size;
} TETmem;

typedef TETmem *PETmem;
                               
                               
typedef struct {
  pvoid *glo;
  word fnc;
  word lng;
  char *user_name;
  char *user_company;
  long user_id;
  PFunc memalloc;
  PFunc memrelease;
  PETmem memrec;
  word appds;
  int error; 
  BOOL stk_cpy;
} TParmInit;

typedef TParmInit *PParmInit;


extern HMultiTask parenttask;
extern HMultiTask currenttask;

#define ETKer_Init() ETKer_Init_user(registered_user_name,registered_user_company,registered_user_id)
void ETKer_Init_user(char *s_user_name, char *s_user_company, long user_id);
void ETKer_Close();
dword TickCount();
BOOL TaskExist(PMultiTask theTask);
BOOL KillTask(PMultiTask myTask);  
void KillAllTasks();
BOOL OnKillTask(PMultiTask myTask, TTaskFunc *myProc);
BOOL StopTask(PMultiTask myTask);
BOOL StartTask(PMultiTask myTask);
BOOL GoNextTask(PMultiTask myTask);
PMultiTask NewTask(PTaskFunc myProc, uint alenstack, int priority, int level,
                   pvoid parms, uint parms_size, pvoid self);
void SetPauseMode(PFunc pauseProc, int mode);
void NPause();
void Pause();
void TaskDelay(dword mydelay);
uint TaskQuantity();
void WaitNoTask();
void TaskTimerOn(dword mydelay, TTaskFunc *myProc); 
void TaskTimerOff(); 
void TaskTimerReset(); 
void LockTask();
void UnlockTask();
void InitResource(TETResource VAR rsrc);
void GetResource(TETResource VAR rsrc);
void ReleaseResource(TETResource VAR rsrc);
HMultiTask GetMParentTask();
HMultiTask GetMCurrentTask();
BOOL WaitKilledTask(PMultiTask task, dword maxdelay);     
BOOL GetEasytaskDemo(); // *** return True if Eval software ***

#if !defined(_WIN32) // *** not irq ***
  void ClearIrq(int nirq);
  void WaitIrq(int nirq);
  void KillWaitIrq(int nirq);
  void KillAllWaitIrq();
  void OnIrq(int nirq, PIrqCallFunc myProc, BOOL immed);
  BOOL SetHardTimer(word microsec, PFunc proc);
#endif     


/*------- Wait-VAR-PORT ---------*/
void waitporteq(int myport, short value);
void waitportneq(int myport, short value);
void waitportweq(int myport, word value);
void waitportwneq(int myport, word value);
void waitportbiteq(int myport, short bit, BOOL value);
void waitportwbiteq(int myport, short bit, BOOL value);
void waitflag(BOOL *myflag);
void waitnoflag(BOOL *myflag);
void waitbyteeq(byte *myvar, short value);
void waitbyteneq(byte *myvar, short value);
void waitintegereq(short *myvar, short value);
void waitintegerneq(short *myvar, short value);
void waitwordeq(word *myvar, word value);
void waitwordneq(word *myvar, word value);
void waitlonginteq(long *myvar, long value);
void waitlongintneq(long *myvar, long value);
/*------- end of Wait-VAR-PORT ---------*/



//================== redefine ======================

#define pfunc PFunc

#define tmultitask TMultiTask
#define pmultitask PMultiTask
#define hmultitask HMultiTask

#define tetresource TETResource
#define petresource PETResource

#define tickcount TickCount
#define etker_init ETKer_Init 
#define etker_close ETKer_Close 
#define initvarloc InitVarloc
#define newtask NewTask
#define killtask KillTask
#define killalltasks KillAllTasks
#define onkilltask OnKillTask
#define stoptask StopTask
#define starttask StartTask
#define gonexttask GoNextTask
#define setpausemode SetPauseMode
#define pause Pause
#define npause NPause
#define taskdelay TaskDelay
#define taskquantity TaskQuantity
#define waitnotask WaitNoTask
#define tasktimeron TaskTimerOn
#define tasktimerono TaskTimerOno
#define tasktimeroff TaskTimerOff
#define tasktimerreset TaskTimerReset

#define waitirq WaitIrq
#define killwaitirq KillWaitIrq
#define killallwaitirq KillAllWaitIrq
#define locktask LockTask
#define unlocktask UnlockTask
#define onirq OnIrq
#define clearirq ClearIrq
#define initresource InitResource
#define getresource GetResource
#define releaseresource ReleaseResource
#define getmparenttask GetMParentTask
#define getmcurrenttask GetMCurrentTask
#define mtmaxavail MTMaxAvail
#define mtmemavail MTMemAvail
#define mtmalloc MTMalloc
#define mtfree MTFree
#define waitkilledtask WaitKilledTask
#define sethardtimer SetHardTimer    
#define geteasytaskdemo GetEasytaskDemo

// waiting VAR-PORT examples //

#define WaitPortEq waitporteq
#define WaitPortNEq waitportneq
#define WaitPortWEq waitportweq
#define WaitPortWNEq waitportwneq
#define WaitPortBitEq waitportbiteq
#define WaitPortWBitEq waitportwbiteq
#define WaitFlag waitflag
#define WaitNoFlag waitnoflag
#define WaitByteEq waitbyteeq
#define WaitByteNEq waitbyteneq
#define WaitIntegerEq waitintegereq
#define WaitIntegerNEq waitintegerneq
#define WaitWordEq waitwordeq
#define WaitWordNEq waitwordneq
#define WaitLongintEq waitlonginteq
#define WaitLongintNEq waitlongintneq

#endif   // etker_h sentry.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -