Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "tool_setup.h"
00023
00024 #ifdef __VMS
00025
00026 #if defined(__DECC) && !defined(__VAX) && \
00027 defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
00028 #include <unixlib.h>
00029 #endif
00030
00031 #define ENABLE_CURLX_PRINTF
00032 #include "curlx.h"
00033
00034 #include "curlmsg_vms.h"
00035 #include "tool_vms.h"
00036
00037 #include "memdebug.h"
00038
00039 void decc$__posix_exit(int __status);
00040 void decc$exit(int __status);
00041
00042 static int vms_shell = -1;
00043
00044
00045
00046
00047
00048 int is_vms_shell(void)
00049 {
00050 char *shell;
00051
00052
00053 if(vms_shell >= 0)
00054 return vms_shell;
00055
00056 shell = getenv("SHELL");
00057
00058
00059 if(shell == NULL) {
00060 vms_shell = 1;
00061 return 1;
00062 }
00063
00064
00065 if(strcmp(shell, "DCL") == 0) {
00066 vms_shell = 1;
00067 return 1;
00068 }
00069
00070 vms_shell = 0;
00071 return 0;
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 void vms_special_exit(int code, int vms_show)
00092 {
00093 int vms_code;
00094
00095
00096 #if __CRTL_VER >= 70000000
00097 if(is_vms_shell() == 0) {
00098 decc$__posix_exit(code);
00099 }
00100 #endif
00101
00102 if(code > CURL_LAST) {
00103 vms_code = CURL_LAST;
00104 }
00105 else {
00106 vms_code = vms_cond[code] | vms_show;
00107 }
00108 decc$exit(vms_code);
00109 }
00110
00111 #if defined(__DECC) && !defined(__VAX) && \
00112 defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 typedef struct {
00126 char *name;
00127 int value;
00128 } decc_feat_t;
00129
00130
00131 static decc_feat_t decc_feat_array[] = {
00132
00133 { "DECC$ARGV_PARSE_STYLE", 1 },
00134
00135 { "DECC$EFS_CASE_PRESERVE", 1 },
00136
00137
00138 { "DECC$EFS_CHARSET", 1 },
00139
00140 { (char *)NULL, 0 }
00141 };
00142
00143
00144 static int decc_init_done = -1;
00145
00146
00147 static void decc_init(void)
00148 {
00149 int feat_index;
00150 int feat_value;
00151 int feat_value_max;
00152 int feat_value_min;
00153 int i;
00154 int sts;
00155
00156
00157 decc_init_done = 1;
00158
00159
00160 for(i = 0; decc_feat_array[i].name != NULL; i++) {
00161
00162
00163 feat_index = decc$feature_get_index(decc_feat_array[i].name);
00164
00165 if(feat_index >= 0) {
00166
00167 feat_value = decc$feature_get_value(feat_index, 1);
00168 feat_value_min = decc$feature_get_value(feat_index, 2);
00169 feat_value_max = decc$feature_get_value(feat_index, 3);
00170
00171 if((decc_feat_array[i].value >= feat_value_min) &&
00172 (decc_feat_array[i].value <= feat_value_max)) {
00173
00174 if(feat_value != decc_feat_array[i].value) {
00175 sts = decc$feature_set_value(feat_index, 1,
00176 decc_feat_array[i].value);
00177 }
00178 }
00179 else {
00180
00181 printf(" INVALID DECC FEATURE VALUE, %d: %d <= %s <= %d.\n",
00182 feat_value,
00183 feat_value_min, decc_feat_array[i].name, feat_value_max);
00184 }
00185 }
00186 else {
00187
00188 printf(" UNKNOWN DECC FEATURE: %s.\n", decc_feat_array[i].name);
00189 }
00190
00191 }
00192 }
00193
00194
00195
00196 #pragma nostandard
00197
00198
00199
00200 #pragma extern_model save
00201 #pragma extern_model strict_refdef "LIB$INITIALIZ" 2, nopic, nowrt
00202 const int spare[8] = {0};
00203 #pragma extern_model strict_refdef "LIB$INITIALIZE" 2, nopic, nowrt
00204 void (*const x_decc_init)() = decc_init;
00205 #pragma extern_model restore
00206
00207
00208 #pragma extern_model save
00209 int LIB$INITIALIZE(void);
00210 #pragma extern_model strict_refdef
00211 int dmy_lib$initialize = (int) LIB$INITIALIZE;
00212 #pragma extern_model restore
00213
00214 #pragma standard
00215
00216 #endif
00217
00218 #endif
00219