亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fdi.h

?? Microsoft CAB庫壓縮文件
?? H
?? 第 1 頁 / 共 4 頁
字號:
/*
 *  FDI.H -- File Decompression Interface
 *
 *  Copyright (C) Microsoft Corporation 1993-1997
 *  All Rights Reserved.
 */

#ifdef  __cplusplus
extern "C" {
#endif

#ifndef INCLUDED_TYPES_FCI_FDI
#define INCLUDED_TYPES_FCI_FDI 1

#ifndef HUGE
#define HUGE
#endif

#ifndef FAR
#define FAR
#endif

#ifndef DIAMONDAPI
#define DIAMONDAPI __cdecl
#endif


//** Specify structure packing explicitly for clients of FDI
#pragma pack(4)

//** Don't redefine types defined in Win16 WINDOWS.H (_INC_WINDOWS)
//   or Win32 WINDOWS.H (_WINDOWS_)
//
#if !defined(_INC_WINDOWS) && !defined(_WINDOWS_)
typedef int            BOOL;     /* f */
typedef unsigned char  BYTE;     /* b */
typedef unsigned int   UINT;     /* ui */
typedef unsigned short USHORT;   /* us */
typedef unsigned long  ULONG;    /* ul */
#endif   // _INC_WINDOWS

typedef unsigned long  CHECKSUM; /* csum */

typedef unsigned long  UOFF;     /* uoff - uncompressed offset */
typedef unsigned long  COFF;     /* coff - cabinet file offset */


#ifndef TRUE
#define TRUE    1
#endif

#ifndef FALSE
#define FALSE   0
#endif

#ifndef NULL
#define NULL    0
#endif


/***    ERF - Error structure
 *
 *  This structure returns error information from FCI/FDI.  The caller should
 *  not modify this structure.
 */
typedef struct {
    int     erfOper;            // FCI/FDI error code -- see FDIERROR_XXX
                                //  and FCIERR_XXX equates for details.

    int     erfType;            // Optional error value filled in by FCI/FDI.
                                // For FCI, this is usually the C run-time
                                // *errno* value.

    BOOL    fError;             // TRUE => error present
} ERF;      /* erf */
typedef ERF FAR *PERF;  /* perf */

#ifdef _DEBUG
// don't hide statics from map during debugging
#define STATIC      
#else // !DEBUG
#define STATIC static
#endif // !DEBUG

#define CB_MAX_CHUNK            32768U
#define CB_MAX_DISK         0x7ffffffL
#define CB_MAX_FILENAME            256
#define CB_MAX_CABINET_NAME        256
#define CB_MAX_CAB_PATH            256
#define CB_MAX_DISK_NAME           256

/***    tcompXXX - Compression types
 *
 *  These are passed to FCIAddFile(), and are also stored in the CFFOLDER
 *  structures in cabinet files.
 *
 *  NOTE: We reserve bits for the TYPE, QUANTUM_LEVEL, and QUANTUM_MEM
 *        to provide room for future expansion.  Since this value is stored
 *        in the CFDATA records in the cabinet file, we don't want to
 *        have to change the format for existing compression configurations
 *        if we add new ones in the future.  This will allows us to read
 *        old cabinet files in the future.
 */

typedef unsigned short TCOMP; /* tcomp */

#define tcompMASK_TYPE          0x000F  // Mask for compression type
#define tcompTYPE_NONE          0x0000  // No compression
#define tcompTYPE_MSZIP         0x0001  // MSZIP
#define tcompTYPE_QUANTUM       0x0002  // Quantum
#define tcompTYPE_LZX           0x0003  // LZX
#define tcompBAD                0x000F  // Unspecified compression type

#define tcompMASK_LZX_WINDOW    0x1F00  // Mask for LZX Compression Memory
#define tcompLZX_WINDOW_LO      0x0F00  // Lowest LZX Memory (15)
#define tcompLZX_WINDOW_HI      0x1500  // Highest LZX Memory (21)
#define tcompSHIFT_LZX_WINDOW        8  // Amount to shift over to get int

#define tcompMASK_QUANTUM_LEVEL 0x00F0  // Mask for Quantum Compression Level
#define tcompQUANTUM_LEVEL_LO   0x0010  // Lowest Quantum Level (1)
#define tcompQUANTUM_LEVEL_HI   0x0070  // Highest Quantum Level (7)
#define tcompSHIFT_QUANTUM_LEVEL     4  // Amount to shift over to get int

#define tcompMASK_QUANTUM_MEM   0x1F00  // Mask for Quantum Compression Memory
#define tcompQUANTUM_MEM_LO     0x0A00  // Lowest Quantum Memory (10)
#define tcompQUANTUM_MEM_HI     0x1500  // Highest Quantum Memory (21)
#define tcompSHIFT_QUANTUM_MEM       8  // Amount to shift over to get int

#define tcompMASK_RESERVED      0xE000  // Reserved bits (high 3 bits)



#define CompressionTypeFromTCOMP(tc) \
            ((tc) & tcompMASK_TYPE)

#define CompressionLevelFromTCOMP(tc) \
            (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)

#define CompressionMemoryFromTCOMP(tc) \
            (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)

#define TCOMPfromTypeLevelMemory(t,l,m)           \
            (((m) << tcompSHIFT_QUANTUM_MEM  ) |  \
             ((l) << tcompSHIFT_QUANTUM_LEVEL) |  \
             ( t                             ))

#define LZXCompressionWindowFromTCOMP(tc) \
            (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)

#define TCOMPfromLZXWindow(w)      \
            (((w) << tcompSHIFT_LZX_WINDOW ) |  \
             ( tcompTYPE_LZX ))


//** Revert to default structure packing
#pragma pack()

#endif // !INCLUDED_TYPES_FCI_FDI

/*
 *  Concepts:
 *      A *cabinet* file contains one or more *folders*.  A folder contains
 *      one or more (pieces of) *files*.  A folder is by definition a
 *      decompression unit, i.e., to extract a file from a folder, all of
 *      the data from the start of the folder up through and including the
 *      desired file must be read and decompressed.
 *
 *      A folder can span one (or more) cabinet boundaries, and by implication
 *      a file can also span one (or more) cabinet boundaries.  Indeed, more
 *      than one file can span a cabinet boundary, since FCI concatenates
 *      files together into a single data stream before compressing (actually,
 *      at most one file will span any one cabinet boundary, but FCI does
 *      not know which file this is, since the mapping from uncompressed bytes
 *      to compressed bytes is pretty obscure.  Also, since FCI compresses
 *      in blocks of 32K (at present), any files with data in a 32K block that
 *      spans a cabinet boundary require FDI to read both cabinet files
 *      to get the two halves of the compressed block).
 *
 *  Overview:
 *      The File Decompression Interface is used to simplify the reading of
 *      cabinet files.  A setup program will proceed in a manner very
 *      similar to the pseudo code below.  An FDI context is created, the
 *      setup program calls FDICopy() for each cabinet to be processed.  For
 *      each file in the cabinet, FDICopy() calls a notification callback
 *      routine, asking the setup program if the file should be copied.
 *      This call-back approach is great because it allows the cabinet file
 *      to be read and decompressed in an optimal manner, and also makes FDI
 *      independent of the run-time environment -- FDI makes *no* C run-time
 *      calls whatsoever.  All memory allocation and file I/O functions are
 *      passed into FDI by the client.
 *
 *      main(...)
 *      {
 *          // Read INF file to construct list of desired files.   
 *          //  Ideally, these would be sorted in the same order as the
 *          //  files appear in the cabinets, so that you can just walk
 *          //  down the list in response to fdintCOPY_FILE notifications.
 *
 *          // Construct list of required cabinets. 
 *
 *          hfdi = FDICreate(...);          // Create FDI context
 *          For (cabinet in List of Cabinets) {
 *              FDICopy(hfdi,cabinet,fdiNotify,...);  // Process each cabinet
 *          }
 *          FDIDestroy(hfdi);
 *          ...
 *      }
 *
 *      // Notification callback function 
 *      fdiNotify(fdint,...)
 *      {
 *          If (User Aborted)               // Permit cancellation
 *              if (fdint == fdintCLOSE_FILE_INFO)
 *                  close open file
 *              return -1;
 *          switch (fdint) {
 *              case fdintCOPY_FILE:        // File to copy, maybe
 *                  // Check file against list of desired files 
 *                  if want to copy file
 *                      open destination file and return handle
 *                  else
 *                      return NULL;        // Skip file
 *              case fdintCLOSE_FILE_INFO:
 *                  close file
 *                  set date, time, and attributes
 *
 *              case fdintNEXT_CABINET:
 *                  if not an error callback
 *                      Tell FDI to use suggested directory name
 *                  else
 *                      Tell user what the problem was, and prompt
 *                          for a new disk and/or path.
 *                      if user aborts
 *                          Tell FDI to abort
 *                      else
 *                          return to FDI to try another cabinet
 *
 *              default:
 *                  return 0;               // more messages may be defined
 *              ...
 *      }
 *
 *  Error Handling Suggestions:
 *      Since you the client have passed in *all* of the functions that
 *      FDI uses to interact with the "outside" world, you are in prime
 *      position to understand and deal with errors.
 *
 *      The general philosophy of FDI is to pass all errors back up to
 *      the client.  FDI returns fairly generic error codes in the case
 *      where one of the callback functions (PFNOPEN, PFNREAD, etc.) fail,
 *      since it assumes that the callback function will save enough
 *      information in a static/global so that when FDICopy() returns
 *      fail, the client can examine this information and report enough
 *      detail about the problem that the user can take corrective action.
 *
 *      For very specific errors (CORRUPT_CABINET, for example), FDI returns
 *      very specific error codes.
 *
 *      THE BEST POLICY IS FOR YOUR CALLBACK ROUTINES TO AVOID RETURNING
 *      ERRORS TO FDI!
 *
 *      Examples:
 *          (1) If the disk is getting full, instead of returning an error
 *              from your PFNWRITE function, you should -- inside your
 *              PFNWRITE function -- put up a dialog telling the user to free
 *              some disk space.
 *          (2) When you get the fdintNEXT_CABINET notification, you should
 *              verify that the cabinet you return is the correct one (call

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99r国产精品| 人人狠狠综合久久亚洲| 国产不卡免费视频| 欧美极品xxx| 波多野结衣91| 一区二区三区精密机械公司| 欧美中文一区二区三区| 午夜不卡av免费| 日韩欧美国产午夜精品| 国产盗摄一区二区| 日韩一区欧美小说| 成人免费一区二区三区视频| 91丝袜国产在线播放| 亚洲国产精品影院| 日韩欧美黄色影院| 成人精品gif动图一区| 亚洲国产一二三| 欧美一区二区播放| 成人黄色小视频在线观看| 亚洲黄色免费网站| 精品免费视频一区二区| 国产精品夜夜嗨| 玉米视频成人免费看| 日韩一区二区三| 粉嫩高潮美女一区二区三区| 亚洲欧美日韩国产综合在线 | 一区二区三区在线免费观看| 色噜噜狠狠成人网p站| 一区二区三区欧美亚洲| 日韩三级伦理片妻子的秘密按摩| 亚洲欧洲精品一区二区三区| 欧美日韩一卡二卡| 国产成人自拍高清视频在线免费播放 | 制服视频三区第一页精品| 欧美aaa在线| 国产精品家庭影院| 欧美一区二区三区啪啪| 成人国产精品免费网站| 美国十次综合导航| 亚洲日本中文字幕区| 精品国产污污免费网站入口| 91黄色免费看| 国产99久久精品| 亚洲一区二区三区四区不卡| 国产欧美日本一区视频| 91精品国产综合久久蜜臀| 91免费在线看| 国产成人aaa| 蓝色福利精品导航| 一区二区三区**美女毛片| 国产欧美日韩不卡免费| 日韩欧美国产电影| 欧美体内she精视频| 亚洲国产精品二十页| 在线播放中文字幕一区| 色综合久久综合网| 成人av午夜电影| 狠狠色丁香久久婷婷综合_中 | 免费观看一级特黄欧美大片| 日韩一区欧美小说| 欧美国产丝袜视频| 精品成人一区二区三区四区| 欧美一区二视频| 91老司机福利 在线| 高清av一区二区| 韩国三级中文字幕hd久久精品| 中文字幕欧美三区| 精品福利二区三区| 日韩免费在线观看| 欧美精品在线视频| 欧美日韩精品一二三区| 色噜噜狠狠一区二区三区果冻| 视频一区视频二区中文| 亚洲高清视频中文字幕| 亚洲一区二区在线视频| 成人免费在线播放视频| 亚洲婷婷综合久久一本伊一区| 在线精品视频免费播放| 色婷婷精品久久二区二区蜜臀av| 亚洲一区二区偷拍精品| 国产精品久久久久婷婷| 国产精品免费丝袜| 成人欧美一区二区三区白人| 日韩理论在线观看| 亚洲三级在线免费观看| 亚洲激情在线播放| 一区二区高清免费观看影视大全 | 2023国产精品自拍| 麻豆国产一区二区| 久久国产生活片100| 日本不卡高清视频| 老司机免费视频一区二区三区| 国产精品系列在线| 中文字幕在线不卡一区| 国产精品成人在线观看| 一区二区在线观看不卡| 亚洲一区av在线| 五月天激情综合| 青椒成人免费视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲激情自拍视频| 亚洲地区一二三色| 精一区二区三区| 国产成人精品亚洲午夜麻豆| 91视频一区二区三区| 欧美日韩一区高清| 日韩免费高清电影| 国产欧美一区二区精品秋霞影院| 717成人午夜免费福利电影| 精品美女一区二区三区| 国产精品国产三级国产三级人妇 | 精品国产一区a| 中文字幕不卡在线观看| 亚洲裸体xxx| 日韩高清国产一区在线| 国产91精品精华液一区二区三区| 麻豆精品在线看| 高清免费成人av| 欧美亚洲动漫另类| 久久久九九九九| 亚洲精品久久久蜜桃| 麻豆免费看一区二区三区| 91色porny在线视频| 日韩欧美激情在线| 悠悠色在线精品| 国产乱码精品1区2区3区| 欧美日韩一区二区电影| 久久综合九色综合欧美98 | 国产精品18久久久久久vr| 99久久久久久99| 欧美成人艳星乳罩| 国产精品久久福利| 久久99热国产| 在线观看不卡视频| 国产精品久久夜| 国内偷窥港台综合视频在线播放| 国产在线不卡一卡二卡三卡四卡| 久久精品国产99久久6| 91福利视频久久久久| 久久久国产精品午夜一区ai换脸| 欧美va亚洲va在线观看蝴蝶网| 欧美精品色综合| 亚洲欧美另类久久久精品| 国产酒店精品激情| 337p亚洲精品色噜噜噜| 亚洲一卡二卡三卡四卡| av电影在线观看不卡| 久久久精品综合| 久久精品国产99国产| 日韩一区二区在线免费观看| 亚洲影视在线观看| 91啪亚洲精品| 欧美激情在线一区二区三区| 久久国产夜色精品鲁鲁99| 日韩一区二区三区电影在线观看| 欧美va亚洲va| 蜜桃在线一区二区三区| 国产精品久99| 国产成人自拍高清视频在线免费播放| 国产成人夜色高潮福利影视| 91精品国产综合久久蜜臀| 午夜电影网亚洲视频| 欧美日韩亚洲综合| 午夜精品久久久久影视| 欧美日韩精品免费| 亚洲国产aⅴ天堂久久| 欧美这里有精品| 亚洲午夜免费视频| 欧美日韩一区小说| 日韩国产精品久久| 日韩欧美激情一区| 国产激情一区二区三区桃花岛亚洲 | 国产精品午夜久久| 成人丝袜高跟foot| 欧美经典三级视频一区二区三区| 一区二区三区欧美日韩| 色婷婷久久一区二区三区麻豆| 666欧美在线视频| 日韩高清中文字幕一区| 精品裸体舞一区二区三区| 国产一区二区91| 一色桃子久久精品亚洲| 色悠久久久久综合欧美99| 一区在线播放视频| 欧美中文一区二区三区| 免费观看日韩av| 国产欧美日本一区二区三区| 99精品黄色片免费大全| 亚洲综合精品久久| 欧美一卡2卡3卡4卡| 国产在线视频一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 一区二区三区在线播放| 欧美伦理电影网| 青青草国产成人99久久| 国产亚洲综合av| 色诱视频网站一区| 久久国产综合精品| 亚洲靠逼com| 日韩欧美区一区二|