home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / xmmx.zip / source / mmmx.h < prev   
C/C++ Source or Header  |  1996-12-23  |  16KB  |  551 lines

  1. /***************************************************
  2. *   Main include file for MMMX Editor              *
  3. *   Contains Common Editor Functions & structes    *
  4. *                                                  *
  5. *   To use editor you must at first create         *
  6. *   mmm.cfg file by mmm_cfg utility                *
  7. ****************************************************/
  8. /// #define _ENABLE_LOGGING_
  9. //////// #define _INCLUDE_SAFETY_MODULE_ /* define it to read after last Fold-Close sign */
  10.  
  11. #ifndef __INCLUDED_MMMX__
  12. #define __INCLUDED_MMMX__
  13. //&<<&Headers
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <assert.h>
  18. //&>>&4 0 4 0
  19. #include "mmmconst.h"
  20.  
  21. //&<<&editor structes pre-declaration
  22. struct Chain;
  23. struct Line;
  24. struct Fold;
  25. struct File;
  26. struct MarkedLine;
  27. struct EDITOR;
  28. struct mmm_Screen;
  29. struct mmm_KeyBoard;
  30. typedef unsigned char byte;
  31. struct TPair_String_Function;
  32. struct TPair_String_Int;
  33. struct TKeyArray;
  34. //&>>&7 0 7 13
  35. //&<<&Constants and variables
  36. extern int MinimalExitFromEditor;  // this is set to 1 when memory allocation error occurs
  37.  
  38. extern char *comment;         // comment to be applied to file
  39. extern int lcomment;          // length of current comment
  40.  
  41. extern char *templine;
  42. extern unsigned _stklen;
  43.  
  44. extern mmm_Screen mmm_screen;
  45. extern mmm_KeyBoard mmm_KBD;
  46.  
  47. extern MarkedLine *MarkedBlock;
  48.  
  49. extern Chain *ConstantPage;
  50. extern Chain *CurrentPage;
  51.  
  52. extern Fold *fLineClipboard;
  53. extern Fold *cur;                 // Current fold
  54. extern Line *mmm_LineClipboard;   // Line clipboard
  55. extern Line mmm_CharClipboard;     //character clipboard
  56.  
  57. extern int lHead;
  58. const StatusLineLength=0x100;
  59. extern char StatusLineText[];
  60. extern int MarkedBlockLength;   // Number of lines in buffer
  61.  
  62. extern unsigned long FileLinesCounter;
  63.  
  64. //&<<&Various Keyboard flags
  65. extern volatile int mmm_f_E0;
  66. extern volatile int mmm_f_LeftShift,mmm_f_RightShift;
  67. extern volatile int mmm_f_LeftCtrl,mmm_f_RightCtrl;
  68. extern volatile int mmm_f_LeftAlt,mmm_f_RightAlt;
  69. extern volatile int mmm_f_Caps;
  70. extern volatile int mmm_f_FixShift,mmm_f_FixAlt;
  71. extern volatile mmm_f_Shift,mmm_f_Alt,mmm_f_Ctrl;
  72. //&>>&0 0 0 0
  73.  
  74. extern char *mcode,*acode;
  75.  
  76. extern TKeyArray KeyArray;
  77.  
  78. extern int fRecordingMacro;
  79.  
  80. extern Fold *RuntimeStack;
  81.  
  82. //&>>&E 0 B 11
  83. //&<<&Forward declarations
  84. //&<<&#ifdef _ENABLE_LOGGING_
  85. #ifdef _ENABLE_LOGGING_
  86. #include <stdarg.h>
  87. extern void DoLog(char *, ... );
  88. #endif
  89. //&>>&0 0 0 0
  90. extern void Process();
  91. extern void InitCommand();
  92. extern void MemTest(int i);
  93. extern void View();
  94. extern void Redr(int LineToRedraw=REDRAW_WHOLE_SCREEN);
  95. extern void GetCurrentFileNameAndDepth();
  96. extern void _EXIT(int n);
  97. extern void __EXIT();
  98. extern void PerformExitingFromFiles(FILE *filelist);
  99. extern int _EDIT_ScriptFile(char *s,int &nx,int &fx);
  100. extern int _EDIT(char *s,int &nx,int &fx,int IsNewPage);
  101. extern Line *NewLine(char *s,unsigned long LinCnt=0);
  102. extern char *MFileName(char *s);
  103.  
  104. extern void SetTitle(char *dirname,char *filename);
  105. extern void DrawLine( char *Str, int PosY, char Attr,int slen);
  106. extern void Beep();
  107.  
  108. extern char *getcurdir(int f=1);
  109. extern int SaveGetDrive();
  110. extern void SaveChDir(char *s);
  111. extern void SaveSetDrive(unsigned int n);
  112.  
  113. extern void CClear();
  114. extern void LClear();
  115.  
  116. extern void Command(short MMMscan);
  117.  
  118. int WildCard(char *n);
  119.  
  120. extern void mmm_ExecuteCommand(char *_cmd, int arg, int _rstXY=0);
  121. //&>>&1F 0 1A 0
  122. //&<<&Commands in canonical form
  123. extern void MMMlib_Up            (int ccode);
  124. extern void MMMlib_Down          (int ccode);
  125. extern void MMMlib_Left          (int ccode);
  126. extern void MMMlib_Right         (int ccode);
  127. extern void MMMlib_TUp           (int ccode);
  128. extern void MMMlib_TDown         (int ccode);
  129. extern void MMMlib_TLeft         (int ccode);
  130. extern void MMMlib_TRight        (int ccode);
  131. extern void MMMlib_PUp           (int ccode);
  132. extern void MMMlib_PDown         (int ccode);
  133. extern void MMMlib_FUp           (int ccode);
  134. extern void MMMlib_FDown         (int ccode);
  135. extern void MMMlib_FLeft         (int ccode);
  136. extern void MMMlib_FRight        (int ccode);
  137. extern void MMMlib_Enter         (int ccode);
  138. extern void MMMlib_Tab           (int ccode);
  139. extern void MMMlib_LTab          (int ccode);
  140. extern void MMMlib_InsCh         (int ccode);
  141. extern void MMMlib_DelCh         (int ccode);
  142. extern void MMMlib_InsLine       (int ccode);
  143. extern void MMMlib_InsFold       (int ccode);
  144. extern void MMMlib_DelLine       (int ccode);
  145. extern void MMMlib_BS            (int ccode);
  146. extern void MMMlib_Ascii0        (int ccode);
  147. extern void MMMlib_Ascii1        (int ccode);
  148. extern void MMMlib_Ascii2        (int ccode);
  149. extern void MMMlib_Space         (int ccode);
  150. extern void MMMlib_KillWord      (int ccode);
  151. extern void MMMlib_KillEnd       (int ccode);
  152. extern void MMMlib_KillBeg       (int ccode);
  153. extern void MMMlib_CSave         (int ccode);
  154. extern void MMMlib_CMove         (int ccode);
  155. extern void MMMlib_WSave         (int ccode);
  156. extern void MMMlib_WMove         (int ccode);
  157. extern void MMMlib_BWord         (int ccode);
  158. extern void MMMlib_TSave         (int ccode);
  159. extern void MMMlib_TMove         (int ccode);
  160. extern void MMMlib_CRest         (int ccode);
  161. extern void MMMlib_CClear        (int ccode);
  162. extern void MMMlib_LSave         (int ccode);
  163. extern void MMMlib_LTSave        (int ccode);
  164. extern void MMMlib_LMove         (int ccode);
  165. extern void MMMlib_LTMove        (int ccode);
  166. extern void MMMlib_LRest         (int ccode);
  167. extern void MMMlib_LClear        (int ccode);
  168. extern void MMMlib_Escape        (int ccode);
  169. extern void MMMlib_EscapeExec    (int ccode);
  170. extern void MMMlib_EscapeExecLCB (int ccode);
  171. extern void MMMlib_ABORT         (int ccode);
  172. extern void MMMlib_S_AutoIndent  (int ccode);
  173. extern void MMMlib_S_ModeIns     (int ccode);
  174. extern void MMMlib_S_ModeOvr     (int ccode);
  175. extern void MMMlib_S_ACode1      (int ccode);
  176. extern void MMMlib_S_ACode2      (int ccode);
  177. extern void MMMlib_S_ACode3      (int ccode);
  178. extern void MMMlib_S_StatusLine  (int ccode);
  179. extern void MMMlib_S_SearchMode  (int ccode);
  180. extern void MMMlib_SearchFWD     (int ccode);
  181. extern void MMMlib_SearchBCK     (int ccode);
  182. extern void MMMlib_Replace       (int ccode);
  183. extern void MMMlib_SearchPage    (int ccode);
  184. extern void MMMlib_PageIns       (int ccode);
  185. extern void MMMlib_MarkUp        (int ccode);
  186. extern void MMMlib_MarkDown      (int ccode);
  187. extern void MMMlib_MarkTUp       (int ccode);
  188. extern void MMMlib_MarkTDown     (int ccode);
  189. extern void MMMlib_MarkPUp       (int ccode);
  190. extern void MMMlib_MarkPDown     (int ccode);
  191. extern void MMMlib_MarkSaveB     (int ccode);
  192. extern void MMMlib_MarkRestB     (int ccode);
  193. extern void MMMlib_MarkLast      (int ccode);
  194. extern void MMMlib_MarkFirst     (int ccode);
  195. extern void MMMlib_MarkPrev      (int ccode);
  196. extern void MMMlib_MarkNext      (int ccode);
  197. extern void MMMlib_MarkBS        (int ccode);
  198. extern void MMMlib_Macro         (int ccode);
  199. extern void MMMlib_MacroRec      (int ccode);
  200. extern void MMMlib_Console       (int ccode);
  201.  
  202. //&>>&10 0 10 14
  203.  
  204. //&<<&struct EDITOR
  205. //&<<&Attributes
  206. enum{
  207.    _TextAttr,
  208.    _CurAttr,
  209.    _FoldAttr,
  210.    _CurFoldAttr,
  211.    _MarkedAttr,
  212.    _CurMarkedAttr,
  213.    _FoldMarkedAttr,
  214.    _StatusLineAttr,
  215.     NAttr};
  216.  
  217.  
  218. #define TextAttr       attrs[_TextAttr       ]
  219. #define CurAttr        attrs[_CurAttr        ]
  220. #define FoldAttr       attrs[_FoldAttr       ]
  221. #define CurFoldAttr    attrs[_CurFoldAttr    ]
  222. #define MarkedAttr     attrs[_MarkedAttr     ]
  223. #define CurMarkedAttr  attrs[_CurMarkedAttr  ]
  224. #define FoldMarkedAttr attrs[_FoldMarkedAttr ]
  225. #define StatusLineAttr attrs[_StatusLineAttr ]
  226.  
  227. extern int MonoAttrs[];
  228.  
  229. //&>>&0 0 0 0
  230. //&<<&PARAMETERS
  231. enum{
  232.    _InsFlag,
  233.    _IndFlag,
  234.    _ShowStatusLineFlag,
  235.    _SearchMode,
  236.     NParams};
  237.  
  238. #define InsFlag             Params[ _InsFlag            ]
  239. #define IndFlag             Params[ _IndFlag            ]
  240. #define ShowStatusLineFlag  Params[ _ShowStatusLineFlag ]
  241. #define SearchMode          Params[ _SearchMode         ]
  242. //&>>&B 0 B 4
  243. struct EDITOR{
  244.     char *InitialDir;
  245.     char *ConfigFileName;        // name of config file
  246.     char *CurrentFileName;
  247.     int NumberOfPages;
  248.     int CurrentDepth;        // Depth of current fold in current file
  249.     int IsInSearchFold;
  250.     int Attrs[NAttr];
  251.     int *attrs;
  252.     int Params[NParams];
  253.  
  254.     EDITOR();
  255.     ~EDITOR();
  256.     void InitUserSetup();
  257.     void InitEditorSetup();
  258.     void InitFirstPage();
  259. //&<<&    SetDefaultAttributes(){
  260. void SetDefaultAttributes(){
  261.     TextAttr=7;
  262.     CurAttr=0xf0;
  263.     FoldAttr=0x0f;
  264.     CurFoldAttr=0xf0;
  265.     MarkedAttr=0x17;
  266.     CurMarkedAttr=0xf0;
  267.     FoldMarkedAttr=0x1f;
  268.     StatusLineAttr=0x7f;
  269.     InsFlag=1;
  270.     IndFlag=1;
  271.     ShowStatusLineFlag=1;
  272.     SearchMode=1;
  273. };
  274. //&>>&0 0 0 13
  275.  
  276.     int nExt;
  277.     char **FileExt;
  278.     char **FileCmt;
  279.     int IsComment(char *buf,char *ptrn);
  280.     void SetComment(char *n);
  281.     void Init_ExtensionsFold2Mem(Fold *ExtFold);
  282.  
  283.     void Init_keymapFold2Mem(FILE *fptr);
  284.  
  285.     void Init_SetupFold2Mem(FILE *fptr);
  286.  
  287.     void Init_CommandFold2Mem(FILE *fptr);
  288.     void Init_MacroFold2Mem(char *str);
  289.  
  290.     };
  291. //&>>&20 0 19 25
  292. extern EDITOR Editor;
  293.  
  294. //&<<&struct Line;
  295. struct Line{
  296.     Line *prev;
  297.     Line *next;
  298.     char *buf;
  299.     short lbuf, fchg, marked, type;
  300.     long linenumber;
  301.  
  302.  
  303.     Line(char *s);
  304.     virtual ~Line();
  305.     virtual Fold *Enter(){ return 0; }
  306.     void UnLink();
  307.     Line *LinkBefore(Line *);
  308.     virtual Line *Copy(int cln=0);
  309.     void Realloc(int);
  310.     virtual void Write(FILE *f,int flg);
  311.     virtual int GetTextAttr(){ return (marked)?Editor.MarkedAttr:Editor.TextAttr; }
  312.     virtual int GetCurAttr(){ return (marked)?Editor.CurMarkedAttr:Editor.CurAttr; }
  313.     virtual char *GetEnd(){ return ""; }
  314.     char *Buf(int x){ return x>=lbuf ? "" : buf+x; }
  315.  
  316.     void InsChar(int cx);
  317.     void DelChar(int cx);
  318.     void SetChar(int cx,char c);
  319.  
  320.     char *GetWord(int cx);
  321.     char *GetFileName(int cx);
  322.  
  323.     };
  324. //&>>&5 0 5 0
  325. //&<<&struct Fold;
  326. struct Fold:Line{
  327.     Fold *top;
  328.     Line *pos;
  329.     int sx,sy,cx;
  330.  
  331.     Fold(char *buf):Line(buf),pos(NewLine(0)),sx(0),sy(0),cx(0){}
  332.     ~Fold();
  333.     void Read(FILE *f,int flg);
  334.     void Write(FILE *f,int flg);
  335.     virtual Fold *Exit(){ return top; }
  336.     Fold *Enter(){ return this; }
  337.     Line *Copy(int cln=0);
  338.     void Draw();
  339.     void DrawStatusLine();
  340.     virtual int GetTextAttr(){ return marked?Editor.FoldMarkedAttr:Editor.FoldAttr; }
  341.     virtual int GetCurAttr(){ return marked?Editor.CurMarkedAttr:Editor.CurFoldAttr; }
  342.     virtual char *GetEnd(){ return "[* End of Fold *]"; }
  343.     virtual char *FileName(){ return 0; }
  344.     virtual int IsFile(){ return 0; }
  345.     virtual char *CurDirName(){ return 0; }
  346.     virtual unsigned int CurDevNum(){ return 0; }
  347.  
  348.     int HasChange();
  349.     Fold *FindCont(int SearchDirection,int fcur,int ft);
  350.  
  351.   // COMMANDS
  352.  
  353.     void Ascii(int code);
  354.     friend Fold *NewFold(char *buf,unsigned long LinCnt=0);
  355.     void InsLine(){ pos=NewLine("")->LinkBefore(pos); pos->fchg=LINE_NEW; Redr(); }
  356.     void InsFold(){ pos=NewFold("")->LinkBefore(pos); pos->fchg=LINE_NEW; Redr(); }
  357.     void DelLine();
  358.     void InsCh();
  359.     void DelCh();
  360.     void Left(){ if(cx) cx--; }
  361.     void Right(){ if(cx<INFTY) cx++; }
  362. //&<<&    void Up,TUp,PUp,Down,TDown,PDown
  363.   void Up(int DoMarkLine=0);
  364.   void TUp(int DoMarkLine=0);
  365.   void PUp(int DoMarkLine=0);
  366.   void Down(int DoMarkLine=0);
  367.   void TDown(int DoMarkLine=0);
  368.   void PDown(int DoMarkLine=0);
  369. //&>>&4 0 4 0
  370.     void TLeft(){ cx=0; }
  371.     void TRight();
  372.     void BWord(),FDown(int IsNewPage);
  373.     void BackSpace();
  374.     void _Enter();
  375.     void Tab(){ cx=(cx|TAB_STEP_SIZE)+1; }
  376.     void LTab(){ if(cx) cx=(cx-1)&~TAB_STEP_SIZE; }
  377.  
  378.     void MarkLine();
  379.  
  380.     void LSave(int),LRest(),LMove(int),LRest1();
  381.     void CRest(),CCopy(int),WCopy(int),TCopy(int),MoveCh(int);
  382.     char GetCh();
  383.  
  384.     void KillEnd(),KillBeg();
  385.  
  386.     Line *TestTopOfTheStackIsInt(); // used by Mathop & Predicate.
  387.     void stackMathOperation();
  388.     void stackPredicate();
  389.     void stackSwp();
  390.     void stackDel();
  391.     void stackDup();
  392.     void stackSget();
  393.     void stackSput();
  394.     void stackQuery();
  395.     void stackConvert();
  396.     void stackPop();
  397.     void stackPush();
  398.     void stackIOCTL();
  399.     void stackEval();
  400.     };
  401.  
  402. //&>>&42 0 21 12
  403. //&<<&struct File;
  404. struct File:Fold{
  405.     char *CurDir;
  406.     unsigned int CurDev;
  407.     int flg;
  408.  
  409.     File(char *name,int fx);
  410.     Fold *Exit();
  411.     virtual int GetTextAttr(){ return Editor.TextAttr; }
  412.     virtual int GetCurAttr(){ return Editor.CurAttr; }
  413.     virtual char *GetEnd(){ return "[* End of File *]"; }
  414.     virtual char *FileName();
  415.     virtual int IsFile(){ return 1; }
  416. //&<<&    virtual char *CurDirName(){
  417.   virtual char *CurDirName(){
  418.          if(!CurDir)return 0;
  419.          char *xx=new char[strlen(CurDir)+1];
  420.          MemTest(xx!=0);
  421.          strcpy(xx,CurDir);
  422.          return xx;
  423.          }
  424. //&>>&2 0 2 1A
  425.     virtual unsigned int CurDevNum(){ return CurDev; }
  426.     void MkWild();
  427.     };
  428. //&>>&F 0 F 4
  429. //&<<&struct MarkedLine:Line{
  430. struct MarkedLine:Line{
  431.   Line *ref;
  432.   int pcb,qcb;
  433.   MarkedLine(char *name):Line(name),ref(0),pcb(0),qcb(0){}
  434.   MarkedLine *Next(){ return (MarkedLine *)next; }
  435.   MarkedLine *Prev(){ return (MarkedLine *)prev; }
  436.   void ConnectMark(Line *cpos);
  437.   void ConnectUnMark();
  438.   void AddCcb(char c);
  439. //&<<&  char GetCh();
  440. char GetCh(){
  441.   return cur->cx>=ref->lbuf ? 0 : ref->buf[cur->cx];
  442.   }
  443. //&>>&2 0 2 2
  444. };
  445. extern void FirstMarked();
  446. extern void LastMarked();
  447. extern void NextMarked();
  448. extern void PrevMarked();
  449. extern void SaveMarkedBlock();
  450. extern void RestMarkedBlock();
  451. //&>>&0 0 0 0
  452. //&<<&struct Chain     /// Knows about 'cur' and 'Fold::Exit()' func.
  453. struct Chain{
  454. Chain *next,*prev;
  455. Fold *entry;
  456.  
  457. Chain():next(0),prev(0),entry(0){}
  458. Chain(Fold *ie):next(0),prev(0){entry=ie;}
  459. void UnLink();
  460. Chain *LinkBefore(Chain *f);
  461. Chain *PageNext();
  462. Chain *PagePrev();
  463. void   PageUnlink();   // with Complete quiting
  464. };
  465. //&>>&0 0 0 0
  466.  
  467. //&<<&struct TPair_String_Function {
  468. struct TPair_String_Function {
  469.     char *fName;
  470.     void (*fRef)(int);
  471.  
  472. //&<<&    TPair_String_Function(char *_name, void (*_ref)(int) ){
  473.     TPair_String_Function(char *_name, void (*_ref)(int) ){
  474.         fName= _name;
  475.         fRef = _ref ;
  476.         }
  477. //&>>&0 0 0 19
  478.     };
  479. //&>>&5 0 5 8
  480. //&<<&struct TPair_String_Int {
  481. struct TPair_String_Int {
  482.     char *fName;
  483.     int  iValue;
  484.  
  485. //&<<&    TPair_String_Int (char *_name, int _ivalue ) {
  486.     TPair_String_Int (char *_name, int _ivalue ) {
  487.         fName  = _name ;
  488.         iValue = _ivalue ;
  489.         }
  490. //&>>&0 0 0 14
  491.     };
  492.  
  493. extern int fPair_String2Int(TPair_String_Int psArr[]  ,int len, char *pcNam);
  494. extern char *fPair_Int2String(TPair_String_Int psArr[],int len, int iIdx );
  495.  
  496. //&>>&8 0 8 0
  497. //&<<&struct TMacro {
  498. struct TMacro {
  499.     short *base;
  500.     int lbase;
  501.  
  502.     TMacro(){ base=0; lbase=0; }
  503.     ~TMacro() { if(base)delete base; }
  504.     short &operator[](int idx);
  505.     };
  506. //&>>&5 0 5 0
  507. //&<<&struct TCommandUsr {
  508. struct TCommandUsr {
  509.     char *fName;
  510.     TMacro fCode;
  511.  
  512.     TCommandUsr() { fName=0; }
  513.  
  514.     int Execute(int arg);
  515.     };
  516. //&>>&5 0 5 0
  517. //&<<&struct TCommandUsrArray {
  518.  
  519. struct TCommandUsrArray {
  520.     TCommandUsr *base;
  521.     int lbase;
  522.  
  523.     TCommandUsrArray (){ base=0; lbase=0; }
  524. //    ~TCommandUsrArray(){ if(base!=0)delete base; }
  525.  
  526.     int AddEntry(char *_fname, TMacro *_fcode=0);
  527.     };
  528. //&>>&6 0 6 2
  529. //&<<&struct TKeyArray {
  530. //&<<&struct TKey {
  531. struct TKey {
  532.     int scan;
  533.     int fnum;
  534.  
  535.     TKey() { scan= fnum= -1; }
  536.     };
  537. //&>>&4 0 4 11
  538. struct TKeyArray {
  539.     TKey *base;
  540.     int lbase;
  541.  
  542.     TKeyArray(){ base=0; lbase=0; }
  543. //    ~TKeyArray(){ if(base!=0)delete base; }
  544.     int AddEntry(int _scan, int _fnum);
  545.     };
  546. //&>>&6 0 6 0
  547.  
  548. #endif
  549. //// mmmx.err mmmx.err mmmx.err mmmx.err mmmx.err mmmx.err
  550. //&>>&11 0 F 0
  551.