Info-Unix-Request@tachost.af.mil (The Moderator) (01/23/91)
INFO-UNIX Digest Sat, 19 Jan 1991 V11#097 Today's Topics: Re: portability of non-shell scripts kermit servers Re: how to create a user, which can't be su'd to ? Nroff -man and two-/one-sided output need "yy-ddd-hh:mm:ss ==> (time_t) clock" converter Re: need "yy-ddd-hh:mm:ss ==> (time_t) clock" converter reading in ascii files on a tape using tar? Ksh questions Tek 4319 threads? Why is there no NFS with XENIX GDSII<->PostScript<->HPGL translation pgms wanted Can UNIX pipe connections be compiled? Re: Can UNIX pipe connections be compiled? Re: shell in programs Re: exist enscript for sun4? Re: SUMMARY: A Good Network Programming Book. Re: Setting my prompt ----------------------------------------------------------------- From: "David H. Brierley" <dave@galaxia.newport.ri.us> Subject: Re: portability of non-shell scripts Keywords: portability Date: 18 Jan 91 02:32:27 GMT To: info-unix@sem.brl.mil In article <1991Jan15.233523.18150@ux1.cso.uiuc.edu> phil@ux1.cso.uiuc.edu (Phil Howard KA9WGN) writes: [ talks about problems when using #! construct ] ... >... Has anyone worked a general way to make >these script programs more portable so that they will run w/o having to >have the user do editing on them? How do you plan on having this work "portably" on systems that don't support the #! mechanism? The only thing I know of that is even close to being portable is to assume that your script will be run by one of the shell interpreters and have the first line of the file exec the program that you really want run. Make sure that you dont have anything on this first line that is sh/ksh/csh specific because I can't gaurantee what shell will be used to run your script. This is one of those problems that has no real solution short of forcing everyone to upgrade to a version of the kernel that supports the #! mechanism (yes, the #! mechanism is implemented *inside the kernel*!!). Since you can make a pretty good guess as to what the odds of this happening are you can apply those same odds to coming up with a solution. -- David H. Brierley Home: dave@galaxia.Newport.RI.US Work: dhb@quahog.ssd.ray.com Can I be excused, my brain is full. ----------------------------- From: Mathias Koerber <koerberm@nixsin.uucp> Subject: kermit servers Keywords: kermit server kill Date: 18 Jan 91 10:07:25 GMT To: info-unix@sem.brl.mil Greetings I'm having a question about Kermit, on PC as well as on UNIX. I want to make my unix system run a kermit server to accept file-transfers initiated by the PC on dial-up lines, but I also want the unix-system to be able to initiate a transfer. For this, I need either to shut down the server on the unix side and start one on the PC like in the following chart: UNIX PC ====================================== kermit server start kermit dial.. kermit send file-upload finish (server dies) kermit server start kermit send file-download finish (server dies) kermit server start and so on. Or (better), I'd like two kermit servers, which also accept commands from the outside. They listen on the line for incoming requests, but also monitor a command-interface for locally initiated requests. On unix, this could be done using a signal, and then looking at a file, but on MessyDos? Has anybody done something like this already and can give me some info/help? Thx alot Mathias -- Mathias Koerber | S iemens | EUnet: koerber.sin@nixdorf.de 2 Kallang Sector | N ixdorf | USA: koerber.sin@nixdorf.com S'pore 1344 | I nformation Systems | Tel: +65/7402852 | Fax: +65/7402834 * Packed with Power, SNIckers really satisfy (or do they? Ask them gals :-) )* ----------------------------- From: Kartik Subbarao <subbarao@phoenix.princeton.edu> Subject: Re: how to create a user, which can't be su'd to ? Keywords: su Date: 18 Jan 91 16:23:40 GMT Sender: news@idunno.princeton.edu To: info-unix@sem.brl.mil In article <1460@nixsin.UUCP> koerberm@nixsin.UUCP (Mathias Koerber) writes: >Howdy, > >I have a (small) system, which I want all my staff to be able to shutdown in >the evening, without having to give them full root access. So i created a user >"shut", whose .profile calls /etc/shutdown with all the necessary parameters. > >I want to protect this account against being accessed via su, so that it is not >used accidentally. How can I do this? To avoid all hassles of making a new user with user id 0, you can simply write a small C program (as opposed to a problematic shell script) that execl's /etc/shutdown with the desired parameters, and make that program set UID root. i.e: main() { execl ("/etc/shutdown", "shutdown", "Your arguments here", (char *) 0); } and everything is okay. -Kartik -- internet# find . -name core -exec cat {} \; |& tee /dev/tty* subbarao@{phoenix or gauguin}.Princeton.EDU -|Internet kartik@silvertone.Princeton.EDU (NeXT mail) -| SUBBARAO@PUCC.BITNET - Bitnet ----------------------------- From: lim@ecs.umass.edu Subject: Nroff -man and two-/one-sided output Date: 18 Jan 91 16:42:50 GMT To: info-unix@sem.brl.mil Nroff with the -man option outputs for two-sided printing (prints on both sides of a sheet). As a result, the page numbers are either on the odd or even side depending on what page it is. Does anyone know how to change it so that the output is for one-sided printing, while still using the -man option? Thanks. Jonathan Lim ----------------------------- From: Tim Singletary <tsingle@sunland.gsfc.nasa.gov> Subject: need "yy-ddd-hh:mm:ss ==> (time_t) clock" converter Date: 18 Jan 91 17:08:47 GMT Sender: news@dftsrv.gsfc.nasa.gov To: info-unix@sem.brl.mil Help! I need something to convert yy-ddd-hh:mm:ss (i.e. year, day_of_year, hour, minute, second) to a unix-style _number_of_seconds_since_00:00:00_GMT,_Jan._1,_1970_. I tried to use Sun's timelocal() function but couldn't get it to work (it lets you pass both _day_of_year_ and _month,_day_of_month_ with no way to specify which is correct!). Ideally what I'm looking for is source code to a timelocal() function, but any tips or suggestions will be appreciated. Thanks in advance, tim -- Tim Singletary, August Automation Inc., (301) 286-7942 -- NRA extremist, etc. ----------------------------- From: Joe Porkka <jap@convex.cl.msu.edu> Subject: Re: need "yy-ddd-hh:mm:ss ==> (time_t) clock" converter Date: 18 Jan 91 20:07:00 GMT Sender: news@msuinfo.cl.msu.edu To: info-unix@sem.brl.mil tsingle@sunland.gsfc.nasa.gov (Tim Singletary) writes: >Help! I need something to convert yy-ddd-hh:mm:ss (i.e. year, >day_of_year, hour, minute, second) to a unix-style >_number_of_seconds_since_00:00:00_GMT,_Jan._1,_1970_. >I tried to use Sun's timelocal() function but couldn't get it to work (it Since your using a Sun you can use strptime(), at least in SunOS 4.1. I have no idea if this is a Sun defined function, or an ANSI function. ----------------------------- From: Carlos 666 Trott <fuentes@romulus.rutgers.edu> Subject: reading in ascii files on a tape using tar? Date: 18 Jan 91 17:09:29 GMT To: info-unix@sem.brl.mil I just got my own unix boxes and am new to the unix world...so forgive the stupid question... I will be getting several dozen labelled and unlabelled ascii tapes (some created on vaxen, others on big blue). What command whould I use to copy these files from tape to disk. -Carlos Citicorp*Lynch, Jones & Ryan ----------------------------- From: Stephen Harris <sweh@tharr.uucp> Subject: Ksh questions Date: 18 Jan 91 17:28:55 GMT Followup-To: comp.unix.questions To: info-unix@sem.brl.mil Hi all, Having just upgraded to Ultrix 4.1 I noticed we have the Korn Shell on the system. Since this shell is being used as the root shell in our American and Greek offices I thought I should learn about this, and what better way than to force it to be my login shell? I altered my .login file and made it .profile, and altered my .cshrc and made it my .envfile (adding ENV=$HOME/.envfile to my .profile) but have come across a few problems: 1) To stop me reading the motd file everytime I login I have a .hushlogin, but since an alteration may be important I had these lines in my .login: find /etc/motd -newer .hushlogin -exec cat /etc/motd {} \; touch .hushlogin However, under ksh I get find: Incomplete statement I have tried quoting the braces but to no affect. Any ideas? 2) Aliases I had a few aliases looking like alias ut tail \!* /usr/spool/uucp/LOGFILE How can I have parameters like this in KSH aliases without falling back on the obvious function: ut() { tail $* /usr/spool/uucp/LOGFILE } 3) Testing for the existence of a variable. Since I normally run under 'screen' I have the following lines in my .login file: set prompt="vax% " if ( $?WINDOW != 0 ) then set prompt="($WINDOW)% " endif if ($?ush != 0) then set prompt="(ush)% " endif Is there a ksh equivalent to the $?variable csh structure? I find using PS1=${WINDOW:-vax} if [ $PS1 = vax ] then export PS1="vax% " else export PS1="($PS1)% " fi messy! 4) goto....don't moan! In my .login file (at the end) I have the following: onintr no_screen stty -echo intr ' ' /bin/echo "Starting screen...." sleep 3 stty echo intr ^C screen onintr goto end_screen no_screen: stty echo intr ^C /bin/echo "" /bin/echo "Aborted...." onintr end_screen: How would I do the equivalent in ksh? 5) Command editing In csh if I type 'ls -l filename', then I can access !:0 !:1 and !:2 and !* enabling a command such as 'more !:2' What is the equivalent ksh command? There you go, some nice questions for all you KSH experts to answer :-) (PS: Ultrix 4.1 comes with KSH version 11/16/88 and I have access to 11/16/88b) Thanks a lot, -- Stephen Harris Disclaimer: me have an opinion? | Email: ..!ukc!axion!tharr!sweh What an idea! | sweh%tharr.uucp@uk.co.bt.axion Wanted: humour transplant | tharr!sweh@uk.ac.ukc <-- tharr *free* public access to Usenet in the UK 0234 261804 --> ----------------------------- From: Eric Berggren <berggren@eecs.cs.pdx.edu> Subject: Tek 4319 threads? Date: 18 Jan 91 17:54:24 GMT Sender: news@pdxgate.uucp To: info-unix@sem.brl.mil I have several applications that require the use of threads, which I would like to port to a Tek 4319 box. Unfortunately, my lack of experience in this sort of thing prohibits me from improvising. Anyone have any good ideas where I might find good information on this, and what I might be able to do to implement something like this? Has someone already hacked on this? Any help would be appreciated. Thanx. (example: XTank ... ) -e.b. ============================================================================== Eric Berggren | "Round and round the while() loop goes; Computer Science/Eng. | Whether it stops," Turing says, berggren@eecs.cs.pdx.edu | "nobody knows." ----------------------------- From: Tillmann Basien <tb@pemstgt.pem-stuttgart.de> Subject: Why is there no NFS with XENIX Keywords: NFS Date: 18 Jan 91 17:54:54 GMT To: info-unix@sem.brl.mil Hy guys, we have a great and phanastic network with SCO UNIX, ODT and XENIX. But what we miss is NFS in XENIX. As I know, for NFS you need FSS. This is not supported in XENIX. So I think, that the FSS is needed only for the client. Why is there no NFS-Server daemon in XENIX. Who can help me !! Tillmann -- Dipl.-Ing. Tillmann A. Basien PEM Programmentwicklungsgesellschaft Vaihinger Str.49, PostBox 810165 fuer Microcomputer mbH FRG 7000 Stuttgart 80 voice: +49-711-713045 fax: +49-711-713047 ----------------------------- From: Tony Rick <tonyr@tekadg.adg.tek.com> Subject: GDSII<->PostScript<->HPGL translation pgms wanted Keywords: hpgl,postscript,gdsII,graphics,lsi,vlsi Date: 18 Jan 91 18:01:56 GMT Followup-To: poster To: info-unix@sem.brl.mil I am looking for programs that do GDSII<->HPGL and GDSII<->PostScript translations. Do you know of any such animals (dare I say puppies?) and from where they might be acquired? My preference is for public domain sources, but any help at all would be appreciated. Please respond to my email address. Thanks. Tony Rick Tektronix, Inc. Beaverton, OR email:tonyr@tekadg.adg.tek.com voice:503-627-2942 ----------------------------- From: Dana Eckart <dana@rucs.runet.edu> Subject: Can UNIX pipe connections be compiled? Date: 18 Jan 91 19:32:34 GMT To: info-unix@sem.brl.mil Does there exist a piece of software (or is it even possible) to compile a pipe? In particular, suppose you had ls -l | fgrep "Dec" | cut -f 4 is there anyway to compile the above pipeline so that the pieces can communicate more quickly. I am looking for a general solution, not one that works only for the above example. The question arises because I have constructed some small programs which become VERY slow when piped together. It appears that if I can get around the slow speed of standard (character based) i/o that things will be MUCH faster. Although I suspect I am stuck (unless I rewrite my code - combining the pieces programs into a single program), perhaps some kind netter will be able to save me a great deal of grief. Thanks in advance... J Dana Eckart INTERNET: dana@rucs.runet.edu SNAIL: P.O. Box 10865/Blacksburg, VA 24062-0865 ----------------------------- From: Barry Margolin <barmar@think.com> Subject: Re: Can UNIX pipe connections be compiled? Date: 18 Jan 91 22:43:23 GMT Sender: news@think.com To: info-unix@sem.brl.mil In article <1991Jan18.193234.216@rucs.runet.edu> dana@rucs.runet.edu (Dana Eckart) writes: >Does there exist a piece of software (or is it even possible) to compile >a pipe? In particular, suppose you had > > ls -l | fgrep "Dec" | cut -f 4 > >is there anyway to compile the above pipeline so that the pieces can >communicate more quickly. I am looking for a general solution, not >one that works only for the above example. I'm not really sure I (or you) understand what you expect the pipe to be compiled into. On Unix, each program has to be run in its own process, so they're going to have to use some form of inter-process communication to feed the data to each other. There are shell script compilers, but all they do is save the overhead of parsing the commands and interpreting shell built-ins; the compiled script still runs each command in its own process and sets up pipes for them to communicate. >The question arises because I have constructed some small programs which >become VERY slow when piped together. It appears that if I can get around >the slow speed of standard (character based) i/o that things will be MUCH >faster. If the programs that are used in the pipeline do character-at-a-time I/O, then speeding up the pipeline isn't going to help. Compiling the pipeline wouldn't change the programs; they'll still be doing character I/O. I strongly doubt that the speed of the pipe is the limiting factor; this is a pretty simple mechanism whose performance is extremely important to most Unix implementors. I just timed the following on a Sun-4/330 running SunOS 4.0.3: cat file file file | cat >/dev/null "file" is a 4Mb file on an NFS server. The SunOS version of "cat" uses mmap() to read in files named as arguments, so once it is all paged into memory (I ran the command until it got zero page faults) nearly all the overhead should be in the pipe (about 95% of the CPU time was system time, and I doubt I was spending much time in the null device driver). I was getting about 4Mbyte/CPU-second throughput. And I think most stdio implementations don't actually do character-at-a-time I/O. getc() and putc() are usually implemented as macros that read/write a buffer, and don't actually do any I/O until the buffer is empty/full (putc()'s output buffer will also be flushed if you call fflush()). >Although I suspect I am stuck (unless I rewrite my code - combining the >pieces programs into a single program), perhaps some kind netter will be >able to save me a great deal of grief. Have you actually profiled your programs and found that they are spending most of their time doing I/O to pipes? -- Barry Margolin, Thinking Machines Corp. barmar@think.com {uunet,harvard}!think!barmar ----------------------------- From: Tom Christiansen <tchrist@convex.com> Subject: Re: Can UNIX pipe connections be compiled? Date: 18 Jan 91 23:05:30 GMT Sender: news access account <usenet@convex.com> Nntp-Posting-Host: pixel.convex.com To: info-unix@sem.brl.mil From the keyboard of dana@rucs.runet.edu (Dana Eckart): :Does there exist a piece of software (or is it even possible) to compile :a pipe? In particular, suppose you had : : ls -l | fgrep "Dec" | cut -f 4 : :is there anyway to compile the above pipeline so that the pieces can :communicate more quickly. I am looking for a general solution, not :one that works only for the above example. : :The question arises because I have constructed some small programs which :become VERY slow when piped together. It appears that if I can get around :the slow speed of standard (character based) i/o that things will be MUCH :faster. : :Although I suspect I am stuck (unless I rewrite my code - combining the :pieces programs into a single program), perhaps some kind netter will be :able to save me a great deal of grief. You're absolutely right that the generic a | b | c | d | e | f | g | h > out stream ends up being very slow. In general, the answer to whether things like this can be automagically compiled is no, because you can't know what all the pieces are a priori. You'd have to be able to duplicate what all the components parts do. However, do not give up hope. The perl langauge is particularly designed to thing like that. The average shell script full of lots of pipes will, when translated into perl, run much faster than originally. The translation is usually pretty easy. Because perl is one program rather than a dozen others (sh, awk, sed, tr, wc, sort, grep, ...), it is usually clearer to express yourself in perl than in sh and allies, and often more efficient as well. You don't need as many pipes, temporary files, or separate processes to do the job. You don't need to go shoving your data stream out to tr and back and to sed and back and to awk and back and to sort back and then back to sed and back again. Doing so can often be slow, awkward, and/or confusing. For example, let's take the stream given above: : ls -l | fgrep "Dec" | cut -f 4 With this, as with many of the simpler streams, you could really do this in all in awk. (I say this is so Henry Spencer doesn't give me a rough time at USENIX next week. :-) ls -l | awk '/Dec/ { print $4 }' (By the way, the cut command you gave above didn't do what I think you actually wanted it to do.) Now, I think what you are wanting to do here is eventually sum up all the files that were touched in December. ls -l | awk '/Dec/ { sum += $4 } END {print sum}' Run time: .39u + .44s I still haven't given ample motivation for using perl. That's because in this case, you don't really need it. You asked for a general solution. Many scripts have sed calls in them. If you have nawk or gawk, you can do a lot of this, although not quite all. Perl is conducive to the pipe-and-filter philosophy: I'll open a pipe to ls. #!/usr/bin/perl open (PIPE, "ls -l|"); while (<PIPE>) { $sum += (split)[3] if /Dec/; } print "$sum\n"; Run time: .06u + 06s [I guess awk is just slower.] But perl lets you get at things no version of awk does, because it has most of the C library available to it. So, you could do it all yourself if you wanted and not even call ls: #!/usr/bin/perl opendir (DIR, '.'); for $file (readdir(DIR)) { next if $file =~ /^\./; # no dot files ($size, $mtime) = (lstat($file))[7,9]; ($mon, $year) = (localtime($mtime))[4,5]; next unless $mon == 11 && $year == 90; $sum += $size; } print "$sum\n"; Run time: .40u + .18s More elaborate pipelines and larger data sets will show much more gain. There's a little bit of a learning-curve to be able to generate fast code, but in general it's pretty easy to get started on. --tom -- "Hey, did you hear Stallman has replaced /vmunix with /vmunix.el? Now he can finally have the whole O/S built-in to his editor like he always wanted!" --me (Tom Christiansen <tchrist@convex.com>) ----------------------------- From: "Narayan S. Raja" <raja@bombay.cps.msu.edu> Subject: Re: Can UNIX pipe connections be compiled? Date: 19 Jan 91 07:27:55 GMT Sender: news@msuinfo.cl.msu.edu To: info-unix@sem.brl.mil In article <1991Jan18.230530.9331@convex>, (Tom Christiansen) writes: < From the keyboard of dana@rucs.runet.edu (Dana Eckart): < :Does there exist a piece of software (or is it even possible) to compile < :a pipe? In particular, suppose you had < : < : ls -l | fgrep "Dec" | cut -f 4 < : < :is there anyway to compile the above pipeline so that the pieces can < :communicate more quickly. I am looking for a general solution, not < :one that works only for the above example. < In general, the answer to whether things like this can be automagically < compiled is no, because you can't know what all the pieces are a priori. However, wouldn't pipes be speeded up considerably on a Sun by mounting /tmp as a tmpfs filesystem (i.e. memory-based filesystem)? Apparently tmpfs is *really* quick under SunOS 4.1.1. Pardonnez-moi if this is a dumb suggestion. Narayan Sriranga Raja. ----------------------------- From: Guy Harris <guy@auspex.auspex.com> Subject: Re: shell in programs Date: 18 Jan 91 21:53:16 GMT To: info-unix@sem.brl.mil >No big problem if it doesn't. Just catch the ENOEXEC and do the shell call >you would have done anyway. Or, if you also want to run a command and have the system search $PATH to see which one to run, if appropriate, rather than having to give a full pathname, use "execvp()" which does the path search *and* the catching of ENOEXEC for you.... ----------------------------- From: "Ronald S. Woan Jr." <woan@nowhere> Subject: Re: exist enscript for sun4? Date: 19 Jan 91 02:10:32 GMT Sender: news@awdprime.uucp Followup-To: comp.lang.postscript To: info-unix@sem.brl.mil shawn@litsun8.litsun.epfl.edu (Shawn Koppenhoefer) writes: Shawn> does anyone know where I can get ENSCRIPT for sun4 Shawn> machines? the source would be fine (in fact, preferred!). Shawn> I've tried using the archie facility at McGill but no Shawn> luck in source or executable. enscript is part of the transcript utilities from Adobe... You'll need to buy/license it... A similar ASCII->PS filter is a2ps which can be found at comp.sources.unix (or was it misc) archives... -- +-----All Views Expressed Are My Own And Are Not Necessarily Shared By------+ +------------------------------My Employer----------------------------------+ + Ronald S. Woan woan@peyote.cactus.org or woan%austin@iinus1.ibm.com + + other email addresses Prodigy: XTCR74A Compuserve: 73530,2537 + ----------------------------- From: "John A. Weeks III" <john@newave.uucp> Subject: Re: exist enscript for sun4? Date: 19 Jan 91 04:01:54 GMT Followup-To: comp.lang.postscript To: info-unix@sem.brl.mil In article <SHAWN.91Jan15161239@litsun8.litsun.epfl.edu> shawn@litsun.epfl.ch: > does anyone know where I can get ENSCRIPT for sun4 machines? > the source would be fine (in fact, preferred!). > Does anyone know where I should be looking? if at all?? In yer phone book for Adobe Systems. Enscript is part of a software package called Transcript. It is not public domain, and sources are not readily available (if at all). As an alternative, call your Sun dealer and inquire about their postscript printing packages. -john- -- =============================================================================== John A. Weeks III (612) 942-6969 john@newave.mn.org NeWave Communications ...uunet!rosevax!tcnet!wd0gol!newave!john =============================================================================== ----------------------------- From: Rich Stevens <rstevens@noao.edu> Subject: Re: SUMMARY: A Good Network Programming Book. Date: 19 Jan 91 05:30:13 GMT To: info-unix@sem.brl.mil In article <590@siswat.UUCP> buck@siswat.UUCP (A. Lester Buck) writes: > > Is the massive amount of sample code available in electronic form anywhere? It's all at uunet.uu.net: you can FTP the file: pub/netprog.tar.Z or UUCP the file: uunet!~/pub/netprog.tar.Z. Rich Stevens (rstevens@noao.edu) ----------------------------- From: Rich Stevens <rstevens@noao.edu> Subject: Re: Setting my prompt Date: 19 Jan 91 05:51:36 GMT To: info-unix@sem.brl.mil Case conversion in awk is hard. Bentley & Kernighan finish their paper "Tools for Printing Indixes" with the comment: "there is no good way to convert cases in awk." The actual code that they use in this paper to convert case is: BEGIN { FS = "\t" s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz " # set upper["a"] = "A" for (i = 1; i <= 27; i++) upper[substr(s,i+27,1)] = substr(s,i,1) # set lower["a"] = lower["A"] ="a" for (i = 1; i <= 27; i++) { lower[substr(s,i,1)] = substr(s,i+27,1) lower[substr(s,i+27,1)] = substr(s,i+27,1) } } (Ugh) This should work with any version of awk. But, the newer releases of awk (the "nawk" available from the Toolchest) do contain new functions toupper() and tolower(). GNU awk also contains these new functions. As I recall, only versions of nawk that were obtained from the Toolchest since about 11/89 contain these functions. I see that the version of nawk with SunOS 4.1 doesn't yet have these functions. These functions weren't in awk when the book was written by AK&W, so they're still somewhat unknown. I wonder if they're in the new O'Reilly book on awk ? Rich Stevens ----------------------------- End of INFO-UNIX Digest ***********************