(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * CPROCESS.DEF - Modula-2 interface to CPROCESS.H * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) (*# project("#set tsc='on'") *) (*# call(o_a_size=>off, o_a_copy=>off, c_conv=>on, result_optional=>on) *) (*# module(implementation=>off, init_code=>off) *) (*# name(prefix=>c) *) DEFINITION MODULE cprocess; CONST P_WAIT = 0; P_NOWAIT = 1; P_OVERLAY = 2; TYPE VarProc = PROCEDURE(FarADDRESS); VAR _psp: CARDINAL; PROCEDURE abort; PROCEDURE atexit(func: PROC): INTEGER; PROCEDURE onexit(func: PROC): PROC; (*%T _mthread *) PROCEDURE _dosbeginthread(func: PROC; _stlen: CARDINAL; VAR _stck: CARDINAL): CARDINAL; PROCEDURE _dosendthread; PROCEDURE _beginthread(func: VarProc; stack: FarADDRESS; stack_size: CARDINAL; arg: FarADDRESS); PROCEDURE _endthread(); PROCEDURE _dosfreestack(_stck: CARDINAL); (*%E *) (*# save *) (*# call(c_conv=>on, var_arg=>on, reg_param=>()) *) PROCEDURE execl(_path, _arg0: ARRAY OF CHAR): INTEGER; PROCEDURE execle(_path, _arg0: ARRAY OF CHAR): INTEGER; PROCEDURE execlp(_path, _arg0: ARRAY OF CHAR): INTEGER; PROCEDURE execlpe(_path, _arg0: ARRAY OF CHAR): INTEGER; PROCEDURE execv(_path: ARRAY OF CHAR): INTEGER; PROCEDURE execve(_path: ARRAY OF CHAR): INTEGER; PROCEDURE execvp(_path: ARRAY OF CHAR): INTEGER; PROCEDURE execvpe(_path: ARRAY OF CHAR): INTEGER; (*# restore *) PROCEDURE exit(_status: CARDINAL); PROCEDURE _exit(_status: CARDINAL); PROCEDURE delay(_msecs: CARDINAL); (*%T _mthread *) PROCEDURE _getTID(): CARDINAL; (*%E *) (*# save *) (*# call(c_conv=>on, var_arg=>on, reg_param=>()) *) PROCEDURE spawnl(_mode: CARDINAL; _path,_arg0: ARRAY OF CHAR): INTEGER; PROCEDURE spawnle(_mode: CARDINAL; _path,_arg0: ARRAY OF CHAR): INTEGER; PROCEDURE spawnlp(_mode: CARDINAL; _path,_arg0: ARRAY OF CHAR): INTEGER; PROCEDURE spawnlpe(_mode: CARDINAL; _path,_arg0: ARRAY OF CHAR): INTEGER; PROCEDURE spawnv(_mode: CARDINAL; _path: ARRAY OF CHAR): INTEGER; PROCEDURE spawnve(_mode: CARDINAL; _path: ARRAY OF CHAR): INTEGER; PROCEDURE spawnvp(_mode: CARDINAL; _path: ARRAY OF CHAR): INTEGER; PROCEDURE spawnvpe(_mode: CARDINAL; _path: ARRAY OF CHAR): INTEGER; PROCEDURE system(_command: ARRAY OF CHAR): INTEGER; (*# restore *) (*%T _mthread *) CONST MAXTHREAD = 32; MaxProcess = 32; TYPE tm = RECORD tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday, tm_isdst: CARDINAL; END; thread = RECORD error: INTEGER; _asct_buf: ARRAY[0..27] OF CHAR; _tm_buf: tm; token: POINTER TO CHAR; END; PROCESS = ADDRESS; _TaskDescriptorPtr = POINTER TO _TaskDescriptor; _SigRec = RECORD count: INTEGER; waiting: _TaskDescriptorPtr; END; SIGNAL = POINTER TO _SigRec; _TaskDescriptor = RECORD next: _TaskDescriptorPtr; priority: CARDINAL; cor: PROCESS; due: CARDINAL; wsp: ADDRESS; wspsize: CARDINAL; nextdue: _TaskDescriptorPtr; END; Task = POINTER TO TaskDescriptor; PROCEDURE StartProcess(_entry:PROC;_N,_Pr: CARDINAL); (*# save *) (*# call(reg_saved=>(ds,di,si,st1,st2)) *) PROCEDURE StartScheduler; PROCEDURE StopScheduler; PROCEDURE StopProcess; PROCEDURE SEND(_s: SIGNAL); PROCEDURE WAIT(_s: SIGNAL); PROCEDURE Notify(_s: SIGNAL); PROCEDURE Awaited(_s: SIGNAL): INTEGER; PROCEDURE Init(VAR _s: SIGNAL); PROCEDURE Delay(_T: CARDINAL); (*# restore *) PROCEDURE Lock; PROCEDURE Unlock; (*%E *) END cprocess.