From:	MERC::"uunet!CRVAX.SRI.COM!RELAY-INFO-VAX" 26-APR-1993 11:31 26-APR-1993 11:31:00.00
To:	Info-VAX@KL.SRI.COM
CC:	
Subj:	Re: WHY I HATE THE MOUSE (was Re: TPU/EVE flames)

In article <1993Apr20.150053.28570@cadlab.sublink.org>, martelli@cadlab.sublink.org (Alex Martelli) writes...
>And the word order you use is not possible, it should be:
>    Abbiamo tutti i suoi problemi
>	meaning either:
>	    we have all of his{/her} problems

Thats it! Thanks! I'll change it immediately. I knew it was wrong, but didn't
think it was that wrong. I was quoting from obviously faint memory from a
record by Picchio dal Pozzo, who were I think from around the Naples area.
My memory might not be so faint if I hadn't lent it to someone and NEVER GOT
IT BACK! I was told the title meant "We all have your problems", which seemed
perfectly appropos re: UNIX. This album, by the way, is HIGHLY recommended.


Tom O'Toole - ecf_stbo@jhuvms.hcf.jhu.edu - JHUVMS system programmer 
Homewood Computing Facilities, Johns Hopkins University, Balto. Md. 21218 
>Here comes a jet ski.
>weuh weeuhh weeuhh weeuhh WEEUHH WEEUHH WEEUHH WEEUHH weeuhh weeuhh weeuhh weuh
-----

Fun geek stuff:
If you call the following subroutine it will write a program to the screen
that, when built and run on its source, will generate the following subroutine.


C subroutine written by GENHELP...
	SUBROUTINE HELP_genhelp
 100	FORMAT(' C program that write a fortran subroutine to spew ' 
	1	'text from a specified file ')
	WRITE(6, 100)
 101	FORMAT(' C this is done so programs can have embedded help ' 
	1	'text information without the ')
	WRITE(6, 101)
 102	FORMAT(' C programmer having to write FORMAT(''blahblahblah''' 
	1	') 50,000 times. The resulting ')
	WRITE(6, 102)
 103	FORMAT(' C code may look ugly, and has the disadvantage tha' 
	1	't the program needs to be ')
	WRITE(6, 103)
 104	FORMAT(' C compiled to change the help text, but has the di' 
	1	'stinct advantage that help ')
	WRITE(6, 104)
 105	FORMAT(' C files (and OS specific path/directory locations) ' 
	1	'don''t have to be dragged ')
	WRITE(6, 105)
 106	FORMAT(' C around, resulting in a very portable and easy to' 
	1	' install program... ')
	WRITE(6, 106)
 107	FORMAT(' ')
	WRITE(6, 107)
 108	FORMAT(' 	program genhelp')
	WRITE(6, 108)
 109	FORMAT(' ')
	WRITE(6, 109)
 110	FORMAT(' 	implicit none')
	WRITE(6, 110)
 111	FORMAT(' ')
	WRITE(6, 111)
 112	FORMAT(' 	integer baseline')
	WRITE(6, 112)
 113	FORMAT(' 	parameter (baseline=100)')
	WRITE(6, 113)
 114	FORMAT(' 	character*(*) banner,sub_prefix')
	WRITE(6, 114)
 115	FORMAT(' 	parameter (banner=''C subroutine written by GENHEL' 
	1	'P...'') ')
	WRITE(6, 115)
 116	FORMAT(' 	parameter (sub_prefix=''HELP_'')')
	WRITE(6, 116)
 117	FORMAT(' ')
	WRITE(6, 117)
 118	FORMAT(' 	character*32 filename,topic')
	WRITE(6, 118)
 119	FORMAT(' 	character*132 line')
	WRITE(6, 119)
 120	FORMAT(' 	integer ncf,nct,ncl,linenum,isplit,iscan')
	WRITE(6, 120)
 121	FORMAT(' ')
	WRITE(6, 121)
 122	FORMAT(' C ')
	WRITE(6, 122)
 123	FORMAT(' 1	format(''$Enter name of help text file:'')')
	WRITE(6, 123)
 124	FORMAT(' 	write(6,1)')
	WRITE(6, 124)
 125	FORMAT(' 2	format(q,a)')
	WRITE(6, 125)
 126	FORMAT(' 	read(5,2)ncf,filename')
	WRITE(6, 126)
 127	FORMAT(' 3	format(''$Enter name of help topic:'')')
	WRITE(6, 127)
 128	FORMAT(' 	write(6,3)')
	WRITE(6, 128)
 129	FORMAT(' 4	format(q,a)')
	WRITE(6, 129)
 130	FORMAT(' 	read(5,4)nct,topic')
	WRITE(6, 130)
 131	FORMAT(' ')
	WRITE(6, 131)
 132	FORMAT(' C open files...')
	WRITE(6, 132)
 133	FORMAT(' 	open(unit=1,file=filename(:ncf),status=''old'',rea' 
	1	'donly) ')
	WRITE(6, 133)
 134	FORMAT(' 	open(unit=2,file=sub_prefix//topic(:nct)//''.FOR''')
	WRITE(6, 134)
 135	FORMAT(' 	1	,status=''new'',carriagecontrol=''list'')')
	WRITE(6, 135)
 136	FORMAT(' ')
	WRITE(6, 136)
 137	FORMAT(' C write out preamble...')
	WRITE(6, 137)
 138	FORMAT(' 5	format(a)')
	WRITE(6, 138)
 139	FORMAT(' 	write(2,5) banner')
	WRITE(6, 139)
 140	FORMAT(' 6	format(''	SUBROUTINE '',a)')
	WRITE(6, 140)
 141	FORMAT(' 	write(2,6) sub_prefix//topic(:nct)')
	WRITE(6, 141)
 142	FORMAT(' ')
	WRITE(6, 142)
 143	FORMAT(' C process lines...')
	WRITE(6, 143)
 144	FORMAT(' 	linenum=baseline')
	WRITE(6, 144)
 145	FORMAT(' 10	continue')
	WRITE(6, 145)
 146	FORMAT(' ')
	WRITE(6, 146)
 147	FORMAT(' 	read(1,4,end=99)ncl,line')
	WRITE(6, 147)
 148	FORMAT(' ')
	WRITE(6, 148)
 149	FORMAT(' C escape single quotes...')
	WRITE(6, 149)
 150	FORMAT(' 	call quotaquote(line,ncl,isplit)')
	WRITE(6, 150)
 151	FORMAT(' ')
	WRITE(6, 151)
 152	FORMAT(' 11	format(i4,''	FORMAT('''' '',a,'''''')'')')
	WRITE(6, 152)
 153	FORMAT(' 12	format(''	WRITE(6,'',i4,'')'')')
	WRITE(6, 153)
 154	FORMAT(' 13	format(i4,''	FORMAT('''' '',a,'''''' '')')
	WRITE(6, 154)
 155	FORMAT(' 14	format(''	1	'''''',a,'' '''')'')')
	WRITE(6, 155)
 156	FORMAT(' ')
	WRITE(6, 156)
 157	FORMAT(' C Handel long lines')
	WRITE(6, 157)
 158	FORMAT(' 	if(ncl.le.isplit) then')
	WRITE(6, 158)
 159	FORMAT(' 		write(2,11)linenum,line(:ncl)')
	WRITE(6, 159)
 160	FORMAT(' 		write(2,12)linenum')
	WRITE(6, 160)
 161	FORMAT(' 	else')
	WRITE(6, 161)
 162	FORMAT(' 		write(2,13)linenum,line(:isplit)')
	WRITE(6, 162)
 163	FORMAT(' 		write(2,14)line(isplit+1:ncl)')
	WRITE(6, 163)
 164	FORMAT(' 		write(2,12)linenum')
	WRITE(6, 164)
 165	FORMAT(' 	endif')
	WRITE(6, 165)
 166	FORMAT(' ')
	WRITE(6, 166)
 167	FORMAT(' 	linenum=linenum+1')
	WRITE(6, 167)
 168	FORMAT(' ')
	WRITE(6, 168)
 169	FORMAT(' 	goto 10')
	WRITE(6, 169)
 170	FORMAT(' ')
	WRITE(6, 170)
 171	FORMAT(' C done, write postamble....')
	WRITE(6, 171)
 172	FORMAT(' 99	continue')
	WRITE(6, 172)
 173	FORMAT(' ')
	WRITE(6, 173)
 174	FORMAT(' 101	format(''1	FORMAT(''''$Hit <RETURN> to continue' 
	1	'...'''')'') ')
	WRITE(6, 174)
 175	FORMAT(' 	write(2,101)')
	WRITE(6, 175)
 176	FORMAT(' 102	format(''	WRITE(6,1)'')')
	WRITE(6, 176)
 177	FORMAT(' 	write(2,102)')
	WRITE(6, 177)
 178	FORMAT(' 103	format(''	READ(5,*)'')')
	WRITE(6, 178)
 179	FORMAT(' 	write(2,103)')
	WRITE(6, 179)
 180	FORMAT(' 105	format(''	RETURN''/''	END'')')
	WRITE(6, 180)
 181	FORMAT(' 	write(2,105)')
	WRITE(6, 181)
 182	FORMAT(' ')
	WRITE(6, 182)
 183	FORMAT(' 	close(1)')
	WRITE(6, 183)
 184	FORMAT(' 	close(2)')
	WRITE(6, 184)
 185	FORMAT(' ')
	WRITE(6, 185)
 186	FORMAT(' 	call exit')
	WRITE(6, 186)
 187	FORMAT(' ')
	WRITE(6, 187)
 188	FORMAT(' 	end')
	WRITE(6, 188)
 189	FORMAT(' ')
	WRITE(6, 189)
 190	FORMAT(' ')
	WRITE(6, 190)
 191	FORMAT(' C ugly, does two copies, but who cares?')
	WRITE(6, 191)
 192	FORMAT(' C cannot properly handle final strings that run of' 
	1	'f the end of storage... ')
	WRITE(6, 192)
 193	FORMAT(' 	subroutine quotaquote(string,length,isplit)')
	WRITE(6, 193)
 194	FORMAT(' ')
	WRITE(6, 194)
 195	FORMAT(' 	implicit none')
	WRITE(6, 195)
 196	FORMAT(' ')
	WRITE(6, 196)
 197	FORMAT(' 	character*(*) string')
	WRITE(6, 197)
 198	FORMAT(' 	integer length')
	WRITE(6, 198)
 199	FORMAT(' ')
	WRITE(6, 199)
 200	FORMAT(' 	character*255 buffer')
	WRITE(6, 200)
 201	FORMAT(' 	integer iscan,iptr,isplit')
	WRITE(6, 201)
 202	FORMAT(' 	character*1 quote')
	WRITE(6, 202)
 203	FORMAT(' ')
	WRITE(6, 203)
 204	FORMAT(' 	quote=''''''''')
	WRITE(6, 204)
 205	FORMAT(' ')
	WRITE(6, 205)
 206	FORMAT(' 	isplit=50')
	WRITE(6, 206)
 207	FORMAT(' ')
	WRITE(6, 207)
 208	FORMAT(' C most of the time, it will not be necessary...')
	WRITE(6, 208)
 209	FORMAT(' 	if(index(string,quote).eq.0) return')
	WRITE(6, 209)
 210	FORMAT(' ')
	WRITE(6, 210)
 211	FORMAT(' 	iptr=1')
	WRITE(6, 211)
 212	FORMAT(' 	do iscan=1,length')
	WRITE(6, 212)
 213	FORMAT(' 		if(string(iscan:iscan).eq.quote) then')
	WRITE(6, 213)
 214	FORMAT(' 			buffer(iptr:iptr)=quote')
	WRITE(6, 214)
 215	FORMAT(' 			iptr=iptr+1')
	WRITE(6, 215)
 216	FORMAT(' 		endif')
	WRITE(6, 216)
 217	FORMAT(' 		buffer(iptr:iptr)=string(iscan:iscan)')
	WRITE(6, 217)
 218	FORMAT(' C            safe place to split...')
	WRITE(6, 218)
 219	FORMAT(' 		if((iptr.gt.50).and.(isplit.eq.50)) isplit=iptr')
	WRITE(6, 219)
 220	FORMAT(' 		iptr=iptr+1')
	WRITE(6, 220)
 221	FORMAT(' 	enddo')
	WRITE(6, 221)
 222	FORMAT(' ')
	WRITE(6, 222)
 223	FORMAT(' 	string=buffer(:min(iptr-1,len(string)))')
	WRITE(6, 223)
 224	FORMAT(' 	length=iptr-1')
	WRITE(6, 224)
 225	FORMAT(' ')
	WRITE(6, 225)
 226	FORMAT(' 	return')
	WRITE(6, 226)
 227	FORMAT(' 	end')
	WRITE(6, 227)
 228	FORMAT(' 			')
	WRITE(6, 228)
1	FORMAT('$Hit <RETURN> to continue...')
	WRITE(6,1)
	READ(5,*)
	RETURN
	END


