DataMuseum.dk

Presents historical artifacts from the history of:

DANOSI

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DANOSI

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e1de16cd1⟧ TextFile

    Length: 21294 (0x532e)
    Types: TextFile
    Names: »RTPSTD86.SRC«

Derivation

└─⟦289818552⟧ Bits:30010516 DVBS1.SW2114.src.2.7-3 SW2114 3/4 Real Time Pascal 2.7
    └─⟦this⟧ »RTPSTD\RTPSTD86.SRC« 
└─⟦783187a02⟧ Bits:30010525 DVBS1.SW2114.src.2.6-3 RTP compiler source SW2104+SW2114 Disk#3 30/1-92 HHA
    └─⟦this⟧ »RTPSTD\RTPSTD86.SRC« 
└─⟦ca921ce75⟧ Bits:30010528 DVBS1.SW2114.src.2.6-6 RTP Compiler Source SW2104+SW2114 Disk 3 92.02.03 HEJ HHA
    └─⟦this⟧ »RTPSTD\RTPSTD86.SRC« 
└─⟦d5707feda⟧ Bits:30010512 DVBS1.SW2114.src.2.14-3 SW2114 REAL #3/4 TIME PASCAL SOURCE REL 2.14 92.09.01
    └─⟦this⟧ »RTPSTD\RTPSTD86.SRC« 

TextFile

$listoff\r
stdenv;     (* standard environment       TOG 870927 *)\r
\r
(***** PREDEFINED CONSTANTS *****)\r
CONST\r
maxint = 32767;\r
minint = -32768;\r
\r
\r
(***** PREDEFINED TYPES *****)\r
TYPE\r
\r
bit = 0..1;\r
\r
byte = 0..255;\r
\r
conn_service = (cs_normal, cs_high);\r
\r
const create_ok=0;\r
--    no_memory=1;\r
      create_no_memory=1;\r
      \r
type create_result = create_ok .. create_no_memory;\r
\r
const\r
minpriority = 254;\r
stdpriority = 200;\r
maxpriority = 129;\r
\r
type\r
prio_type=maxpriority..minpriority;\r
\r
event_type = (not_event, message_event, answer_event,\r
              process_removed, port_closed, disconnected,\r
              letter_sent, letter_arrived,\r
              local_connect, remote_connect,\r
              reset_indication, reset_completion,\r
              credit, data_sent, data_arrived, data_overrun,\r
              dummy_letter, dummy_lcnct, dummy_rcnct,\r
              dummy_rindic, dummy_rcmpl, dummy_credit,\r
              dummy_sent, dummy_arrived);\r
\r
const link_ok=0;\r
      file_not_found=1;\r
      file_not_object=2;\r
      no_mem=3;\r
      missing_subprogram=4;\r
      link_already_linked=5;\r
      link_not_found=6;\r
              \r
--    already_linked=5;\r
--    external_not_found=6;\r
      \r
type link_result=link_ok..link_not_found;\r
\r
const unlink_ok=0;\r
      unlink_no_program_linked=1;\r
      unlink_program_busy=2;\r
--    no_program_linked=1;\r
--    existing_incarnations=2;\r
      \r
type unlink_result = unlink_ok .. unlink_program_busy;\r
\r
const mem_private = 0;\r
      mem_dualport = 1;\r
      mem_bord = 2;\r
\r
type mem_type = MEM_PRIVATE .. MEM_BORD;\r
\r
reason_type = (reason_ok, reason_name, reason_resource,\r
               reason_closed, reason_network);\r
\r
scope_type = (anonymous, local, regional, global);\r
\r
string(length: byte) = ARRAY(1..length) OF CHAR;\r
\r
alfa = string(12);\r
\r
activation = (a_mailbox, a_delay);\r
\r
control_type = packed record \r
                 rcv_all,\r
                 get_credit: boolean;\r
               end;\r
               \r
(* shielded type declarations *)\r
(******************************)\r
\r
mailbox_ = record\r
  mbx:          INTEGER;\r
  s:            INTEGER;\r
  next:         ^integer; --^mailbox_\r
end;\r
\r
pool_ = record\r
  mbx:          INTEGER;\r
  s:            INTEGER;\r
  size:         INTEGER;\r
  mem:          BYTE;\r
  bufs:         INTEGER;\r
  next:         ^integer; --^pool_\r
end;\r
\r
process_ = record\r
  proc:         INTEGER;\r
  next:         ^integer; --^process_\r
end;\r
\r
reference_ = record\r
  topbuf:       INTEGER;\r
  locked:       INTEGER;\r
  next:         ^integer; --^reference_\r
end;\r
\r
chain_ = record\r
  curbuf:       INTEGER;\r
  locked:       INTEGER;\r
  start:        INTEGER;\r
  length:       INTEGER;\r
  next:         ^integer; --^chain_\r
end;\r
\r
port_ = record\r
  prt:          INTEGER;\r
  state:        BYTE;\r
  next:         ^integer; --^port_\r
end;\r
\r
program_descriptor= record\r
  state:        BYTE;\r
  paramdesc:    ^integer;\r
  poolparam:    BYTE;\r
  LBDR:         ^integer; --^extenal_lbdr\r
  prgname:      array(1..13) of char;\r
  count:        INTEGER;\r
  paramptr:     ^integer;\r
  noparams:     BYTE;\r
  next:         ^integer; --program_descriptor\r
end;\r
\r
\r
(*****  PREDEFINED ROUTINES  *****)\r
(*********************************)\r
\r
code\r
$ save nolist\r
$ include(pi3.dcl)\r
$ restore\r
\r
%set(xvarno,0)\r
\r
%*define(beginopen(rtn))(\r
rtne%rtn DW size%rtn\r
x%eval(%xvarno) DW y%eval(%xvarno)\r
)\r
\r
%*define(endopen(rtn))(\r
size%rtn EQU $-rtne%rtn\r
y%eval(%xvarno) EQU $-x%eval(%xvarno)-2\r
%set(xvarno,%xvarno+1)\r
)\r
\r
%*define(extcall(routine))(\r
y%eval(%xvarno) EQU $-x%eval(%xvarno)-2\r
       DB 1                 ; external call\r
       DW %routine\r
%set(xvarno,%xvarno+1)\r
x%eval(%xvarno) DW y%eval(%xvarno)\r
)\r
\r
F_RANGE              EQU 52\r
\r
routine_fault        EQU 1\r
routine_resume       EQU 2\r
routine_allocpool    EQU 3\r
\r
CodeMacro PUSH src:Db(-128,127)\r
DB 6AH\r
DB src\r
endM\r
\r
\r
%*define(fault(fcode))(\r
	PUSH %fcode\r
        %extcall(routine_fault)          \r
)\r
\r
%*define(get_buf_seg) local nonfault\r
        (POP    SI                          ;ES:SI:=ptr_reference\r
        POP     ES\r
        CMP     ES:[SI].LOCKED,0;\r
        JGE     %NONFAULT\r
         %fault(F_NIL)\r
;        MOV     AL,F_NIL                    ;reference=NIL\r
;        INT     31\r
%NONFAULT:\r
        MOV     ES,ES:[SI].TOPBUF           ;ES:=buffer-frame)\r
end;\r
\r
function abs(n: integer): 0..maxint;\r
begin 1\r
        POP     AX        ;AX:=abs(topword)\r
        CMP     AX,0\r
        JGE     ABS_EXIT\r
        NEG     AX\r
        INTO\r
ABS_EXIT:\r
END;\r
\r
procedure alloc = getbuf( var r: reference; var p: pool; var ra: mailbox);\r
external;\r
\r
function allocdelay = getbufdelay(var r: reference; var p:pool; var ra: mailbox; \r
                                  ms: 0..maxint): activation;\r
external;\r
\r
function allocmempool = allocpool(var p: pool; no_of_bufs, bufsize: 0..maxint;\r
mem: mem_type): 0..maxint;\r
EXTERNAL;\r
\r
function allocpool(var p: pool; no_of_bufs, bufsize: 0..maxint): 0..maxint;\r
begin 1\r
	XOR	AX,AX\r
	PUSH	AX\r
	%extcall(routine_allocpool)\r
end;\r
\r
procedure break(VAR proc: process; fault: integer);\r
EXTERNAL;\r
\r
function bufcount(var r: reference): 0..maxint;\r
begin 0\r
        %GET_BUF_SEG\r
        MOV     AX,ES:BUFCOUNT\r
END;\r
\r
function bufsize(var r: rtype    ): 0..maxint;\r
begin 0\r
        %GET_BUF_SEG\r
        MOV     AX,ES:DATASIZE\r
END;\r
\r
function bytecount(var r: rtype   ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES: bytecount\r
end;\r
\r
procedure chaindequeue(var ref: reference; var ch: chain);\r
external;\r
\r
procedure chaindown(var ch: chain);\r
external;\r
\r
procedure chainenqueue(var ref: reference; var ch: chain);\r
external;\r
\r
function chainlength(var ch: chain): 0..maxint;\r
begin 0\r
        POP SI\r
        POP ES\r
        MOV AX,ES:[SI].c_length\r
end;\r
\r
procedure chainreset(var ch: chain);\r
external;\r
\r
procedure chainstart(var ch: chain);\r
external;\r
\r
procedure chainup(var ch: chain);\r
external;\r
\r
function ord(v: btype): integer;\r
begin 0\r
        POP     AX\r
        XOR     AH,AH\r
END;\r
\r
function chr(v: byte): char;    and\r
function ord(v: wtype): integer; \r
begin 0\r
        POP     AX\r
END;\r
\r
function create(inspect incname: string; var prog: program_descriptor;\r
     var pr: process; size: 0..maxint; prio: prio_type): create_result;\r
external;\r
\r
function creditcount(var r: reference): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AL,ES:creditcount\r
end;\r
\r
procedure dec(var v: byte);\r
begin 0\r
        POP SI\r
        POP ES\r
        DEC ES:BYTE ptr[SI]\r
end;\r
\r
procedure dec(var v: integer);\r
begin 0\r
        POP SI\r
        POP ES\r
        DEC ES:WORD ptr[SI]\r
end;\r
\r
procedure delay(ms: 0..maxint);\r
external;\r
\r
function eventkind(var r: rtype): event_type;\r
begin 0\r
        %get_buf_seg\r
        MOV AL,ES: eventkind\r
end;\r
\r
procedure exception = fault(c: integer);\r
external;\r
\r
function hometest(var r: rtype; var p: pool): boolean;\r
begin 0\r
        POP BX                   ; BX:=pool.offset   \r
        POP AX                   ; AX:=pool.segment   \r
        %get_buf_seg             ; ES:=buffer frame\r
        CMP BX,ES:WORD PTR home  ; ZF:=(home.offs=pool.offs)\r
        JNE hometest_1           ; if ZF then\r
        SUB AX,ES:WORD PTR home+2;   ZF:=(home.base=pool.base)\r
        JE  hometest_2           ; if ZF then AL:=FF else AL:=0\r
hometest_1:\r
        MOV AL,0FFH\r
hometest_2:\r
        INC AL\r
end;\r
\r
procedure inc(var v:byte);\r
begin 0\r
        POP SI\r
        POP ES\r
        INC ES:BYTE PTR[SI]\r
end;\r
\r
procedure inc(var v:integer);\r
begin 0\r
        POP SI\r
        POP ES\r
        INC ES:WORD PTR[SI]\r
end;\r
\r
function index(var r:reference): byte;\r
begin 0\r
        %get_buf_seg\r
        MOV AL,ES:index\r
end;\r
\r
function link(inspect incname: string;var prog: program_descriptor): \r
              link_result;\r
external;\r
 \r
function locked(var m:mailbox): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP AX,ES:[SI].s\r
        JLE loced_1\r
        INC AX\r
loced_1:\r
end;\r
\r
procedure new(var p: ptype); external;\r
\r
function nil(var p:ptype  ): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP ES:WORD PTR [SI]+2,0\r
        JNE nil_1\r
        INC AX\r
nil_1:\r
end;\r
\r
function nil(var p:reference): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP ES:WORD PTR [SI]+2,0FFFFH\r
        JNE nil_2\r
        INC AX\r
nil_2:\r
end;\r
\r
function nil(var p:process): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP AX,ES:WORD PTR [SI]\r
        JNE nil_3\r
        INC AL\r
nil_3:\r
end;\r
\r
function offset(var r:rtype    ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES:dataoffset\r
end;\r
\r
function open(var m:mailbox): boolean; and\r
function openpool(var p: pool): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP AX,ES:[SI].s\r
        JGE open_1\r
        INC AX\r
open_1:\r
end;\r
\r
(* ord see chr *)\r
\r
function passive(var m:mailbox): boolean;\r
begin 0\r
        POP SI\r
        POP ES\r
        SUB AX,AX\r
        CMP AX,ES:[SI].s\r
        JNE passive_1\r
        INC AX\r
passive_1:\r
end;\r
\r
procedure pop(var b,s: reference);\r
external;\r
\r
function pred(v: btype): btype;\r
begin 0\r
        POP BX\r
        POP AX\r
        CMP AL,BL\r
        JNE  pred_1\r
        %fault(F_RANGE)\r
pred_1:\r
        DEC AL\r
end;\r
\r
function pred(v: wtype): wtype;\r
begin 0\r
        POP BX\r
        POP AX\r
        CMP AX,BX\r
        JNE  pred_2\r
        %fault(F_RANGE)\r
pred_2:\r
        DEC AX\r
end;\r
\r
procedure push(var b,s: reference);\r
external;\r
\r
function reason(var r:reference): reason_type;\r
begin 0\r
        %get_buf_seg\r
        MOV AL,ES:reason\r
end;\r
\r
procedure release = putbuf(var r: reference);\r
external;\r
\r
function releasepool(var p:pool; bufs: 1..maxint): 0..maxint;\r
external;\r
\r
procedure remove(var pr: process);\r
external;\r
\r
procedure resetevent(var r: rtype);\r
begin 0\r
        %get_buf_seg\r
        MOV ES:eventkind,not_event\r
end;\r
\r
procedure resume(var pr: process);\r
external;\r
\r
procedure return(var r:reference);\r
external;\r
\r
procedure setbytecount(var r: rtype    ; v: 0..maxint);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        MOV ES:bytecount,BX\r
end;\r
\r
procedure setoffset(var r: rtype    ; v: 0..maxint);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        cmp BX,ES:datasize\r
        jle setoff_1\r
        %fault(F_RANGE)\r
;       int 29      \r
setoff_1:\r
        MOV ES:dataoffset,BX\r
end;\r
\r
procedure settop(var r: rtype    ; v: 0..maxint);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        cmp BX,ES:datasize\r
        jle settop_1\r
	%fault(F_RANGE)\r
;       int 29      \r
settop_1:\r
        MOV ES:top,BX\r
end;\r
\r
procedure setu1(var r: rtype    ; v: byte);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        MOV ES:u1,BL\r
end;\r
\r
procedure setu2(var r: rtype    ; v: byte);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        MOV ES:u2,BL\r
end;\r
\r
procedure setu3(var r: rtype    ; v: byte);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        MOV ES:u3,BL\r
end;\r
\r
procedure setu4(var r: rtype    ; v: byte);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        MOV ES:u4,BL\r
end;\r
\r
procedure signal(var r: reference; var m:mailbox);\r
external;\r
\r
function stackdepth(var r:reference  ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES:depth\r
end;\r
\r
procedure start(var pr: process; prio: prio_type);\r
begin 0\r
        pop     ax\r
        cli \r
        test    DS: byte ptr own.p_state, 1\r
        JNZ     start_1\r
        mov     DS: byte ptr own.priority, al\r
start_1:\r
        sti\r
        %extcall(routine_resume)\r
end;\r
\r
procedure stop(var p: process);\r
external;\r
\r
function succ(v:btype): btype;\r
begin 0\r
        POP     BX\r
        POP     AX\r
        CMP     AL,BL\r
        JNE     SUCC_1\r
        %fault(F_RANGE)\r
succ_1:\r
        INC     AL\r
end;\r
\r
function succ(v:wtype): wtype;\r
begin 0\r
        POP     BX\r
        POP     AX\r
        CMP     AX,BX\r
        JNE     SUCC_2\r
        %fault(F_RANGE)\r
succ_2:\r
        INC     AX\r
end;\r
\r
procedure tofrom(var toref: reference; toindex: integer;\r
                 var fromref: reference; fromindex: integer;\r
                 bytes: integer );\r
EXTERNAL;\r
\r
function top(var r:rtype    ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV     AX,ES:top\r
end;\r
\r
procedure trace(f: integer);\r
external;\r
\r
procedure stacktrace = dtrace(f: integer);\r
external;\r
\r
function unlink(var prog: program_descriptor): unlink_result; external;\r
\r
function u1(var r:rtype    ): byte;\r
begin 0\r
        %get_buf_seg\r
        MOV     AL,ES:u1\r
end;\r
\r
function u2(var r:rtype    ): byte;\r
begin 0\r
        %get_buf_seg\r
        MOV     AL,ES:u2\r
end;\r
\r
function u3(var r:rtype    ): byte;\r
begin 0\r
        %get_buf_seg\r
        MOV     AL,ES:u3\r
end;\r
\r
function u4(var r:rtype    ): byte;\r
begin 0\r
        %get_buf_seg\r
        MOV     AL,ES:u4\r
end;\r
\r
procedure wait( var r: reference; var m: mailbox);\r
external;\r
\r
function waitdelay(var r: reference; var m: mailbox;\r
                   ms: 0..maxint): activation;\r
external;\r
\r
procedure closeport(var p: port);\r
external;\r
\r
procedure connect(var p:port; index:1..maxint; var compl, disc: reference;\r
                  inspect remote_name:string; service: conn_service);\r
external;\r
\r
procedure disconnect(var p:port; index:1..maxint);\r
external;\r
\r
procedure getconnection(var p:port; index:1..maxint; var compl, disc:reference);\r
external;\r
\r
procedure getcredit(var p:port; index:1..maxint; var credbuf: reference);\r
external;\r
\r
procedure getreset(var p:port; index:1..maxint; var indic: reference);\r
external;\r
\r
function maxconnections:0..maxint;\r
external;\r
\r
procedure openport(var p:port; var closebuf: reference;\r
                   inspect name:string; scope: scope_type;\r
                   no_of_cons: byte; cntrl: control_type);\r
external;\r
\r
procedure receive(var p:port; index:1..maxint; var databuf: reference);\r
external;\r
\r
procedure receiveall(var p:port; var databuf: reference);\r
external;\r
\r
procedure reset(var p:port; index:1..maxint; var compl: reference);\r
external;\r
\r
procedure send(var p:port; index:1..maxint; var databuf: reference);\r
external;\r
\r
(* general implementation dependent standard routines and types *)\r
\r
type\r
coded_date=RECORD\r
             year_after_1900: 0..127;\r
             month: 0..12;\r
             day: 0..31;\r
           END;\r
           \r
coded_time=RECORD\r
             ? : 0..31;\r
             hour: 0..23;\r
             minute: 0..59;\r
           END;\r
           \r
coded_secs=RECORD\r
             sec: 0..59;\r
             msec: 0..999;\r
           END;\r
\r
coded_inc= RECORD\r
             days: 0..31;\r
             hours: 0..23;\r
             mins: 0..59;\r
             secs: 0..59;\r
             msecs: 0..999;\r
           END;\r
\r
delaytype= PACKED RECORD\r
             prev_date: coded_date;\r
             prev_time: coded_time;\r
             prev_secs: coded_secs;\r
             inc : coded_inc;\r
           END;\r
\r
clocktype= PACKED RECORD\r
             date: coded_date;\r
             time: coded_time;\r
             secs: coded_secs;\r
           END;\r
\r
tversion= RECORD\r
            release, subrelease: byte;\r
          END;\r
\r
tmoduleversion= RECORD\r
                  moduledate: coded_date;\r
                  moduletime: coded_time;\r
                  moduleversion: tversion;\r
                  compilationdate: coded_date;\r
                  compilationtime: coded_time;\r
                END;\r
\r
function clock_difference( var t1, t2: clocktype ): coded_inc;\r
external;\r
\r
function clock_increment( var t: clocktype; var inc: coded_inc ): clocktype;\r
external;\r
\r
function clock_less_than( var t1, t2: clocktype ): boolean;\r
external;\r
\r
FUNCTION deletemailbox(INSPECT mbx_name: string): integer;\r
EXTERNAL;\r
\r
FUNCTION getclock: clocktype;\r
EXTERNAL;\r
\r
FUNCTION namemailbox(VAR m: mailbox; INSPECT mbx_name: string): integer;\r
EXTERNAL;\r
\r
FUNCTION ownname = own_name(VAR name:string): byte;\r
EXTERNAL;\r
\r
FUNCTION ownprogramname(VAR name:string): byte;\r
EXTERNAL;\r
\r
PROCEDURE ownversion(VAR myversion: tmoduleversion);\r
EXTERNAL;\r
\r
FUNCTION searchmailbox(INSPECT mbx_name: string): ^mailbox;\r
EXTERNAL;\r
\r
PROCEDURE sendtimer(VAR ref: reference );\r
EXTERNAL;\r
\r
PROCEDURE setownname(INSPECT name: string );\r
EXTERNAL;\r
\r
function swap(n: integer): integer;\r
begin 1\r
        POP     AX\r
        XCHG    AL,AH\r
END;\r
\r
(* implementation dependent open routines *)\r
\r
procedure breakpoint;\r
begin 4\r
        INT 3\r
end;\r
\r
function data_segment(var r:rtype    ): integer;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES:datapart\r
end;\r
\r
procedure disable;\r
begin 0\r
        CLI\r
end;\r
\r
procedure enable;\r
begin 0\r
        STI\r
end;\r
\r
function equalhome(var a: rtype    ; var b: rtype    ): boolean;\r
begin 0\r
        %GET_BUF_SEG\r
        MOV     AX,ES: WORD PTR HOME\r
        MOV     BX,ES: WORD PTR HOME+2\r
        %GET_BUF_SEG\r
        SUB     AX,ES: WORD PTR HOME\r
        JNE     EQUALHOME_1\r
        SUB     BX,ES: WORD PTR HOME+2\r
        JE      EQUALHOME_2\r
EQUALHOME_1:\r
        MOV     AL,0FFH\r
EQUALHOME_2:\r
        INC     AL\r
END;\r
\r
function first(var r:rtype    ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES:dataoffset\r
end;\r
\r
function homeless(var r: rtype    ): boolean; external;\r
\r
function input_byte(ioport: integer): byte;\r
begin 0\r
        pop     dx\r
        in      al,dx\r
end;\r
\r
function input_word(ioport: integer): integer;\r
begin 0\r
        pop     dx\r
        in      ax,dx\r
end;\r
\r
function last(var r:rtype    ): -1..maxint-1;\r
begin 0\r
        %get_buf_seg\r
        MOV     AX,ES:top\r
        DEC     AX\r
end;\r
\r
function next(var r: rtype   ): 0..maxint;\r
begin 0\r
        %get_buf_seg\r
        MOV AX,ES: bytecount\r
        ADD AX,ES: dataoffset\r
end;\r
\r
function mailbox_state(var m:mailbox): integer; and\r
function pool_state(var m:pool): integer;\r
begin 0\r
        POP SI\r
        POP ES\r
        MOV AX,ES:[SI].s\r
end;\r
\r
procedure output_byte(ioport: integer; data: byte);\r
begin 0\r
        pop     ax\r
        pop     dx\r
        out     dx,al\r
end;\r
\r
procedure output_word(ioport: integer; data: integer);\r
begin 0\r
        pop     ax\r
        pop     dx\r
        out     dx,ax\r
end;\r
\r
function own_stack_bound: integer;\r
begin 0\r
        mov     ax, word ptr own.stackbound\r
end;\r
\r
function own_stack_size: integer;\r
begin 0\r
        mov     ax, word ptr own.stacksize\r
end;\r
\r
function ownpriority: byte;\r
begin 0\r
        mov     al, DS: byte ptr own.priority\r
end;\r
\r
function priority(var p: process): byte;\r
begin 0\r
        pop     di\r
        pop     es\r
        mov     ax, es: [di].procvar\r
        cmp     ax,0\r
        jnz     priority_1\r
        %fault(F_NIL)\r
;       mov     al, f_nil\r
;       int     31\r
priority_1:\r
        mov     es, ax\r
        mov     al, es: priority\r
end;\r
\r
function ref(var m: mailbox):^mailbox;\r
begin\r
	POP BX\r
	POP ES\r
end;\r
\r
function rest_of_delay: integer;\r
begin 0\r
        mov     ax, word ptr own.timer\r
end;\r
\r
procedure setfirst(var r: rtype    ; v: 0..maxint);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
        cmp BX,ES:datasize\r
        jle setfir_1\r
	%fault(F_RANGE)\r
;       int 29      \r
setfir_1:\r
        MOV CX,ES:dataoffset\r
        SUB CX,BX\r
        MOV ES:dataoffset,BX\r
        ADD ES:bytecount,CX\r
        CMP ES:depth,1\r
        JBE setfir_2\r
        MOV AX,ES:bufcount\r
        MOV ES,ES:stack\r
        CMP ES:bufcount,AX\r
        JZ  setfir_1\r
setfir_2:\r
end;\r
\r
procedure setlast(var r: rtype    ; v: -1..maxint-1);\r
begin 0\r
        pop BX\r
        inc BX\r
        %get_buf_seg\r
        cmp BX,ES:datasize\r
        jle setlas_1\r
	%fault(F_RANGE)\r
;       int 29      \r
setlas_1:\r
        MOV ES:top,BX\r
        CMP ES:depth,1\r
        JBE setlas_2\r
        MOV AX,ES:bufcount\r
        MOV ES,ES:stack\r
        CMP ES:bufcount,AX\r
        JZ  setlas_1\r
setlas_2:\r
end;\r
\r
procedure setnext(var r: rtype    ; v: 0..maxint);\r
begin 0\r
        pop BX\r
        %get_buf_seg\r
setnex_1:      \r
        MOV CX,BX\r
        SUB CX,ES:dataoffset\r
        MOV ES:bytecount,CX\r
        CMP ES:depth,1\r
        JBE setnex_2\r
        MOV AX,ES:bufcount\r
        MOV ES,ES:stack\r
        CMP ES:bufcount,AX\r
        JZ  setnex_1\r
setnex_2:\r
end;\r
\r
procedure setpriority(prio: integer);\r
begin 0\r
        pop     ax\r
        cli \r
        test    DS: byte ptr own.p_state, 1\r
        JNZ     set_priority_1\r
        mov     DS: byte ptr own.priority, al\r
set_priority_1:\r
        sti\r
end;\r
\r
function stack_bound(var p: process): integer;\r
begin 0\r
        pop     di\r
        pop     es\r
        mov     ax, es: [di].procvar\r
        cmp     ax,0\r
        jnz     stackbound_1\r
	%fault(F_NIL)\r
;       mov     al, f_nil\r
;       int     31\r
stackbound_1:\r
        mov     es, ax\r
        mov     al, es: priority\r
end;\r
\r
function stack_size(var p: process): integer;\r
begin 0\r
        pop     di\r
        pop     es\r
        mov     ax, es: [di].procvar\r
        cmp     ax,0\r
        jnz     stacksize_1\r
	%fault(F_NIL)\r
;       mov     al, f_nil\r
;       int     31\r
stacksize_1:\r
        mov     es, ax\r
        mov     ax, es: stacksize\r
end;\r
\r
\r
.\r