home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / rainbow / cpm / emacs / emacssrc.lzh / memain.c < prev    next >
C/C++ Source or Header  |  1992-03-11  |  2KB  |  101 lines

  1. #include "metab.h"
  2.  
  3. int ovreq;
  4. int ovsub;
  5. int ovreq2;
  6. int ovsub2;
  7. FILE * ffp;
  8.  
  9. main()
  10. {
  11. /*    static int    c;*/
  12. #define cmdchar (*(int *)0x100)
  13. #define cmdflag (*(int *)0x102)
  14. #define cmdparm (*(int *)0x104)
  15. /*    static int    f; */
  16. /*    static int    n; */
  17. /*    static int    mflag; */
  18. #define mflag (*(int *)0x106)
  19.  
  20.     settop( 0x700 );
  21.     myovinit( "meov" );
  22.  
  23.     /*ovreq = 0;*/
  24.     ovloader( 0 ); /* , argc, argv[1] ); * initialize. */
  25.     while ( ovreq )
  26.     {    cmdchar = ovreq;
  27.         ovreq = 0;
  28.         if ( ovloader( cmdchar, ovsub ) != TRUE ) break;
  29.     }
  30.  
  31.  
  32. loop:
  33.  
  34.     update();                /* Fix up the screen    */
  35.  
  36.     cmdchar = getkey();
  37.  
  38.     if (mpresf != FALSE)
  39.     {    mlerase();
  40.         update();
  41.         /*if (c == ' ') goto loop; ** ITS EMACS does this */
  42.     }
  43.     cmdflag = FALSE;
  44.     cmdparm = 1;
  45.     if ( cmdchar == CMINUSCH )
  46.     {    cmdflag = TRUE;
  47.         goto negparm;
  48. #ifdef NEVER
  49.         cmdparm = 0;
  50.         mflag = -1;
  51.         goto argloop;
  52. #endif
  53.     }
  54.     if (cmdchar == (0x1f&'U')) 
  55.     {    /* ^U, start argument    */
  56.         cmdflag = TRUE;
  57.         cmdparm = 4;            /* with argument of 4 */
  58.         mflag = 0;            /* that can be discarded. */
  59. argloop:
  60.         for ( ;; )
  61.         {    mlwrite( "Arg: %d", ( mflag >= 0 ) 
  62.             ? cmdparm : ( cmdparm ? -cmdparm : -1));
  63.             
  64.             if ( ( cmdchar = getkey()) == (0x1f&'U'))
  65.                 cmdparm <<= 2;
  66.             else if ( cmdchar == '-' )
  67.             {    if ( mflag ) break; /* insert n dashes */
  68. negparm:
  69.                 cmdparm = 0;
  70.                 mflag = -1;
  71.             }
  72.             else if ( cmdchar >= '0' && cmdchar <= '9' )
  73.             {    if ( ! mflag )    /* 1st digit */
  74.                 {    cmdparm = 0;
  75.                     mflag = 1;
  76.                 }
  77.                 cmdparm = 10 * cmdparm + cmdchar - '0';
  78.             }
  79.             else break;
  80.         }
  81.         /*
  82.          * Make arguments preceded by a minus sign negative and change
  83.          * the special argument "^U -" to an effective "^U -1".
  84.          */
  85.         if (mflag == -1)
  86.         {    if ( ! cmdparm ) cmdparm++;
  87.             cmdparm = -cmdparm;
  88.         }
  89.     }
  90.     if (cmdchar == (0x1f&'X'))    /* ^X is a prefix    */
  91.         cmdchar = CTLX | getstroke();
  92.     ovreq = ovreq2 = 0;
  93.     execute( );            /* Do it.        */
  94.     while ( ovreq )
  95.     {    cmdchar = ovreq;
  96.         ovreq = 0;
  97.         if ( ovloader( cmdchar, ovsub ) != TRUE ) break;
  98.     }
  99.     goto loop;
  100. }
  101.