xref: /original-bsd/contrib/sc/VMS_NOTES (revision acda45c0)
1From: ihnp4!gargoyle!oddjob!noao!arizona!naucse!jdc (John Campbell)
2To: arizona!noao!oddjob!gargoyle!ihnp4!nsc!nscpdc!rgb
3Subject: VMS SC
4
5VMS USERS:
6
7Bob Bond has been generous enough to give me free rein in adding what I
8think is needed to make SC run on VMS.  Any problems with VMS should be
9directed to me--they are not Bob's fault.
10
11The VMS SC is "SIMPLE" for the most part, except that the arrow keys
12(instead of hjkl) will move you around the cells.  The VMS version of SC
13will not interact with the Bourne shell (obviously), which means that CRYPT
14and EXTERNAL FUNCTIONS will not be available.
15
16If you have a 'C' compiler and GNU Bison then you should be able to get
17SC running on VMS by following the instructions below.
18
19Step 1:  Get all the files
20
21I've heard of a few sites that can unpack unix shar files directly on
22VMS.  Most people, however, will need access to a unix machine to get
23the original distribution unpacked.  At this time you should also build
24experres.h and statres.h and perhaps run the man pages off if you need
25to port the documentation. To build the two "missing" hearder files:
26   sed <gram.y >experres.h -f eres.sed
27   sed <gram.y >statres.h -f sres.sed
28
29Step 2: Cut out BUILD.COM and GETOPT.C
30
31At the end of this file are two other pieces: BUILD.COM and GETOPT.C.  After
32you've moved everything to VMS, cut BUILD.COM and GETOPT.C out of here and
33put them in the same directory as the rest of the SC distribution.
34
35Step 3: Build it
36
37Theoretically all you now need to do is @BUILD and SC (as well as PSC)
38will be running on VMS.  If you have problems feel free to contact me
39at ...!arizona!naucse!jdc  (or even call at 602-523-6259).
40
41---------------------cut here for BUILD.COM--------------------------
42$! VMS command file to build SC and PSC (requires bison)
43$! SC:
44$ bison -d gram.y
45$ ren gram_tab.c gram.c
46$ cc  /define=("SIMPLE","SIGVOID") sc.c
47$ cc  /define=("SIMPLE","SIGVOID") gram.c
48$ cc  /define=("SIMPLE","SIGVOID") lex.c
49$ cc  /define=("SIMPLE","SIGVOID") interp
50$ cc  /define=("SIMPLE","SIGVOID") cmds
51$ cc  /define=("SIMPLE","SIGVOID") xmalloc
52$ cc  /define=("SIMPLE","SIGVOID") range
53$ cc  /define=("SIMPLE","SIGVOID") help
54$ link sc.obj,lex.obj,gram.obj,interp.obj,cmds.obj,xmalloc.obj,-
55       range.obj,help.obj,sys$library:vaxcrtl.olb/lib
56$ !
57$ ! Create VMS foreign command symbol to test SC
58$ !
59$ sc == "$" + f$logical("SYS$DISK") + f$directory() + "SC.EXE"
60$!
61$! Now PSC
62$!
63$ cc psc.c
64$ cc getopt.c
65$ link psc,getopt,sys$library:vaxcrtl.olb/lib
66$ !
67$ ! Create VMS foreign command symbol to test PSC (Note that
68$ ! PSC reads SYS$INPUT and writes to SYS$OUTPUT, so use
69$ ! DEFINE/USER to redirect.)
70$ !
71$ psc == "$" + f$logical("SYS$DISK") + f$directory() + "PSC.EXE"
72
73---------------------cut here for GETOPT.C------------------------
74/*
75 * getopt - get option letter from argv
76 *      This software is in the public domain
77 *      Originally written by Henry Spencer at the U. of Toronto
78 */
79
80#include <stdio.h>
81
82char    *optarg;        /* Global argument pointer. */
83int     optind = 0;     /* Global argv index. */
84
85static char     *scan = NULL;   /* Private scan pointer. */
86
87/* extern char     *index();  obsolete, used strchr (JDC). */
88
89int
90getopt(argc, argv, optstring)
91int argc;
92char *argv[];
93char *optstring;
94{
95        register char c;
96        register char *place;
97
98        optarg = NULL;
99
100        if (scan == NULL || *scan == '\0') {
101                if (optind == 0)
102                        optind++;
103
104                if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
105                        return(EOF);
106                if (strcmp(argv[optind], "--")==0) {
107                        optind++;
108                        return(EOF);
109                }
110
111                scan = argv[optind]+1;
112                optind++;
113        }
114
115        c = *scan++;
116        place = strchr(optstring, c);
117
118        if (place == NULL || c == ':') {
119                fprintf(stderr, "%s: unknown option -%c\n", argv[0], c);
120                return('?');
121        }
122
123        place++;
124        if (*place == ':') {
125                if (*scan != '\0') {
126                        optarg = scan;
127                        scan = NULL;
128                } else {
129                        optarg = argv[optind];
130                        optind++;
131                }
132        }
133
134        return(c);
135}
136