diff --git a/collects/compiler/private/winsubsys.ss b/collects/compiler/private/winsubsys.ss new file mode 100644 index 0000000000..ffafe53534 --- /dev/null +++ b/collects/compiler/private/winsubsys.ss @@ -0,0 +1,19 @@ +(module winsubsys mzscheme + (provide set-subsystem) + + (define DF_NewHeaderOffset #x3C) + (define DF_SubsystemOffset #x5C) + + (define (set-subsystem file subsys) + (let-values ([(in out) (open-input-output-file file 'update)]) + (file-position in DF_NewHeaderOffset) + (let ([offset (integer-bytes->integer (read-bytes 4 in) #f #f)]) + (file-position out (+ offset DF_SubsystemOffset)) + (write-bytes (integer->integer-bytes + (case subsys + [(windows) 2] + [(console) 3]) + 4 #f #f) + out) + (close-input-port in) + (close-output-port out)))))