01 /*----------------------------------------------------------------*/
02 /* sleep01.c sleep test Keven Miller 04/25/2011 */
03 /*----------------------------------------------------------------*/
04 #include <stdio.h>
05 #include <unistd.h>
06 #include <signal.h>
07 #include <time.h>
08
09 #define proc
10
11 proc void sleepcy (int sig)
12 {
13 printf ("!! Control-C SIGINT %d !!\n", sig);
14 signal ( sig, &sleepcy );
15 }
16
17 proc int main ( int ac, char *av[] )
18 {
19 int uns, secs;
20 time_t t1, t2;
21
22 signal ( SIGINT, &sleepcy );
23
24 secs = 10;
25 printf ("Sleep 10\n");
26
27 t1 = time (0);
28 uns = sleep (secs);
29 t2 = time (0);
30
31 printf ("Sleep unslept secs %d (Actual secs %d)\n", uns, t2 - t1);
32 }
33/*----------------------------------------------------------------*/
| Comment | HPUX Session |
|---|---|
Run with no interruption Run again After 4 seconds, type Control-C |
hpux-1:kevenm /home/kevenm/src# hpux-1:kevenm /home/kevenm/src# hpux-1:kevenm /home/kevenm/src#sleep01 Sleep 10 Sleep unslept secs 0 (Actual secs 10) hpux-1:kevenm /home/kevenm/src# hpux-1:kevenm /home/kevenm/src# hpux-1:kevenm /home/kevenm/src#sleep01 Sleep 10 !! Control-C SIGINT 2 !! Sleep unslept secs 6 (Actual secs 4) hpux-1:kevenm /home/kevenm/src# hpux-1:kevenm /home/kevenm/src# |
01 /*----------------------------------------------------------------*/
02 /* sleep02.c sleep test Keven Miller 04/25/2011 */
03 /*----------------------------------------------------------------*/
04 #pragma list off /*MPE*/
05 #include <stdio.h>
06 #include <unistd.h>
07 #include <signal.h>
08 #include <time.h>
09
10 #pragma intrinsic XCONTRAP /*MPEcy*/
11 #pragma intrinsic RESETCONTROL /*MPEcy*/
12
13 #define proc
14
15 /*----------------------------------------------------------------*/
16 proc void cytrap (void) /*MPEcy*/
17 { /*MPEcy*/
18 raise (SIGINT); /*MPEcy*/
19 RESETCONTROL (); /*MPEcy*/
20 } /*MPEcy*/
21 /*----------------------------------------------------------------*/
22
23 proc void sleepcy (int sig)
24 {
25 printf ("!! Control-Y SIGINT %d !!\n", sig); /*MPEcy*/
26 signal ( sig, &sleepcy );
27 }
28
29 proc int main ( int ac, char *av[] )
30 {
31 int uns, secs, old;
32 time_t t1, t2;
33
34 XCONTRAP ( (int) &cytrap, &old ); /*MPEcy*/
35
36 signal ( SIGINT, &sleepcy );
37
38 secs = 10;
39 printf ("Sleep 10\n");
40
41 t1 = time (0);
42 uns = sleep (secs);
43 t2 = time (0);
44
45 printf ("Sleep unslept secs %d (Actual secs %d)\n", uns, t2 - t1);
46 }
47 /*----------------------------------------------------------------*/
| Comment | MPE Session |
|---|---|
Build sleep02 without the /*MPEcy*/ tagged lines Run test; wait 2-3 seconds Then type Control-Y No interrupt response. Build with the /*MPEcy*/ tagged lines Run test; wait 2-3 seconds Then type Control-Y Interrupt occurrs !! But sleep not interrupted It actually increased !! |
Fox 11:
Fox 11:
Fox 11:setvar ccopts "-Aa +e +w1"
Fox 11:ccxllk sleep02c,sleep02
MON APR 25 2011 10:50 AM Copyright Hewlett-Packard Co. 1984. PAGE 1
HP C/iX HP31506 A.05.19 "SLEEP02C"
1 0 # 1 "SLEEP02C.LIBC.KEVENM"
1 0 #pragma list off
Clean compile
HP Link Editor/iX (HP30315A.06.17) Copyright Hewlett-Packard Co 1986
LinkEd> link from=$oldpass;rl=libc.lib.sys,libcansi.lib.sys;&
>>>>>>> TO=sleep02;SHARE
Clean Link
Fox 11:
Fox 11:sleep02
Sleep 10
Sleep unslept secs 0 (Actual secs 10)
Fox 11:
...
Fox 11:
Fox 11:
Fox 11:ccxllk sleep02c,sleep02
CCOPTS=-Aa +e +w1
MON APR 25 2011 10:53 AM Copyright Hewlett-Packard Co. 1984. PAGE 1
HP C/iX HP31506 A.05.19 "SLEEP02C"
1 0 # 1 "SLEEP02C.LIBC.KEVENM"
1 0 #pragma list off
Clean compile
HP Link Editor/iX (HP30315A.06.17) Copyright Hewlett-Packard Co 1986
LinkEd> link from=$oldpass;rl=libc.lib.sys,libcansi.lib.sys;&
>>>>>>> TO=sleep02;SHARE;CAP=
Clean Link
Fox 11:
Fox 11:sleep02
Sleep 10
!! Control-Y SIGINT 2 !!
Sleep unslept secs 0 (Actual secs 13)
Fox 11:
Fox 11:
|
| Comment | MPE Session |
|---|---|
Disassemble sleep() Save seconds into reg3 Save reg 3 into 64 bit field Load 64 bit fixed into fpreg4 Convert fixed to float fpreg5 Call PAUSE Cnvt float to fixed reg26 Call CCODE Comp CCE(2) to reg28;skip if = Save secs to reg28;skip Zero return reg28 return |
Fox 11: Fox 11:run sleep02;debug DEBUG/iX C.16.01 DEBUG Intrinsic at: 519.0000a294 ?$START$ $1 ($50) nmdebug > dc sleep,14 USER $1d0.a4c74 000a4c74 sleep 6bc23fd9 STW 2,-20(0,30) 000a4c78 sleep+$4 6fc30080 STWM 3,64(0,30) 000a4c7c sleep+$8 081a0243 OR 26,0,3 000a4c80 sleep+$c 0800025f OR 0,0,31 000a4c84 sleep+$10 0fdf1281 STWS 31,-16(0,30) 000a4c88 sleep+$14 0fc31289 STWS 3,-12(0,30) 000a4c8c sleep+$18 2fc11004 FLDDS -16(0,30),4 000a4c90 sleep+$1c 30808a05 FCNVXF,DBL,SGL4,5 000a4c94 sleep+$20 37da3f99 LDO -52(30),26 000a4c98 sleep+$24 e85f1f6d BL ?sleep+$1c,2 000a4c9c sleep+$28 27401205 FSTWS 5,0(0,26) 000a4ca0 sleep+$2c e85c11f5 BL ?access+$9c,2 000a4ca4 sleep+$30 08000240 OR 0,0,0 000a4ca8 sleep+$34 93802004 COMICLR,=2,28,0 000a4cac sleep+$38 0803125c OR,TR 3,0,28 000a4cb0 sleep+$3c 0800025c OR 0,0,28 000a4cb4 sleep+$40 4bc23f59 LDW -84(0,30),2 000a4cb8 sleep+$44 e840c000 BV 0(2) 000a4cbc sleep+$48 4fc33f81 LDWM -64(0,30),3 000a4cc0 ?_system e84000a0 BL system,2 $2 ($50) nmdebug > |
01 /*----------------------------------------------------------------*/
02 /* csleep.c Keven Miller 24 Apr 2011 kevenm@3kranger.com */
03 /* CCOPTS "-Aa +e +w1 +O2" */
04 /*----------------------------------------------------------------*/
05 #pragma list off
06 #pragma LOCALITY "3kRanger"
07 #include "cstd.h"
08
09 #pragma intrinsic CCODE
10 #pragma intrinsic PAUSE
11 #pragma intrinsic RESETCONTROL
12 #pragma intrinsic XCONTRAP
13
14 extern void PAUSEX ( f32* );
15
16 #ifndef ORG
17
18 static f32 sleep_time;
19 static f32 unsleep_time;
20 static s32 prev_cytrap;
21 /*----------------------------------------------------------------*/
22
23 proc static void sleep_cytrap (void)
24 {
25 unsleep_time = sleep_time;
26 sleep_time = 0.0;
27 if ( prev_cytrap )
28 (*(vfp)prev_cytrap)();
29 RESETCONTROL ();
30 }
31
32 #endif
33 /*----------------------------------------------------------------*/
34
35 proc u32 sleep ( u32 isecs )
36 {
37 #ifdef ORG
38
39 f32 f;
40
41 f = isecs;
42 PAUSE ( &f );
43 if ( MPE_CCE != CCODE () )
44 return isecs;
45 else
46 return 0;
47
48 #else /* NEW */
49
50 XCONTRAP ( (int) &sleep_cytrap, &prev_cytrap );
51
52 sleep_time = isecs;
53 unsleep_time = sleep_time;
54
55 PAUSEX ( &sleep_time );
56
57 isecs = ( unsleep_time + 0.499999 );
58
59 XCONTRAP ( prev_cytrap, &prev_cytrap );
60
61 return isecs;
62
63 #endif
64 }
65 /*----------------------------------------------------------------*/
| Comment | MPE Session |
|---|---|
Create NMOBJ of our sleep Build sleep02 linking in our sleep Run test Hit Control-Y We see the user trap output Remove the Control-Y trap from sleep02 Hit Control-Y No user trap, or SIGINT but sleep now stops! |
Fox 11:
Fox 11:
Fox 11:setvar ccopts "-Aa +e +w1 +O2"
Fox 11:ccxl csleep,csleepo
CCOPTS=-Aa +e +w1 +O2
MON APR 25 2011 2:02 PM Copyright Hewlett-Packard Co. 1984. PAGE 1
HP C/iX HP31506 A.05.19 "CSLEEP"
1 0 # 1 "CSLEEP.LIBC.KEVENM"
1 0
2 0
3 0
4 0
5 0 #pragma list off
Clean compile
Fox 11:
Fox 11:
Fox 11:setvar ccopts "-Aa +e +w1"
Fox 11:setvar linkobj "csleepo"
Fox 11:ccxllk sleep02c,sleep02
CCOPTS=-Aa +e +w1
MON APR 25 2011 2:02 PM Copyright Hewlett-Packard Co. 1984. PAGE 1
HP C/iX HP31506 A.05.19 "SLEEP02C"
1 0 # 1 "SLEEP02C.LIBC.KEVENM"
1 0 #pragma list off
Clean compile
HP Link Editor/iX (HP30315A.06.17) Copyright Hewlett-Packard Co 1986
LinkEd> link from=$oldpass,csleepo;rl=libc.lib.sys,libcansi.lib.sys;&
>>>>>>> TO=sleep02;SHARE;CAP=
Clean Link
Fox 11:
Fox 11:
Fox 11:sleep02
Sleep 10
!! Control-Y SIGINT 2 !!
Sleep unslept secs 7 (Actual secs 3)
Fox 11:
...
Fox 11:sleep02
Sleep 10
Sleep unslept secs 5 (Actual secs 5)
Fox 11:
Fox 11:
|