Annotation of mstools/ole20/samples/ole2ui/targtdev.c, revision 1.1

1.1     ! root        1: /*************************************************************************
        !             2: **
        !             3: **    OLE 2 Standard Utilities
        !             4: **
        !             5: **    olestd.c
        !             6: **
        !             7: **    This file contains utilities that are useful for dealing with 
        !             8: **    target devices.
        !             9: **
        !            10: **    (c) Copyright Microsoft Corp. 1992 All Rights Reserved
        !            11: **
        !            12: *************************************************************************/
        !            13: 
        !            14: #define STRICT  1
        !            15: #include "ole2ui.h"
        !            16: #ifndef WIN32
        !            17: #include <print.h>
        !            18: #endif 
        !            19: 
        !            20: /*
        !            21:  * OleStdCreateDC()
        !            22:  *
        !            23:  * Purpose:
        !            24:  *
        !            25:  * Parameters:
        !            26:  *
        !            27:  * Return Value:
        !            28:  *    SCODE  -  S_OK if successful
        !            29:  */
        !            30: STDAPI_(HDC) OleStdCreateDC(DVTARGETDEVICE FAR* ptd)
        !            31: {
        !            32:     HDC hdc=NULL;
        !            33:     LPDEVNAMES lpDevNames;
        !            34:     LPDEVMODE lpDevMode;
        !            35:     LPSTR lpszDriverName;
        !            36:     LPSTR lpszDeviceName;
        !            37:     LPSTR lpszPortName;
        !            38: 
        !            39:     if (ptd == NULL) {
        !            40:         hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
        !            41:         goto errReturn;
        !            42:     }
        !            43: 
        !            44:     lpDevNames = (LPDEVNAMES) ptd; // offset for size field
        !            45: 
        !            46:     if (ptd->tdExtDevmodeOffset == 0) {
        !            47:         lpDevMode = NULL;
        !            48:     }else{
        !            49:         lpDevMode  = (LPDEVMODE) ((LPSTR)ptd + ptd->tdExtDevmodeOffset);
        !            50:     }
        !            51: 
        !            52:     lpszDriverName = (LPSTR) lpDevNames + ptd->tdDriverNameOffset;
        !            53:     lpszDeviceName = (LPSTR) lpDevNames + ptd->tdDeviceNameOffset;
        !            54:     lpszPortName   = (LPSTR) lpDevNames + ptd->tdPortNameOffset;
        !            55: 
        !            56:     hdc = CreateDC(lpszDriverName, lpszDeviceName, lpszPortName, lpDevMode);
        !            57: 
        !            58: errReturn:
        !            59:     return hdc;
        !            60: }
        !            61: 
        !            62: 
        !            63: /*
        !            64:  * OleStdCreateIC()
        !            65:  *
        !            66:  * Purpose: Same as OleStdCreateDC, except that information context is 
        !            67:  *          created, rather than a whole device context.  (CreateIC is 
        !            68:  *          used rather than CreateDC).  
        !            69:  *          OleStdDeleteDC is still used to delete the information context.
        !            70:  *
        !            71:  * Parameters:
        !            72:  *
        !            73:  * Return Value:
        !            74:  *    SCODE  -  S_OK if successful
        !            75:  */
        !            76: STDAPI_(HDC) OleStdCreateIC(DVTARGETDEVICE FAR* ptd)
        !            77: {
        !            78:     HDC hdcIC=NULL;
        !            79:     LPDEVNAMES lpDevNames;
        !            80:     LPDEVMODE lpDevMode;
        !            81:     LPSTR lpszDriverName;
        !            82:     LPSTR lpszDeviceName;
        !            83:     LPSTR lpszPortName;
        !            84: 
        !            85:     if (ptd == NULL) {
        !            86:         hdcIC = CreateIC("DISPLAY", NULL, NULL, NULL);
        !            87:         goto errReturn;
        !            88:     }
        !            89: 
        !            90:     lpDevNames = (LPDEVNAMES) ptd; // offset for size field
        !            91: 
        !            92:     lpDevMode  = (LPDEVMODE) ((LPSTR)ptd + ptd->tdExtDevmodeOffset);
        !            93: 
        !            94:     lpszDriverName = (LPSTR) lpDevNames + ptd->tdDriverNameOffset;
        !            95:     lpszDeviceName = (LPSTR) lpDevNames + ptd->tdDeviceNameOffset;
        !            96:     lpszPortName   = (LPSTR) lpDevNames + ptd->tdPortNameOffset;
        !            97: 
        !            98:     hdcIC = CreateIC(lpszDriverName, lpszDeviceName, lpszPortName, lpDevMode);
        !            99: 
        !           100: errReturn:
        !           101:     return hdcIC;
        !           102: }
        !           103: 
        !           104: 
        !           105: /*
        !           106:  * OleStdCreateTargetDevice()
        !           107:  *
        !           108:  * Purpose:
        !           109:  *
        !           110:  * Parameters:
        !           111:  *
        !           112:  * Return Value:
        !           113:  *    SCODE  -  S_OK if successful
        !           114:  */
        !           115: STDAPI_(DVTARGETDEVICE FAR*) OleStdCreateTargetDevice(LPPRINTDLG lpPrintDlg)
        !           116: {
        !           117:     DVTARGETDEVICE FAR* ptd=NULL;
        !           118:     LPDEVNAMES lpDevNames, pDN;
        !           119:     LPDEVMODE lpDevMode, pDM;
        !           120:     UINT nMaxOffset;
        !           121:     LPSTR pszName;
        !           122:     DWORD dwDevNamesSize, dwDevModeSize, dwPtdSize;
        !           123: 
        !           124:     if ((pDN = (LPDEVNAMES)GlobalLock(lpPrintDlg->hDevNames)) == NULL) {
        !           125:         goto errReturn;
        !           126:     }
        !           127: 
        !           128:     if ((pDM = (LPDEVMODE)GlobalLock(lpPrintDlg->hDevMode)) == NULL) {
        !           129:         goto errReturn;
        !           130:     }
        !           131: 
        !           132:     nMaxOffset =  (pDN->wDriverOffset > pDN->wDeviceOffset) ?
        !           133:         pDN->wDriverOffset : pDN->wDeviceOffset ;
        !           134: 
        !           135:     nMaxOffset =  (pDN->wOutputOffset > nMaxOffset) ?
        !           136:         pDN->wOutputOffset : nMaxOffset ;
        !           137: 
        !           138:     pszName = (LPSTR)pDN + nMaxOffset;
        !           139: 
        !           140:     dwDevNamesSize = (DWORD)(nMaxOffset+lstrlen(pszName) + 1/* NULL term */);
        !           141:     dwDevModeSize = (DWORD) (pDM->dmSize + pDM->dmDriverExtra);
        !           142: 
        !           143:     dwPtdSize = sizeof(DWORD) + dwDevNamesSize + dwDevModeSize;
        !           144: 
        !           145:     if ((ptd = (DVTARGETDEVICE FAR*)OleStdMalloc(dwPtdSize)) != NULL) {
        !           146: 
        !           147:         // copy in the info
        !           148:         ptd->tdSize = (UINT)dwPtdSize;
        !           149: 
        !           150:         lpDevNames = (LPDEVNAMES) &ptd->tdDriverNameOffset;
        !           151:         _fmemcpy(lpDevNames, pDN, (size_t)dwDevNamesSize);
        !           152: 
        !           153:         lpDevMode=(LPDEVMODE)((LPSTR)&ptd->tdDriverNameOffset+dwDevNamesSize);
        !           154:         _fmemcpy(lpDevMode, pDM, (size_t)dwDevModeSize);
        !           155: 
        !           156:         ptd->tdDriverNameOffset += 4 ;
        !           157:         ptd->tdDeviceNameOffset += 4 ;
        !           158:         ptd->tdPortNameOffset   += 4 ;
        !           159:         ptd->tdExtDevmodeOffset = (UINT)dwDevNamesSize + 4 ;
        !           160:     }
        !           161: 
        !           162: errReturn:
        !           163:     GlobalUnlock(lpPrintDlg->hDevNames);
        !           164:     GlobalUnlock(lpPrintDlg->hDevMode);
        !           165: 
        !           166:     return ptd;
        !           167: } 
        !           168: 
        !           169: 
        !           170: 
        !           171: /*
        !           172:  * OleStdDeleteTargetDevice()
        !           173:  *
        !           174:  * Purpose:
        !           175:  *
        !           176:  * Parameters:
        !           177:  *
        !           178:  * Return Value:
        !           179:  *    SCODE  -  S_OK if successful
        !           180:  */
        !           181: STDAPI_(BOOL) OleStdDeleteTargetDevice(DVTARGETDEVICE FAR* ptd)
        !           182: {
        !           183:     BOOL res=TRUE;
        !           184: 
        !           185:     if (ptd != NULL) {
        !           186:         OleStdFree(ptd);
        !           187:     }
        !           188: 
        !           189:     return res;
        !           190: }
        !           191: 
        !           192: 
        !           193: 
        !           194: /*
        !           195:  * OleStdCopyTargetDevice()
        !           196:  *
        !           197:  * Purpose:
        !           198:  *  duplicate a TARGETDEVICE struct. this function allocates memory for 
        !           199:  *  the copy. the caller MUST free the allocated copy when done with it 
        !           200:  *  using the standard allocator returned from CoGetMalloc.
        !           201:  *  (OleStdFree can be used to free the copy).
        !           202:  *
        !           203:  * Parameters:
        !           204:  *  ptdSrc      pointer to source TARGETDEVICE
        !           205:  *
        !           206:  * Return Value:
        !           207:  *    pointer to allocated copy of ptdSrc
        !           208:  *    if ptdSrc==NULL then retuns NULL is returned.
        !           209:  *    if ptdSrc!=NULL and memory allocation fails, then NULL is returned
        !           210:  */
        !           211: STDAPI_(DVTARGETDEVICE FAR*) OleStdCopyTargetDevice(DVTARGETDEVICE FAR* ptdSrc)
        !           212: {
        !           213:   DVTARGETDEVICE FAR* ptdDest = NULL;
        !           214: 
        !           215:   if (ptdSrc == NULL) {
        !           216:     return NULL;
        !           217:   }
        !           218: 
        !           219:   if ((ptdDest = (DVTARGETDEVICE FAR*)OleStdMalloc(ptdSrc->tdSize)) != NULL) {
        !           220:     _fmemcpy(ptdDest, ptdSrc, (size_t)ptdSrc->tdSize);
        !           221:   }
        !           222: 
        !           223:   return ptdDest;
        !           224: } 
        !           225: 
        !           226: 
        !           227: /*
        !           228:  * OleStdCopyFormatEtc()
        !           229:  *
        !           230:  * Purpose:
        !           231:  *  Copies the contents of a FORMATETC structure. this function takes 
        !           232:  *  special care to copy correctly copying the pointer to the TARGETDEVICE 
        !           233:  *  contained within the source FORMATETC structure.
        !           234:  *  if the source FORMATETC has a non-NULL TARGETDEVICE, then a copy
        !           235:  *  of the TARGETDEVICE will be allocated for the destination of the 
        !           236:  *  FORMATETC (petcDest).
        !           237:  *
        !           238:  *  OLE2NOTE: the caller MUST free the allocated copy of the TARGETDEVICE 
        !           239:  *  within the destination FORMATETC when done with it 
        !           240:  *  using the standard allocator returned from CoGetMalloc.
        !           241:  *  (OleStdFree can be used to free the copy).
        !           242:  *
        !           243:  * Parameters:
        !           244:  *  petcDest      pointer to destination FORMATETC
        !           245:  *  petcSrc       pointer to source FORMATETC
        !           246:  *
        !           247:  * Return Value:
        !           248:  *    pointer to allocated copy of ptdSrc; retuns NULL if not successful
        !           249:  */
        !           250: STDAPI_(BOOL) OleStdCopyFormatEtc(LPFORMATETC petcDest, LPFORMATETC petcSrc)
        !           251: {
        !           252:   if ((petcDest == NULL) || (petcSrc == NULL)) {
        !           253:     return FALSE;
        !           254:   }
        !           255: 
        !           256:   petcDest->cfFormat = petcSrc->cfFormat;
        !           257:   petcDest->ptd      = OleStdCopyTargetDevice(petcSrc->ptd);
        !           258:   petcDest->dwAspect = petcSrc->dwAspect;
        !           259:   petcDest->lindex   = petcSrc->lindex;
        !           260:   petcDest->tymed    = petcSrc->tymed;
        !           261: 
        !           262:   return TRUE;
        !           263:       
        !           264: }
        !           265: 

unix.superglobalmegacorp.com

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