home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume5 / rsed / command.c next >
Encoding:
C/C++ Source or Header  |  1989-02-03  |  4.0 KB  |  200 lines

  1.  
  2. /*
  3.  * This code copyright 1988 by Doug Davis (doug@letni.lawnet.com) 
  4.  *  You are free to modify, hack, fold, spindle, or mutlate this code in
  5.  *  any maner provided you give credit where credit is due and don't pretend
  6.  *  you wrote it.
  7.  *  If you do my lawyers (and I have a lot of lawyers) will teach you a lesson
  8.  *  in copyright law that you will never ever forget.
  9.  */
  10. #include "defs.h"
  11. #include "externs.h"
  12.  
  13. command(file, sline)
  14. char *file;
  15. char *sline;
  16. {
  17.     char c;
  18.     long start;
  19.     char changed='N';
  20.     if (*sline != '\0') {
  21.         start=makenum(sline);
  22.         fputs("appending ", stdout);
  23.         if (start >= NumberLines) 
  24.             fputs("to the bottom", stdout);
  25.         else 
  26.             printf("below line %ld", start);
  27.         puts(", enter text now:");
  28.         append(start <= NumberLines ? start : NumberLines);
  29.         start=NumberLines;
  30.     } else
  31.         start = 1L;
  32.     
  33.     if (NumberLines > 0L)
  34.         setline(start);
  35.     for (;;) {
  36.         if (NumberLines < 1L || CurrentLine < 1L) {
  37.             puts("Buffer empty, begin entering new text.");
  38.             append(0L);
  39.             continue;
  40.         }
  41.         if (Debug) {
  42.             printf("address             l_start: 0x%lx\n",
  43.                 l_start);
  44.             printf("address             current: 0x%lx\n",
  45.                 current);
  46.             printf("address               l_end: 0x%lx\n",
  47.                 l_end);
  48.             printf("address l_start -> previous: 0x%lx\n", 
  49.                 l_start->previous);
  50.             printf("address       l_end -> next: 0x%lx\n",
  51.                 l_end->next);
  52.         }
  53.         printf("Line %ld>", CurrentLine);
  54. #ifdef MSDOS
  55.         c=getch();
  56. #else 
  57.         c=getchar();
  58. #endif MSDOS
  59.         switch(c) {
  60.             case '0':
  61.             case '1':
  62.             case '2':
  63.             case '3':
  64.             case '4':
  65.             case '5':
  66.             case '6':
  67.             case '7':
  68.             case '8':
  69.             case '9':
  70.                 fputs("Enter new line :", stdout);
  71.                 getstring(buf, 10, c);
  72.                 if ((start=makenum(buf)) > 0L && 
  73.                         start <= NumberLines) {
  74.                     if (setline(start) == (LINE *) NULL) 
  75.                         puts("Sorry..");
  76.                 }
  77.                 break;
  78.             case '+':
  79.             case ';':
  80.                 putchar('\n');
  81.                 if (CurrentLine < NumberLines) {
  82.                     CurrentLine++;
  83.                     printline(CurrentLine);
  84.                 } else
  85.                     puts(Bottom);
  86.                 break;
  87.             case '-':
  88.                 putchar('\n');
  89.                 if (CurrentLine > 1) {
  90.                     CurrentLine--;
  91.                     printline(CurrentLine);
  92.                 } else 
  93.                     puts(Top);
  94.                 break;
  95.             case '$':
  96.                 putchar('\n');
  97.                 CurrentLine = NumberLines;
  98.                 setline(CurrentLine);
  99.                 puts(Bottom);
  100.                 break;
  101.             case '^':
  102.                 putchar('\n');
  103.                 CurrentLine = 1L;
  104.                 setline(CurrentLine);
  105.                 puts(Top);
  106.                 break;
  107.             case 'C':
  108.                 puts("Change lines.");
  109.                 multi_change();
  110.                 changed = 'Y';
  111.                 break;
  112.             case 'D':
  113.                 puts("Delete lines.");
  114.                 multi_delete();
  115.                 changed = 'Y';
  116.                 break;
  117.             case 'P':
  118.                 puts("Print.");
  119.                 multi_print();
  120.                 break;
  121.             case 'a':
  122.                 printf("Appending after line # %ld\n", CurrentLine);
  123.                 append(CurrentLine);
  124.                 changed = 'Y';
  125.                 break;
  126.             case 'c':
  127.                 printf("Change line # %ld\n", CurrentLine);
  128.                 change(CurrentLine);
  129.                 changed = 'Y';
  130.                 break;
  131.             case 'd':
  132.                 printf("Deleted line # %ld\n", CurrentLine);
  133.                 subtract(CurrentLine);
  134.                 changed = 'Y';
  135.                 break;
  136.             case 'f':
  137.             case '/':
  138.                 puts("Find string.");
  139.                 go_fish(CurrentLine);
  140.                 break;
  141.             case 'g':
  142.                 puts("Global.");
  143.                 go_global(CurrentLine);
  144.                 changed = 'Y';
  145.                 break;
  146.             case 'i':
  147.                 printf("Inserting before line %ld.\n", CurrentLine);
  148.                 insert(CurrentLine);
  149.                 changed = 'Y';
  150.                 break;
  151.             case 'n': /* next occurence */
  152.                 puts("Next.");
  153.                 find('v');
  154.                 break;
  155.             case 'p':
  156.                 puts("print.");
  157.                 printline(CurrentLine);
  158.                 break;
  159.             case 'q':
  160.                 puts("quit.");
  161.                 if (WriteOnQuit == 'Y') {
  162.                     if(saveem(file) == OK) {
  163.                         return(OK);
  164.                     } else {
  165.                         fprintf(stderr, "%s: Write on quit set, but save failed.\n", Progname);
  166.                         WriteOnQuit='N';
  167.                         break;
  168.                     }
  169.                     
  170.                 }
  171.                 if (changed == 'Y') {
  172.                     fputs("File changed, are you sure (y/n) ? ", stdout);
  173.                     c=yesno();
  174.                     if (c == 'N') 
  175.                         break;
  176.                 }
  177.                 return(OK);
  178.                 break;
  179.             case 's':
  180.                 puts("search/replace");
  181.                 srchrep(CurrentLine);
  182.                 changed = 'Y';
  183.                 break;
  184.             case 'w':
  185.                 puts("Saveing.");
  186.                 saveem(file);
  187.                 changed = 'N';
  188.                 break;
  189.             case '?':
  190.                 puts("Help.");
  191.                 help();
  192.                 break;
  193.             default:
  194.                 puts("? - for help");
  195.                 break;
  196.                 
  197.         }
  198.     }
  199. }
  200.