annotate src/os_vms.c @ 16150:b23048205589 v8.1.1080

patch 8.1.1080: when a screendump test fails, moving the file is a hassle commit https://github.com/vim/vim/commit/ef7f0e367eeaf6fb31b1caa0e3de1a4b07e86af3 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 30 15:59:51 2019 +0100 patch 8.1.1080: when a screendump test fails, moving the file is a hassle Problem: When a screendump test fails, moving the file is a hassle. Solution: Instead of appending ".failed" to the file name, keep the same file name but put the screendump in the "failed" directory. Then the file name only needs to be typed once when moving a screendump.
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Mar 2019 16:00:06 +0100
parents 0d199e59a988
children ef00b6bc186b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 * VMS port by Henk Elbers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * VMS deport by Zoltan Arpadffy
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
14 /* define _generic_64 for use in time functions */
6359
9f9058aeba0d updated for version 7.4.512
Bram Moolenaar <bram@vim.org>
parents: 5782
diff changeset
15 #if !defined(VAX) && !defined(PROTO)
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
16 # include <gen64def.h>
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
17 #else
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
18 /* based on Alpha's gen64def.h; the file is absent on VAX */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
19 typedef struct _generic_64 {
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
20 # pragma __nomember_alignment
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
21 __union { /* You can treat me as... */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
22 /* long long is not available on VAXen */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
23 /* unsigned __int64 gen64$q_quadword; ...a single 64-bit value, or */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
24
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
25 unsigned int gen64$l_longword [2]; /* ...two 32-bit values, or */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
26 unsigned short int gen64$w_word [4]; /* ...four 16-bit values */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
27 } gen64$r_quad_overlay;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
28 } GENERIC_64;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
29 #endif
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
30
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 char class;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 char type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 short width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 union
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 char _basic[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 char length;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 } y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 int basic;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 } x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 int extended;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 } TT_MODE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 short buflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 short itemcode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 char *bufadrs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 int *retlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 } ITEM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 ITEM equ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 int nul;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 } ITMLST1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 ITEM index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 ITEM string;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 int nul;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 } ITMLST2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 static TT_MODE orgmode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 static short iochan; /* TTY I/O channel */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 static short iosb[4]; /* IO status block */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 static int vms_match_num = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 static int vms_match_free = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 static char_u **vms_fmatch = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 static char *Fspec_Rms; /* rms file spec, passed implicitly between routines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 6695
diff changeset
80 static TT_MODE get_tty(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 6695
diff changeset
81 static void set_tty(int row, int col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 #define EXPL_ALLOC_INC 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 #define EQN(S1,S2,LN) (strncmp(S1,S2,LN) == 0)
13632
cec5137d5332 patch 8.0.1688: some macros are used without a semicolon
Christian Brabandt <cb@256bit.org>
parents: 13353
diff changeset
86 #define SKIP_FOLLOWING_SLASHES(Str) do { while (Str[1] == '/') ++Str; } while (0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 * vul_desc vult een descriptor met een string en de lengte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 * hier van.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 vul_desc(DESC *des, char *str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 des->dsc$b_dtype = DSC$K_DTYPE_T;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 des->dsc$b_class = DSC$K_CLASS_S;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 des->dsc$a_pointer = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 des->dsc$w_length = str ? strlen(str) : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 * vul_item vult een item met een aantal waarden
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 vul_item(ITEM *itm, short len, short cod, char *adr, int *ret)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 itm->buflen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 itm->itemcode = cod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 itm->bufadrs = adr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 itm->retlen = ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 mch_settmode(int tmode)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 int status;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 if ( tmode == TMODE_RAW )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 set_tty(0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 else{
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 switch (orgmode.width)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 case 132: OUT_STR_NF((char_u *)"\033[?3h\033>"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 case 80: OUT_STR_NF((char_u *)"\033[?3l\033>"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 default: break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 status = sys$qiow(0, iochan, IO$_SETMODE, iosb, 0, 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 &orgmode, sizeof(TT_MODE), 0,0,0,0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 if (status!=SS$_NORMAL || (iosb[0]&0xFFFF)!=SS$_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 (void)sys$dassgn(iochan);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 iochan = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 set_tty(int row, int col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 int status;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 TT_MODE newmode; /* New TTY mode bits */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 static short first_time = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 if (first_time)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 orgmode = get_tty();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 first_time = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 newmode = get_tty();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 if (col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 newmode.width = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 if (row)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 newmode.x.y.length = row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 newmode.x.basic |= (TT$M_NOECHO | TT$M_HOSTSYNC);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 newmode.x.basic &= ~TT$M_TTSYNC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 newmode.extended |= TT2$M_PASTHRU;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 status = sys$qiow(0, iochan, IO$_SETMODE, iosb, 0, 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 &newmode, sizeof(newmode), 0, 0, 0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 if (status!=SS$_NORMAL || (iosb[0]&0xFFFF)!=SS$_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 static TT_MODE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 get_tty(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 static $DESCRIPTOR(odsc,"SYS$OUTPUT"); /* output descriptor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 int status;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 TT_MODE tt_mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 if (!iochan)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 status = sys$assign(&odsc,&iochan,0,0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 status = sys$qiow(0, iochan, IO$_SENSEMODE, iosb, 0, 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 &tt_mode, sizeof(tt_mode), 0, 0, 0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 tt_mode.width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 tt_mode.type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 tt_mode.class = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 tt_mode.x.basic = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 tt_mode.x.y.length = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 tt_mode.extended = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 return(tt_mode);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 * Get the current window size in Rows and Columns.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 mch_get_shellsize(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 TT_MODE tmode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 tmode = get_tty(); /* get size from VMS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 Columns = tmode.width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 Rows = tmode.x.y.length;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 * Try to set the window size to Rows and new_Columns.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 mch_set_shellsize(void)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 set_tty(Rows, Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 switch (Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 case 132: OUT_STR_NF((char_u *)"\033[?3h\033>"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 case 80: OUT_STR_NF((char_u *)"\033[?3l\033>"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 default: break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 screen_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 mch_getenv(char_u *lognam)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 DESC d_file_dev, d_lognam ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 static char buffer[LNM$C_NAMLENGTH+1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 char_u *cp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 unsigned long attrib;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 int lengte = 0, dum = 0, idx = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 ITMLST2 itmlst;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 char *sbuf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 vul_desc(&d_lognam, (char *)lognam);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 vul_desc(&d_file_dev, "LNM$FILE_DEV");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 attrib = LNM$M_CASE_BLIND;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 vul_item(&itmlst.index, sizeof(int), LNM$_INDEX, (char *)&idx, &dum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 vul_item(&itmlst.string, LNM$C_NAMLENGTH, LNM$_STRING, buffer, &lengte);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 itmlst.nul = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 if (sys$trnlnm(&attrib, &d_file_dev, &d_lognam, NULL,&itmlst) == SS$_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 buffer[lengte] = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 if (cp = (char_u *)alloc((unsigned)(lengte+1)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 strcpy((char *)cp, buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 return(cp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 else if ((sbuf = getenv((char *)lognam)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 lengte = strlen(sbuf) + 1;
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
248 cp = (char_u *)alloc((size_t)lengte);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 if (cp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 strcpy((char *)cp, sbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 return cp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 return(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 * mch_setenv VMS version of setenv()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 mch_setenv(char *var, char *value, int x)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 int res, dum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 long attrib = 0L;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 char acmode = PSL$C_SUPER; /* needs SYSNAM privilege */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 DESC tabnam, lognam;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 ITMLST1 itmlst;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 vul_desc(&tabnam, "LNM$JOB");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 vul_desc(&lognam, var);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 vul_item(&itmlst.equ, value ? strlen(value) : 0, value ? LNM$_STRING : 0,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 value, &dum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 itmlst.nul = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 res = sys$crelnm(&attrib, &tabnam, &lognam, &acmode, &itmlst);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 return((res == 1) ? 0 : -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 vms_sys(char *cmd, char *out, char *inp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 DESC cdsc, odsc, idsc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 long status;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 if (cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 vul_desc(&cdsc, cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 if (out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 vul_desc(&odsc, out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 if (inp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 vul_desc(&idsc, inp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 lib$spawn(cmd ? &cdsc : NULL, /* command string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 inp ? &idsc : NULL, /* input file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 out ? &odsc : NULL, /* output file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 0, 0, 0, &status, 0, 0, 0, 0, 0, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 return status;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 /*
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
299 * Convert string to lowercase - most often filename
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
300 */
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
301 char *
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
302 vms_tolower( char *name )
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
303 {
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
304 int i,nlen = strlen(name);
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
305 for (i = 0; i < nlen; i++)
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
306 name[i] = TOLOWER_ASC(name[i]);
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
307 return name;
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
308 }
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
309
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
310 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 * Convert VMS system() or lib$spawn() return code to Unix-like exit value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 vms_sys_status(int status)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 if (status != SS$_NORMAL && (status & STS$M_SUCCESS) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 return status; /* Command failed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 * vms_read()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 * function for low level char input
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 * Returns: input length
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 vms_read(char *inbuf, size_t nbytes)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 {
775
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
330 int status, function, len;
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
331 TT_MODE tt_mode;
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
332 ITEM itmlst[2]; /* terminates on everything */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 static long trm_mask[8] = {-1, -1, -1, -1, -1, -1, -1, -1};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 /* whatever happened earlier we need an iochan here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 if (!iochan)
775
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
337 tt_mode = get_tty();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
339 /* important: clean the inbuf */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 memset(inbuf, 0, nbytes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
342 /* set up the itemlist for the first read */
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
343 vul_item(&itmlst[0], 0, TRM$_MODIFIERS,
775
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
344 (char *)( TRM$M_TM_NOECHO | TRM$M_TM_NOEDIT |
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
345 TRM$M_TM_NOFILTR | TRM$M_TM_TRMNOECHO |
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
346 TRM$M_TM_NORECALL) , 0);
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
347 vul_item(&itmlst[1], sizeof(trm_mask), TRM$_TERM, (char *)&trm_mask, 0);
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
348
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
349 /* wait forever for a char */
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
350 function = (IO$_READLBLK | IO$M_EXTEND);
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
351 status = sys$qiow(0, iochan, function, &iosb, 0, 0,
775
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
352 inbuf, nbytes-1, 0, 0, &itmlst, sizeof(itmlst));
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
353 len = strlen(inbuf); /* how many chars we got? */
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
354
1197
b7ad1c609161 updated for version 7.1b
vimboss
parents: 1121
diff changeset
355 /* read immediately the rest in the IO queue */
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
356 function = (IO$_READLBLK | IO$M_TIMED | IO$M_ESCAPE | IO$M_NOECHO | IO$M_NOFILTR);
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
357 status = sys$qiow(0, iochan, function, &iosb, 0, 0,
775
f04f56979d84 updated for version 7.0227
vimboss
parents: 715
diff changeset
358 inbuf+len, nbytes-1-len, 0, 0, 0, 0);
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
359
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
360 len = strlen(inbuf); /* return the total length */
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
361
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 * vms_wproc() is called for each matching filename by decc$to_vms().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 * We want to save each match for later retrieval.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 * Returns: 1 - continue finding matches
1197
b7ad1c609161 updated for version 7.1b
vimboss
parents: 1121
diff changeset
370 * 0 - stop trying to find any further matches
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 vms_wproc(char *name, int val)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 static int vms_match_alloced = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
378 if (val == DECC$K_FOREIGN ) /* foreign non VMS files are not counting */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
381 /* accept all DECC$K_FILE and DECC$K_DIRECTORY */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 if (vms_match_num == 0) {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 /* first time through, setup some things */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 if (NULL == vms_fmatch) {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 vms_fmatch = (char_u **)alloc(EXPL_ALLOC_INC * sizeof(char *));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 if (!vms_fmatch)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 vms_match_alloced = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 vms_match_free = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 else {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 /* re-use existing space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 vms_match_free = vms_match_alloced;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
397 /* make matches look uniform */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 vms_remove_version(name);
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
399 name=vms_tolower(name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 /* if name already exists, don't add it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 for (i = 0; i<vms_match_num; i++) {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 if (0 == STRCMP((char_u *)name,vms_fmatch[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 if (--vms_match_free == 0) {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 /* add more space to store matches */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 vms_match_alloced += EXPL_ALLOC_INC;
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
409 vms_fmatch = (char_u **)vim_realloc(vms_fmatch,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 sizeof(char **) * vms_match_alloced);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 if (!vms_fmatch)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 vms_match_free = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 vms_fmatch[vms_match_num] = vim_strsave((char_u *)name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 ++vms_match_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 * mch_expand_wildcards this code does wild-card pattern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 * matching NOT using the shell
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 *
1698
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1197
diff changeset
425 * return OK for success, FAIL for error (you may lose some
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 * memory) and put an error message in *file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 * num_pat number of input patterns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 * pat array of pointers to input patterns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 * num_file pointer to number of matched file names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 * file pointer to array of pointers to matched file names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 mch_expand_wildcards(int num_pat, char_u **pat, int *num_file, char_u ***file, int flags)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 {
2278
0b3be97064e5 Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents: 1738
diff changeset
437 int i, cnt = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 char_u buf[MAXPATHL];
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
439 char *result;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 int dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 int files_alloced, files_free;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 *num_file = 0; /* default: no files found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 files_alloced = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 files_free = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 *file = (char_u **) alloc(sizeof(char_u **) * files_alloced);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 if (*file == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 for (i = 0; i < num_pat; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 /* expand environment var or home dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 if (vim_strchr(pat[i],'$') || vim_strchr(pat[i],'~'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 expand_env(pat[i],buf,MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 STRCPY(buf,pat[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 vms_match_num = 0; /* reset collection counter */
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
461 result = decc$translate_vms(vms_fixfilename(buf));
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
462 if ( (int) result == 0 || (int) result == -1 ) {
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
463 cnt = 0;
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
464 } else {
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
465 cnt = decc$to_vms(result, vms_wproc, 1 /*allow wild*/ , (flags & EW_DIR ? 0:1 ) /*allow directory*/) ;
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
466 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 if (cnt > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 cnt = vms_match_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 if (cnt < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 for (i = 0; i < cnt; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 /* files should exist if expanding interactively */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 if (!(flags & EW_NOTFOUND) && mch_getperm(vms_fmatch[i]) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 continue;
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 694
diff changeset
478
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 /* do not include directories */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 dir = (mch_isdir(vms_fmatch[i]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 if (( dir && !(flags & EW_DIR)) || (!dir && !(flags & EW_FILE)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 continue;
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 694
diff changeset
483
b526e10493b1 updated for version 7.0217
vimboss
parents: 694
diff changeset
484 /* Skip files that are not executable if we check for that. */
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6359
diff changeset
485 if (!dir && (flags & EW_EXEC)
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6359
diff changeset
486 && !mch_can_exe(vms_fmatch[i], NULL, !(flags & EW_SHELLCMD)))
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 694
diff changeset
487 continue;
b526e10493b1 updated for version 7.0217
vimboss
parents: 694
diff changeset
488
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 /* allocate memory for pointers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 if (--files_free < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 files_alloced += EXPL_ALLOC_INC;
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
493 *file = (char_u **)vim_realloc(*file,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 sizeof(char_u **) * files_alloced);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 if (*file == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 *file = (char_u **)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 return(FAIL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 files_free = EXPL_ALLOC_INC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 (*file)[*num_file++] = vms_fmatch[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 mch_expandpath(garray_T *gap, char_u *path, int flags)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 int i,cnt = 0;
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
514 char *result;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
516 vms_match_num = 0;
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
517 /* the result from the decc$translate_vms needs to be handled */
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
518 /* otherwise it might create ACCVIO error in decc$to_vms */
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
519 result = decc$translate_vms(vms_fixfilename(path));
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
520 if ( (int) result == 0 || (int) result == -1 ) {
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
521 cnt = 0;
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
522 } else {
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
523 cnt = decc$to_vms(result, vms_wproc, 1 /*allow_wild*/, (flags & EW_DIR ? 0:1 ) /*allow directory*/);
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
524 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 if (cnt > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 cnt = vms_match_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 for (i = 0; i < cnt; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 if (mch_getperm(vms_fmatch[i]) >= 0) /* add existing file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 addfile(gap, vms_fmatch[i], flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 return cnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 * attempt to translate a mixed unix-vms file specification to pure vms
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 vms_unix_mixed_filespec(char *in, char *out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 char *lastcolon;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 char *end_of_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 char ch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 int len;
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
545 char *out_str=out;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 /* copy vms filename portion up to last colon
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 * (node and/or disk)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 lastcolon = strrchr(in, ':'); /* find last colon */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 if (lastcolon != NULL) {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 len = lastcolon - in + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 strncpy(out, in, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 out += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 in += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 end_of_dir = NULL; /* default: no directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 /* start of directory portion */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 ch = *in;
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 406
diff changeset
562 if ((ch == '[') || (ch == '/') || (ch == '<')) { /* start of directory(s) ? */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 ch = '[';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 } else if (EQN(in, "../", 3)) { /* Unix parent directory? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 *out++ = '[';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 *out++ = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 end_of_dir = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 ch = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 in += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 } else { /* not a special character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 while (EQN(in, "./", 2)) { /* Ignore Unix "current dir" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 in += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 if (strchr(in, '/') == NULL) { /* any more Unix directories ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 strcpy(out, in); /* No - get rest of the spec */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 } else {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 *out++ = '['; /* Yes, denote a Vms subdirectory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 ch = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 --in;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 /* if we get here, there is a directory part of the filename */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 /* initialize output file spec */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 *out++ = ch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 ++in;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 while (*in != '\0') {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 ch = *in;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 if ((ch == ']') || (ch == '/') || (ch == '>') ) { /* end of (sub)directory ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 end_of_dir = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 ch = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 else if (EQN(in, "../", 3)) { /* Unix parent directory? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 *out++ = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 end_of_dir = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 ch = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 in += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 else {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 while (EQN(in, "./", 2)) { /* Ignore Unix "current dir" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 end_of_dir = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 in += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 SKIP_FOLLOWING_SLASHES(in);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 ch = *in;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 /* Place next character into output file spec */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 *out++ = ch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 ++in;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 *out = '\0'; /* Terminate output file spec */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 if (end_of_dir != NULL) /* Terminate directory portion */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 *end_of_dir = ']';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 * for decc$to_vms in vms_fixfilename
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 vms_fspec_proc(char *fil, int val)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 strcpy(Fspec_Rms,fil);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 return(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 * change unix and mixed filenames to VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 void *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 vms_fixfilename(void *instring)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 static char *buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 static size_t buflen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 size_t len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 /* get a big-enough buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 len = strlen(instring) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 if (len > buflen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 buflen = len + 128;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 if (buf)
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
653 buf = (char *)vim_realloc(buf, buflen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 else
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
655 buf = (char *)alloc(buflen * sizeof(char));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 #ifdef DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 char *tmpbuf = NULL;
1738
1ddec6983d9e updated for version 7.2-036
vimboss
parents: 1698
diff changeset
660 tmpbuf = (char *)alloc(buflen * sizeof(char));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 strcpy(tmpbuf, instring);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 Fspec_Rms = buf; /* for decc$to_vms */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 775
diff changeset
666 if (strchr(instring,'/') == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 /* It is already a VMS file spec */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 strcpy(buf, instring);
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 775
diff changeset
669 else if (strchr(instring,'"') == NULL) /* password in the path? */
e63691e7c504 updated for version 7.1a
vimboss
parents: 775
diff changeset
670 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 /* Seems it is a regular file, let guess that it is pure Unix fspec */
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 775
diff changeset
672 if (decc$to_vms(instring, vms_fspec_proc, 0, 0) <= 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 /* No... it must be mixed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 vms_unix_mixed_filespec(instring, buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 /* we have a password in the path */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 /* decc$ functions can not handle */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 /* this is our only hope to resolv */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 vms_unix_mixed_filespec(instring, buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 }
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 775
diff changeset
684
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 * Remove version number from file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 * we need it in some special cases as:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 * creating swap file name and writing new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 vms_remove_version(void * fname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 char_u *cp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 char_u *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 if ((cp = vim_strchr( fname, ';')) != NULL) /* remove version */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 *cp = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 else if ((cp = vim_strrchr( fname, '.')) != NULL )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 if ((fp = vim_strrchr( fname, ']')) != NULL ) {;}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 else if ((fp = vim_strrchr( fname, '>')) != NULL ) {;}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 else fp = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 while ( *fp != '\0' && fp < cp )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 if ( *fp++ == '.' )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 *cp = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 return ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 }
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
710
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
711 struct typeahead_st {
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
712 unsigned short numchars;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
713 unsigned char firstchar;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
714 unsigned char reserved0;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
715 unsigned long reserved1;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
716 } typeahead;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
717
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
718 /*
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
719 * Wait "msec" msec until a character is available from file descriptor "fd".
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
720 * "msec" == 0 will check for characters once.
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
721 * "msec" == -1 will block until a character is available.
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
722 */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
723 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
724 RealWaitForChar(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
725 int fd UNUSED, /* always read from iochan */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
726 long msec,
10328
299f1669c20e commit https://github.com/vim/vim/commit/de5e2c219b99895445fb75ae3541ee69282a5846
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
727 int *check_for_gpm UNUSED,
299f1669c20e commit https://github.com/vim/vim/commit/de5e2c219b99895445fb75ae3541ee69282a5846
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
728 int *interrupted)
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
729 {
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
730 int status;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
731 struct _generic_64 time_curr;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
732 struct _generic_64 time_diff;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
733 struct _generic_64 time_out;
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
734 unsigned int convert_operation = LIB$K_DELTA_SECONDS_F;
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
735 float sec =(float) msec/1000;
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
736
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
737 /* make sure the iochan is set */
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
738 if (!iochan)
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
739 get_tty();
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
740
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
741 if (sec > 0) {
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
742 /* time-out specified; convert it to absolute time */
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
743 /* sec>0 requirement of lib$cvtf_to_internal_time()*/
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
744
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
745 /* get current time (number of 100ns ticks since the VMS Epoch) */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
746 status = sys$gettim(&time_curr);
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
747 if (status != SS$_NORMAL)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
748 return 0; /* error */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
749 /* construct the delta time */
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
750 #if __G_FLOAT==0
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
751 # ifndef VAX
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
752 /* IEEE is default on IA64, but can be used on Alpha too - but not on VAX */
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
753 status = lib$cvts_to_internal_time(
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
754 &convert_operation, &sec, &time_diff);
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
755 # endif
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
756 #else /* default on Alpha and VAX */
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
757 status = lib$cvtf_to_internal_time(
5704
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
758 &convert_operation, &sec, &time_diff);
47a673b20e49 updated for version 7.4.197
Bram Moolenaar <bram@vim.org>
parents: 5541
diff changeset
759 #endif
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
760 if (status != LIB$_NORMAL)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
761 return 0; /* error */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
762 /* add them up */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
763 status = lib$add_times(
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
764 &time_curr,
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
765 &time_diff,
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
766 &time_out);
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
767 if (status != LIB$_NORMAL)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
768 return 0; /* error */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
769 }
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
770
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
771 while (TRUE) {
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
772 /* select() */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
773 status = sys$qiow(0, iochan, IO$_SENSEMODE | IO$M_TYPEAHDCNT, iosb,
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
774 0, 0, &typeahead, 8, 0, 0, 0, 0);
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
775 if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL)
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
776 return 0; /* error */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
777
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
778 if (typeahead.numchars)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
779 return 1; /* ready to read */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
780
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
781 /* there's nothing to read; what now? */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
782 if (msec == 0) {
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
783 /* immediate time-out; return impatiently */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
784 return 0;
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
785 } else if (msec < 0) {
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
786 /* no time-out; wait on indefinitely */
13754
0d199e59a988 patch 8.0.1749: VMS: 100% CPU use, redefining mch_open() fails
Christian Brabandt <cb@256bit.org>
parents: 13632
diff changeset
787 return 1; /* fakeout to force a wait in vms_read() */
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
788 } else {
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
789 /* time-out needs to be checked */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
790 status = sys$gettim(&time_curr);
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
791 if (status != SS$_NORMAL)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
792 return 0; /* error */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
793
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
794 status = lib$sub_times(
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
795 &time_out,
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
796 &time_curr,
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
797 &time_diff);
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
798 if (status != LIB$_NORMAL)
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
799 return 0; /* error, incl. time_diff < 0 (i.e. time-out) */
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
800
13353
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
801 /* otherwise wait some more */
8412df1479a3 patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents: 10328
diff changeset
802 }
5541
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
803 }
2f99966971b0 updated for version 7.4.119
Bram Moolenaar <bram@vim.org>
parents: 2278
diff changeset
804 }