1 #ifndef FEVOICES_H 2 #define FEVOICES_H 3 /**************************************** 4 * * Computer Algebra System SINGULAR * 5 * ****************************************/ 6 /* 7 * * ABSTRACT: class Voice 8 * */ 9 10 #include "reporter/reporter.h" 11 12 #include "resources/feResource.h" 13 14 #include "kernel/structs.h" 15 16 enum feBufferTypes 17 { 18 BT_none = 0, // entry level 19 BT_break = 1, // while, for 20 BT_proc, // proc 21 BT_example, // example 22 BT_file, // <"file" 23 BT_execute, // execute 24 BT_if, // if 25 BT_else // else 26 }; 27 28 enum feBufferInputs 29 { 30 BI_stdin = 1, 31 BI_buffer, 32 BI_file 33 }; 34 enum noeof_t 35 { 36 noeof_brace = 1, 37 noeof_asstring, 38 noeof_block, 39 noeof_bracket, 40 noeof_comment, 41 noeof_procname, 42 noeof_string 43 }; /* for scanner.l */ 44 45 EXTERN_VAR int yylineno; 46 EXTERN_VAR char my_yylinebuf[80]; 47 extern const char sNoName_fe[]; 48 49 #ifdef __cplusplus 50 51 /* the C++-part: */ 52 53 // LANG_TOP : Toplevel package only 54 // LANG_SINGULAR: 55 // LANG_C : 56 // 57 58 class Voice 59 { 60 public: 61 Voice * next; 62 Voice * prev; 63 char * filename; // file name or proc name 64 procinfo * pi; // proc info 65 void * oldb; // internal scanner buffer 66 // for files only: 67 FILE * files; // file handle 68 // for buffers only: 69 char * buffer; // buffer pointer 70 long fptr; // current position in buffer 71 long ftellptr; // with glibc 2.22, file position gets lost 72 // in sig_chld_hdl (ssi:ffork link), see examples/waitall.sing 73 74 int start_lineno; // lineno, to restore in recursion 75 int curr_lineno; // current lineno 76 feBufferInputs sw; // BI_stdin: read from STDIN 77 // BI_buffer: buffer 78 // BI_file: files 79 char ifsw; // if-switch: 80 /*1 ifsw==0: no if statement, else is invalid 81 * ==1: if (0) processed, execute else 82 * ==2: if (1) processed, else allowed but not executed 83 */ 84 feBufferTypes typ; // buffer type: see BT_.. 85 Voice()86 Voice() { memset(this,0,sizeof(*this));} 87 feBufferTypes Typ(); 88 void Next(); 89 } ; 90 91 EXTERN_VAR Voice *currentVoice; 92 93 Voice * feInitStdin(Voice *pp); 94 95 const char * VoiceName(); 96 int VoiceLine(); 97 void VoiceBackTrack(); 98 BOOLEAN contBuffer(feBufferTypes typ); 99 BOOLEAN exitBuffer(feBufferTypes typ); 100 BOOLEAN exitVoice(); 101 void monitor(void *F, int mode); /* FILE*, int */ 102 BOOLEAN newFile(char* fname); 103 void newBuffer(char* s, feBufferTypes t, procinfo *pname = NULL, int start_lineno = 0); 104 void * myynewbuffer(); 105 void myyoldbuffer(void * oldb); 106 107 #endif 108 #endif 109 110