Changeset a66e60 in git
- Timestamp:
- Sep 7, 1998, 5:27:30 PM (25 years ago)
- Branches:
- (u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
- Children:
- 0817954a7a7f4e82c757d2d3e1c982a7e1223d2a
- Parents:
- b95c835f584107cff0126297f44e3d7339280f29
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/feread.cc
rb95c83 ra66e60 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: feread.cc,v 1.1 8 1998-08-03 16:39:05Singular Exp $ */4 /* $Id: feread.cc,v 1.19 1998-09-07 15:27:30 Singular Exp $ */ 5 5 /* 6 6 * ABSTRACT: input from ttys, simulating fgets … … 65 65 66 66 #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 68 72 void fe_reset_input_mode (void) 69 #else70 extern "C" int on_exit(void (*f)(int, void *), void *arg);71 72 void fe_reset_input_mode (int i, void *v)73 73 #endif 74 74 { … … 247 247 } 248 248 249 /* delete to end of line */ 249 250 static void fe_ctrl_k(char *s,int i) 250 251 { … … 262 263 } 263 264 264 static void fe_ctrl_x(char *s,int &i) 265 /* delete the line */ 266 static void fe_ctrl_u(char *s,int &i) 265 267 { 266 268 fe_ctrl_k(s,i); … … 327 329 } 328 330 331 static 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 329 372 char * fe_fgets_stdin(char *s, int size) 330 373 { … … 332 375 if (tclmode) 333 376 { 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); 336 379 } 337 380 else … … 339 382 if ((BVERBOSE(V_PROMPT))&&(!feBatch)) 340 383 { 341 PrintS( pr);384 PrintS(fe_promptstr); 342 385 } 343 386 mflush(); … … 357 400 loop 358 401 { 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(); 394 403 switch(c) 395 404 { … … 405 414 } 406 415 #ifdef MSDOS 407 416 case 0x153: 408 417 #endif 409 418 case feCTRL('H'): … … 421 430 { 422 431 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*/ 424 433 if (s[i]!='\0') 425 434 { … … 439 448 } 440 449 #ifdef MSDOS 441 450 fputc('\b',fe_echo); 442 451 #endif 443 452 change=1; … … 464 473 case feCTRL('B'): /* move the cursor backward one character */ 465 474 { 466 i--; 467 fputc('\b',fe_echo); 475 if (i>0) 476 { 477 i--; 478 fputc('\b',fe_echo); 479 } 468 480 break; 469 481 } … … 477 489 break; 478 490 } 479 /* change to ^U, to be consistent with readline:*/480 491 case feCTRL('U'): /* delete entire input line */ 481 492 { 482 fe_ctrl_ x(s,i);493 fe_ctrl_u(s,i); 483 494 memset(s,0,size); 484 495 change=1; 485 496 break; 486 497 } 498 #ifndef NDEBUG 487 499 case feCTRL('W'): /* test hist. */ 488 500 { … … 503 515 break; 504 516 } 517 #endif 505 518 case feCTRL('K'): /* delete up to the end of the line */ 506 519 { … … 512 525 case feCTRL('P'): /* previous line */ 513 526 { 514 fe_ctrl_ x(s,i);527 fe_ctrl_u(s,i); 515 528 fe_get_hist(s,size,h,change,-1); 516 529 while(s[i]!='\0') … … 524 537 case feCTRL('N'): /* next line */ 525 538 { 526 fe_ctrl_ x(s,i);539 fe_ctrl_u(s,i); 527 540 fe_get_hist(s,size,h,change,1); 528 541 while(s[i]!='\0')
Note: See TracChangeset
for help on using the changeset viewer.