1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VMS
(I do not know if it works for Posix-VMS)
You need:
C-Compiler
bison (or another yacc)
flex (or another lex to build the helpfile)
termcap-library
- I was using the GNU-version termcap-1.2. It sould be available on
every gnu-mirror.
To make fudgit.exe:
edit [.src]fudgit.h
Here is an example:
#define HELPFILE "tool$dir:[fudgit]fudgit.help"
#define DEFPAGER "" /* important ! */
#define DEFSHELL "" /* important ! */
#define FORMAT "%10.8e" /* not "% 10.8e" ! */
#define VFORMAT "%.3g"
#define HISTORY ".hist_fudgit"
#define PLOTTING "gnuplot" /* use the command, not the filename sys$disk:gnuplot */
edit [.src]makevms.com to set up the libraries and
compiler-options correctly.
check if install_dummy.c exists. Copy install.dummy_c (or another
filename your 'tar' substituted for install.dummy.c) to install_dummy.c
enter @makevms in [.src] and hope.
To make the help-file:
$ set default [.docs]
$ cc splittmpl.c
$ link splittmpl,sys$library:vaxcrtl/lib
$ flex latex2help.l
$ cc lexyy.c
$ link /exe=latex2help lexyy.obj,sys$library:vaxcrtl/lib
$ latex2help:=$sys$disk:[]latex2help
$ splittmpl:=$sys$disk:[]splittmpl
$ latex2help credits.tex [-]Credits
$ splittmpl -help reference.tmpl
$ latex2help reference.help fudgit.help
Here are some remarks:
- many compiler- and linker-warnings are normal.
- there are no bessel-functions.
- on small machines (or small quota) CC may run out of virtual memory.
-> Split readline.c or use cc/nooptimize or gcc
- using gcc is somewhat difficult:
1. edit makevms.com appropriate
2. create the file gcc_scanfile.h (see below)
3. try it. Most probably gcc will report 'conflicting types'.
search the source-code for the prototype declaration of the
conflicting function and comment it out /* */. try again.
- the pipes which execute the plot and pager-commands do not work
as you would expect:
1. after pclose() the process is killed 5 seconds later. Therefore
a pager would be killed before you could read the text.
2. if the command fails, the command-line-interprter (CLI)
still runs and interpretes the piped text as commands.
popen() reports succes, if the CLI is started succesful.
So if you type 'quit' in pmode, gnuplot will exit, but
not the CLI. You can type 'logout' to exit.
So be careful with the Pager-command.
- CTRL-C aborts fudgit instead of generating signal SIGINT.
The temporary files are not deleted and the subprocess is not killed.
You can kill them with the command 'stop /id=PID'.
'show user /full' gives you the process-id.
- still to do:
readline: filename-completion with directories.
handle to cursor-motion correct after an output to stderr.
(it wraps in the next line.)
fudgit: better pipes
make helpfile
ctrl-c: exit with Ft_catcher.
Is readline/readline.c the culprit ? I could disable
ctrl-c with sigsetmask(), but not make it call Ft_catcher.
readline.c: line 641: SIGINT: kill (getpid(), sig)
I had not the time to play with the VMS-exception-handler.
more math-functions.
Here are the VMS-defines for gcc_scanfile.h
---------- gcc_scanfile.h -----------------
/* defines for fudgit. gcc cannot handle so much defines on command-line */
#ifndef VERSION
#define VERSION "2.3.4"
#endif
#ifndef DATE
#define DATE "sometime"
#endif
/* #define VOID_SIGHANDLER */
/* #define NOUNISTD_H */
/* #define NOMALLOC_H */
#define CODETYPE
#define Code void
#define USE_GETCWD
#define NOGAMMA
#define NOTRUNC
#define NORINT
#define NOCBRT
#define NOHYP_TRIGO
#define NODRAND48
#define NOJN_YN
#define NOY0_Y1
#define NOMALLINFO
#define MACROPOP
#define system vms_system
/* for Readline */
#define GNU_TERMCAP
#define getenv vms_getenv
------------ end of gcc_scanfile.h --------
Klaus Reimann
Breslauer Ring 27
D-61381 Friedrichsdorf
Klaus.Reimann@studbox.uni-stuttgart.de
|