bvi-1.3.2/0040775000567000056700000000000010012766702010060 5ustar bgbgbvi-1.3.2/acconfig.h0100644000567000056700000000024307625244626012010 0ustar bgbg/***** begin user configuration section *****/ #undef HAVE_NCURSES_H #undef HAVE_CURSES_H #undef NO_SYSERRL #undef NEED_PUTC_CHAR #undef HAVE_NCURSES_TERM_H bvi-1.3.2/bc/0040775000567000056700000000000007412100442010435 5ustar bgbgbvi-1.3.2/bc/bvi/0040775000567000056700000000000007412100442011215 5ustar bgbgbvi-1.3.2/bc/bvi/BVI.DSK0100644000567000056700000000063107412100442012173 0ustar bgbgTurbo C Context File   db7EDIT.CRECOMP.CCOMM.CRECOMP.Ce *.CPP*.Cz *.CPP*.C&`"&`"S&p&pG:\BORC\BVI130E\COMM.C&`"&`"bvi-1.3.2/bc/bvi/BVI.PRJ0100644000567000056700000001575407412100442012221 0ustar bgbgTurbo C Project File  2R    @       d      "#$%&'+k[]^bcdefghmnoqsuvwxyz{|}~-D\EXEE.\BORC\INCLUDEEUDE/\BORC\LIBBLIB032125210034*5*6*7*8*9*:*;*<*=*>*?*@testAD32767E8192F:\TMP\USRUEC.CPPG3c) ~GREPgrep-n+ $MEM(128) $NOSWAP $PROMPT $CAP MSG(GREP2MSG)void *.c ~Turbo AssemblerTASM/MX /ZI /O $TASMTurbo ~Debuggertd$EXENAMETurbo ~Profilertprof$EXENAMER~esource CompilerRC$RC~Import LibrarianIMPLIB$IMPLIB5..\..\BORC\LIB\WILDARGS.OBJ'c)% BVI.CRCE\BVI\BVI.C(c)"<COMM.CCE\BVI\COMM.C(c)yDOSIO.CE\BVI\DOSIO.C ")c). RE.CURCE\BVI\RE.C $)c) uSET.CRCE\BVI\SET.C&*c)DRECOMP.CVI130E\RECOMP.CEDIT.C\BVI130E\EDIT.C6i) ^B7t[@'\D/3 )TT'((@@@ @ @ @ @ @@@@(Jt(Jt(@@@(@(Jt(Jt((RECOMP.C%((@@@ @ @ @ @ @@@@(Jt(Jt(@@@(@(Jt(Jt((SET.C#((@@@ @ @ @ @ @@@@(Jt(Jt(@@@(@(Jt(Jt((RE.CV(@@@ @@ @@@!@(@ @ @ @ @@@@(Jt(Jt(@(.\INCLUDE\IO.H@..@..\INCLUDE\MEM.H@..\INCLUDE\BIOS.HV(DOSIO.C@..\INCLUDE\DIR.H@..\INCLUDE\IO.H@..\INCLUDE\FCNTL.H((@@@ @ @ @ @ @@@@(Jt(Jt(@@@(@@@Jt((COMM.C@..\INCLUDE\LOCALE.H(SET.HƮ(@(@@@ @ @ @ @ @@@@(Jt(Jt(@@@(@Ʈ(@@..\INCLUDE\ALLOC.H@..\INCLUDE\DOS.H@..\INCLUDE\CONIO.HJt(DOSCUR.HJt(DOSCONF.H(PATCHLEV.H@..\INCLUDE\SETJMP.H@..\INCLUDE\SYS\STAT.H@..\INCLUDE\SIGNAL.H@..\INCLUDE\CTYPE.H@..\INCLUDE\ERRNO.H@..\INCLUDE\STDLIB.H@..\INCLUDE\STRING.H@..\INCLUDE\_NULL.H@..\INCLUDE\_NFILE.H@..\INCLUDE\_DEFS.H@..\INCLUDE\STDIO.H(BVI.H@..\INCLUDE\SYS\TYPES.HƮ(BVI.C7NMLKJIHGFEDCBA@?>=<;:98766bvi-1.3.2/bc/bvi/TCCONFIG.TC0100644000567000056700000002717607412100442012651 0ustar bgbgTurbo C Configuration File    4&C   !!4@4:2,VQ>BY^\  - ~3k0L@dID`F7}776\87\6@6>6B6D6L6Q6i6f67]7^776^7V7Y7o7l7u7r97\6U7W7V7X7S7T7U8W8S8T8R8Q8Q7R7BbCcDmdmmHhI i  Kk Ll PpQmqmmRuruuSsTtU u  VvWqwqqYy01234!5$6'7*8-90AaBbCucuuDidiiElellFyfyyKk PpRrrrrSfsffXoxooYbybb03182=3B4G5L6Q7V8[9`[ee]hhFfIi OxoxxRrTtUuTU==3>V=3>W=33)(%&'3333 3!3"39 8*8-8+eTf,eUf,ef,ef,eV=f,eW=f,ef,ef,ef,ef,ef,e f,e!f,e"f,N*,N+,NA+*,BNAK+*,B3.?3/?4?^_-0,?1,?2?EF9 S7777777777 36?36?36?36?36?36?36?36?36?36 ?3L3M9)dE3,3F3GC@M3-#GIRPY& !8c3B3>J$<_ab7*/**/()[]{}<>""'' uuM4U:p28 c77768789976g6666666667]7^77\67777U7W7V7X7S7 T7U8W8u88S8 T8Q7R7678788 7E7 8y8_88a8`8ia8lb8oc8rd8ue8xf8{g8~h8i87777777777 9 9B%b%%CTcTTDdHRhRRI_i_ _K)k) )L-l- -PpQqRrSsT8t88UauaaVXvXXWwY\y\\0i1l2o3r4u5x6{7~89AaBCbCCCcDdEeFfKGkG GPKpKKRrSsXxYy0123456789[]FfIi OoRrTtUuTU==3>V=3>W=33)(%&'3333 3!3"39 8*8-8+eTf,eUf,ef,ef,eV=f,eW=f,ef,ef,ef,ef,ef,e f,e!f,e"f,N*,N+,NA+*,BNAK+*,B3.?3/?4?^_-0,?1,?2?EF9 S7777777777 36?36?36?36?36?36?36?36?36?36 ?3L3M9)dE3,3F3GC@M3-#GIRPY& !8c3B3>J$<_ab7*/**/()[]{}<>""''ap pxt$p pxt$pp pxt$qN110O@N 1111+1?N??:1111+1?N??:117>0111100>01??:1~pqtpq1111+1?N??:1111+1?N??:11pz11~p~p~~x/.+. .x//0>/8?>0>8pppppwppppwppwppwpwpwppppwwppwppwpppwppppxpppxppxpxpxxxxpxxxpxxxpppwpppwpwpwpwpwppxppwpwpwpppwppppxpppxppxpxpxbvi-1.3.2/bc/bvi/TCPICK.TCP0100644000567000056700000000225407412100442012540 0ustar bgbgTurbo C Pick List File  D:\TC\BVI130E\BVI.CH D:\TC\BVI130E\IO.CLEV.H D:\TC\BVI130E\DOSIO.C^'D:\TC\BMORE\BMORE.CCD:\TC\BVI130D\DOSIO.CS.HD:\TC\BVI130E\NONAME.C"ND:\TC\BVI130E\COMM.CT.H D:\TC\BVI130E\BVI.HH D:\TC\BVI120J\BVI.C.H W%!N ! 6ɹ)(V(p((((ア(d ef bviizeadg hPbvi-1.3.2/bc/bmore/0040775000567000056700000000000007412100442011541 5ustar bgbgbvi-1.3.2/bc/bmore/BMORE.PRJ0100644000567000056700000001357507412100442012770 0ustar bgbgTurbo C Project File  2R    @       d      "#$%&'+k[]^bcdefghmnoqsuvwxyz{|}~-DG:\EXE.G:\BORC\INCLUDEC:\PCNFS\WINSOCK\INCLUDE/G:\BORC\LIBC:\PCNFS\WINSOCK032125210034*5*6*7*8*9*:*;*<*=*>*?*@AD32767E8192FC.CPG3|R) ~GREPgrep-n+ $MEM(128) $NOSWAP $PROMPT $CAP MSG(GREP2MSG)void *.c ~Turbo AssemblerTASM/MX /ZI /O $TASMTurbo ~Debuggertd$EXENAMETurbo ~Profilertprof$EXENAMER~esource CompilerRC$RC~Import LibrarianIMPLIB$IMPLIB5|R) @ =..\BMORE\BMORE.CRE.C|R)..\BMORE\BM_DOS.COS.C|R)B..\BMORE\RECOMP.CMP.C ..\LIB\WILDARGS.OBJ.OBJ K (BM_DOS.C ȭ(RECOMP.C i(TEMP.C AK   ..     ?[?:]???6hO7xi@@ȭ(<(@@@ @ @ @ @ @@@@(|R)H{(@@@( @ @ @ (SET.H@..\INCLUDE\DOS.HH{(DOSCUR.H<(BVI.Hȭ(RECOMP.CC)C)@@@ @ @ @ @ @@@@(|R)@@@@@C)BM_DOS.C@..\INCLUDE\ALLOC.H@..\INCLUDE\BIOS.H@..\INCLUDE\CONIO.H{R)@C)@@@ @ @ @ @ @@@@(|R)@@@|R)DOSCONF.H(PATCHLEV.H@..\INCLUDE\SETJMP.H@..\INCLUDE\SYS\STAT.H@..\INCLUDE\SIGNAL.H@..\INCLUDE\CTYPE.H@..\INCLUDE\ERRNO.H@..\INCLUDE\STDLIB.H@..\INCLUDE\STRING.H@..\INCLUDE\_NULL.H@..\INCLUDE\_NFILE.H@..\INCLUDE\_DEFS.H@..\INCLUDE\STDIO.HC)BMORE.H@..\INCLUDE\SYS\TYPES.H{R)BMORE.C7*)('&%$#"! bvi-1.3.2/bc/bmore/BMORE.TCP0100644000567000056700000000225407412100442012753 0ustar bgbgTurbo C Pick List File  D:\TC\BVI130E\RECOMP.CHD:\TC\MORE\MORE.CH.HT%D:\TC\BVI130E\DOSIO.CCD:\TC\BMORE\BMORE.HTAT.HD:\TC\BMORE\BM_DOS.CHD:\TC\BMORE\RECOMP.C.C#D:\TC\BMORE\BMORE.C.HD:\TC\BMORE\PATCHLEV.HSD:\TC\BVI130E\BM_UNIX.CHH#$!T%# 6(MO (n((ȭ(p(((d gef to_scrollkt_xg d2feldce_fp)p)hPTEMP.CT.ALETTE.Cbvi-1.3.2/bc/bmore/TCCONFIG.TC0100644000567000056700000002717607412100442013175 0ustar bgbgTurbo C Configuration File    4&C   !!4@4:2,VQ>BY^\  - ~3k0L@dID`F7}776\87\6@6>6B6D6L6Q6i6f67]7^776^7V7Y7o7l7u7r97\6U7W7V7X7S7T7U8W8S8T8R8Q8Q7R7BbCcDmdmmHhI i  Kk Ll PpQmqmmRuruuSsTtU u  VvWqwqqYy01234!5$6'7*8-90AaBbCucuuDidiiElellFyfyyKk PpRrrrrSfsffXoxooYbybb03182=3B4G5L6Q7V8[9`[ee]hhFfIi OxoxxRrTtUuTU==3>V=3>W=33)(%&'3333 3!3"39 8*8-8+eTf,eUf,ef,ef,eV=f,eW=f,ef,ef,ef,ef,ef,e f,e!f,e"f,N*,N+,NA+*,BNAK+*,B3.?3/?4?^_-0,?1,?2?EF9 S7777777777 36?36?36?36?36?36?36?36?36?36 ?3L3M9)dE3,3F3GC@M3-#GIRPY& !8c3B3>J$<_ab7*/**/()[]{}<>""'' uuM4U:p28 c77768789976g6666666667]7^77\67777U7W7V7X7S7 T7U8W8u88S8 T8Q7R7678788 7E7 8y8_88a8`8ia8lb8oc8rd8ue8xf8{g8~h8i87777777777 9 9B%b%%CTcTTDdHRhRRI_i_ _K)k) )L-l- -PpQqRrSsT8t88UauaaVXvXXWwY\y\\0i1l2o3r4u5x6{7~89AaBCbCCCcDdEeFfKGkG GPKpKKRrSsXxYy0123456789[]FfIi OoRrTtUuTU==3>V=3>W=33)(%&'3333 3!3"39 8*8-8+eTf,eUf,ef,ef,eV=f,eW=f,ef,ef,ef,ef,ef,e f,e!f,e"f,N*,N+,NA+*,BNAK+*,B3.?3/?4?^_-0,?1,?2?EF9 S7777777777 36?36?36?36?36?36?36?36?36?36 ?3L3M9)dE3,3F3GC@M3-#GIRPY& !8c3B3>J$<_ab7*/**/()[]{}<>""''ap pxt$p pxt$pp pxt$qN110O@N 1111+1?N??:1111+1?N??:117>0111100>01??:1~pqtpq1111+1?N??:1111+1?N??:11pz11~p~p~~x/.+. .x//0>/8?>0>8pppppwppppwppwppwpwpwppppwwppwppwpppwppppxpppxppxpxpxxxxpxxxpxxxpppwpppwpwpwpwpwppxppwpwpwpppwppppxpppxppxpxpxbvi-1.3.2/bc/bmore/TCDEF.DSK0100644000567000056700000000051407412100442012724 0ustar bgbgTurbo C Context File   e *.CPP*.Cz *.CPPEDIT.CV&`"&pE:\SOURCE\SOCKET\SREAD1.C##U&&E:\SOURCE\SOCKET\SREAD.C I?EI(&`"S@@@ "ML&`"&`"qbvi-1.3.2/bm_dos.c0100755000567000056700000000337307701240034011467 0ustar bgbg/* BM_DOS.C - DOS specific subroutines for BMORE * * 2000-05-10 V 1.3.0 alpha * 2000-07-07 V 1.3.0 final * 2001-12-07 V 1.3.1 * 2003-07-03 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ /* #define DEBUG 1 */ #include "bmore.h" #define TBUFSIZ 1024 extern off_t bytepos, screen_home; extern FILE *curr_file; /* extern int screenlines; */ int got_int; int no_intty, no_tty; #ifdef DEBUG FILE *dbug; #endif void initterm() { maxx = 80; maxy = 25; } void set_tty () { } void reset_tty () { } void sig() { signal(SIGINT, sig); got_int = TRUE; } /* * doshell() - run a command or an interactive shell */ void doshell(cmd) char *cmd; { system(cmd); printf("\r"); clearscreen(); fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; } void highlight() { highvideo(); } void normal() { normvideo(); } void clearscreen() { clrscr(); } void home() { gotoxy(1, 1); } /* force clear to end of line */ cleartoeol() { clreol(); } int vgetc() { return ((char)bioskey(0)); } bvi-1.3.2/bmore.10100644000567000056700000001372107774127650011263 0ustar bgbg.TH BMORE 1 "3 Jan 2004" .SH NAME bmore \- browse through a binary file .SH SYNOPSIS .B bmore [ .B \-acdi ] [ .B \-n \fIlines\fP ] [ .B \-w \fIcols\fP ] [ .B +\fIlinenumber\fP ] [ .B +/\fIASCII-pattern\fP ] [ .B +\\\\\fIHex-pattern\fP ] [ .I filename \&.\|.\|. ] .LP .if n .ti +05i .SH DESCRIPTION .IX "bmore command" "" "\fLbmore\fP \(em browse binary file" .IX "binary file, browse through" \fLbmore\fP .IX file "browse bmore" "" "browse through binary\(em \fLbmore\fP" .IX display "file by screenfuls \(em \fLbmore\fP" .LP .B more is a filter that displays the contents of a binary file on the terminal, one screenful at a time. It normally pauses after each screenful, and prints .B --More-- at the bottom of the screen. .B bmore provides a two-line overlap between screens for continuity. If .B bmore is reading from a file rather than a pipe, the percentage of characters displayed so far is also shown. .LP .B bmore scrolls up to display one more screen line in response to a .SM RETURN character; it displays another screenful in response to a .SM SPACE character. Other commands are listed below. .LP The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset \*(L'0\*(R' (zero). .LP .B bmore sets the terminal to .I noecho mode, so that the output can be continuous. Commands that you type do not normally show up on your terminal, except for the .B / , .B \\\\ and .B ! commands. .LP If the standard output is not a terminal, .B more acts just like .BR cat (1V), except that a header is printed before each file in a series. .SH OPTIONS .TP .B \-a ASCII mode: no hex representation of the contents. Non printable characters are displayed as a dot (.) .TP .B \-c Clear before displaying. Redrawing the screen instead of scrolling. .TP .B \-d Display error messages rather than ringing the terminal bell if an unrecognized command is used. This is helpful for inexperienced users. .TP .B \-i Ignore case for searching. .TP .B \-n \fIlines\fP Displays the indicated number of \fIlines\fP in each screenful, rather than the default (the number of lines in the terminal screen less two). .TP .B \-w \fIcols\fP Display number of \fIcols\fP in each line. .TP .BI + linenumber\fP Start up at .IR linenumber . .TP .BI +/ ASCII-pattern\fP Start up at the line containing the regular expression .IR pattern . Note: unlike editors, this construct should .I not end with a .RB ` / '. If it does, then the trailing slash is taken as a character in the search pattern. .TP .br .ne 8 .SH USAGE .SS Commands .LP The commands take effect immediately; it is not necessary to type a carriage return. Up to the time when the command character itself is given, the user may type the line kill character to cancel the numerical argument being formed. In addition, the user may type the erase character to redisplay the .RB ` "--More--(\fIxx\fP%)" ' message. .LP In the following commands, .I i is a numerical argument .RB ( 1 by default). .TP 10 .IR i \s-1SPACE\s0 Display another screenful, or .I i more lines if .I i is specified. .TP .IR i \s-1RETURN\s0 Display another line, or .I i more lines, if specified. .TP .IB i ^D (\s-1CTRL\s0\-D) Display (scroll down) 11 more lines. .I i is given, the scroll size is set to .IR i\| . .TP .IR i d Same as .BR ^D . .TP .IB i z Same as .SM SPACE, except that .IR i\| , if present, becomes the new default number of lines per screenful. .TP .IB i s Skip .I i\| lines and then print a screenful. .TP .IB i f Skip .I i screenfuls and then print a screenful. .TP .IB i ^B (\s-1CTRL-B\s0) Skip back .I i screenfuls and then print a screenful. .TP .I b Same as .B ^B (\s-1CTRL-D\s0). .TP .B q .PD 0 .TP .B Q .PD Exit from .BR more . .TP .B = Display the current line number. .TP .B v Drop into the .BR bvi (1) editor at the current offset of the current file. .TP .B w Drop into the .BR bvi (1) editor at the current offset of the current file. Only the portion of the file displayed on the screen will be loaded. .TP .B h Help. Give a description of all the .B more commands. .TP .IB i / pattern Search for the .IR i\| th occurrence of the regular expression .IR pattern . Display the screenful starting at the file position that contains the .IR i\| th match for the regular expression .IR ASCII-pattern , or the end of a pipe, whichever comes first. If .B bmore is displaying a file and there is no such match, its position in the file remains unchanged. Regular expressions can be edited using erase and kill characters. Erasing back past the first column cancels the search command. .TP .B \' Single quote. Go to the point from which the last search started. If no search has been performed in the current file, go to the beginning of the file. .TP .BI ! command Invoke a shell to execute .IR command\| . The characters .B % and .BR ! , when used within .I command are replaced with the current filename and the previous shell command, respectively. If there is no current filename, .B % is not expanded. Prepend a backslash to these characters to escape expansion. .TP .IB i :n Skip to the .IR i\| th next filename given in the command line, or to the last filename in the list if .I i is out of range. .TP .IB i :p Skip to the .IR i\| th previous filename given in the command line, or to the first filename if .I i is out of range. If given while .B more is positioned within a file, go to the beginning of the file. If .B more is reading from a pipe, .B more simply rings the terminal bell. .br .ne 2 .TP .B :f Display the current filename and offset number. .br .ne 5 .TP .B :q .PD 0 .TP .B :Q .PD Exit from .B bmore (same as .B q or .B Q ). .TP .B \&. Dot. Repeat the previous command. .TP .SH FILES .PD 0 .TP 20 .B /etc/termcap terminal data base .TP .B /usr/local/share/bmore.help help file .PD .SH "SEE ALSO" .BR bvi (1), .BR termcap (5) bvi-1.3.2/bmore.c0100600000567000056700000004510707777604610011337 0ustar bgbg/* BMORE - binary more * * 1990-01-31 V 1.0.0 * 1990-09-04 V 1.1.0 * 2000-05-31 V 1.3.0 beta * 2000-10-18 V 1.3.0 final * 2002-01-16 V 1.3.1 * 2004-01-09 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1990-2004 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #ifdef HAVE_LOCALE_H # include #endif #if defined(__MSDOS__) && !defined(DJGPP) # define PRINTF cprintf #else # define PRINTF printf #ifndef HELPFILE # ifdef DJGPP # define HELPFILE "/dev/env/DJDIR/lib/bmore.help" # else # define HELPFILE "/usr/local/lib/bmore.help" # endif #endif #endif #include "bmore.h" char *copyright = "Copyright (C) 1990-2004 by Gerhard Buergmann"; int maxx, maxy; int mymaxx = 0, mymaxy = 0; char *name = NULL; char sstring[MAXCMD] = ""; /* string for search */ char estring[MAXCMD] = ""; /* string for shell escape */ char string[MAXCMD]; FILE *curr_file = NULL, *help_file; int AnzAdd; long precount = -1; /* number preceding command */ char **files; /* list of input files */ int numfiles; /* number of input files */ int file_nr = 0; /* number of current input file */ int arrnum = 0; char numarr[64]; /* string for collecting number */ char addr_form[15]; int ascii_flag = 0; int c_flag = 0, d_flag = 0; int exval = 0; int init_search = 0; char buffer1[MAXCMD], buffer2[MAXCMD]; int out_len; int corr = 0, do_header = 0, to_print; off_t init_byte = 0; off_t last_search = 0; off_t screen_home, filesize; off_t bytepos, oldpos; int prompt = 1; char helppath[MAXCMD]; static char progname[10]; static char cmdbuf[MAXCMD]; static int cnt = 0; static int icnt = 0; static int smode; char search_pat[BUFFER]; /* / or ? command */ char *emptyclass = "Empty byte class '[]' or '[^]'"; /* -a ASCII mode * -d beginners mode * -c clear before displaying * -i ignore case * -n number of lines/screen * -w width of screen */ void usage() { fprintf(stderr, "Usage: %s [-acdi] [-lines] [+linenum | +/pattern] name1 name2 ...\n", progname); exit(1); } int main(argc, argv) int argc; char *argv[]; { int ch, ch1; int colon = 0, last_ch = 0; long last_pre = 0; int lflag, repeat; long count; int i, n = 1; int d_line, r_line, z_line; char *poi; #if defined(__MSDOS__) && !defined(DJGPP) strcpy(helppath, argv[0]); poi = strrchr(helppath, '\\'); *poi = '\0'; strcat(helppath, "\\BMORE.HLP"); #else strncpy(helppath, HELPFILE, MAXCMD - 1); #endif #ifdef HAVE_LOCALE_H setlocale(LC_ALL, ""); #endif poi = strrchr(argv[0], DELIM); if (poi) strncpy(progname, ++poi, 9); else strncpy(progname, argv[0], 9); strtok(progname, "."); while (n < argc) { switch (argv[n][0]) { case '-': if (argv[n][1] >= '0' && argv[n][1] <= '9') { sscanf(&argv[n][1], "%dx%d", &mymaxy, &mymaxx); } else if (argv[n][1] == 'n') { if (argv[n+1] == NULL || argv[n+1][0] == '-') { usage(); } else { sscanf(&argv[++n][0], "%d", &mymaxy); } } else if (argv[n][1] == 'w') { if (argv[n+1] == NULL || argv[n+1][0] == '-') { usage(); } else { sscanf(&argv[++n][0], "%d", &mymaxx); } } else { i = 1; while (argv[n][i] != '\0') { switch (argv[n][i]) { case 'a': ascii_flag++; break; case 'c': c_flag++; break; case 'd': d_flag++; break; case 'i': ignore_case++; break; default: usage(); } i++; } } n++; break; case '+': /* +cmd */ if (argv[n][1] == '/' || argv[n][1] == '\\') { init_search = argv[n][1]; strcpy(sstring, &argv[n][2]); } else { if (argv[n][1] == '0') { init_byte = (off_t)strtol(argv[n] + 1, NULL, 16); } else { init_byte = (off_t)strtol(argv[n] + 1, NULL, 10); } } n++; break; default: /* must be a file name */ name = strdup(argv[n]); files = &(argv[n]); numfiles = argc - n; n = argc; break; } } initterm(); set_tty(); maxy -= 2; if (mymaxy) { maxy = mymaxy; } z_line = maxy; d_line = maxy / 2; r_line = 1; if (numfiles == 0) { curr_file = stdin; if (isatty(fileno(stdin)) != 0) { reset_tty(); usage(); } } else { file_nr = 1; while (open_file(name)) { do_next(1); } if (exval) { } else { fseek(curr_file, init_byte, SEEK_SET); bytepos += init_byte; } } screen_home = bytepos; AnzAdd = 10; strcpy(addr_form, "%08lX "); if (ascii_flag) out_len = ((maxx - AnzAdd - 1) / 4) * 4; else out_len = ((maxx - AnzAdd - 1) / 16) * 4; if (mymaxx) { out_len = mymaxx; } if (init_search) bmsearch(init_search); if (no_tty) { int fileloop; for (fileloop = 0; fileloop < numfiles; fileloop++) { while(!printout(1)); do_next(1); open_file(name); } fclose(curr_file); reset_tty(); exit(exval); } if (!exval) { if (printout(maxy)) { do_next(1); } } signal(SIGINT, sig); signal(SIGQUIT, sig); /* main loop */ do { to_print = 0; if (prompt) { if (prompt == 2) { while (open_file(name)) { do_next(1); } } highlight(); PRINTF("--More--"); if (prompt == 2) { PRINTF("(Next file: %s)", name); } else if (!no_intty && filesize) { PRINTF("(%d%%)", (int)((bytepos * 100) / filesize)); } if (d_flag) PRINTF("[Press space to continue, 'q' to quit]"); normal(); fflush(stdout); } ch = vgetc(); /* if (prompt == 2) { open_file(name); } */ prompt = 1; PRINTF("\r"); while (ch >= '0' && ch <= '9') { numarr[arrnum++] = ch; ch = vgetc(); } numarr[arrnum] = '\0'; if (arrnum != 0) precount = strtol(numarr, (char **)NULL, 10); else precount = -1; lflag = arrnum = 0; if (ch == '.') { precount = last_pre; ch = last_ch; repeat = 1; } else { last_pre = precount; last_ch = ch; if (ch == ':') colon = vgetc(); repeat = 0; } switch (ch) { case ' ': /* Display next k lines of text [current screen size] */ if (precount > 0) to_print = precount; else to_print = maxy; break; case 'z': /* Display next k lines of bytes [current screen size]* */ if (precount > 0) z_line = precount; to_print = z_line; break; case '\r': case '\n': /* Display next k lines of text [current screen size]* */ if (precount > 0) r_line = precount; to_print = r_line; break; case 'q': case 'Q': cleartoeol(); fclose(curr_file); reset_tty(); exit(exval); case ':' : switch (colon) { case 'f': prompt = 0; if (!no_intty) PRINTF("\"%s\" line %lu", name, (unsigned long)(bytepos - out_len)); else PRINTF("[Not a file] line %lu", (unsigned long)(bytepos - out_len)); fflush(stdout); break; case 'n': if (precount < 1) precount = 1; do_next(precount); PRINTF("\r"); cleartoeol(); PRINTF("\n...Skipping to file %s\r\n\r\n", name); prompt = 2; break; case 'p': if (precount < 1) precount = 1; do_next(-precount); PRINTF("\r"); cleartoeol(); PRINTF("\n...Skipping back to file %s\r\n\r\n", name); prompt = 2; break; case 'q': cleartoeol(); fclose(curr_file); reset_tty(); exit(exval); break; case '!': if (!no_intty) { cleartoeol(); if (rdline(colon, estring)) break; doshell(estring); PRINTF("------------------------\r\n"); break; } default: bmbeep(); } break; case '!': if (!no_intty) { cleartoeol(); if (rdline(ch, estring)) break; doshell(estring); PRINTF("------------------------\r\n"); break; } case 'd': /* Scroll k lines [current scroll size, initially 11]* */ case BVICTRL('D'): if (precount > 0) d_line = precount; to_print = d_line; break; case BVICTRL('L'): /*** REDRAW SCREEN ***/ if (no_intty) { bmbeep(); } else { clearscreen(); to_print = maxy + 1; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; } break; case 'b': /* Skip backwards k screenfuls of text [1] */ case BVICTRL('B'): if (no_intty) { bmbeep(); } else { if (precount < 1) precount = 1; PRINTF("...back %ld page", precount); if (precount > 1) { PRINTF("s\r\n"); } else { PRINTF("\r\n"); } screen_home -= (maxy + 1) * out_len; if (screen_home < 0) screen_home = 0; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; to_print = maxy + 1; } break; case 'f': /* Skip forward k screenfuls of bytes [1] */ case 's': /* Skip forward k lines of bytes [1] */ if (precount < 1) precount = 1; if (ch == 'f') { count = maxy * precount; } else { count = precount; } putchar('\r'); cleartoeol(); PRINTF("\n...skipping %ld line", count); if (count > 1) { PRINTF("s\r\n\r\n"); } else { PRINTF("\r\n\r\n"); } screen_home += (count + maxy) * out_len; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; to_print = maxy; break; case '\\': if (ascii_flag) { bmbeep(); break; } case '/': /**** Search String ****/ if (!repeat) { cleartoeol(); if (rdline(ch, sstring)) break; } case 'n': /**** Search Next ****/ case 'N': bmsearch(ch); /* to_print--; */ break; case '\'': if (no_intty) { bmbeep(); } else { bytepos = last_search; fseek(curr_file, bytepos, SEEK_SET); screen_home = bytepos; to_print = maxy; PRINTF("\r"); cleartoeol(); PRINTF("\n\r\n***Back***\r\n\r\n"); } break; case '=': prompt = 0; cleartoeol(); PRINTF("%lX hex %lu dec", (unsigned long)bytepos, (unsigned long)bytepos); fflush(stdout); break; case '?': case 'h': if ((help_file = fopen(helppath, "r")) == NULL) { emsg("Can't open help file"); break; } while ((ch1 = getc(help_file)) != EOF) putchar(ch1); fclose(help_file); to_print = 0; break; case 'w': case 'v': if (!no_intty) { cleartoeol(); if (ch == 'v') { sprintf(string, "bvi +%lu %s", (unsigned long)(screen_home + (maxy + 1) / 2 * out_len), name); } else { if (precount < 1) precount = bytepos - screen_home; sprintf(string, "bvi -b %lu -s %lu %s", (unsigned long)screen_home, (unsigned long)precount, name); } doshell(string); to_print = maxy + 1; break; } default : if (d_flag) { emsg("[Press 'h' for instructions.]"); } else { bmbeep(); } break; } if (to_print) { if (printout(to_print)) { do_next(1); } } } while (1); } int rdline(ch, sstring) int ch; char *sstring; { int i = 0; int ch1 = 0; char bstring[MAXCMD]; if (ch == '!') { strcpy(bstring, sstring); sstring[0] = '\0'; } putchar(ch); fflush(stdout); while (i < MAXCMD) { ch1 = vgetc(); if (ch1 == '\n' || ch1 == '\r' || ch1 == ESC) { break; } else if (ch1 == 8) { if (i) { sstring[--i] = '\0'; PRINTF("\r%c%s", ch, sstring); cleartoeol(); } else { ch1 = ESC; break; } } else if (ch1 == '!' && i == 0) { if (bstring[0] == '\0') { emsg("No previous command"); return 1; } putchar(ch1); PRINTF("\r%c%s", ch, bstring); strcat(sstring, bstring); i = strlen(sstring); } else { putchar(ch1); sstring[i++] = ch1; } fflush(stdout); } if (ch1 == ESC) { putchar('\r'); cleartoeol(); return 1; } if (i) sstring[i] = '\0'; return 0; } void do_next(n) int n; { if (numfiles) { if (n == 1 && file_nr == numfiles) { fclose(curr_file); reset_tty(); exit(exval); } if ((file_nr + n) > numfiles) file_nr = numfiles; else if ((file_nr + n) < 1) file_nr = 1; else file_nr += n; prompt = 2; free(name); name = strdup(*(files + file_nr - 1)); } else { fclose(curr_file); reset_tty(); exit(exval); } } int open_file(name) char *name; { struct stat buf; if (stat(name, &buf) > -1) { filesize = buf.st_size; } if (curr_file != NULL) fclose(curr_file); if (numfiles > 1) do_header = 1; if ((curr_file = fopen(name, "rb")) == NULL) { perror(name); exval = 1; return 1; } bytepos = screen_home = 0; return 0; } void putline(buf, num) char *buf; int num; { int print_pos; unsigned char ch; PRINTF(addr_form, (unsigned long)bytepos); for (print_pos = 0; print_pos < num; print_pos++) { ch = buf[print_pos]; if (!ascii_flag) { PRINTF("%02X ", ch); } ++bytepos; if ((ch > 31) && (ch < 127)) *(string + print_pos) = ch; else *(string + print_pos) = '.'; } for (; print_pos < out_len; print_pos++) { if (!ascii_flag) { PRINTF(" "); } ++bytepos; *(string + print_pos) = ' '; } *(string + num) = '\0'; if (no_tty) PRINTF("%s\n", string); else PRINTF("%s\r\n", string); } int printout(lns) int lns; { int c, num; int doub = 0; static int flag; if (c_flag) { clearscreen(); } if (do_header) { if (no_tty) { PRINTF("::::::::::::::\n%s\n::::::::::::::\n", name); } else { PRINTF("\r"); cleartoeol(); PRINTF("::::::::::::::\r\n%s\r\n::::::::::::::\r\n", name); } do_header = 0; corr = 2; } if (corr && (lns > maxy - 2)) lns -= corr; corr = 0; do { for (num = 0; num < out_len; num++) { if ((c = nextchar()) == -1) break; buffer1[num] = c; } if (!num) return 1; if (memcmp(buffer1, buffer2, num) || !bytepos ) { memcpy(buffer2, buffer1, num); putline(buffer2, num); if (!no_tty) flag = TRUE; lns--; } else { if (flag) { cleartoeol(); PRINTF("*\r\n"); lns--; } else { doub++; } flag = FALSE; bytepos += num; } if (lns == 0) { screen_home = bytepos - ((maxy + 1 + doub) * out_len); if (screen_home < 0) screen_home = 0; return 0; } } while(num); return 1; } int nextchar() { if (cnt == 0) return fgetc(curr_file); cnt--; return cmdbuf[icnt++] & 0xff; } void pushback(n, where) int n; char *where; { if (cnt) memmove(cmdbuf + n, cmdbuf, n); memcpy(cmdbuf, where, n); icnt = 0; cnt += n; } /* Return: * -1 EOF * 0 not found at current position * 1 found */ int bmregexec(scan) char *scan; { char *act; int count, test; int l; char act_pat[MAXCMD]; /* found pattern */ act = act_pat; l = 0; while (*scan != 0) { if ((test = nextchar()) == -1) return -1; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); switch (*scan++) { case ONE: /* exactly one character */ count = *scan++; if (count == 1) { if (test != *scan) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } scan++; } else if (count > 1) { if (sbracket(test, scan, count)) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } scan += count; } break; case STAR: /* zero or more characters */ count = *scan++; if (count == 1) { /* only one character, 0 - n times */ while (test == *scan) { if ((test = nextchar()) == -1) return -2; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } pushback(1, --act); l--; scan++; } else if (count > 1) { /* characters in bracket */ if (*scan == '^') { do { /* If we found something matching the next part of the expression, we * abandon the search for not-matching characters. */ if (bmregexec(scan + count)) { *act++ = test; /* May be wrong case !! */ l++; scan += count; bytepos--; break; } if (sbracket(test, scan, count)) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } else { if ((test = nextchar()) == -1) return -3; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } } while(1); } else { while(!sbracket(test, scan, count)) { if ((test = nextchar()) == -1) return -4; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } scan += count; pushback(1, --act); l--; } } else { /* ".*" */ do { if ((test = nextchar()) == -1) return -5; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } pushback(1, act - 1); bytepos--; } while (bmregexec(scan) == 0); bytepos++; act--; l--; } break; } } pushback(l, act_pat); return 1; /* found */ } int sbracket(start, scan, count) int start; char *scan; int count; { if (*scan++ == '^') { if (!memchr(scan, start, --count)) return 0; } else { if (memchr(scan, start, --count)) return 0; } return 1; } void bmsearch(ch) int ch; { int i; if (sstring[0] == '\0') { emsg("No previous regular expression"); return; } if (ch == '/') { if (ascii_comp(search_pat, sstring)) return; } if (ch == '\\') { if (hex_comp(search_pat, sstring)) return; } oldpos = bytepos; last_search = screen_home; if (precount < 1) precount = 1; while (precount--) { while ((i = bmregexec(search_pat)) == 0); if (i == 1) { screen_home = bytepos; to_print = maxy; } else { /* i == -1 -> EOF */ if (no_intty) { PRINTF("\r\nPattern not found\r\n"); do_next(1); } else { /* sprintf(string, "Pattern not found %d - %ul", i, (unsigned long)bytepos); emsg(string); */ emsg("Pattern not found"); bytepos = oldpos; fseek(curr_file, bytepos, SEEK_SET); break; } } if (precount) { nextchar(); bytepos++; } } if (prompt) { PRINTF("\r\n...skipping\r\n"); } } void emsg(s) char *s; { putchar('\r'); cleartoeol(); highlight(); PRINTF(s); normal(); fflush(stdout); prompt = 0; } void bmbeep() { putchar(7); } bvi-1.3.2/bmore.man0100664000567000056700000001532707777074412011704 0ustar bgbgBMORE(1) BMORE(1) NAME bmore - browse through a binary file SYNOPSIS bmore [ -acdi ] [ -n lines ] [ -w cols ] [ +linenumber ] [ +/ASCII-pattern ] [ +\Hex-pattern ] [ filename ... ] DESCRIPTION more is a filter that displays the contents of a binary file on the terminal, one screenful at a time. It nor- mally pauses after each screenful, and prints --More-- at the bottom of the screen. bmore provides a two-line over- lap between screens for continuity. If bmore is reading from a file rather than a pipe, the percentage of charac- ters displayed so far is also shown. bmore scrolls up to display one more screen line in response to a RETURN character; it displays another screenful in response to a SPACE character. Other com- mands are listed below. The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset 0 (zero). bmore sets the terminal to noecho mode, so that the output can be continuous. Commands that you type do not normally show up on your terminal, except for the / , \ and ! com- mands. If the standard output is not a terminal, more acts just like cat(1V), except that a header is printed before each file in a series. OPTIONS -a ASCII mode: no hex representation of the contents. Non printable characters are displayed as a dot (.) -c Clear before displaying. Redrawing the screen instead of scrolling. -d Display error messages rather than ringing the ter- minal bell if an unrecognized command is used. This is helpful for inexperienced users. -i Ignore case for searching. -n lines Displays the indicated number of lines in each screenful, rather than the default (the number of lines in the terminal screen less two). -w cols Display number of cols in each line. +linenumber Start up at linenumber. +/ASCII-pattern Start up at the line containing the regular expres- sion pattern. Note: unlike editors, this construct should not end with a `/'. If it does, then the trailing slash is taken as a character in the search pattern. USAGE Commands The commands take effect immediately; it is not necessary to type a carriage return. Up to the time when the com- mand character itself is given, the user may type the line kill character to cancel the numerical argument being formed. In addition, the user may type the erase charac- ter to redisplay the `--More--(xx%)' message. In the following commands, i is a numerical argument (1 by default). iSPACE Display another screenful, or i more lines if i is specified. iRETURN Display another line, or i more lines, if speci- fied. i^D (CTRL-D) Display (scroll down) 11 more lines. i is given, the scroll size is set to i. id Same as ^D. iz Same as SPACE, except that i, if present, becomes the new default number of lines per screenful. is Skip i lines and then print a screenful. if Skip i screenfuls and then print a screenful. i^B (CTRL-B) Skip back i screenfuls and then print a screenful. b Same as ^B (CTRL-D). q Q Exit from more. = Display the current line number. v Drop into the bvi(1) editor at the current off- set of the current file. w Drop into the bvi(1) editor at the current off- set of the current file. Only the portion of the file displayed on the screen will be loaded. h Help. Give a description of all the more com- mands. i/pattern Search for the ith occurrence of the regular expression pattern. Display the screenful starting at the file position that contains the ith match for the regular expression ASCII-pat- tern, or the end of a pipe, whichever comes first. If bmore is displaying a file and there is no such match, its position in the file remains unchanged. Regular expressions can be edited using erase and kill characters. Erasing back past the first column cancels the search command. ' Single quote. Go to the point from which the last search started. If no search has been per- formed in the current file, go to the beginning of the file. !command Invoke a shell to execute command. The charac- ters % and !, when used within command are replaced with the current filename and the pre- vious shell command, respectively. If there is no current filename, % is not expanded. Prepend a backslash to these characters to escape expan- sion. i:n Skip to the ith next filename given in the com- mand line, or to the last filename in the list if i is out of range. i:p Skip to the ith previous filename given in the command line, or to the first filename if i is out of range. If given while more is positioned within a file, go to the beginning of the file. If more is reading from a pipe, more simply rings the terminal bell. :f Display the current filename and offset number. :q :Q Exit from bmore (same as q or Q ). . Dot. Repeat the previous command. FILES /etc/termcap terminal data base /usr/local/share/bmore.help help file SEE ALSO bvi(1), termcap(5) 3 Jan 2004 bvi-1.3.2/bmore.c.old0100644000567000056700000004174307625245206012120 0ustar bgbg/* BMORE - binary more * * 1990-01-31 V 1.0.0 * 1990-09-04 V 1.1.0 * 2000-05-31 V 1.3.0 beta * 2000-10-18 V 1.3.0 final * 2002-01-16 V 1.3.1 * 2002-02-22 V 1.3.2 line 576 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1990-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #ifdef HAVE_LOCALE_H # include #endif #ifdef __MSDOS__ # define PRINTF cprintf #else # define PRINTF printf #ifndef HELPFILE # define HELPFILE "/usr/local/share/bmore.help" #endif #endif #include "bmore.h" char *copyright = "Copyright (C) 1990-2003 by Gerhard Buergmann"; int maxx, maxy; char *name = NULL; char sstring[MAXCMD] = ""; /* string for search */ char estring[MAXCMD] = ""; /* string for shell escape */ char string[MAXCMD]; FILE *curr_file = NULL, *help_file; int AnzAdd; long precount = -1; /* number preceding command */ char **files; /* list of input files */ int numfiles; /* number of input files */ int file_nr = 0; /* number of current input file */ int arrnum = 0; char numarr[64]; /* string for collecting number */ char addr_form[15]; int ascii_flag = 0; int d_flag = 0; int init_search = 0; char buffer1[MAXCMD], buffer2[MAXCMD]; int out_len; int corr = 0, to_print; off_t init_byte = 0; off_t last_search = 0; off_t screen_home, filesize; off_t bytepos, oldpos; int prompt = 1; char helppath[MAXCMD]; static char *progname; static char cmdbuf[MAXCMD]; static int cnt = 0; static int icnt = 0; static int smode; char search_pat[BUFFER]; /* / or ? command */ char *emptyclass = "Empty byte class '[]' or '[^]'"; /* -a ASCII mode * -d beginners mode * -i ignore case */ void usage() { fprintf(stderr, "Usage: %s [-adi] [+linenum | +/pattern] name1 name2 ...\n", progname); exit(1); } int main(argc, argv) int argc; char *argv[]; { int ch, ch1; int colon = 0, last_ch = 0; long last_pre = 0; int lflag, repeat; long count; int i, n = 1; int d_line, r_line, z_line; #ifdef __MSDOS__ char *poi; strcpy(helppath, argv[0]); poi = strrchr(helppath, '\\'); *poi = '\0'; strcat(helppath, "\\MORE.HLP"); #else strncpy(helppath, HELPFILE, MAXCMD - 1); #endif #ifdef HAVE_LOCALE_H setlocale(LC_ALL, ""); #endif progname = argv[0]; while (n < argc) { switch (argv[n][0]) { case '-': i = 1; while (argv[n][i] != '\0') { switch (argv[n][i]) { case 'a': ascii_flag++; break; case 'd': d_flag++; break; case 'i': ignore_case++; break; default: usage(); } i++; } n++; break; case '+': /* +cmd */ if (argv[n][1] == '/' || argv[n][1] == '\\') { init_search = argv[n][1]; strcpy(sstring, &argv[n][2]); } else { if (argv[n][1] == '0') { init_byte = (off_t)strtol(argv[n] + 1, NULL, 16); } else { init_byte = (off_t)strtol(argv[n] + 1, NULL, 10); } } n++; break; default: /* must be a file name */ name = strdup(argv[n]); files = &(argv[n]); numfiles = argc - n; n = argc; break; } } if (numfiles == 0) { curr_file = stdin; if (isatty(fileno(stdin)) != 0) usage(); } else { open_file(name); file_nr = 1; fseek(curr_file, init_byte, SEEK_SET); bytepos += init_byte; } screen_home = bytepos; initterm(); set_tty(); maxy -= 2; z_line = maxy; d_line = maxy / 2; r_line = 1; AnzAdd = 10; strcpy(addr_form, "%08lX "); if (ascii_flag) out_len = ((maxx - AnzAdd - 1) / 4) * 4; else out_len = ((maxx - AnzAdd - 1) / 16) * 4; if (init_search) bmsearch(init_search); if (no_tty) { while(!printout(1)); fclose(curr_file); reset_tty(); exit(0); } if (printout(maxy)) { do_next(1); } /* main loop */ do { to_print = 0; if (prompt) { highvideo(); PRINTF("--More--"); if (prompt == 2) { PRINTF("(Next file: %s)", name); } else if (!no_intty && filesize) { PRINTF("(%d%%)", (int)((bytepos * 100) / filesize)); } if (d_flag) PRINTF("[Press space to continue, 'q' to quit]"); normvideo(); fflush(stdout); } ch = vgetc(); if (prompt == 2) { open_file(name); } prompt = 1; PRINTF("\r"); while (ch >= '0' && ch <= '9') { numarr[arrnum++] = ch; ch = vgetc(); } numarr[arrnum] = '\0'; if (arrnum != 0) precount = strtol(numarr, (char **)NULL, 10); else precount = -1; lflag = arrnum = 0; if (ch == '.') { precount = last_pre; ch = last_ch; repeat = 1; } else { last_pre = precount; last_ch = ch; if (ch == ':') colon = vgetc(); repeat = 0; } switch (ch) { case ' ': /* Display next k lines of text [current screen size] */ if (precount > 0) to_print = precount; else to_print = maxy; break; case 'z': /* Display next k lines of bytes [current screen size]* */ if (precount > 0) z_line = precount; to_print = z_line; break; case '\r': case '\n': /* Display next k lines of text [current screen size]* */ if (precount > 0) r_line = precount; to_print = r_line; break; case 'q': case 'Q': clreol(); fclose(curr_file); reset_tty(); exit(0); case ':' : switch (colon) { case 'f': prompt = 0; if (!no_intty) PRINTF("\"%s\" line %lu", name, (unsigned long)(bytepos - out_len)); else PRINTF("[Not a file] line %lu", (unsigned long)(bytepos - out_len)); fflush(stdout); break; case 'n': if (precount < 1) precount = 1; do_next(precount); PRINTF("\r"); clreol(); PRINTF("\n...Skipping to file %s\r\n\r\n", name); prompt = 2; break; case 'p': if (precount < 1) precount = 1; do_next(-precount); PRINTF("\r"); clreol(); PRINTF("\n...Skipping back to file %s\r\n\r\n", name); prompt = 2; break; case 'q': clreol(); fclose(curr_file); reset_tty(); exit(0); break; case '!': if (!no_intty) { clreol(); if (rdline(colon, estring)) break; doshell(estring); PRINTF("------------------------\r\n"); break; } default: bmbeep(); } break; case '!': if (!no_intty) { clreol(); if (rdline(ch, estring)) break; doshell(estring); PRINTF("------------------------\r\n"); break; } case 'd': /* Scroll k lines [current scroll size, initially 11]* */ case BVICTRL('D'): if (precount > 0) d_line = precount; to_print = d_line; break; case BVICTRL('L'): /*** REDRAW SCREEN ***/ if (no_intty) { bmbeep(); } else { clrscr(); to_print = maxy + 1; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; } break; case 'b': /* Skip backwards k screenfuls of text [1] */ case BVICTRL('B'): if (no_intty) { bmbeep(); } else { if (precount < 1) precount = 1; PRINTF("...back %ld page", precount); if (precount > 1) { PRINTF("s\r\n"); } else { PRINTF("\r\n"); } screen_home -= (maxy + 1) * out_len; if (screen_home < 0) screen_home = 0; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; to_print = maxy + 1; } break; case 'f': /* Skip forward k screenfuls of bytes [1] */ case 's': /* Skip forward k lines of bytes [1] */ if (precount < 1) precount = 1; if (ch == 'f') { count = maxy * precount; } else { count = precount; } putchar('\r'); clreol(); PRINTF("\n...skipping %ld line", count); if (count > 1) { PRINTF("s\r\n\r\n"); } else { PRINTF("\r\n\r\n"); } screen_home += (count + maxy) * out_len; fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; to_print = maxy; break; case '\\': if (ascii_flag) { bmbeep(); break; } case '/': /**** Search String ****/ if (!repeat) { clreol(); if (rdline(ch, sstring)) break; } case 'n': /**** Search Next ****/ case 'N': bmsearch(ch); /* to_print--; */ break; case '\'': if (no_intty) { bmbeep(); } else { bytepos = last_search; fseek(curr_file, bytepos, SEEK_SET); screen_home = bytepos; to_print = maxy; PRINTF("\r"); clreol(); PRINTF("\n\r\n***Back***\r\n\r\n"); } break; case '=': prompt = 0; clreol(); PRINTF("%lX hex %lu dec", (unsigned long)bytepos, (unsigned long)bytepos); fflush(stdout); break; case '?': case 'h': if ((help_file = fopen(helppath, "r")) == NULL) { emsg("Can't open help file"); break; } while ((ch1 = getc(help_file)) != EOF) putchar(ch1); fclose(help_file); to_print = 0; break; case 'w': case 'v': if (!no_intty) { clreol(); if (ch == 'v') { sprintf(string, "bvi +%lu %s", (unsigned long)(screen_home + (maxy + 1) / 2 * out_len), name); } else { if (precount < 1) precount = bytepos - screen_home; sprintf(string, "bvi -b %lu -s %lu %s", (unsigned long)screen_home, (unsigned long)precount, name); } doshell(string); to_print = maxy + 1; break; } default : if (d_flag) { emsg("[Press 'h' for instructions.]"); } else { bmbeep(); } break; } if (to_print) { if (printout(to_print)) { do_next(1); } } } while (1); } int rdline(ch, sstring) int ch; char *sstring; { int i = 0; int ch1 = 0; char bstring[MAXCMD]; if (ch == '!') { strcpy(bstring, sstring); sstring[0] = '\0'; } putchar(ch); fflush(stdout); while (i < MAXCMD) { ch1 = vgetc(); if (ch1 == '\n' || ch1 == '\r' || ch1 == ESC) { break; } else if (ch1 == 8) { if (i) { sstring[--i] = '\0'; PRINTF("\r%c%s", ch, sstring); clreol(); } else { ch1 = ESC; break; } } else if (ch1 == '!' && i == 0) { if (bstring[0] == '\0') { emsg("No previous command"); return 1; } putchar(ch1); PRINTF("\r%c%s", ch, bstring); strcat(sstring, bstring); i = strlen(sstring); } else { putchar(ch1); sstring[i++] = ch1; } fflush(stdout); } if (ch1 == ESC) { putchar('\r'); clreol(); return 1; } if (i) sstring[i] = '\0'; return 0; } void do_next(n) int n; { if (numfiles) { if (n == 1 && file_nr == numfiles) { fclose(curr_file); reset_tty(); exit(0); } if ((file_nr + n) > numfiles) file_nr = numfiles; else if ((file_nr + n) < 1) file_nr = 1; else file_nr += n; prompt = 2; free(name); name = strdup(*(files + file_nr - 1)); } else { fclose(curr_file); reset_tty(); exit(0); } } void open_file(name) char *name; { struct stat buf; if (stat(name, &buf) > -1) { filesize = buf.st_size; } if (numfiles > 1) { PRINTF("\r"); clreol(); PRINTF("\n::::::::::::::\r\n%s\r\n::::::::::::::\r\n", name); corr = 2; } if (curr_file != NULL) fclose(curr_file); if ((curr_file = fopen(name, "rb")) == NULL) { /* reset_tty(); */ perror(name); exit(1); } bytepos = screen_home = 0; } void putline(buf, num) char *buf; int num; { int print_pos; unsigned char ch; PRINTF(addr_form, (unsigned long)bytepos); for (print_pos = 0; print_pos < num; print_pos++) { ch = buf[print_pos]; if (!ascii_flag) { PRINTF("%02X ", ch); } ++bytepos; if ((ch > 31) && (ch < 127)) *(string + print_pos) = ch; else *(string + print_pos) = '.'; } for (; print_pos < out_len; print_pos++) { if (!ascii_flag) { PRINTF(" "); } ++bytepos; *(string + print_pos) = ' '; } *(string + num) = '\0'; PRINTF("%s\r\n", string); } int printout(lns) int lns; { int c, num; int doub = 0; static int flag; if (corr && (lns > maxy - 2)) lns -= corr; corr = 0; do { for (num = 0; num < out_len; num++) { if ((c = nextchar()) == -1) break; buffer1[num] = c; } if (!num) return 1; if (memcmp(buffer1, buffer2, num) || !bytepos ) { memcpy(buffer2, buffer1, num); putline(buffer2, num); if (!no_tty) flag = TRUE; lns--; } else { if (flag) { clreol(); PRINTF("*\r\n"); lns--; } else { doub++; } flag = FALSE; bytepos += num; } if (lns == 0) { screen_home = bytepos - ((maxy + 1 + doub) * out_len); if (screen_home < 0) screen_home = 0; return 0; } } while(num); return 1; } int nextchar() { if (cnt == 0) return fgetc(curr_file); cnt--; return cmdbuf[icnt++] & 0xff; } void pushback(n, where) int n; char *where; { if (cnt) memmove(cmdbuf + n, cmdbuf, n); memcpy(cmdbuf, where, n); icnt = 0; cnt += n; } /* Return: * -1 EOF * 0 not found at current position * 1 found */ int bmregexec(scan) char *scan; { char *act; int count, test; int l; char act_pat[MAXCMD]; /* found pattern */ act = act_pat; l = 0; while (*scan != 0) { if ((test = nextchar()) == -1) return -1; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); switch (*scan++) { case ONE: /* exactly one character */ count = *scan++; if (count == 1) { if (test != *scan) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } scan++; } else if (count > 1) { if (sbracket(test, scan, count)) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } scan += count; } break; case STAR: /* zero or more characters */ count = *scan++; if (count == 1) { /* only one character, 0 - n times */ while (test == *scan) { if ((test = nextchar()) == -1) return -2; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } pushback(1, --act); l--; scan++; } else if (count > 1) { /* characters in bracket */ if (*scan == '^') { do { /* If we found something matching the next part of the expression, we * abandon the search for not-matching characters. */ if (bmregexec(scan + count)) { *act++ = test; /* May be wrong case !! */ l++; scan += count; bytepos--; break; } if (sbracket(test, scan, count)) { bytepos++; if (l > 1) pushback(--l, act_pat + 1); return 0; } else { if ((test = nextchar()) == -1) return -3; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } } while(1); } else { while(!sbracket(test, scan, count)) { if ((test = nextchar()) == -1) return -4; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } if (ignore_case && smode == ASCII) test = toupper(test); } scan += count; pushback(1, --act); l--; } } else { /* ".*" */ do { if ((test = nextchar()) == -1) return -5; *act++ = test; if (++l == MAXCMD) { pushback(l, act_pat); return 0; } pushback(1, act - 1); bytepos--; } while (bmregexec(scan) == 0); bytepos++; act--; l--; } break; } } pushback(l, act_pat); return 1; /* found */ } int sbracket(start, scan, count) int start; char *scan; int count; { if (*scan++ == '^') { if (!memchr(scan, start, --count)) return 0; } else { if (memchr(scan, start, --count)) return 0; } return 1; } void bmsearch(ch) int ch; { int i; if (sstring[0] == '\0') { emsg("No previous regular expression"); return; } if (ch == '/') { if (ascii_comp(search_pat, sstring)) return; } if (ch == '\\') { if (hex_comp(search_pat, sstring)) return; } oldpos = bytepos; last_search = screen_home; if (precount < 1) precount = 1; while (precount--) { while ((i = bmregexec(search_pat)) == 0); if (i == 1) { screen_home = bytepos; to_print = maxy; } else { /* i == -1 -> EOF */ if (no_intty) { PRINTF("\r\nPattern not found\r\n"); do_next(1); } else { /* sprintf(string, "Pattern not found %d - %ul", i, (unsigned long)bytepos); emsg(string); */ emsg("Pattern not found"); bytepos = oldpos; fseek(curr_file, bytepos, SEEK_SET); break; } } if (precount) { nextchar(); bytepos++; } } if (prompt) { PRINTF("\r\n...skipping\r\n"); } } void emsg(s) char *s; { putchar('\r'); clreol(); highvideo(); PRINTF(s); normvideo(); fflush(stdout); prompt = 0; } void bmbeep() { putchar(7); } bvi-1.3.2/bmore.h0100644000567000056700000000667007702536000011337 0ustar bgbg/* BMORE.H * * 1996-02-28 V 1.0.0 * 1999-01-21 V 1.1.0 * 1999-03-17 V 1.1.1 * 1999-07-01 V 1.2.0 beta * 1999-08-21 V 1.2.0 final * 2000-05-31 V 1.3.0 beta * 2000-10-04 V 1.3.0 final * 2002-01-16 V 1.3.1 * 2003-02-20 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #include #include #include #include #include #include #include #if defined(__MSDOS__) && !defined(DJGPP) # include "patchlev.h" # include "dosconf.h" # include # include # include #else # include "patchlevel.h" # include "config.h" # include # if HAVE_NCURSES_H # include # else # include # endif # if HAVE_TERM_H # include # else # if HAVE_NCURSES_TERM_H # include # endif # endif #endif /* defines for filemode */ #define ERROR -1 #define REGULAR 0 #define NEW 1 #define DIRECTORY 2 #define CHARACTER_SPECIAL 3 #define BLOCK_SPECIAL 4 #define PARTIAL 5 /* regular expressions */ #define END 0 #define ONE 1 #define STAR 2 #define ASCII 1 #define FORWARD 0 #define BACKWARD 1 #define CR '\r' #define NL '\n' #define BS 8 #define ESC 27 #define SEARCH 0 #define REPLACE 1 #define BVICTRL(n) (n&0x1f) #ifndef NULL # define NULL ((void *)0) #endif #ifndef TRUE # define TRUE 1 # define FALSE 0 #endif #if defined(__MSDOS__) && !defined(DJGPP) # define ANSI # define PTR char huge * # define off_t long # define DELIM '\\' # define strncasecmp strnicmp # define strcasecmp stricmp #else # define PTR char * # define DELIM '/' #endif #define MAXCMD 255 #define BUFFER 1024 #ifdef DEBUG extern FILE *debug_fp; #endif #ifndef HAVE_STRERROR extern char *sys_errlist[]; #endif extern char *version; extern int maxx, maxy; extern int ignore_case, magic; extern int no_tty, no_intty; #ifdef ANSI void initterm(void), set_tty(void), reset_tty(void); void cleartoeol(void), clearscreen(void), highlight(void); void normal(void), bmbeep(void), home(void), sig(void); void doshell(char *), emsg(char *); void do_next(int); void bmsearch(int); void pushback(int, char *); int open_file(void); int printout(int), rdline(int, char *); int nextchar(void), vgetc(void); int sbracket(int, char *, int); int bmregexec(char *); int ascii_comp(char *, char *), hex_comp(char *, char *); void putline(char *, int); #else void initterm(), set_tty(), reset_tty(); void cleartoeol(), clearscreen(), highlight(); void normal(), bmbeep(), home(), sig(); void doshell(), emsg(); void do_next(); void bmsearch(); void pushback(); int open_file(); int printout(), rdline(); int nextchar(), vgetc(); int sbracket(); int bmregexec(); int ascii_comp(), hex_comp(); void putline(); #endif bvi-1.3.2/bmore.help0100644000567000056700000000306007412100442012021 0ustar bgbg Most commands optionally preceded by integer argument k. Defaults in brackets. Star (*) indicates argument becomes new default. ------------------------------------------------------------------------------- Display next k lines of bytes [current screen size] z Display next k lines of bytes [current screen size]* Display next k lines of bytes [1]* d or ctrl-D Scroll k lines [current scroll size, initially 11]* q or Q or Exit from bmore s Skip forward k lines of bytes [1] f Skip forward k screenfuls of bytes [1] b or ctrl-B Skip backwards k screenfuls of bytes [1] ' Go to place where previous search started = Display current byte number / Search for kth occurrence of ascii regular expr [1] \ Search for kth occurrence of binary regular expr [1] n Search for kth occurrence of last r.e [1] ! or :! Execute in a subshell v Start up bvi at current position w Start up bvi reading only a screenful of bytes [screen] ctrl-L Redraw screen :n Go to kth next file [1] :p Go to kth previous file [1] :f Display current file name and byte position . Repeat previous command ------------------------------------------------------------------------------- bvi-1.3.2/bmore.hlp0100644000567000056700000000311207412100442011652 0ustar bgbg Most commands optionally preceded by integer argument k. Defaults in brackets. Star (*) indicates argument becomes new default. ------------------------------------------------------------------------------- Display next k lines of bytes [current screen size] z Display next k lines of bytes [current screen size]* Display next k lines of bytes [1]* d or ctrl-D Scroll k lines [current scroll size, initially 11]* q or Q or Exit from bmore s Skip forward k lines of bytes [1] f Skip forward k screenfuls of bytes [1] b or ctrl-B Skip backwards k screenfuls of bytes [1] ' Go to place where previous search started = Display current byte number / Search for kth occurrence of ascii regular expr [1] \ Search for kth occurrence of binary regular expr [1] n Search for kth occurrence of last r.e [1] ! or :! Execute in a subshell v Start up bvi at current position w Start up bvi reading only a screenful of bytes [screen] ctrl-L Redraw screen :n Go to kth next file [1] :p Go to kth previous file [1] :f Display current file name and byte position . Repeat previous command ------------------------------------------------------------------------------- bvi-1.3.2/bm_unix.c0100644000567000056700000001062207701263074011666 0ustar bgbg/* bm_unix.c - Unix specific subroutines for BMORE * * 2000-05-31 V 1.3.0 beta * 2000-10-12 V 1.3.0 final * 2002-02-10 V 1.3.1 * 2003-07-04 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include "bmore.h" #include #define TBUFSIZ 1024 #define stty(fd,argp) tcsetattr(fd,TCSAFLUSH,argp) struct termios ostate, nstate; char *rev_start, *rev_end; /* enter and exit standout mode */ char *Home; /* go to home */ char *clear_sc; /* clear screen */ char *erase_ln; /* erase line */ extern off_t bytepos, screen_home; extern FILE *curr_file; int got_int; int fnum, no_intty, no_tty, slow_tty; int dum_opt, dlines; #ifdef HAVE_NCURSES_H # undef NEED_PUTC_CHAR #endif /* * A real function, for the tputs routine */ #ifdef NEED_PUTC_CHAR int putchr(char ch) {return putchar((int)ch);} #else int putchr(ch) int ch; {return putchar(ch);} #endif void initterm() { char buf[TBUFSIZ]; static char clearbuf[TBUFSIZ]; char *term; char *clearptr; struct termios nstate; no_tty = tcgetattr(fileno(stdout), &ostate); if (!no_tty) { nstate = ostate; /* * is this really necessary?? * nstate.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHONL); */ nstate.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHONL); nstate.c_cc[VMIN] = 1; nstate.c_cc[VTIME] = 0; tcsetattr(fileno(stdin), TCSADRAIN, &nstate); } #ifdef DJGPP maxx = 80; maxy = 25; #else if ((term = getenv("TERM")) == 0 || tgetent(buf, term) <= 0) { printf("Dumb terminal\n"); maxx = 80; maxy = 24; } else { maxy = tgetnum("li"); maxx = tgetnum("co"); } clearptr = clearbuf; erase_ln = tgetstr("ce", &clearptr); clear_sc = tgetstr("cl", &clearptr); rev_start = tgetstr("so", &clearptr); rev_end = tgetstr("se", &clearptr); #endif no_intty = tcgetattr(fileno(stdin), &ostate); tcgetattr(fileno(stderr), &ostate); nstate = ostate; if (!no_tty) { ostate.c_lflag &= ~(ICANON|ECHO); } } void set_tty() { if (no_tty) return; ostate.c_lflag &= ~(ICANON|ECHO); stty(fileno(stderr), &ostate); } void reset_tty() { if (no_tty) return; ostate.c_lflag |= ICANON|ECHO; stty(fileno(stderr), &ostate); } void sig(sig) int sig; { reset_tty(); printf("\r\n"); exit(0); } /* * doshell() - run a command or an interactive shell */ void doshell(cmd) char *cmd; { #ifndef DJGPP char *getenv(); char *shell; char cline[128]; #endif printf("\n"); #ifndef DJGPP if ((shell = getenv("SHELL")) == NULL) shell = "sh"; else if(strrchr(shell,'/')) shell=(char *)(strrchr(shell,'/')+1); if (cmd[0] == '\0') { sprintf(cline, "%s -i", shell); cmd = cline; } else { sprintf(cline, "%s -c \"%s\"", shell, cmd); cmd = cline; } #endif reset_tty(); system(cmd); set_tty(); printf("\r"); home(); fseek(curr_file, screen_home, SEEK_SET); bytepos = screen_home; } void highlight() { #ifndef DJGPP if (rev_start && rev_end) tputs(rev_start, 1, putchr); #endif } void normal() { #ifndef DJGPP if (rev_start && rev_end) tputs(rev_end, 1, putchr); #endif } void clearscreen() { #ifdef DJGPP /* if (!no_tty) { int n; for (n = 0; n < maxy; n++) { cleartoeol(); printf("\n"); } } */ #else tputs(clear_sc, 1, putchr); #endif } void home() { #ifdef DJGPP if (!no_tty) printf("\r"); #else tputs(Home, 1, putchr); #endif } /* force clear to end of line */ void cleartoeol() { #ifdef DJGPP int n; home(); if (!no_tty) for (n = 1; n < maxx; n++) printf(" "); home(); #else tputs(erase_ln, 1, putchr); #endif } int vgetc() { char cha; extern int errno; errno = 0; if (read(2, &cha, 1) <= 0) { if (errno != EINTR) exit(2); } return (cha); } #ifndef HAVE_MEMMOVE /* * Copy contents of memory (with possible overlapping). */ char * memmove(s1, s2, n) char *s1; char *s2; size_t n; { bcopy(s2, s1, n); return(s1); } #endif bvi-1.3.2/bvi.10100644000567000056700000005110107774125430010723 0ustar bgbg.rn '' }` ''' $RCSfile$$Revision$$Date$ ''' ''' $Log$ ''' .de Sh .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp .if t .sp .5v .if n .sp .. .de Ip .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .de Vb .ft CW .nf .ne \\$1 .. .de Ve .ft R .fi .. ''' ''' ''' Set up \*(-- to give an unbreakable dash; ''' string Tr holds user defined translation string. ''' Bell System Logo is used as a dummy character. ''' .tr \(*W-|\(bv\*(Tr .ie n \{\ .ds -- \(*W- .ds PI pi .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch .ds L" "" .ds R" "" ''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of ''' \*(L" and \*(R", except that they are used on ".xx" lines, ''' such as .IP and .SH, which do another additional levels of ''' double-quote interpretation .ds M" """ .ds S" """ .ds N" """"" .ds T" """"" .ds L' ' .ds R' ' .ds M' ' .ds S' ' .ds N' ' .ds T' ' 'br\} .el\{\ .ds -- \(em\| .tr \*(Tr .ds L" `` .ds R" '' .ds M" `` .ds S" '' .ds N" `` .ds T" '' .ds L' ` .ds R' ' .ds M' ` .ds S' ' .ds N' ` .ds T' ' .ds PI \(*p 'br\} .\" If the F register is turned on, we'll generate .\" index entries out stderr for the following things: .\" TH Title .\" SH Header .\" Sh Subsection .\" Ip Item .\" X<> Xref (embedded .\" Of course, you have to process the output yourself .\" in some meaninful fashion. .if \nF \{ .de IX .tm Index:\\$1\t\\n%\t"\\$2" .. .nr % 0 .rr F .\} .TH BVI 1 "BVI Version 1.3.2" "3/Jan/2004" "User Commands" .IX Title "BVI 1" .UC .IX Name "bvi, bview - visual display editor for binary files" .if n .hy 0 .if n .na .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .de CQ \" put $1 in typewriter font .ft CW 'if n "\c 'if t \\&\\$1\c 'if n \\&\\$1\c 'if n \&" \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 '.ft R .. .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 . \" AM - accent mark definitions .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds ? ? . ds ! ! . ds / . ds q .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' . ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' . ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E .ds oe o\h'-(\w'o'u*4/10)'e .ds Oe O\h'-(\w'O'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds v \h'-1'\o'\(aa\(ga' . ds _ \h'-1'^ . ds . \h'-1'. . ds 3 3 . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE . ds oe oe . ds Oe OE .\} .rm #[ #] #H #V #F C .SH "NAME" .IX Header "NAME" bvi, bview \- visual editor for binary files .SH "VERSION" .IX Header "VERSION" bvi-1.3.2 .SH "SYNOPSIS" .IX Header "SYNOPSIS" \fBbvi\fR\ \ \ [\fB\-R\fR]\ [\fB\-c\fR\ \fIcmd\fR]\ [\fB\-f\fR\ \fIscript\fR]\ [\fB\-b\fR\ \fIbegin\fR]\ [\fB\-e\fR\ \fIend\fR]\ [\fB\-s\fR\ \fIsize\fR]\ \fIfile\fR... \fBbview\fR\ [\fB\-R\fR]\ [\fB\-c\fR\ \fIcmd\fR]\ [\fB\-f\fR\ \fIscript\fR]\ [\fB\-b\fR\ \fIbegin\fR]\ [\fB\-e\fR\ \fIend\fR]\ [\fB\-s\fR\ \fIsize\fR]\ \fIfile\fR... .SH "OPTIONS" .IX Header "OPTIONS" .Ip "\fIfile\fR..." 4 .IX Item "\fIfile\fR..." A list of filenames. The first one will be the current file and will be read into the buffer. The cursor will be positioned on the first line of the buffer. You can get to the other files with the ":next" command. .Ip "\fB\-R\fR" 4 .IX Item "\fB\-R\fR" \*(L"Readonly": The readonly flag is set for all the files, preventing accidental overwriting with a write command. .Ip "\fB\-b\fR \fIbegin\fR" 4 .IX Item "\fB\-b\fR \fIbegin\fR" causes bvi to load a file not from the start but from offset \fIbegin\fR. .Ip "\fB\-e\fR \fIend\fR" 4 .IX Item "\fB\-e\fR \fIend\fR" causes bvi to load a file not till end but till address \fIend\fR. .Ip "\fB\-s\fR \fIsize\fR" 4 .IX Item "\fB\-s\fR \fIsize\fR" causes bvi not to load the complete file but only \fIsize\fR bytes. .Ip "\fB\-c\fR \fIcmd\fR" 4 .IX Item "\fB\-c\fR \fIcmd\fR" \fIcmd\fR will be executed after the first file has been read. If the \fIcmd\fR contains spaces it must be enclosed in double quotes (this depends on the shell that is used). .Ip "\fB\-f\fR \fIscript\fR" 4 .IX Item "\fB\-f\fR \fIscript\fR" This command provides a means for collecting a series of \*(L"ex\*(R" (colon) commands into a script file, then using this file to edit other files. Since there is no binary stream editor \*(L"bsed\*(R", you can use this option to make several global changes in a binary file. .SH "DESCRIPTION" .IX Header "DESCRIPTION" Bvi stands for \*(L"Binary VIsual editor\*(R". Bvi is a screen oriented editor for binary files; its command set is based on that of the \fIvi\fR\|(1) text editor. As a binary editor does not have the concept of \*(L"lines\*(R" there are differences from Vi commands wherever the latter are line orientate. .SH "COMPARISON" .IX Header "COMPARISON" The main differences between Vi and Bvi are: .PP The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset \*(L'0\*(R' (zero). .PP You can toggle between the hex and ascii windows with the tab key (TAB). Toggling between these two windows does not change the current position (offset) within the file. .PP No \*(L"lines\*(R" concept: Files are treated as one long stream of bytes. The characters \*(L"newline\*(R" and \*(L"carriage return\*(R" are not special, id est they never mark the end of lines. Therefore the lines on the screen do not represent lines in the usual way. Data is broken across screen lines arbitarily. As a consequence there are no commands in bvi from ex or vi that are based on line numbers, eg \*(L"dd\*(R", \*(L"yy\*(R", \*(L'C\*(R', \*(L'S\*(R', \*(L'o\*(R', \*(L'O\*(R'. This also changes the meaning of \*(L"range\*(R" before the \*(L":write\*(R" command to a byte offset, ie the command \*(L":100,200w foo\*(R" writes all *bytes* (not lines) from offset 100 to offset 200 to the file \*(L"foo\*(R". .PP No \*(L"text objects": There are also no text-specific arrangements like words, paragraphs, sentences, sections and so on. .PP Extended \*(L"ruler": The bottom line of the screen shows the current address (byte offset) and the current character in these notations: .PP .Vb 1 \& octal, hexadecimal, decimal and ascii. .Ve Search patterns: All search commands understand these special characters: .PP .Vb 3 \& . any character \& [] set of characters \& * zero or more occurrences of previous char or set .Ve But as there is no concept of lines you cannot use the standard symbols ("anchors") for \*(L"begin-of-line\*(R" ('^') and \*(L"end-of-line\*(R" ('$'). Searching for the start/end of lines must be done explicitly by adding these special characters to your search pattern using these meta sequences: .PP .Vb 4 \& \en newline \& \er return \& \et tab \& \e0 binary zero .Ve Additional search commands: Similar to the text search commands there are additional hex-search functions \*(L'\e\*(R' and \*(L'#\*(R' which allow to search for any byte value. Example: \*(L"\e62 76 69\*(R" will search for the string \*(L"bvi\*(R". Spaces between hex value are optional, so searching for \*(L"6775636B6573\*(R" will find \*(L"guckes\*(R". .PP Changing the length of data (insertion, deletion) moves the data to other addresses; this is bad for many cases (eg. databases, program files) and is thus disabled by default. You can enable this commands by typing .PP \f(CW :set memmove\fR .PP \fBBVI Modes:\fR .PP Command Mode (Normal Mode): .PP Input is treated as command. Note that command mode is the default mode after startup and after escaping from input mode. Use ESC (escape) to cancel a partial (uncompleted) command. .PP Input Mode: .PP Input is treated as replacement of current characters or (after the end of the file) is appended to the current file. This mode is entered from command mode by typing one of \*(L'i\*(R', \*(L'I\*(R', \*(L'A\*(R', \*(L'r\*(R', or \*(L'R\*(R'. You can enter the characters from the keyboard (in the ASCII window) or hexadecimal values (in the HEX window). Type TAB to switch between these two windows. Type ESC to finish the current input and return to command mode. Type CTRL\-C to cancel current command abnormally. .PP Command line mode (Last Line Mode or : mode): .PP Similar to vi, this mode is entered by typing one of the characters : / ? \e # ! The command is terminated and executed by typing a carriage return; to cancel a partially typed command, type ESC to cancel the current command and return to command mode. .SH "ENVIRONMENT" .IX Header "ENVIRONMENT" The editor recognizes the environment variable BVIINIT as a command (or list of commands) to run when it starts up. If this variable is undefined, the editor checks for startup commands in the file \fI~/.bvirc\fR file, which you must own. However, if there is a \fI.bvirc\fR owned by you in the current directory, the editor takes its startup commands from this file \- overriding both the file in your home directory and the environment variable. .SH "TERMINOLOGY" .IX Header "TERMINOLOGY" Characters names are abbreviated as follows: Abbr. ASCII name aka CR 010 carriage return ^A 001 control-a ^H 008 control-h ^I 009 control-i aka TAB ^U 021 control-u ^Z 026 control-z ESC 027 escape aka ESC DEL 127 delete LEFT --- left arrow RIGHT --- right arrow DOWN --- down arrow UP --- up arrow .SH "COMMAND SUMMARY" .IX Header "COMMAND SUMMARY" See the TERMINOLOGY for a summary on key name abbreviations used within the following description of commands. .PP \fBAbstract:\fR Arrow keys move the cursor on the screen within the current window. .PP \fBSample commands:\fR :version show version info <\- v ^ \-> arrow keys move the cursor h j k l same as arrow keys u undo previous change ZZ exit bvi, saving changes :q! quit, discarding changes /\fItext\fR search for \fItext\fR ^U ^D scroll up or down .PP \fBCounts before bvi commands:\fR Numbers may be typed as a prefix to some commands. They are interpreted in one of these ways. .PP .Vb 4 \& screen column | \& byte of file G \& scroll amount ^D ^U \& repeat effect most of the rest .Ve \fBInterrupting, canceling\fR ESC end insert or incomplete command DEL (delete or rubout) interrupts .PP \fBFile manipulation:\fR ZZ if file modified, write and exit; otherwise, exit :w write changed buffer to file :w! write changed buffer to file, overriding read-only ("forced\*(R" write) :q quit when no changes have been made :q! quit and discard all changes :e \fIfile\fR edit \fIfile\fR :e! re-read current file, discard all changes :e # edit the alternate file :e! # edit the alternate file, discard changes :w \fIfile\fR write current buffer to \fIfile\fR :w! \fIfile\fR write current buffer to \fIfile\fR overriding read-only (this \*(L"overwrites\*(R" the file) :sh run the command as set with option \*(L"shell\*(R", then return :!\fIcmd\fR run the command \fIcmd\fR from \*(L"shell\*(R", then return :n edit next file in the argument list :f show current filename, modified flag, current byte offset, and percentage of current position within buffer ^G same as :f .PP \fBAdditional edit commands\fR You can insert/append/change bytes in ASCII/binary/decimal/ hexadecimal or octal representation. You can enter several (screen) lines of input. A line with only a period (.) in it will terminate the command. You must not type in values greater than a byte value. This causes an abandonment of the command. Pressing the CR key does not insert a newline \- character into the file. If you use ASCII mode you can use the special characters \en, \er, \et and \e0. .PP .Vb 3 \& :i aCR insert bytes (ASCII) at cursor position \& :a bCR append bytes (Binary) at end of file \& :c hCR change bytes (hexadecimal) at cursor position .Ve \fBBit-level operations\fR :and \fIn\fR bitwise \*(L'and\*(R' operation with value \fIn\fR :or \fIn\fR bitwise \*(L'or\*(R' operation with value \fIn\fR :xor \fIn\fR bitwise \*(L'xor\*(R' operation with value \fIn\fR :neg two's complement :not logical negation :sl \fIi\fR shift each byte \fIi\fR bits to the left :sr \fIi\fR shift each byte \fIi\fR bits to the right :rl \fIi\fR rotate each byte \fIi\fR bits to the left :rr \fIi\fR rotate each byte \fIi\fR bits to the right .PP \fBCommand mode addresses\fR :w foo write current buffer to a file named \*(L"foo\*(R" :5,10w foo copy byte 5 through 100 into as file named foo :.,.+20w foo copy the current byte and the next 20 bytes to foo :^,'aw foo write all bytes from the beginning through marker \*(L'a\*(R' :/\fIpat\fR/,$ foo search pattern \fIpat\fR and and copy through end of file .PP \fBPositioning within file:\fR ^B backward screen ^F forward screen ^D scroll down half screen ^U scroll up half screen \fIn\fRG go to the specified character (end default), where \fIn\fR is a decimal address /\fIpat\fR next line matching \fIpat\fR ?\fIpat\fR previous line matching \fIpat\fR \e\fIhex\fR jump to next occurrence of hex string \fIhex\fR #\fIhex\fR jump to previous occurrence of hex string \fIhex\fR n repeat last search command N repeat last search command, but in opposite direction .PP \fBAdjusting the screen:\fR ^L clear and redraw screen zCR redraw screen with current line at top of screen z- redraw screen with current line at bottom of screen z. redraw screen with current line at center of screen /\fIpat\fR/z- search for pattern \fIpat\fR and then move currents line to bottom ^E scroll screen down 1 line ^Y scroll screen up 1 line .PP \fBMarking and returning:\fR m\fIx\fR mark current position with lower-case letter \fIx\fR Note: this command works for all lower-case letters \*(L'\fIx\fR move cursor to mark \fIx\fR in ASCII section `\fIx\fR move cursor to mark \fIx\fR in HEX section \*(L'\*(R' move cursor to previous context in ASCII section `` move cursor to previous context in HEX section \fBLine positioning:\fR H jump to first line on screen ("top") L jump to last line on screen ("low") M jump to middle line on screen ("middle") \- jump onto previous line on screen + jump onto next line on screen CR same as + DOWN or j next line, same column UP or k previous line, same column .PP \fBCharacter positioning:\fR ^ first byte in HEX window $ end of screen line l or RIGHT jump onto next byte (within current screen line) h or LEFT jump onto previous byte (within current screen line) ^H same as LEFT space same as RIGHT f\fIx\fR find next occurrence of character \fIx\fR F\fIx\fR find previous occurrence of character \fIx\fR \fIn\fR| jump onto \fIn\fRth byte/character within current line .PP \fBStrings:\fR (works similar to the \fIstrings\fR\|(1) command) Note: \*(L"Words\*(R" are defined as strings of \*(L"nonprinting characters\*(R". e jump to next end of word w jump to next begin of word b jump to previous begin of word W forward to next string delimited with a \e0 or \en B back to previous string delimited with a nonprinting char .PP \fBCorrections during insert:\fR ^H erase last character (backspace) erase your erase character, same as ^H (backspace) ESC ends insertion, back to command mode .PP \fBAppend and replace:\fR A append at end of file rx replace current bte with char \*(L'x\*(R' R enter replace mode; for all subsequent input, the current byte is overwritten with the next input character; leave replace mode with ESC. .PP \fBMiscellaneous Operations:\fR TAB toggle between ASCII and HEX section .PP \fBYank and Put:\fR 3ySPACE yank 3 characters p insert contents of yank buffer o replace text with content of yank buffer P put back at end of file .PP \fBUndo, Redo:\fR u undo last change Note: Only the last change can be undone. Therefore this commands toggles between the last and second-t-last state of the buffer. .PP \fBSetting Options:\fR With the :set command you can set options in bvi .PP .Vb 1 \& Option Default Description .Ve .Vb 19 \& autowrite noaw Save current file, if modified, if you \& give a :n, :r or ! command \& columns cm=16 on an 80 character wide terminal \& ignorecase noic Ignores letter case in searching \& magic nomagic Makes . [ * special in patterns \& memmove nomm enables insert and delete commands \& offset of=0 adds an offset to the diplayed addresses \& readonly noro If set, write fails unless you use ! after command \& scroll sc=1/2 window \& Number of lines scrolled by ^U and ^D \& showmode mo Displays statusline on bottom of the screen \& terse noterse Let you obtain shorter error messages \& window window=screensize \& Lines in window, can be reduced at slow terminals \& wordlength wl=4 Length of an ASCII-string found by w, W, b or B \& wrapscan ws Searches wrap around past the end of the file \& unixstyle nous The representation of ascii characters below \& 32 is displayed in the statusline as shown \& in ascii(7) if unset rather in DOS-style (^A) .Ve .SH "AUTHOR" .IX Header "AUTHOR" bvi was developed by Gerhard Buergmann, Vienna, Austria \fIGerhard.Buergmann@puon.at\fR .SH "WWW" .IX Header "WWW" Bvi\ Homepage:\ \ http://bvi.sourceforge.net/ Vi\ Pages:\ \ \ \ \ \ http://www.guckes.net/vi/clones.php3 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (all\ about\ Vi\ and\ its\ clones) .SH "FILES" .IX Header "FILES" \fI\ $HOME/.bvirc\fR\ \ \ \ \ \ \ \ \ \ editor\ startup\ file \fI\ ./.bvirc\fR\ \ \ \ \ \ \ \ \ \ \ \ \ \ editor\ startup\ file .SH "BUGS" .IX Header "BUGS" Bvi does not update the screen when the terminal changes its size. .SH "SEE ALSO" .IX Header "SEE ALSO" \fIvi\fR\|(1), \fIstrings\fR\|(1), \fIascii\fR\|(5) .rn }` '' bvi-1.3.2/bvi.c0100644000567000056700000005126407770555542011026 0ustar bgbg/* BVI - Binary Visual Editor * * 1996-02-28 V 1.0.0 * 1999-01-27 V 1.1.0 * 1999-04-22 V 1.1.1 * 1999-07-01 V 1.2.0 beta * 1999-10-22 V 1.2.0 final * 2000-05-10 V 1.3.0 alpha * 2000-10-24 V 1.3.0 final * 2002-01-03 V 1.3.1 * 2004-01-04 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2004 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #include "bvi.h" #include "set.h" #ifdef HAVE_LOCALE_H # include #endif char *copyright = "Copyright (C) 1996-2004 by Gerhard Buergmann"; jmp_buf env; /* context for `longjmp' function */ int loc; int maxx, maxy, x, xx, y; int screen, status; off_t size; PTR mem = NULL; PTR curpos; PTR maxpos; PTR pagepos; PTR spos; char *name = NULL; char *shell; char string[MAXCMD]; char cmdstr[MAXCMD + 1] = ""; FILE *Ausgabe_Datei; int edits = 0; int AnzAdd, Anzahl, Anzahl3; off_t filesize, memsize, undosize; long precount = -1; /* number preceding command */ int block_flag = 0; off_t block_begin, block_end, block_size; char **files; /* list of input files */ int numfiles; /* number of input files */ int curfile; /* number of the current file */ int arrnum = 0; char numarr[64]; /* string for collecting number */ char rep_buf[BUFFER]; PTR current; PTR last_motion; PTR current_start; PTR undo_start; off_t undo_count; off_t yanked = 0L; char *yank_buf = NULL; char *undo_buf = NULL; PTR markbuf[26]; char addr_form[15]; char *nobytes = "No bytes@in the buffer"; static char progname[8]; static char line[MAXCMD]; static int mark; static int scrolly; static int wrstat = 1; void usage() { fprintf(stderr, "Usage: %s [-R] [-c cmd | +cmd] [-f script]\n\ [-b begin] [-e end] [-s size] file ...\n", progname); exit(1); } int main(argc, argv) int argc; char *argv[]; { int ch; int lflag; long count; int n = 1; int script = -1; off_t inaddr; char *poi; #ifdef HAVE_LOCALE_H setlocale(LC_ALL, ""); #endif poi = strrchr(argv[0], DELIM); if (poi) strncpy(progname, ++poi, 7); else strncpy(progname, argv[0], 7); strtok(progname, "."); if (!strcasecmp(progname, "bview")) { params[P_RO].flags |= P_CHANGED; P(P_RO) = TRUE; } else if (!strcasecmp(progname, "bvedit")) { /* This should be the beginners version */ } while (n < argc) { switch (argv[n][0]) { case '-': if (argv[n][1] == 'R') { params[P_RO].flags |= P_CHANGED; P(P_RO) = TRUE; } else if (argv[n][1] == 'c') { if (argv[n + 1] == NULL) { usage(); } else { strcpy(cmdstr, argv[++n]); } } else if (argv[n][1] == 'f') { if (argv[n + 1] == NULL || argv[n + 1][0] == '-') { usage(); } else { script = ++n; } } else if (argv[n][1] == 'b') { if (argv[n + 1] == NULL || argv[n + 1][0] == '-') { usage(); } else { block_begin = calc_size(argv[++n]); block_flag |= 1; } } else if (argv[n][1] == 'e') { if (argv[n + 1] == NULL || argv[n + 1][0] == '-') { usage(); } else { block_end = calc_size(argv[++n]); block_flag |= 2; } } else if (argv[n][1] == 's') { if (argv[n + 1] == NULL || argv[n + 1][0] == '-') { usage(); } else { block_size = calc_size(argv[++n]); block_flag |= 4; } } else if (argv[n][1] == 'w') { if (argv[n][2] == '\0') { usage(); } else { params[P_LI].flags |= P_CHANGED; P(P_LI) = atoi(argv[n] + 2); } } else usage(); n++; break; case '+': /* +cmd */ if (argv[n][1] == '\0') { strcpy(cmdstr, "$"); } else { strcpy(cmdstr, &argv[n][1]); } n++; break; default: /* must be a file name */ name = strdup(argv[n]); files = &(argv[n]); numfiles = argc - n; n = argc; break; } } switch (block_flag) { case 2: block_begin = 0; case 1|2: block_size = block_end - block_begin + 1; break; case 4: block_begin = 0; case 1|4: block_end = block_begin + block_size - 1; break; case 2|4: block_begin = block_end + 1 - block_size; break; case 1|2|4: if (block_end - block_begin != block_size + 1) { fprintf(stderr, "Ambigous block data\n"); exit(1); } break; } if (block_flag && !numfiles) { fprintf(stderr, "Cannot read a range of a nonexisting file\n"); exit(1); } if (numfiles > 1) fprintf(stderr, "%d files to edit\n", numfiles); curfile = 0; /****** Initialisation of curses ******/ initscr(); attrset(A_NORMAL); maxy = LINES; if (params[P_LI].flags & P_CHANGED) maxy = P(P_LI); scrolly = maxy / 2; P(P_SS) = scrolly; P(P_LI) = maxy; maxy--; keypad(stdscr, TRUE); scrollok(stdscr, TRUE); nonl(); cbreak(); noecho(); /* AnzAdd = 8; strcpy(addr_form, "%06lX "); */ AnzAdd = 10; strcpy(addr_form, "%08lX "); Anzahl = ((COLS - AnzAdd - 1) / 16) * 4; P(P_CM) = Anzahl; maxx = Anzahl * 4 + AnzAdd + 1; Anzahl3 = Anzahl * 3; status = Anzahl3 + Anzahl - 17; screen = Anzahl * (maxy - 1); signal(SIGINT, SIG_IGN); filesize = load(name); bvi_init(argv[0]); params[P_TT].svalue = terminal; if (block_flag && (P(P_MM) == TRUE)) { P(P_MM) = FALSE; params[P_TT].flags |= P_CHANGED; } if (script > -1) read_rc(argv[script]); if (*cmdstr != '\0') docmdline(cmdstr); /* main loop */ do { setjmp(env); current = (PTR)(pagepos + y * Anzahl + xpos()); if (wrstat) statpos(); wrstat = 1; setcur(); ch = vgetc(); while (ch >= '0' && ch <= '9') { numarr[arrnum++] = ch; ch = vgetc(); } numarr[arrnum] = '\0'; if (arrnum != 0) precount = strtol(numarr, (char **)NULL, 10); else precount = -1; lflag = arrnum = 0; switch (ch) { case '^': x = AnzAdd; loc = HEX; break; /* case '0': x = AnzAdd + Anzahl3; loc = ASCII; break; */ case '$': x = AnzAdd - 1 + Anzahl3 + Anzahl; loc = ASCII; break; case '\t': toggle(); break; case '~': if (precount < 1) precount = 1; sprintf(rep_buf, "%ld~", precount); do_tilde(precount); lflag++; break; case KEY_HOME: case 'H': if (precount > 0) { y = --precount; if (y > maxy - 1) { scrolldown(y - maxy + 1); y = maxy - 1; } } else y = 0; if (loc == HEX) x = AnzAdd; else x = AnzAdd + Anzahl3; break; case 'M': y = maxy / 2; if ((PTR)(pagepos + screen) > maxpos) y = (int)(maxpos - pagepos) / Anzahl / 2; if (loc == HEX) x = AnzAdd; else x = AnzAdd + Anzahl3; break; case KEY_LL: case 'L': if (precount < 1) precount = 1; n = maxy - 1; if ((PTR)((pagepos + screen)) > maxpos) n = (int)(maxpos - pagepos) / Anzahl; if (precount < n) y = n + 1 - precount; if (loc == HEX) x = AnzAdd; else x = AnzAdd + Anzahl3; break; case BVICTRL('H'): case KEY_BACKSPACE: case KEY_LEFT: case 'h': do { if (x > (AnzAdd + 2) && x < (Anzahl3 + AnzAdd + 1)) x -= 3; else if (x > (Anzahl3 + AnzAdd - 2)) x--; } while (--precount > 0); if (x < AnzAdd + Anzahl3) loc = HEX; else loc = ASCII; break; case ' ': case KEY_RIGHT: case 'l': do { /* if (x < (Anzahl3 + 6)) x += 3; */ if (x < (Anzahl3 + AnzAdd - 2)) x += 3; else if (x > (Anzahl3 + 3) && x < (Anzahl3 + AnzAdd - 1 + Anzahl)) x++; } while (--precount > 0); if (x < AnzAdd + Anzahl3) loc = HEX; else loc = ASCII; break; case '-': case KEY_UP : case 'k': do { if (y > 0) y--; else scrollup(1); } while(--precount > 0); break; case '+': case CR: if (loc == HEX) x = AnzAdd; else x = AnzAdd + Anzahl3; case 'j': case BVICTRL('J'): case BVICTRL('N'): case KEY_DOWN: do { if ((PTR)((pagepos + (y + 1) * Anzahl)) > maxpos) break; if (y < (maxy - 1)) y++; else scrolldown(1); } while(--precount > 0); break; case '|': if (precount < 1) break; if (loc == ASCII) x = AnzAdd - 1 + Anzahl3 + precount; else x = 5 + 3 * precount; if (x > AnzAdd - 1 + Anzahl3 + Anzahl) { x = AnzAdd - 1 + Anzahl3 + Anzahl; loc = ASCII; } break; case ':' : clearstr(); addch(ch); refresh(); getcmdstr(cmdstr, 1); if (strlen(cmdstr)) docmdline(cmdstr); break; case BVICTRL('B'): case KEY_PPAGE: /**** Previous Page ****/ if (mem <= (PTR)(pagepos - screen)) pagepos -= screen; else pagepos = mem; repaint(); break; case BVICTRL('D'): if (precount > 1) scrolly = precount; scrolldown(scrolly); break; case BVICTRL('U'): if (precount > 1) scrolly = precount; scrollup(scrolly); break; case BVICTRL('E'): if (y > 0) y--; scrolldown(1); break; case BVICTRL('F'): case KEY_NPAGE: /**** Next Page *****/ if (maxpos >= (PTR)(pagepos + screen)) { pagepos += screen; current += screen; if (current - mem >= filesize) { current = mem + filesize; setpage((PTR)(mem + filesize - 1L)); } repaint(); } break; case BVICTRL('G'): fileinfo(name); wrstat = 0; break; case BVICTRL('L'): /*** REDRAW SCREEN ***/ new_screen(); break; case BVICTRL('Y'): if (y < maxy) y++; scrollup(1); break; case 'A': smsg("APPEND MODE"); current = (PTR)(mem + filesize - 1L); setpage(current++); cur_forw(0); setcur(); undosize = filesize; undo_count = edit(ch); break; case 'B': case 'b': setpage(backsearch(current, ch)); break; case 'e': setpage(end_word(current)); break; case ',': do_ft(-1, 0); break; case ';': do_ft(0, 0); break; case 'F': case 'f': case 't': case 'T': do_ft(ch, 0); break; case 'G': last_motion = current; if (precount > -1) { if ((precount < P(P_OF)) || (precount - P(P_OF)) > (filesize - 1L)) { beep(); } else { setpage((PTR)(mem + precount - P(P_OF))); } } else { setpage((PTR)(mem + filesize - 1L)); } break; case 'g': last_motion = current; msg("Goto Hex Address: "); refresh(); getcmdstr(cmdstr, 19); if (cmdstr[0] == '^') { inaddr = P(P_OF); } else if (cmdstr[0] == '$') { inaddr = filesize + P(P_OF) - 1L; } else { long ltmp; sscanf(cmdstr, "%lx", <mp); inaddr = (off_t)ltmp; } if (inaddr < P(P_OF)) break; inaddr -= P(P_OF); if (inaddr < filesize) { setpage(mem + inaddr); } else { if (filesize == 0L) break; sprintf(string, "Max. address of current file : %06lX", (long)(filesize - 1L + P(P_OF))); emsg(string); } break; case '?': case '/': /**** Search String ****/ case '#': case '\\': clearstr(); addch(ch); refresh(); if (getcmdstr(line, 1)) break; last_motion = current; searching(ch, line, current, maxpos - 1, P(P_WS)); break; case 'n': /**** Search Next ****/ case 'N': last_motion = current; searching(ch, "", current, maxpos - 1, P(P_WS)); break; case 'm': do_mark(vgetc(), current); break; case '\'': case '`': if ((ch == '`' && loc == ASCII) || (ch == '\'' && loc == HEX)) toggle(); mark = vgetc(); if (mark == '`' || mark == '\'') { setpage(last_motion); last_motion = current; } else { if (mark < 'a' || mark > 'z') { beep(); break; } else if (markbuf[mark - 'a'] == NULL) { beep(); break; } setpage(markbuf[mark - 'a']); } break; case 'D': if (precount < 1) precount = 1; sprintf(rep_buf, "%ldD", precount); trunc_cur(); break; case 'o': /* overwrite: this is an overwriting put */ if (precount < 1) precount = 1; sprintf(rep_buf, "%ldo", precount); do_over(current, yanked, yank_buf); break; case 'P': if (precount < 1) precount = 1; if ((undo_count = alloc_buf(yanked, &undo_buf)) == 0L) break; sprintf(rep_buf, "%ldP", precount); if (do_append(yanked, yank_buf)) break; /* we save it not for undo but for the dot command memcpy(undo_buf, yank_buf, yanked); */ repaint(); break; case 'r': case 'R': if (filesize == 0L) break; if (precount < 1) precount = 1; sprintf(rep_buf, "%ld%c", precount, ch); undo_count = edit(ch); lflag++; break; case 'u': do_undo(); break; case 'W': case 'w': loc = ASCII; setpage(wordsearch(current, ch)); break; case 'y': count = range(ch); if (count > 0) { if ((yanked = alloc_buf(count, &yank_buf)) == 0L) { break; } memcpy(yank_buf, current, yanked); } else if (count < 0) { if ((yanked = alloc_buf(-count, &yank_buf)) == 0L) { break; } memcpy(yank_buf, current + count, yanked); } else { break; } /* sprintf(string, "%ld bytes yanked", labs(count)); msg(string); */ break; case 'z': do_z(vgetc()); break; case 'Z': if (vgetc() == 'Z') do_exit(); else beep(); break; case '.': if (!strlen(rep_buf)) { beep(); } else { stuffin(rep_buf); } break; default : if P(P_MM) { if (precount < 1) precount = 1; switch (ch) { case 'I': sprintf(rep_buf, "%ldI", precount); current = mem; setpage(mem); repaint(); undo_count = edit('i'); lflag++; break; /* undo does not work correctly !!! */ case 's': sprintf(rep_buf, "%lds", precount); if (do_delete((off_t)precount, current)) break; precount = 1; undo_count = edit('i'); lflag++; break; case 'a': if (cur_forw(1)) break; current++; case 'i': sprintf(rep_buf, "%ld%c", precount, ch); undo_count = edit(ch); lflag++; break; case 'p': sprintf(rep_buf, "%ldp", precount); do_put(current, yanked, yank_buf); break; case 'c': case 'd': count = range(ch); if (count > 0) do_delete((off_t)count, current); else if (count < 0) do_back(-(off_t)count, current); if (ch == 'c') { precount = 1; undo_count = edit('i'); lflag++; /* } else if (count) { sprintf(string, "%ld bytes deleted", labs(count)); msg(string); */ } break; case 'x': sprintf(rep_buf, "%ldx", precount); do_delete((off_t)precount, current); break; case 'X': sprintf(rep_buf, "%ldX", precount); do_back((off_t)precount, current); break; default: flushinp(); beep(); } } else { switch (ch) { case 'x': if (precount < 1) precount = 1; if ((off_t)precount + current == maxpos) { sprintf(rep_buf, "%ldx", precount); do_delete((off_t)precount, current); } else { movebyte(); flushinp(); beep(); } break; case 'd': case 'i': case 'I': case 'p': case 'X': movebyte(); default: flushinp(); beep(); } } } if (lflag) lineout(); } while (1); } off_t calc_size(arg) char *arg; { long val; char *poi; if (*arg == '0') { val = strtol(arg, &poi, 16); } else { val = strtol(arg, &poi, 10); } switch (*poi) { case 'k': case 'K': val *= 1024; break; case 'm': case 'M': val *= 1048576; break; case '\0': break; default: usage(); } return (off_t)val; } void trunc_cur() { undosize = filesize; undo_count = (off_t)(maxpos - current); undo_start = current; filesize = pagepos - mem + y * Anzahl + xpos(); maxpos = (PTR)(mem + filesize); if (filesize == 0L) { emsg(nobytes); } else cur_back(); edits = U_TRUNC; repaint(); } int do_append(count, buf) int count; char *buf; { if (filesize + count > memsize) { if (enlarge(count + 100L)) return 1; } memcpy(mem + filesize, buf, count); undo_start = mem + filesize - 1L; setpage(undo_start + count); edits = U_APPEND; undosize = filesize; filesize += count; maxpos += count; return 0; } void do_tilde(count) off_t count; { if (filesize == 0L) return; undo_start = current; if (current + count > maxpos) { beep(); return; } if ((undo_count = alloc_buf(count, &undo_buf)) == 0L) return; memcpy(undo_buf, current, undo_count); while (count--) { if (isupper((int)(*current))) *current = tolower((int)(*current)); else if (islower((int)(*current))) *current = toupper((int)(*current)); current++; cur_forw(0); } edits = U_TILDE; setcur(); } void do_undo() { off_t n, tempsize; char temp; PTR set_cursor; PTR s; PTR d; if (undo_count == 0L) { emsg("Nothing to undo"); return; } set_cursor = undo_start; switch (edits) { case U_EDIT: case U_TILDE: n = undo_count; s = undo_buf; d = undo_start; while (n--) { temp = *d; *d = *s; *s = temp; s++; d++; } break; case U_APPEND: case U_TRUNC: tempsize = filesize; filesize = undosize; undosize = tempsize; maxpos = (PTR)(mem + filesize); if (filesize) set_cursor = maxpos - 1L; else set_cursor = maxpos; break; case U_INSERT: filesize -= undo_count; maxpos -= undo_count; memcpy(undo_buf, undo_start, undo_count); memmove(undo_start, undo_start + undo_count, maxpos - undo_start); edits = U_DELETE; break; case U_BACK: case U_DELETE: filesize += undo_count; maxpos += undo_count; memmove(undo_start + undo_count, undo_start, maxpos - undo_start); memcpy(undo_start, undo_buf, undo_count); edits = U_INSERT; break; } setpage(set_cursor); if (edits == U_TRUNC && undosize > filesize) cur_back(); repaint(); } void do_over(loc, n, buf) PTR loc; off_t n; PTR buf; { if (n < 1L) { emsg(nobytes); return; } if (loc + n > maxpos) { beep(); return; } if ((undo_count = alloc_buf(n, &undo_buf)) == 0L) return; undo_start = loc; memcpy(undo_buf, loc, n); memcpy(loc, buf, n); edits = U_EDIT; setpage(loc + n - 1); repaint(); } void do_put(loc, n, buf) PTR loc; off_t n; PTR buf; { if (n < 1L) { emsg(nobytes); return; } if (loc > maxpos) { beep(); return; } if (filesize + n > memsize) { if (enlarge(n + 1024)) return; } if ((undo_count = alloc_buf(n, &undo_buf)) == 0L) return; undo_start = loc + 1; edits = U_INSERT; filesize += n; maxpos += n; memmove(undo_start + n, undo_start, maxpos - loc); memcpy(undo_start, buf, n); setpage(loc + n); repaint(); } /* argument sig not used, because only SIGINT will be catched */ void jmpproc(sig) int sig; { if (P(P_EB)) beep(); repaint(); clearstr(); signal(SIGINT, SIG_IGN); longjmp(env, 0); } off_t range(ch) int ch; { int ch1; long count; ch1 = vgetc(); while (ch1 >= '0' && ch1 <= '9') { numarr[arrnum++] = ch1; ch1 = vgetc(); } numarr[arrnum] = '\0'; if (arrnum != 0) count = strtol(numarr, (char **)NULL, 10); else count = 1; arrnum = 0; sprintf(rep_buf, "%ld%c%s%c", precount, ch, numarr, ch1); switch (ch1) { case '/': /**** Search String ****/ case '\\': strcat(rep_buf, "\n"); clearstr(); addch(ch1); refresh(); if (getcmdstr(line, 1)) break; end_addr = searching(ch1, line, current, maxpos - 1, FALSE); if (!end_addr) { beep(); return 0; } return(end_addr - current); case '?': case '#': strcat(rep_buf, "\n"); clearstr(); addch(ch1); refresh(); if (getcmdstr(line, 1)) break; start_addr = searching(ch1, line, current, maxpos - 1, FALSE); if (!start_addr) { beep(); return 0; } return(start_addr - current); case 'f': case 't': precount = count; end_addr = do_ft(ch1, 1); if (!end_addr) { beep(); return 0; } return (end_addr + 1 - current); case 'F': case 'T': precount = count; start_addr = do_ft(ch1, 1); if (!start_addr) { beep(); return 0; } return (start_addr - current); case '$': trunc_cur(); return 0; case 'G': if (count == -1) { trunc_cur(); return 0; } else if ((count < P(P_OF)) || (count - (off_t)P(P_OF)) > (filesize - 1L)) { beep(); return 0; } else { if (mem + count < current) { return(mem + count - current); } else { return(count - (current - mem)); } } case ' ': return precount; case '`': case '\'': mark = vgetc(); if (mark < 'a' || mark > 'z') { beep(); return 0; } end_addr = markbuf[mark - 'a']; if (end_addr == NULL) { beep(); return 0; } if (end_addr < current) { return(end_addr - current); } else { return(end_addr - current + 1); } } beep(); return 0; } bvi-1.3.2/bvi.h0100644000567000056700000001607107701240420011004 0ustar bgbg/* BVI.H * * 1996-02-28 V 1.0.0 * 1999-01-21 V 1.1.0 * 1999-03-17 V 1.1.1 * 1999-07-01 V 1.2.0 beta * 1999-08-21 V 1.2.0 final * 2000-05-10 V 1.3.0 alpha * 2000-10-24 V 1.3.0 final * 2001-10-29 V 1.3.1 * 2003-07-04 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #include #include #include #include #include #include #include #if defined(__MSDOS__) && !defined(DJGPP) # include "patchlev.h" # include "dosconf.h" # include "doscur.h" # include #else # include "patchlevel.h" # include "config.h" #if HAVE_NCURSES_H # include #else # include #endif #endif /* defines for filemode */ #define ERROR -1 #define REGULAR 0 #define NEW 1 #define DIRECTORY 2 #define CHARACTER_SPECIAL 3 #define BLOCK_SPECIAL 4 #define PARTIAL 5 /* regular expressions */ #define END 0 #define ONE 1 #define STAR 2 /* undo modes */ #define U_EDIT 1 /* undo o r R */ #define U_TRUNC 2 /* undo D */ #define U_INSERT 4 /* undo i */ #define U_DELETE 8 /* undo x */ #define U_BACK 16 /* undo X */ #define U_APPEND 32 /* undo P A */ #define U_TILDE 64 /* ~ */ #define S_GLOBAL 0x100 /* logic modes */ #define LSHIFT 1 #define RSHIFT 2 #define LROTATE 3 #define RROTATE 4 #define AND 5 #define OR 6 #define XOR 7 #define NEG 8 #define NOT 9 #define HEX 0 #define ASCII 1 #define FORWARD 0 #define BACKWARD 1 #define CR '\r' #define NL '\n' #define BS 8 #define ESC 27 #define SEARCH 0 #define BVICTRL(n) (n&0x1f) #define CMDLNG(a,b) (len <= a && len >= b) #ifndef NULL # define NULL ((void *)0) #endif #ifndef TRUE # define TRUE 1 # define FALSE 0 #endif #if defined(__MSDOS__) && !defined(DJGPP) # define ANSI # define PTR char huge * # define off_t long # define DELIM '\\' # define strncasecmp strnicmp # define strcasecmp stricmp # define memcpy d_memcpy # define memmove d_memmove #else # define PTR char * # define DELIM '/' #endif #define MAXCMD 255 #define BUFFER 1024 #define SKIP_WHITE while(*cmd!='\0'&&isspace(*cmd))cmd++; #ifdef DEBUG extern FILE *debug_fp; #endif #ifndef HAVE_STRERROR extern char *sys_errlist[]; #endif extern char *version; extern char addr_form[]; extern char pattern[]; extern char rep_buf[]; extern int maxx, maxy, x, y; extern int filemode, loc; extern int edits, new; extern int AnzAdd; extern int Anzahl, Anzahl3; extern int addr_flag; extern int ignore_case, magic; extern int screen, status; extern PTR mem; extern PTR maxpos; extern PTR pagepos; extern PTR undo_start; extern PTR current_start; extern PTR curpos; extern PTR current; extern PTR start_addr; extern PTR end_addr; extern char *name, cmdstr[]; extern off_t filesize, memsize; extern PTR markbuf[]; extern PTR last_motion; extern off_t undo_count; extern off_t yanked; extern off_t undosize; extern char *copyright, *notfound; extern char *terminal; extern char *undo_buf; extern char *yank_buf; extern int repl_count; extern char string[]; extern char *shell; extern char *poi; extern int smode; extern int again; extern int block_flag; extern off_t block_begin, block_end, block_size; #ifndef S_ISDIR /* POSIX 1003.1 file type tests. */ #define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */ #define S_ISCHR(m) ((m & 0170000) == 0020000) /* char special */ #define S_ISBLK(m) ((m & 0170000) == 0060000) /* block special */ #define S_ISREG(m) ((m & 0170000) == 0100000) /* regular file */ #define S_ISFIFO(m) ((m & 0170000) == 0010000) /* fifo */ #endif #if defined(__MSDOS__) && !defined(DJGPP) void d_memcpy(PTR, PTR, off_t); void d_memmove(PTR, PTR, off_t); #endif #ifdef ANSI off_t alloc_buf(off_t, char **), yd_addr(void); off_t range(int); void do_dot(void), do_exit(void), do_shell(void), do_undo(void); void do_tilde(off_t), trunc_cur(void); void do_back(off_t, PTR), do_ins_chg(PTR, char *, int); void do_mark(int, PTR), badcmd(char *), movebyte(void); void docmdline(char *), do_over(PTR, off_t, PTR), do_put(PTR, off_t, PTR); void jmpproc(int), printline(PTR, int); int addfile(char *); int bregexec(PTR, char *); int chk_comm(int); int doecmd(char *, int); int do_append(int, char *), do_logic(int, char *); int do_delete(off_t, PTR); int doset(char *); int do_substitution(int, char *, PTR, PTR); int hexchar(void); int outmsg(char *); PTR searching(int, char *, PTR, PTR, int); PTR wordsearch(PTR, char); PTR backsearch(PTR, char); PTR fsearch(PTR, PTR, char *); PTR rsearch(PTR, PTR, char *); PTR end_word(PTR); PTR calc_addr(char **, PTR); PTR do_ft(int, int); char *patcpy(char *, char *, char); void setpage(PTR), msg(char *), emsg(char *), smsg(char *); void usage(void), bvi_init(char *), statpos(void), setcur(void); void showparms(int), toggle(void), scrolldown(int), scrollup(int); void fileinfo(char *); void clearstr(void), clear_marks(void), repaint(void), new_screen(void); void quit(void), sysemsg(char *), do_z(int), stuffin(char *); off_t edit(int), load(char *); off_t calc_size(char *); int ascii_comp(char *, char *), hex_comp(char *, char *); int cur_forw(int), cur_back(void); int lineout(void), save(char *, PTR, PTR, int); int at_least(char *, char *, int); int vgetc(void), xpos(void), enlarge(off_t); int getcmdstr(char *, int), read_rc(char *); int wait_return(int); #else int addfile(); off_t alloc_buf(), yd_addr(); off_t range(); off_t calc_size(); void do_mark(), badcmd(), movebyte(); void do_back(), do_ins_chg(); void jmpproc(), printline(); int chk_comm(); void docmdline(), do_over(), do_put(); int doecmd(); void do_dot(), do_exit(), do_shell(), do_undo(); void do_tilde(), trunc_cur(); int do_append(), do_logic(); int do_delete(); int doset(); int do_substitution(); int hexchar(); int outmsg(); PTR searching(); PTR wordsearch(); PTR backsearch(); int bregexec(); PTR fsearch(); PTR rsearch(); PTR end_word(); PTR calc_addr(); PTR do_ft(); char *patcpy(); void setpage(), msg(), emsg(), smsg(); void usage(), bvi_init(), statpos(), setcur(); void showparms(), toggle(), scrolldown(), scrollup(); void fileinfo(); void clearstr(), clear_marks(), new_screen(), repaint(); void quit(), sysemsg(), do_z(), stuffin(); off_t edit(), load(); int ascii_comp(), hex_comp(); int cur_forw(), cur_back(); int lineout(), save(), at_least(), read_rc(); int getcmdstr(), enlarge(); int vgetc(), xpos(); int wait_return(); #endif bvi-1.3.2/bvi.man0100644000567000056700000004172110002046354011326 0ustar bgbgBVI(1) User Commands BVI(1) NAME bvi, bview - visual editor for binary files VERSION bvi-1.3.2 SYNOPSIS bvi [-R] [-c cmd] [-f script] [-b begin] [-e end] [-s size] file... bview [-R] [-c cmd] [-f script] [-b begin] [-e end] [-s size] file... OPTIONS file... A list of filenames. The first one will be the current file and will be read into the buffer. The cursor will be positioned on the first line of the buffer. You can get to the other files with the ":next" command. -R "Readonly": The readonly flag is set for all the files, preventing accidental overwriting with a write command. -b begin causes bvi to load a file not from the start but from offset begin. -e end causes bvi to load a file not till end but till address end. -s size causes bvi not to load the complete file but only size bytes. -c cmd cmd will be executed after the first file has been read. If the cmd contains spaces it must be enclosed in double quotes (this depends on the shell that is used). -f script This command provides a means for collecting a series of "ex" (colon) commands into a script file, then using this file to edit other files. Since there is no binary stream editor "bsed", you can use this option to make several global changes in a binary file. DESCRIPTION Bvi stands for "Binary VIsual editor". Bvi is a screen oriented editor for binary files; its command set is based on that of the vi(1) text editor. As a binary editor does not have the concept of "lines" there are differences from Vi commands wherever the latter are line orientate. COMPARISON The main differences between Vi and Bvi are: The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset '0' (zero). You can toggle between the hex and ascii windows with the tab key (TAB). Toggling between these two windows does not change the current position (offset) within the file. No "lines" concept: Files are treated as one long stream of bytes. The characters "newline" and "carriage return" are not special, id est they never mark the end of lines. Therefore the lines on the screen do not represent lines in the usual way. Data is broken across screen lines arbitarily. As a consequence there are no commands in bvi from ex or vi that are based on line numbers, eg "dd", "yy", 'C', 'S', 'o', 'O'. This also changes the meaning of "range" before the ":write" command to a byte offset, ie the command ":100,200w foo" writes all *bytes* (not lines) from offset 100 to offset 200 to the file "foo". No "text objects": There are also no text-specific arrangements like words, paragraphs, sentences, sections and so on. Extended "ruler": The bottom line of the screen shows the current address (byte offset) and the current character in these notations: octal, hexadecimal, decimal and ascii. Search patterns: All search commands understand these special characters: . any character [] set of characters * zero or more occurrences of previous char or set But as there is no concept of lines you cannot use the standard symbols ("anchors") for "begin-of-line" ('^') and "end-of-line" ('$'). Searching for the start/end of lines must be done explicitly by adding these special characters to your search pattern using these meta sequences: \n newline \r return \t tab \0 binary zero Additional search commands: Similar to the text search commands there are additional hex-search functions '\' and '#' which allow to search for any byte value. Example: "\62 76 69" will search for the string "bvi". Spaces between hex value are optional, so searching for "6775636B6573" will find "guckes". Changing the length of data (insertion, deletion) moves the data to other addresses; this is bad for many cases (eg. databases, program files) and is thus disabled by default. You can enable this commands by typing :set memmove BVI Modes: Command Mode (Normal Mode): Input is treated as command. Note that command mode is the default mode after startup and after escaping from input mode. Use ESC (escape) to cancel a partial (uncompleted) command. Input Mode: Input is treated as replacement of current characters or (after the end of the file) is appended to the current file. This mode is entered from command mode by typing one of 'i', 'I', 'A', 'r', or 'R'. You can enter the characters from the keyboard (in the ASCII window) or hexadecimal values (in the HEX window). Type TAB to switch between these two windows. Type ESC to finish the current input and return to command mode. Type CTRL-C to cancel current command abnormally. Command line mode (Last Line Mode or : mode): Similar to vi, this mode is entered by typing one of the characters : / ? \ # ! The command is terminated and executed by typing a carriage return; to cancel a partially typed command, type ESC to cancel the current command and return to command mode. ENVIRONMENT The editor recognizes the environment variable BVIINIT as a command (or list of commands) to run when it starts up. If this variable is undefined, the editor checks for startup commands in the file ~/.bvirc file, which you must own. However, if there is a .bvirc owned by you in the current directory, the editor takes its startup commands from this file - overriding both the file in your home directory and the environment variable. TERMINOLOGY Characters names are abbreviated as follows: Abbr. ASCII name aka CR 010 carriage return ^A 001 control-a ^H 008 control-h ^I 009 control-i aka TAB ^U 021 control-u ^Z 026 control-z ESC 027 escape aka ESC DEL 127 delete LEFT --- left arrow RIGHT --- right arrow DOWN --- down arrow UP --- up arrow COMMAND SUMMARY See the TERMINOLOGY for a summary on key name abbreviations used within the following description of commands. Abstract: Arrow keys move the cursor on the screen within the current window. Sample commands: :version show version info <- v ^ -> arrow keys move the cursor h j k l same as arrow keys u undo previous change ZZ exit bvi, saving changes :q! quit, discarding changes /text search for text ^U ^D scroll up or down Counts before bvi commands: Numbers may be typed as a prefix to some commands. They are interpreted in one of these ways. screen column | byte of file G scroll amount ^D ^U repeat effect most of the rest Interrupting, canceling ESC end insert or incomplete command DEL (delete or rubout) interrupts File manipulation: ZZ if file modified, write and exit; otherwise, exit :w write changed buffer to file :w! write changed buffer to file, overriding read-only ("forced" write) :q quit when no changes have been made :q! quit and discard all changes :e file edit file :e! re-read current file, discard all changes :e # edit the alternate file :e! # edit the alternate file, discard changes :w file write current buffer to file :w! file write current buffer to file overriding read-only (this "overwrites" the file) :sh run the command as set with option "shell", then return :!cmd run the command cmd from "shell", then return :n edit next file in the argument list :f show current filename, modified flag, current byte offset, and percentage of current position within buffer ^G same as :f Additional edit commands You can insert/append/change bytes in ASCII/binary/decimal/ hexadecimal or octal representation. You can enter several (screen) lines of input. A line with only a period (.) in it will terminate the command. You must not type in values greater than a byte value. This causes an abandonment of the command. Pressing the CR key does not insert a newline - character into the file. If you use ASCII mode you can use the special characters \n, \r, \t and \0. :i aCR insert bytes (ASCII) at cursor position :a bCR append bytes (Binary) at end of file :c hCR change bytes (hexadecimal) at cursor position Bit-level operations :and n bitwise 'and' operation with value n :or n bitwise 'or' operation with value n :xor n bitwise 'xor' operation with value n :neg two's complement :not logical negation :sl i shift each byte i bits to the left :sr i shift each byte i bits to the right :rl i rotate each byte i bits to the left :rr i rotate each byte i bits to the right Command mode addresses :w foo write current buffer to a file named "foo" :5,10w foo copy byte 5 through 100 into as file named foo :.,.+20w foo copy the current byte and the next 20 bytes to foo :^,'aw foo write all bytes from the beginning through marker 'a' :/pat/,$ foo search pattern pat and and copy through end of file Positioning within file: ^B backward screen ^F forward screen ^D scroll down half screen ^U scroll up half screen nG go to the specified character (end default), where n is a decimal address /pat next line matching pat ?pat previous line matching pat \hex jump to next occurrence of hex string hex #hex jump to previous occurrence of hex string hex n repeat last search command N repeat last search command, but in opposite direction Adjusting the screen: ^L clear and redraw screen zCR redraw screen with current line at top of screen z- redraw screen with current line at bottom of screen z. redraw screen with current line at center of screen /pat/z- search for pattern pat and then move currents line to bottom ^E scroll screen down 1 line ^Y scroll screen up 1 line Marking and returning: mx mark current position with lower-case letter x Note: this command works for all lower-case letters 'x move cursor to mark x in ASCII section `x move cursor to mark x in HEX section '' move cursor to previous context in ASCII section `` move cursor to previous context in HEX section Line positioning: H jump to first line on screen ("top") L jump to last line on screen ("low") M jump to middle line on screen ("middle") - jump onto previous line on screen + jump onto next line on screen CR same as + DOWN or j next line, same column UP or k previous line, same column Character positioning: ^ first byte in HEX window $ end of screen line l or RIGHT jump onto next byte (within current screen line) h or LEFT jump onto previous byte (within current screen line) ^H same as LEFT space same as RIGHT fx find next occurrence of character x Fx find previous occurrence of character x n| jump onto nth byte/character within current line Strings: (works similar to the strings(1) command) Note: "Words" are defined as strings of "nonprinting characters". e jump to next end of word w jump to next begin of word b jump to previous begin of word W forward to next string delimited with a \0 or \n B back to previous string delimited with a nonprinting char Corrections during insert: ^H erase last character (backspace) erase your erase character, same as ^H (backspace) ESC ends insertion, back to command mode Append and replace: A append at end of file rx replace current bte with char 'x' R enter replace mode; for all subsequent input, the current byte is overwritten with the next input character; leave replace mode with ESC. Miscellaneous Operations: TAB toggle between ASCII and HEX section Yank and Put: 3ySPACE yank 3 characters p insert contents of yank buffer o replace text with content of yank buffer P put back at end of file Undo, Redo: u undo last change Note: Only the last change can be undone. Therefore this commands toggles between the last and second-t-last state of the buffer. Setting Options: With the :set command you can set options in bvi Option Default Description autowrite noaw Save current file, if modified, if you give a :n, :r or ! command columns cm=16 on an 80 character wide terminal ignorecase noic Ignores letter case in searching magic nomagic Makes . [ * special in patterns memmove nomm enables insert and delete commands offset of=0 adds an offset to the diplayed addresses readonly noro If set, write fails unless you use ! after command scroll sc=1/2 window Number of lines scrolled by ^U and ^D showmode mo Displays statusline on bottom of the screen terse noterse Let you obtain shorter error messages window window=screensize Lines in window, can be reduced at slow terminals wordlength wl=4 Length of an ASCII-string found by w, W, b or B wrapscan ws Searches wrap around past the end of the file unixstyle nous The representation of ascii characters below 32 is displayed in the statusline as shown in ascii(7) if unset rather in DOS-style (^A) AUTHOR bvi was developed by Gerhard Buergmann, Vienna, Austria Gerhard.Buergmann@puon.at WWW Bvi Homepage: http://bvi.sourceforge.net/ Vi Pages: http://www.guckes.net/vi/clones.php3 (all about Vi and its clones) FILES $HOME/.bvirc editor startup file ./.bvirc editor startup file BUGS Bvi does not update the screen when the terminal changes its size. SEE ALSO vi(1), strings(1), ascii(5) 3/Jan/2004 BVI Version 1.3.2 bvi-1.3.2/CHANGES0100644000567000056700000000500007770571722011056 0ustar bgbgNew in release 1.3.2 ==================== * configure: checking term.h and ncurses/term.h * cast in bmore.c in putline(); * ported to compile under DJGPP v2.0 w/ PDCURSES (by simoN) * fixed multiple file handling for "bmore" (by simoN) * renamed several local screen processing routines to avoid compiler conflicts * several minor fixes to "bmore" code (by simoN) * reset tty after CTRL-C in bmore * -c option in bmore (clear before displaying) * -n num option in bmore (display the indicated number of lines in each screenful * -w num option in bmore (display the indicated number of bytes in each line) New in release 1.3.1 ==================== * autoconf 2.52 * do_back() fix * replace sys_errlist[errno] with strerror(errno) (Debian #106762) * deleting bytes in empty file fixed (Debian #121934) * no ":set mm" for x at eof (Debian #122240) * cast for alloc_buf() in set.c * r-bug fix in edit.c and bvi.c * renamed CTRL to BVICTRL (AIX problem) * bmore: nicer last line * bmore: bmbeep() instead of beep() * bmore: subshell support fixes New in release 1.3.0 ==================== * a "bmore" program has been added * --with-ncurses option to configure to specify an alternate search path for Ncurses outside the normal include/lib search path. * make uninstall option * Reading of Block Special Files * New Command line options: +cmd -b begin \ -e end > for partial file read -s size / * :e# bug fixed * Debian bug #68436 (Buffer overflow in io.c) fixed New in release 1.2.0 ==================== * configuration with GNU autoconfig * CR moves cursor to 1st column * alphabet. order for :set all * new settings: set columns=n set (no)memmove * insert and delete (a, d, i, I, x, X) * vi-syntax for y (yank), overwriting put o * new colon (ex) commands: :undo :delete :global :yank :put :overwrite :insert :change :append * new option: -f script New in release 1.1.1 ===================== * .bvirc not read in some cases, fixed * ":f newname" does not work, fixed * distribution tar file with no directory, fixed * freebsd and openbsd added to Makefile * undo of D command fixed New in release 1.1.0 ===================== * A lot of bugfixes * New option ":set offset=n" for counting the addresses beginning with n instead of 0 * New bit-wise commands :xor :and :or :not :neg :lshift :rshift :rrotate :lrotate * Byte addressing for colon commands, e.g. ":5,100w foo" writes byte 5 through 100 to file foo * Backwards hex search character % changed to # * Filename substitution with %, e.g. ":w %.new" bvi-1.3.2/comm.c0100644000567000056700000004676307701240526011174 0ustar bgbg/* COMM.C - Routines to parse and execute "command line" commands, such as * search or colon commands. * * 1996-01-16 created; * 1998-03-14 V 1.0.1 * 1999-02-03 V 1.1.0 * 1999-06-22 V 1.2.0 beta * 1999-09-10 V 1.2.0 final * 2000-03-03 V 1.3.0 beta * 2000-07-15 V 1.3.0 final * 2001-10-10 V 1.3.1 * 2003-07-04 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include "bvi.h" #include "set.h" #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_FCNTL_H # include #endif #if defined(__MSDOS__) && !defined(DJGPP) # include # include # define WRITE (O_WRONLY|O_CREAT|O_TRUNC|O_BINARY) # define APPEND (O_WRONLY|O_APPEND|O_BINARY) #else # define WRITE (O_WRONLY|O_CREAT|O_TRUNC) # define APPEND (O_WRONLY|O_APPEND) #endif #define CMDSZ 256 /* size of the command buffer */ #define MAXNAME 10 /* size of a : command name */ #define NO_ADDR 1 #define NO_ARG 8 #define ONE_ARG 16 #define MAX_ONE_ARG 32 #define ONE_FILE 64 #define MAX_ONE_FILE 128 static char *altfile = NULL; /* alternate file */ static struct stat buf; static int c_argc = 0; static char *c_argv[9]; char *nowrtmsg = "No write@since last change (:%s! overrides)"; char *morefiles = "more files@to edit"; char *ambigous = "Ambigous|Too many file names"; char *ambvalue = "Ambigous|Too many values"; char *extra = "Extra chars|Extra characters at end of command"; char *noaddr = "No address allowed@on this command"; char *noval = "No value@for binary operation"; int repl_count = -1; int addr_flag; PTR start_addr; PTR end_addr; extern char *name; /* actual filename */ extern char **files; /* used for "next" and "rewind" */ extern int numfiles, curfile; extern int errno; static char oldbuf[CMDSZ]; /** for :!! command **/ /* * docmdline() - handle a colon command * * Handles a colon command received interactively by getcmdln() or from * the environment variable "BVIINIT" (or eventually .bvirc). */ void docmdline(cmdline) char *cmdline; { char buff[CMDSZ]; char cmdbuf[CMDSZ]; char cmdname[MAXNAME]; char *cmd; char *p; size_t len; int n, ok; int force = 0; int saveflag; if (cmdline == NULL) return; if (*cmdline == '"') return; /** comment **/ if (strlen(cmdline) > CMDSZ - 2) { emsg("Command too long"); return; } strcpy(buff, cmdline); cmd = buff; /* With no address given, we start at the beginning of the file and * go to the end of the file (not line like in vi). */ addr_flag = 0; start_addr = mem; end_addr = maxpos - 1; SKIP_WHITE if (*cmd == '%') { cmd++; addr_flag = 2; } else { if ((start_addr = calc_addr(&cmd, mem)) == NULL) { return; } if (*cmd == ',') { cmd++; addr_flag = 1; SKIP_WHITE if ((end_addr = calc_addr(&cmd, maxpos - 1)) == NULL) { return; } } else { if (addr_flag) { /* if we have only one address */ end_addr = start_addr; } } } SKIP_WHITE if (start_addr > (end_addr + 1)) { emsg("Addr1 > addr2|First address exceeds second"); return; } if ((end_addr + 1) > maxpos) { emsg("Not that many bytes@in buffer"); return; } if (start_addr < mem) { sprintf(string, "Negative address@- first byte is %ld", P(P_OF)); emsg(string); return; } SKIP_WHITE /**** End of address range calculation ****/ if (*cmd == '\0') { setpage(end_addr); return; } strcpy(cmdbuf, cmd); /* save the unmodified command */ if (*cmd == '!') { if (*(cmdbuf + 1) == '\0') { emsg("Incomplete shell escape command@- use 'shell' to get a shell"); return; } if (*(cmdbuf + 1) == '!') { if (oldbuf[0] != '\0') { strcpy(cmdbuf + 1, oldbuf); msg(oldbuf); } else { emsg("No previous command@to substitute for !"); return; } } else sprintf(oldbuf, "\n%s\n", cmdbuf + 1); if (P(P_AW)) { save(name, mem, maxpos, WRITE); edits = 0; } if (edits) msg("[No write]|[No write since last change]"); savetty(); endwin(); system(cmdbuf + 1); fprintf(stderr, "[Hit return to continue]"); getchar(); doupdate(); repaint(); clearstr(); return; } n = 0; while (*cmd >= 'a' && *cmd <= 'z') { cmdname[n++] = *cmd++; if (n == MAXNAME) { sprintf(string, "What?|%s: Not an editor command", cmdbuf); emsg(string); return; } } cmdname[n] = '\0'; if (*cmd == '!') { force = 1; cmd++; } len = strlen(cmdname); SKIP_WHITE if (!strncmp("substitute", cmdname, len) && CMDLNG(10,1)) { repl_count = do_substitution(*cmd, cmd + 1, start_addr, end_addr); if (repl_count == -1) { emsg("No previous substitute re|No previous substitute regular expression"); return; /* No prev subst */ } repaint(); if (!repl_count) { emsg("Fail|Substitute pattern matching failed"); } else if (repl_count > 1) { sprintf(string, "%d subs|%d substitutions", repl_count, repl_count); msg(string); } return; } else if (!strncmp("global", cmdname, len) && CMDLNG(6,1)) { current = start_addr - 1; repl_count = 0; addch('\n'); while ((current = searching(*cmd, cmd + 1, current, end_addr, FALSE|S_GLOBAL)) != 0L) { addch('\n'); printline(current, maxy - 1); repl_count++; if (repl_count == LINES - 2) { if (wait_return(FALSE)) return; repl_count = 0; } } if (repl_count) { wait_return(TRUE); } else { repaint(); emsg(notfound); } return; } else if (cmdname[0] == 't') { if (!addr_flag) start_addr = current; cmd = cmdname + 1L; SKIP_WHITE do_mark(*cmd, start_addr); return; } if ((!strncmp("write", cmdname, len) && CMDLNG(5,1)) || !strcmp("wq", cmdname)) { if (*cmd == '>') { if (*(++cmd) == '>') { cmd++; saveflag = APPEND; } else { emsg("Write forms are 'w' and 'w>>'"); return; } } else if (*cmd == '!') { emsg("Not yet implemented"); return; } else { saveflag = WRITE; } SKIP_WHITE c_argc = 0; if ((c_argv[c_argc] = strtok(cmd, " \t")) != NULL) c_argc++; while ((c_argv[c_argc] = strtok(NULL, " \t")) != NULL) c_argc++; if (c_argc > 1) { emsg(ambigous); return; } if (c_argc == 1) { /* change '%' to Filename */ while ((p = strchr(c_argv[0], '%')) != NULL && *(p-1) != '\\') { if (name == NULL) { emsg("No filename@to substitute for %"); return; } *p = '\0'; strcpy (oldbuf, c_argv[0]); strcat (oldbuf, name); strcat (oldbuf, p + 1); c_argv[0] = oldbuf; } } if (name == NULL && c_argc != 0) name = strdup(c_argv[0]); if (force) { if (c_argc == 0) ok = save(name, start_addr, end_addr, saveflag); else ok = save(c_argv[0], start_addr, end_addr, saveflag); } else { if (c_argc == 0) { if (P(P_RO)) { sprintf(string, "\"%s\" File is read only", name); emsg(string); return; } else ok = save(name, start_addr, end_addr, saveflag); } else { if (!stat(c_argv[0], &buf)) { if (saveflag == WRITE) { sprintf(string, "File exists@- use \"%s! %s\" to overwrite", cmdname, c_argv[0]); emsg(string); return; } else { /* APPEND */ /* We can only append to a regular file! */ if (S_ISREG(buf.st_mode)) { if (filemode == PARTIAL) filemode = REGULAR; } else if (S_ISBLK(buf.st_mode)) { emsg("Cannot append to a block special file"); return; } ok = save(c_argv[0], start_addr, end_addr, saveflag); } } else { if (saveflag == APPEND) { emsg("No such file"); return; } else { /* WRITE */ /* If we write the block of a partial file to a new file, it will * become a regular file! */ if (filemode == PARTIAL) filemode = REGULAR; ok = save(c_argv[0], start_addr, end_addr, saveflag); } } } } if (!strcmp("wq", cmdname)) { if (ok) quit(); } return; } c_argc = 0; cmd = strtok(cmdbuf, " \t"); while ((c_argv[c_argc] = strtok(NULL, " \t")) != NULL) c_argc++; if (!strncmp("set", cmdname, len) && CMDLNG(3, 2)) { if (chk_comm(NO_ADDR)) return; if (c_argc == 0) { doset(NULL); } else { for (n = 0; n < c_argc; n++) { if (doset(c_argv[n])) return; } } } else if (!strncmp("args", cmdname, len) && CMDLNG(4, 2)) { if (chk_comm(NO_ADDR|NO_ARG)) return; string[0] = '\0'; for (n = 0; n < numfiles; n++) { if (n == curfile) strcat(string, "["); strcat(string, files[n]); if (n == curfile) strcat(string, "]"); strcat(string, " "); } msg(string); } else if (!strncmp("source", cmdname, len) && CMDLNG(6, 2)) { if (chk_comm(NO_ADDR|ONE_FILE)) return; if (read_rc(c_argv[0])) sysemsg(c_argv[0]); refresh(); } else if (!strncmp("cd", cmdname, len) && CMDLNG(2, 2)) { if (chk_comm(NO_ADDR|ONE_FILE)) return; if (!force) { if (edits) { if (P(P_AW)) { save(name, mem, maxpos, WRITE); edits = 0; } else { sprintf(string, nowrtmsg, "cd"); emsg(string); return; } } } if (c_argc == 0) { sprintf(string, "%c", DELIM); c_argv[0] = string; } if (chdir(c_argv[0])) sysemsg(c_argv[0]); } else if (!strncmp("edit", cmdname, len) && CMDLNG(4, 1)) { /* * The command ":e#" gets expanded to something like ":efile", so * detect that case here. */ if (*cmd == 'e' && c_argc == 0) { if (cmd[1] == '!') (void) doecmd(&cmd[2], TRUE); else (void) doecmd(&cmd[1], FALSE); return; } if (chk_comm(NO_ADDR|MAX_ONE_FILE)) return; doecmd(c_argv[0], force); } else if (!strncmp("file", cmdname, len) && CMDLNG(4, 1)) { if (chk_comm(NO_ADDR|MAX_ONE_FILE)) return; if (c_argc != 0) name = strdup(c_argv[0]); fileinfo(name); } else if (!strncmp("read", cmdname, len) && CMDLNG(4, 1)) { if (chk_comm(NO_ADDR|MAX_ONE_FILE)) return; /* read reads a file at EOF */ if (c_argc == 0) c_argv[0] = name; if (!addfile(c_argv[0])) { edits = U_TRUNC; undosize = filesize; repaint(); } } else if (!strncmp("xit", cmdname, len) && CMDLNG(3, 1)) { if (chk_comm(NO_ADDR|NO_ARG)) return; do_exit(); } else if (!strncmp("next", cmdname, len) && CMDLNG(4, 1)) { if (chk_comm(NO_ADDR|NO_ARG)) return; if (!force) { if (edits) { if (P(P_AW)) { save(name, mem, maxpos, WRITE); edits = 0; } else { sprintf(string, nowrtmsg, "next"); emsg(string); return; } } } if ((curfile + 1) < numfiles) { if (force) stuffin(":e! "); else stuffin(":e "); stuffin(files[++curfile]); stuffin("\n"); } else emsg("No more files@to edit!"); } else if (!strncmp("rewind", cmdname, len) && CMDLNG(6, 3)) { if (chk_comm(NO_ADDR|NO_ARG)) return; if (numfiles <= 1) /* nothing to rewind */ return; if (!force) { if (edits) { if (P(P_AW)) { save(name, mem, maxpos, WRITE); edits = 0; } else { sprintf(string, nowrtmsg, "rewind"); emsg(string); return; } } } curfile = 0; if (force) stuffin(":e! "); else stuffin(":e "); stuffin(files[0]); stuffin("\n"); } else if (!strncmp("append", cmdname, len) && CMDLNG(6, 1)) { if (chk_comm(NO_ADDR|MAX_ONE_ARG)) return; do_ins_chg(start_addr, c_argc == 1 ? c_argv[0] : "a", U_APPEND); } else if (!strncmp("change", cmdname, len) && CMDLNG(6, 1)) { if (chk_comm(MAX_ONE_ARG)) return; if (!addr_flag) start_addr = current; do_ins_chg(start_addr, c_argc == 1 ? c_argv[0] : "a", U_EDIT); } else if (!strncmp("mark", cmdname, len) && CMDLNG(4, 2)) { if (c_argc == 0) { emsg("Mark what?"); return; } if (c_argc > 1 || (strlen(c_argv[0]) > 1)) { emsg(extra); return; } if (!addr_flag) start_addr = current; do_mark(c_argv[0][0], start_addr); } else if (!strncmp("yank", cmdname, len) && CMDLNG(4, 1)) { if ((yanked = yd_addr()) == 0L) return; if ((yanked = alloc_buf(yanked, &yank_buf)) == 0L) return; memcpy(yank_buf, start_addr, yanked); sprintf(string, "%lu bytes", (long)yanked); msg(string); } else if (!strncmp("overwrite", cmdname, len) && CMDLNG(9, 1)) { if (chk_comm(NO_ARG)) return; if (!addr_flag) start_addr = current; do_over(start_addr, yanked, yank_buf); } else if (!strncmp("undo", cmdname, len) && CMDLNG(4, 1)) { if (chk_comm(NO_ADDR|NO_ARG)) return; do_undo(); } else if (!strncmp("version", cmdname, len) && CMDLNG(7, 2)) { if (chk_comm(NO_ADDR|NO_ARG)) return; sprintf(string, "bvi version %s %s", VERSION, copyright); msg(string); } else if (!strncmp("shell", cmdname, len) && CMDLNG(5, 2)) { if (chk_comm(NO_ADDR|NO_ARG)) return; do_shell(); clear(); repaint(); clearstr(); } else if (!strncmp("quit", cmdname, len) && CMDLNG(4, 1)) { if (chk_comm(NO_ADDR|NO_ARG)) return; if (!force) { if (edits) { sprintf(string, nowrtmsg, "quit"); emsg(string); } else { if ((curfile + 1) < numfiles) { sprintf(string, "%d %s", numfiles - curfile - 1, morefiles); emsg(string); } else quit(); } } else quit(); } else if (!strncmp("sleft", cmdname, len) && CMDLNG(5, 2)) { if (c_argc == 1) { do_logic(LSHIFT, c_argv[0]); } else if (c_argc == 0) { do_logic(LSHIFT, "1"); } else { emsg(ambvalue); return; } } else if (!strncmp("sright", cmdname, len) && CMDLNG(6, 2)) { if (c_argc == 1) { do_logic(RSHIFT, c_argv[0]); } else if (c_argc == 0) { do_logic(RSHIFT, "1"); } else { emsg(ambvalue); return; } } else if (!strncmp("rleft", cmdname, len) && CMDLNG(5, 2)) { if (c_argc == 1) { do_logic(LROTATE, c_argv[0]); } else if (c_argc == 0) { do_logic(LROTATE, "1"); } else { emsg(ambvalue); return; } } else if (!strncmp("rright", cmdname, len) && CMDLNG(6, 2)) { if (c_argc == 1) { do_logic(RROTATE, c_argv[0]); } else if (c_argc == 0) { do_logic(RROTATE, "1"); } else { emsg(ambvalue); return; } } else if (!strcmp("and", cmdname)) { if (c_argc == 1) { do_logic(AND, c_argv[0]); } else if (c_argc == 0) { emsg(noval); return; } else { emsg(ambvalue); return; } } else if (!strcmp("or", cmdname)) { if (c_argc == 1) { do_logic(OR, c_argv[0]); } else if (c_argc == 0) { emsg(noval); return; } else { emsg(ambvalue); return; } } else if (!strcmp("xor", cmdname)) { if (c_argc == 1) { do_logic(XOR, c_argv[0]); } else if (c_argc == 0) { emsg(noval); return; } else { emsg(ambvalue); return; } } else if (!strcmp("neg", cmdname)) { if (c_argc != 0) { emsg(extra); return; } do_logic(NEG, "255"); } else if (!strcmp("not", cmdname)) { if (c_argc != 0) { emsg(extra); return; } do_logic(NOT, "255"); } else { sprintf(string, "What?|%s: Not an editor command", cmd); if P(P_MM) { if (!strncmp("delete", cmdname, len) && CMDLNG(6, 1)) { if ((undo_count = yd_addr()) == 0L) return; do_delete(undo_count, start_addr); sprintf(string, "%lu bytes", (long)undo_count); msg(string); } else if (!strncmp("insert", cmdname, len) && CMDLNG(6, 1)) { if (chk_comm(MAX_ONE_ARG)) return; if (!addr_flag) start_addr = current; do_ins_chg(start_addr - 1, c_argc == 1 ? c_argv[0] : "a", U_INSERT); } else if (!strncmp("put", cmdname, len) && CMDLNG(3, 2)) { if (chk_comm(NO_ARG)) return; if (!addr_flag) start_addr = current; do_put(start_addr, yanked, yank_buf); } else { emsg(string); } } else { if (!strncmp("delete", cmdname, len) && CMDLNG(6, 1)) { movebyte(); } else if (!strncmp("insert", cmdname, len) && CMDLNG(6, 1)) { movebyte(); } else if (!strncmp("put", cmdname, len) && CMDLNG(3, 2)) { movebyte(); } else { emsg(string); } } } } /* calculate address range for :yank and :delete command */ off_t yd_addr() { off_t count = 0; if (c_argc == 0) { switch (addr_flag) { case 0: start_addr = current; case 1: count = 1; break; case 2: count = end_addr - start_addr + 1; break; } } else if (c_argc == 1) { count = atoi(c_argv[0]); switch (addr_flag) { case 0: start_addr = current; case 1: end_addr = start_addr + count - 1; break; case 2: start_addr = end_addr; end_addr = start_addr + count - 1; break; } } else { emsg(ambvalue); return 0; } return count; } void do_exit() { if (edits) { if (!save(name, mem, maxpos - 1L, WRITE)) return; } if ((curfile + 1) < numfiles) { sprintf(string, "%d %s", numfiles - curfile - 1, morefiles); emsg(string); } else quit(); } int doecmd(arg, force) char *arg; int force; { char *tmp; if (*arg == '\0') arg = NULL; if (!force && edits) { sprintf(string, nowrtmsg, "edit"); emsg(string); /* if (altfile) free(altfile); altfile = strdup(arg); */ return FALSE; } if (arg != NULL) { if (name != NULL && !strcmp(arg, name)) { if (!edits || (edits && !force)) return TRUE; } if (name != NULL && !strcmp(arg, "#")) { if (altfile == NULL) { emsg("No alternate filename@to substitute for #"); return FALSE; } tmp = name; name = altfile; altfile = tmp; } else { if (altfile) { free(altfile); } altfile = name; name = strdup(arg); } } if (name == NULL) { emsg("No file|No current filename"); return FALSE; } edits = 0; filesize = load(name); if (arg == NULL) { setpage(current < maxpos ? current : maxpos - 1L); } return TRUE; } void clearstr() { int n; move(maxy, 0); for (n = 0; n < maxx; n++) addch(' '); move(maxy, 0); } /**** displays an error message *****/ void emsg(s) char *s; { int cnt; if (P(P_EB)) beep(); clearstr(); attrset(A_REVERSE); cnt = outmsg(s); attrset(A_NORMAL); if (cnt >= (maxx - 25)) { /* 25 = status */ addch('\n'); wait_return(TRUE); } } /*** System error message *****/ void sysemsg(s) char *s; { char string[256]; #ifdef HAVE_STRERROR sprintf(string, "%s: %s", s, strerror(errno)); #else sprintf(string, "%s: %s", s, sys_errlist[errno]); #endif emsg(string); } /*** displays mode if showmode set *****/ void smsg(s) char *s; { if (P(P_MO)) { msg(s); setcur(); } } /************* displays s on status line *****************/ void msg(s) char *s; { clearstr(); if (outmsg(s) >= (maxx - 25)) { /* 25 = status */ addch('\n'); wait_return(TRUE); } } int outmsg(s) char *s; { char *poi; int cnt = 0; move(maxy, 0); poi = strchr(s, '|'); if (P(P_TE)) { poi = s; while (*poi != '\0' && *poi != '@' && *poi != '|') { addch(*poi++); cnt++; } } else { if (poi) poi++; else poi = s; while (*poi) { if (*poi == '@') addch(' '); else addch(*poi); poi++; cnt++; } } return cnt; } /* If flag == TRUE we do a repaint * */ int wait_return(flag) int flag; { int c; signal(SIGINT, jmpproc); clearstr(); attrset(A_REVERSE); mvaddstr(maxy, 0, "[Hit return to continue]"); attrset(A_NORMAL); refresh(); c = getch(); if (flag) { clear(); repaint(); } clearstr(); signal(SIGINT, SIG_IGN); if (c != CR && c != NL && c != ' ' && c != ':' && c != KEY_ENTER) return 1; return 0; } int chk_comm(flag) int flag; { if ((flag & NO_ADDR) && (addr_flag > 0)) { emsg(noaddr); return 1; } if ((flag & NO_ARG) && (c_argc > 0)) { emsg(extra); return 1; } if ((flag & MAX_ONE_ARG) && (c_argc > 1)) { emsg(ambvalue); return 1; } if ((flag & ONE_FILE) && (c_argc == 0)) { emsg("Missing filename"); return 1; } if ((flag & MAX_ONE_FILE) && (c_argc > 1)) { emsg(ambigous); return 1; } return 0; } bvi-1.3.2/config.guess0100775000567000056700000012001107572124102012367 0ustar bgbg#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002 Free Software Foundation, Inc. timestamp='2002-11-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # This shell variable is my proudest work .. or something. --bje set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ; (old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old) || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ; dummy=$tmpdir/dummy ; files="$dummy.c $dummy.o $dummy.rel $dummy" ; trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $files ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; unset files' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. eval $set_cc_for_build cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null if test "$?" = 0 ; then case `$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; 2-1307) UNAME_MACHINE="alphaev68" ;; 3-1307) UNAME_MACHINE="alphaev7" ;; esac fi rm -f $dummy.s $dummy && rmdir $tmpdir echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 rm -f $dummy.c $dummy && rmdir $tmpdir echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 rm -f $dummy.c $dummy && rmdir $tmpdir echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy && rmdir $tmpdir fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 rm -f $dummy.c $dummy && rmdir $tmpdir echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` rm -f $dummy.c && rmdir $tmpdir echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:3*) echo i586-pc-interix3 exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` rm -f $dummy.c && rmdir $tmpdir test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` rm -f $dummy.c && rmdir $tmpdir test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` rm -f $dummy.c && rmdir $tmpdir test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 rm -f $dummy.c $dummy && rmdir $tmpdir # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: bvi-1.3.2/config.h.in0100664000567000056700000000407207625244646012121 0ustar bgbg/* config.h.in. Generated automatically from configure.in by autoheader. */ /***** begin user configuration section *****/ #undef HAVE_NCURSES_H #undef HAVE_CURSES_H #undef NO_SYSERRL #undef NEED_PUTC_CHAR #undef HAVE_NCURSES_TERM_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have the header file. */ #undef HAVE_NCURSES_TERM_H /* Define if you have the header file. */ #undef HAVE_STDINT_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the header file. */ #undef HAVE_TERMCAP_H /* Define if you have the header file. */ #undef HAVE_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_TERMIO_H /* Define if you have the header file. */ #undef HAVE_TERM_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of a `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to `int' if does not define. */ #undef off_t /* Define to `unsigned int' if does not define. */ #undef size_t bvi-1.3.2/config.sub0100775000567000056700000007170407572124102012050 0ustar bgbg#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002 Free Software Foundation, Inc. timestamp='2002-11-30' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39 | mipstx39el \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3d) basic_machine=alpha-cray os=-unicos ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic4x | c4x*) basic_machine=tic4x-unknown os=-coff ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: bvi-1.3.2/configure0100755000567000056700000037736507625244252012016 0ustar bgbg#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by Autoconf 2.52. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} ac_unique_file="bvi.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue cd $ac_subdir # A "../" for each directory in /$ac_subdir. ac_dots=`echo $ac_subdir | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case $srcdir in .) # No --srcdir option. We are building in place. ac_sub_srcdir=$srcdir ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir=$srcdir/$ac_subdir ;; *) # Relative path. ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; esac # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure.gnu; then echo $SHELL $ac_sub_srcdir/configure.gnu --help=recursive elif test -f $ac_sub_srcdir/configure; then echo $SHELL $ac_sub_srcdir/configure --help=recursive elif test -f $ac_sub_srcdir/configure.ac || test -f $ac_sub_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\EOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 </dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` PATH = $PATH _ASUNAME } >&5 cat >&5 <\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:864: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:875: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:883: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:899: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:903: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:909: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:911: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:913: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:932: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:934: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if { (echo "$as_me:954: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? echo "$as_me:957: \$? = $ac_status" >&5 (exit $ac_status); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:985: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:995: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:999: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:1008: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:1012: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1017: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:1024: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:1033: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1038: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host_os" in sunos4*) echo "$as_me:1047: result: \"using /usr/5bin/cc\"" >&5 echo "${ECHO_T}\"using /usr/5bin/cc\"" >&6 CC="/usr/5bin/cc" ac_objext="o" ;; *) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:1061: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:1076: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1084: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1087: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:1096: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:1111: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1119: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1122: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:1135: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:1150: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1158: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1161: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1170: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="cc" echo "$as_me:1185: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1193: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1196: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1209: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:1229: found $ac_dir/$ac_word" >&5 break done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1251: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1254: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:1265: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:1280: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1288: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1291: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:1304: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:1319: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1327: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1330: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:1342: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:1347:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:1350: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:1353: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1355: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:1358: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1360: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:1363: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line 1367 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:1383: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:1386: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:1389: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1412: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:1418: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1423: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:1429: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1432: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:1439: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:1447: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1454: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:1456: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:1459: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 if { (eval echo "$as_me:1461: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:1464: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:1480: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:1486: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:1492: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1498 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:1510: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1513: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1525: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:1532: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:1536: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1542 "configure" #include "confdefs.h" int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1557: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1560: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1563: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1566: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:1578: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:1584: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1590 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1602: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1605: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1608: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1611: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:1621: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1648: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1651: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1654: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1657: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line 1669 "configure" #include "confdefs.h" #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1682: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1685: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1688: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1691: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 1701 "configure" #include "confdefs.h" $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1713: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1716: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1719: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1722: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; esac case "$host_os" in solaris*) CPPFLAGS="${CPPFLAGS} -D_MSE_INT_H" cat >>confdefs.h <<\EOF #define NEED_PUTC_CHAR 1 EOF ;; hpux9*) DEFS=${DEFS-"-DMINICURSES"} ;; esac # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:1776: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:1825: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:1841: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 1862 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:1867: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1873: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 1896 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:1900: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1906: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:1943: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 1953 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:1958: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1964: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 1987 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:1991: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1997: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:2025: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:2036: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2042 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:2050: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2056: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 2078 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 2096 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 2117 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:2143: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2146: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:2148: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2151: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:2164: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:2180: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2186 "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2192: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2195: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2198: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2201: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2211: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2227 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2242: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2245: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2248: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2251: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2261: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:2264: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 2273 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (int)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2285: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2288: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2291: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2294: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2299 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2311: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2314: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2317: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2320: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2336 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (int)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2348: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2351: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2354: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2357: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 2373 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2385: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2388: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2391: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2394: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_int=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:2407: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 2412 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) exit (1); fprintf (f, "%d", (sizeof (int))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:2428: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2431: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:2433: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2436: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:2452: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2464 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2479: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2482: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2485: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2488: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2498: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:2501: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 2510 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (long)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2522: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2525: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2528: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2531: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2536 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2548: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2551: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2554: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2557: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2573 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (long)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2585: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2588: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2591: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2594: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 2610 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2622: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2625: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2628: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2631: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_long=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:2644: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 2649 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) exit (1); fprintf (f, "%d", (sizeof (long))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:2665: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2668: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:2670: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2673: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:2689: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking for void *... $ECHO_C" >&6 if test "${ac_cv_type_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2701 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((void * *) 0) return 0; if (sizeof (void *)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2716: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2719: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2722: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2725: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_void_p=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_void_p=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2735: result: $ac_cv_type_void_p" >&5 echo "${ECHO_T}$ac_cv_type_void_p" >&6 echo "$as_me:2738: checking size of void *" >&5 echo $ECHO_N "checking size of void *... $ECHO_C" >&6 if test "${ac_cv_sizeof_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_void_p" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 2747 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (void *)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2759: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2762: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2765: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2768: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2773 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (void *)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2785: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2788: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2791: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2794: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 2810 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (void *)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2822: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2825: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2828: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2831: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 2847 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (void *)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2859: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2862: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2865: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2868: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_void_p=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:2881: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 2886 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) exit (1); fprintf (f, "%d", (sizeof (void *))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:2902: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2905: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:2907: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2910: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_void_p=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_void_p=0 fi fi echo "$as_me:2926: result: $ac_cv_sizeof_void_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2938 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2953: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2956: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2959: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2962: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2972: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2990 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3005: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3008: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3011: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3014: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:3024: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3042 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:3050: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:3056: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 3078 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 3096 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 3117 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:3143: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3146: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:3148: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3151: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:3164: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_header in fcntl.h termcap.h termio.h termios.h unistd.h term.h ncurses/term.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:3177: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3183 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:3187: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:3193: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:3212: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for ncurses.h... $ECHO_C" >&6 if test "${ac_cv_header_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3242 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:3246: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:3252: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_ncurses_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_ncurses_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:3271: result: $ac_cv_header_ncurses_h" >&5 echo "${ECHO_T}$ac_cv_header_ncurses_h" >&6 if test $ac_cv_header_ncurses_h = yes; then echo "$as_me:3274: checking for initscr in -lncurses" >&5 echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6 if test "${ac_cv_lib_ncurses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 3282 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:3301: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3304: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:3307: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3310: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ncurses_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_ncurses_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:3321: result: $ac_cv_lib_ncurses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6 if test $ac_cv_lib_ncurses_initscr = yes; then cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF LIBS="${LIBS} -lncurses" else echo "$as_me:3329: checking for initscr in -lcurses" >&5 echo $ECHO_N "checking for initscr in -lcurses... $ECHO_C" >&6 if test "${ac_cv_lib_curses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 3337 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:3356: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3359: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:3362: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3365: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_curses_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_curses_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:3376: result: $ac_cv_lib_curses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_curses_initscr" >&6 if test $ac_cv_lib_curses_initscr = yes; then cat >>confdefs.h <<\EOF #define HAVE_CURSES_H 1 EOF LIBS="${LIBS} -lcurses" else { { echo "$as_me:3384: error: bvi requires the curses library" >&5 echo "$as_me: error: bvi requires the curses library" >&2;} { (exit 1); exit 1; }; } fi fi else echo "$as_me:3392: checking for curses.h" >&5 echo $ECHO_N "checking for curses.h... $ECHO_C" >&6 if test "${ac_cv_header_curses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3398 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:3402: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:3408: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_curses_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_curses_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:3427: result: $ac_cv_header_curses_h" >&5 echo "${ECHO_T}$ac_cv_header_curses_h" >&6 if test $ac_cv_header_curses_h = yes; then echo "$as_me:3430: checking for initscr in -lcurses" >&5 echo $ECHO_N "checking for initscr in -lcurses... $ECHO_C" >&6 if test "${ac_cv_lib_curses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 3438 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:3457: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3460: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:3463: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3466: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_curses_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_curses_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:3477: result: $ac_cv_lib_curses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_curses_initscr" >&6 if test $ac_cv_lib_curses_initscr = yes; then cat >>confdefs.h <<\EOF #define HAVE_CURSES_H 1 EOF LIBS="${LIBS} -lcurses" else { { echo "$as_me:3485: error: bvi requires the curses library" >&5 echo "$as_me: error: bvi requires the curses library" >&2;} { (exit 1); exit 1; }; } fi else { { echo "$as_me:3491: error: bvi requires the curses library" >&5 echo "$as_me: error: bvi requires the curses library" >&2;} { (exit 1); exit 1; }; } fi fi for ac_func in strdup strtol strerror memmove do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:3501: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3507 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:3538: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3541: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:3544: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3547: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:3557: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:3628: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:3720: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated automatically by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:3893: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:3912: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## This file was extended by $as_me 2.52, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > $ac_cs_invocation on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>$CONFIG_STATUS <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:3949: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CPP@,$CPP,;t t CEOF EOF cat >>$CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" EOF cat >>$CONFIG_STATUS <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi case $srcdir in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_dots$srcdir$ac_dir_suffix ac_top_srcdir=$ac_dots$srcdir ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:4163: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:4181: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:4194: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:4255: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:4266: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:4279: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in EOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\EOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end EOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\EOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, EOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # egrep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\EOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if cmp -s $ac_file $tmp/config.h 2>/dev/null; then { echo "$as_me:4396: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done EOF cat >>$CONFIG_STATUS <<\EOF { (exit 0); exit 0; } EOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL $CONFIG_STATUS || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi bvi-1.3.2/configure.in0100644000567000056700000000370007625237734012402 0ustar bgbgdnl Process this file with autoconf to produce a configure script. AC_INIT AC_CONFIG_SRCDIR([bvi.c]) AC_CONFIG_HEADER(config.h) AC_CANONICAL_HOST dnl On SunOS4 systems you have to use the /usr/5bin/cc compiler dnl to get the SYSV curses library: case "$host_os" in sunos4*) AC_MSG_RESULT("using /usr/5bin/cc") CC="/usr/5bin/cc" ac_objext="o" ;; *) AC_PROG_CC ;; esac dnl Some curses specials dnl Solaris needs for tputs 'putc(char)' instead of 'putc(int)' case "$host_os" in solaris*) CPPFLAGS="${CPPFLAGS} -D_MSE_INT_H" AC_DEFINE(NEED_PUTC_CHAR) ;; hpux9*) DEFS=${DEFS-"-DMINICURSES"} ;; esac dnl Checks for programs. AC_PROG_INSTALL dnl Check for typedefs AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(void *) AC_CHECK_TYPE(size_t, unsigned int) AC_CHECK_TYPE(off_t, int) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h termcap.h termio.h termios.h unistd.h term.h ncurses/term.h) dnl Check if ncurses requested _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" AC_ARG_WITH(ncurses, [ --with-ncurses[=DIR] path to ncurses],[ if test "$withval" != "no"; then CPPFLAGS="${CPPFLAGS} -I$withval/include -I$withval/include/ncurses" LDFLAGS="${LDFLAGS} -L$withval/lib" fi ]) AC_CHECK_HEADER(ncurses.h, AC_CHECK_LIB(ncurses, initscr, AC_DEFINE(HAVE_NCURSES_H) LIBS="${LIBS} -lncurses", AC_CHECK_LIB(curses, initscr, AC_DEFINE(HAVE_CURSES_H) LIBS="${LIBS} -lcurses", AC_MSG_ERROR([bvi requires the curses library]))), AC_CHECK_HEADER(curses.h, AC_CHECK_LIB(curses, initscr, AC_DEFINE(HAVE_CURSES_H) LIBS="${LIBS} -lcurses", AC_MSG_ERROR([bvi requires the curses library])), AC_MSG_ERROR([bvi requires the curses library]))) dnl Checks for typedefs, structures, and compiler characteristics. dnl AC_TYPE_SIZE_T dnl Checks for library functions. dnl AC_TYPE_SIGNAL AC_CHECK_FUNCS(strdup strtol strerror memmove) AC_PROG_INSTALL AC_CONFIG_FILES([Makefile]) AC_OUTPUT bvi-1.3.2/configure.scan0100644000567000056700000000114007412100442012667 0ustar bgbgdnl Process this file with autoconf to produce a configure script. AC_INIT(bvi.c) dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET dnl Checks for libraries. dnl Replace `main' with a function in -lcurses: AC_CHECK_LIB(curses, main) dnl Replace `main' with a function in -lncurses: AC_CHECK_LIB(ncurses, main) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h unistd.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIZE_T dnl Checks for library functions. AC_TYPE_SIGNAL AC_CHECK_FUNCS(strdup strtol) AC_OUTPUT(Makefile) bvi-1.3.2/COPYING0100644000567000056700000004307607412100442011111 0ustar bgbg GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. bvi-1.3.2/CREDITS0100644000567000056700000000171010012764656011100 0ustar bgbgPatches: Guido sys_errlist Christian "naddy" Weisgerber {Free,Open}BSD Gunnar Larisch ^ZZ bug Peter J. Holzer setlocale Albert Chin-A-Young Makefile.in Ralf AIX fixes Claudio Nieder Makefile Nico Schmidt r-bug fix Steve Waltner Mac OS X support Andre Wobst AIX fixes SimoN bmore: subshell support fixes, DJGPP support Packages: Christian "naddy" Weisgerber Source RPM Christian Kurz Debian package Stijn de Bekker Debian package Troy Engel i386 RPM package Thomas Steudten RH alpha and x86 RPM package Doc: Sven Guckes Ben bvi-1.3.2/dosconf.h0100644000567000056700000000250107475233432011665 0ustar bgbg/* dosconf.h * * 1996-02-28 V 1.0.0 * 1999-01-21 V 1.1.0 * 1999-03-17 V 1.1.1 * 1999-07-01 V 1.2.0 beta * 1999-08-27 V 1.2.0 final * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2002 by Gerhard Buergmann * Gerhard.Buergmann@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you have the memmove function. */ #define HAVE_MEMMOVE 1 /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define if you have the strtol function. */ #define HAVE_STRTOL 1 /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ #if __TURBOC__ > 0x0400 # define HAVE_LOCALE_H 1 #endif bvi-1.3.2/doscur.h0100644000567000056700000001117507475233446011545 0ustar bgbg/* DOSCUR.H - CURSES.H for TURBO C * * Copyright 1996-2002 by Gerhard Buergmann * Gerhard.Buergmann@puon.at * * 1996-02-28 V 1.0.0 * 1998-04-12 V 1.0.1 * 1999-01-14 V 1.1.1 * 1999-07-01 V 1.2.0 * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #include #include #define TRUE 1 #define FALSE 0 #define ESC 27 #define KEY_F0 0x3A00 #define KEY_F(n) (KEY_F0+(n<<8)) #define KEY_DOWN 0x5000 #define KEY_UP 0x4800 #define KEY_LEFT 0x4B00 #define KEY_RIGHT 0x4D00 #define KEY_NPAGE 0x5100 #define KEY_PPAGE 0x4900 #define KEY_RETURN 0x0d #define KEY_ENTER 0x0a #define KEY_BACKSPACE 0x0E08 #define KEY_HOME 0x4700 #define KEY_LL 0x4f00 /* HOME DOWN, End */ #define KEY_DC 0x5300 #define KEY_IC 0x5200 #define A_NORMAL 3 #define A_STANDOUT 8 #define A_BOLD 8 #define A_REVERSE 127 #define A_BLINK 128 #define A_CHARTEXT 0x00ff #define A_ATTRIBUTES 0xff00 #define chtype unsigned int #define WINDOW text_info extern struct WINDOW scr; extern int stdscr; extern int COLS; extern int LINES; extern int ECHO; extern int NODEL; void attrset(int); #define initscr() clrscr();window(1,1,COLS,LINES);gettextinfo(&scr) #define newwin(h,b,y,x) window(x+1,y+1,x+b+1,y+h+1);gettextinfo(&scr) #define erasechar() KEY_ERASE #define beep() putch(7) #define flash() putch(7) #define wclrtoeol(w) clreol() #define clrtoeol() clreol() #define werase(w) window(scr.winleft,scr.wintop,scr.winright,scr.winbottom) #define erase() clrscr() #define wclear(w) werase(w) #define clear() clrscr() /* #define wattrset(w,a) textattr(a) #define attrset(a) textattr(a) */ #define standout() highvideo() #define standend() normvideo() #define wmove(w,y,x) gotoxy(x+1,y+1) #define move(y,x) gotoxy(x+1,y+1) #define mvwaddch(w,y,x,c) gotoxy(x+1,y+1);putch(c) #define mvaddch(y,x,c) gotoxy(x+1,y+1);putch(c) #define waddch(w,c) putch(c) #define addch(c) putch(c) #define mvwaddstr(w,y,x,s) gotoxy(x+1,y+1);cputs(s) #define mvaddstr(y,x,s) gotoxy(x+1,y+1);cputs(s) #define waddstr(s) cputs(s) #define addstr(s) cputs(s) #define mvwprintw(w,y,x,s) gotoxy(x+1,y+1);cprintf(s) #define mvprintw(y,x,s,a) gotoxy(x+1,y+1);cprintf(s,a) #define wprintw(w,s) cprintf(s) #define printw cprintf #define getyx(w,y,x) x=wherex()-1;y=wherey()-1 #define getbegyx(w,y,x) x=scr.winleft;y=scr.wintop; #define getmaxyx(w,y,x) x=(scr.winright)-(scr.winleft);y=(scr.winbottom)-(scr.wintop)+1 #define winsertln() insline() #define insertln() insline() #define wdeleteln(w) delline() #define deleteln() delline() #define mvwgetch(w,y,x) gotoxy(x+1,y+1);ugetch() #define mvgetch(y,x) gotoxy(x+1,y+1);ugetch() #define wgetch(w) ugetch() #define mvwgetstr(w,y,x,s) gotoxy(x+1,y+1);gets(s) #define mvgetstr(y,x,s) gotoxy(x+1,y+1);gets(s) #define wgetstr(w,s) gets(s) /* #define getstr(s) gets(s) */ #define flushinp() fflush(stdin) #define mvwscanw(w,y,x,s) gotoxy(x+1,y+1);cscanf(s) #define mvscanw(y,x,s) gotoxy(x+1,y+1);cscanf(s) #define wscanw(w,s) wscanw(s) #define scanw cscanf #define mvinsch(y,x,c) gotoxy(x+1,y+1);insch(c) #define nodelay(w,b) NODEL=b #define echo() ECHO=TRUE #define noecho() ECHO=FALSE #define nl() #define nonl() #define keypad(a,b) #define refresh() #define wrefresh(w) #define cbreak() #define endwin() #define raw() #define noraw() #define notimeout(w,t) #define idlok(w,b) #define scrollok(a,b) #define doupdate() #define savetty() #define resetty() #define ERR (-1) bvi-1.3.2/dosio.c0100644000567000056700000002246607475233270011356 0ustar bgbg/* DOSIO.C - file I/O and alloc subroutines for MSDOS - BVI * * 1996-02-28 V 1.0.0 * 1998-04-12 V 1.0.1 * 1999-01-14 V 1.1.0 * 1999-04-27 V 1.1.1 * 1999-07-02 V 1.2.0 beta * 1999-09-01 V 1.2.0 final * 2000-05-02 V 1.3.0 alpha * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2002 by Gerhard Buergmann * Gerhard.Buergmann@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include #include #include #include #include #include #include "bvi.h" #include "set.h" char *terminal = "ansi"; extern maxy; struct WINDOW scr; int stdscr = 0; int COLS = 80; int LINES = 25; int ECHO = TRUE; int NODEL = FALSE; static struct stat buf; int filemode; int inch(void); void attrset(int attr) { switch(attr) { case A_NORMAL: textcolor(P(P_CO) & 0x07); textbackground((P(P_CO) & 0xf0) >> 4); break; case A_BOLD: textcolor((P(P_CO) & 0x07) | 0x08); textbackground((P(P_CO) & 0xf0) >> 4); break; case A_REVERSE: textcolor((P(P_CO) & 0xf0) >> 4); textbackground(P(P_CO) & 0x0f); break; case A_BLINK: textcolor((P(P_CO) & 0xf0) >> 4); textbackground(P(P_CO) & 0x0f); break; } } int getch() { int x; if (NODEL) if (!kbhit()) return(ERR); x = bioskey(0); if ((x & 0xff) == 0) return(x); else { x &= 0xff; if (ECHO) putch(x); return(x); } } void delch() { int x, y; x = wherex(); y = wherey(); movetext(x + 1, y, COLS - x, y, x, y); gotoxy(COLS, y); putch(' '); gotoxy(x, y); } void insch(int c) { char line[80]; int x, y; x = wherex(); y = wherey(); gettext(x, y, COLS - x, y, line); puttext(x + 1, y, COLS - x + 1, y, line); putch(c); } int inch() { return peek(0xb800, (wherex() - 1) + (wherey() - 1) * COLS); } int mvinch(int y, int x) { gotoxy(x + 1, y + 1); return inch(); } /*********** Save the patched file ********************/ int save(char *fname, PTR start, PTR end, int flags) { int fd; char string[255]; char *newstr; off_t written; off_t filesize; unsigned n, to_write; if (!fname) { emsg("No file|No current filename"); return 0; } if (stat(fname, &buf) == -1) { newstr = "[New file] "; } else { if (S_ISDIR(buf.st_mode)) { sprintf(string, "\"%s\" Is a directory", fname); msg(string); return 0; } newstr = ""; } if (filemode == PARTIAL) flags = O_RDWR; if ((fd = open(fname, flags, 0666)) < 0) { sysemsg(fname); return 0; } if (filemode == PARTIAL) { if (block_read) { filesize = block_read; sprintf(string, "\"%s\" range %lu-%lu", fname, (unsigned long)block_begin, (unsigned long)(block_begin - 1 + filesize)); if (lseek(fd, block_begin, SEEK_SET) < 0) { sysemsg(fname); return 0; } } else { msg("Null range"); return 0; } } else { filesize = end - start + 1L; sprintf(string, "\"%s\" %s%lu@bytes", fname, newstr, (long)filesize); } written = 0; do { to_write = (filesize - written) > 0xfffe ? 0xfffe : (filesize - written); if ((n = write(fd, start + written, to_write)) == 0xffff) { sysemsg(fname); close(fd); return(0L); } written += (off_t)n; } while (written < filesize); close(fd); edits = 0; msg(string); return 1; } off_t load(char *fname) { int fd = -1; char string[MAXCMD]; unsigned chunk, n; buf.st_size = filesize = 0L; if (fname != NULL) { if (stat(fname, &buf) == -1) { filemode = NEW; } else if (S_ISDIR(buf.st_mode)) { filemode = DIRECTORY; } else if (S_ISREG(buf.st_mode)) { if ((fd = open(fname, O_RDONLY|O_BINARY)) > 0) { filemode = REGULAR; if (access(fname, 2)) { P(P_RO) = TRUE; params[P_RO].flags |= P_CHANGED; } } else { sysemsg(fname); filemode = ERROR; } } } else { filemode = NEW; } if (mem != NULL) farfree(mem); if (block_flag) { memsize = block_size + 1000; } else if (filemode == REGULAR) { memsize = buf.st_size + 100; } else { memsize = 1000; } if (farcoreleft() < memsize) { move(maxy, 0); endwin(); printf("\n\nOut of memory\n"); exit(0); } mem = (char huge *)farmalloc(memsize); clear_marks(); if (block_flag && (filemode == REGULAR)) { if (lseek(fd, block_begin, SEEK_SET) < 0) { sysemsg(fname); filemode = ERROR; } else { chunk = block_size > 0xfffe ? 0xfffe : block_size; do { if ((n = read(fd, mem + filesize, chunk)) == 0xffff) { sysemsg(fname); filemode = ERROR; break; } filesize += (off_t)n; } while (filesize < buf.st_size); if ((filesize == 0) { sprintf(string, "\"%s\" No such range: %lu-%lu", fname, (unsigned long)block_begin, (unsigned long)(block_end)); } else { sprintf(string, "\"%s\" range %lu-%lu", fname, (unsigned long)block_begin, (unsigned long)(block_begin + filesize - 1)); } filemode = PARTIAL; block_read = filesize; msg(string); P(P_OF) = block_begin; params[P_OF].flags |= P_CHANGED; } } else if (filemode == REGULAR) { chunk = buf.st_size > 0xfffe ? 0xfffe : buf.st_size; do { if ((n = read(fd, mem + filesize, chunk)) == 0xffff) { sysemsg(fname); filemode = ERROR; break; } filesize += (off_t)n; } while (filesize < buf.st_size); } if (fd > 0) close(fd); if (filemode != REGULAR) { filesize = 0L; } if (fname != NULL) { switch (filemode) { case NEW: sprintf(string, "\"%s\" [New File]", fname); break; case REGULAR: sprintf(string, "\"%s\" %s%lu bytes", fname, P(P_RO) ? "[Read only] " : "", (long)filesize); break; case DIRECTORY: sprintf(string, "\"%s\" Directory", fname); break; } if (filemode != ERROR) msg(string); } pagepos = mem; maxpos = (PTR)(mem + filesize); loc = HEX; x = AnzAdd; y = 0; repaint(); return(filesize); } int addfile(char *fname) { int fd; off_t oldsize; unsigned chunk, n; if (stat(fname, &buf)) { sysemsg(fname); return 1; } if ((fd = open(fname, O_RDONLY)) == -1) { sysemsg(fname); return 1; } oldsize = filesize; if (enlarge(buf.st_size)) return 1; chunk = buf.st_size > 0xfffe ? 0xfffe : buf.st_size; do { if ((n = read(fd, mem + filesize, chunk)) == 0xffff) { sysemsg(fname); filemode = ERROR; return 1; } filesize += (off_t)n; } while (filesize < buf.st_size); maxpos = mem + filesize; close(fd); setpage(mem + oldsize); return 0; } void bvi_init(char *dir) { char *poi; char *initstr; char rcpath[255]; shell = getenv("COMSPEC"); if (shell == NULL || *shell == '\0') shell = "COMMAND.COM"; strcpy(rcpath, dir); poi = strrchr(rcpath, '\\'); *poi = '\0'; strcat(rcpath, "\\BVI.RC"); if ((initstr = getenv("BVIINIT")) != NULL) { docmdline(initstr); } read_rc("BVI.RC"); read_rc(rcpath); } int enlarge(off_t add) { PTR newmem; off_t savecur, savepag, savemax, saveundo; savecur = curpos - mem; savepag = pagepos - mem; savemax = maxpos - mem; saveundo = undo_start - mem; newmem = (PTR)farrealloc(mem, memsize + add); if (newmem == NULL) { emsg("Out of memory"); return 1; } mem = newmem; memsize += add; curpos = mem + savecur; pagepos = mem + savepag; maxpos = mem + savemax; undo_start = mem + saveundo; current = curpos + 1; return 0; } void do_shell() { system(""); } off_t alloc_buf(off_t n, char **buffer) { if ((*buffer = (char *)farrealloc(*buffer, n)) == NULL) { emsg("No buffer space available"); return 0L; } return n; } void d_memmove(PTR dest, PTR src, off_t n) { unsigned len; long chunk; PTR source; PTR destin; chunk = n; if (dest < src) { /* copy forward */ source = src; destin = dest; while (chunk > 0L) { len = chunk > 0x7ffe ? 0x7ffe : chunk; movmem(source, destin, len); chunk -= len; source += len; destin += len; } } else { /* copy backward */ source = src + n; destin = dest + n; while (chunk > 0L) { len = chunk > 0x7ffe ? 0x7ffe : chunk; chunk -= len; source -= len; destin -= len; movmem(source, destin, len); } } } void d_memcpy(PTR dest, PTR src, off_t n) { unsigned len; long chunk; PTR source; PTR destin; source = src; destin = dest; chunk = n; while (chunk > 0L) { len = chunk > 0x7ffe ? 0x7ffe : chunk; movmem(source, destin, len); chunk -= len; source += len; destin += len; } } bvi-1.3.2/edit.c0100644000567000056700000004062007701240634011150 0ustar bgbg/* edit - the edit commands * * NOTE: Edit this file with tabstop=4 ! * * 1999-04-19 V 1.1.2 * 1999-07-02 V 1.2.0 beta * 1999-10-30 V 1.2.0 final * 2000-05-14 V 1.3.0 alpha * 2000-07-15 V 1.3.0 final * 2001-12-07 V 1.3.1 * 2003-07-04 V 1.3.2 * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include "bvi.h" #include "set.h" extern int precount; char contrd[][4] = {"NUL", " ^A", " ^B", " ^C", " ^D", " ^E", " ^F", "BEL", " BS", "TAB", " NL", "HOM", "CLR", " CR", " ^N", " ^O", " ^P", " ^Q", " ^R", " ^S", " ^T", " ^U", " ^V", " ^W", " ^X", " ^Y", " ^Z", "ESC", " FS", " GS", " RS", " US", "DEL" }; char contru[][4] = {"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", " BS", " HT", " NL", " VT", " NP", " CR", " SO", " SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", " EM", "SUB", "ESC", " FS", " GS", " RS", " US", "DEL" }; char tmpbuf[10]; char linbuf[256]; static char getcbuff[BUFFER]; static char *getcnext = NULL; /* mode: ('A') append * ('R') replace one or more different characters * ('r') replace 1 character * ('i') insert characters * ('a') insert after cursor * a precount can be used * * for insert and append we misuse the undo buffer for the inserted * characters (for "." command) */ off_t edit(mode) int mode; { int ch, ch1; size_t len; off_t count = 0L; off_t buffer = BUFFER; off_t psize; if (!filesize && mode == 'i') { mode = 'A'; } if (mode != 'A' && mode != 'a') { if (current - mem >= filesize) { beep(); return 0L; } } if (precount < 1) precount = 1; len = strlen(rep_buf); if (mode == 'r' && current + precount > maxpos) { beep(); rep_buf[len] = '\0'; return 0L; } if (alloc_buf(buffer, &undo_buf) == 0L) { rep_buf[len] = '\0'; return 0L; } switch(mode) { case 'A': edits = U_APPEND; break; case 'R': edits = U_EDIT; smsg("REPLACE MODE"); break; case 'r': edits = U_EDIT; smsg("REPLACE 1 CHAR"); break; case 'a': case 'i': edits = U_INSERT; smsg("INSERT MODE"); break; } undo_start = current; while((ch = vgetc()) != ESC) { ch &= 0xff; rep_buf[len++] = ch; if (ch == '\t') { toggle(); setcur(); continue; } if (ch == KEY_BACKSPACE || ch == BVICTRL('H')) { if (count > 0) { len--; count--; if (mode == 'A' || mode == 'a' || mode == 'i') { filesize--; maxpos--; } current--; cur_back(); setcur(); } else beep(); continue; } if (loc == HEX) { if (isxdigit(ch)) { mvaddch(y, x + 1, ' '); mvaddch(y, x, ch); do { ch1 = vgetc() & 0xff; if (ch1 == ESC) { mvaddch(y, x, ' '); current--; cur_back(); goto escape; } if (!isxdigit(ch1)) { beep(); ch1 = -1; } } while (ch1 == -1); rep_buf[len++] = ch1; mvaddch(y, x + 1, ch1); sprintf(tmpbuf, "%c%c", ch, ch1); sscanf(tmpbuf, "%2x", &ch); } else { beep(); len--; goto wrong; } } else { /*** ASCII - Bereich ***/ if (isprint(ch)) { mvaddch(y, x, ch); } else { beep(); goto wrong; } } curpos = current++; if (mode == 'i' || mode == 'a') { memmove(current, curpos, maxpos - curpos); } if (mode == 'A' || mode == 'i' || mode == 'a') { maxpos++; filesize++; /* NEU undo_buf[count++] = ch; */ count++; } else { undo_buf[count++] = *curpos; } if (count == buffer) { buffer += BUFFER; if (alloc_buf(buffer, &undo_buf) == 0L) { rep_buf[len] = '\0'; return count; } } *curpos = (char)ch; cur_forw(0); statpos(); if (mode == 'i' || mode == 'a') { repaint(); } else { lineout(); } setcur(); if (filesize > memsize - 2L) { if (enlarge(100L)) break; } if ((mode != 'A' && mode != 'a') && curpos == maxpos - 1) break; if (mode == 'r') { break; } wrong: continue; } rep_buf[len++] = ESC; rep_buf[len] = '\0'; if (!count) goto escape; if (precount > 1) { switch (mode) { case 'i': case 'a': case 'A': psize = count * (precount - 1); if (filesize + psize > memsize - 2L) { if (enlarge(psize + 100L)) return count; } if (psize + count > buffer) { if (alloc_buf(psize + count, &undo_buf) == 0L) return count; } if (mode == 'i' || mode == 'a') { memmove(current + psize, current, maxpos - curpos); } /* NEU undo_pos = undo_buf + count - 1L; */ while (--precount) { /* NEU memcpy(undo_pos + 1L, undo_pos - count + 1L, count); undo_pos += count; */ memcpy(curpos + 1L, curpos - count + 1L, count); curpos += count; } filesize += psize; count += psize; maxpos += psize; undo_count += psize; current = curpos + 1L; setpage(current); repaint(); break; case 'R': if (current + count * (precount - 1) > maxpos) break; psize = count; while (--precount) { memcpy(undo_buf + psize, curpos + 1L, count); psize += count; memcpy(curpos + 1L, curpos - count + 1L, count); curpos += count; } count = psize; setpage(++curpos); repaint(); break; case 'r': while (--precount) { undo_buf[count++] = *(++curpos); *curpos = (char)ch; cur_forw(0); statpos(); lineout(); } break; } } cur_back(); escape: setcur(); smsg(""); return(count); } /* Do the f, F, t ot T command * If flag == 1 save the character in rep_buf * else setpage() */ PTR do_ft(ch, flag) int ch, flag; { static int chi; static int chp = 1; int dir; size_t n; PTR ptr; switch (ch) { case 1: beep(); return NULL; /* no previous command */ case -1: if (chp == 'f' || chp == 't') dir = BACKWARD; else dir = FORWARD; break; /* same again */ case 0: if (chp == 'f' || chp == 't') dir = FORWARD; else dir = BACKWARD; break; /* same again */ default: chp = ch; if (chp == 'f' || chp == 't') dir = FORWARD; else dir = BACKWARD; chi = vgetc(); if (flag) { n = strlen(rep_buf); rep_buf[n++] = chi; rep_buf[n] = '\0'; } } ptr = current; do { if (dir == FORWARD) { do { ptr++; if (ptr > maxpos) break; } while (*ptr != chi); if (ptr > maxpos) break; } else { do { ptr--; if (ptr < mem) break; } while (*ptr != chi); if (ptr < mem) break; } } while (--precount > 0); if (*ptr == chi) { if (loc == HEX) toggle(); if (chp == 't') ptr--; if (chp == 'T') ptr++; if (!flag) { setpage(ptr); } return(ptr); } beep(); return NULL; } void do_z(mode) int mode; { switch (mode) { case '.': while (y != maxy / 2) { if (y > maxy / 2) { pagepos += Anzahl; y--; } else { if (pagepos == mem) break; pagepos -= Anzahl; y++; } } break; case '-': while (y < maxy - 1) { if (pagepos == mem) break; pagepos -= Anzahl; y++; } break; case '\0': case '\n': case '\r': while (y > 0) { y--; pagepos += Anzahl; } break; default : beep(); break; } repaint(); } void scrolldown(lns) int lns; { while (lns--) { if (maxpos >= (pagepos + Anzahl)) pagepos += Anzahl; else { beep(); lns = 0; } repaint(); refresh(); } } void scrollup(lns) int lns; { while (lns--) { if (mem <= (PTR)(pagepos - Anzahl)) pagepos -= Anzahl; else { beep(); lns = 0; } repaint(); refresh(); } } int xpos() { if (loc == HEX) return((x - AnzAdd) / 3); else return(x - AnzAdd - Anzahl3); } void toggle() { if (loc == HEX) { x = xpos() + AnzAdd + Anzahl3; loc = ASCII; } else { x = xpos() * 3 + AnzAdd; loc = HEX; } } void setcur() { move(y, x); refresh(); } /************* display current position *************/ void statpos() { unsigned char Char1; off_t bytepos; char string[30], str[6]; if (!P(P_MO)) return; bytepos = current - mem; if (bytepos >= filesize) { mvaddstr(maxy, status, " "); return; } Char1 = *(mem + bytepos); if (isprint(Char1)) { sprintf(str, "'%c'", Char1); } else if (Char1 < 32) { if (P(P_US)) strcpy(str, contru[Char1]); else strcpy(str, contrd[Char1]); } else if (Char1 == 127) { if (P(P_US)) strcpy(str, contru[32]); else strcpy(str, contrd[32]); } else strcpy(str, " "); sprintf(string, "%08lX \\%03o 0x%02X %3d %3s", (long)(bytepos + P(P_OF)), Char1, Char1, Char1, str); attrset(A_BOLD); mvaddstr(maxy, status, string); attrset(A_NORMAL); } void printline(mempos, scpos) PTR mempos; int scpos; { int print_pos; unsigned char Zeichen; if (mempos > maxpos) { strcpy(linbuf, "~ "); } else { sprintf(linbuf, addr_form, (long)(mempos - mem + P(P_OF))); *string = '\0'; } for (print_pos = 0; print_pos < Anzahl; print_pos++) { if (mempos + print_pos >= maxpos) { sprintf(tmpbuf, " "); Zeichen = ' '; } else { Zeichen = *(mempos + print_pos); sprintf(tmpbuf, "%02X ", Zeichen); } strcat(linbuf, tmpbuf); if (isprint(Zeichen)) *(string + print_pos) = Zeichen; else *(string + print_pos) = '.'; } *(string + Anzahl) = '\0'; strcat(linbuf, string); mvaddstr(scpos, 0, linbuf); } /* displays a line on screen * at pagepos + line y */ int lineout() { off_t Adresse; Adresse = pagepos - mem + y * Anzahl; printline(mem + Adresse, y); move(y, x); return(0); } void new_screen() { screen = Anzahl * (maxy - 1); clear(); repaint(); } void repaint() /***** redraw screen *********************/ { int save_y; save_y = y; for (y = 0; y < maxy; y++) lineout(); y = save_y; } /******* display an arbitrary address on screen *******/ void setpage(addr) PTR addr; { if ((addr >= pagepos) && ((addr - pagepos) < screen)) { y = (addr - pagepos) / Anzahl; if (loc == HEX) x = AnzAdd + ((addr - pagepos) - y * Anzahl) * 3; else x = AnzAdd + Anzahl3 + ((addr - pagepos) - y * Anzahl); } else { pagepos = (((addr - mem) / Anzahl) * Anzahl + mem) - (Anzahl * (maxy / 2)); if (pagepos < mem) pagepos = mem; y = (addr - pagepos) / Anzahl; if (loc == HEX) x = AnzAdd + ((addr - pagepos) - y * Anzahl) * 3; else x = AnzAdd + Anzahl3 + ((addr - pagepos) - y * Anzahl); repaint(); } } int cur_forw(check) int check; { if (check) { if (current - mem >= filesize) { beep(); return 1; } } if (loc == ASCII) { if (x < AnzAdd - 1 + Anzahl3 + Anzahl) { x++ ; return 0; } else x = AnzAdd + Anzahl3; } else { if (x < 5 + Anzahl3) { x += 3; return 0; } else x = AnzAdd; } statpos(); lineout(); if (y < maxy - 1) { y++; return 0; } else { if (pagepos < (PTR)(mem + filesize)) { pagepos += Anzahl; repaint(); return 0; } else { beep(); return 1; } } } int cur_back() { if (loc == ASCII) { if (x > AnzAdd + Anzahl3) { x-- ; return 0; } else { x = AnzAdd - 1 + Anzahl3 + Anzahl; } } else { if (x > AnzAdd + 2) { x -= 3; return 0; } else { if (current == mem) return 0; x = AnzAdd + Anzahl3 - 3; } } statpos(); lineout(); if (y > 0) { y--; return 0; } else { if (pagepos > mem) { pagepos -= Anzahl; repaint(); return 0; } else { beep(); return 1; } } } void fileinfo(fname) char *fname; { off_t bytepos; char fstatus[64]; if (fname) { sprintf(string, "\"%s\" ", fname); } else { strcpy(string, "No file "); } if (filemode != NEW && filemode != REGULAR) strcat(string, "[Not edited] "); if (P(P_RO)) strcat(string, "[Read only] "); if (edits) strcat(string, "[Modified] "); if (filesize) { bytepos = (pagepos + y * Anzahl + xpos()) - mem + 1L; sprintf(fstatus, "byte %lu of %lu --%lu%%--", (long)bytepos, (long)filesize, (long)(bytepos * 100L / filesize)); strcat(string, fstatus); } else { strcat(string, " 0 bytes"); } msg(string); } /********** END ************/ void quit() { move(maxy, 0); endwin(); printf("\nbvi version %s %s\n", VERSION, copyright); exit(0); } int vgetc() { int nextc; if (getcnext != NULL) { nextc = *getcnext++; if (*getcnext == '\0') { *getcbuff = '\0'; getcnext = NULL; } return(nextc); } return getch(); } void stuffin(s) char *s; { if (s == NULL) { /* clear the stuff buffer */ getcnext = NULL; return; } if (getcnext == NULL) { strcpy(getcbuff, s); getcnext = getcbuff; } else strcat(getcbuff, s); } void do_back(n, start) off_t n; PTR start; { if (start - n < mem) { beep(); return; } if ((undo_count = alloc_buf(n, &undo_buf)) == 0L) return; yanked = alloc_buf(n, &yank_buf); edits = U_BACK; undo_start = start - n; memcpy(undo_buf, start - undo_count, undo_count); memcpy(yank_buf, start - undo_count, undo_count); memmove(start - undo_count, start, maxpos - start); filesize -= undo_count; maxpos -= undo_count; setpage(start - undo_count); repaint(); } int do_delete(n, start) off_t n; PTR start; { if (n + start > maxpos) { beep(); return 1; } if ((undo_count = alloc_buf(n, &undo_buf)) == 0L) return 1; yanked = alloc_buf(n, &yank_buf); edits = U_DELETE; undo_start = start; memcpy(undo_buf, start, undo_count); memcpy(yank_buf, start, undo_count); memmove(start, start + undo_count, maxpos - (start + undo_count)); filesize -= undo_count; maxpos -= undo_count; if (start == maxpos && start > mem) { start--; cur_back(); } setpage(start); repaint(); return 0; } /* * The :insert, :append and :change command */ void do_ins_chg(start, arg, mode) PTR start; char *arg; int mode; { int base; off_t buffer = BUFFER; off_t count = 0L; size_t len; long val; char *tempbuf = NULL; char *poi, *epoi; if ((mode == U_EDIT) && (current - mem >= filesize)) { beep(); return; } len = strlen(arg); if (!strncmp("ascii", arg, len) && CMDLNG(5, 1)) { base = 1; } else if (!strncmp("binary", arg, len) && CMDLNG(6, 1)) { base = 2; } else if (!strncmp("octal", arg, len) && CMDLNG(5, 1)) { base = 8; } else if (!strncmp("decimal", arg, len) && CMDLNG(7, 1)) { base = 10; } else if (!strncmp("hexadecimal", arg, len) && CMDLNG(11, 1)) { base = 16; } else { emsg("No such option"); return; } addch('\n'); if (getcmdstr(cmdstr, 0) == 1) { repaint(); return; } if (alloc_buf(buffer, &tempbuf) == 0L) return; while(strcmp(cmdstr, ".")) { poi = cmdstr; if (base == 1) { /* ASCII */ while (*poi != '\0') { if (*poi == '\\') { switch (*(++poi)) { case 'n': val = '\n'; break; case 'r': val = '\r'; break; case 't': val = '\t'; break; case '0': val = '\0'; break; case '\\': val = '\\'; break; default : val = '\\'; poi--; } poi++; } else { val = *poi++; } *(tempbuf + count++) = val; } } else { while (isspace(cmdstr[strlen(cmdstr) - 1])) cmdstr[strlen(cmdstr) - 1] = '\0'; while (*poi != '\0') { val = strtol(poi, &epoi, base); if (val > 255 || val < 0 || poi == epoi) { repaint(); emsg("Invalid value"); goto mfree; } poi = epoi; *(tempbuf + count++) = val; } } addch('\n'); if (getcmdstr(cmdstr, 0) == 1) { repaint(); goto mfree; } } if (count == 0) { repaint(); goto mfree; } switch (mode) { case U_INSERT: do_put(start, count, tempbuf); break; case U_EDIT: do_over(start, count, tempbuf); break; case U_APPEND: if ((undo_count = alloc_buf(count, &undo_buf)) == 0L) { repaint(); goto mfree; } do_append(count, tempbuf); memcpy(undo_buf, tempbuf, count); repaint(); break; } mfree: #if defined(__MSDOS__) && !defined(DJGPP) farfree(tempbuf); #else free(tempbuf); #endif } void clear_marks() { int n; for (n = 0; n < 26; markbuf[n++] = NULL); undo_count = 0; last_motion = mem; } void do_mark(mark, addr) int mark; PTR addr; { if (mark < 'a' || mark > 'z' || current >= maxpos) return; markbuf[mark - 'a'] = addr; } void movebyte() { emsg("Command disabled@- use ':set memmove' to enable "); } bvi-1.3.2/html/0040775000567000056700000000000010012763573011027 5ustar bgbgbvi-1.3.2/html/bmore_cmd.html0100644000567000056700000001001707432300642013632 0ustar bgbg BVI: Commands

Home

Quick Tutorial

Download

Installation

Command Overview

bmore
Commands
Options
man - Page

Deutsche Beschreibung


bmore
Commands
BVI

Most commands optionally preceded by integer argument k. Defaults in brackets. Star (*) indicates argument becomes new default.

SPACE Display next k lines of bytes current screen size
zDisplay next k lines of bytes current screen size*
RETURN Display next k lines of bytes 1*
d or CTRL D Scroll k lines current scroll size, initially 11*
q or Q or Interrupt Exit from bmore
s Skip forward k lines of bytes 1
f Skip forward k screenfuls of bytes 1
b or CTRL B Skip backwards k screenfuls of bytes 1
' Go to place where previous search started
= Display current byte number
/regular expr Search for kth occurrence of ascii regular expr 1
\regular expr Search for kth occurrence of binary regular expr 1
n Search for kth occurrence of last r.e 1
!cmd or :!cmd Execute cmd in a subshell
v Start up bvi at current position
w Start up bvi reading only a screenful of bytesscreen
CTRL L Redraw screen
:n Go to kth next file1
:p Go to kth previous file1
:f Display current file name and byte position
. Repeat previous command

Back to the topBack to the top


Last update: Fri Jun 30 22:05:32 CEST 2000 by Gerhard Bürgmann
bvi-1.3.2/html/bmore.html0100644000567000056700000001035707774131572013033 0ustar bgbg BVI: bmore

Home

Quick Tutorial

Download

Installation

Command Overview

bmore
Commands
Options
man - Page

Deutsche Beschreibung


bmore BVI

bmore is a filter that displays the contents of a binary file on the terminal, one screenful at a time. It normally pauses after each screenful, and prints --More-- at the bottom of the screen. bmore provides a two-line over lap between screens for continuity. If bmore is reading from a file rather than a pipe, the percentage of characters displayed so far is also shown.

bmore scrolls up to display one more screen line in response to a RETURN character; it displays another screenful in response to a SPACE character. Other commands are listed below.

The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line (can be changed with the -n option).

Note that (as one would expect) the first byte has the offset 0 (zero).

000000
00000C
000018
000024
000030
00003C
000048
000054
000060
*
00016C
000178
000184
000190
00009C
 7F 45 4C 46 01 01
 00 00 00 00 01 00
 00 00 00 00 00 00
 00 00 00 00 34 00
 0C 00 09 00 00 00
 00 00 00 00 55 89
 53 C7 45 A4 00 00
 00 00 00 83 7D 08
 8C 02 00 00 E9 6F

 00 00 00 00 6A 03
 45 08 50 E8 FC FF
 0C 85 D2 75 17 6A
 E9 43 02 00 00 8D
 0C 85 D2 75 0D C7
 01 00 00 00 00 00
 03 00 01 00 00 00
 00 00 0C 07 00 00
 00 00 00 00 28 00
 00 00 00 00 00 00
 E5 83 EC 68 57 56
 00 00 C7 45 A0 01
 00 75 13 6A 00 E8
 02 00 00 8D B4 26

 68 90 00 00 00 8B
 FF FF 89 C2 83 C4
 01 E8 60 02 00 00
 74 26 00 8D BC 27
 45 A0 00 00 00 00
 .ELF........
 ............
 ............
 ....4.....(.
 ............
 ....U....hWV
 S.E......E..
 ....}..u.j..
 .....o.....&

 ....j.h.....
 E.P.........
 ...u.j..`...
 .C....t&...'
 ...u..E.....
--More--(5%)

Equal lines will only displayed once, a star (*) is the placeholder for one or more lines equal to the line above.

Back to the topBack to the top


Last update: October 13th 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/bmore_opt.html0100644000567000056700000001374207774130672013716 0ustar bgbg BVI: Command Line Options

Home

Quick Tutorial

Download

Installation

Command Overview

bmore
Commands
Options
man - Page

Deutsche Beschreibung


bmore
Command Line Options
BVI

-aASCII mode
-cClear before displaying. Redrawing the screen instead of scrolling. Can be useful, if you change the number of displayed lines.
-dDisplay error messages rather than ringing the terminal bell if an unrecognized command is used. This is helpful for inexperienced users.
-iIgnore case for searching.
-n lines Displays the indicated number of lines in each screenful, rather than the default (the number of lines in the terminal screen less two).
-w cols Display number of cols (bytes of data) in each line.
+linenumber Start up at linenumber
+/ASCII-pattern Start up at the line containing the regular expression ASCII-pattern
+\HEX-pattern Start up at the line containing the regular expression HEX-pattern

This is the default display:

00000000  7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 .ELF............
00000010  01 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
00000020  F4 60 00 00 00 00 00 00 34 00 00 00 00 00 28 00 .`......4.....(.
00000030  0F 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040  55 89 E5 68 04 00 00 00 68 4C 00 00 00 68 00 00 U..h....hL...h..
00000050  00 00 E8 FC FF FF FF 6A 01 E8 FC FF FF FF 89 F6 .......j........
00000060  55 89 E5 83 EC 14 57 56 53 8B 7D 0C C7 45 FC 00 U.....WVS.}..E..
00000070  00 00 00 C7 45 F8 00 00 00 00 C7 45 F4 00 00 00 ....E......E....
00000080  00 BE 01 00 00 00 6A 2F 8B 07 50 E8 FC FF FF FF ......j/..P.....
00000090  83 C4 08 85 C0 74 09 40 EB 08 8D B6 00 00 00 00 .....t.@........
000000A0  8B 07 50 68 04 00 00 00 E8 FC FF FF FF 83 C4 08 ..Ph............
000000B0  68 85 00 00 00 68 04 00 00 00 E8 FC FF FF FF 83 h....h..........
000000C0  C4 08 39 75 08 0F 8E 35 01 00 00 8B 04 B7 89 45 ..9u...5.......E
000000D0  EC 8A 10 80 FA 2B 0F 84 94 00 00 00 80 FA 2D 0F .....+........-.
000000E0  85 EB 00 00 00 BB 01 00 00 00 80 78 01 00 0F 84 ...........x....
000000F0  D1 00 00 00 8B 4D EC 8A 04 0B 3C 64 74 32 7F 10 .....M....^dt2..
--More--(5%)

With the -a option the display looks like this:

00000000  .ELF....................@...4... .......4. ...(.........4...4...
00000040  4...............................................................
00000080  .....1...1...............1..............,................4......
000000C0  .................................... ... .........../lib/ld-linu
00000100  x.so.2..............GNU.................%...8.......4... .......
00000140  ........,.......6.......................3...!...........%...1...
00000180  ....7..............."...........2...&...+...)...................
000001C0  ................................................................
00000200  ................................................................
00000240  ............................#...........(...................'...
00000280  *...$.......-.../.......0.......5...................U...........
000002C0  .... .......................g.......(...........................
00000300  ............t...-...........5...............o...............$...
00000340  ........................$...............4...............D...H...
00000380  ....y...T...............d...............t...........1...d.......
000003C0  ................................-...................j...........
--More--(18%)

 

Back to the topBack to the top


Last update: January 4th 2004 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/bvi.css0100644000567000056700000000142007412100442012277 0ustar bgbgTD {font-family: Helvetica, Arial, sans-serif;} TH {font-family: Helvetica, Arial, sans-serif;} STRONG {color:red;} .thl {font-family: Helvetica, Arial Narrow, sans-serif; font-size: 12pt; font-weight: bold; text-decoration:none;} .ths {font-family: Helvetica, Arial Narrow, sans-serif; font-size: 10pt; text-decoration:none;} .btop {text-decoration:none; color:black;} .examp {font-family: Courier, monospace;} .inv {font-family: Courier, monospace; color: rgb(255,255,255); background-color: rgb(0,0,0);} .head {font-family: Helvetica, Arial, sans-serif; font-size: 22pt; font-weight: bold; text-decoration:none;} .sub {font-family: Helvetica, Arial, sans-serif; font-size: 16pt; font-weight: bold;} .new {font-family: Times, serif; font-weight: bold; font-size: 28pt; color: red;} bvi-1.3.2/html/colon.html0100644000567000056700000001427207774132542013037 0ustar bgbg BVI: Colon (ex) Commands
Command Overview
Colon (ex) Commands
BVI

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

When forming a colon command, the first character, the colon, can be followed by zero, one or two addresses. These addresses are byte addresses, in contrast to vi, which uses line addresses.
The byte addresses can be given in decimal notation or, with a leading zero, in hexadecimal notation. If you have specified an address offset (e.g. :set offset=256), this offset has to be added to the byte addresses.
Without an address, the whole file is affected or the current cursor position is used (depending of the command).

AddressCorresponding bytes
.The current byte
7The seventh byte of file (if offset=0)
.-nn bytes before the current byte
.+nn bytes after the current byte
'xThe byte marked with x
^The first byte in file
$The last byte
''The previous current byte
/pat/The first byte that matches pat
#12 A4 6F#The first byte that matches hex pattern
CommandBVIVI
File
Commands
:w
:w %.new
:w filename
:w>> existingfile
:w! file
:e newfile
:e!
:f
:f newname
Write to the current file
Write to current.new
Write to filename
Append to existing file
Overwrite existing file
Terminate session and edit newfile
Reload the current file
Prints current filename and some additional info
Changes the current filename to newname
Substitute
Commands
:s/pattern/replace/
:s/pattern/replace/g
:s/pattern/replace/gc
Search for pattern and replace it once
Search for pattern and replace it global
Search for pattern and replace it global conditional (ask)
:s\80 af\ff ff\ Binary search and replace
Not available
Edit
Commands
:a m
:c m  
:i m
append
change
insert bytes, where m is a(scii), b(inary), d(ecimal), h(exadecimal) or o(ctal). You can type in several (screen) lines of bytes, a line with only a '.' in it terminates the command.
Usually not available in vi but in ex (without the m - modifier).
Logical
Operations
:and n
:or n
:xor n
:neg
:not
:sl
i
:sr i
:rr i
:rl i
and n
or n
exclusive or n
negate
invert
shift left i bits
shift right i bits
rotate left i bits
rotate right i bits
Not available.
Miscellaneous
:g/pat/p
:n
:q
:rew
:sh
:so
file
:ve
:x
:!
command
Global search for pattern pat
Next file to edit
Exit session without saving the file
Rewind to first file
spawn a new shell
Read and execute a file with colon commands
Version of the editor
Exit session, save the file if changed
execute a system command
Currently not available
:map
:unm(ap)
:ab(breviate)
:una(bbreviate)

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

Back to the topBack to the top


Last update: October 30th 1999 by Gerhard Bürgmann, Purkersdorf/Austria bvi-1.3.2/html/cursor.html0100644000567000056700000001033507774132571013240 0ustar bgbg BVI: Cursor Movements
Command Overview
Cursor Movements
BVI

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

CommandBVIVI
Cursor
movements
h, ARROW_LEFT move cursor one character to the left
j, +, ^N, ^J, ARROW_DOWN, RETURN move cursor down one line
k, -, ARROW_UP move cursor up one line
l, ARROW_RIGHT, SPACE move cursor one character to the right
Hmove cursor to home position, upper left corner of screen
Mmove cursor to the begin of the middle line of the screen
Lmove cursor to the begin of the last line of the screen
Move to
begin
and end of
(screen) line
^move cursor to the first byte of Hex section
$move cursor to the last byte of Ascii section
TABtoggle cursor between the same byte in Hex and Ascii section
  ^   move cursor to the first nonblank character of line
$move cursor to end of line
0move cursor to the real begin of line
Move
by
words
  w   forward to next string delimited with a nonprinting char
b back to previous string delimited with a nonprinting char
e end of current word
W forward to next string delimited with a \0 or \n
B back to previous string delimited with a nonprinting char
E end of a blank-delimited word
  w   move cursor forward to begin of next word
e move cursor to end of current word
b move cursor back to begin of current or previous word
W move cursor forward to begin of next word, ignoring punctuation
B move cursor back to begin of last word, ignoring punctuation

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

Back to the topBack to the top


Last update: October 30th 1999 by Gerhard Bürgmann, Purkersdorf/Austria bvi-1.3.2/html/download.html0100644000567000056700000000636610003036050013511 0ustar bgbg BVI: Download Page

Home

Quick Tutorial

Download
New in 1.3.2
New in 1.3.1
New in 1.3.0
New in 1.2.0

Installation

Command Overview

bmore

Deutsche Beschreibung


Download Page BVI

NOTE: All packages are compressed with the GNU gzip program. You can download it from ftp://ftp.gnu.org/gnu/gzip/.

Current stable release of bvi is 1.3.2 (Check out what's new):

Sources

Packages

bvi-1.3.2/html/edit.html0100644000567000056700000001621307774132630012645 0ustar bgbg BVI: Edit Commands
Command Overview
Edit Movements
BVI

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

If you would like to use the insert and delete commands, you have to enable them with the :set memmove option. These commands are locked per default, because you must not move bytes to a different address for many types of binary files (e.g. executables, database files, etc.). If you usually edit files where bytes can be moved, you can add the :set memmove directive to your .bvirc file.

CommandBVIVI
Replace
bytes
  r   replace a single byte, no ESC needed
R replace multiple bytes until you type ESC
~ toggle between uppercase and lowercase of a byte
Append
bytes
  A  append bytes at end of file
Ddelete bytes to end of file
  A  append characters at end of line
Ddelete characters to end of line
Insert
bytes
  i   insert byte in front of cursor position
a insert byte after cursor position
  I   insert byte at begin of file
  I  insert characters at begin of line
not available
oinsert new line below current line
Oinsert new line above current line
Delete
bytes
  x   delete byte at of cursor position
Xdelete byte in front of cursor position
dSPACEdelete byte at cursor position
dfC delete from current position to next character C
d/xyz delete from current position to first occurance of matching pattern xyz
d?xyz delete from current position to first occurance of matching pattern xyz in reverse direction
d'adelete from current position to mark a
dnGdelete from current position to byte with (decimal) address n
not available, because there are no lines, sentences, paragraphs or sections in a binary file
dd  delete line
d)delete from cursor position through first following end of sentence
d}delete from cursor position through first following end of paragraph
d]delete from cursor position through first following end of section
d\6a 56 ff   delete from cursor position to first occurance of hex pattern 6a 56 ff
d#6a 56 ff   delete from cursor position to first occurance of hex pattern 6a 56 ff in reverse direction
not available
Ddelete from current position to EOF
  d$  
Ddelete from current position to end of line
  d$  
Undo
edits
  u   Undo the most recent change
not available
  U  Undo all of the changes made to the current line

Note that most of the commands can be used with a decimal repeat count in front of the command!

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

Back to the topBack to the top


Last update: September 30th 1999 by Gerhard Bürgmann, Purkersdorf/Austria bvi-1.3.2/html/german.html0100644000567000056700000002130007773647543013177 0ustar bgbg BVI: Deutsche Beschreibung

Home

Quick Tutorial

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Deutsche Beschreibung BVI

Der BVI (Binary-VI) ist ein Editor fr Binrfiles. Seine Kommandos sind weitgehend an den Standard UNIX Editor VI(1) angelehnt. Der Bildschirm ist in einen hexadezimalen und einen ASCII-Bereich geteilt. Einige zustzliche Kommandos wurden zugefgt, einige Kommandos adaptiert und einige Kommandos, die bei Binrfiles keinen Sinn machen, wurden weggelassen. Fr eine Gesamtbersicht siehe Manual Page BVI(1).

Zustzliche Kommandos

Eine wichtige Funktion fr binre Files ist das Suchen nach Hexcodes. Dafr gibt es analog zum '/' und '?' - Kommando zustzlich das '\' und das '#' - Kommando.
Beispiel:
\1e f4 56 - Sucht die angegebene Bytefolge in vorwrts-Richtung
#34 5a a4 - Sucht Bytefolge rckwrts.

Die normalen Textsuchkommandos sind auch vorhanden, wobei zustzlich ein Return, Linefeed oder NULL im Suchstring aufscheinen darf (\n \r oder \0).

Die Kommandos w, W, b, B (nchstes oder vorhergehendes Wort) wurden insoweit abgendert, da sie eher dem STRINGS(1) - Kommando entsprechen, also in einem Binrfile Textstrings suchen. Dabei sucht W und B nach Strings, die mit einem \0 oder \n enden, w und b sucht nach Strings, die mit einem beliebigen, nicht druckbaren Zeichen enden. Die Stringlnge betrgt 4 Zeichen, wobei mit ":set wordlength=x" die Stringlnge auf x Zeichen eingestellt werden kann.

Der Bildschirm ist in einen HEX und einen ASCII-Bereich aufgeteilt, wobei jederzeit mit der TAB - Taste von einem Bereich in den anderen gewechselt werden kann (auch im Eingabemodus). Es kann also bei der Eingabe zwischen normalen ASCII-Zeichen und Hex-Eingabe hin- und hergesprungen werden.

Am unteren Bildrand befindet sich eine Statusanzeige, welche die Adresse des Bytes, auf welchem der Cursor momentan steht, anzeigt. Auerdem wird das Byte in oktaler, hexadezimaler, dezimaler und ASCII-Reprsentation anzeigt. Die ASCII-Anzeige kann von DOS-Style (27 entspricht ^Z) auf UNIX-Style entsprechend Manual Page ASCII(7) umgeschaltet werden (27 entspricht SUB). Kommando ist ":set unixstyle". Die Statusanzeige kann mit ":set noshowmode" ausgeschaltet werden.

Regular Expressions

Fr die Suchkommandos sowohl fr Text als auch Hex sind Regular Expressions zulssig, wobei es die Zeichen ^ und $ fr Zeilenanfang und Zeilenende nicht gibt. Die Kombination .* ist unzulssig, da sie sich auf jeden Fall auf das Ende des Files beziehen wrde.

Zeilen

Da es in binren Files keine Zeilen gibt (die Darstellung der einzelnen Zeilen am Bildschirm hat keinen Bezug zum File) gibt es keinerlei zeilenorientierte Kommandos (dd, o, O, yy). Ein Kommando wie :s/XXX/UUU/g ndert somit das gesamte File. Zu beachten ist auch, da :s/XX/UUUU/ nicht die beiden X durch vier U ersetzt, sondern die beiden den X folgenden Zeichen auch durch U berschrieben werden.

Editierkommandos

Da binre Files hufig ausfhrbare Programme oder Datenbankfiles sind, bei denen Bytes nicht einfach an eine andere Adresse verschoben werden dürfen, sind Einfüge- und Löschkommandos (z.B. a, i, x) deaktiviert. Mit dem Kommando :set memmove können sie aktiviert werden.

Die Kommandos :a (append), :c (change) und :i (insert) können benutzt werden, um ein oder mehrere Bytes in ASCII, binärer, dezimaler, hexadezimaler oder oktaler Schreibweise einzugeben (a, b, d, h oder o). Es können mehrere (Bildschirm) Zeilen eingegeben werden. Das Kommando wird beendet, sobald eine Zeile, die nur aus einem Punkt besteht, eingegeben wird.

Beispiel:

:i b
1 1001 010101 1111
11111 1010 1 0 1
.
Zu beachten ist, daß kein Einzelwert den maximalen Byte-Wert (255) überschreiten darf, da sonst die Eingabe abgebrochen wird. Das Drücken der RETURN - Taste führt zu keinem "RETURN" - Zeichen in der Datei, im ASCII - Modus können allerdings die Sonderzeichen \n, \r, \t und \0 benutzt werden.

Yank und Put

Auch hier gilt eine etwas genderte Funktion. Das y (yank) - Kommando ist allerdings ab Version 1.2.0 dem Vi angenhert:
5ySPACEkopiert 5 Zeichen in den Yank-Buffer
oberschreibt an Cursor - Position die folgenden Zeichen mit dem Inhalt des Yank- oder Delete - Puffers
pfgt an der Cursor - Position den Inhalt des Yank- oder Delete - Puffers ein.
Pfgt den Inhalt des Yank- oder Delete - Puffers am Dateiendes an.

Das Kommando ":r filename" fgt das angegebene File nicht an der Cursor- Position sondern am Dateiende an.

Adressen

Das Kommando nG fhrt nicht zur n. Zeile, sondern zum n. Byte. Die Eingabe der Nummer wird dezimal interpretiert. Um eine Adresse hexdezimal angeben zu knnen, kann g eingegeben werden. Es erscheint ein Prompt in der Statuszeile, bei dem eine hexadezimale Eingabe erfolgen kann. Das erste Byte hat Adresse 0.
Die Anzeige der Adressen kann mit einem Offset versehen werden (:set offset=256), beispielsweise um fr .COM Files in DOS einen Beginn bei Adresse 100Hex anzuzeigen. Wird ein offset=1 angegeben, so ist hat das erste Byte Adresse 1. Das G - Kommando bercksichtigt den Offset. Im Gegensatz dazu zeigt das :f - Kommando immer die Ordnungszahl des Bytes an, beginnend mit 1 ohne Bercksichtigung des Offsets.

Bitweise Kommandos

Um Manipulationen auf Bit-Ebene durchführen zu können, stehen folgende Kommandos zur Verfügung:
:rl nRotiert Bits links n ist eine Zahl zwischen 1 und 7
:rr nRotiert Bits rechts
:sl nSchiebt Bits links
:sr nSchiebt Bits rechts
:and iUnd Verknüpfung i ist eine Zahl zwischen 0 und 255
:or iOder Verknüpfung
:xor iExklusiv-oder Verknüpfung
:not Negiert Bytewert
:neg Zweier-Komplement
Wird kein Bereich angegeben, so bezieht sich die Operation auf die gesamte Datei. Es können zwei Adressen in den üblichen Schreibweisen angegeben werden. Normalerweise wird dezimale Eingabe erwartet, bei führender 0 werden die Adressen Hexadezimal interpretiert.
Der Wert i für die logische Verknüpfung kann dezimal, hexadezimal, oder mit führendem B in binärer Schreibweise angegeben werden. Auch bei Eingabe von genau acht 0 und 1 Werten wird der Byte - Wert binär interpretiert.
Beispiel:
:100,500and 01A RETURN
:03FA,01000or 00001000 RETURN
:.rr 3 RETURN
:'a,$sl 1 RETURN

Back to the topBack to the top


Last update: June 1st 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/gif/0040775000567000056700000000000007432563110011571 5ustar bgbgbvi-1.3.2/html/gif/bvi_m.gif0100644000567000056700000001542007412100442013342 0ustar bgbgGIF87a}f3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3,}H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲKƔ9p˛8sV9@T0'OHŠS+be %J@V]*KcV Yrʊ+X"ELx'Nj{m\2^tx/^"ogZc(|pXIT [n[%¬۶u ֪xG&lڠOc-^7~4 6/gr-PO~>uhUKQ@\5#x%݁y Ywur-US\–t\ե^B$$sQTE+3A]+X+\4hE Yu@VǑS{R{t("J&IoE  _ľ1 *5Bo X

¯^]XD!\XExFvtg2ipMd[ eLݬ'01EIrà8^};DkXCD!6T6ș+ 4-JrYDP1V0 yi=?֢N,x?.ϐ +3; G5i<;EV a0>Pi#ƒ(GC plqijBV)$jJ-"kpk\bӸCuTVKwM$e VK)8l Ɲ,BYkM=iʝ& +`%PA>:x*4 ;$*T( &3:r<&OfkQ2>SDEҔYV0[-AvļMf,ͮNhh/2sYEvh"|Fy Ò +e*4DOՎ>.qӸ\asa*05('QDu@CM$hVLP VD\e@`iEQ{"t&.JD!Q>T,Y5J 04".>)&q]Ø Axbe#'"E4~HgHp+>Euc"Ze/܌?]2˅#W/1$,ݰ;Uq괮fKC^NyB€Jdy-~$qSi}nM"!o1}P^:Չw-3h\yAD 6N)^Tu E;ٌy:}1-7>~wM`=`5fshKFK bǍκ+yŻM+% )ͧkS[ɻ0 u`m);\[zZO NTM xQE2s& wB7=_̈in؎{;eQ ZrgPnF&Ikl}TB VA-g0mTju :KO$ el:_w-mYԼ: v h e׀(ϫrrE؋0#~-ku6;h@ bdM-ws4ɣ,GN{Yxe;%ްk µPl L[TkkiչkzB42uȽ" ي SKLB7w-Q{t&f''KJ.NrCdHME|E+}gW&J>c .{F RZ?[Xq7s&}'K.h!&0|t~X#H~Rq7+bfڱ&714L#t*$6D[9f؅e ӆX$jHVdKVHÕi<$f%Z7CvzӴ4c0bs2sv\Qt(@0IW8*=C9Q(D:5yG?+ 9w =HX4~4j{h:xm4wPQ $lT:QBRHF?e#@-F2:h&4NH@d[88)WyZ$q¨Ƅ;Q5c2i)!B%G1$g$]?:Fp!8{&ɸ8`HwtKH-Vrj܁|IW%x48/GE6w9ُaXMB-8)BKI[i&m: 6&d8rH#AG-p9'#tg H8K  |#C^]9cq$:%먀6-40I&(b:a(OBԂ<ӘCȕ&WXdrKm% ztcR7 ytAH7O#& oɕC,d59U~E.'+agTtJ*Ò;x/l#1n!AE/6"IfG86鈔U?Si]d ()Iwv1 @RahC99؟#@SC#*i)DcFb9#ԑqZI(@S*#?8 5j ;Jќ:.7WFiv4U0g^&,iBbBuVhy73pSmz 9$n*E$SS^hC5 X(EF&di&d3 1Vqy4jN+ME.6zD66C0rz2RiBv~K>,Sji2|zyqӬazIJJz cfeHAUڪӗg7gG9:97>7%ꂬj> J[fZN3ܳevڥMʂ檪ĊϪ#:,G%"yQvɎx l(2g` X04!{7D. N.%(rߖ.9۱%Ez))@#c9Z(eKL()hՉŮJWOcxꥷ{!$<*ٲj״v^CZH#[:njP2ؕ9" 4Gr@ۧtu lVD d EݒJZdkJVCtdp{r-#Kf+V{=)JSS b tZʛ&ĒyS A\j\<]<̨T0 ͻxfgjȦ:9~3<9-̩>"9$ôlE&ip@2C32 ;RO s.;t7BOC-H,MUkXCnzqg^vs Oq6r`xӶe?S|\mFv!շ6wLWtW!B!44+jg7\Ma8)fshu"Ɯ4gz•DŸFDX!GV_tzK0>F]4<ę=9!8M} ;*T.]&R~RBQژ IzP9aB4U\$1:IyRNAg,v~5&jmR3|eǖsI9xNs-UQd'%)zp7PHPz *}?l6 ]ڷ~l|X#Mۙ4.hWA󸶨mW'gmTAY*TwiN=/$QPt -W$lNYw:.s!,vȵ BGܵH-PR^74'BBąE3> Z7>'[ ?9z&Qۧ9/O%U!P0SOTmMR,דO GUn0HlDBG줅MxpLQ Au:U.7l).{~|:NLxfX"1rS&㡜ly8^Ө$G%C@eNU)9óL%?H HVFCI v,&_Pr_.c>b@i'##-2Nq'\i2X|6`[HKzC+E 2w@M\(_3yF_N4甤LӞ?\3at&G40d:}PYPPA4+i5yxj-)$|#F}q^ѕE, m"CuNdX+e@PT/%QjOVq j|Q}!v.A2^$ B,~/.5E!~_GU?ԿǸ > +Ve$[ ,p`I]V>fsg @rPaeM$8(dB$vy&^iө.,,o"X"[2v mAe;PHk| y=롍]$vPbgͬ'J c#vK xZ@vE(+Ç 9qTMB171M W:cJD d(B8d4Ӕ2 ҼHhK0׃ 4;`%˹VbˑPr͏B4pT*98 tċ<+B3=zT9bPOd84SFIӦTQAMLO)WͭKE3uH]\Wcs=S:1bbBv?v䭭BXUHf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3,t>H*\ȰÇ#JHŋ3jȱ#V d% +౥˂!jȋ 4Ȱ犕/h@,>9ѵY: H AN>1)LVٓɢJ`fGfѠJulH%rLDtx. D{M#o#C+5ȐUzXŠGkB?jei`Id@WXA" V@|iӖ uDZ%#Mf]8]Fra۹G,:h .mSf,}a~d%u" ~Sy!{z=8 8Rn-pF x!I=f+9"\TUBU6 U!'U#,BՑ}P؟[rtrw_BXjᖈ'o` %ӍݖmbB0*i"^D܎p@$]ztqnXC ,)) 4oVw@yuW"V1y^R2Hx5 MV*)*+5uț+ LyQT^Ȳ 1XUJE,zmJ*`zyG$-eXgvG+n+m3wNЅ遊s5f|UVp$h̒zJSG&i9Y@%% *7,ICšbc2UDkSy" d^clk wqiT:L`pJ[e#xvnu"Tht+#cO:煏9M"H,]m(ml{wMPwlӵ"s5$ȶ:[q ByT^TäחyqMKvytTΓ :kX/|d3q#rO弔WdArk"iCTZ;K$wB":3դ0Vҕ.Nb.y邕RB 9"\~"(0:Ca g ( Dּ#$c,-ciAarG0zv™K|+@JEDt1#]dFm0M=c=z{Zg/DTH#^ Ʒd1l[P1D"^rQDmxF2MVɼo9wRBVڻ\Ŋ=pYOV~"]HRׄkq SH z - U`;{u(UcȞQ!Uz2@ (yLOkx Åܐ%a┨0PCy*YV䒪!~+3]wMz:XrHl\*`Zރe= T,UԵy G6%RY&". G-JjQ>%f[($׍n$a6ZFY4d^JVY+L ,J|eVHU<$!YIΘJɚ'Bju zp^*I BVI - Binary VIsual editor

Quick Tutorial

Download

Installation

Command Overview

bmore

Deutsche
Beschreibung

Sitemap

Project Page


VI and Clones

Hex-Editors


SourceForge Logo

Welcome to the
bvi
Homepage

Here you can find all the informations about bvi you need.

The bvi is a display-oriented editor for binary files, based on the vi texteditor. If you are familiar with vi, just start the editor and begin to edit! A bmore programm is also included in the package.
If you never heard about vi, maybe bvi is not the best choice for you.

Current: Version 1.3.2

You can download source and compiled versions from the download page.
Check out whats new in 1.3.2!

Newsgroup: comp.editors

Mailing List (very low traffic):

To join this list, simply send a blank email to bvi-subscribe@yahoogroups.com. You will receive a subscription confirmation message. Simply reply this message and your subscription will be complete.
Bvi was developed by Gerhard Bürgmann and is published under the GNU Public License. Current stable version is 1.3.2. Bvi is running on most UNIX - like operating systems and on MSDOS.

If you want to contact me:
Gerhard Bürgmann, Vienna ( Purkersdorf ) / Austria / Europe
E-mail: gerhard@puon.at
Have a look at Meta Chrom Kennzeichenhalter

Back to the topBack to the top


Last update: January 8th 2004 by Gerhard Bürgmann

bvi-1.3.2/html/install.html0100644000567000056700000001067010012763573013362 0ustar bgbg BVI: Installation

Home

Quick Tutorial

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Installation BVI

The following steps are necessary to get bvi running:

UNIX

The Unix version of bvi needs the curses (ncurses) library for cursor movement.
  1. Download the source package from the Download Page
  2. Unzip the package with the command:
  3.     # gunzip -c bvi-1.3.2.src.tar.gz | tar xvf
    
  4. Change to the directory bvi-1.3.2 and type
        # ./configure
        # make
    
  5. Type `make install' for copying the executable files and manual pages to the final directories.
    By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. Use the `--with-ncurses' option to configure to specify an alternate search path for Ncurses outside the normal include/lib search path.

    You will find now four new commands:

        bvi     The binary editor
        bview   The readonly version of bvi
        bedit   The beginners version of bvi
        bmore   The binary more program
    
  6. Use `make uninstall' to remove the installed files from your file system.
    You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'.

MSDOS

Beginning with version 1.3.2 you may use the DJGPP environment to compile bvi for working under both Win32 and DOS.

The MSDOS version (Borland C) exists for historical reasons and is not supported anymore:

You have to convert the sourcefiles from the UNIX textformat to the MSDOS textformat first. This can be done e.g. by loading and saving them with the MSDOS standard editor `edit'.

The MSDOS version is using the conio routines of the Borland - C compilers for cursor movement. The doscur.h header file substitutes the curses commands.
Bvi is using the "HUGE" memory model, bmore needs the "TINY" model to be able to convert it to a .COM file.

  1. Download the source package from the Download Page
  2. Unzip the package with the command:
        gunzip -c bvi-1.3.2.src.tar.gz | tar xvf
    
  3. Load the tcconfig file (located in the bc subdirectory for Borland - C).
  4. Press F9-Make

Back to the topBack to the top


Last update: February 12th 2004 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/man_bmore.html0100644000567000056700000001534510002045342013641 0ustar bgbg

BMORE(1) BMORE(1) NAME bmore - browse through a binary file SYNOPSIS bmore [ -acdi ] [ -n lines ] [ -w cols ] [ +linenumber ] [ +/ASCII-pattern ] [ +\Hex-pattern ] [ filename ... ] DESCRIPTION more is a filter that displays the contents of a binary file on the terminal, one screenful at a time. It nor- mally pauses after each screenful, and prints --More-- at the bottom of the screen. bmore provides a two-line over- lap between screens for continuity. If bmore is reading from a file rather than a pipe, the percentage of charac- ters displayed so far is also shown. bmore scrolls up to display one more screen line in response to a RETURN character; it displays another screenful in response to a SPACE character. Other com- mands are listed below. The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset 0 (zero). bmore sets the terminal to noecho mode, so that the output can be continuous. Commands that you type do not normally show up on your terminal, except for the / , \ and ! com- mands. If the standard output is not a terminal, more acts just like cat(1V), except that a header is printed before each file in a series. OPTIONS -a ASCII mode: no hex representation of the contents. Non printable characters are displayed as a dot (.) -c Clear before displaying. Redrawing the screen instead of scrolling. -d Display error messages rather than ringing the ter- minal bell if an unrecognized command is used. This is helpful for inexperienced users. -i Ignore case for searching. -n lines Displays the indicated number of lines in each screenful, rather than the default (the number of lines in the terminal screen less two). -w cols Display number of cols in each line. +linenumber Start up at linenumber. +/ASCII-pattern Start up at the line containing the regular expres- sion pattern. Note: unlike editors, this construct should not end with a `/'. If it does, then the trailing slash is taken as a character in the search pattern. USAGE Commands The commands take effect immediately; it is not necessary to type a carriage return. Up to the time when the com- mand character itself is given, the user may type the line kill character to cancel the numerical argument being formed. In addition, the user may type the erase charac- ter to redisplay the `--More--(xx%)' message. In the following commands, i is a numerical argument (1 by default). iSPACE Display another screenful, or i more lines if i is specified. iRETURN Display another line, or i more lines, if speci- fied. i^D (CTRL-D) Display (scroll down) 11 more lines. i is given, the scroll size is set to i. id Same as ^D. iz Same as SPACE, except that i, if present, becomes the new default number of lines per screenful. is Skip i lines and then print a screenful. if Skip i screenfuls and then print a screenful. i^B (CTRL-B) Skip back i screenfuls and then print a screenful. b Same as ^B (CTRL-D). q Q Exit from more. = Display the current line number. v Drop into the bvi(1) editor at the current off- set of the current file. w Drop into the bvi(1) editor at the current off- set of the current file. Only the portion of the file displayed on the screen will be loaded. h Help. Give a description of all the more com- mands. i/pattern Search for the ith occurrence of the regular expression pattern. Display the screenful starting at the file position that contains the ith match for the regular expression ASCII-pat- tern, or the end of a pipe, whichever comes first. If bmore is displaying a file and there is no such match, its position in the file remains unchanged. Regular expressions can be edited using erase and kill characters. Erasing back past the first column cancels the search command. ' Single quote. Go to the point from which the last search started. If no search has been per- formed in the current file, go to the beginning of the file. !command Invoke a shell to execute command. The charac- ters % and !, when used within command are replaced with the current filename and the pre- vious shell command, respectively. If there is no current filename, % is not expanded. Prepend a backslash to these characters to escape expan- sion. i:n Skip to the ith next filename given in the com- mand line, or to the last filename in the list if i is out of range. i:p Skip to the ith previous filename given in the command line, or to the first filename if i is out of range. If given while more is positioned within a file, go to the beginning of the file. If more is reading from a pipe, more simply rings the terminal bell. :f Display the current filename and offset number. :q :Q Exit from bmore (same as q or Q ). . Dot. Repeat the previous command. FILES /etc/termcap terminal data base /usr/local/share/bmore.help help file SEE ALSO bvi(1), termcap(5) 3 Jan 2004 bvi-1.3.2/html/man_bvi.html0100644000567000056700000004173610002046407013323 0ustar bgbg BVI(1) User Commands BVI(1) NAME bvi, bview - visual editor for binary files VERSION bvi-1.3.2 SYNOPSIS bvi [-R] [-c cmd] [-f script] [-b begin] [-e end] [-s size] file... bview [-R] [-c cmd] [-f script] [-b begin] [-e end] [-s size] file... OPTIONS file... A list of filenames. The first one will be the current file and will be read into the buffer. The cursor will be positioned on the first line of the buffer. You can get to the other files with the ":next" command. -R "Readonly": The readonly flag is set for all the files, preventing accidental overwriting with a write command. -b begin causes bvi to load a file not from the start but from offset begin. -e end causes bvi to load a file not till end but till address end. -s size causes bvi not to load the complete file but only size bytes. -c cmd cmd will be executed after the first file has been read. If the cmd contains spaces it must be enclosed in double quotes (this depends on the shell that is used). -f script This command provides a means for collecting a series of "ex" (colon) commands into a script file, then using this file to edit other files. Since there is no binary stream editor "bsed", you can use this option to make several global changes in a binary file. DESCRIPTION Bvi stands for "Binary VIsual editor". Bvi is a screen oriented editor for binary files; its command set is based on that of the vi(1) text editor. As a binary editor does not have the concept of "lines" there are differences from Vi commands wherever the latter are line orientate. COMPARISON The main differences between Vi and Bvi are: The screen is divided in three sections or panes: The byte offset (extreme left), the hex pane (middle), and an ascii pane (right) which shows as printable characters those bytes in the hex pane. On an 80 column terminal there will be sixteen hex values and their ASCII values on each screen line. Note that (as one would expect) the first byte has the offset '0' (zero). You can toggle between the hex and ascii windows with the tab key (TAB). Toggling between these two windows does not change the current position (offset) within the file. No "lines" concept: Files are treated as one long stream of bytes. The characters "newline" and "carriage return" are not special, id est they never mark the end of lines. Therefore the lines on the screen do not represent lines in the usual way. Data is broken across screen lines arbitarily. As a consequence there are no commands in bvi from ex or vi that are based on line numbers, eg "dd", "yy", 'C', 'S', 'o', 'O'. This also changes the meaning of "range" before the ":write" command to a byte offset, ie the command ":100,200w foo" writes all *bytes* (not lines) from offset 100 to offset 200 to the file "foo". No "text objects": There are also no text-specific arrangements like words, paragraphs, sentences, sections and so on. Extended "ruler": The bottom line of the screen shows the current address (byte offset) and the current character in these notations: octal, hexadecimal, decimal and ascii. Search patterns: All search commands understand these special characters: . any character [] set of characters * zero or more occurrences of previous char or set But as there is no concept of lines you cannot use the standard symbols ("anchors") for "begin-of-line" ('^') and "end-of-line" ('$'). Searching for the start/end of lines must be done explicitly by adding these special characters to your search pattern using these meta sequences: \n newline \r return \t tab \0 binary zero Additional search commands: Similar to the text search commands there are additional hex-search functions '\' and '#' which allow to search for any byte value. Example: "\62 76 69" will search for the string "bvi". Spaces between hex value are optional, so searching for "6775636B6573" will find "guckes". Changing the length of data (insertion, deletion) moves the data to other addresses; this is bad for many cases (eg. databases, program files) and is thus disabled by default. You can enable this commands by typing :set memmove BVI Modes: Command Mode (Normal Mode): Input is treated as command. Note that command mode is the default mode after startup and after escaping from input mode. Use ESC (escape) to cancel a partial (uncompleted) command. Input Mode: Input is treated as replacement of current characters or (after the end of the file) is appended to the current file. This mode is entered from command mode by typing one of 'i', 'I', 'A', 'r', or 'R'. You can enter the characters from the keyboard (in the ASCII window) or hexadecimal values (in the HEX window). Type TAB to switch between these two windows. Type ESC to finish the current input and return to command mode. Type CTRL-C to cancel current command abnormally. Command line mode (Last Line Mode or : mode): Similar to vi, this mode is entered by typing one of the characters : / ? \ # ! The command is terminated and executed by typing a carriage return; to cancel a partially typed command, type ESC to cancel the current command and return to command mode. ENVIRONMENT The editor recognizes the environment variable BVIINIT as a command (or list of commands) to run when it starts up. If this variable is undefined, the editor checks for startup commands in the file ~/.bvirc file, which you must own. However, if there is a .bvirc owned by you in the current directory, the editor takes its startup commands from this file - overriding both the file in your home directory and the environment variable. TERMINOLOGY Characters names are abbreviated as follows: Abbr. ASCII name aka CR 010 carriage return ^A 001 control-a ^H 008 control-h ^I 009 control-i aka TAB ^U 021 control-u ^Z 026 control-z ESC 027 escape aka ESC DEL 127 delete LEFT --- left arrow RIGHT --- right arrow DOWN --- down arrow UP --- up arrow COMMAND SUMMARY See the TERMINOLOGY for a summary on key name abbreviations used within the following description of commands. Abstract: Arrow keys move the cursor on the screen within the current window. Sample commands: :version show version info <- v ^ -> arrow keys move the cursor h j k l same as arrow keys u undo previous change ZZ exit bvi, saving changes :q! quit, discarding changes /text search for text ^U ^D scroll up or down Counts before bvi commands: Numbers may be typed as a prefix to some commands. They are interpreted in one of these ways. screen column | byte of file G scroll amount ^D ^U repeat effect most of the rest Interrupting, canceling ESC end insert or incomplete command DEL (delete or rubout) interrupts File manipulation: ZZ if file modified, write and exit; otherwise, exit :w write changed buffer to file :w! write changed buffer to file, overriding read-only ("forced" write) :q quit when no changes have been made :q! quit and discard all changes :e file edit file :e! re-read current file, discard all changes :e # edit the alternate file :e! # edit the alternate file, discard changes :w file write current buffer to file :w! file write current buffer to file overriding read-only (this "overwrites" the file) :sh run the command as set with option "shell", then return :!cmd run the command cmd from "shell", then return :n edit next file in the argument list :f show current filename, modified flag, current byte offset, and percentage of current position within buffer ^G same as :f Additional edit commands You can insert/append/change bytes in ASCII/binary/decimal/ hexadecimal or octal representation. You can enter several (screen) lines of input. A line with only a period (.) in it will terminate the command. You must not type in values greater than a byte value. This causes an abandonment of the command. Pressing the CR key does not insert a newline - character into the file. If you use ASCII mode you can use the special characters \n, \r, \t and \0. :i aCR insert bytes (ASCII) at cursor position :a bCR append bytes (Binary) at end of file :c hCR change bytes (hexadecimal) at cursor position Bit-level operations :and n bitwise 'and' operation with value n :or n bitwise 'or' operation with value n :xor n bitwise 'xor' operation with value n :neg two's complement :not logical negation :sl i shift each byte i bits to the left :sr i shift each byte i bits to the right :rl i rotate each byte i bits to the left :rr i rotate each byte i bits to the right Command mode addresses :w foo write current buffer to a file named "foo" :5,10w foo copy byte 5 through 100 into as file named foo :.,.+20w foo copy the current byte and the next 20 bytes to foo :^,'aw foo write all bytes from the beginning through marker 'a' :/pat/,$ foo search pattern pat and and copy through end of file Positioning within file: ^B backward screen ^F forward screen ^D scroll down half screen ^U scroll up half screen nG go to the specified character (end default), where n is a decimal address /pat next line matching pat ?pat previous line matching pat \hex jump to next occurrence of hex string hex #hex jump to previous occurrence of hex string hex n repeat last search command N repeat last search command, but in opposite direction Adjusting the screen: ^L clear and redraw screen zCR redraw screen with current line at top of screen z- redraw screen with current line at bottom of screen z. redraw screen with current line at center of screen /pat/z- search for pattern pat and then move currents line to bottom ^E scroll screen down 1 line ^Y scroll screen up 1 line Marking and returning: mx mark current position with lower-case letter x Note: this command works for all lower-case letters 'x move cursor to mark x in ASCII section `x move cursor to mark x in HEX section '' move cursor to previous context in ASCII section `` move cursor to previous context in HEX section Line positioning: H jump to first line on screen ("top") L jump to last line on screen ("low") M jump to middle line on screen ("middle") - jump onto previous line on screen + jump onto next line on screen CR same as + DOWN or j next line, same column UP or k previous line, same column Character positioning: ^ first byte in HEX window $ end of screen line l or RIGHT jump onto next byte (within current screen line) h or LEFT jump onto previous byte (within current screen line) ^H same as LEFT space same as RIGHT fx find next occurrence of character x Fx find previous occurrence of character x n| jump onto nth byte/character within current line Strings: (works similar to the strings(1) command) Note: "Words" are defined as strings of "nonprinting characters". e jump to next end of word w jump to next begin of word b jump to previous begin of word W forward to next string delimited with a \0 or \n B back to previous string delimited with a nonprinting char Corrections during insert: ^H erase last character (backspace) erase your erase character, same as ^H (backspace) ESC ends insertion, back to command mode Append and replace: A append at end of file rx replace current bte with char 'x' R enter replace mode; for all subsequent input, the current byte is overwritten with the next input character; leave replace mode with ESC. Miscellaneous Operations: TAB toggle between ASCII and HEX section Yank and Put: 3ySPACE yank 3 characters p insert contents of yank buffer o replace text with content of yank buffer P put back at end of file Undo, Redo: u undo last change Note: Only the last change can be undone. Therefore this commands toggles between the last and second-t-last state of the buffer. Setting Options: With the :set command you can set options in bvi Option Default Description autowrite noaw Save current file, if modified, if you give a :n, :r or ! command columns cm=16 on an 80 character wide terminal ignorecase noic Ignores letter case in searching magic nomagic Makes . [ * special in patterns memmove nomm enables insert and delete commands offset of=0 adds an offset to the diplayed addresses readonly noro If set, write fails unless you use ! after command scroll sc=1/2 window Number of lines scrolled by ^U and ^D showmode mo Displays statusline on bottom of the screen terse noterse Let you obtain shorter error messages window window=screensize Lines in window, can be reduced at slow terminals wordlength wl=4 Length of an ASCII-string found by w, W, b or B wrapscan ws Searches wrap around past the end of the file unixstyle nous The representation of ascii characters below 32 is displayed in the statusline as shown in ascii(7) if unset rather in DOS-style (^A) AUTHOR bvi was developed by Gerhard Buergmann, Vienna, Austria Gerhard.Buergmann@puon.at WWW Bvi Homepage: http://bvi.sourceforge.net/ Vi Pages: http://www.guckes.net/vi/clones.php3 (all about Vi and its clones) FILES $HOME/.bvirc editor startup file ./.bvirc editor startup file BUGS Bvi does not update the screen when the terminal changes its size. SEE ALSO vi(1), strings(1), ascii(5) 3/Jan/2004 BVI Version 1.3.2 bvi-1.3.2/html/new120.html0100644000567000056700000001344107773644363012746 0ustar bgbg BVI: CHANGES in bvi 1.2.0

Home

Quick Tutorial

Download
New in 1.3.2
New in 1.3.1
New in 1.3.0
New in 1.2.0

Installation

Command Overview

bmore

Deutsche Beschreibung


CHANGES in bvi 1.2.0 BVI

  • Configuration with GNU autoconfig
  • New :set options:
    • :set columns=n
      You can set the number of columns on the screen to an arbitrary value. This might be useful if you edit a file with a fixed record length.
      Default: max number of columns, divisible by four.
      Abbreviation: :set cm=n
    • :set memmove enables the new commands to insert or delete bytes.
      Per default this commands are disabled, because e.g. in executable files you must not move bytes.
      Default: :set nomemmove
      Abbreviation: :set mm - :set nomm
    • The listing for :set all is now in alphabetical order.
  • New insert and delete commands:
    • a inserts after cursor position
    • i inserts on cursor position
    • x deletes byte under cursor
    • X deletes byte before cursor
    • d delete command with modifiers:
      • dSPACE deletes byte under cursor
      • dfC deletes from current position to next character C
      • d/xyz deletes from current position to first matching pattern xyz
      • d$ deletes from current position to EOF
      • d'a deletes from current positions to mark a
      • dnG deletes from current position to byte with (decimal) address n
  • New syntax for p (put) command:
    In previous versions of bvi the p command did an overwriting "put". Now the bytes are inserted.
  • New command o (overwrite):
    This is an overwriting "put" command. It is the only command in bvi that uses a command key in a complete different way than in vi (o opens a new line in vi).
  • New syntax for y (yank) command:
    • ySPACE yanks byte under cursor
    • yfC yanks from current position to next character C
    • y/xyz yanks from current position to first matching pattern xyz
    • y$ yanks from current position to EOF
    • y'a yanks from current position to mark a
    • ynG yanks from current position to byte with (decimal) address n
  • New ex (colon) commands:
    • :a(ppend) a(scii)|b(binary)|d(ecimal)|h(exadecimal)|o(ctal)
    • :c(hange) a(scii)|b(binary)|d(ecimal)|h(exadecimal)|o(ctal)
    • :i(nsert) a(scii)|b(binary)|d(ecimal)|h(exadecimal)|o(ctal)
      The three commands above are used to append or change or insert bytes in the selected representation until you type a line containing only a dot, e.g. insert bytes in binary mode:
      	:i b
      	0 010 110 1110010 10 100
      	1 1001 1001 0 0
      	.
      	
      Pressing the RETURN key does not insert a newline - character into the file. If you use :i a (insert ascii) you can use the special characters \n, \r, \t and \0.
    • :d(elete)
    • :g(lobal) does a global search with printing found items
    • :ma(rk)
    • :pu(t) puts yanked bytes into the file
    • :o(verwrite) is an overwriting ":put"
    • :y(ank)
  • :f newname - bug fixed
  • new command line option -f script
  • CTRL - C aborts some commands, e.g. search commands
  • CR moves cursor to 1st column of next screen line
  • Local settings according to the environment variable LANG will be evaluated (see setlocal(3)).

Back to the topBack to the top


Last update: June, 1st 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/new130.html0100644000567000056700000000641407773644232012744 0ustar bgbg BVI: CHANGES in bvi 1.3.0

Home

Quick Tutorial

Download
New in 1.3.2
New in 1.3.1
New in 1.3.0
New in 1.2.0

Installation

Command Overview

bmore

Deutsche Beschreibung


CHANGES in bvi 1.3.0 BVI

  • In the configure script you can use --with-ncurses option to configure to specify an alternate search path for Ncurses outside the normal include/lib search path.

  • A make uninstall option has been added

  • A bmore program has been added. It acts like the BSD - text - more, but for binary files.

    Additional command line options:

    -a   ASCII mode
    Additional (changed) Commands:
    v   does not invoke vi but bvi
    w   invokes bvi with only that portion of the file which is displayed on the screen.
  • New in bvi:
    • You can edit now Block Special Files too.
    • You can read - edit - write files partly.
    • New Command line options:
      +cmd
      -b begin \
      -e end    > for partial file read
      -s size  /

      begin, end or size can be an integer value (decimal or hexadecimal) or an integer value with an appended k (for multiply by 1024) or m (for multiply by 1.048.576).
    • :e# bug fixed
    • Debian bug #68436 (Buffer overflow in io.c) fixed

Back to the topBack to the top


Last update: October 12th 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/overview.html0100644000567000056700000000563707774131523013576 0ustar bgbg BVI: Command Overview

Home

Quick Tutorial

Download

Installation

Command Overview
Cursor Movement
Edit Cmds
Yank and Put Cmds
Set Options
Colon (ex) Cmds
man - Page

bmore

Deutsche Beschreibung


Command Overview BVI

This overview compares bvi commands with the corresponding commands of the standard ascii vi.

Commands shown in blue frames are commands which are available in both bvi and vi, but with a slightly different behavior.
Green frames are used for commands which are equal in both bvi and vi.
Red frames are used for missing commands

Special keys are displayed in a gray font, e.g. RETURN, ARROW_UP or CTRL.

Topics:

Back to the topBack to the top


Last update: June 1st 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_bit.html0100644000567000056700000000722307774133106013202 0ustar bgbg BVI: Bit-wise Operations

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Bit-wise Operations
BVI

To perform logical operations, bvi has a set of bit-level commands. The following commands are available:

:rl nrotate left n is a number from 1 through 7
:rr nrotate right
:sr nshift right
:sl nshift left
:and iand operation i is a number from 0 through 255
:or ior operation
:xor ior operation
:not negates operation
:neg negates operation

The i value can be entered as a decimal number (0 - 255), a hexadecimal number with a leading zero (0 - 0ff) or a binary number, either with a leading B (B101) or exactly eight digits long (00000101).

On default the whole file is affected, but you can use the usual colon command address forms. In contrast to vi the addresses designate not line numbers but byte numbers. These addresses can be enterd in decimal or hexadecimal notation.
Examples:

:100,500and 01A RETURN
:03FA,01000or 00001000 RETURN
:.rr 3 RETURN
:'a,$sl 1 RETURN

Back to the topBack to the top


Last update: Thu Jun 01 12:00:00 CEST 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_edit.html0100644000567000056700000001153407774133041013347 0ustar bgbg BVI: Editing Files

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick tutorial
Editing Files
BVI

Inserting or deleting bytes can be dangerous on some kind of files, because binary files are mostly executables, database files or maybe graphic files. So you must not shift the remaining bytes to another address. Therefor commands for inserting or deleting bytes are disabled by default. You can use the r command to change a single byte, or the R command to replace multiple characters. You can use a numeric prefix for both commands.

You can add characters at the end of the file using the A command. If you start with an empty file, you can create a binary file from scratch. If the cursor is in the ASCII section of the screen and you type 100AxESC, you create a file which contents 100 x'es.

The D command can be used to truncate a file at a certain position. Since there are no lines in a binary file, the D command deletes to end of file.

If you have to edit a binary file where it does not matter to move bytes to a different address, you can enable the insert and delete commands by typing :set memmove. Now you are able to use the i command for inserting bytes, the x or X command to delete the byte over or before the cursor and those types of d commands, which does not rely on text lines (e.g. dSPACE, dfC, d/xyz, d$, d'a, dnG).

All edits can be undone by pressing the u key.

Using ex (colon) commands

The edit commands of the ex editor are usually not available in standard vi implementations (:i[nsert], :a[ppend] and :c[hange]). In bvi they are available with extended options. There are five modifiers a[scii], b[inary], d[ecimal], h[exadecimal] and o[ctal] (ascii is default). Therefor you can insert, append or change data in all five representations.

Example:
you would like to append a file with data available in decimal representation:

:a d
0 12 3 128 255 17 0 0 255 255
23 24 25 128 6 6 6
.
A line with only a period (.) in it will terminate the command.
You must not type values greater than a byte value (255 decimal, FF hex). This causes an abandon of the command.
Pressing the RETURN key does not insert a newline - character into the file. If you use :i a (insert ascii) you can use the special characters \n, \r, \t and \0.

An additional advantage is, that all typed bytes are inserted into the file at once. If you insert characters in vi - mode, for every byte typed, the whole remaining file has to be moved one position backwards.

Back to the topBack to the top


Last update: June 1st 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_find.html0100644000567000056700000000671507774133214013351 0ustar bgbg BVI: Find and Replace

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Find and Replace
BVI

The :s (substitute) command behaves a little bit different to that of vi. If you type a command like this in vi   :s/XXXX/UU/ then the four XXXX's are replaced by two UU's. This means, the file size decreases and all characters after the replacement are moved to another position in the file. Since bvi does not move characters, only two XX's are replaced by two UU's and the third and fourth X still remains in the file.
Another example:

:0,500s/Taste\0/Key\0/RETURN

This command replaces within the first 500 bytes of a file the 0 - terminated ASCII string "Taste" with the 0 - terminated string "Key". After the substitution you will find a character sequence "Key\0e\0" in the file.
CAUTION: If the replace string is longer than the find string, additional bytes are overwritten!
This behaviour will not be changed by setting the :set memmove option!

Of course you can do also binary substitutions, similar to the search command. The ability of remembering patterns like \(pattern\) is currently not implemented.

Back to the topBack to the top


Last update: Fri Jun 30 22:33:20 CEST 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_partial.html0100644000567000056700000001302107774133227014055 0ustar bgbg BVI: Partial File Read

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Partial File Read
BVI

A new feature of version 1.3.0 is the Partial File Read. If you want to edit a file, you have not to read the file into memory but only the part you want to edit. You can write back this part into the file after editing.
Example:
You have to change only some bytes of the header of a graphic file (e.g. a color). Graphic files can be very large. With the -s option you can load only the first kilobyte of the file:

             bvi -s 1000 large.gif
In this case of course you cannot insert or delete bytes of the file. The editor is set to the no memmove mode. You can write back only as much bytes as you read before. If you add or delete bytes even though, the extra bytes will be ignored or garbage will be written to the file.

It is also possible to start not at the begin of the file, but at a certain address. To do this you have to use the option -b. You can read the file from this starting point until the end of the file or you can use the -s option to specify a size or the -e option to specify an end address.

If you read the file not from the start an offset will be set to display the correct address at the left side of the screen. If you change this offset with the :set offset=nnnn command, this has no effect to the write back operation. The edited part of the file will always be written back at the same position, where it was read.

In the Linux /proc directory there are files which are listed with length 0 in a directory listing. But in reality they have a content. You can read this files, if you use the -s option and guess a size. This size should be a little bit larger than the size you expect.

The same guidlines can be used, if you load a block device, e.g. a floppy disk.

             bvi -s 1450k /dev/fd0
After reading the device, you get a message with the value of the real read bytes at the bottom of the screen:
             "/dev/fd0" range 0-1474559
Note that the size value will be used to allocate memory before reading the file. Therefore do not choose a too large size.
Note further, that 1450k in the example above is calculated as 1450 * 1024 bytes. This gives 1484800 bytes allocated size. If bvi reads the exact number of bytes you have asked for in the -s option, the file may be larger.

WARNING:

Do not use bvi at mounted disk devices!
Do not edit disk devices, if you don't know exactly what you change!
You may make your disk unreadable by editing it!!

Interaction with bmore

You may use bmore to browse through large files or devices. You may use the ASCII - or Hex - search possibilities to locate a certain section of the file.
If you see the desired part of the file on your screen, press w to read the contents of the file displayed currently on your screen into bvi. You can use a decimal prefix at the w - command to read more or less bytes than displayed into bvi.
The letter w is the next letter after v, which is used in more and bmore to read the whole file into vi or bvi!

If you used the ZZ or :w command, this part of the file will be written back into the original file.

Back to the topBack to the top


Last update: Sun Jul 09 21:57:38 CEST 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_search.html0100644000567000056700000001027507774133243013674 0ustar bgbg BVI: Search Commands

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Search Commands
BVI

Additional to the well known / and ? for searching ASCII strings there are two new commands for searching binary strings. These are the keys \ and #.

In the ASCII search commands / and ? you can use \n, \r, \t and \0. You can also use regular expressions. Do not use ^ and $, because there are no lines in a binary file. Type /foo\0RETURN to search for the null terminated string foo in the file.

In the Hex section you can search for a sequence of bytes in hexadecimal notation, e.g. \01 AF 12RETURN, which is the same as \01AF12 RETURN. You can also use regular expressions and quoted ASCII strings. Inside of the quotes no character is treated as a special character!
Example:   \01 [^AF DE] "foo" 00 RETURN
This means: Search for a string beginning with 01, the second character must not be a hex AF or DE, followed by the ASCII characters foo, terminated with a binary zero.

Global Search

There is also a global search option available, but only with the print option.
Example:
:g/text_pattern/pRETURN
or
:g\hex_pattern\pRETURN
This commands are displaying all found patterns, one per screen line. Of course you can limit the search to a certain part of the file by specifying the starting and ending address.
Other forms of the global search command are line oriented, therefor not useful for binary files and not implemented, e.g.
:g/pattern/dDelete all lines containing pattern
:g/pattern/yYank all lines containing pattern
:g!/pattern/pPrint all lines not containing pattern

Back to the topBack to the top


Last update: Thu Jun 01 12:00:00 CEST 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_set.html0100644000567000056700000001076007774133256013225 0ustar bgbg BVI: Settings

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Settings
BVI

To customize bvi some additional :set options are available. You can add them to your .bvirc file, if you need them all the time.

columns

You can set the number of columns on the screen to an arbitrary value. This might be useful if you edit a file with a fixed record length.
Default value is the max. number of columns, divisible by four.
Example: :set columns=13RETURN
Abbreviation: :set cm=9RETURN

memmove

This option enables the commands for inserting and deleting bytes.
Default: :set nomemmoveRETURN
Abbreviation: :set mmRETURN

offset

You can change the beginning of the displayed byte numbering to a certain number. The default address of the first byte is 0. You can change it to 1 or to any other number by typing:
  :set offset=1RETURN
You can also use a hexadecimal address, if you type a leading zero:
  :set of=01FFRETURN
The only commands which are not affected by these numbering is :f or CTRL -G. These commands always designates the first byte in file as 1.

unixstyle

The rightmost character in the status line displays the ASCII value of the current byte. For values below 32 you can use the notation used on the ascii(7) man page (like NUL, SOH, STX etc.) if you do a
:set unixstyleRETURN or a
:set usRETURN. If you do a
:set nousRETURN you get a DOS style representation (^A, ^B, ^C etc.).

wordlength

This setting is used to define the minimum length of a "word". A "word" is a sequence of ASCII characters within a binary file. The commands w, b, e, W, B and E are affected by this setting.

Default: :set wordlength=4RETURN
Abbreviation: :set wl=4RETURN

Back to the topBack to the top


Last update: Thu Jun 01 12:00:00 CEST 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/qt_yank.html0100644000567000056700000001111507773645126013372 0ustar bgbg BVI: Yank and Put

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial
Yank and Put
BVI

Starting with version 1.2.0 there is a new syntax for the yank and put commands! Yank is now more similare to vi.

ySPACE yanks byte under cursor
nySPACE yanks n bytes, beginning at cursor position
yfC yanks from current position to next character C
y/xyz yanks from current position to first matching pattern xyz
y$yanks from current position to EOF
y'a yanks from current position to mark a
ynG yanks from current position to byte with (decimal) address n
o overwrites the bytes after the cursor with the contents of the yank or delete buffer
pputs the contents of the yank or delete buffer after the cursor
Pappends the contents of the buffer to end of file

Using ex (colon) Commands

:y(ank)
yank can be used with one or two addresses specified. One address with no count specified copies the specified byte into the buffer. Two addresses with no count specified copies multiple bytes starting and ending with the specified bytes. Two addresses and a count value copies count bytes starting at the second specified address (the first address is ignored). If no address is specified, the current address ist used by yank.
Examples:
:start_addr,end_addr y RETURN
:start_addr y byte_countRETURN
:y byte_countRETURN

:pu(t)

Restores previously deleted or yanked bytes after the address specified in the put command.

:o(verwrite)

Overwrites bytes after the specified address with previously deleted or yanked bytes.

NOTE: There are currently no namend buffers available.

Back to the topBack to the top


Last update: June 1st 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/quick.html0100644000567000056700000001341207773644632013043 0ustar bgbg BVI: Quick Tutorial

Home

Quick Tutorial
Editing Files
Search Commands
Bit-wise Operations
Find and Replace
Yank and Put
Settings
Partial File Read

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Quick Tutorial BVI

This tutorial will explain all commands which behaves different to vi. Note that, if you are on a Linux system, you will probably have an 'improved' version of vi. Bvi is more similar to the standard version.

The Screen

000000
00000C
000018
000024
000030
00003C
000048
000054
000060
00006C
000078
000084
000090
00009C
 7F 45 4C 46 01 01
 00 00 00 00 01 00
 00 00 00 00 00 00
 00 00 00 00 34 00
 0C 00 09 00 00 00
 00 00 00 00 55 89
 53 C7 45 A4 00 00
 00 00 00 83 7D 08
 8C 02 00 00 E9 6F
 00 00 00 00 6A 03
 45 08 50 E8 FC FF
 0C 85 D2 75 17 6A
 E9 43 02 00 00 8D
 0C 85 D2 75 0D C7
 01 00 00 00 00 00
 03 00 01 00 00 00
 00 00 0C 07 00 00
 00 00 00 00 28 00
 00 00 00 00 00 00
 E5 83 EC 68 57 56
 00 00 C7 45 A0 01
 00 75 13 6A 00 E8
 02 00 00 8D B4 26
 68 90 00 00 00 8B
 FF FF 89 C2 83 C4
 01 E8 60 02 00 00
 74 26 00 8D BC 27
 45 A0 00 00 00 00
 .ELF........
 ............
 ............
 ....4.....(.
 ............
 ....U....hWV
 S.E......E..
 ....}..u.j..
 .....o.....&
 ....j.h.....
 E.P.........
 ...u.j..`...
 .C....t&...'
 ...u..E.....
"set.o" 3500 bytes 000001 \105 0x45 69 'E'

The screen is divided into four areas, symbolized by four different colors. The magenta area contents the addresses in hexadecimal notation. The green area contents the values of the edited file in hexadecimal notation. The red area contents the same bytes in ASCII representation. The yellow status line displays on the left side the current status messages and on the right site the current position of the cursor and the value of the byte on this address in octal, hexadecimal, decimal and ASCII notation.
You can toggle between the Hex and ASCII value of the same byte by pressing the TAB key both in command and input mode.

Command Line Options

There are some additional command line options in bvi:
-f script
This command provides a means for collecting a series of ex (colon) commands into a script file, then using this file to edit other files. Since there is no binary stream editor bsed, you can use this option to make several global changes in a binary file. You can do this of course with the source command (:so file) from within bvi too.
-b begin
This option causes bvi to load a file not from start but from address begin.
-e end
This option causes bvi to load a file not till end but till address end.
-s size
This option causes bvi not to load the complete file but only size bytes. This option can also be used to read a file reported with a length 0 like some files in the Linux /proc directory.

begin, end or size can be an integer value (decimal or hexadecimal) or an integer value with an appended k (for multiply by 1024) or m (for multiply by 1.048.576).

You should use at most two of the three address options to avoid ambiguity!

Not Implemented Commands

  • :map and :unmap (Macros)
  • :abbreviate (:ab) and :una
  • no named buffers.

Back to the topBack to the top


Last update: October 19th 2000 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/rpm.html0100644000567000056700000000044107412100442012473 0ustar bgbg Source RPM Switching to http://sites.inka.de/mips/unix/index.html . . . bvi-1.3.2/html/set.html0100644000567000056700000001040707774132672012520 0ustar bgbg BVI: Set Commands
Command Overview
Set Commands
BVI

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

CommandBVIVI
Search
settings
:set wrapscan or :set ws
:set nows
When this option is set, pattern searches resulting from a /, ?, n, N (#, \) command automatically wrap around to the opposit end of the file and continue whenever the beginning or end of a file is reached.
:set ignorecase or :set ic
:set noic
Uppercase and lowercase characters in text are treated identically in regular expression matching
:set magic
:set nomagic
Enables metacharacters for use in regular expressions
Display
options
:set showmode
:set noshowmode
Displays a status message in the lowest line on the screen
:set terse
:set noterse
The terse option lets you obtain shorter error diagnostics.
File
options
:set readonly or :set ro
:set noro
This option sets the read-only flag for the file being editeds, thus preventing accidental overwriting at the end of the session.
:set autowrite or :set aw
:set noaw
Causes the contents of the buffer to be written to the current file if you have modified them and given a :next, :rewind or ! command.
bvi
options
:set columns=13
:set cm=5
You can set the number of bytes displayed in on screenline. Default is max. number divisible by four.
:set memmove
:set nomm
If memmove is set, you can use commands to insert or delete bytes. This can be dangerous for e.g. executable programs. Default is nomemmove.
:set offset=1
:set of=5
An offset is added to all addresses and byte counts. Default address of the first byte is 0.
:set wordlength=5
:set wl=8
Length of an ASCII-string found by w, W, b or B
:set unixstyle
:set nous
displays ASCII characters below 32 in the status line in Unix-style instead of DOS-style
Not available.

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

Back to the topBack to the top


Last update: October 30th 1999 by Gerhard Bürgmann, Purkersdorf/Austria bvi-1.3.2/html/sitemap.html0100644000567000056700000000677607773644503013405 0ustar bgbg BVI: Sitemap

Home

Quick Tutorial

Download

Installation

Command Overview

bmore

Deutsche Beschreibung


Sitemap BVI

Back to the topBack to the top


Last update: January 8th 2004 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/yank.html0100644000567000056700000001217607774132652012672 0ustar bgbg BVI: Yank and Put Commands
Command Overview
Yank and Put Commands
BVI

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

NOTE: the o command (overwriting put) is the only command in bvi that uses a key for a complete different purpose than in vi.

CommandBVIVI
Put
bytes
  p   put the contents of the yank or delete buffer after cursor position
  P  append the contents of the yank or delete buffer at EOF
  P  put the contents of the yank or delete buffer before cursor position
  o  overwrite the following bytes with the contents of the yank or delete buffer
not available
Yank
bytes
ySPACEyank byte at cursor position
yfC yank from current position to next character C
y/xyz yank from current position to matching pattern xyz
y?xyz yank from current position to matching pattern xyz in reverse direction
y'ayank from current position to mark a
ynGyank from current position to byte with (decimal) address n
not available
yy  yank line
y)yank from cursor position through first following end of sentence
y}yank from cursor position through first following end of paragraph
y]yank from cursor position through first following end of section
y\6a 56 ff   yank from cursor position to first occurance of hex pattern 6a 56 ff
y#6a 56 ff   yank from cursor position to first occurance of hex pattern 6a 56 ff in reverse direction
not available
  y$  yank from current position to EOF
  y$  yank from current position to end of line

Note that most of the commands can be used with a decimal repeat count in front of the command!

[ Cursor Movements | Edit Cmds | Yank and Put Cmds | Set Options | Colon (ex) Cmds ]

Back to the topBack to the top


Last update: October 30th 1999 by Gerhard Bürgmann, Purkersdorf/Austria bvi-1.3.2/html/new131.html0100644000567000056700000000513507773644013012741 0ustar bgbg BVI: CHANGES in bvi 1.3.1

Home

Quick Tutorial

Download
New in 1.3.2
New in 1.3.1
New in 1.3.0
New in 1.2.0

Installation

Command Overview

bmore

Deutsche Beschreibung


CHANGES in bvi 1.3.1 BVI

This is a bugfix release.

BVI:

  • autoconf 2.52 used

  • do_back() fixed (cast)
  • replace sys_errlist[errno] with strerror(errno) (Debian #106762)
  • fix: one can continue deleting bytes even when file is empty (Debian #121934)
  • wish: no ":set mm" to delete bytes from end of file (Debian #122240)
  • cast for alloc_buf() in set.c
  • r-bug fix in edit.c and bvi.c
  • renamed CTRL to BVICTRL (AIX problem)
BMORE:
  • nicer last line
  • bmbeep() instead of beep() (SOLARIS problem)
  • subshell support fixes

Back to the topBack to the top


Last update: February 12th 2002 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/html/new132.html0100644000567000056700000000477407773644032012753 0ustar bgbg BVI: CHANGES in bvi 1.3.2

Home

Quick Tutorial

Download
New in 1.3.2
New in 1.3.1
New in 1.3.0
New in 1.2.0

Installation

Command Overview

bmore

Deutsche Beschreibung


CHANGES in bvi 1.3.2 BVI

This is a bugfix release.

BVI:

  • ported to compile under DJGPP v2.0 w/ PDCURSES (by simoN)
  • some minor fixes


BMORE:
  • configure: checking term.h and ncurses/term.h
  • cast in bmore.c in putline();
  • fixed multiple file handling for "bmore" (by simoN)
  • renamed several local screen processing routines to avoid compiler conflicts
  • several minor fixes to "bmore" code (by simoN)
  • reset tty after CTRL-C in bmore


Back to the topBack to the top


Last update: January 8th 2004 by Gerhard Bürgmann, Purkersdorf/Austria
bvi-1.3.2/install-sh0100775000567000056700000001425307573060066012076 0ustar bgbg#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "$0: no input file specified" >&2 exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d "$dst" ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "$0: $src does not exist" >&2 exit 1 fi if [ x"$dst" = x ] then echo "$0: no destination specified" >&2 exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d "$dst" ] then dst=$dst/`basename "$src"` else : fi fi ## this sed command emulates the dirname command dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp='' while [ $# -ne 0 ] ; do pathcomp=$pathcomp$1 shift if [ ! -d "$pathcomp" ] ; then $mkdirprog "$pathcomp" else : fi pathcomp=$pathcomp/ done fi if [ x"$dir_arg" != x ] then $doit $instcmd "$dst" && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename "$dst"` else : fi # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/#inst.$$# rmtmp=$dstdir/#rm.$$# # Trap to clean up temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && # Now remove or move aside any old file at destination location. We try this # two ways since rm can't unlink itself on some systems and the destination # file might be busy for other reasons. In this case, the final cleanup # might fail but the new file should still install successfully. { if [ -f "$dstdir/$dstfile" ] then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } bvi-1.3.2/io.c0100644000567000056700000002005007770545674010647 0ustar bgbg/* io.c - file in/out and alloc subroutines for BVI * * 1996-02-28 V 1.0.0 * 1999-01-20 V 1.1.0 * 1999-04-27 V 1.1.1 * 1999-07-02 V 1.2.0 beta * 1999-10-15 V 1.2.0 final * 2000-03-23 V 1.3.0 beta * 2000-08-17 V 1.3.0 final * 2004-01-04 V 1.3.2 * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2004 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include "bvi.h" #include "set.h" #include #ifndef SIZE_T_MAX # define SIZE_T_MAX ULONG_MAX #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_FCNTL_H # include #endif int filemode; static struct stat buf; static off_t block_read; char *terminal; /*********** Save the patched file ********************/ int save(fname, start, end, flags) char *fname; char *start; char *end; int flags; { int fd; char string[255]; char *newstr; off_t filesize; if (!fname) { emsg("No file|No current filename"); return 0; } if (stat(fname, &buf) == -1) { newstr = "[New file] "; } else { if (S_ISDIR(buf.st_mode)) { sprintf(string, "\"%s\" Is a directory", fname); msg(string); return 0; } else if (S_ISCHR(buf.st_mode)) { sprintf(string, "\"%s\" Character special file", fname); msg(string); return 0; } else if (S_ISBLK(buf.st_mode)) { /* sprintf(string, "\"%s\" Block special file", fname); msg(string); return 0; */ } newstr = ""; } if (filemode == PARTIAL) flags = O_RDWR; if ((fd = open(fname, flags, 0666)) < 0) { sysemsg(fname); return 0; } if (filemode == PARTIAL) { if (block_read) { filesize = block_read; sprintf(string, "\"%s\" range %lu-%lu", fname, (unsigned long)block_begin, (unsigned long)(block_begin - 1 + filesize)); if (lseek(fd, block_begin, SEEK_SET) < 0) { sysemsg(fname); return 0; } } else { msg("Null range"); return 0; } } else { filesize = end - start + 1L; sprintf(string, "\"%s\" %s%lu bytes", fname, newstr, (unsigned long)filesize); } if (write(fd, start, filesize) != filesize) { sysemsg(fname); close(fd); return 0; } close(fd); edits = 0; msg(string); return 1; } /* loads a file, returns the filesize */ off_t load(fname) char *fname; { int fd = -1; char string[MAXCMD]; buf.st_size = 0L; if (fname != NULL) { sprintf(string, "\"%s\"", fname); msg(string); refresh(); if (stat(fname, &buf) == -1) { filemode = NEW; } else if (S_ISDIR(buf.st_mode)) { filemode = DIRECTORY; } else if (S_ISCHR(buf.st_mode)) { filemode = CHARACTER_SPECIAL; } else if (S_ISBLK(buf.st_mode)) { filemode = BLOCK_SPECIAL; if (!block_flag) { block_flag = 1; block_begin = 0; block_size = 1024; block_end = block_begin + block_size - 1; } if ((fd = open(fname, O_RDONLY)) > 0) { P(P_RO) = TRUE; params[P_RO].flags |= P_CHANGED; } else { sysemsg(fname); filemode = ERROR; } } else if (S_ISREG(buf.st_mode)) { if ((unsigned long)buf.st_size > (unsigned long)SIZE_T_MAX) { move(maxy, 0); endwin(); printf("File too large\n"); exit(0); } if ((fd = open(fname, O_RDONLY)) > 0) { filemode = REGULAR; if (access(fname, W_OK)) { P(P_RO) = TRUE; params[P_RO].flags |= P_CHANGED; } } else { sysemsg(fname); filemode = ERROR; } } } else { filemode = NEW; } if (mem != NULL) free(mem); memsize = 1024; if (block_flag) { memsize += block_size; } else if (filemode == REGULAR) { memsize += buf.st_size; } if ((mem = (char *)malloc(memsize)) == NULL) { move(maxy, 0); endwin(); printf("Out of memory\n"); exit(0); } clear_marks(); if (block_flag && ((filemode == REGULAR) || (filemode == BLOCK_SPECIAL))) { if (lseek(fd, block_begin, SEEK_SET) < 0) { sysemsg(fname); filemode = ERROR; } else { if ((filesize = read(fd, mem, block_size)) == 0) { sprintf(string, "\"%s\" Empty file", fname); filemode = ERROR; } else { sprintf(string, "\"%s\" range %lu-%lu", fname, (unsigned long)block_begin, (unsigned long)(block_begin + filesize - 1)); filemode = PARTIAL; block_read = filesize; P(P_OF) = block_begin; params[P_OF].flags |= P_CHANGED; } msg(string); refresh(); } } else if (filemode == REGULAR) { filesize = buf.st_size; if (read(fd, mem, filesize) != filesize) { sysemsg(fname); filemode = ERROR; } } else { filesize = 0L; } if (fd > 0) close(fd); if (fname != NULL) { switch (filemode) { case NEW: sprintf(string, "\"%s\" [New File]", fname); break; case REGULAR: sprintf(string, "\"%s\" %s%lu bytes", fname, P(P_RO) ? "[Read only] " : "", (unsigned long)filesize); break; case DIRECTORY: sprintf(string, "\"%s\" Directory", fname); break; case CHARACTER_SPECIAL: sprintf(string, "\"%s\" Character special file", fname); break; case BLOCK_SPECIAL: sprintf(string, "\"%s\" Block special file", fname); break; } if (filemode != ERROR) msg(string); } pagepos = mem; maxpos = mem + filesize; loc = HEX; x = AnzAdd; y = 0; repaint(); return(filesize); } /* argument "dir" not used! * Needed for DOS version only */ void bvi_init(dir) char *dir; { char *initstr; char rcpath[MAXCMD]; terminal = getenv("TERM"); shell = getenv("SHELL"); if (shell == NULL || *shell == '\0') shell = "/bin/sh"; if ((initstr = getenv("BVIINIT")) != NULL) { docmdline(initstr); return; } #ifdef DJGPP strcpy(rcpath, "c:"); strcpy(rcpath, dir); poi = strrchr(rcpath, '\\'); *poi = '\0'; strcat(rcpath, "\\BVI.RC"); read_rc(rcpath); read_rc("BVI.RC"); #else strncpy(rcpath, getenv("HOME"), MAXCMD - 8); rcpath[MAXCMD - 8] = '\0'; strcat(rcpath, "/.bvirc"); if (stat(rcpath, &buf) == 0) { if (buf.st_uid == getuid()) read_rc(rcpath); } strcpy(rcpath, ".bvirc"); if (stat(rcpath, &buf) == 0) { if (buf.st_uid == getuid()) read_rc(rcpath); } #endif } int enlarge(add) off_t add; { char *newmem; off_t savecur, savepag, savemax, saveundo; savecur = curpos - mem; savepag = pagepos - mem; savemax = maxpos - mem; saveundo = undo_start - mem; if (mem == NULL) { newmem = malloc(memsize + add); } else { newmem = realloc(mem, memsize + add); } if (newmem == NULL) { emsg("Out of memory"); return 1; } mem = newmem; memsize += add; curpos = mem + savecur; pagepos = mem + savepag; maxpos = mem + savemax; undo_start = mem + saveundo; current = curpos + 1L; return 0; } void do_shell() { addch('\n'); savetty(); #ifdef DJGPP system(""); #else system(shell); #endif resetty(); } #ifndef HAVE_STRDUP char * strdup(s) char *s; { char *p; size_t n; n = strlen(s) + 1; if ((p = (char *)malloc(n)) != NULL) memcpy(p, s, n); return (p); } #endif #ifndef HAVE_MEMMOVE /* * Copy contents of memory (with possible overlapping). */ char * memmove(s1, s2, n) char *s1; char *s2; size_t n; { bcopy(s2, s1, n); return(s1); } #endif off_t alloc_buf(n, buffer) off_t n; char **buffer; { if (*buffer == NULL) { *buffer = (char *)malloc(n); } else { *buffer = (char *)realloc(*buffer, n); } if (*buffer == NULL) { emsg("No buffer space available"); return 0L; } return n; } int addfile(fname) char *fname; { int fd; off_t oldsize; if (stat(fname, &buf)) { sysemsg(fname); return 1; } if ((fd = open(fname, O_RDONLY)) == -1) { sysemsg(fname); return 1; } oldsize = filesize; if (enlarge(buf.st_size)) return 1; if (read(fd, mem + filesize, buf.st_size) == -1) { sysemsg(fname); return 1; } filesize += buf.st_size; maxpos = mem + filesize; close(fd); setpage(mem + oldsize); return 0; } bvi-1.3.2/Makefile.in0100644000567000056700000000463607701023672012134 0ustar bgbg# bvi - Binary Visual Editor Makefile # # This is the Makefile for bvi - binary visual editor. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the actual # Makefile, run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # # Copyright (c) 1996-2003 by Gerhard Buergmann # gerhard@puon.at # # 1996-01-18 V 1.0.0 # 1999-01-15 V 1.1.0 # 1999-03-03 V 1.1.1 # 1999-10-22 V 1.2.0 # 2000-05-31 V 1.3.0 beta # 2000-10-01 V 1.3.0 final # 2003-07-03 V 1.3.2 # ############################################### srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = $(DESTDIR)@bindir@ mandir = $(DESTDIR)@mandir@ libdir = $(DESTDIR)@libdir@ man1dir = $(mandir)/man1 OBJS = bvi.o comm.o set.o re.o io.o edit.o recomp.o HEADER = bvi.h set.h BMOBJ = bmore.o bm_unix.o recomp.o CC = @CC@ CFLAGS = @CFLAGS@ @CPPFLAGS@ DEFS = @DEFS@ LDFLAGS= @LDFLAGS@ LIBS = @LIBS@ SHELL = /bin/sh INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ all: bvi bmore bvi: $(OBJS) $(CC) $(LDFLAGS) -o bvi $(OBJS) $(LIBS) bmore: $(BMOBJ) $(CC) $(LDFLAGS) -o bmore $(BMOBJ) $(LIBS) .c.o: $(CC) $(CFLAGS) $(DEFS) -c $< bmore.o: bmore.c $(CC) $(CFLAGS) $(DEFS) -DHELPFILE=\"$(libdir)/bmore.help\" -c $< install: all installdirs @echo "Installing bvi" @$(INSTALL_DATA) bvi.1 bmore.1 $(man1dir) @$(INSTALL_PROGRAM) -s bvi $(bindir) @$(INSTALL_PROGRAM) -s bmore $(bindir) @$(INSTALL_DATA) bmore.help $(libdir) @if [ -f $(bindir)/bview ]; then rm $(bindir)/bview; fi @if [ -f $(bindir)/bvedit ]; then rm $(bindir)/bvedit; fi @ln $(bindir)/bvi $(bindir)/bview @ln $(bindir)/bvi $(bindir)/bvedit installdirs: $(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(libdir) $(man1dir) uninstall: @echo "Uninstalling bvi" @if [ -f $(bindir)/bview ]; then rm $(bindir)/bview; fi @if [ -f $(bindir)/bvedit ]; then rm $(bindir)/bvedit; fi @if [ -f $(bindir)/bvi ]; then rm $(bindir)/bvi; fi @if [ -f $(bindir)/bmore ]; then rm $(bindir)/bmore; fi @if [ -f $(libdir)/bmore.help ]; then rm $(libdir)/bmore.help; fi @if [ -f $(man1dir)/bvi.1 ]; then rm $(man1dir)/bvi.1; fi @if [ -f $(man1dir)/bmore.1 ]; then rm $(man1dir)/bmore.1; fi clean: rm -f core *.o bvi bvi.exe bmore bmore.exe a.out distclean: clean rm -f Makefile config.cache config.h config.log config.status bvi-1.3.2/mkinstalldirs0100775000567000056700000000370407556233124012675 0ustar bgbg#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here bvi-1.3.2/patchlevel.h0100644000567000056700000000003010012766011012335 0ustar bgbg#define VERSION "1.3.2" bvi-1.3.2/README0100644000567000056700000000210707625245606010746 0ustar bgbgBVI - Binary visual editor ========================== http://bvi.sourceforge.net/ This editor for binary files was written by Gerhard Buergmann and is distributed under the GPL (GNU Public License). How to compile ============== gunzip -c bvi-1.3.2.tar.gz | tar xvf - cd bvi-1.3.2 ./configure make make install MAC OS X ======== Looks like the curses implementation in Darwin is really limited. You should install and use ncurses instead. You can download it from ftp.gnu.org; install it and then use ./configure --with-ncurses=/usr/local/ncurses-5.2 HTML documentation in subdirectory html/ Subscribe to the bvi mailing for support, updates and other news: Send a blank email to bvi-subscribe@yahoogroups.com. You will receive a subscription confirmation message. Simply reply this message and your subscription will be complete. ------------------------------------------------------------------------ PLEASE send any bug reports (and fixes), code for new features, comments, questions, etc. (even flames) to: Gerhard Buergmann Vienna, Austria E-mail: gerhard@puon.at bvi-1.3.2/re.c0100644000567000056700000003214007743755542010646 0ustar bgbg/* re - regular expression search for bvi * * NOTE: Edit this file with tabstop=4 ! * * 1996-01-06 created; * 1999-01-19 V 1.1.0 * 1999-03-17 V 1.1.1 * 1999-09-10 V 1.2.0 * 2000-04-25 V 1.3.0 beta * 2000-09-29 V 1.3.0 final * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ /* You cannot use a common regexp subroutine, because \0 is a regular * character in a binary string ! */ #include "bvi.h" #include "set.h" static int sbracket(); char act_pat[MAXCMD]; /* found pattern */ char pattern[MAXCMD + 1]; char search_pat[BUFFER]; /* / or ? command */ char *notfound = "Fail|Pattern not found"; char *noprev = "No previous expression"; char *emptyclass = "Bad character class|Empty byte class '[]' or '[^]' cannot match"; int bregexec(start, scan) PTR start; char *scan; { char *act; int count, test; act = act_pat; while (*scan != 0) { switch (*scan++) { case ONE: /* exactly one character */ count = *scan++; if (P(P_IC) && smode == ASCII) test = toupper(*start); else test = *start; if (count == 1) { if (test != *scan) return 0; scan++; } else if (count > 1) { if (sbracket(test, scan, count)) return 0; scan += count; } *act++ = *start++; break; case STAR: /* zero or more characters */ count = *scan++; if (P(P_IC) && smode == ASCII) test = toupper(*start); else test = *start; if (count == 1) { /* only one character, 0 - n times */ while(test == *scan) { *act++ = *start++; if (P(P_IC) && smode == ASCII) test = toupper(*start); else test = *start; } scan++; } else if (count > 1) { /* characters in bracket */ if (*scan == '^') { while (start < maxpos) { if (bregexec(start, scan + count)) { *act = '\0'; return 1; } if (sbracket(test, scan, count)) return 0; *act++ = *start++; if (P(P_IC) && smode == ASCII) test = toupper(*start); else test = *start; } } else { while(!sbracket(test, scan, count)) { *act++ = *start++; if (P(P_IC) && smode == ASCII) test = toupper(*start); else test = *start; } scan += count; } } else { /* ".*" */ while (start < maxpos) { if (bregexec(start, scan)) { *act = '\0'; return 1; } start++; } } } } *act = '\0'; return 1; /* found */ } static int sbracket(start, scan, count) int start; char *scan; int count; { if (*scan++ == '^') { if (!memchr(scan, start, --count)) return 0; } else { if (memchr(scan, start, --count)) return 0; } return 1; } PTR end_word(start) PTR start; { PTR pos; pos = start; if (!isprint(*pos & 0xff)) return start; while (isprint(*pos & 0xff)) if (pos++ > maxpos) return start; return --pos; } /* wordsearch serves the 'W' and 'w' - command */ PTR wordsearch(start, mode) PTR start; char mode; { PTR found; PTR pos; int ccount; pos = start + 1; do { while (isprint(*pos & 0xff)) if (pos++ > maxpos) return start; while (!isprint(*pos & 0xff)) if (pos++ > maxpos) return start; found = pos; ccount = 0; while (isprint(*pos & 0xff)) { if (pos++ > maxpos) return start; ccount++; } if (ccount < P(P_WL)) continue; if (mode == 'W') { if (*pos == '\0' || *pos == '\n') return found; } else { return found; } } while (pos < maxpos); return start; } /* backsearch serves the 'b' and 'B' command */ PTR backsearch(start, mode) PTR start; char mode; { PTR pos; int ccount; pos = start - 1; do { if (mode == 'B') { while (*pos != '\0' && *pos != '\n') if (pos-- < mem) return start; } else { while (!isprint(*pos & 0xff)) if (pos-- < mem) return start; } pos--; ccount = 0; while (isprint(*pos & 0xff)) { if (pos-- < mem) return start; ccount++; } if (ccount >= P(P_WL)) return (pos + 1); } while (pos > mem); return start; } /* used by :s */ int do_substitution(delim, line, startpos, endpos) int delim; char *line; PTR startpos; PTR endpos; { int n; char *found; char *cmd = NULL; int repl_count = 0; int global = 0; int conf = 0; static int direct; static int pat_len = -1; static int ch; static char find_pat[BUFFER]; static char repl_pat[MAXCMD]; ignore_case = P(P_IC); magic = P(P_MA); switch (delim) { case '/': case '?': ch = delim; direct = (ch == '/' ? FORWARD : BACKWARD); cmd = patcpy(pattern, line, ch); if (pattern[0] == '\0') break; if (ascii_comp(find_pat, pattern)) return 0; cmd = patcpy(pattern, cmd, ch); /* Replace Pattern */ poi = pattern; pat_len = 0; while (*poi) { if (*poi == '\\') { switch (*(++poi)) { case '0': repl_pat[pat_len++] = '\0'; break; case 'n': repl_pat[pat_len++] = '\n'; break; case 'r': repl_pat[pat_len++] = '\r'; break; case 't': repl_pat[pat_len++] = '\t'; break; case '\\': repl_pat[pat_len++] = '\\'; break; default: sprintf(string, "No such escape sequence \\%c", *poi); emsg(string); return 0; } } else { repl_pat[pat_len++] = *poi; } poi++; } break; case '#': case '\\': ch = delim; direct = (ch == '\\' ? FORWARD : BACKWARD); cmd = patcpy(pattern, line, ch); if (hex_comp(find_pat, pattern)) return 0; cmd = patcpy(pattern, cmd, ch); /* Replace Pattern */ poi = pattern; pat_len = 0; while (*poi) { if (*poi == ' ' || *poi == '\t') { poi++; } else { if ((n = hexchar()) < 0) { emsg("Badly formed replacement pattern"); return 0; } repl_pat[pat_len] = n; pat_len++; } } break; case '\0': case 'g': case 'c': break; default: emsg("Extra chars|Extra characters at end of command"); return -1; } if (pat_len == -1) { emsg("No previous substitute re|No previous substitute to repeat"); return -1; } if (delim != '\0') { if (strchr(cmd, 'g')) global = 1; if (strchr(cmd, 'c')) conf = 1; } if ((strchr("\\#", ch) && loc == ASCII) || (strchr("/?", ch) && loc == HEX)) { toggle(); } startpos--; move(maxy, 0); refresh(); if (global) { if ((undo_count = alloc_buf(endpos - startpos, &undo_buf))) { memcpy(undo_buf, startpos + 1, undo_count); } undo_start = startpos + 1; edits = U_EDIT; } AGAIN: if (direct == FORWARD) { found = fsearch(startpos + 1, endpos, find_pat); } else { found = rsearch(startpos - 1, mem, find_pat); } if (!found) { if (!repl_count) { if (P(P_WS)) { emsg(notfound); } else { if (P(P_TE)) sprintf(string, "No match to %s", direct == FORWARD ? "BOTTOM" : "TOP"); else sprintf(string, "Address search hit %s without matching pattern", direct == FORWARD ? "BOTTOM" : "TOP"); emsg(string); } } return repl_count; } else { setpage(found); if (conf) { repaint(); msg("Replace?"); move(y, x); if (vgetc() != 'y') goto SKIP; } repl_count++; current_start = pagepos + y * Anzahl + xpos(); if (!global) { if ((undo_count = alloc_buf(pat_len, &undo_buf))) { memcpy(undo_buf, current_start, undo_count); } undo_start = current_start; edits = U_EDIT; } memcpy(current_start, repl_pat, pat_len); SKIP: if (global) { startpos = found + pat_len - 1; goto AGAIN; } } return repl_count; } /* * Used by /, ?, \, #, n or N command * ch is this command * line are the characters after * * return address found */ PTR searching(ch, line, startpos, endpos, flag) int ch; char *line; PTR startpos; PTR endpos; int flag; { char *cmd = NULL; PTR found; int sdir; static char m[2]; static int direct; if (line[0] == '\0' && again == 0) { emsg(noprev); return 0L; } ignore_case = (P(P_IC)); magic = P(P_MA); start_addr--; if ((strchr("\\#", ch) && loc == ASCII) || (strchr("/?", ch) && loc == HEX)) { toggle(); } if (!strchr("Nn", ch)) { m[0] = ch; m[1] = '\0'; switch (ch) { case '/': case '?': direct = (ch == '/' ? FORWARD : BACKWARD); cmd = patcpy(pattern, line, ch); if (pattern[0] != '\0') { if (ascii_comp(search_pat, pattern)) return 0L; again = 1; } break; case '#': case '\\': direct = (ch == '\\' ? FORWARD : BACKWARD); cmd = patcpy(pattern, line, ch); if (pattern[0] != '\0') { if (hex_comp(search_pat, pattern)) break; again = 1; } break; } if (!again) return 0L; } else { cmd = ""; msg(m); } move(maxy, 0); refresh(); sdir = (ch == 'N') ? !direct : direct; if (sdir == FORWARD) { found = fsearch(startpos + 1, endpos, search_pat); if (flag & S_GLOBAL) return(found); if (!found) if (flag & 1) { msg("Search wrapped BOTTOM|Search wrapped around BOTTOM of buffer"); found = fsearch(mem, startpos, search_pat); } } else { found = rsearch(startpos - 1, mem, search_pat); if (flag & S_GLOBAL) return(found); if (!found) if (flag & 1) { msg("Search wrapped TOP|Search wrapped around TOP of buffer"); found = rsearch(endpos, startpos, search_pat); } } if (!found) { if (flag & 1) { emsg(notfound); } else { if (P(P_TE)) { sprintf(string, "No match to %s", sdir == FORWARD ? "BOTTOM" : "TOP"); } else { sprintf(string, "Address search hit %s without matching pattern", sdir == FORWARD ? "BOTTOM" : "TOP"); } emsg(string); } } else { setpage(found); if (cmd) { switch(*cmd) { case 'z': do_z(*++cmd); break; case 's': do_substitution(ch, cmd + 2, found, endpos); repaint(); break; case ';': searching(*(cmd + 1), cmd + 2, found, maxpos - 1, flag); case '\0': break; default: beep(); } } } return found; } /* Copies a string from s2 to s1, up to delim or 0 * returns pointer to next character */ char * patcpy(s1, s2, delim) char *s1, *s2; char delim; { while (*s2 != '\0' && *s2 != delim) { if (*s2 == '\\' && *(s2 + 1) == delim) s2++; *s1++ = *s2++; } *s1 = '\0'; if (*s2 == delim) s2++; return s2; } PTR fsearch(start, end, smem) PTR start; PTR end; char *smem; { PTR spos; signal(SIGINT, jmpproc); for (spos = start; spos <= end; spos++) { if (bregexec(spos, smem)) { signal(SIGINT, SIG_IGN); return(spos); } } signal(SIGINT, SIG_IGN); return(NULL); } PTR rsearch(start, end, smem) PTR start; PTR end; char *smem; { PTR spos; signal(SIGINT, jmpproc); for (spos = start; spos >= end; spos--) { if (bregexec(spos, smem)) { signal(SIGINT, SIG_IGN); return(spos); } } signal(SIGINT, SIG_IGN); return(NULL); } /* Calculates an address of a colon command * returns NULL on error or default_address, if nothing found */ PTR calc_addr(pointer, def_addr) char **pointer; PTR def_addr; { PTR addr; int ch, mark; char *cmd; cmd = *pointer; addr = def_addr; SKIP_WHITE if (*cmd >= '1' && *cmd <= '9') { addr = mem + strtol(cmd, &cmd, 10) - P(P_OF); } else { ch = *cmd; switch (ch) { case '.': /* Current position */ addr = current; cmd++; break; case '^': addr = mem; cmd++; break; case '$': addr = maxpos - 1; cmd++; break; case '\'': /* Mark */ mark = (*++cmd); if (mark == '\'') { addr = last_motion; cmd++; break; } else if (mark < 'a' || mark > 'z') { emsg("Marks are ' and a-z"); return NULL; } if (markbuf[mark - 'a'] == NULL) { emsg("Mark not defined"); return NULL; } addr = markbuf[mark - 'a']; cmd++; break; case '\\': case '/': cmd = patcpy(pattern, cmd + 1, ch); if (pattern[0] == '\0' && again == 0) { emsg(noprev); return NULL; } if (pattern[0] != '\0') { again = 1; if (ch == '/') { if (ascii_comp(search_pat, pattern)) return NULL; } else { if (hex_comp(search_pat, pattern)) return NULL; } } addr = fsearch(mem, maxpos - 1, search_pat); break; case '#': case '?': cmd = patcpy(pattern, cmd + 1, ch); if (pattern[0] == '\0' && again == 0) { emsg(noprev); return NULL; } if (pattern[0] != '\0') { again = 1; if (ch == '?') { if (ascii_comp(search_pat, pattern)) return NULL; } else { if (hex_comp(search_pat, pattern)) return NULL; } } addr = rsearch(maxpos - 1, mem, search_pat); break; case '0': addr = mem + strtol(cmd, &cmd, 16) - P(P_OF); break; } } SKIP_WHITE while (*cmd == '+' || *cmd == '-') { if (*cmd == '+') { cmd++; SKIP_WHITE if (*cmd >= '1' && *cmd <= '9') { addr += strtol(cmd, &cmd, 10); } else if (*cmd == '0') { addr += strtol(cmd, &cmd, 16); } } else { cmd++; SKIP_WHITE if (*cmd >= '1' && *cmd <= '9') { addr -= strtol(cmd, &cmd, 10); } else if (*cmd == '0') { addr -= strtol(cmd, &cmd, 16); } } SKIP_WHITE } if (*pointer != cmd) { *pointer = cmd; addr_flag++; } return addr; } bvi-1.3.2/recomp.c0100644000567000056700000001262007475233342011515 0ustar bgbg/* recomp - regular expression compiler * * NOTE: Edit this file with tabstop=4 ! * * 1996-01-06 created; * 2000-04-25 V 1.3.0 beta * 2000-07-12 V 1.3.0 final * * Copyright 1996-2002 by Gerhard Buergmann * Gerhard.Buergmann@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ /* You cannot use a common regexp subroutine, because \0 is a regular * character in a binary string ! */ #include "bvi.h" #include "set.h" char *poi; int smode; int again = 0; int magic = 1; int ignore_case = 0; extern long bytepos; extern int ignore_case; extern char *emptyclass; /* * Compiling an ASCII sequence to a regex string */ int ascii_comp(smem, pattern) char *smem; char *pattern; { char *end; char *comp; char cc, cc1; char *counter; int count; int bracket, dot; comp = smem; poi = pattern; while (*poi != END) { bracket = FALSE; if (magic) { if (*poi == '[') bracket = TRUE; } else { if (*poi == '\\' && *(poi + 1) == '[') { bracket = TRUE; poi++; } } if (bracket) { if (!(end = strchr(poi, ']'))) { emsg("Missing ]"); return 1; } poi++; if (*poi == ']' || (*poi == '^' && *(poi + 1) == ']')) { emsg(emptyclass); return 1; } if (magic) { if (*(end + 1) == '*') *comp++ = STAR; else *comp++ = ONE; } else { if (*(end + 1) == '\\' && *(end + 2) == '*') *comp++ = STAR; else *comp++ = ONE; } count = 0; counter = comp; comp++; if (*poi != '^') { *comp++ = '\0'; count++; } while (end > poi) { if (*poi == '-') { if (ignore_case) { cc = toupper(*(poi - 1)); cc1 = toupper(*(poi + 1)); } else { cc = *(poi - 1); cc1 = *(poi + 1); } while (cc <= cc1) { *comp++ = cc++; count++; } poi++; poi++; } else { count++; if (ignore_case) *comp++ = toupper(*poi++); else *comp++ = *poi++; } } poi++; *counter = count; } else { dot = FALSE; if (magic) { if (*poi == '.') dot = TRUE; } else { if (*poi == '\\' && *(poi + 1) == '.') { dot = TRUE; poi++; } } if (*poi == '\\') { switch (*(poi + 1)) { case 'n': *++poi = '\n'; break; case 'r': *++poi = '\r'; break; case 't': *++poi = '\t'; break; case '0': *++poi = '\0'; break; default : ++poi; } } if (magic) if (*(poi + 1) == '*') *comp++ = STAR; else *comp++ = ONE; else if (*(poi + 1) == '\\' && *(poi + 2) == '*') *comp++ = STAR; else *comp++ = ONE; if (dot) { *comp++ = 0; poi++; } else { *comp++ = 1; if (ignore_case) *comp++ = toupper(*poi++); else *comp++ = *poi++; } } if (magic) { if (*poi == '*') poi++; } else { if (*poi == '\\' && *(poi + 1) == '*') { poi++; poi++; } } } *comp = END; smode = ASCII; return 0; } /* * Compiling a hex expression to a regex string */ int hex_comp(smem, pattern) char *smem; char *pattern; { char *end; char *comp; int cc, ccm; char *counter; int count, nr; comp = smem; poi = pattern; while (*poi != END) { while (*poi == ' ' || *poi == '\t') poi++; if (*poi == '[') { if (!(end = strchr(poi, ']'))) { emsg("Missing ]"); return 1; } poi++; while (*poi == ' ' || *poi == '\t') poi++; if (*poi == ']' || (*poi == '^' && *(poi + 1) == ']')) { emsg(emptyclass); return 1; } if (*(end + 1) == '*') *comp++ = STAR; else *comp++ = ONE; count = 1; counter = comp; comp++; if (*poi == '^') *comp++ = *poi++; else *comp++ = '\0'; while (end > poi) { if (*poi == ' ' || *poi == '\t') poi++; else if (*poi == '-') { cc = *(comp - 1); poi++; if ((ccm = hexchar()) < 0) return 1; while (cc <= ccm) { *comp++ = cc++; count++; } poi++; poi++; } else { if ((nr = hexchar()) < 0) return 1; count++; *comp++ = nr; } } poi++; *counter = count; if (*poi == '*') poi++; } else if (*poi == '"') { poi++; if (!(end = strchr(poi, '"'))) { /* emsg("Missing '\"'"); return 1; */ end = poi + strlen(poi); } while (end > poi) { *comp++ = 1; *comp++ = 1; if (ignore_case) *comp++ = toupper(*poi++); else *comp++ = *poi++; } poi++; } else { if (*poi == '.') { if (*(poi + 1) == '*') { *comp++ = STAR; poi++; } else *comp++ = ONE; *comp++ = 0; poi++; } else { if ((nr = hexchar()) < 0) return 1; if (*poi == '*') { poi++; *comp++ = STAR; } else *comp++ = ONE; *comp++ = 1; *comp++ = nr; } } } *comp = END; smode = HEX; return 0; } int hexchar() { int nr; char tmpbuf[3]; if (isxdigit(*poi)) { tmpbuf[0] = *poi++; tmpbuf[1] = '\0'; if (isxdigit(*poi)) tmpbuf[1] = *poi++; tmpbuf[2] = '\0'; sscanf(tmpbuf, "%2x", &nr); while (*poi == ' ' || *poi == '\t') poi++; return nr; } else { emsg("Bad hex character@in expression"); return -1; } } bvi-1.3.2/script0100664000567000056700000000003007770554760011315 0ustar bgbgset mm 0,20d w! %.new q bvi-1.3.2/set.c0100644000567000056700000002001707701240266011015 0ustar bgbg/* SET.C - performing :set - command * * NOTE: Edit this file with tabstop=4 ! * * 1996-02-29 created; * 1998-03-14 V 1.0.1 * 1999-01-14 V 1.1.0 * 1999-03-17 V 1.1.1 * 1999-07-02 V 1.2.0 beta * 1999-08-14 V 1.2.0 final * 2000-07-15 V 1.3.0 final * 2001-10-10 V 1.3.1 * 2003-07-03 V 1.3.2 * * Copyright 1996-2003 by Gerhard Buergmann * gerhard@puon.at * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ #include "bvi.h" #include "set.h" static int from_file = 0; static FILE *ffp; static char fbuf[256]; static char buf[64]; struct param params[] = { { "autowrite", "aw", FALSE, "", P_BOOL }, { "columns", "cm", 16, "", P_NUM }, { "errorbells", "eb", FALSE, "", P_BOOL }, { "ignorecase", "ic", FALSE, "", P_BOOL }, { "magic", "ma", TRUE, "", P_BOOL }, { "memmove", "mm", FALSE, "", P_BOOL }, { "offset", "of", 0, "", P_NUM }, { "readonly", "ro", FALSE, "", P_BOOL }, { "scroll", "scroll", 12, "", P_NUM }, { "showmode", "mo", TRUE, "", P_BOOL }, { "term", "term", 0, "", P_TEXT }, { "terse", "terse", FALSE, "", P_BOOL }, { "unixstyle", "us", FALSE, "", P_BOOL }, { "window", "window", 25, "", P_NUM }, { "wordlength", "wl", 4, "", P_NUM }, { "wrapscan", "ws", TRUE, "", P_BOOL }, #if defined(__MSDOS__) && !defined(DJGPP) { "color", "co", 7, "", P_NUM }, #endif { "", "", 0, "", 0, } /* end marker */ }; int doset(arg) char *arg; /* parameter string */ { int i; char *s; int did_window = FALSE; int state = TRUE; /* new state of boolean parms. */ char string[80]; if (arg == NULL) { showparms(FALSE); return 0; } if (!strcmp(arg, "all")) { showparms(TRUE); return 0; } if (!strncmp(arg, "no", 2)) { state = FALSE; arg += 2; } for (i = 0; params[i].fullname[0] != '\0'; i++) { s = params[i].fullname; if (strncmp(arg, s, strlen(s)) == 0) /* matched full name */ break; s = params[i].shortname; if (strncmp(arg, s, strlen(s)) == 0) /* matched short name */ break; } if (params[i].fullname[0] != '\0') { /* found a match */ if (arg[strlen(s)] == '?') { if (params[i].flags & P_BOOL) sprintf(buf, " %s%s", (params[i].nvalue ? " " : "no"), params[i].fullname); else if (params[i].flags & P_TEXT) sprintf(buf, " %s=%s", params[i].fullname, params[i].svalue); else sprintf(buf, " %s=%ld", params[i].fullname, params[i].nvalue); msg(buf); return 0; } if (!strcmp(params[i].fullname, "term")) { emsg("Can't change type of terminal from within bvi"); return 1; } if (params[i].flags & P_NUM) { if ((i == P_LI) || (i == P_OF)) did_window++; if (arg[strlen(s)] != '=' || state == FALSE) { sprintf(string, "Option %s is not a toggle", params[i].fullname); emsg(string); return 1; } else { s = arg + strlen(s) + 1; if (*s == '0') { params[i].nvalue = strtol(s, &s, 16); } else { params[i].nvalue = strtol(s, &s, 10); } params[i].flags |= P_CHANGED; #if defined(__MSDOS__) && !defined(DJGPP) if (i == P_CO) { textcolor(P(P_CO) & 0x07); textbackground((P(P_CO) & 0xf0) >> 4); clrscr(); repaint(); } #endif if (i == P_CM) { if (((COLS - AnzAdd - 1) / 4) >= P(P_CM)) { Anzahl = P(P_CM); } else { Anzahl = P(P_CM) = ((COLS - AnzAdd - 1) / 4); } maxx = Anzahl * 4 + AnzAdd + 1; Anzahl3 = Anzahl * 3; status = Anzahl3 + Anzahl - 17; screen = Anzahl * (maxy - 1); did_window++; stuffin("H"); /* set cursor at HOME */ } } } else { /* boolean */ if (arg[strlen(s)] == '=') { emsg("Invalid set of boolean parameter"); return 1; } else { params[i].nvalue = state; params[i].flags |= P_CHANGED; } } } else { emsg("No such option@- `set all' gives all option values"); return 1; } if (did_window) { maxy = P(P_LI) - 1; new_screen(); } return 0; } /* show ALL parameters */ void showparms(all) int all; { struct param *p; int n; n = 2; msg("Parameters:\n"); for (p = ¶ms[0]; p->fullname[0] != '\0' ;p++) { if (!all && ((p->flags & P_CHANGED) == 0)) continue; if (p->flags & P_BOOL) sprintf(buf, " %s%s\n", (p->nvalue ? " " : "no"), p->fullname); else if (p->flags & P_TEXT) sprintf(buf, " %s=%s\n", p->fullname, p->svalue); else sprintf(buf, " %s=%ld\n", p->fullname, p->nvalue); msg(buf); n++; if (n == params[P_LI].nvalue) { if (wait_return(FALSE)) return; n = 1; } } wait_return(TRUE); } /* reads the init file (.bvirc) */ int read_rc(fn) char *fn; { if((ffp = fopen(fn, "r")) == NULL) return -1; from_file = 1; while(fgets(fbuf, 255, ffp) != NULL) { strtok(fbuf, "\n\r"); docmdline(fbuf); } fclose(ffp); from_file = 0; return 0; } int do_logic(mode, str) int mode; char *str; { int a, b; int value; size_t n; char *err_str ="Invalid value@for bit manipulation"; if (mode==LSHIFT || mode==RSHIFT || mode==LROTATE || mode==RROTATE) { value = atoi(str); if (value < 1 || value > 8) { emsg(err_str); return 1; } } else { if (strlen(str) == 8) { value = strtol(str, NULL, 2); for (n = 0; n < 8; n++) { if (str[n] != '0' && str[n] != '1') { value = -1; break; } } } else if (str[0] == 'b' || str[0] == 'B') { value = strtol(str + 1, NULL, 2); } else if (str[0] == '0') { value = strtol(str, NULL, 16); for (n = 0; n < strlen(str); n++) { if (!isxdigit(str[n])) { value = -1; break; } } } else { value = atoi(str); } if (value < 0 || value > 255) { emsg(err_str); return 1; } } if ((undo_count = alloc_buf((off_t)(end_addr - start_addr + 1), &undo_buf))) { memcpy(undo_buf, start_addr, undo_count); } undo_start = start_addr; edits = U_EDIT; while(start_addr <= end_addr) { a = *start_addr; a &= 0xff; switch(mode) { case LSHIFT: a <<= value; break; case RSHIFT: a >>= value; break; case LROTATE: a <<= value; b = a >> 8; a |= b; break; case RROTATE: b = a << 8; a |= b; a >>= value; /* b = a << (8 - value); a >>= value; a |= b; */ break; case AND: a &= value; break; case OR: a |= value; break; case XOR: case NOT: a ^= value; break; case NEG: a ^= value; a++; /* Is this true */ break; } *start_addr++ = (char)(a & 0xff); } repaint(); return(0); } int getcmdstr(p, x) char *p; int x; { int c; int n; char *buff, *q; if (from_file) { if(fgets(p, 255, ffp) != NULL) { strtok(p, "\n\r"); return 0; } else { return 1; } } signal(SIGINT, jmpproc); buff = p; move(maxy, x); do { switch (c = vgetc()) { case BVICTRL('H'): case KEY_BACKSPACE: case KEY_LEFT: if (p > buff) { p--; move(maxy, x); n = x; for (q = buff; q < p ;q++) { addch(*q); n++; } addch(' '); move(maxy, n); } else { *buff = '\0'; msg(""); signal(SIGINT, SIG_IGN); return 1; } break; case ESC: /* abandon command */ *buff = '\0'; msg(""); signal(SIGINT, SIG_IGN); return 1; #if NL != KEY_ENTER case NL: #endif #if CR != KEY_ENTER case CR: #endif case KEY_ENTER: break; default: /* a normal character */ addch(c); *p++ = c; break; } refresh(); } while (c != NL && c != CR && c != KEY_ENTER); *p = '\0'; signal(SIGINT, SIG_IGN); return 0; } bvi-1.3.2/set.h0100644000567000056700000000405707475233474011043 0ustar bgbg/* SET.H * * NOTE: Edit this file with tabstop=4 ! * * Copyright 1996-2002 by Gerhard Buergmann * Gerhard.Buergmann@puon.at * * 1998-03-14 V 1.0.0 * 1999-01-14 V 1.1.0 * 1999-03-23 V 1.1.1 * 1999-07-02 V 1.2.0 beta * 1999-08-14 V 1.2.0 final * 2000-08-21 V 1.3.0 final * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See file COPYING for information on distribution conditions. */ struct param { char *fullname; /* full parameter name */ char *shortname; /* permissible abbreviation */ long nvalue; char *svalue; int flags; }; extern struct param params[]; #define P_BOOL 0x01 /* the parameter is boolean */ #define P_NUM 0x02 /* the parameter is numeric */ #define P_TEXT 0x04 /* the paameter is text */ #define P_CHANGED 0x08 /* the parameter has been changed */ /* * The following are the indices in the params array for each parameter */ /* * parameters */ #define P_AW 0 /* Autowrite */ #define P_CM 1 /* Columns */ #define P_EB 2 /* error bells */ #define P_IC 3 /* ignore case in searches */ #define P_MA 4 /* Magic characters in reg expr */ #define P_MM 5 /* move bytes in file */ #define P_OF 6 /* address offset */ #define P_RO 7 /* Readonly */ #define P_SS 8 /* scroll size */ #define P_MO 9 /* show mode */ #define P_TT 10 /* Terminal type */ #define P_TE 11 /* Terse (short messages) */ #define P_US 12 /* Unix-Style of ASCII representation */ #define P_LI 13 /* lines */ #define P_WL 14 /* Wordlength for w, W, b, B command */ #define P_WS 15 /* wrapscan */ #define P_CO 16 /* color/attribute setting */ /* * Macro to get the value of a parameter */ #define P(n) (params[n].nvalue)