diff --git a/BUGS b/BUGS index 49892ff..413bd4c 100644 --- a/BUGS +++ b/BUGS @@ -2,28 +2,24 @@ I said: -> On my system the program can segfault when a report is being -> generated under certain conditions. This happens when the c++ -> STL sort function is called too often. Sorting is used to -> speed up access to the tables and reduce the time you have -> to wait for a report to complete. +> On my system the program can segfault when a report is being generated +> under certain conditions. This happens when the c++ STL sort function is +> called too often. Sorting is used to speed up access to the tables and +> reduce the time you have to wait for a report to complete. -The problem has been found and fixed by Mike Reid (a fellow New -Zealander.) I was dereferencing a null pointer in one function -and writing to a string that had been c_str() in another - pretty -big coding mistakes if you ask me. Naughty boy etc. +The problem has been found and fixed by Mike Reid (a fellow New Zealander.) +I was dereferencing a null pointer in one function and writing to a string +that had been c_str() in another - pretty big coding mistakes if you ask me. +Naughty boy etc. -For stability reasons my routines are still used, however this -is not the fastest solution. You can get about a 20% speed boost -if you set "bRepMySort" to "no", as I previously explained: +For stability reasons my routines are still used, however this is not the +fastest solution. You can get about a 20% speed boost if you set +"bRepMySort" to "no", as I previously explained: -> There are two variables in squidview.conf which direct -> sorting operations. "bRepMySort" can be set to "yes" to use -> my sort routines, or "no" otherwise. "iRepFast" is an integer. -> After this many lines of processing a sort is made. Therefore -> the smaller this number the more often sorts are made. I've -> settled on a 10000 value for this; your mileage may vary. -> Making "iRepFast" 0 disables sorting completely. - -> Squidview catches segfaults and will tell you if it happened during -> the STL sort. +> There are two variables in squidview.conf which direct sorting operations. +> "bRepMySort" can be set to "yes" to use my sort routines, or "no" otherwise. +> "iRepFast" is an integer. After this many lines of processing a sort is made. +> Therefore the smaller this number the more often sorts are made. I've +> settled on a 10000 value for this; your mileage may vary. Making "iRepFast" +> 0 disables sorting completely. Squidview catches segfaults and will tell you +> if it happened during the STL sort. diff --git a/ChangeLog b/ChangeLog index 14f7570..67d35a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ >> Squidview history: + +v0.65: 29 February 2004: +- faster runs of external programs - help here from Willi Mann of + the Debian project +- better (and format of) documentation v0.64: 17 February 2004: - reverted back to stable, slower sort as a bug still lurks diff --git a/HOWTO b/HOWTO index 014a4bf..6800d7a 100644 --- a/HOWTO +++ b/HOWTO @@ -3,194 +3,179 @@ --Overview -Squidview is a program meant to display the squid proxy server log -file in a nice fashion, providing the log file is in squid's -native reporting fashion. It has features such as search, report -generation, monitor mode and supports three log files. - -Thus, the program can be used to monitor Internet usage on a -networked site. But please note squid has to be running first and -this program is not a proactive resource controller. What it can -do is tell you who and which sites are consuming the most bandwidth. +Squidview is a program meant to display the squid proxy server log file in a +nice fashion, providing the log file is in squid's native reporting fashion. +It has features such as search, report generation, monitor mode and supports +three log files. + +Thus, the program can be used to monitor Internet usage on a networked site. +But please note squid has to be running first and this program is not a +proactive resource controller. What it can do is tell you who and which sites +are consuming the most bandwidth. --Using squidview -Squidview shows each proxy request on one line starting with the -user's name (ie the name of the user on the client machine as -reported by identd or similar), flags and then the target (ie -destination) of the request. - -Should an identd process not be running on the client, squidview -can display the client IP address instead of "-", or if you are -using an aliases file it can get a name from that. See Reports -about this. - -The target bit is truncated if necessary so as to fit the -information on one line. There are two methods of truncation -(discussed in Reports.) - -Change the selected line with the cursor control keys or the number -keypad. Down the bottom, on the status bar, is the time the selected -request was made as well how far through the log it is (as a -percentage: 0% top, 100% end). Press 'h' to get some help or 'r' -for this readme file. - -Also on the status bar will be "Mon Pri". "Mon" means the program -will update the screen if new proxy requests are made. Toggle this -off by pressing 'm' if you want to remain on a selected line. -"Pri" is the primary log file, to switch to another log file press -the appropriate key (press 'h' for keys.) +Squidview shows each proxy request on one line starting with the user's name +(ie the name of the user on the client machine as reported by identd or +similar), flags and then the target (ie destination) of the request. + +Should an identd process not be running on the client, squidview can display +the client IP address instead of "-", or if you are using an aliases file it +can get a name from that. See Reports about this. + +The target bit is truncated if necessary so as to fit the information on one +line. There are two methods of truncation (discussed in Reports.) + +Change the selected line with the cursor control keys or the number keypad. +Down the bottom, on the status bar, is the time the selected request was made +as well how far through the log it is (as a percentage: 0% top, 100% end). +Press 'h' to get some help or 'r' for this howto file. + +Also on the status bar will be "Mon Pri". "Mon" means the program will update +the screen if new proxy requests are made. Toggle this off by pressing 'm' if +you want to remain on a selected line. "Pri" is the primary log file, to switch +to another log file press the appropriate key (press 'h' for keys.) --Flags -Between the user and URL columns is the flags field. For example -it may be "w2Rf": +Between the user and URL columns is the flags field. For example it may be +"w2Rf": 'w': a word match on the URL (see Searches below) '2': bytes transferred was between 0.25MB and 1MB 'R': the request was a cache refresh hit 'f': part of the current focus -For a bit of help about these flags select the relevant line and -press 'v'. +For a bit of help about these flags select the relevant line and press 'v'. --Searching -A search forward is made by the right arrow key, backwards is -handled by the left arrow key. But first you need something to -search for. Press 'f' to find a piece of text. Both user names and -http/ftp addresses can cause a match. Request lines which match -are noted by a 'w' in the flags column. - -Multiple search strings are possible, and are necessary when you -use skips. Skips tell squidview not to match some requests, such -as when the word "sex" is searched for but not when the target is -on doubleclick.net (that advertisement server likes to use the word -"sex" in URLs.) The following will accomplish that: +A search forward is made by the right arrow key, backwards is handled by the +left arrow key. But first you need something to search for. Press 'f' to find +a piece of text. Both user names and http/ftp addresses can cause a match. +Request lines which match are noted by a 'w' in the flags column. + +Multiple search strings are possible, and are necessary when you use skips. +Skips tell squidview not to match some requests, such as when the word "sex" +is searched for but not when the target is on doubleclick.net (that +advertisement server likes to use the word "sex" in URLs.) The following will +accomplish that: !doubleclick.net sex -The requests with "doubleclick.net" in them will be skipped -because that piece of text is first and it is preceded with an -"!". In doubleclick.net cases the flags column will have a -'-' where the word match would have been. - -Note that text you enter with 'f' is placed at the top of the -search list so it has priority. Using 'F' (capital F) will add -search text to the bottom. - -Your search words can be saved from the search options menu, and -you can do some other things there: pick up large requests and -focus on a particular user. These two can be turned off when not -needed. +The requests with "doubleclick.net" in them will be skipped because that piece +of text is first and it is preceded with an "!". In doubleclick.net cases the +flags column will have a '-' where the word match would have been. + +Note that text you enter with 'f' is placed at the top of the search list so +it has priority. Using 'F' (capital F) will add search text to the bottom. + +Your search words can be saved from the search options menu, and you can do +some other things there: pick up large requests and focus on a particular user. +These two can be turned off when not needed. --Navigating the log file -As well as jumping to the beginning or end of the log file, you -can go to a certain percentage through with 'g', or to the -beginning of a certain day with 'j' or 'J'. Of course 'home' and -'end' work too, if you are using a remote shell and they don't, -press '7' or '1' respectfully (look at your number keypad.) +As well as jumping to the beginning or end of the log file, you can go to a +certain percentage through with 'g', or to the beginning of a certain day with +'j' or 'J'. Of course 'home' and 'end' work too, if you are using a remote +shell and they don't, press '7' or '1' respectfully (look at your number +keypad.) --User lookup -On a selected line you can press 'v' to get a verbose description -of it - this is actually a dump of the line to the screen. -Squidview will try to match the user to those known in a file -called "users", displaying that line in the file. For example -the "users" file could have in it:- +On a selected line you can press 'v' to get a verbose description of it - this +is actually a dump of the line to the screen. Squidview will try to match the +user to those known in a file called "users", displaying that line in the file. +For example the "users" file could have in it:- root system administrator -The first word on each line must be the login name with no spaces -between it and the real name. +The first word on each line must be the login name (with no spaces in it) and +the real name. --Common options -By default if no login name is available the client's IP number is -displayed instead. Change this with "ip instead of null user" to -get, instead, reports of bandwidth attributed to "-". The aliases -file is another option here. You might specify that 192.168.0.15 -be displayed as "server4". You need to enable this one because -it's off by default. - -Keeping the filename of target also affects the main window. When -on, the target URL is shifted left - but not over the domain - so that -the type of file can be seen on one line. Otherwise the line is -simply truncated to be displayed. +By default if no login name is available the client's IP number is displayed +instead. Change this with "ip instead of null user" to get, instead, reports +of bandwidth attributed to "-". The aliases file is another option here. You +might specify that 192.168.0.15 be displayed as "server4". You need to enable +this one because it's off by default. + +Keeping the filename of target also affects the main window. When on, the +target URL is shifted left - but not over the domain - so that the type of +file can be seen on one line. Otherwise the line is simply truncated to be +displayed. --Log a report -Make a text or CSV report of search hits. A few options are there. -You will need to specify a report file name to view the details. -Otherwise you will just get a summary. Reports are placed in ~/.squidview. - -To start or finish the report at a particular point in the log file -highlight the line in the main window, press 'l' and then either -'a' or 'b'. Press 'a' or 'b' again to toggle it. - -User bandwidth totals can be calculated. The options are search hits -or "not veto" (which is mostly everything excluding skips mentioned -above.) These are sorted so you can find the heavy internet users. - -Bandwidth totals will find the most popular sites for you. This can -be done for one user specifically or for all users as a whole. - -When a word hit is detected it can be written in the report (eg -"word hit action: normal text"). -Text reports are good for viewing with "less"; CSV ones are intended -for spreadsheets. - -In the case of normal text reports you may or may not want to see -the request size. This information takes up a column. Splitting long -lines will show the details on more than one line if need be. Then -again, you may only want all "hits" to be shown on just one line. - -The other options are straight forward. Be a bit picky about the CSV -field separator - they put just about any characters in URLs. Try a -tab (yes, just press 'tab', 'enter') or "*". - -To get a summary report about a particular user, say "graeme", do -this: +Make a text or CSV report of search hits. A few options here. + +You will need to specify a report file name to view the details. Otherwise you +will just get a summary. Reports are placed in ~/.squidview. + +To start or finish the report at a particular point in the log file highlight +the line in the main window, press 'l' and then either 'a' or 'b'. Press 'a' +or 'b' again to toggle it. + +User bandwidth totals can be calculated. The options are search hits or +"not veto" (which is mostly everything excluding skips mentioned above.) These +are sorted so you can find the heavy internet users. + +Bandwidth totals will find the most popular sites for you. This can be done for +one user specifically or for all users as a whole. + +When a word hit is detected it can be written in the report (eg "word hit +action: normal text"). Text reports are good for viewing with "less"; CSV ones +are intended for spreadsheets. + +In the case of normal text reports you may or may not want to see the request +size. This information takes up a column. Splitting long lines will show the +details on more than one line if need be. Then again, you may only want all +"hits" to be shown on just one line. + +The other options are straight forward. Be a bit picky about the CSV field +separator - they put just about any characters in URLs. Try a tab (yes, just +press 'tab', 'enter') or "*". + +To get a summary report about a particular user, say "graeme", do this: - in search options focus on "graeme" - go to log a report - select "domain bandwidth totals" - select "only focus user graeme" - and press enter on the previous screen where it says go -You will need to unset the above options for reports to come -out normally again, and for searches (cursor <-, ->) too. +You will need to unset the above options for reports to come out normally +again, and for searches (cursor <-, ->) too. --Filtered reports -After making a general report it is possible to filter it for -just one user. That way you don't have to rescan the log file -with a focus. The downside of this is the target totals the -user surfed to can't be calculated. +After making a general report it is possible to filter it for just one user. +That way you don't have to rescan the log file with a focus. The downside of +this is the target totals the user surfed to can't be calculated. --Tally Mode -This mode tells you some statistics about each user's usage of the Web. -Given any given starting point, it doesn't have to be at the begining of the -log, squidview will gather the data, display it, and then keep it up to -date. +This mode tells you some statistics about each user's usage of the Web. Given +any given starting point, it doesn't have to be at the begining of the log, +squidview will gather the data, display it, and then keep it up to date. So from the main screen press T (capital) and let it work. Then you should get the tally screen that has the list of users down the left hand side and their statistics to the right. Most numbers are self explanatory. "Points" indicate who has used the Web a lot recently. Every web byte is counted and added to that user's number of points. Then after a certain period of time -the points list is aged, eg multiplied by 0.75. This means big users will -rise to the top quickly and then slowly progress further down the list if -they stop surfing. - -Tally mode can be set to go in monitor mode. Turn that off if you need to -stay selected on one user. There are other views and options mentioned in -help (h). One of these toggles what to do about requests that have been -denied. You may not want to see attempts by computers (often by themselves) -"phoning home" regularly. If the status line shows "-d" you won't get -these cluttering up your view. +the points list is aged, eg multiplied by 0.75. This means big users will rise +to the top quickly and then slowly progress further down the list if they stop +surfing. + +Tally mode can be set to go in monitor mode. Turn that off if you need to stay +selected on one user. There are other views and options mentioned in help (h). +One of these toggles what to do about requests that have been denied. You may +not want to see attempts by computers (often by themselves) "phoning home" +regularly. If the status line shows "-d" you won't get these cluttering up your +view. --One User History @@ -198,8 +183,8 @@ entries only by the specified user. It is useful to discover that user's recent activity, warranted for example by a spike in his/her tally points. -Pressing O (capital) will bring you into this mode using as the user the -one currently selected. u will switch to another user. +Pressing O (capital) will bring you into this mode using as the user the one +currently selected. u will switch to another user. The numbers on the status line deserve explanation. If they say: @@ -211,5 +196,5 @@ file. The 90.90% indicates the selected line is that far down the request entries -in memory. For your information the request lines aren't actually in -memory - just their positions in the log file are. +in memory. For your information the request lines aren't actually in memory - +just their positions in the log file are. diff --git a/INSTALL b/INSTALL index d0111cc..77533a9 100644 --- a/INSTALL +++ b/INSTALL @@ -3,33 +3,36 @@ $ ./configure $ make -The program is c/c++ and uses the ncurses library for obtaining -some keystrokes. Old gcc compilers can fail compiling this -program; if so start afresh and: +The program is c/c++ and uses the ncurses library for obtaining some +keystrokes. Old gcc compilers can fail compiling this program; if so start +afresh and: $ cp Makefile.old Makefile $ make oldgcc ... and install manually. -If you are compiling on Solaris I have heard of one instance where -it is necessary to link against Solaris' own curses library. To do -this you need to link against lcurses rather than lncurses. +If you are compiling on Solaris I have heard of one instance where it is +necessary to link against Solaris' own curses library. To do this you need +to link against lcurses rather than lncurses. --Installation If "configure" and "make" are successful: - # make install + # make install-strip + +"make install-strip" will provide a smaller executable than "make install" +because the latter has quite a bit of debugging information with it. -Or if you aren't the superuser the program will still run if -you have read access to the squid log file. +Or if you aren't the superuser the program will still run if you have read +access to the squid log file. This program assumes the main squid log file is here: /usr/local/squid/var/logs/access.log -If it isn't just symlink it appropriately from the following -default. This directory and links are made in the user's home -space when squidview is first run by the user. +If it isn't just symlink it appropriately from the following default. This +directory and links are made in the user's home space when squidview is first +run by the user. graeme@localhost:~/.squidview$ ls -l HOWTO -> /usr/local/share/squidview/HOWTO @@ -39,19 +42,17 @@ users words -In this case squidview expects the primary log to be "log1", -and the symlink redirects it to where the file actually is. Three -log locations are supported which gives you a bit of room for -accomodating rotating logs. +In this case squidview expects the primary log to be "log1", and the symlink +redirects it to where the file actually is. Three log locations are supported +which gives you a bit of room for accomodating rotating logs. -This tar.gz archive comes with an example access.log named -example.log. Symlink it to view it with squidview, or copy it to -your ~/.squidview directory. The same applies to the HOWTO. +This tar.gz archive comes with an example access.log named example.log. +Symlink it to view it with squidview, or copy it to your ~/.squidview +directory. The same applies to the HOWTO. -"users" and "words" are reporting files - these can be symlinks -to /etc if you would rather have these files there. "aliases" is -another text file, this time for mapping IP numbers to user- -defined names. +"users" and "words" are reporting files - these can be symlinks to /etc if +you would rather have these files there. "aliases" is another text file, +this time for mapping IP numbers to user-defined names. -This package comes with example "users", "words" and "aliases" -files you can build on. +This package comes with example "users", "words" and "aliases" files you can +build on. diff --git a/configure b/configure index c7dba96..d7675b5 100755 --- a/configure +++ b/configure @@ -694,7 +694,7 @@ PACKAGE=squidview -VERSION=0.64 +VERSION=0.65 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -907,7 +907,7 @@ CXXFLAGS="$ac_save_CXXFLAGS" elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then - CXXFLAGS="-O2" + CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi diff --git a/configure.in b/configure.in index 2ee57eb..77840aa 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ AC_INIT(squidview.cpp) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(squidview,0.64) +AM_INIT_AUTOMAKE(squidview,0.65) AC_PROG_CXX AC_PROG_INSTALL diff --git a/debian/changelog b/debian/changelog index 65383b2..7950c0d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,16 @@ +squidview (0.65-1) unstable; urgency=low + + * New upstream release + * This release fixes most screen corruption upstream. A litte patch + was still necessary. + * This release should make it into unstable (closes #233280) + + -- Willi Mann Tue, 2 Mar 2004 16:25:56 +0100 + squidview (0.64-4) unstable; urgency=low * Better implementation for additional parameter iWait in RunProgram (thanks Michael Vogt) - * This release should make it into unstable (closes #233280) -- Willi Mann Sat, 21 Feb 2004 11:54:28 +0100 diff --git a/debian/rules b/debian/rules index e02c756..320b881 100755 --- a/debian/rules +++ b/debian/rules @@ -8,18 +8,27 @@ # This is the debhelper compatibility version to use. export DH_COMPAT=3 + # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +CXX = g++ +CXXFLAGS = -Wall -g +INSTALL = install +INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644 +INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755 +INSTALL_SCRIPT = $(INSTALL) -p -o root -g root -m 755 +INSTALL_DIR = $(INSTALL) -p -d -o root -g root -m 755 -ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) - CFLAGS += -g +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CXXFLAGS += -O0 +else + CXXFLAGS += -O2 endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) - INSTALL_PROGRAM += -s -endif + +export CXX CXXFLAGS config.status: configure dh_testdir diff --git a/squidview.cpp b/squidview.cpp index dfb2865..7fb8368 100644 --- a/squidview.cpp +++ b/squidview.cpp @@ -34,8 +34,8 @@ logic is followable which is something. Warning: those who complain about the source code might be requested to - be the one who rewrites it. - + be the one who rewrites it :) + */ #ifdef HAVE_CONFIG_H @@ -49,7 +49,6 @@ #include #include #include -#include #include #include @@ -163,51 +162,53 @@ } -// execute a shell command -void RunProgram (const string& sCommand, int iErase, int iWait = 0) +// clears the screen +void MyCls() +{ + attroff (A_REVERSE); + clear(); + refresh(); + move (0, 0); +} + + +/// execute a shell command +void RunProgram(const string& sCommand) +{ //Debian - Notes: 1) "reset -Q" resets the size of my terminal (konsole). -//2) I don't believe "clear" is a proper way for this sort of -//terminal-cleaning. +//2) I don't believe "clear" is a proper way for this sort of +//terminal-cleaning. //solution: use endwin() + refresh() + optionally (iWait) standard c++ -//for waiting. +//for waiting. //This messes up the output in some rare cases with iErase == 0. -//Still readable, just not as intended. Additional note: In the +//Still readable, just not as intended. Additional note: In the //original code first call of n,l didn't show anything -//reason not clear. -//Implementation of iWait was neccessary to keep the non-curses +//reason not clear. +//Implementation of iWait was neccessary to keep the non-curses //code in one function. Seems that any call to the curses library -//returns to curses mode, what would make it hard to keep the -//"Press any" key in the original place. - -{ +//returns to curses mode, what would make it hard to keep the +//"Press any" key in the original place. + +// clear(1) clears the user's bash console (squidview's parent), but this +// isn't necessary. And yes, MyCls() is much faster so now used. This bit +// of code has been simplified, and if all goes well these comments will +// be deleted. + + MyCls(); curs_set (1); echo(); nocbreak(); - - if (wTemp) - delwin (wTemp); - if(iErase) - endwin(); +//This line doesn't seem to be needed; instead it +// caused another screen corruption. Hopefully there are no side effects. +// (I can't imagine one) +//--> if (wTemp) + endwin(); // suggested by endwin(3) system (sCommand.c_str()); - cbreak(); - if (iWait) - { - cout << "\nPress any key."; - cin.get(); - } - if(iErase) - refresh(); - wTemp = newwin (1, 1, LINES - 1, COLS - 1); keypad (stdscr, TRUE); - nonl(); - cbreak(); curs_set (0); noecho(); - if (iErase) - { - erase(); - refresh(); - } + cbreak(); + MyCls(); } @@ -331,16 +332,6 @@ sTemp.assign (iCols - int (sText.length()), ' '); sTemp += sText; return sTemp; -} - - -// clears the screen -void MyCls() -{ - attroff (A_REVERSE); - erase(); - refresh(); - move (0, 0); } @@ -2511,13 +2502,11 @@ return; } sCurrentReport = sRepFileName; - //Debian - modification: add (y/n). I pressed v more than once - //instead of y. - sDispLine = sRepFileName + " made: " + sTemp + "; View? (y/n)"; + sDispLine = sRepFileName + " made: " + sTemp + "; View (y/n)? "; if (PromptForKey (sDispLine) == 'y') { sTemp = sViewer + " " +sPathToFiles + "/" + sRepFileName; - RunProgram (sTemp, 1); + RunProgram (sTemp); } sStatusMessage = "Press 'n' for misc. operations you can do on " + sRepFileName; @@ -3138,12 +3127,10 @@ break; case 'l': - MyCls(); - sTemp = "cd " + sPathToFiles + " ; " + + sTemp = "( cd " + sPathToFiles + " ; " + "echo -e \"Current reports:-\n\" ; " + - "ls -l *" + sReportExt; - RunProgram (sTemp, 1, 1); - iPause = 0; + "ls -l *" + sReportExt + " ) | " + sViewer; + RunProgram (sTemp); break; case 'd': @@ -3154,7 +3141,7 @@ break; } sTemp = "rm " + sFile; - RunProgram (sTemp, 0); + RunProgram (sTemp); sCurrentReport = ""; break; @@ -3167,7 +3154,7 @@ else { sTemp = sViewer + " " + sFile; - RunProgram (sTemp, 1); + RunProgram (sTemp); } break; @@ -3180,7 +3167,7 @@ else { sTemp = sViewer + " " + sFilter; - RunProgram (sTemp, 1); + RunProgram (sTemp); } break; @@ -3254,7 +3241,7 @@ if (getch() == 'y') { sTemp = sViewer + " " + sPathToFiles + "/" + sDest; - RunProgram (sTemp, 1); + RunProgram (sTemp); } } else @@ -3303,7 +3290,7 @@ "Press any key to begin"; getch(); sTemp = "pine -attach " + sFile + " " + sCurrentEmail; - RunProgram (sTemp, 1); + RunProgram (sTemp); break; case 's': @@ -3994,7 +3981,7 @@ } } else - RunProgram (sViewer + " " + sHowToLink, 1); + RunProgram (sViewer + " " + sHowToLink); }