Summary: Ref T7785. This prepares for (but does not yet use) a pure PHP implementation of Figlet parsing and rendering. Figlet is somewhat complex, but a parser already exists in PEAR. I'll make sure it's suitable and hook it up in the next diff. Test Plan: N/A, code not reachable Reviewers: chad Reviewed By: chad Maniphest Tasks: T9408, T7785 Differential Revision: https://secure.phabricator.com/D14101
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * zipio.h - stdio emulation library for reading zip files
 | 
						|
 *
 | 
						|
 * Version 1.1.2
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Copyright (C) 1995, Edward B. Hamrick
 | 
						|
 *
 | 
						|
 * Permission to use, copy, modify, and distribute this software and
 | 
						|
 * its documentation for any purpose and without fee is hereby granted,
 | 
						|
 * provided that the above copyright notice appear in all copies and
 | 
						|
 * that both that copyright notice and this permission notice appear in
 | 
						|
 * supporting documentation, and that the name of the copyright holders
 | 
						|
 * not be used in advertising or publicity pertaining to distribution of
 | 
						|
 * the software without specific, written prior permission. The copyright
 | 
						|
 * holders makes no representations about the suitability of this software
 | 
						|
 * for any purpose. It is provided "as is" without express or implied warranty.
 | 
						|
 *
 | 
						|
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
 | 
						|
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
 | 
						|
 * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
 | 
						|
 * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
 | 
						|
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 | 
						|
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
						|
 * OF THIS SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Changes from 1.1 to 1.1.1:
 | 
						|
 * Changed "z*" functions to "Z*" to avoid namespace pollution.
 | 
						|
 * Added "zungetc" macro.
 | 
						|
 * John Cowan <cowan@ccil.org>
 | 
						|
 *
 | 
						|
 * Changes from 1.1.1 to 1.1.2:
 | 
						|
 * Relicensed under the MIT license, with consent of the copyright holders.
 | 
						|
 * Claudio Matsuoka (Jan 11 2011)
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * This library of routines has the same calling sequence as
 | 
						|
 * the stdio.h routines for reading files.  If these routines
 | 
						|
 * detect that they are reading from a zip file, they transparently
 | 
						|
 * unzip the file and make the application think they're reading
 | 
						|
 * from the uncompressed file.
 | 
						|
 *
 | 
						|
 * Note that this library is designed to work for zip files that
 | 
						|
 * use the deflate compression method, and to read the first file
 | 
						|
 * within the zip archive.
 | 
						|
 *
 | 
						|
 * There are a number of tunable parameters in the reference
 | 
						|
 * implementation relating to in-memory decompression and the
 | 
						|
 * use of temporary files.
 | 
						|
 *
 | 
						|
 * Particular care was taken to make the Zgetc() macro work
 | 
						|
 * as efficiently as possible.  When reading an uncompressed
 | 
						|
 * file with Zgetc(), it has exactly the same performance as
 | 
						|
 * when using getc().  WHen reading a compressed file with
 | 
						|
 * Zgetc(), it has the same performance as fread().  The total
 | 
						|
 * CPU overhead for decompression is about 50 cycles per byte.
 | 
						|
 *
 | 
						|
 * The Zungetc() macro is quite limited.  It ignores the character
 | 
						|
 * specified for pushback, and essentially just forces the last
 | 
						|
 * character read to be re-read.  This is essential when parsing
 | 
						|
 * numbers and such.  (1.1.1)
 | 
						|
 *
 | 
						|
 * There are a few stdio routines that aren't represented here, but
 | 
						|
 * they can be layered on top of these routines if needed.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __ZIPIO_H
 | 
						|
#define __ZIPIO_H
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int            len;
 | 
						|
  unsigned char *ptr;
 | 
						|
} ZFILE;
 | 
						|
 | 
						|
#define Zgetc(f)                   \
 | 
						|
  ((--((f)->len) >= 0)             \
 | 
						|
    ? (unsigned char)(*(f)->ptr++) \
 | 
						|
    : _Zgetc (f))
 | 
						|
 | 
						|
#define Zungetc(c,f) \
 | 
						|
  ((f)->ptr--, (f)->len++, (c))
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
ZFILE  *Zopen(const char *path, const char *mode);
 | 
						|
int    _Zgetc(ZFILE *stream);
 | 
						|
size_t  Zread(void *ptr, size_t size, size_t n, ZFILE *stream);
 | 
						|
int     Zseek(ZFILE *stream, long offset, int whence);
 | 
						|
long    Ztell(ZFILE *stream);
 | 
						|
int     Zclose(ZFILE *stream);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |