xref: /Universal-ctags/main/unwindi.h (revision 347a83969630a5d15e3fc0f122b75c18b5bfec26)
11edfd7ddSMasatake YAMATO /*
21edfd7ddSMasatake YAMATO  *
31edfd7ddSMasatake YAMATO  *  Copyright (c) 2019, Red Hat, Inc.
41edfd7ddSMasatake YAMATO  *  Copyright (c) 2019, Masatake YAMATO
51edfd7ddSMasatake YAMATO  *
61edfd7ddSMasatake YAMATO  *  Author: Masatake YAMATO <yamato@redhat.com>
71edfd7ddSMasatake YAMATO  *
81edfd7ddSMasatake YAMATO  *   This source code is released for free distribution under the terms of the
91edfd7ddSMasatake YAMATO  *   GNU General Public License version 2 or (at your option) any later version.
101edfd7ddSMasatake YAMATO  *
111edfd7ddSMasatake YAMATO  *   Unwindable input stream
121edfd7ddSMasatake YAMATO  *
131edfd7ddSMasatake YAMATO  */
141edfd7ddSMasatake YAMATO #ifndef CTAGS_MAIN_UNWINDI_H
151edfd7ddSMasatake YAMATO #define CTAGS_MAIN_UNWINDI_H
161edfd7ddSMasatake YAMATO 
171edfd7ddSMasatake YAMATO /* This header file unwindable input stream.
181edfd7ddSMasatake YAMATO  * You cannot use this API combining with functions defined
191edfd7ddSMasatake YAMATO  * in read.h:
201edfd7ddSMasatake YAMATO  *
211edfd7ddSMasatake YAMATO  * - getcFromInputFile
221edfd7ddSMasatake YAMATO  * - ungetcToInputFile
231edfd7ddSMasatake YAMATO  * - readLineFromInputFile
241edfd7ddSMasatake YAMATO  * - getInputLineNumber
251edfd7ddSMasatake YAMATO  * - getInputFilePosition
261edfd7ddSMasatake YAMATO  * - getInputLineOffset
271edfd7ddSMasatake YAMATO  *
281edfd7ddSMasatake YAMATO  * Instead, you can use
291edfd7ddSMasatake YAMATO  * - uwiGetC
301edfd7ddSMasatake YAMATO  * - uwiUngetC
311edfd7ddSMasatake YAMATO  * - uwiGetLineNumber
321edfd7ddSMasatake YAMATO  * - uwiGetFilePosition
331edfd7ddSMasatake YAMATO  *
341edfd7ddSMasatake YAMATO  * You can mark a position in the current input stream with
351edfd7ddSMasatake YAMATO  * uwiPushMarker().
361edfd7ddSMasatake YAMATO  * Later, call uwiPopMarker() to unwind the input stream to the
371edfd7ddSMasatake YAMATO  * position where you marked.
381edfd7ddSMasatake YAMATO  *
391edfd7ddSMasatake YAMATO  * uwiPopMarker() takes COUNT as a parameter. It controls unwinding
401edfd7ddSMasatake YAMATO  * how many bytes. If -1 is passed as COUNT, unwinding to the marked
411edfd7ddSMasatake YAMATO  * position.
421edfd7ddSMasatake YAMATO  *
431edfd7ddSMasatake YAMATO  * If you find that you don't have to unwind though you called
441edfd7ddSMasatake YAMATO  * uwiPushMarker(), call uwiDropMaker().
451edfd7ddSMasatake YAMATO  *
461edfd7ddSMasatake YAMATO  * uwiPopMarker() and uwiDropMaker() release internally allocated resources and
471edfd7ddSMasatake YAMATO  * clear the marker.
481edfd7ddSMasatake YAMATO  *
491edfd7ddSMasatake YAMATO  * If no marker is set, you can use uwiUngetC().
501edfd7ddSMasatake YAMATO  */
511edfd7ddSMasatake YAMATO 
521edfd7ddSMasatake YAMATO /*
531edfd7ddSMasatake YAMATO *   INCLUDE FILES
541edfd7ddSMasatake YAMATO */
551edfd7ddSMasatake YAMATO #include "general.h"
561edfd7ddSMasatake YAMATO 
571edfd7ddSMasatake YAMATO /*
58*347a8396SMasatake YAMATO *   DATA DECLARATIONS
59*347a8396SMasatake YAMATO */
60*347a8396SMasatake YAMATO struct sUwiStats {
61*347a8396SMasatake YAMATO 	int maxLength;
62*347a8396SMasatake YAMATO 	bool overflow;
63*347a8396SMasatake YAMATO 	bool underflow;
64*347a8396SMasatake YAMATO };
65*347a8396SMasatake YAMATO 
66*347a8396SMasatake YAMATO /*
671edfd7ddSMasatake YAMATO *   FUNCTION PROTOTYPES
681edfd7ddSMasatake YAMATO */
69c516f3f6SKarol Samborski extern void uwiActivate   (unsigned int);
70*347a8396SMasatake YAMATO extern void uwiDeactivate (struct sUwiStats *statsToBeUpdated);
71*347a8396SMasatake YAMATO 
72*347a8396SMasatake YAMATO extern void uwiStatsInit  (struct sUwiStats *stats);
73*347a8396SMasatake YAMATO extern void uwiStatsPrint (struct sUwiStats *stats);
741edfd7ddSMasatake YAMATO 
751edfd7ddSMasatake YAMATO extern int uwiGetC (void);
761edfd7ddSMasatake YAMATO extern void uwiUngetC (int c);
771edfd7ddSMasatake YAMATO extern unsigned long uwiGetLineNumber (void);
781edfd7ddSMasatake YAMATO extern MIOPos uwiGetFilePosition (void);
791edfd7ddSMasatake YAMATO 
801edfd7ddSMasatake YAMATO extern void uwiPushMarker (void);
81b482e3dbSKarol Samborski extern void uwiClearMarker (const int count, const bool revertChars);
82b482e3dbSKarol Samborski extern void uwiPopMarker (const int count, const bool revertChars);
831edfd7ddSMasatake YAMATO extern void	uwiDropMaker (void);
841edfd7ddSMasatake YAMATO #endif	/* CTAGS_MAIN_UNWINDI_H */
85