Annotation of pmsdk/samples/iniedit/print.c, revision 1.1.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.