brian@ut-sally.UUCP (Brian H. Powell) (08/14/86)
In a recent INFO-MAC, I mentioned that I had a desk accessory that kept the new Mac+ serial driver from negating DTR the next time it was closed. I've had some requests for it, so here it is. This is useful when, for instance, you just want to quit a terminal program for a short period of time without the modem hanging up. To use it, just select it inside your favorite terminal program. It only works for the next time the driver is closed, so you'll have to select it each time you want to quit the program and not hang up during a modem session. This version is assembled to use the modem port. To use it with the printer port you can re-assemble it (making the obvious change to the source). A skilled ResEdit or FEdit user can find the -7 in the code and change it to a -9, without needing to re-assemble it. I've tested it on a Mac+ and a 128K (that's RAM, not ROM) Mac. (It faithfully beeped on the 128K Mac.) The .hqx file is being posted to mod.mac.binaries. Here is a shar file with the MDS assembly source, a link file and an rmaker file. --- # This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by sally!brian on Wed Aug 13 16:20:41 CDT 1986 # Contents: modem.asm modem.link modem.r echo x - modem.asm sed 's/^@//' > "modem.asm" <<'@//E*O*F modem.asm//' ;------------------------ ; modemDTR desk accessory ; by Brian H. Powell brian@sally.UTEXAS.EDU ; cs.Powell@r20.UTEXAS.EDU ; brian@ut-sally.UUCP ; ; This desk accessory is used to tell the 128K ROM serial driver ; to not negate DTR the next time it closes. This is useful when you ; want to quit a terminal program and not lose the connection. (For ; example, to change terminal programs or return to the Finder for ; housekeeping.) On a Macintosh with 64K ROMs, it just beeps. ;------------------------ include :equ_files:traps.txt include :equ_files:sysequ.txt OrnEntry dc.w 0 ; We don't need time, need a goodbye kiss, ; or respond to control calls. dc.w 0 ; We don't need time dc.w 0 ; We don't respond to any events dc.w 0 ; We don't have a menu ; offsets to driver routines: dc.w OrnOpen-OrnEntry ; Open dc.w done-OrnEntry ; Prime dc.w done-OrnEntry ; Control dc.w done-OrnEntry ; Status dc.w done-OrnEntry ; Close OrnTitle dc.b 9,0 dc.b 'modemDTR' .align 2 ; The following are the driver reference numbers for the two output ports. modemPort equ -7 printerPort equ -9 ; We'll need 29 bytes for the parameter block. paramblocksize equ 29 ;______________________________________________________________________ OrnOpen move.l #paramblocksize,d0 ; Create a pointer to a parameter _NewPtr ; block. bne.s error1 ; If it failed, beep clr.l ioCompletion(a0) ; no completion routine move.w #modemPort,ioRefNum(a0) ; use the modem port move.w #16,csCode(a0) ; secret code for this control call move.b #$80,csParam(a0) ; ditto _Control tst.w d0 ; Was there an error? bne.s error2 ; If so, release memory and beep _DisposPtr ; If not, release memory and return bra.s done error2 _DisposPtr error1 move.w #15,-(sp) ; if there was an error, beep. _SysBeep done rts end @//E*O*F modem.asm// chmod u=rw,g=r,o=r modem.asm echo x - modem.link sed 's/^@//' > "modem.link" <<'@//E*O*F modem.link//' ] modem /Output modem_DA /Type 'TEMP' $ @//E*O*F modem.link// chmod u=rw,g=r,o=r modem.link echo x - modem.r sed 's/^@//' > "modem.r" <<'@//E*O*F modem.r//' modem DA DFILDMOV TYPE DRVR = PROC \0modemDTR ,25 modem_DA @//E*O*F modem.r// chmod u=rw,g=r,o=r modem.r exit 0