|
|
1.1 ! root 1: /***************************************************************************\ ! 2: * ! 3: * Module Name: PMSPL.H ! 4: * ! 5: * OS/2 Presentation Manager Spooler constants, types and function declarations ! 6: * ! 7: * Copyright (c) International Business Machines Corporation 1981, 1988, 1989 ! 8: * Copyright (c) Microsoft Corporation 1981, 1988, 1989 ! 9: * ! 10: * ============================================================================= ! 11: * ! 12: * The following symbols are used in this file for conditional sections. ! 13: * ! 14: * INCL_SPLFSE - File System Emulation Functions ! 15: * INCL_SPLERRORS - defined if INCL_ERRORS defined ! 16: * INCL_SPLDOSPRINT - DosPrint APIs ! 17: * ! 18: \***************************************************************************/ ! 19: ! 20: ! 21: #ifdef INCL_ERRORS ! 22: #define INCL_SPLERRORS ! 23: #endif /* INCL_ERRORS */ ! 24: ! 25: /* common types and constants ! 26: ** ========================== ! 27: */ ! 28: /* Names of various OS2.INI spooler variables */ ! 29: ! 30: #define SPLENTRY PASCAL FAR _loadds ! 31: #ifndef FARENTRY ! 32: #define FARENTRY PASCAL FAR ! 33: #endif ! 34: ! 35: ! 36: #define SPL_INI_SPOOLER "PM_SPOOLER" ! 37: #define SPL_INI_QUEUE "PM_SPOOLER_QUEUE" ! 38: #define SPL_INI_PRINTER "PM_SPOOLER_PRINTER" ! 39: #define SPL_INI_PRINTERDESCR "PM_SPOOLER_PRINTER_DESCR" ! 40: #define SPL_INI_QUEUEDESCR "PM_SPOOLER_QUEUE_DESCR" ! 41: #define SPL_INI_QUEUEDD "PM_SPOOLER_QUEUE_DD" ! 42: #define SPL_INI_QUEUEDDDATA "PM_SPOOLER_QUEUE_DDDATA" ! 43: ! 44: /* General SPL return values */ ! 45: #define SPL_ERROR 0L ! 46: #define SPL_OK 1L ! 47: ! 48: /* handle to a spool file */ ! 49: typedef LHANDLE HSPL; /* hspl */ ! 50: /* Used in recording of PM_Q_STD data via SplStdxxx calls */ ! 51: typedef LHANDLE HSTD; /* hstd */ ! 52: typedef HSTD FAR *PHSTD; ! 53: /* spooler manager open data */ ! 54: typedef PSZ FAR *PQMOPENDATA; /* pqmdop */ ! 55: ! 56: /* Public interface function prototypes ! 57: ** ==================================== ! 58: */ ! 59: ! 60: /*** Spooler Queue manager Interface */ ! 61: HSPL SPLENTRY _loadds SplQmOpen( PSZ, LONG, PQMOPENDATA ); ! 62: BOOL SPLENTRY _loadds SplQmStartDoc( HSPL, PSZ ); ! 63: BOOL SPLENTRY _loadds SplQmWrite( HSPL, LONG, PBYTE ); ! 64: BOOL SPLENTRY _loadds SplQmEndDoc( HSPL ); ! 65: BOOL SPLENTRY _loadds SplQmClose( HSPL ); ! 66: BOOL SPLENTRY _loadds SplQmAbort( HSPL ); ! 67: BOOL SPLENTRY _loadds SplQmAbortDoc( HSPL ); ! 68: ! 69: /*** Spooler Queue Processor interface */ ! 70: ! 71: BOOL SPLENTRY _loadds SplQpQueryDt( PLONG, PSZ FAR * ); ! 72: BOOL SPLENTRY _loadds SplQpInstall( HWND ); ! 73: ! 74: #ifdef INCL_SPLFSE ! 75: /*** Direct Device File System Interface */ ! 76: ! 77: USHORT SPLENTRY _loadds PrtOpen( PSZ, PUSHORT, PUSHORT, ULONG, ! 78: USHORT, USHORT, USHORT, ULONG ); ! 79: USHORT SPLENTRY _loadds PrtClose( HFILE ); ! 80: USHORT SPLENTRY _loadds PrtWrite( HFILE, PCH, USHORT, PUSHORT ); ! 81: USHORT SPLENTRY _loadds PrtDevIOCtl( PVOID, PVOID, USHORT, USHORT, HFILE ); ! 82: #endif /* include File System Emulation functions */ ! 83: ! 84: /* Style for SplMessageBox */ ! 85: /* Same as for WinMsgBox see PMWIN.H for details */ ! 86: ! 87: /*** Spooler message interface */ ! 88: USHORT SPLENTRY _loadds SplMessageBox( PSZ, USHORT, USHORT, ! 89: PSZ, PSZ, USHORT, USHORT ); ! 90: ! 91: /*** PM_Q_STD datatype functions */ ! 92: BOOL SPLENTRY _loadds SplStdOpen( HDC ); ! 93: BOOL SPLENTRY _loadds SplStdClose( HDC ); ! 94: BOOL SPLENTRY _loadds SplStdStart( HDC ); ! 95: HSTD SPLENTRY _loadds SplStdStop( HDC ); ! 96: BOOL SPLENTRY _loadds SplStdDelete( HSTD ); ! 97: BOOL SPLENTRY _loadds SplStdGetBits( HSTD, LONG, LONG, PCH ); ! 98: LONG SPLENTRY _loadds SplStdQueryLength( HSTD ); ! 99: ! 100: /* Error information and return codes ! 101: ** ================================== ! 102: */ ! 103: /* Error information for SplMessageBox */ ! 104: #define SPLINFO_QPERROR 0x0001 ! 105: #define SPLINFO_DDERROR 0x0002 ! 106: #define SPLINFO_SPLERROR 0x0004 ! 107: #define SPLINFO_OTHERERROR 0x0080 ! 108: #define SPLINFO_INFORMATION 0x0100 ! 109: #define SPLINFO_WARNING 0x0200 ! 110: #define SPLINFO_ERROR 0x0400 ! 111: #define SPLINFO_SEVERE 0x0800 ! 112: #define SPLINFO_USERINTREQD 0x1000 ! 113: ! 114: /* Error Data for SplMessageBox */ ! 115: #define SPLDATA_PRINTERJAM 0x0001 ! 116: #define SPLDATA_FORMCHGREQD 0x0002 ! 117: #define SPLDATA_CARTCHGREQD 0x0004 ! 118: #define SPLDATA_PENCHGREQD 0x0008 ! 119: #define SPLDATA_DATAERROR 0x0010 ! 120: #define SPLDATA_UNEXPECTERROR 0x0020 ! 121: #define SPLDATA_OTHER 0x8000 ! 122: ! 123: /* return code for SplStdQueryLength */ ! 124: #define SSQL_ERROR (-1L) ! 125: ! 126: #ifdef INCL_SPLERRORS ! 127: ! 128: #include <pmerr.h> ! 129: ! 130: #endif /* INCL_SPLERRORS */ ! 131: ! 132: ! 133: ! 134: typedef unsigned SPLERR; /* err */ ! 135: ! 136: #ifdef INCL_SPLDOSPRINT ! 137: ! 138: ! 139: /* length for character arrays in structures (excluding zero terminator) */ ! 140: #define CNLEN 15 /* Computer name length */ ! 141: #define UNLEN 20 /* Maximum user name length */ ! 142: #define QNLEN 12 /* Queue name maximum length */ ! 143: #define PDLEN 8 /* Print destination length */ ! 144: #define DTLEN 9 /* Spool file data type */ ! 145: /* e.g. PM_Q_STD,PM_Q_RAW */ ! 146: #define QP_DATATYPE_SIZE 15 /* returned by SplQpQueryDt */ ! 147: #define DRIV_DEVICENAME_SIZE 31 /* see DRIVDATA struc */ ! 148: #define DRIV_NAME_SIZE 8 /* name of device driver */ ! 149: #define PRINTERNAME_SIZE 32 /* max printer name length */ ! 150: #define FORMNAME_SIZE 31 /* max form name length */ ! 151: #define MAXCOMMENTSZ 48 /* queue comment length */ ! 152: ! 153: #define DEFAULT_LM_PROC "LMPRINT" ! 154: ! 155: /* IOctl for DosPrintJobGetId */ ! 156: #define SPOOL_LMCAT 83 ! 157: #define SPOOL_LMGetPrintId 0x60 ! 158: ! 159: ! 160: ! 161: typedef struct _PRJINFO { /* prj1 */ ! 162: USHORT uJobId; ! 163: CHAR szUserName[UNLEN+1]; ! 164: CHAR pad_1; ! 165: CHAR szNotifyName[CNLEN+1]; ! 166: CHAR szDataType[DTLEN+1]; ! 167: PSZ pszParms; ! 168: USHORT uPosition; ! 169: USHORT fsStatus; ! 170: PSZ pszStatus; ! 171: ULONG ulSubmitted; ! 172: ULONG ulSize; ! 173: PSZ pszComment; ! 174: } PRJINFO; ! 175: typedef PRJINFO FAR *PPRJINFO; ! 176: typedef PRJINFO NEAR *NPPRJINFO; ! 177: ! 178: typedef struct _PRJINFO2 { /* prj2 */ ! 179: USHORT uJobId; ! 180: USHORT uPriority; ! 181: PSZ pszUserName; ! 182: USHORT uPosition; ! 183: USHORT fsStatus; ! 184: ULONG ulSubmitted; ! 185: ULONG ulSize; ! 186: PSZ pszComment; ! 187: PSZ pszDocument; ! 188: } PRJINFO2; ! 189: typedef PRJINFO2 FAR *PPRJINFO2; ! 190: typedef PRJINFO2 NEAR *NPPRJINFO2; ! 191: ! 192: typedef struct _PRJINFO3 { /* prj */ ! 193: USHORT uJobId; ! 194: USHORT uPriority; ! 195: PSZ pszUserName; ! 196: USHORT uPosition; ! 197: USHORT fsStatus; ! 198: ULONG ulSubmitted; ! 199: ULONG ulSize; ! 200: PSZ pszComment; ! 201: PSZ pszDocument; ! 202: PSZ pszNotifyName; ! 203: PSZ pszDataType; ! 204: PSZ pszParms; ! 205: PSZ pszStatus; ! 206: PSZ pszQueue; ! 207: PSZ pszQProcName; ! 208: PSZ pszQProcParms; ! 209: PSZ pszDriverName; ! 210: PDRIVDATA pDriverData; ! 211: PSZ pszPrinterName; ! 212: } PRJINFO3; ! 213: typedef PRJINFO3 FAR *PPRJINFO3; ! 214: typedef PRJINFO3 NEAR *NPPRJINFO3; ! 215: ! 216: ! 217: typedef struct _PRDINFO { /* prd1 */ ! 218: CHAR szName[PDLEN+1]; ! 219: CHAR szUserName[UNLEN+1]; ! 220: USHORT uJobId; ! 221: USHORT fsStatus; ! 222: PSZ pszStatus; ! 223: USHORT time; ! 224: } PRDINFO; ! 225: typedef PRDINFO FAR *PPRDINFO; ! 226: typedef PRDINFO NEAR *NPPRDINFO; ! 227: ! 228: ! 229: typedef struct _PRDINFO3 { /* prd */ ! 230: PSZ pszPrinterName; ! 231: PSZ pszUserName; ! 232: PSZ pszLogAddr; ! 233: USHORT uJobId; ! 234: USHORT fsStatus; ! 235: PSZ pszStatus; ! 236: PSZ pszComment; ! 237: PSZ pszDrivers; ! 238: USHORT time; ! 239: USHORT usTimeOut; ! 240: } PRDINFO3; ! 241: typedef PRDINFO3 FAR *PPRDINFO3; ! 242: typedef PRDINFO3 NEAR *NPPRDINFO3; ! 243: ! 244: ! 245: typedef struct _PRQINFO { /* prq1 */ ! 246: CHAR szName[QNLEN+1]; ! 247: CHAR pad_1; ! 248: USHORT uPriority; ! 249: USHORT uStartTime; ! 250: USHORT uUntilTime; ! 251: PSZ pszSepFile; ! 252: PSZ pszPrProc; ! 253: PSZ pszDestinations; ! 254: PSZ pszParms; ! 255: PSZ pszComment; ! 256: USHORT fsStatus; ! 257: USHORT cJobs; ! 258: } PRQINFO; ! 259: typedef PRQINFO FAR *PPRQINFO; ! 260: typedef PRQINFO NEAR *NPPRQINFO; ! 261: ! 262: ! 263: typedef struct _PRQINFO3 { /* prq */ ! 264: PSZ pszName; ! 265: USHORT uPriority; ! 266: USHORT uStartTime; ! 267: USHORT uUntilTime; ! 268: USHORT pad1; ! 269: PSZ pszSepFile; ! 270: PSZ pszPrProc; ! 271: PSZ pszParms; ! 272: PSZ pszComment; ! 273: USHORT fsStatus; ! 274: USHORT cJobs; ! 275: PSZ pszPrinters; ! 276: PSZ pszDriverName; ! 277: PDRIVDATA pDriverData; ! 278: } PRQINFO3; ! 279: typedef PRQINFO3 FAR *PPRQINFO3; ! 280: typedef PRQINFO3 NEAR *NPPRQINFO3; ! 281: ! 282: ! 283: /* ! 284: * structure for DosPrintJobGetId ! 285: */ ! 286: typedef struct _PRIDINFO { /* prjid */ ! 287: USHORT uJobId; ! 288: CHAR szServer[CNLEN + 1]; ! 289: CHAR szQName[QNLEN+1]; ! 290: CHAR pad_1; ! 291: } PRIDINFO; ! 292: typedef PRIDINFO FAR *PPRIDINFO; ! 293: typedef PRIDINFO NEAR *NPPRIDINFO; ! 294: ! 295: ! 296: /**************************************************************** ! 297: * * ! 298: * Function prototypes * ! 299: * * ! 300: ****************************************************************/ ! 301: ! 302: SPLERR SPLENTRY DosPrintDestEnum( ! 303: PSZ pszServer, ! 304: USHORT uLevel, ! 305: PBYTE pbBuf, ! 306: USHORT cbBuf, ! 307: PUSHORT pcReturned, ! 308: PUSHORT pcTotal ! 309: ); ! 310: ! 311: SPLERR SPLENTRY DosPrintDestControl( ! 312: PSZ pszServer, ! 313: PSZ pszDevName, ! 314: USHORT uControl ! 315: ); ! 316: ! 317: SPLERR SPLENTRY DosPrintDestGetInfo( ! 318: PSZ pszServer, ! 319: PSZ pszName, ! 320: USHORT uLevel, ! 321: PBYTE pbBuf, ! 322: USHORT cbBuf, ! 323: PUSHORT pcbNeeded ! 324: ); ! 325: ! 326: SPLERR SPLENTRY DosPrintDestAdd( ! 327: PSZ pszServer, ! 328: USHORT uLevel, ! 329: PBYTE pbBuf, ! 330: USHORT cbBuf ! 331: ); ! 332: ! 333: SPLERR SPLENTRY DosPrintDestSetInfo( ! 334: PSZ pszServer, ! 335: PSZ pszName, ! 336: USHORT uLevel, ! 337: PBYTE pbBuf, ! 338: USHORT cbBuf, ! 339: USHORT uParmNum ! 340: ); ! 341: ! 342: SPLERR SPLENTRY DosPrintDestDel( ! 343: PSZ pszServer, ! 344: PSZ pszPrinterName ! 345: ); ! 346: ! 347: SPLERR SPLENTRY DosPrintQEnum( ! 348: PSZ pszServer, ! 349: USHORT uLevel, ! 350: PBYTE pbBuf, ! 351: USHORT cbBuf, ! 352: PUSHORT pcReturned, ! 353: PUSHORT pcTotal ! 354: ); ! 355: ! 356: SPLERR SPLENTRY DosPrintQGetInfo( ! 357: PSZ pszServer, ! 358: PSZ pszQueueName, ! 359: USHORT uLevel, ! 360: PBYTE pbBuf, ! 361: USHORT cbBuf, ! 362: PUSHORT pcbNeeded ! 363: ); ! 364: ! 365: SPLERR SPLENTRY DosPrintQSetInfo( ! 366: PSZ pszServer, ! 367: PSZ pszQueueName, ! 368: USHORT uLevel, ! 369: PBYTE pbBuf, ! 370: USHORT cbBuf, ! 371: USHORT uParmNum ! 372: ); ! 373: ! 374: SPLERR SPLENTRY DosPrintQPause( ! 375: PSZ pszServer, ! 376: PSZ pszQueueName ! 377: ); ! 378: ! 379: SPLERR SPLENTRY DosPrintQContinue( ! 380: PSZ pszServer, ! 381: PSZ pszQueueName ! 382: ); ! 383: ! 384: SPLERR SPLENTRY DosPrintQPurge( ! 385: PSZ pszServer, ! 386: PSZ pszQueueName ! 387: ); ! 388: ! 389: SPLERR SPLENTRY DosPrintQAdd( ! 390: PSZ pszServer, ! 391: USHORT uLevel, ! 392: PBYTE pbBuf, ! 393: USHORT cbBuf ! 394: ); ! 395: ! 396: SPLERR SPLENTRY DosPrintQDel( ! 397: PSZ pszServer, ! 398: PSZ pszQueueName ! 399: ); ! 400: ! 401: SPLERR SPLENTRY DosPrintJobGetInfo( ! 402: PSZ pszServer, ! 403: USHORT uJobId, ! 404: USHORT uLevel, ! 405: PBYTE pbBuf, ! 406: USHORT cbBuf, ! 407: PUSHORT pcbNeeded ! 408: ); ! 409: ! 410: SPLERR SPLENTRY DosPrintJobSetInfo( ! 411: PSZ pszServer, ! 412: USHORT uJobId, ! 413: USHORT uLevel, ! 414: PBYTE pbBuf, ! 415: USHORT cbBuf, ! 416: USHORT uParmNum ! 417: ); ! 418: ! 419: SPLERR SPLENTRY DosPrintJobPause( ! 420: PSZ pszServer, ! 421: USHORT uJobId ! 422: ); ! 423: ! 424: SPLERR SPLENTRY DosPrintJobContinue( ! 425: PSZ pszServer, ! 426: USHORT uJobId ! 427: ); ! 428: ! 429: SPLERR SPLENTRY DosPrintJobDel( ! 430: PSZ pszServer, ! 431: USHORT uJobId ! 432: ); ! 433: ! 434: SPLERR SPLENTRY DosPrintJobEnum( ! 435: PSZ pszServer, ! 436: PSZ pszQueueName, ! 437: USHORT uLevel, ! 438: PBYTE pbBuf, ! 439: USHORT cbBuf, ! 440: PUSHORT pcReturned, ! 441: PUSHORT pcTotal ! 442: ); ! 443: ! 444: SPLERR SPLENTRY DosPrintJobGetId( ! 445: HFILE hFile, ! 446: PPRIDINFO pInfo, ! 447: USHORT cbInfo ! 448: ); ! 449: ! 450: /* ! 451: * Values for parmnum in DosPrintQSetInfo. ! 452: */ ! 453: ! 454: #define PRQ_PRIORITY_PARMNUM 2 ! 455: #define PRQ_STARTTIME_PARMNUM 3 ! 456: #define PRQ_UNTILTIME_PARMNUM 4 ! 457: #define PRQ_SEPARATOR_PARMNUM 5 ! 458: #define PRQ_PROCESSOR_PARMNUM 6 ! 459: #define PRQ_DESTINATIONS_PARMNUM 7 ! 460: #define PRQ_PARMS_PARMNUM 8 ! 461: #define PRQ_COMMENT_PARMNUM 9 ! 462: #define PRQ_PRINTERS_PARMNUM 12 ! 463: #define PRQ_DRIVERNAME_PARMNUM 13 ! 464: #define PRQ_DRIVERDATA_PARMNUM 14 ! 465: #define PRQ_MAXPARMNUM 14 ! 466: ! 467: /* ! 468: * Print Queue Priority ! 469: */ ! 470: ! 471: #define PRQ_MAX_PRIORITY 1 /* highest priority */ ! 472: #define PRQ_DEF_PRIORITY 5 ! 473: #define PRQ_MIN_PRIORITY 9 /* lowest priority */ ! 474: #define PRQ_NO_PRIORITY 0 ! 475: ! 476: /* ! 477: * Print queue status bitmask and values. ! 478: */ ! 479: ! 480: #define PRQ_STATUS_MASK 3 ! 481: #define PRQ_ACTIVE 0 ! 482: #define PRQ_PAUSED 1 ! 483: #define PRQ_ERROR 2 ! 484: #define PRQ_PENDING 3 ! 485: ! 486: /* ! 487: * Print queue status bits for level 3 ! 488: */ ! 489: ! 490: #define PRQ3_PAUSED 0x1 ! 491: #define PRQ3_PENDING 0x2 ! 492: ! 493: /* ! 494: * Values for parmnum in DosPrintJobSetInfo. ! 495: */ ! 496: ! 497: #define PRJ_NOTIFYNAME_PARMNUM 3 ! 498: #define PRJ_DATATYPE_PARMNUM 4 ! 499: #define PRJ_PARMS_PARMNUM 5 ! 500: #define PRJ_POSITION_PARMNUM 6 ! 501: #define PRJ_COMMENT_PARMNUM 11 ! 502: #define PRJ_DOCUMENT_PARMNUM 12 ! 503: #define PRJ_PRIORITY_PARMNUM 14 ! 504: #define PRJ_PROCPARMS_PARMNUM 16 ! 505: #define PRJ_DRIVERDATA_PARMNUM 18 ! 506: #define PRJ_MAXPARMNUM 18 ! 507: ! 508: /* ! 509: * Bitmap masks for status field of PRJINFO. ! 510: */ ! 511: ! 512: /* 2-7 bits also used in device status */ ! 513: ! 514: #define PRJ_QSTATUS 0x0003 /* Bits 0,1 */ ! 515: #define PRJ_DEVSTATUS 0x0ffc /* 2-11 bits */ ! 516: #define PRJ_COMPLETE 0x0004 /* Bit 2 */ ! 517: #define PRJ_INTERV 0x0008 /* Bit 3 */ ! 518: #define PRJ_ERROR 0x0010 /* Bit 4 */ ! 519: #define PRJ_DESTOFFLINE 0x0020 /* Bit 5 */ ! 520: #define PRJ_DESTPAUSED 0x0040 /* Bit 6 */ ! 521: #define PRJ_NOTIFY 0x0080 /* Bit 7 */ ! 522: #define PRJ_DESTNOPAPER 0x0100 /* Bit 8 */ ! 523: #define PRJ_DESTFORMCHG 0x0200 /* BIT 9 */ ! 524: #define PRJ_DESTCRTCHG 0x0400 /* BIT 10 */ ! 525: #define PRJ_DESTPENCHG 0x0800 /* BIT 11 */ ! 526: #define PRJ_DELETED 0x8000 /* Bit 15 */ ! 527: ! 528: /* ! 529: * Values of PRJ_QSTATUS bits in fsStatus field of PRJINFO. ! 530: */ ! 531: ! 532: #define PRJ_QS_QUEUED 0 ! 533: #define PRJ_QS_PAUSED 1 ! 534: #define PRJ_QS_SPOOLING 2 ! 535: #define PRJ_QS_PRINTING 3 ! 536: ! 537: /* ! 538: * Print Job Priority ! 539: */ ! 540: ! 541: #define PRJ_MAX_PRIORITY 99 /* lowest priority */ ! 542: #define PRJ_MIN_PRIORITY 1 /* highest priority */ ! 543: #define PRJ_NO_PRIORITY 0 ! 544: ! 545: ! 546: /* ! 547: * Bitmap masks for status field of PRDINFO. ! 548: * see PRJ_... for bits 2-11 ! 549: */ ! 550: ! 551: #define PRD_STATUS_MASK 0x0003 /* Bits 0,1 */ ! 552: #define PRD_DEVSTATUS 0x0ffc /* 2-11 bits */ ! 553: ! 554: /* ! 555: * Values of PRD_STATUS_MASK bits in fsStatus field of PRDINFO. ! 556: */ ! 557: ! 558: #define PRD_ACTIVE 0 ! 559: #define PRD_PAUSED 1 ! 560: ! 561: /* ! 562: * Control codes used in DosPrintDestControl. ! 563: */ ! 564: ! 565: #define PRD_DELETE 0 ! 566: #define PRD_PAUSE 1 ! 567: #define PRD_CONT 2 ! 568: #define PRD_RESTART 3 ! 569: ! 570: /* ! 571: * Values for parmnum in DosPrintDestSetInfo. ! 572: */ ! 573: ! 574: #define PRD_LOGADDR_PARMNUM 3 ! 575: #define PRD_COMMENT_PARMNUM 7 ! 576: #define PRD_DRIVERS_PARMNUM 8 ! 577: #define PRD_TIMEOUT_PARMNUM 10 ! 578: ! 579: #endif /* INCL_SPLDOSPRINT */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.