home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum16.lzh
/
SOFTWARE
/
ASSEMBLER
/
EXIT_HANDLER
/
pmlib.a
< prev
next >
Wrap
Text File
|
1991-01-09
|
3KB
|
186 lines
******************************************************************
**
** POST-MORTEM LIBRARY
** Links to UAcct trap to perform actions on process exit
**
**---
** Edition history
** # Date Changes made by
** -- -------- ------------------------------------------------ --
** 00 89-06-01 first edition am
** 01 89-08-02 adding pm_munlink am
** 02 89-08-28 adding pm_install and pm_remove am
**---
psect pmlib_a,0,0,0,0,0
ttl Post Mortem library
use condor.m
use uacct.d
*---
* POST MORTEM KILL
* pm_kill (int pid, short signal)
*
* Send signal to a process on exit
*
pm_kill: equ *
regsave d1,d2
*
link a5,#0
movem.l d1-d2,-(sp)
swap d1
move.w d0,d1 save pid
bsr.s get_time_forked
bmi.s pk99 exit on error
pea exh_kill(pc)
bsr exh_link
pk99 movem.l reglist(a5),d1-d2
unlk a5
rts
exh_kill equ *
regsave d1,d2
*
link a5,#0
movem.l d1-d2,-(sp)
move.l d0,d2 save time forked
bsr.s get_time_forked
bmi.s ek99 exit on error
cmp.l d0,d2 compare time forked
bne.s ek99 exit if different
move.w d1,d0 get pid
swap d1 get signal
os9 F$Send
ek99 movem.l reglist(a5),d1-d2
unlk a5
rts
get_time_forked equ *
movem.l d1-d3/a0,-(a7)
clr.l d3
move.w d1,d3
move.w #D_PrcDBT,d0 process descriptor table pointer
moveq #4,d1 select longword
bset #31,d1 examine
os9 F$SetSys
move.l d2,a0
lsl.l #2,d3 pid * 4
move.l (a0,d3),d2 get process descriptor pointer
bne.s gtf90 does not exist
move.w #E$IPrcID,errno(a6)
moveq #-1,d0 exit with error
bra.s gtf99
gtf90 move.l d2,a0
move.l P$TimBeg(a0),d0
gtf99 movem.l (sp)+,d1-d3/a0
rts
*---
* POST MORTEM MODULE UNLINK
* pm_munlink (mod_exec *module)
*
* Unlink from a module on exit
*
pm_munlink: equ *
*
link a5,#0
pea exh_munlink(pc)
bsr.s exh_link
unlk a5
rts
exh_munlink equ *
regsave a2
*
link a5,#0
movem.l a2,-(sp)
move.l d0,a2 address of module header
os9 F$UnLink
movem.l reglist(a5),a2
unlk a5
rts
*---
* POST MORTEM INSTALL HANDLER
* exh_qentry *pm_install ((*void)() routine, int par1, int par2)
*
* Install handler
*
pm_install: equ *
regsave d1
param par2
*
link a5,#0
movem.l d1,-(a7)
move.l d0,-(a7)
move.l d1,d0
move.l par2(a5),d1
bsr.s exh_link
movem.l reglist(a5),d1
unlk a5
rts
*---
* POST MORTEM DEINSTALL HANDLER
* pm_remove (exh_qentry *entry)
*
* Deinstall handler
*
pm_remove: equ *
*
link a5,#0
bsr.s exh_unlink
unlk a5
rts
*---
* LINK TO EXIT HANDLER
* exh_link (arg1, arg2, routine);
*
exh_link equ *
regsave d1,a1 d0 is saved but not restored
param routine
*
link a5,#0
movem.l d0/d1/a1,-(a7)
moveq #Exh_QEntry,d0
move.w #E$NoRAM,d1 preset error
bsr malloc allocate memory
tst.l d0
beq.s el99
move.l d0,a1
move.l a6,Exh_a6(a1)
move.l (a7),Exh_d0(a1)
move.l 4(a7),Exh_d1(a1)
move.l routine(a5),Exh_Entry(a1)
os9 F$ExhLnk
bcc.s el99
el90 moveq #-1,d0
move.l d1,errno(a6)
el99 movem.l reglist(a5),d1/a1
unlk a5
rts
*---
* UNLINK FROM EXIT HANDLER
* exh_unlink (entry);
*
exh_unlink equ *
regsave d1,a1
*
link a5,#0
movem.l d1/a1,-(a7)
move.l d0,a1
os9 F$ExhUlk
bcs.s eu90
bsr free free memory
bra.s eu99
eu90 moveq #-1,d0
move.l d1,errno(a6)
eu99 movem.l reglist(a5),d1/a1
unlk a5
rts
ends