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: |