Annotation of pmsdk/samples/iniedit/print.c, revision 1.1

1.1     ! root        1: /******************************* Module Header ******************************\
        !             2: * Module Name: Print.c
        !             3: *
        !             4: *
        !             5: * Created by Microsoft Corporation, 1989
        !             6: *
        !             7: *
        !             8: * PM OS2.ini Editor
        !             9: *
        !            10: * Printing Functions
        !            11: *
        !            12: \***************************************************************************/
        !            13: 
        !            14: 
        !            15: #define LINT_ARGS
        !            16: #define INCL_WINSHELLDATA
        !            17: #define INCL_GPIBITMAPS
        !            18: #define INCL_GPIREGIONS
        !            19: #define INCL_GPILCIDS
        !            20: #define INCL_GPIPRIMITIVES
        !            21: #define INCL_DEV
        !            22: 
        !            23: #include <string.h>
        !            24: #include <stdio.h>
        !            25: 
        !            26: #include <os2.h>
        !            27: 
        !            28: #include "IniEdit.h"
        !            29: 
        !            30: 
        !            31: /******************************* Constants *********************************/
        !            32: 
        !            33: #define LEFT_MARGIN      3
        !            34: #define TOP_MARGIN       7
        !            35: #define BOTTOM_MARGIN   15
        !            36: #define        MAX_PRINT_LEN   1024
        !            37: 
        !            38: 
        !            39: /******************************* Externals *********************************/
        !            40: 
        !            41: extern USHORT        cAppNames;
        !            42: extern PGROUPSTRUCT  pGroups;
        !            43: extern HAB           habIniEdit;
        !            44: extern USHORT        usLineHeight;
        !            45: extern USHORT        usPrintFormat;
        !            46: 
        !            47: /******************************* Internals ********************************/
        !            48: CHAR   szBuf[MAX_STRING_LEN];                  // Output character buffer
        !            49: CHAR   szPrinter[MAX_PRINT_LEN];               // Logical Printer Name
        !            50: CHAR   szDetails[MAX_PRINT_LEN];               // Logical Printer Details
        !            51: 
        !            52: 
        !            53: /***************************** Function Header *****************************\
        !            54: *
        !            55: * PrintThread
        !            56: *
        !            57: *
        !            58: * Prints the ini info in specified format
        !            59: *
        !            60: \***************************************************************************/
        !            61: 
        !            62: VOID PrintThread()
        !            63: {
        !            64:     HAB      habPrint;                          // HAB of Print Thread
        !            65:     HDC      hdcPrint;                          // DC of Printer
        !            66:     HPS      hpsPrint;                          // PS of Printer
        !            67:     SIZEL    sizel;                             // Size of PS to Create
        !            68:     POINTL   ptlOutput;                         // Output location
        !            69:     BYTE     abOut[50];                         // DevEscape Output
        !            70:     ULONG    ulOut;                             // DevEscape Output Count
        !            71:     USHORT   usHeight;                          // Height of Printer Page
        !            72:     USHORT   cch;                               // Count of Characters in buffer
        !            73:     INT      i,j;                               // Loop Counters
        !            74:     DEVOPENSTRUC  dop;                          // DevOpenDC Info
        !            75:     CHAR     szMessage[80];
        !            76: 
        !            77:     /* initialization of thread */
        !            78:     if (!(habPrint = WinInitialize(NULL))) DosExit(EXIT_THREAD, -1);
        !            79: 
        !            80: 
        !            81:     /*** Select Port ***/
        !            82:     /* get name of default logical printer */
        !            83:     cch = WinQueryProfileString(habPrint, "PM_SPOOLER", "PRINTER",
        !            84:                            "",                /* default  */
        !            85:                            szPrinter,
        !            86:                            MAX_PRINT_LEN);    /* max chars */
        !            87: 
        !            88:     szPrinter[cch-2] = 0;                     /* remove terminating ';' */
        !            89: 
        !            90:     /* get specifics of default logical printer */
        !            91:     cch = WinQueryProfileString(habPrint, "PM_SPOOLER_PRINTER", szPrinter,
        !            92:                            "",                /* default  */
        !            93:                            szDetails,
        !            94:                            MAX_PRINT_LEN);    /* max chars */
        !            95: 
        !            96: 
        !            97:     /* info in form of "port; driver; logical address" */
        !            98:     /* grab driver name; one past semicolon */
        !            99:     dop.pszDriverName = strchr( szDetails, ';' )+1;
        !           100: 
        !           101:     /* Grab logical address */
        !           102:     dop.pszLogAddress = strchr( dop.pszDriverName, ';' )+1;
        !           103: 
        !           104:     /* Make driver and Logical address Null terminated */
        !           105:     dop.pszLogAddress = strtok( dop.pszLogAddress, ",;" );
        !           106:     dop.pszDriverName = strtok( dop.pszDriverName, ",.;" );  /* Driver.Model */
        !           107: 
        !           108:     dop.pdriv = NULL;
        !           109:     dop.pszDataType = NULL;
        !           110: 
        !           111:     /* Create Printer DC */
        !           112:     hdcPrint = DevOpenDC( habPrint, OD_QUEUED, "*", 3L, (PDEVOPENDATA)&dop,
        !           113:             (HDC)NULL);
        !           114: 
        !           115:     if( hdcPrint == (HDC)NULL )
        !           116:         {
        !           117:        DosExit(EXIT_THREAD, -1);
        !           118:         }
        !           119: 
        !           120:     strcpy( szBuf, (usPrintFormat == APP_FORM) ? SZAPP : SZALL );
        !           121:     DevEscape( hdcPrint, DEVESC_STARTDOC, (LONG)strlen( szBuf ), (PBYTE)szBuf,
        !           122:             &ulOut, (PBYTE)NULL );
        !           123: 
        !           124:     /* Determine size of page */
        !           125:     DevQueryCaps( hdcPrint, CAPS_HEIGHT, 1L, (PLONG)&usHeight );
        !           126:     ptlOutput.y = usHeight - TOP_MARGIN - usLineHeight;
        !           127:     ptlOutput.x = LEFT_MARGIN;
        !           128: 
        !           129:     /* Create Printer PS */
        !           130:     sizel.cx = sizel.cy = 0L;
        !           131:     hpsPrint = GpiCreatePS( habPrint, hdcPrint, &sizel,
        !           132:             PU_PELS | GPIF_DEFAULT | GPIT_NORMAL | GPIA_ASSOC );
        !           133: 
        !           134:     if( hpsPrint == (HPS)NULL )
        !           135:         {
        !           136:        DosExit(EXIT_THREAD, -1);
        !           137:         }
        !           138: 
        !           139: 
        !           140:     /* print items */
        !           141:     if( usPrintFormat == APP_FORM )
        !           142:         {
        !           143:         for( i=0; i<cAppNames; i++ )
        !           144:             {
        !           145:             sprintf(szMessage,"CharString: X = %ld,  Y = %ld",
        !           146:                                                ptlOutput.x, ptlOutput.y);
        !           147:             GpiCharStringAt( hpsPrint, &ptlOutput, (LONG)strlen( pGroups[i].szAppName ),
        !           148:                     pGroups[i].szAppName );
        !           149:             ptlOutput.y -= usLineHeight;
        !           150: 
        !           151:             if( ptlOutput.y <= BOTTOM_MARGIN )
        !           152:                 {
        !           153:                 DevEscape( hdcPrint, DEVESC_NEWFRAME, 0L, (PBYTE)NULL , &ulOut, abOut );
        !           154:                 ptlOutput.y = usHeight - TOP_MARGIN - usLineHeight;
        !           155:                 }
        !           156: 
        !           157:             }
        !           158:         }  /* if */
        !           159:     else
        !           160:         {
        !           161:         /* Print App Names */
        !           162:         for( i=0; i<cAppNames; i++ )
        !           163:             {
        !           164:             GpiCharStringAt( hpsPrint, &ptlOutput, (LONG)strlen( pGroups[i].szAppName ),
        !           165:                     pGroups[i].szAppName );
        !           166:             ptlOutput.y -= usLineHeight;
        !           167:             if( ptlOutput.y <= BOTTOM_MARGIN )
        !           168:                 {
        !           169:                 DevEscape( hdcPrint, DEVESC_NEWFRAME, 0L, (PBYTE)NULL , &ulOut, abOut );
        !           170:                 ptlOutput.y = usHeight - TOP_MARGIN - usLineHeight;
        !           171:                 }
        !           172: 
        !           173:             /* Print Key Value Pairs for current App Name */
        !           174:             for( j=0; j<pGroups[i].cKeys; j++ )
        !           175:                 {
        !           176:                 sprintf( szBuf, "   %s: %s", pGroups[i].pPairs[j].szKey,
        !           177:                         pGroups[i].pPairs[j].szValue );
        !           178: 
        !           179:                 if( GpiCharStringAt( hpsPrint, &ptlOutput, (LONG)strlen( szBuf ), szBuf ) == GPI_ERROR )
        !           180:                        ;
        !           181: 
        !           182:                 ptlOutput.y -= usLineHeight;
        !           183:                 if( ptlOutput.y <= BOTTOM_MARGIN )
        !           184:                     {
        !           185:                     DevEscape( hdcPrint, DEVESC_NEWFRAME, 0L, (PBYTE)NULL , &ulOut, abOut );
        !           186:                     ptlOutput.y = usHeight - TOP_MARGIN - usLineHeight;
        !           187:                     }
        !           188:                 }  /* for */
        !           189:             }  /* for */
        !           190: 
        !           191:         }
        !           192: 
        !           193:     /* Cleanup */
        !           194:     DevEscape( hdcPrint, DEVESC_ENDDOC, 0L, (PBYTE)NULL , &ulOut, abOut );
        !           195:     GpiAssociate( hpsPrint, (HDC)NULL );
        !           196:     GpiDestroyPS( hpsPrint );
        !           197:     DevCloseDC( hdcPrint );
        !           198:     DosExit(EXIT_THREAD, 0);
        !           199: }  /* PrintThread */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.