Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/curl/packages/vms/generate_vax_transfer.com @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 $! File: generate_vax_transfer.com | |
| 2 $! | |
| 3 $! $Id$ | |
| 4 $! | |
| 5 $! File to generate and compile the VAX transfer vectors from reading in the | |
| 6 $! Alpha/Itanium gnv_libcurl_symbols.opt file. | |
| 7 $! | |
| 8 $! This procedure patches the VAX Macro32 assembler to be case sensitive | |
| 9 $! and then compiles the generated | |
| 10 $! | |
| 11 $! The output of this procedure is: | |
| 12 $! gnv_libcurl_xfer.mar_exact | |
| 13 $! gnv_libcurl_xfer.obj | |
| 14 $! gnv_libcurl_xfer.opt | |
| 15 $! macro32_exactcase.exe | |
| 16 $! | |
| 17 $! Copyright 2013, John Malmberg | |
| 18 $! | |
| 19 $! Permission to use, copy, modify, and/or distribute this software for any | |
| 20 $! purpose with or without fee is hereby granted, provided that the above | |
| 21 $! copyright notice and this permission notice appear in all copies. | |
| 22 $! | |
| 23 $! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
| 24 $! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
| 25 $! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
| 26 $! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
| 27 $! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
| 28 $! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | |
| 29 $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
| 30 $! | |
| 31 $! 20-Jul-2013 J. Malmberg | |
| 32 $!============================================================================ | |
| 33 $! | |
| 34 $! Save this so we can get back. | |
| 35 $ default_dir = f$environment("default") | |
| 36 $! | |
| 37 $ on warning then goto all_exit | |
| 38 $! | |
| 39 $! Want hard tabs in the generated file. | |
| 40 $ tab[0,8] = 9 | |
| 41 $! | |
| 42 $! This procedure is used on VAX only | |
| 43 $ if (f$getsyi("HW_MODEL") .ge. 1024) | |
| 44 $ then | |
| 45 $ write sys$output "This procedure is only used on VAX." | |
| 46 $ goto all_exit | |
| 47 $ endif | |
| 48 $! | |
| 49 $! | |
| 50 $! Get the libcurl version to generate the ident string. | |
| 51 $! ident string is max of 31 characters. | |
| 52 $! | |
| 53 $ ident_string = "unknown" | |
| 54 $ open/read cver [-.-.include.curl]curlver.h | |
| 55 $cver_loop: | |
| 56 $ read/end=cver_loop_end cver line_in | |
| 57 $ line_in = f$edit(line_in, "COMPRESS,TRIM") | |
| 58 $ if line_in .eqs. "" then goto cver_loop | |
| 59 $ code = f$extract(0, 1, line_in) | |
| 60 $ if code .nes. "#" then goto cver_loop | |
| 61 $ directive = f$element(0, " ", line_in) | |
| 62 $ if directive .nes. "#define" then goto cver_loop | |
| 63 $ name = f$element(1, " ", line_in) | |
| 64 $ if name .nes. "LIBCURL_VERSION" then goto cver_loop | |
| 65 $ ident_string = f$element(2, " ", line_in) - "" - "" | |
| 66 $cver_loop_end: | |
| 67 $ close cver | |
| 68 $! | |
| 69 $ open/read aopt gnv_libcurl_symbols.opt | |
| 70 $! | |
| 71 $! Write out the header | |
| 72 $ gosub do_header | |
| 73 $! | |
| 74 $ open/append vopt gnv_libcurl_xfer.mar_exact | |
| 75 $ write vopt tab,".IDENT /", ident_string, "/" | |
| 76 $! | |
| 77 $ write vopt tab, ".PSECT LIBCURL_XFERVECTORS -" | |
| 78 $ write vopt tab,tab,tab, "PIC,USR,CON,REL,GBL,SHR,EXE,RD,NOWRT,QUAD" | |
| 79 $ write vopt "" | |
| 80 $ write vopt tab, "SPARE", tab, "; never delete this spare" | |
| 81 $ write vopt ";" | |
| 82 $ write vopt ";", tab, "Exact case and upper case transfer vectors" | |
| 83 $! | |
| 84 $ alias_count = 0 | |
| 85 $vector_loop: | |
| 86 $! | |
| 87 $! Read in symbol_vector | |
| 88 $! | |
| 89 $ read/end=vector_loop_end aopt line_in | |
| 90 $ line = f$edit(line_in, "UNCOMMENT,COMPRESS,TRIM") | |
| 91 $ if line .eqs. "" then goto vector_loop | |
| 92 $! | |
| 93 $ line_u = f$edit(line, "UPCASE") | |
| 94 $ key = f$element(0, "=", line_u) | |
| 95 $ if (key .eqs. "SYMBOL_VECTOR") | |
| 96 $ then | |
| 97 $ symbol_string = f$element(1, "=", line) - "(" | |
| 98 $ symbol_type = f$element(2, "=", line_u) - ")" | |
| 99 $ symbol_name = f$element(1, "/", symbol_string) | |
| 100 $ if symbol_type .nes. "PROCEDURE" | |
| 101 $ then | |
| 102 $ write sys$output "%CURLBUILD-W-NOTPROC, " + - | |
| 103 $ "This procedure can only handle procedure vectors" | |
| 104 $ write sys$output - | |
| 105 "Data vectors require manual construction for which this procedure or" | |
| 106 $ write sys$output - | |
| 107 "the shared library needs to be updated to resolve." | |
| 108 $ write sys$output - | |
| 109 "the preferred solution is to have a procedure return the address of the " | |
| 110 $ write sys$output - | |
| 111 "the variable instead of having a variable, as if the size of the variable " | |
| 112 write sys$output - | |
| 113 "changes, the symbol vector is no longer backwards compatible." | |
| 114 $ endif | |
| 115 $ if (symbol_name .eqs. "/") | |
| 116 $ then | |
| 117 $ symbol_name = symbol_string | |
| 118 $ write vopt tab, symbol_type, tab, symbol_name | |
| 119 $ else | |
| 120 $ alias_count = alias_count + 1 | |
| 121 $ symbol_alias = f$element(0, "/", symbol_string) | |
| 122 $ write vopt - | |
| 123 tab, "''symbol_type_U", tab, symbol_name, tab, symbol_alias | |
| 124 $ endif | |
| 125 $ endif | |
| 126 $ goto vector_loop | |
| 127 $vector_loop_end: | |
| 128 $! | |
| 129 $! End of pass one, second pass needed if aliases exist | |
| 130 $ close aopt | |
| 131 $! | |
| 132 $ if alias_count .eq. 0 then goto finish_file | |
| 133 $! | |
| 134 $! Start pass 2, write stub routine header | |
| 135 $! | |
| 136 $ open/read aopt gnv_libcurl_symbols.opt | |
| 137 $! | |
| 138 $alias_loop: | |
| 139 $! | |
| 140 $! Read in symbol_vector | |
| 141 $! | |
| 142 $ read/end=alias_loop_end aopt line_in | |
| 143 $ line = f$edit(line_in, "UNCOMMENT,COMPRESS,TRIM") | |
| 144 $ if line .eqs. "" then goto alias_loop | |
| 145 $! | |
| 146 $ line_u = f$edit(line, "UPCASE") | |
| 147 $ key = f$element(0, "=", line_u) | |
| 148 $ if (key .eqs. "SYMBOL_VECTOR") | |
| 149 $ then | |
| 150 $ symbol_string = f$element(1, "=", line) - "(" | |
| 151 $ symbol_type = f$element(2, "=", line_u) - ")" | |
| 152 $ symbol_name = f$element(1, "/", symbol_string) | |
| 153 $ if (symbol_name .eqs. "/") | |
| 154 $ then | |
| 155 $ symbol_name = symbol_string | |
| 156 $ else | |
| 157 $ alias_count = alias_count + 1 | |
| 158 $ symbol_alias = f$element(0, "/", symbol_string) | |
| 159 $ write vopt tab, ".ENTRY", tab, symbol_alias, ", ^M<>" | |
| 160 $ endif | |
| 161 $ endif | |
| 162 $ goto alias_loop | |
| 163 $! read in symbol_vector | |
| 164 $! if not alias, then loop | |
| 165 $! write out subroutine name | |
| 166 $! | |
| 167 $alias_loop_end: | |
| 168 $! | |
| 169 $ write vopt tab, "MOVL #1, R0" | |
| 170 $ write vopt tab, "RET" | |
| 171 $! | |
| 172 $finish_file: | |
| 173 $! | |
| 174 $ write vopt "" | |
| 175 $ write vopt tab, ".END" | |
| 176 $! | |
| 177 $ close aopt | |
| 178 $ close vopt | |
| 179 $! | |
| 180 $! Patch the Macro32 compiler | |
| 181 $!---------------------------- | |
| 182 $ patched_macro = "sys$disk:[]macro32_exactcase.exe" | |
| 183 $ if f$search(patched_macro) .eqs. "" | |
| 184 $ then | |
| 185 $ copy sys$system:macro32.exe 'patched_macro' | |
| 186 $ patch @macro32_exactcase.patch | |
| 187 $ endif | |
| 188 $ define/user macro32 'patched_macro' | |
| 189 $ macro/object=gnv_libcurl_xfer.obj gnv_libcurl_xfer.mar_exact | |
| 190 $! | |
| 191 $! Create the option file for linking the shared image. | |
| 192 $ create gnv_libcurl_xfer.opt | |
| 193 $ open/append lco gnv_libcurl_xfer.opt | |
| 194 $ write lco "gsmatch=lequal,1,1" | |
| 195 $ write lco "cluster=transfer_vector,,,''default_dir'gnv_libcurl_xfer" | |
| 196 $ write lco "collect=libcurl_global, libcurl_xfervectors" | |
| 197 $ close lco | |
| 198 $! | |
| 199 $! | |
| 200 $ goto all_exit | |
| 201 $! | |
| 202 $! Process the header | |
| 203 $do_header: | |
| 204 $! | |
| 205 $! Force the mode of the file to same as text editor generated. | |
| 206 $ create gnv_libcurl_xfer.mar_exact | |
| 207 $deck | |
| 208 ; File: gnv_libcurl_xfer.mar_exact | |
| 209 ; | |
| 210 ; VAX transfer vectors | |
| 211 ; | |
| 212 ; This needs to be compiled with a specialized patch on Macro32 to make it | |
| 213 ; preserve the case of symbols instead of converting it to uppercase. | |
| 214 ; | |
| 215 ; This patched Macro32 requires all directives to be in upper case. | |
| 216 ; | |
| 217 ; There are three sets of symbols for transfer vectors here. | |
| 218 ; | |
| 219 ; The first for upper case which matches the tradition method of generating | |
| 220 ; VAX transfer vectors. | |
| 221 ; | |
| 222 ; The second is the exact case for compatibility with open source C programs | |
| 223 ; that expect exact case symbols in images. These are separated because a | |
| 224 ; previous kit had only upper case symbols. | |
| 225 ; | |
| 226 ; The third is the routine stub that is used to resolve part of the upper | |
| 227 ; case transfer vectors, with exact case entry symbols. | |
| 228 ; | |
| 229 ; When you add routines, you need to add them after the second set of transfer | |
| 230 ; vectors for both upper and exact case, and then additional entry points | |
| 231 ; in upper case added to stub routines. | |
| 232 ; | |
| 233 ;************************************************************************* | |
| 234 | |
| 235 .TITLE libcurl_xfer - Transfer vector for libcurl | |
| 236 .DISABLE GLOBAL | |
| 237 | |
| 238 ; | |
| 239 ; Macro to generate a transfer vector entry | |
| 240 ; | |
| 241 .MACRO PROCEDURE NAME | |
| 242 .EXTRN 'NAME | |
| 243 .ALIGN QUAD | |
| 244 .TRANSFER 'NAME | |
| 245 .MASK 'NAME | |
| 246 JMP 'NAME+2 | |
| 247 .ENDM | |
| 248 | |
| 249 .MACRO PROCEDUREU NAME NAMEU | |
| 250 .EXTRN 'NAME | |
| 251 .ALIGN QUAD | |
| 252 .TRANSFER 'NAMEU | |
| 253 .MASK 'NAME | |
| 254 JMP 'NAME+2 | |
| 255 | |
| 256 .ENDM | |
| 257 ; | |
| 258 ; | |
| 259 ; Macro to reserve a spare entry. | |
| 260 ; | |
| 261 .MACRO SPARE | |
| 262 .ALIGN QUAD | |
| 263 .ALIGN QUAD | |
| 264 .QUAD 0 | |
| 265 .ENDM | |
| 266 | |
| 267 $EOD | |
| 268 $! | |
| 269 $! | |
| 270 $ return | |
| 271 $! | |
| 272 $all_exit: | |
| 273 $set def 'default_dir' | |
| 274 $exit '$status' |
