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