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

unix.superglobalmegacorp.com

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