📄 etker.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 + -