Changeset a66e60 in git


Ignore:
Timestamp:
Sep 7, 1998, 5:27:30 PM (25 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
Children:
0817954a7a7f4e82c757d2d3e1c982a7e1223d2a
Parents:
b95c835f584107cff0126297f44e3d7339280f29
Message:
* hannes:FEREAD-fixes


git-svn-id: file:///usr/local/Singular/svn/trunk@2500 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/feread.cc

    rb95c83 ra66e60  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: feread.cc,v 1.18 1998-08-03 16:39:05 Singular Exp $ */
     4/* $Id: feread.cc,v 1.19 1998-09-07 15:27:30 Singular Exp $ */
    55/*
    66* ABSTRACT: input from ttys, simulating fgets
     
    6565
    6666#ifndef MSDOS
    67   #ifdef HAVE_ATEXIT
     67  #ifndef HAVE_ATEXIT
     68    extern "C" int on_exit(void (*f)(int, void *), void *arg);
     69
     70    void fe_reset_input_mode (int i, void *v)
     71  #else
    6872    void fe_reset_input_mode (void)
    69   #else
    70     extern "C" int on_exit(void (*f)(int, void *), void *arg);
    71 
    72     void fe_reset_input_mode (int i, void *v)
    7373  #endif
    7474  {
     
    247247}
    248248
     249/* delete to end of line */
    249250static void fe_ctrl_k(char *s,int i)
    250251{
     
    262263}
    263264
    264 static void fe_ctrl_x(char *s,int &i)
     265/* delete the line */
     266static void fe_ctrl_u(char *s,int &i)
    265267{
    266268  fe_ctrl_k(s,i);
     
    327329}
    328330
     331static int fe_getchar()
     332{
     333  int c;
     334  #ifndef MSDOS
     335  c=0;
     336  while (1!=read (STDIN_FILENO, &c, 1));
     337  #else
     338  c=getkey();
     339  #endif
     340  #ifndef MSDOS
     341  if (c == 033)
     342  {
     343    /* check for CSI */
     344    c=0;
     345    read (STDIN_FILENO, &c, 1);
     346    if (c == '[')
     347    {
     348      /* get command character */
     349      c=0;
     350      read (STDIN_FILENO, &c, 1);
     351      switch (c)
     352      {
     353        case 'D': /* left arrow key */
     354          c = feCTRL('B')/*002*/;
     355          break;
     356        case 'C': /* right arrow key */
     357          c = feCTRL('F')/*006*/;
     358          break;
     359        case 'A': /* up arrow key */
     360          c = feCTRL('P')/*020*/;
     361          break;
     362        case 'B': /* down arrow key */
     363          c = feCTRL('N')/*016*/;
     364          break;
     365      }
     366    }
     367  }
     368  #endif
     369  return c;
     370}
     371
    329372char * fe_fgets_stdin(char *s, int size)
    330373{
     
    332375  if (tclmode)
    333376  {
    334     if(currRing!=NULL) PrintTCLS('P',pr);
    335     else               PrintTCLS('U',pr);
     377    if(currRing!=NULL) PrintTCLS('P',fe_promptstr);
     378    else               PrintTCLS('U',fe_promptstr);
    336379  }
    337380  else
     
    339382  if ((BVERBOSE(V_PROMPT))&&(!feBatch))
    340383  {
    341     PrintS(pr);
     384    PrintS(fe_promptstr);
    342385  }
    343386  mflush();
     
    357400    loop
    358401    {
    359       #ifndef MSDOS
    360         c=0;
    361         read (STDIN_FILENO, &c, 1);
    362       #else
    363         c=getkey();
    364       #endif
    365       #ifndef MSDOS
    366       if (c == 033)
    367       {
    368         /* check for CSI */
    369         c=0;
    370         read (STDIN_FILENO, &c, 1);
    371         if (c == '[')
    372         {
    373           /* get command character */
    374           c=0;
    375           read (STDIN_FILENO, &c, 1);
    376           switch (c)
    377           {
    378             case 'D': /* left arrow key */
    379               c = feCTRL('B')/*002*/;
    380               break;
    381             case 'C': /* right arrow key */
    382               c = feCTRL('F')/*006*/;
    383               break;
    384             case 'A': /* up arrow key */
    385               c = feCTRL('P')/*020*/;
    386               break;
    387             case 'B': /* down arrow key */
    388               c = feCTRL('N')/*016*/;
    389               break;
    390           }
    391         }
    392       }
    393       #endif
     402      c=fe_getchar();
    394403      switch(c)
    395404      {
     
    405414        }
    406415        #ifdef MSDOS
    407           case 0x153:
     416        case 0x153:
    408417        #endif
    409418        case feCTRL('H'):
     
    421430        {
    422431          int j;
    423           if ((i==0)&&(c==feCTRL('D')&&(s[0]=='\0'))) return NULL; /*eof*/
     432          if ((i==0) &&(s[0]=='\0')) return NULL; /*eof*/
    424433          if (s[i]!='\0')
    425434          {
     
    439448          }
    440449          #ifdef MSDOS
    441             fputc('\b',fe_echo);
     450          fputc('\b',fe_echo);
    442451          #endif
    443452          change=1;
     
    464473        case feCTRL('B'): /* move the cursor backward one character */
    465474        {
    466           i--;
    467           fputc('\b',fe_echo);
     475          if (i>0)
     476          {
     477            i--;
     478            fputc('\b',fe_echo);
     479          }
    468480          break;
    469481        }
     
    477489          break;
    478490        }
    479         /* change to ^U, to be consistent with readline:*/
    480491        case feCTRL('U'): /* delete entire input line */
    481492        {
    482           fe_ctrl_x(s,i);
     493          fe_ctrl_u(s,i);
    483494          memset(s,0,size);
    484495          change=1;
    485496          break;
    486497        }
     498        #ifndef NDEBUG
    487499        case feCTRL('W'): /* test hist. */
    488500        {
     
    503515          break;
    504516        }
     517        #endif
    505518        case feCTRL('K'): /* delete up to the end of the line */
    506519        {
     
    512525        case feCTRL('P'): /* previous line */
    513526        {
    514           fe_ctrl_x(s,i);
     527          fe_ctrl_u(s,i);
    515528          fe_get_hist(s,size,h,change,-1);
    516529          while(s[i]!='\0')
     
    524537        case feCTRL('N'): /* next line */
    525538        {
    526           fe_ctrl_x(s,i);
     539          fe_ctrl_u(s,i);
    527540          fe_get_hist(s,size,h,change,1);
    528541          while(s[i]!='\0')
Note: See TracChangeset for help on using the changeset viewer.