home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / mmm_pkg.zip / mmmx.h < prev   
C/C++ Source or Header  |  1996-12-05  |  16KB  |  549 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. //&>>&0 0 0 2F
  121. //&<<&Commands in canonical form
  122. extern void MMMlib_Up            (int ccode);
  123. extern void MMMlib_Down          (int ccode);
  124. extern void MMMlib_Left          (int ccode);
  125. extern void MMMlib_Right         (int ccode);
  126. extern void MMMlib_TUp           (int ccode);
  127. extern void MMMlib_TDown         (int ccode);
  128. extern void MMMlib_TLeft         (int ccode);
  129. extern void MMMlib_TRight        (int ccode);
  130. extern void MMMlib_PUp           (int ccode);
  131. extern void MMMlib_PDown         (int ccode);
  132. extern void MMMlib_FUp           (int ccode);
  133. extern void MMMlib_FDown         (int ccode);
  134. extern void MMMlib_FLeft         (int ccode);
  135. extern void MMMlib_FRight        (int ccode);
  136. extern void MMMlib_Enter         (int ccode);
  137. extern void MMMlib_Tab           (int ccode);
  138. extern void MMMlib_LTab          (int ccode);
  139. extern void MMMlib_InsCh         (int ccode);
  140. extern void MMMlib_DelCh         (int ccode);
  141. extern void MMMlib_InsLine       (int ccode);
  142. extern void MMMlib_InsFold       (int ccode);
  143. extern void MMMlib_DelLine       (int ccode);
  144. extern void MMMlib_BS            (int ccode);
  145. extern void MMMlib_Ascii0        (int ccode);
  146. extern void MMMlib_Ascii1        (int ccode);
  147. extern void MMMlib_Ascii2        (int ccode);
  148. extern void MMMlib_Space         (int ccode);
  149. extern void MMMlib_KillWord      (int ccode);
  150. extern void MMMlib_KillEnd       (int ccode);
  151. extern void MMMlib_KillBeg       (int ccode);
  152. extern void MMMlib_CSave         (int ccode);
  153. extern void MMMlib_CMove         (int ccode);
  154. extern void MMMlib_WSave         (int ccode);
  155. extern void MMMlib_WMove         (int ccode);
  156. extern void MMMlib_BWord         (int ccode);
  157. extern void MMMlib_TSave         (int ccode);
  158. extern void MMMlib_TMove         (int ccode);
  159. extern void MMMlib_CRest         (int ccode);
  160. extern void MMMlib_CClear        (int ccode);
  161. extern void MMMlib_LSave         (int ccode);
  162. extern void MMMlib_LTSave        (int ccode);
  163. extern void MMMlib_LMove         (int ccode);
  164. extern void MMMlib_LTMove        (int ccode);
  165. extern void MMMlib_LRest         (int ccode);
  166. extern void MMMlib_LClear        (int ccode);
  167. extern void MMMlib_Escape        (int ccode);
  168. extern void MMMlib_EscapeExec    (int ccode);
  169. extern void MMMlib_EscapeExecLCB (int ccode);
  170. extern void MMMlib_ABORT         (int ccode);
  171. extern void MMMlib_S_AutoIndent  (int ccode);
  172. extern void MMMlib_S_ModeIns     (int ccode);
  173. extern void MMMlib_S_ModeOvr     (int ccode);
  174. extern void MMMlib_S_ACode1      (int ccode);
  175. extern void MMMlib_S_ACode2      (int ccode);
  176. extern void MMMlib_S_ACode3      (int ccode);
  177. extern void MMMlib_S_StatusLine  (int ccode);
  178. extern void MMMlib_S_SearchMode  (int ccode);
  179. extern void MMMlib_SearchFWD     (int ccode);
  180. extern void MMMlib_SearchBCK     (int ccode);
  181. extern void MMMlib_Replace       (int ccode);
  182. extern void MMMlib_SearchPage    (int ccode);
  183. extern void MMMlib_PageIns       (int ccode);
  184. extern void MMMlib_MarkUp        (int ccode);
  185. extern void MMMlib_MarkDown      (int ccode);
  186. extern void MMMlib_MarkTUp       (int ccode);
  187. extern void MMMlib_MarkTDown     (int ccode);
  188. extern void MMMlib_MarkPUp       (int ccode);
  189. extern void MMMlib_MarkPDown     (int ccode);
  190. extern void MMMlib_MarkSaveB     (int ccode);
  191. extern void MMMlib_MarkRestB     (int ccode);
  192. extern void MMMlib_MarkLast      (int ccode);
  193. extern void MMMlib_MarkFirst     (int ccode);
  194. extern void MMMlib_MarkPrev      (int ccode);
  195. extern void MMMlib_MarkNext      (int ccode);
  196. extern void MMMlib_MarkBS        (int ccode);
  197. extern void MMMlib_Macro         (int ccode);
  198. extern void MMMlib_MacroRec      (int ccode);
  199. extern void MMMlib_Console       (int ccode);
  200.  
  201. //&>>&10 0 10 14
  202.  
  203. //&<<&struct EDITOR
  204. //&<<&Attributes
  205. enum{
  206.    _TextAttr,
  207.    _CurAttr,
  208.    _FoldAttr,
  209.    _CurFoldAttr,
  210.    _MarkedAttr,
  211.    _CurMarkedAttr,
  212.    _FoldMarkedAttr,
  213.    _StatusLineAttr,
  214.     NAttr};
  215.  
  216.  
  217. #define TextAttr       attrs[_TextAttr       ]
  218. #define CurAttr        attrs[_CurAttr        ]
  219. #define FoldAttr       attrs[_FoldAttr       ]
  220. #define CurFoldAttr    attrs[_CurFoldAttr    ]
  221. #define MarkedAttr     attrs[_MarkedAttr     ]
  222. #define CurMarkedAttr  attrs[_CurMarkedAttr  ]
  223. #define FoldMarkedAttr attrs[_FoldMarkedAttr ]
  224. #define StatusLineAttr attrs[_StatusLineAttr ]
  225.  
  226. extern int MonoAttrs[];
  227.  
  228. //&>>&0 0 0 0
  229. //&<<&PARAMETERS
  230. enum{
  231.    _InsFlag,
  232.    _IndFlag,
  233.    _ShowStatusLineFlag,
  234.    _SearchMode,
  235.     NParams};
  236.  
  237. #define InsFlag             Params[ _InsFlag            ]
  238. #define IndFlag             Params[ _IndFlag            ]
  239. #define ShowStatusLineFlag  Params[ _ShowStatusLineFlag ]
  240. #define SearchMode          Params[ _SearchMode         ]
  241. //&>>&B 0 B 4
  242. struct EDITOR{
  243.     char *InitialDir;
  244.     char *ConfigFileName;        // name of config file
  245.     char *CurrentFileName;
  246.     int NumberOfPages;
  247.     int CurrentDepth;        // Depth of current fold in current file
  248.     int IsInSearchFold;
  249.     int Attrs[NAttr];
  250.     int *attrs;
  251.     int Params[NParams];
  252.  
  253.     EDITOR();
  254.     ~EDITOR();
  255.     void InitUserSetup();
  256.     void InitEditorSetup();
  257.     void InitFirstPage();
  258. //&<<&    SetDefaultAttributes(){
  259. void SetDefaultAttributes(){
  260.     TextAttr=7;
  261.     CurAttr=0xf0;
  262.     FoldAttr=0x0f;
  263.     CurFoldAttr=0xf0;
  264.     MarkedAttr=0x17;
  265.     CurMarkedAttr=0xf0;
  266.     FoldMarkedAttr=0x1f;
  267.     StatusLineAttr=0x7f;
  268.     InsFlag=1;
  269.     IndFlag=1;
  270.     ShowStatusLineFlag=1;
  271.     SearchMode=1;
  272. };
  273. //&>>&0 0 0 13
  274.  
  275.     int nExt;
  276.     char **FileExt;
  277.     char **FileCmt;
  278.     int IsComment(char *buf,char *ptrn);
  279.     void SetComment(char *n);
  280.     void Init_ExtensionsFold2Mem(Fold *ExtFold);
  281.  
  282.     void Init_keymapFold2Mem(FILE *fptr);
  283.  
  284.     void Init_SetupFold2Mem(FILE *fptr);
  285.  
  286.     void Init_CommandFold2Mem(FILE *fptr);
  287.     void Init_MacroFold2Mem(char *str);
  288.  
  289.     };
  290. //&>>&20 0 19 25
  291. extern EDITOR Editor;
  292.  
  293. //&<<&struct Line;
  294. struct Line{
  295.     Line *prev;
  296.     Line *next;
  297.     char *buf;
  298.     short lbuf, fchg, marked, type;
  299.     long linenumber;
  300.  
  301.  
  302.     Line(char *s);
  303.     virtual ~Line();
  304.     virtual Fold *Enter(){ return 0; }
  305.     void UnLink();
  306.     Line *LinkBefore(Line *);
  307.     virtual Line *Copy(int cln=0);
  308.     void Realloc(int);
  309.     virtual void Write(FILE *f,int flg);
  310.     virtual int GetTextAttr(){ return (marked)?Editor.MarkedAttr:Editor.TextAttr; }
  311.     virtual int GetCurAttr(){ return (marked)?Editor.CurMarkedAttr:Editor.CurAttr; }
  312.     virtual char *GetEnd(){ return ""; }
  313.     char *Buf(int x){ return x>=lbuf ? "" : buf+x; }
  314.  
  315.     void InsChar(int cx);
  316.     void DelChar(int cx);
  317.     void SetChar(int cx,char c);
  318.  
  319.     char *GetWord(int cx);
  320.     char *GetFileName(int cx);
  321.  
  322.     };
  323. //&>>&5 0 5 0
  324. //&<<&struct Fold;
  325. struct Fold:Line{
  326.     Fold *top;
  327.     Line *pos;
  328.     int sx,sy,cx;
  329.  
  330.     Fold(char *buf):Line(buf),pos(NewLine(0)),sx(0),sy(0),cx(0){}
  331.     ~Fold();
  332.     void Read(FILE *f,int flg);
  333.     void Write(FILE *f,int flg);
  334.     virtual Fold *Exit(){ return top; }
  335.     Fold *Enter(){ return this; }
  336.     Line *Copy(int cln=0);
  337.     void Draw();
  338.     void DrawStatusLine();
  339.     virtual int GetTextAttr(){ return marked?Editor.FoldMarkedAttr:Editor.FoldAttr; }
  340.     virtual int GetCurAttr(){ return marked?Editor.CurMarkedAttr:Editor.CurFoldAttr; }
  341.     virtual char *GetEnd(){ return "[* End of Fold *]"; }
  342.     virtual char *FileName(){ return 0; }
  343.     virtual int IsFile(){ return 0; }
  344.     virtual char *CurDirName(){ return 0; }
  345.     virtual unsigned int CurDevNum(){ return 0; }
  346.  
  347.     int HasChange();
  348.     Fold *FindCont(int SearchDirection,int fcur,int ft);
  349.  
  350.   // COMMANDS
  351.  
  352.     void Ascii(int code);
  353.     friend Fold *NewFold(char *buf,unsigned long LinCnt=0);
  354.     void InsLine(){ pos=NewLine("")->LinkBefore(pos); pos->fchg=LINE_NEW; Redr(); }
  355.     void InsFold(){ pos=NewFold("")->LinkBefore(pos); pos->fchg=LINE_NEW; Redr(); }
  356.     void DelLine();
  357.     void InsCh();
  358.     void DelCh();
  359.     void Left(){ if(cx) cx--; }
  360.     void Right(){ if(cx<INFTY) cx++; }
  361. //&<<&    void Up,TUp,PUp,Down,TDown,PDown
  362.   void Up(int DoMarkLine=0);
  363.   void TUp(int DoMarkLine=0);
  364.   void PUp(int DoMarkLine=0);
  365.   void Down(int DoMarkLine=0);
  366.   void TDown(int DoMarkLine=0);
  367.   void PDown(int DoMarkLine=0);
  368. //&>>&4 0 4 0
  369.     void TLeft(){ cx=0; }
  370.     void TRight();
  371.     void BWord(),FDown(int IsNewPage);
  372.     void BackSpace();
  373.     void _Enter();
  374.     void Tab(){ cx=(cx|TAB_STEP_SIZE)+1; }
  375.     void LTab(){ if(cx) cx=(cx-1)&~TAB_STEP_SIZE; }
  376.  
  377.     void MarkLine();
  378.  
  379.     void LSave(int),LRest(),LMove(int),LRest1();
  380.     void CRest(),CCopy(int),WCopy(int),TCopy(int),MoveCh(int);
  381.     char GetCh();
  382.  
  383.     void KillEnd(),KillBeg();
  384.  
  385.     Line *TestTopOfTheStackIsInt(); // used by Mathop & Predicate.
  386.     void stackMathOperation();
  387.     void stackPredicate();
  388.     void stackSwp();
  389.     void stackDel();
  390.     void stackDup();
  391.     void stackSget();
  392.     void stackSput();
  393.     void stackQuery();
  394.     void stackConvert();
  395.     void stackPop();
  396.     void stackPush();
  397.     void stackIOCTL();
  398.     };
  399.  
  400. //&>>&21 0 0 12
  401. //&<<&struct File;
  402. struct File:Fold{
  403.     char *CurDir;
  404.     unsigned int CurDev;
  405.     int flg;
  406.  
  407.     File(char *name,int fx);
  408.     Fold *Exit();
  409.     virtual int GetTextAttr(){ return Editor.TextAttr; }
  410.     virtual int GetCurAttr(){ return Editor.CurAttr; }
  411.     virtual char *GetEnd(){ return "[* End of File *]"; }
  412.     virtual char *FileName();
  413.     virtual int IsFile(){ return 1; }
  414. //&<<&    virtual char *CurDirName(){
  415.   virtual char *CurDirName(){
  416.          if(!CurDir)return 0;
  417.          char *xx=new char[strlen(CurDir)+1];
  418.          MemTest(xx!=0);
  419.          strcpy(xx,CurDir);
  420.          return xx;
  421.          }
  422. //&>>&2 0 2 1A
  423.     virtual unsigned int CurDevNum(){ return CurDev; }
  424.     void MkWild();
  425.     };
  426. //&>>&F 0 F 4
  427. //&<<&struct MarkedLine:Line{
  428. struct MarkedLine:Line{
  429.   Line *ref;
  430.   int pcb,qcb;
  431.   MarkedLine(char *name):Line(name),ref(0),pcb(0),qcb(0){}
  432.   MarkedLine *Next(){ return (MarkedLine *)next; }
  433.   MarkedLine *Prev(){ return (MarkedLine *)prev; }
  434.   void ConnectMark(Line *cpos);
  435.   void ConnectUnMark();
  436.   void AddCcb(char c);
  437. //&<<&  char GetCh();
  438. char GetCh(){
  439.   return cur->cx>=ref->lbuf ? 0 : ref->buf[cur->cx];
  440.   }
  441. //&>>&2 0 2 2
  442. };
  443. extern void FirstMarked();
  444. extern void LastMarked();
  445. extern void NextMarked();
  446. extern void PrevMarked();
  447. extern void SaveMarkedBlock();
  448. extern void RestMarkedBlock();
  449. //&>>&0 0 0 0
  450. //&<<&struct Chain     /// Knows about 'cur' and 'Fold::Exit()' func.
  451. struct Chain{
  452. Chain *next,*prev;
  453. Fold *entry;
  454.  
  455. Chain():next(0),prev(0),entry(0){}
  456. Chain(Fold *ie):next(0),prev(0){entry=ie;}
  457. void UnLink();
  458. Chain *LinkBefore(Chain *f);
  459. Chain *PageNext();
  460. Chain *PagePrev();
  461. void   PageUnlink();   // with Complete quiting
  462. };
  463. //&>>&0 0 0 0
  464.  
  465. //&<<&struct TPair_String_Function {
  466. struct TPair_String_Function {
  467.     char *fName;
  468.     void (*fRef)(int);
  469.  
  470. //&<<&    TPair_String_Function(char *_name, void (*_ref)(int) ){
  471.     TPair_String_Function(char *_name, void (*_ref)(int) ){
  472.         fName= _name;
  473.         fRef = _ref ;
  474.         }
  475. //&>>&0 0 0 19
  476.     };
  477. //&>>&5 0 5 8
  478. //&<<&struct TPair_String_Int {
  479. struct TPair_String_Int {
  480.     char *fName;
  481.     int  iValue;
  482.  
  483. //&<<&    TPair_String_Int (char *_name, int _ivalue ) {
  484.     TPair_String_Int (char *_name, int _ivalue ) {
  485.         fName  = _name ;
  486.         iValue = _ivalue ;
  487.         }
  488. //&>>&0 0 0 14
  489.     };
  490.  
  491. extern int fPair_String2Int(TPair_String_Int psArr[]  ,int len, char *pcNam);
  492. extern char *fPair_Int2String(TPair_String_Int psArr[],int len, int iIdx );
  493.  
  494. //&>>&8 0 8 0
  495. //&<<&struct TMacro {
  496. struct TMacro {
  497.     short *base;
  498.     int lbase;
  499.  
  500.     TMacro(){ base=0; lbase=0; }
  501.     ~TMacro() { if(base)delete base; }
  502.     short &operator[](int idx);
  503.     };
  504. //&>>&5 0 5 0
  505. //&<<&struct TCommandUsr {
  506. struct TCommandUsr {
  507.     char *fName;
  508.     TMacro fCode;
  509.  
  510.     TCommandUsr() { fName=0; }
  511.  
  512.     int Execute(int arg);
  513.     };
  514. //&>>&5 0 5 0
  515. //&<<&struct TCommandUsrArray {
  516.  
  517. struct TCommandUsrArray {
  518.     TCommandUsr *base;
  519.     int lbase;
  520.  
  521.     TCommandUsrArray (){ base=0; lbase=0; }
  522. //    ~TCommandUsrArray(){ if(base!=0)delete base; }
  523.  
  524.     int AddEntry(char *_fname, TMacro *_fcode=0);
  525.     };
  526. //&>>&6 0 6 2
  527. //&<<&struct TKeyArray {
  528. //&<<&struct TKey {
  529. struct TKey {
  530.     int scan;
  531.     int fnum;
  532.  
  533.     TKey() { scan= fnum= -1; }
  534.     };
  535. //&>>&4 0 4 11
  536. struct TKeyArray {
  537.     TKey *base;
  538.     int lbase;
  539.  
  540.     TKeyArray(){ base=0; lbase=0; }
  541. //    ~TKeyArray(){ if(base!=0)delete base; }
  542.     int AddEntry(int _scan, int _fnum);
  543.     };
  544. //&>>&6 0 6 0
  545.  
  546. #endif
  547. //// mmmx.err mmmx.err mmmx.err mmmx.err mmmx.err mmmx.err
  548. //&>>&18 0 18 8
  549.