home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-07-23 | 32.1 KB | 1,410 lines |
- Newsgroups: comp.sources.misc
- organization: Univ. of Pittsburgh, Comp & Info Sys
- subject: v07i101: Index insertor for Scribe, TeX/LaTeX, *roff, etc. part 02/02
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Reply-To: jbw@unix.cis.pittsburgh.edu (Jingbai Wang)
-
- Posting-number: Volume 7, Issue 101
- Submitted-by: jbw@unix.cis.pittsburgh.edu (Jingbai Wang)
- Archive-name: indexor/part02
-
- [[See part 1 for unpacking instructions. ++bsa]]
- #! /bin/sh
- # This file was wrapped with "dummyshar". "sh" this file to extract.
- # Contents: indexor.c-2
- echo extracting 'indexor.c-2'
- if test -f 'indexor.c-2' -a -z "$1"; then echo Not overwriting 'indexor.c-2'; else
- sed 's/^X//' << \EOF > 'indexor.c-2'
- X
- X}
- X
- Xcursor_right()
- X{
- X
- Xif (cursor_mark>=buffer_length-1) {next_page(); return;}
- X ++cursor_mark; cursor_position();
- X if (marker==1) printf("%c",buffer[cursor_mark]);
- X GOTOXY(chr[cursor_mark].x,chr[cursor_mark].y);
- X
- X}
- X
- Xcursor_left()
- X{
- X if (cursor_mark<=cursor_last) {cursor_mark=cursor_last; cursor_position();BELL; return;}
- X NORMAL; cursor_position();printf("%c",buffer[cursor_mark]);
- X --cursor_mark;
- X if (marker==1) REVERSE;
- X GOTOXY(chr[cursor_mark].x,chr[cursor_mark].y);
- X
- X
- X}
- X
- Xcursor_down()
- X{
- Xint i,the_stop;
- Xchar check;
- Xthe_stop=cursor_mark;
- X
- Xcursor_position();
- Xfor (i=cursor_mark;i<buffer_length;i++)
- X {if (i>=buffer_length-2) {next_page();return;}
- X if (buffer[i]==10) {cursor_mark=i+1;
- X cursor_position();goto check;}
- X }
- X
- Xcheck:
- X if (marker)
- X { GOTOXY(chr[the_stop].x,chr[the_stop].y);
- X for (i=the_stop;i<=cursor_mark;i++)
- X printf("%c",buffer[i]);
- X cursor_position();
- X }
- X}
- X
- Xcursor_up()
- X{
- Xchar check;
- Xint i,the_stop;
- Xif (cursor_mark<=cursor_last) {cursor_mark=cursor_last;cursor_position(); BELL; return;}
- X
- Xcursor_position();the_stop=cursor_mark;
- Xfor (i=cursor_mark;i>=cursor_last;i--)
- X {
- X if (buffer[i]==10) {cursor_mark=i-1;
- X GOTOXY(chr[cursor_mark].x,chr[cursor_mark].y);
- X goto check;}
- X }
- X cursor_mark=cursor_last; cursor_position(); BELL;
- X
- Xcheck:
- X if (marker)
- X {
- X NORMAL; GOTOXY(chr[cursor_mark+1].x,chr[cursor_mark+1].y);
- X for (i=cursor_mark+1;i<=the_stop;i++)
- X printf("%c",buffer[i]);
- X REVERSE;
- X GOTOXY(chr[cursor_mark].x,chr[cursor_mark].y);
- X }
- X
- X}
- X
- X
- X
- X
- X
- X
- Xmark_word()
- X{
- Xif (marker==0) mark_begin(); word_skip();return;
- X}
- X
- Xpass_marked()
- X{
- Xint i;
- Xif (marker==0) { word_skip();return;}
- XGOTOXY(chr[cursor_last].x,chr[cursor_last].y);
- Xmarker=0; NORMAL;
- X phrase_str[0]= 0;
- X for (i=cursor_last;i<=cursor_mark;i++)
- X printf("%c",buffer[i]);
- X
- Xcursor_mark=cursor_last;
- Xcursor_position();
- X}
- X
- X
- Xword_skip()
- X{
- Xint i, the_stop;
- Xchar check;
- X
- Xthe_stop=cursor_mark;
- Xif (cursor_mark>=buffer_length-1) {next_page(); return;}
- X
- Xcursor_right();
- Xfor (i=cursor_mark; i<buffer_length;i++)
- X {
- X
- X switch(buffer[i])
- X {case '!':
- X case ',':
- X case '"':
- X case '\'':
- X case '`':
- X case '(':
- X case ')':
- X case '[':
- X case ']':
- X case '/':
- X case '+':
- X case '=':
- X case '?':
- X case '<':
- X case '>':
- X case '{':
- X case '}':
- X case '*':
- X case '^':
- X case '&':
- X case '#':
- X case ':':
- X case ';':
- X case '|':
- X case 9:
- X case 10:
- X case 13:
- X case '~':
- X case '@':
- X case '\\':
- X case 32:
- X case '.': if (word_mark) {word_mark=0;cursor_mark=i-1;
- X cursor_position();
- X goto check;}
- X else break;
- X default: word_mark=1;
- X
- X }
- X }
- X
- Xcheck:
- X if(marker)
- X { GOTOXY(chr[the_stop].x,chr[the_stop].y);
- X for (i=the_stop;i<=cursor_mark;i++)
- X printf("%c",buffer[i]);
- X cursor_position();
- X }
- X
- X}
- X
- X
- X
- Xword_back()
- X{
- Xint i, the_stop;
- Xchar check;
- Xthe_stop=cursor_mark;
- Xcursor_left();
- Xfor (i=cursor_mark; i>=0;i--)
- X { if (i<=cursor_last) {cursor_mark=cursor_last;
- X cursor_position();BELL;goto check;}
- X
- X switch(buffer[i])
- X {case '!':
- X case ',':
- X case '"':
- X case '\'':
- X case '`':
- X case '(':
- X case ')':
- X case '[':
- X case ']':
- X case '/':
- X case '+':
- X case '=':
- X case '?':
- X case '<':
- X case '>':
- X case '{':
- X case '}':
- X case '*':
- X case '^':
- X case '&':
- X case '#':
- X case ':':
- X case ';':
- X case '|':
- X case 9:
- X case 10:
- X case 13:
- X case '~':
- X case '@':
- X case '\\':
- X case 32:
- X case '.':
- X if (word_mark) {word_mark=0; cursor_mark=i; cursor_position();
- X goto check;
- X }
- X else break;
- X default: word_mark=1;
- X
- X }
- X }
- X
- Xcheck:
- X if (marker)
- X {GOTOXY(chr[cursor_mark+1].x,chr[cursor_mark+1].y);
- X NORMAL;
- X for (i=cursor_mark+1;i<=the_stop;i++)
- X printf("%c",buffer[i]);
- X
- X REVERSE;
- X cursor_position();
- X }
- X}
- X
- X
- Xnext_page()
- X{
- Xint i, length, pre_row, ch_count;
- X
- XNORMAL;
- XCLS_UP();
- XGOTOXY(1,1); pre_row=0; ch_count=0;
- X
- Xif (end_outfile) {BELL; return;}
- X
- X
- Xif (marker){
- X if ((strlen(phrase_str)+strlen(&buffer[phrase_on]))<510)
- X strcat(phrase_str, &buffer[phrase_on]);
- X else marker=0;
- X}
- X
- Xfor (i=buffer_line[lines-2];i<buffer_length;i++)
- X {
- X if ((marker==1) && (i>=phrase_on)) {REVERSE;}
- X printf("%c", buffer[i]);
- X }
- X
- Xfor (i=cursor_last;i<buffer_length;i++)
- X { fprintf(outfile,"%c",buffer[i]);
- X if (buffer[i]==10)
- X {
- X if (next_flag==1) {
- X fprintf(outfile, "%s\n", next_str);
- X next_str[0]=0; next_flag=0;
- X }
- X }
- X
- X }
- X
- X
- Xcursor_last=0;
- Xphrase_on=0;
- Xcursor_mark=0;
- Xbuffer_length=0;
- XNORMAL;
- X
- Xif (end_infile) {end_outfile=1;
- X GOTOXY(17, 70); BOLD;printf("[EOF]"); BELL; return;}
- X
- Xend_infile=read_in();
- Xif (marker) {REVERSE; printf("%c",buffer[0]);cursor_position();}
- X}
- X
- X
- Xcontrol(inchar)
- Xchar inchar;
- X{
- Xchar ch;
- X
- X
- X switch(inchar)
- X {
- X case EXT:
- X#if unix|VMS
- X /* mainframe environment */
- X if (getch()!=EXT1) {BELL;break;}
- X ch=getch();
- X#else
- X /* DOS environment */
- X
- X ch=getch();
- X#endif
- X
- X switch(ch)
- X {
- X case L_ARROW: cursor_left();
- X break;
- X case R_ARROW: cursor_right();
- X break;
- X case D_ARROW: cursor_down();
- X break;
- X case U_ARROW: cursor_up();
- X break;
- X default: BELL;
- X }
- X
- X break;
- X case 13: if (marker==0) {mark_begin(); break;}
- X if (marker==1)
- X {mark_end(); index_now();}
- X break;
- X case 9: word_skip(); break;
- X case 'b':
- X case 'B':
- X case 8:
- X case 127:
- X word_back(); break;
- X case 32: next_page(); break;
- X case 'n':
- X case 'N': if (marker==1)
- X {mark_end();index_next_line();}
- X else BELL; break;
- X case 'p':
- X case 'P': pass_marked(); break;
- X case 'f':
- X case 'F': finish_up(); return(1); break;
- X case 'a':
- X case 'A': if (marker==1) mark_end(); see_also();break;
- X case 's':
- X case 'S': if (marker==1) mark_end();index_secondary();break;
- X case 'i':
- X case 'I': if (marker==1) mark_end();index_entry();break;
- X case 'g':
- X case 'G': if (marker==1) mark_end();
- X else warning("No current marked, will take the previous one");
- X glossary();
- X break;
- X case 'W':
- X case 'w': mark_word(); break;
- X case '@': set_up(); break;
- X case 6 : str_search(); break;
- X case 3 : all_done(); break;
- X#if unix
- X case 4 : all_done(); break;
- X#endif
- X default: BELL;
- X }
- X
- X
- X}
- X
- X
- X
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- Xint in_file,out_file, status;
- Xint i,j;
- Xchar infile_name[30], outfile_name[30];
- Xchar out_ok=1;
- Xchar ch, quit;
- Xchar getch();
- X
- X#if VMS
- X$DESCRIPTOR(terminal,"TT");
- X
- X status = SYS$ASSIGN(&terminal, &iochan, 0, 0);
- X if (status != SS$_NORMAL) exit(status);
- X
- Xsystem("set broadcast=none");
- X
- X#endif
- X
- X
- XNORMAL;
- XCLS;
- X
- Xswitch(argc)
- X {
- X case 1: in_file=1; out_file=1; break;
- X case 2: in_file=0; out_file=1; strcpy(infile_name,argv[1]); break;
- X default: in_file=0;out_file=0;
- X strcpy(infile_name,argv[1]);
- X strcpy(outfile_name,argv[2]); break;
- X }
- X
- X if (in_file)
- X {GOTOXY(5,15);
- X printf(" Input file (file to be indexed) >");
- X scanf("%s",infile_name);
- X fflush(stdin);
- X }
- X
- X if ((infile=fopen(infile_name,"r"))==NULL)
- X {GOTOXY(20,20); BLINK;
- X printf("Can't find the input file");
- X NORMAL; goto quit;
- X }
- X
- Xwhile (out_ok)
- X
- X {
- X if (out_file)
- X {GOTOXY(6,15); ERASE;
- X printf(" Output file (indexed file) >");
- X fscanf(stdin, "%s",outfile_name);
- X fflush(stdin);
- X }
- X
- X
- X out_ok=0;
- X if ((outfile=fopen(outfile_name,"r"))!=NULL)
- X { out_ok=1;
- X GOTOXY(7,16); ERASE;
- X out_file=1;
- X fflush(stdin);
- X printf("File %s already exits, overwrite ? [N]", outfile_name);
- X ch=getch();
- X ch=getch();
- X if ((ch=='y')||(ch=='Y')) out_ok=0;
- X fclose(outfile);
- X
- X }
- X
- X if (out_ok==0)
- X {
- X outfile=fopen(outfile_name,"w");
- X }
- X }
- X
- X
- X
- XNORMAL;
- XCLS;
- X
- Xhelp_menu();
- Xend_infile=read_in();
- X
- X while (1)
- X {
- X control(getch());
- X if (exit_flag) goto quit;
- X }
- X
- Xquit:
- XGOTOXY(25, 1);
- Xprintf("\n\t>>> Thank you for using INDEX MAKER >>>\n");
- Xprintf("\t>>> by Jingbai Wang, August 1988 >>>\n");
- X
- X
- X
- X}
- X
- Xwarning(warn_str)
- Xchar *warn_str;
- X{
- Xchar i;
- X
- XSAVE_CURSOR;
- XGOTOXY(24,5); REVERSE; BLINK;
- Xprintf("%s", warn_str); BELL; BELL;
- Xfor (i=1;i<10000;i++) ;
- XGOTOXY(24,1); RESTORE_CURSOR; NORMAL;
- X}
- X
- Xvoid clr_show()
- X{
- Xint i;
- Xfor (i=13;i<17;i++)
- X {NORMAL; GOTOXY(i,1);ERASE;}
- X}
- X
- X
- Xindex_now()
- X{ int i;
- Xfprintf(outfile, "%s%s%s%s",the_index,the_delimiter1,phrase_str,the_delimiter2);
- XSAVE_CURSOR;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s",the_index,the_delimiter1,out_str,the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X}
- X
- Xindex_next_line()
- X{
- Xint i;
- X
- Xnext_flag=1;
- Xstrcat(next_str, the_index);
- Xstrcat(next_str, the_delimiter1);
- X if ((strlen(next_str)+strlen(phrase_str))<510)
- X strcat(next_str, phrase_str);
- Xstrcat(next_str, the_delimiter2);
- XSAVE_CURSOR;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s}", the_index,the_delimiter1,out_str,the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X
- X}
- X
- Xsee_also()
- X{
- XSAVE_CURSOR;BELL;
- XGOTOXY(24,2); BLINK; REVERSE;
- Xprintf(" Primary="); NORMAL;printf("[%s]",save_str);
- Xget_line();
- Xif (memcmp(command_line,"",1)==0) strcpy(command_line, save_str);
- X else strcpy(save_str, command_line);
- Xfprintf(outfile, "%s%s%s%s%s%s,\n %s%s%s%s%s",the_seealso,the_delimiter1,
- Xthe_primary,the2_delimiter1,command_line, the2_delimiter2,the_second,
- Xthe2_delimiter1,phrase_str,the2_delimiter2, the_delimiter2);
- XGOTOXY(24,1);ERASE;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s%s%s,\n %s%s%s%s%s",the_seealso,the_delimiter1,
- Xthe_primary,the2_delimiter1,command_line, the2_delimiter2,the_second,
- Xthe2_delimiter1,out_str,the2_delimiter2, the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X
- X}
- X
- Xindex_entry()
- X{
- Xchar entry[20], number[30];
- Xstrcpy(save_str, phrase_str);
- X
- Xstrcpy(number, ",\nNumber=<");
- XSAVE_CURSOR;BELL;
- XGOTOXY(24,2); BLINK; REVERSE;
- Xprintf(" Entry="); NORMAL;printf("[%s]",phrase_str);
- Xget_line();
- Xif (memcmp(command_line,"",1)==0) strcpy(entry, phrase_str);
- X else strcpy(entry, command_line);
- XGOTOXY(24,1);ERASE;
- XGOTOXY(24,2); BLINK; REVERSE;
- Xprintf(" Number="); NORMAL;
- Xget_line();
- Xif (memcmp(command_line,"",1)==0) number[0]=0;
- X else {strcat(number, command_line); strcat(number, ">");}
- X
- X
- Xfprintf(outfile, "%s%s%s%s%s%s,\n %s%s%s%s%s%s",the_indexentry,the_delimiter1,
- Xthe_key,the2_delimiter1,phrase_str, the2_delimiter2,the_entry,
- Xthe2_delimiter1,entry,the2_delimiter2, number, the_delimiter2);
- XGOTOXY(24,1);ERASE;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s%s%s,\n %s%s%s%s%s%s",the_indexentry,the_delimiter1,
- Xthe_key,the2_delimiter1,out_str, the2_delimiter2,the_entry,
- Xthe2_delimiter1,entry,the2_delimiter2, number, the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X
- X}
- X
- Xindex_secondary()
- X{
- XSAVE_CURSOR;BELL;
- XGOTOXY(24,2); BLINK; REVERSE;
- Xprintf(" Primary="); NORMAL;printf("[%s]",save_str);
- Xget_line();
- Xif (memcmp(command_line,"",1)==0) strcpy(command_line, save_str);
- X else strcpy(save_str, command_line);
- Xfprintf(outfile, "%s%s%s%s%s%s,\n %s%s%s%s%s",the_indexsecond,the_delimiter1,
- Xthe_primary,the2_delimiter1,command_line, the2_delimiter2,the_second,
- Xthe2_delimiter1,phrase_str,the2_delimiter2, the_delimiter2);
- XGOTOXY(24,1);ERASE;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s%s%s,\n %s%s%s%s%s",the_indexsecond,the_delimiter1,
- Xthe_primary,the2_delimiter1,command_line, the2_delimiter2,the_second,
- Xthe2_delimiter1,out_str,the2_delimiter2, the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X
- X}
- X
- Xglossary()
- X{
- XSAVE_CURSOR;
- XGOTOXY(24,2); BLINK; REVERSE;
- Xprintf(" Description:"); NORMAL;
- Xget_line();
- Xfprintf(outfile, "%s%s%s%s%s%s,\n %s%s%s%s%s",the_gloss,the_delimiter1,
- Xg_primary,the2_delimiter1,phrase_str, the2_delimiter2,g_second,
- Xthe2_delimiter1,command_line,the2_delimiter2, the_delimiter2);
- XGOTOXY(24,1);ERASE;
- Xclr_show(); out_check();
- XGOTOXY(13,1);
- XBOLD;
- Xprintf("%s%s%s%s%s%s,\n %s%s%s%s%s",the_gloss,the_delimiter1,
- Xg_primary,the2_delimiter1,command_line, the2_delimiter2,g_second,
- Xthe2_delimiter1,out_str,the2_delimiter2, the_delimiter2);
- XNORMAL; RESTORE_CURSOR;
- X
- X}
- X
- X
- Xfinish_up()
- X{ char ch;
- X int i;
- X
- Xif(end_infile && end_outfile) {all_done(); exit();}
- X
- X
- Xif (marker) {mark_end(); index_now(); }
- X
- Xfor (i=cursor_last;i<buffer_length;i++)
- X {
- X if (buffer[i]==13)
- X {
- X if (next_flag==1) {
- X fprintf(outfile, "%s\n\n", next_str);
- X next_str[0]=0; next_flag=0;
- X }
- X }
- X else fprintf(outfile,"%c",buffer[i]);
- X }
- X
- X
- X
- Xif (end_infile==1) {all_done(); return;}
- XGOTOXY(24,35); BLINK; printf("Working ... \n");
- X
- X while (fscanf(infile,"%c",&ch)!=EOF)
- X {
- X if (ch==13);
- X else fprintf(outfile, "%c", ch);
- X }
- X all_done();NORMAL;
- X}
- X
- X
- Xall_done()
- X{
- Xfclose(infile); fclose(outfile); exit_flag=1;
- X#if VMS
- Xsystem("set broadcast=all");
- X#endif
- X}
- X
- X
- XCLS_UP()
- X{ char i;
- X
- Xfor(i=1;i<12;i++)
- X {GOTOXY(i,1); ERASE;}
- X
- X}
- X
- Xhelp_menu()
- X{
- XGOTOXY(12, 1);
- XREVERSE; printf(" ");
- Xprintf(" Inserting ");
- X
- XGOTOXY(17,1);
- Xprintf(" ===== ^H delete ======================== ^F Search string ===============");
- XNORMAL;
- XGOTOXY(18,3); BOLD; printf("SPACE BAR"); NORMAL; printf(" -- next page");
- XGOTOXY(19,3); BOLD; printf("<RETURN> 1"); NORMAL; printf(" -- set mark");
- XGOTOXY(20,3); BOLD; printf("<RETURN> 2"); NORMAL; printf(" -- end mark & index");
- XGOTOXY(21,3); BOLD; printf("<TAB>"); NORMAL; printf(" -- forward a word");
- XGOTOXY(22,40); BOLD; printf("G"); NORMAL; printf(" -- end mark & glossary");
- XGOTOXY(22,3); BOLD; printf("W"); NORMAL; printf(" -- mark word");
- XGOTOXY(21,40); BOLD; printf("B"); NORMAL; printf(" -- backward a word");
- XGOTOXY(20,40); BOLD; printf("N"); NORMAL; printf(" -- end mark & index in next line");
- XGOTOXY(19,40); BOLD; printf("P"); NORMAL; printf(" -- abandon the marked/skip a word ");
- XGOTOXY(18,40); BOLD; printf("F"); NORMAL; printf(" -- finish \
- X ^F--string search");
- XGOTOXY(23,40); BOLD; printf("S"); NORMAL; printf(" -- IndexSecondary");
- XGOTOXY(23,17); BOLD; printf("I"); NORMAL; printf(" -- IndexEntry");
- XGOTOXY(23,3); BOLD; printf("A"); NORMAL; printf(" -- SeeAlso");
- XGOTOXY(23,65); BOLD; printf("@"); NORMAL; printf(" -- set up");
- X}
- X
- X
- Xset_up()
- X{
- Xint the_row, i;
- Xint ch_count;
- Xchar ch, string[81];
- X
- Xch_count=0;
- XSAVE_CURSOR;
- XNORMAL; REVERSE;
- XGOTOXY(12,1);
- Xprintf(" Set-up Menu <TAB> to quit ");
- XNORMAL;
- Xfor (i=13;i<24;i++)
- X {GOTOXY(i,1);ERASE;}
- X
- XGOTOXY(13,3);printf("[%s]:",the_index);
- XGOTOXY(14,3);printf("[%s]:",the_indexentry);
- XGOTOXY(15,3);printf("[%s]:",the_indexsecond);
- XGOTOXY(16,3);printf("[%s]:",the_seealso);
- XGOTOXY(17,3);printf("[%s]:",the_primary);
- XGOTOXY(18,3);printf("[%s]:",the_second);
- XGOTOXY(19,3);printf("[%s]:",the_gloss);
- XGOTOXY(20,3);printf("Gloss k1 [%s]:",g_primary);
- XGOTOXY(21,3);printf("Gloss k2 [%s]:",g_second);
- XGOTOXY(22,3);printf("left delimiter 1 [%s]:",the_delimiter1);
- XGOTOXY(22,40);printf("right delimiter 1 [%s]:",the_delimiter2);
- XGOTOXY(23,3);printf("left delimiter 2 [%s]:",the2_delimiter1);
- XGOTOXY(23,40);printf("right delimiter 2 [%s]:",the2_delimiter2);
- X
- Xthe_row=13;
- Xset_up_in(the_row);
- X
- X while(1)
- X { ch=getch();
- X switch(ch)
- X {
- X case EXT:
- X#if unix | VMS
- X
- X /* VAX */
- X ch=getch(); if (ch!=EXT1) {BELL;break;}
- X ch=getch();
- X#else
- X /* DOS */
- X ch=getch();
- X#endif
- X switch(ch)
- X {
- X case L_ARROW:
- X case U_ARROW:
- X set_up_out(the_row); ch_count=0;string[0]=0;
- X --the_row; if (the_row<13) the_row=25;
- X set_up_in(the_row); break;
- X case R_ARROW:
- X case D_ARROW:
- X down: set_up_out(the_row);ch_count=0;string[0]=0;
- X ++the_row; if (the_row>25) the_row=13;
- X set_up_in(the_row); break;
- X default: BELL;
- X } break;
- X case 3 : all_done(); break;
- X#if unix
- X case 4 : all_done(); break;
- X#endif
- X case 1:
- X case 2:
- X case 5:
- X case 6:
- X case 7:
- X case 10:
- X case 11:
- X case 12:
- X case 14:
- X case 15:
- X case 16:
- X case 19:
- X case 20:
- X case 21:
- X case 22:
- X case 23:
- X case 24:
- X case 25:
- X case 26:BELL;break;
- X case 8:
- X case 127:
- X if (ch_count>0){
- X CURSOR_LEFT; ERASE;
- X string[--ch_count]=0;
- X } break;
- X
- X case 13: if (ch_count>0)
- X { string[ch_count]=0;
- X set_up_save(the_row, string);
- X } goto down;break;
- X case 9: NORMAL;for (i=12;i<24;i++)
- X {GOTOXY(i,1);ERASE;}
- X help_menu();RESTORE_CURSOR;
- X return;
- X default: printf("%c",ch);string[ch_count++]=ch;
- X
- X }
- X
- X }
- X
- X
- X}
- X
- X
- X
- X
- X
- Xset_up_in( the_row)
- Xint the_row;
- X{ REVERSE;
- X switch(the_row)
- X {
- X case 13:
- XGOTOXY(13,3);printf("[%s]:",the_index);break;
- Xcase 14:
- XGOTOXY(14,3);printf("[%s]:",the_indexentry);break;
- Xcase 15:
- XGOTOXY(15,3);printf("[%s]:",the_indexsecond);break;
- Xcase 16:
- XGOTOXY(16,3);printf("[%s]:",the_seealso);break;
- Xcase 17:
- XGOTOXY(17,3);printf("[%s]:",the_primary); break;
- Xcase 18:
- XGOTOXY(18,3);printf("[%s]:",the_second); break;
- Xcase 19:
- XGOTOXY(19,3);printf("[%s]:",the_gloss); break;
- Xcase 20:
- XGOTOXY(20,3);printf("Gloss k1 [%s]:",g_primary);break;
- Xcase 21:
- XGOTOXY(21,3);printf("Gloss k2 [%s]:",g_second); break;
- Xcase 22:
- XGOTOXY(22,3);printf("left delimiter 1 [%s]:",the_delimiter1);break;
- Xcase 23:
- XGOTOXY(22,40);printf("right delimiter 1 [%s]:",the_delimiter2);break;
- Xcase 24:
- XGOTOXY(23,3);printf("left delimiter 2 [%s]:",the2_delimiter1); break;
- Xcase 25:
- XGOTOXY(23,40);printf("right delimiter 2 [%s]:",the2_delimiter2);break;
- X
- X }
- X
- X}
- X
- X
- Xset_up_save(the_row, string)
- Xint the_row;
- Xchar *string;
- X{
- X switch(the_row)
- X {
- X case 13:strcpy(the_index,string);break;
- X case 14:strcpy(the_indexentry,string);break;
- X case 15:strcpy(the_indexsecond,string);break;
- X case 16:strcpy(the_seealso,string);break;
- X case 17:strcpy(the_primary,string);break;
- X case 18:strcpy(the_second,string);break;
- X case 19:strcpy(the_gloss,string);break;
- X case 20:strcpy(g_primary,string);break;
- X case 21:strcpy(g_second,string);break;
- X case 22:strcpy(the_delimiter1,string);break;
- X case 23:strcpy(the_delimiter2,string);break;
- X case 24:strcpy(the2_delimiter1,string);break;
- X case 25:strcpy(the2_delimiter2,string);break;
- X
- X }
- X
- X}
- X
- X
- X
- Xset_up_out(the_row)
- Xint the_row;
- X{ NORMAL;
- X switch(the_row)
- X {
- X case 13:GOTOXY(13,1);ERASE;
- XGOTOXY(13,3); printf("[%s]:",the_index);break;
- Xcase 14:GOTOXY(14,1);ERASE;
- XGOTOXY(14,3);printf("[%s]:",the_indexentry);break;
- Xcase 15:GOTOXY(15,1);ERASE;
- XGOTOXY(15,3);printf("[%s]:",the_indexsecond);break;
- Xcase 16:GOTOXY(16,1);ERASE;
- XGOTOXY(16,3);printf("[%s]:",the_seealso);break;
- Xcase 17:GOTOXY(17,1);ERASE;
- XGOTOXY(17,3);printf("[%s]:",the_primary); break;
- Xcase 18:GOTOXY(18,1);ERASE;
- XGOTOXY(18,3);printf("[%s]:",the_second); break;
- Xcase 19:GOTOXY(19,1);ERASE;
- XGOTOXY(19,3);printf("[%s]:",the_gloss); break;
- Xcase 20:GOTOXY(20,1);ERASE;
- XGOTOXY(20,3);printf("Gloss k1 [%s]:",g_primary);break;
- Xcase 21:GOTOXY(21,1);ERASE;
- XGOTOXY(21,3);printf("Gloss k2 [%s]:",g_second); break;
- Xcase 22:GOTOXY(22,3);printf(" ");
- XGOTOXY(22,3);printf("left delimiter 1 [%s]:",the_delimiter1);break;
- Xcase 23:GOTOXY(22,40);ERASE;
- XGOTOXY(22,40);printf("right delimiter 1 [%s]:",the_delimiter2);break;
- Xcase 24:GOTOXY(23,3);printf(" ");
- XGOTOXY(23,3);printf("left delimiter 2 [%s]:",the2_delimiter1); break;
- Xcase 25:GOTOXY(23,40);ERASE;
- XGOTOXY(23,40);printf("right delimiter 2 [%s]:",the2_delimiter2);break;
- X
- X }
- X
- X}
- X
- Xout_check()
- X{int i, rows, length, trunc;
- Xrows=1; trunc=256;
- X
- Xstrcpy(out_str,phrase_str);
- Xlength=strlen(out_str);
- X
- Xfor (i=0;i<length; i++)
- X {
- X if (out_str[i]==10) ++rows;
- X if (rows==2) {trunc=i-4;break;}
- X }
- X
- X
- Xif (length>trunc) {out_str[trunc]='.';out_str[trunc+1]='.';out_str[trunc+2]='.';
- Xout_str[trunc+3]=0;}
- X}
- X
- X
- X
- Xget_line()
- X{
- Xchar ch;
- Xint ch_count;
- X
- Xch_count=0;
- X
- Xcommand_line[0]=0;
- X
- X while(1)
- X { ch=getch();
- X switch(ch)
- X {
- X case 3: all_done(); break;
- X#if unix
- X case 4: all_done(); break;
- X#endif
- X case 0:
- X case 1:
- X case 2:
- X
- X case 5:
- X case 6:
- X case 7:
- X case 10:
- X case 11:
- X case 12:
- X case 14:
- X case 15:
- X case 16:
- X case 19:
- X case 20:
- X case 21:
- X case 22:
- X case 23:
- X case 24:
- X case 25:
- X case 26: BELL;break;
- X case 8:
- X case 127:
- X if (ch_count>0){
- X CURSOR_LEFT; ERASE;
- X command_line[--ch_count]=0;
- X } break;
- X case 13: if (ch_count>0)
- X command_line[ch_count]=0;
- X return;
- X default: printf("%c",ch);command_line[ch_count++]=ch;
- X
- X }
- X }
- X
- X}
- X
- X
- Xstr_search()
- X{
- Xchar *ptr;
- X#if unix
- Xchar *memchr();
- X#endif
- Xint same_page= -1;
- Xvoid this_page();
- Xint cursor_here=0,i;
- Xcommand_line[0]=0;
- XSAVE_CURSOR;
- X
- XGOTOXY(24,2); REVERSE;
- Xprintf("String:"); NORMAL; printf(" ");
- Xif (the_phrase[0]>0) printf("[%s]", the_phrase);
- Xget_line();
- X
- Xif (command_line[0]>0) strcpy(the_phrase, command_line);
- X else if (the_phrase[0]==0) {GOTOXY(24,2); ERASE; RESTORE_CURSOR;
- X return;}
- X
- Xptr=buffer;
- Xif (same_page<0)
- X while ( cursor_here<cursor_mark) {cursor_here++; ptr++;}
- X
- Xwhile (1){
- X
- Xwhile ((ptr=memchr(ptr, the_phrase[0], buffer_length))!=NULL)
- X {
- X if( memcmp(ptr, the_phrase, strlen(the_phrase))==0)
- X { GOTOXY(24,2); ERASE;
- X this_page(same_page*cursor_here); return;}
- X else {ptr++;}
- X }
- X
- X /* Writing the buffer into the output file */
- X
- Xfor (i=cursor_last;i<buffer_length;i++)
- X { fprintf(outfile,"%c",buffer[i]);
- X if ((same_page<0) && (buffer[i]==10))
- X {
- X if (next_flag) {
- X fprintf(outfile, "%s\n", next_str);
- X next_str[0]=0; next_flag=0;
- X }
- X }
- X
- X }
- X
- X
- Xif (same_page<0)
- X{
- X marker=0;
- Xcursor_last=0;
- Xphrase_on=0;
- Xcursor_mark=0;
- Xbuffer_length=0;
- Xnext_flag=0;
- Xsame_page=1;
- X}
- X
- X
- Xif (end_infile) { end_outfile=1;
- X GOTOXY(17, 70); BOLD;printf("[EOF]"); BELL;
- XGOTOXY(24, 2); printf("String not found");
- Xall_done();
- X exit();}
- X
- Xend_infile=read_in_only(); cursor_here=0; ptr=buffer;
- X }
- X
- X}
- X
- X
- Xint read_in_only()
- X{
- Xint i, quit_s;
- Xchar quit;
- Xchar string[81];
- X
- X
- Xbuffer_length=0;
- Xbuffer[0]=0;
- Xstring[0]=0;
- X quit_s=0;
- X
- Xfor (i=1;i<=8;i++)
- X { if( fgets(string,80,infile)==NULL)
- X {fclose(infile); quit_s=1; goto quit;}
- X strcat(buffer,string);
- X }
- X
- Xquit:
- Xbuffer_length=strlen(buffer);
- X
- Xreturn(quit_s);
- X}
- X
- X
- Xvoid this_page(cursor_here)
- Xint cursor_here;
- X{
- Xint i, cursor_there, the_cursor;
- X
- Xif (cursor_here<0) cursor_there= (-1)*cursor_here;
- X else cursor_there=0;
- X
- Xfor (i=cursor_there;i<buffer_length;i++)
- X if(memcmp(&buffer[i], the_phrase, strlen(the_phrase))==0)
- X {the_cursor=i; break;}
- X
- Xif (cursor_here<0) {
- X if (marker)
- X {REVERSE; cursor_mark=cursor_last; cursor_position(); marker=0;
- X for (i=cursor_last; i<=the_cursor; i++)
- X {
- X printf("%c", buffer[i]);
- X }
- X NORMAL;
- X }
- X cursor_mark= the_cursor;
- X cursor_position();
- X }
- X else
- X {
- X position();
- X NORMAL; CLS_UP(); NORMAL;
- X GOTOXY(3,1);
- X for (i=0;i<buffer_length;i++)
- X printf("%c", buffer[i]);
- X cursor_mark=the_cursor;
- X cursor_position();
- X }
- X
- Xreturn;
- X}
- X
- X
- X
- X/* for ultrix define V7 = 1 */
- X
- X/*
- X * The functions in this file negotiate with the operating system for
- X * characters, and write characters in a barely buffered fashion on the display.
- X * All operating systems.
- X */
- X
- X
- X#if MSDOS & TURBO
- X#include <conio.h>
- X#endif
- X
- X#if AMIGA
- X#define NEW 1006L
- X#define AMG_MAXBUF 1024L
- Xstatic long terminal;
- Xstatic char scrn_tmp[AMG_MAXBUF+1];
- Xstatic long scrn_tmp_p = 0;
- X#endif
- X
- X#if CPM
- X#include <bdos.h>
- X#endif
- X
- X#if MSDOS & (LATTICE | MSC | TURBO | AZTEC | MWC86)
- Xunion REGS rg; /* cpu register for use of DOS calls */
- Xint nxtchar = -1; /* character held from type ahead */
- X#endif
- X
- X#if RAINBOW
- X#include "rainbow.h"
- X#endif
- X
- X#if USG /* System V */
- X#include <signal.h>
- X#include <termio.h>
- X#include <fcntl.h>
- Xint kbdflgs; /* saved keyboard fd flags */
- Xint kbdpoll; /* in O_NDELAY mode */
- Xint kbdqp; /* there is a char in kbdq */
- Xchar kbdq; /* char we've already read */
- Xstruct termio otermio; /* original terminal characteristics */
- Xstruct termio ntermio; /* charactoristics to use inside */
- X#endif
- X
- X#if V7 | BSD
- X/*
- X#undef CTRL
- X*/
- X#include <sgtty.h> /* for stty/gtty functions */
- X#include <signal.h>
- Xstruct sgttyb ostate; /* saved tty state */
- Xstruct sgttyb nstate; /* values for editor mode */
- Xstruct tchars otchars; /* Saved terminal special character set */
- Xstruct tchars ntchars = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
- X /* A lot of nothing */
- X#if BSD
- X#include <sys/ioctl.h> /* to get at the typeahead */
- Xextern int rtfrmshell(); /* return from suspended shell */
- X#define TBUFSIZ 128
- Xchar tobuf[TBUFSIZ]; /* terminal output buffer */
- X#endif
- X#endif
- X
- X/*
- X * This function is called once to set up the terminal device streams.
- X */
- Xttopen()
- X{
- X
- X#if AMIGA
- X char oline[NSTRING];
- X#if AZTEC
- X extern Enable_Abort; /* Turn off ctrl-C interrupt */
- X
- X Enable_Abort = 0; /* for the Manx compiler */
- X#endif
- X strcpy(oline, "RAW:0/0/640/200/");
- X strcat(oline, PROGNAME);
- X strcat(oline, " ");
- X strcat(oline, VERSION);
- X strcat(oline, "/Amiga");
- X terminal = Open(oline, NEW);
- X#endif
- X#if CPM
- X#endif
- X
- X#if MSDOS & (HP150 == 0) & LATTICE
- X /* kill the ctrl-break interupt */
- X rg.h.ah = 0x33; /* control-break check dos call */
- X rg.h.al = 1; /* set the current state */
- X rg.h.dl = 0; /* set it OFF */
- X intdos(&rg, &rg); /* go for it! */
- X#endif
- X
- X#if USG
- X ioctl(0, TCGETA, &otermio); /* save old settings */
- X ntermio.c_iflag = 0; /* setup new settings */
- X ntermio.c_oflag = 0;
- X ntermio.c_cflag = otermio.c_cflag;
- X ntermio.c_lflag = 0;
- X ntermio.c_line = otermio.c_line;
- X ntermio.c_cc[VMIN] = 1;
- X ntermio.c_cc[VTIME] = 0;
- X ioctl(0, TCSETA, &ntermio); /* and activate them */
- X kbdflgs = fcntl( 0, F_GETFL, 0 );
- X kbdpoll = FALSE;
- X#endif
- X
- X#if V7 | BSD
- Xif (tt_status==tt_open) return;
- X gtty(0, &ostate); /* save old state */
- X gtty(0, &nstate); /* get base of new state */
- X nstate.sg_flags |= RAW;
- X nstate.sg_flags &= ~(ECHO|CRMOD); /* no echo for now... */
- X stty(0, &nstate); /* set mode */
- X ioctl(0, TIOCGETC, &otchars); /* Save old characters */
- X ioctl(0, TIOCSETC, &ntchars); /* Place new character into K */
- Xtt_status=tt_open;
- X#if BSD
- X /* provide a smaller terminal output buffer so that
- X the type ahead detection works better (more often) */
- X setbuffer(stdout, &tobuf[0], TBUFSIZ);
- X/*--- signal(SIGTSTP,SIG_DFL); set signals so that we can
- X signal(SIGCONT,rtfrmshell); suspend & restart emacs */
- X#endif
- X#endif
- X /* on all screens we are not sure of the initial position
- X of the cursor */
- X/*--- ttrow = 999;
- X ttcol = 999; */
- X
- X}
- X
- X/*
- X * This function gets called just before we go back home to the command
- X * interpreter.
- X * Another no-operation on CPM.
- X */
- Xttclose()
- X{
- X
- X#if AMIGA
- X#if LATTICE
- X amg_flush();
- X Close(terminal);
- X#endif
- X#if AZTEC
- X amg_flush();
- X Enable_Abort = 1; /* Fix for Manx */
- X Close(terminal);
- X#endif
- X#endif
- X#if CPM
- X#endif
- X#if MSDOS & (HP150 == 0) & LATTICE
- X /* restore the ctrl-break interupt */
- X rg.h.ah = 0x33; /* control-break check dos call */
- X rg.h.al = 1; /* set the current state */
- X rg.h.dl = 1; /* set it ON */
- X intdos(&rg, &rg); /* go for it! */
- X#endif
- X
- X#if USG
- X ioctl(0, TCSETA, &otermio); /* restore terminal settings */
- X fcntl(0, F_SETFL, kbdflgs);
- X#endif
- X
- X#if V7 | BSD
- Xif (tt_status==tt_close) return;
- X stty(0, &ostate);
- X ioctl(0, TIOCSETC, &otchars); /* Place old character into K */
- Xtt_status=tt_close;
- X#endif
- X
- X
- X}
- X
- X#if AMIGA
- Xamg_flush()
- X{
- X if(scrn_tmp_p)
- X Write(terminal,scrn_tmp,scrn_tmp_p);
- X scrn_tmp_p = 0;
- X}
- X#endif
- X
- X/*
- X * Flush terminal buffer. Does real work where the terminal output is buffered
- X * up. A no-operation on systems where byte at a time terminal I/O is done.
- X */
- Xttflush()
- X{
- X#if AMIGA
- X amg_flush();
- X#endif
- X
- X#if CPM
- X#endif
- X
- X#if MSDOS
- X#endif
- X
- X#if V7 | USG | BSD
- X fflush(stdout);
- X#endif
- X}
- X
- X/*
- X * Read a character from the terminal, performing no editing and doing no echo
- X * at all.
- X */
- Xttgetc()
- X{
- X#if AMIGA
- X char ch;
- X amg_flush();
- X Read(terminal, &ch, 1L);
- X return(255 & (int)ch);
- X#endif
- X#if CPM
- X return (biosb(BCONIN, 0, 0));
- X#endif
- X
- X#if RAINBOW
- X int Ch;
- X
- X while ((Ch = Read_Keyboard()) < 0);
- X
- X if ((Ch & Function_Key) == 0)
- X if (!((Ch & 0xFF) == 015 || (Ch & 0xFF) == 0177))
- X Ch &= 0xFF;
- X
- X return Ch;
- X#endif
- X
- X#if MSDOS & MWC86
- X return (getcnb());
- X#endif
- X
- X#if MSDOS & (LATTICE | MSC | TURBO | AZTEC)
- X int c; /* character read */
- X
- X /* if a char already is ready, return it */
- X if (nxtchar >= 0) {
- X c = nxtchar;
- X nxtchar = -1;
- X return(c);
- X }
- X
- X /* call the dos to get a char */
- X rg.h.ah = 7; /* dos Direct Console Input call */
- X intdos(&rg, &rg);
- X c = rg.h.al; /* grab the char */
- X return(c & 255);
- X#endif
- X
- X#if V7 | BSD
- X return(127 & fgetc(stdin));
- X#endif
- X
- X#if USG
- X if( kbdqp )
- X kbdqp = FALSE;
- X else
- X {
- X if( kbdpoll && fcntl( 0, F_SETFL, kbdflgs ) < 0 )
- X return FALSE;
- X kbdpoll = FALSE;
- X while (read(0, &kbdq, 1) != 1)
- X ;
- X }
- X return ( kbdq & 127 );
- X#endif
- X}
- EOF
- chars=`wc -c < 'indexor.c-2'`
- if test $chars != 30576; then echo 'indexor.c-2' is $chars characters, should be 30576 characters!; fi
- fi
- exit 0
-