|
|
1.1 ! root 1: #define _DDI_DKI 1 ! 2: #define _SYSV3 1 ! 3: ! 4: #include <common/xdebug.h> ! 5: #include <sys/confinfo.h> ! 6: #include <sys/types.h> ! 7: #include <string.h> ! 8: ! 9: #ifdef __MSDOS__ ! 10: #include <sys/_con.h> ! 11: #else ! 12: #include <sys/con.h> ! 13: #endif ! 14: ! 15: /* ! 16: * Fix this up for non-ISO C systems. In actual fact, these symbols are ! 17: * allowed to be enumerations rather than #define macros.... ! 18: */ ! 19: ! 20: #ifndef EXIT_SUCCESS ! 21: ! 22: #define EXIT_SUCCESS 0 ! 23: #define EXIT_FAILURE -1 ! 24: ! 25: #endif ! 26: ! 27: __EXTERN_C_BEGIN__ ! 28: ! 29: int testX86 __PROTO ((void)); ! 30: ! 31: __EXTERN_C_END__ ! 32: ! 33: #include <dos.h> ! 34: #include <sys/io.h> ! 35: ! 36: /* ! 37: * ! 38: */ ! 39: ! 40: #if __USE_PROTO__ ! 41: __LOCAL__ void (foo) (void * __NOTUSED (unused)) ! 42: #else ! 43: __LOCAL__ void ! 44: foo __ARGS (()) ! 45: #endif ! 46: { ! 47: (* (char __far *) MK_FP (0xB800, 10)) ++; ! 48: ! 49: itimeout (foo, 0, 3, pltimeout); ! 50: untimeout (itimeout (foo, 0, 1, pltimeout)); ! 51: } ! 52: ! 53: ! 54: #include <sys/file.h> ! 55: #include <stropts.h> ! 56: ! 57: __CONST__ char TEST_STRING [] = "Foo bar and Grill"; ! 58: ! 59: #if __USE_PROTO__ ! 60: int main (void) ! 61: #else ! 62: int ! 63: main () ! 64: #endif ! 65: { ! 66: CON * con; ! 67: IO io; ! 68: o_dev_t dev; ! 69: ! 70: /* ! 71: * Ensure that the atomic operations are at least doing the operations ! 72: * as defined (testing for atomicity is beyond us as yet). ! 73: */ ! 74: ! 75: while (testX86 ()) ! 76: return -1; ! 77: ! 78: STREAMS_INIT (); ! 79: ! 80: itimeout (foo, 0, 2, pltimeout); ! 81: untimeout (itimeout (foo, 0, 1, pltimeout)); ! 82: ! 83: sleep (1); ! 84: ! 85: if ((con = STREAMS_GETCON (dev = 0x2000)) == NULL) ! 86: return -1; ! 87: if ((* con->c_open) (dev, IPR|IPW, DFCHR) == 0) { ! 88: ! 89: (* con->c_ioctl) (dev, I_PUSH, "dump", IPR|IPW); ! 90: ! 91: io.io_seg = IOUSR; ! 92: io.io_ioc = sizeof (TEST_STRING); ! 93: io.io_base = TEST_STRING; ! 94: io.io_seek = 0; ! 95: io.io_flag = 0; ! 96: ! 97: (* con->c_write) (dev, & io); ! 98: ! 99: (* con->c_close) (dev, IPR|IPW, DFCHR); ! 100: } ! 101: ! 102: sleep (1); ! 103: ! 104: if ((con = STREAMS_GETCON (dev = 0x2100)) == NULL) ! 105: return -1; ! 106: if ((* con->c_open) (dev, IPR|IPW, DFCHR) == 0) { ! 107: char buf [sizeof (TEST_STRING) + 10]; ! 108: ! 109: (* con->c_ioctl) (dev, I_PUSH, "dump", IPR|IPW); ! 110: ! 111: io.io_seg = IOUSR; ! 112: io.io_ioc = sizeof (TEST_STRING); ! 113: io.io_base = TEST_STRING; ! 114: io.io_seek = 0; ! 115: io.io_flag = 0; ! 116: ! 117: (* con->c_write) (dev, & io); ! 118: ! 119: (* con->c_ioctl) (dev, I_SRDOPT, RMSGN, IPR|IPW); ! 120: ! 121: io.io_base = buf; ! 122: io.io_ioc = sizeof (buf); ! 123: ! 124: (* con->c_read) (dev, & io); ! 125: ! 126: if (io.io_ioc != 10 || ! 127: memcmp (TEST_STRING, buf, sizeof (TEST_STRING)) != 0) ! 128: ASSERT ("Data mutated!\n" == NULL); ! 129: ! 130: (* con->c_close) (dev, IPR|IPW, DFCHR); ! 131: } ! 132: ! 133: return EXIT_SUCCESS; ! 134: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.