home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk12 / iniedit / print.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-05  |  6.6 KB  |  201 lines

  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 "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.     USHORT   i,j;                               // Loop Counters
  75.     DEVOPENSTRUC  dop;                          // DevOpenDC Info
  76.     CHAR     szMessage[80];
  77.  
  78.     /* initialization of thread */
  79.     if (!(habPrint = WinInitialize(0))) DosExit(EXIT_THREAD, -1);
  80.  
  81.  
  82.     /*** Select Port ***/
  83.     /* get name of default logical printer */
  84.     cch = WinQueryProfileString(habPrint, "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 = WinQueryProfileString(habPrint, "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 */
  201.