|
|
1.1 ! root 1: /* rtfs.c - RT-file transfer utility -- common subroutines */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/others/rtf/RCS/rtfsbr.c,v 7.0 89/11/23 22:10:50 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/others/rtf/RCS/rtfsbr.c,v 7.0 89/11/23 22:10:50 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: rtfsbr.c,v $ ! 12: * Revision 7.0 89/11/23 22:10:50 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include "rtf.h" ! 29: #include <varargs.h> ! 30: #if defined(SYS5) && !defined(HPUX) ! 31: #include <sys/times.h> ! 32: #define TMS ! 33: #endif ! 34: ! 35: /* DATA */ ! 36: ! 37: static LLog _pgm_log = { ! 38: "rtf.log", NULLCP, NULLCP, LLOG_FATAL | LLOG_EXCEPTIONS | LLOG_NOTICE, ! 39: LLOG_FATAL, -1, LLOGCLS | LLOGCRT | LLOGZER, NOTOK ! 40: }; ! 41: LLog *pgm_log = &_pgm_log; ! 42: ! 43: /* */ ! 44: ! 45: #define RC_BASE 0x80 ! 46: ! 47: ! 48: static char *reason_err0[] = { ! 49: "no specific reason stated", ! 50: "user receiving ability jeopardized", ! 51: "reserved(1)", ! 52: "user sequence error", ! 53: "reserved(2)", ! 54: "local SS-user error", ! 55: "unreceoverable procedural error" ! 56: }; ! 57: ! 58: static int reason_err0_cnt = sizeof reason_err0 / sizeof reason_err0[0]; ! 59: ! 60: ! 61: static char *reason_err8[] = { ! 62: "demand data token" ! 63: }; ! 64: ! 65: static int reason_err8_cnt = sizeof reason_err8 / sizeof reason_err8[0]; ! 66: ! 67: ! 68: char *SReportString (code) ! 69: int code; ! 70: { ! 71: register int fcode; ! 72: static char buffer[BUFSIZ]; ! 73: ! 74: if (code == SP_PROTOCOL) ! 75: return "SS-provider protocol error"; ! 76: ! 77: code &= 0xff; ! 78: if (code & RC_BASE) { ! 79: if ((fcode = code & ~RC_BASE) < reason_err8_cnt) ! 80: return reason_err8[fcode]; ! 81: } ! 82: else ! 83: if (code < reason_err0_cnt) ! 84: return reason_err0[code]; ! 85: ! 86: (void) sprintf (buffer, "unknown reason code 0x%x", code); ! 87: return buffer; ! 88: } ! 89: ! 90: /* */ ! 91: ! 92: void rts_adios (rta, event) ! 93: register struct RtSAPabort *rta; ! 94: char *event; ! 95: { ! 96: rts_advise (rta, event); ! 97: ! 98: _exit (1); ! 99: } ! 100: ! 101: ! 102: void rts_advise (rta, event) ! 103: register struct RtSAPabort *rta; ! 104: char *event; ! 105: { ! 106: char buffer[BUFSIZ]; ! 107: ! 108: if (rta -> rta_cc > 0) ! 109: (void) sprintf (buffer, "[%s] %*.*s", RtErrString (rta -> rta_reason), ! 110: rta -> rta_cc, rta -> rta_cc, rta -> rta_data); ! 111: else ! 112: (void) sprintf (buffer, "[%s]", RtErrString (rta -> rta_reason)); ! 113: ! 114: advise (LLOG_NOTICE, NULLCP, "%s: %s", event, buffer); ! 115: } ! 116: ! 117: /* */ ! 118: ! 119: #ifndef lint ! 120: void adios (va_alist) ! 121: va_dcl ! 122: { ! 123: va_list ap; ! 124: ! 125: va_start (ap); ! 126: ! 127: _ll_log (pgm_log, LLOG_FATAL, ap); ! 128: ! 129: va_end (ap); ! 130: ! 131: _exit (1); ! 132: } ! 133: #else ! 134: /* VARARGS */ ! 135: ! 136: void adios (what, fmt) ! 137: char *what, ! 138: *fmt; ! 139: { ! 140: adios (what, fmt); ! 141: } ! 142: #endif ! 143: ! 144: ! 145: #ifndef lint ! 146: void advise (va_alist) ! 147: va_dcl ! 148: { ! 149: int code; ! 150: va_list ap; ! 151: ! 152: va_start (ap); ! 153: ! 154: code = va_arg (ap, int); ! 155: ! 156: _ll_log (pgm_log, code, ap); ! 157: ! 158: va_end (ap); ! 159: } ! 160: #else ! 161: /* VARARGS */ ! 162: ! 163: void advise (code, what, fmt) ! 164: char *what, ! 165: *fmt; ! 166: int code; ! 167: { ! 168: advise (code, what, fmt); ! 169: } ! 170: #endif ! 171: ! 172: ! 173: #ifndef lint ! 174: void ryr_advise (va_alist) ! 175: va_dcl ! 176: { ! 177: va_list ap; ! 178: ! 179: va_start (ap); ! 180: ! 181: _ll_log (pgm_log, LLOG_NOTICE, ap); ! 182: ! 183: va_end (ap); ! 184: } ! 185: #else ! 186: /* VARARGS */ ! 187: ! 188: void ryr_advise (what, fmt) ! 189: char *what, ! 190: *fmt; ! 191: { ! 192: ryr_advise (what, fmt); ! 193: } ! 194: #endif ! 195: ! 196: /* */ ! 197: ! 198: #ifdef lint ! 199: /* VARARGS4 */ ! 200: ! 201: int rtsaplose (rti, reason, what, fmt) ! 202: struct RtSAPindication *rti; ! 203: int reason; ! 204: char *what, ! 205: *fmt; ! 206: { ! 207: return rtsaplose (rti, reason, what, fmt); ! 208: } ! 209: #endif ! 210: ! 211: /* */ ! 212: ! 213: #ifndef NBBY ! 214: #define NBBY 8 ! 215: #endif ! 216: ! 217: ! 218: #ifndef TMS ! 219: timer (cc) ! 220: int cc; ! 221: { ! 222: long ms; ! 223: float bs; ! 224: struct timeval stop, ! 225: td; ! 226: static struct timeval start; ! 227: ! 228: if (cc == 0) { ! 229: (void) gettimeofday (&start, (struct timezone *) 0); ! 230: return; ! 231: } ! 232: else ! 233: (void) gettimeofday (&stop, (struct timezone *) 0); ! 234: ! 235: tvsub (&td, &stop, &start); ! 236: ms = (td.tv_sec * 1000) + (td.tv_usec / 1000); ! 237: bs = (((float) cc * NBBY * 1000) / (float) (ms ? ms : 1)) / NBBY; ! 238: ! 239: advise (LLOG_NOTICE, NULLCP, ! 240: "transfer complete: %d bytes in %d.%02d seconds (%.2f Kbytes/s)", ! 241: cc, td.tv_sec, td.tv_usec / 10000, bs / 1024); ! 242: } ! 243: ! 244: ! 245: static tvsub (tdiff, t1, t0) ! 246: register struct timeval *tdiff, ! 247: *t1, ! 248: *t0; ! 249: { ! 250: ! 251: tdiff -> tv_sec = t1 -> tv_sec - t0 -> tv_sec; ! 252: tdiff -> tv_usec = t1 -> tv_usec - t0 -> tv_usec; ! 253: if (tdiff -> tv_usec < 0) ! 254: tdiff -> tv_sec--, tdiff -> tv_usec += 1000000; ! 255: } ! 256: ! 257: #else ! 258: long times (); ! 259: ! 260: ! 261: static timer (cc) ! 262: int cc; ! 263: { ! 264: long ms; ! 265: float bs; ! 266: long stop, ! 267: td, ! 268: secs, ! 269: msecs; ! 270: struct tms tm; ! 271: static long start; ! 272: ! 273: if (cc == 0) { ! 274: start = times (&tm); ! 275: return; ! 276: } ! 277: else ! 278: stop = times (&tm); ! 279: ! 280: td = stop - start; ! 281: secs = td / 60, msecs = (td % 60) * 1000 / 60; ! 282: ms = (secs * 1000) + msecs; ! 283: bs = (((float) cc * NBBY * 1000) / (float) (ms ? ms : 1)) / NBBY; ! 284: ! 285: advise (LLOG_NOTICE, NULLCP, ! 286: "transfer complete: %d bytes in %d.%02d seconds (%.2f Kbytes/s)", ! 287: cc, secs, msecs / 10, bs / 1024); ! 288: } ! 289: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.