2020-05-10 05:37:38 +00:00
|
|
|
|
;
|
|
|
|
|
; Hacks to match MacOS (most recent first):
|
|
|
|
|
;
|
|
|
|
|
; <Sys7.1> 8/3/92 Elliot make this change
|
|
|
|
|
; 9/2/94 SuperMario ROM source dump (header preserved below)
|
|
|
|
|
;
|
|
|
|
|
|
2019-07-27 14:37:48 +00:00
|
|
|
|
;
|
|
|
|
|
; File: UserAlerts.a
|
|
|
|
|
;
|
|
|
|
|
; Contains: deep shit alerts (for after booting)
|
|
|
|
|
;
|
|
|
|
|
; Copyright: © 1984-1991, 1993 by Apple Computer, Inc., all rights reserved.
|
|
|
|
|
;
|
|
|
|
|
; This file is used in these builds: BigBang
|
|
|
|
|
;
|
|
|
|
|
; Change History (most recent first):
|
|
|
|
|
;
|
|
|
|
|
; <18> 6/12/91 LN removed #include 'HardwareEqu.a'
|
|
|
|
|
; <17> 3/4/91 dba dty: get rid of SysVers conditionals
|
|
|
|
|
; <16> 2/7/91 dnf kst, #79676: Use dsRecoverVCBPtr to draw the name of the volume
|
|
|
|
|
; that we're attempting disk recovery on.
|
|
|
|
|
; <15> 1/14/91 stb & mda; Add culprit name to generic crash dialog
|
|
|
|
|
; <14> 1/14/91 stb & PKE; tweak error messages; restore A5, SR, and SP for forced
|
|
|
|
|
; exits and clear MacJmp to prevent reentrancy <dfh>
|
|
|
|
|
; <13> 12/15/90 stb & KSM; improve the dsBufPtrTooLow message. add a <dfh> change to
|
|
|
|
|
; DoExitToShell to clear debugger flag. add a template for
|
|
|
|
|
; dsMemFullErr which show INIT or app name.
|
|
|
|
|
; <12> 11/21/90 csd & gbm; Remove the conditionals around the non-Shutdown manager
|
|
|
|
|
; code because we still need it for errors that happen before the
|
|
|
|
|
; Shutdown Manager is installed.
|
|
|
|
|
; <11> 11/15/90 stb & JDR; add alert for dsBufPtrTooLow
|
|
|
|
|
; <10> 9/6/90 DTY changed the wording of the shutdown messages. The old message
|
|
|
|
|
; seemed to imply that there was a safe and an unsafe way to turn
|
|
|
|
|
; off a Macintosh.
|
|
|
|
|
; <9> 6/11/90 DDG NEEDED FOR SIXPACK: Fixed previous comment.
|
|
|
|
|
; <8> 6/11/90 DDG NEEDED FOR SIXPACK: Fixed the dsNoFPU error to not spill over the
|
|
|
|
|
; end of the dialog.
|
|
|
|
|
; <7> 6/1/90 PKE DARIN IS A BAD DOG. In <5>, he changed the symbol name
|
|
|
|
|
; UImpTrapNumber to UnimplementedTrapNumber, but didn’t change the
|
|
|
|
|
; reference to it, thus breaking the SixPack build. Fixed it.
|
|
|
|
|
; <6> 5/31/90 DDG Added a generic system error (dsNoFPU) for ericksons and elsies
|
|
|
|
|
; that don’t have floating point chips.
|
|
|
|
|
; <5> 5/30/90 dba add alert for forced quit
|
|
|
|
|
; <4> 1/30/90 dba get rid of warnings when assembling; put in fancier messages;
|
|
|
|
|
; fix bug #34819 by reaching down the stack to restore the value
|
|
|
|
|
; of CurMap for the convenience of applications with ResumeProcs
|
|
|
|
|
; <3> 1/12/90 CCH added include of “HardwarePrivateEqu.a”
|
|
|
|
|
; <2> 12/28/89 dba changed PROC to MAIN so we get dead code stripping; got rid of
|
|
|
|
|
; the grayed resume button
|
|
|
|
|
; <1.4> 10/11/89 dba reformatted file; added new ShutDown Manager “user choice”
|
|
|
|
|
; alerts; improved icons
|
|
|
|
|
; <1.3> 8/15/89 dba OK FOR 6.0.4: get rid of Resume button in “can’t load the
|
|
|
|
|
; application: Finder”
|
|
|
|
|
; <1.2> 8/11/89 dba NEEDED FOR 6.0.4: changed text for alerts; improved ShutDown
|
|
|
|
|
; code used when ShutDown Manager is not present; added duplicate
|
|
|
|
|
; button lists to handle case where ResumeProc is not NIL; added
|
|
|
|
|
; system version to text of some alerts
|
|
|
|
|
; <1.1> 5/15/89 CCH Added alert for memory parity error. (#101)
|
|
|
|
|
; <1.0> 11/16/88 CCH Added to EASE.
|
|
|
|
|
; 8/16/88 dba changed procs 98 and 99 to avoid collision with errors 98 and 99
|
|
|
|
|
; proc 98 is now proc 1098; proc 99 is now proc 1099 this caused a
|
|
|
|
|
; crash after “force-launching” a document from the Finder
|
|
|
|
|
; 3/20/88 EKH Added SysErr #98 (dsNoPatch) for RomNoPatch, so it has it's very
|
|
|
|
|
; own SysErr number.
|
|
|
|
|
; 1/7/88 EKH Added Alert for "needed resource can't be loaded" error at boot
|
|
|
|
|
; time (SysErr #99). This error is generated by PTCH id -1, and
|
|
|
|
|
; anyone else who can not load a "do or die" resource from the
|
|
|
|
|
; system file. <S355 EKH>
|
|
|
|
|
; 3/30/87 jdt Moved HD20 startup alert here from the boot alert table.
|
|
|
|
|
; 3/5/87 LAK <S088> Launch errors (System Error ID 26) modified to explain
|
|
|
|
|
; that the application could not be opened and allow return to
|
|
|
|
|
; Finder. Specifically, added Alert 26, Text 47, Icon 39, Procs
|
|
|
|
|
; 98-99, Button List 74, and String 81. Changed ShutDown alert
|
|
|
|
|
; text from “power off your machine” to “turn off your Macintosh”;
|
|
|
|
|
; it now shares icon 39 with launch fail alert. This file may now
|
|
|
|
|
; be built as an INIT 31 file for testing (see below for sample
|
|
|
|
|
; build code).
|
|
|
|
|
; 12/1/86 jdt Removed the installation code as this is now a DSAT resource.
|
|
|
|
|
; 9/9/86 DLD Changed the PowerOff Icon's bits.
|
|
|
|
|
; 9/3/86 DLD Made Reset call ShutDown if Possible.
|
|
|
|
|
; 9/3/86 DLD Added the ShutDown Alert
|
|
|
|
|
; 9/2/86 DLD Added Align 0 before ResumeString to avoid word alignment on new
|
|
|
|
|
; assembler.
|
|
|
|
|
; 8/4/86 DLD Converted source to MPW.
|
|
|
|
|
; 4/14/84 SC mercilessly chopped out stuff, added RESET
|
|
|
|
|
; 2/23/84 AJH tweaked disk switch alert
|
|
|
|
|
;
|
|
|
|
|
; NOTE: UserAlerts is loaded before PTCHs on Mac Plus and SE ROMs ($75 and $276).
|
|
|
|
|
; (BootAlerts is active while PTCHs are loaded on all other ROMs.)
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
string asis
|
|
|
|
|
|
|
|
|
|
load 'StandardEqu.d'
|
|
|
|
|
include 'ShutDownEqu.a'
|
|
|
|
|
include 'HardwarePrivateEqu.a'
|
|
|
|
|
include 'GestaltEqu.a' ; <14>
|
|
|
|
|
include 'FileMgrPrivate.a'
|
|
|
|
|
|
|
|
|
|
ShutDownTrapNumber equ $95 ; _ShutDown
|
|
|
|
|
UnimplementedTrapNumber equ $9F ; _Unimplemented
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
|
|
|
|
|
UserAlerts main export
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Icon numbering:
|
|
|
|
|
;
|
|
|
|
|
; The internal icon numbers are also used as resource IDs for color icons,
|
|
|
|
|
; so they must be assigned like all other reserved resource IDs.
|
|
|
|
|
; Also, like all the other numbers below, they must steer clear of system errors.
|
|
|
|
|
; For this reason we use negative numbers lower than -10000.
|
|
|
|
|
|
|
|
|
|
dsiBomb equ -16397
|
|
|
|
|
dsiStop equ -16400
|
|
|
|
|
|
|
|
|
|
dsiDiskSwap equ -16398
|
|
|
|
|
dsiNote equ -16399
|
|
|
|
|
dsiInsertDisk equ -16398 ; <SM1> <BH 25Aug93> yes, this is the same as dsiDiskSwap
|
|
|
|
|
dsiRemoveDisk equ -16401 ; <SM1> <BH 25Aug93>
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Numbering scheme:
|
|
|
|
|
;
|
|
|
|
|
; These IDs must not conflict with actual system errors.
|
|
|
|
|
; For this reason, we use negative numbers lower than -10000 (we start at -20000).
|
|
|
|
|
|
|
|
|
|
; for text
|
|
|
|
|
|
|
|
|
|
dstMissingPatch equ -20000
|
|
|
|
|
dstParityError equ -20001
|
|
|
|
|
dstSystemDamaged equ -20002
|
2020-05-10 05:37:38 +00:00
|
|
|
|
dstSCSIWarn equ -20003
|
2019-07-27 14:37:48 +00:00
|
|
|
|
|
|
|
|
|
dstApplicationBusy equ -20100
|
|
|
|
|
dstFinderMissing equ -20101
|
|
|
|
|
dstGeneralError equ -20102
|
|
|
|
|
dstInsertDisk equ -20103
|
|
|
|
|
dstShutDownOrRestart equ -20104
|
|
|
|
|
dstSwitchOff equ -20105
|
|
|
|
|
dstSwitchOffOrRestart equ -20106
|
|
|
|
|
dstForcedQuit equ -20107
|
|
|
|
|
dstMemFullErr equ -20108
|
|
|
|
|
dstRemoveDisk equ -20109 ; <SM1> <BH 25Aug93>
|
|
|
|
|
dstDirtyDisk equ -20110 ; <SM1> <BH 25Aug93>
|
|
|
|
|
|
|
|
|
|
; for procedures
|
|
|
|
|
|
|
|
|
|
dspRestart equ -21000
|
|
|
|
|
|
|
|
|
|
dspDrawApplicationName equ -21100
|
|
|
|
|
dspDrawDiskName equ -21101
|
|
|
|
|
dspExitToShell equ -21102
|
|
|
|
|
dspGeneralError equ -21103
|
|
|
|
|
dspResume equ -21104
|
|
|
|
|
dspShutDown equ -21105
|
|
|
|
|
dspStackSniffError equ -21106
|
|
|
|
|
dspDrawForcedQuitMessage equ -21107
|
|
|
|
|
dspDrawCurrentName equ -21108
|
|
|
|
|
dspDrawRmvDsk equ -21109 ; <SM1> <BH 25Aug93>
|
|
|
|
|
dspDrawDirtyDsk equ -21110 ; <SM1> <BH 25Aug93>
|
|
|
|
|
dspDrawNameStr equ -21111 ; <SM1> <BH 25Aug93>
|
|
|
|
|
|
|
|
|
|
; for button lists
|
|
|
|
|
|
|
|
|
|
dsbRestart equ -22001 ; also uses -22000
|
|
|
|
|
|
|
|
|
|
dsbFinder equ -22101 ; also uses -22100
|
|
|
|
|
dsbRestartResume equ -22103 ; also uses -22102
|
|
|
|
|
dsbShutDownOrRestart equ -22105 ; also uses -22104
|
|
|
|
|
dsbCancelOrQuit equ -22107 ; also uses -22106
|
|
|
|
|
|
|
|
|
|
; for button strings
|
|
|
|
|
|
|
|
|
|
dssRestart equ -23000
|
|
|
|
|
|
|
|
|
|
dssFinder equ -23100
|
|
|
|
|
dssResume equ -23101
|
|
|
|
|
dssShutDown equ -23102
|
|
|
|
|
dssQuit equ -23103
|
|
|
|
|
dssCancel equ -23104
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Entry count: bump 1 for each new item.
|
|
|
|
|
|
2020-05-10 05:37:38 +00:00
|
|
|
|
NumEntries: set 49
|
|
|
|
|
; 12 alerts
|
|
|
|
|
; 11 texts
|
2019-07-27 14:37:48 +00:00
|
|
|
|
; 4 icons
|
|
|
|
|
; 8 button lists
|
|
|
|
|
; 5 button strings
|
|
|
|
|
; 9 procs
|
|
|
|
|
|
|
|
|
|
dc.w NumEntries
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Alert definitions.
|
|
|
|
|
;
|
|
|
|
|
; (word) error ID
|
|
|
|
|
; (word) 10 (length of remaining items)
|
|
|
|
|
; (word) primary text definition ID
|
|
|
|
|
; (word) secondary text definition ID
|
|
|
|
|
; (word) icon definition ID
|
|
|
|
|
; (word) procedure definition ID
|
|
|
|
|
; (word) button definition ID
|
|
|
|
|
|
|
|
|
|
; system error (handles cases not covered below)
|
|
|
|
|
|
|
|
|
|
dc.w dsSysErr,10,dstGeneralError,0,dsiBomb,dspGeneralError,dsbRestartResume
|
|
|
|
|
|
|
|
|
|
; other errors
|
|
|
|
|
|
|
|
|
|
dc.w dsReinsert,10,dstInsertDisk,0,dsiDiskSwap,dspDrawDiskName,0
|
|
|
|
|
dc.w dsStknHeap,10,dstGeneralError,0,dsiBomb,dspStackSniffError,dsbRestartResume
|
|
|
|
|
|
|
|
|
|
; Startup, INITs, or apps ate too much of BufPtr space or the current heap
|
|
|
|
|
|
|
|
|
|
dc.w dsMemFullErr,10,dstMemFullErr,0,dsiBomb,dspDrawCurrentName,dsbShutDownOrRestart
|
|
|
|
|
|
|
|
|
|
; ShutDown Manager support
|
|
|
|
|
|
|
|
|
|
dc.w shutDownAlert,10,dstSwitchOff,0,dsiNote,0,dsbRestart
|
|
|
|
|
dc.w dsShutDownOrRestart,10,dstShutDownOrRestart,0,dsiNote,0,dsbShutDownOrRestart
|
|
|
|
|
dc.w dsSwitchOffOrRestart,10,dstSwitchOffOrRestart,0,dsiNote,0,dsbRestart
|
|
|
|
|
|
|
|
|
|
; Forced Quit for MultiFinder
|
|
|
|
|
|
|
|
|
|
dc.w dsForcedQuit,10,dstForcedQuit,0,dsiStop,dspDrawForcedQuitMessage,dsbCancelOrQuit
|
|
|
|
|
|
|
|
|
|
; errors in both BootAlerts and UserAlerts
|
|
|
|
|
|
|
|
|
|
dc.w dsBadPatch,10,dstSystemDamaged,0,dsiStop,0,dsbRestart
|
|
|
|
|
dc.w dsNoPatch,10,dstMissingPatch,0,dsiStop,0,dsbRestart
|
|
|
|
|
dc.w dsParityErr,10,dstParityError,0,dsiBomb,0,dsbRestart
|
|
|
|
|
|
2020-05-10 05:37:38 +00:00
|
|
|
|
; SCSI Disk Mode
|
|
|
|
|
|
|
|
|
|
dc.w dsSCSIWarn,10,dstSCSIWarn,0,dsiStop,0,0
|
|
|
|
|
|
2019-07-27 14:37:48 +00:00
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Text definitions.
|
|
|
|
|
;
|
|
|
|
|
; (word) text definition ID
|
|
|
|
|
; (word) length of rest of definition
|
|
|
|
|
; (long) location (point) - global coordinates
|
|
|
|
|
; (??) ASCII text
|
|
|
|
|
; (byte) null character
|
|
|
|
|
|
|
|
|
|
GeneralErrorMessage
|
|
|
|
|
dc.w dstGeneralError,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
DC.B 'Sorry, a system error occurred.'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
InsertDiskMessage
|
|
|
|
|
dc.w dstInsertDisk,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 30,75
|
|
|
|
|
DC.B 'Please insert the disk:'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
SwitchOffMessage
|
|
|
|
|
dc.w dstSwitchOff,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
DC.B 'It is now safe to switch off your Macintosh.'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
SwitchOffOrRestartMessage
|
|
|
|
|
dc.w dstSwitchOffOrRestart,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
dc.b 'It is now safe to switch off your Macintosh./'
|
|
|
|
|
dc.b 'If you wish to continue using your Macintosh,/'
|
|
|
|
|
dc.b 'press Restart.'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
ShutDownOrRestartMessage
|
|
|
|
|
dc.w dstShutDownOrRestart,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
dc.b 'If you wish to continue using your Macintosh,/'
|
|
|
|
|
dc.b 'press Restart. If not, press Shut Down.'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
SystemDamagedMessage
|
|
|
|
|
dc.w dstSystemDamaged,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
DC.B 'The “System” file on this startup disk may be/'
|
|
|
|
|
dc.b 'damaged. The Installer can be used to repair this/'
|
|
|
|
|
dc.b 'disk.'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
MissingPatchMessage
|
|
|
|
|
dc.w dstMissingPatch,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
DC.B 'This startup disk was created with “Minimal”/'
|
|
|
|
|
dc.b 'software and will not work on this Macintosh/'
|
|
|
|
|
dc.b 'model. Use the Installer to update this disk for/'
|
|
|
|
|
dc.b 'this model.'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
ParityErrorMessage
|
|
|
|
|
dc.w dstParityError,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
DC.B 'Sorry, a system error occurred./'
|
|
|
|
|
DC.B '/'
|
|
|
|
|
DC.B ' RAM parity'
|
|
|
|
|
DC.B 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
ForcedQuitMessage
|
|
|
|
|
dc.w dstForcedQuit,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94+14,114
|
|
|
|
|
dc.b 'Unsaved changes will be lost./'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
SomebodyAteAlltheRAMMessage
|
|
|
|
|
dc.w dstMemFullErr,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 94,114
|
|
|
|
|
dc.b 'Not enough memory is available while using/'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
2020-05-10 05:37:38 +00:00
|
|
|
|
CableRemovedMessage
|
|
|
|
|
dc.w dstSCSIWarn,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 88,114
|
|
|
|
|
dc.b '/'
|
|
|
|
|
dc.b 'Hard Disk Cable Warning/'
|
|
|
|
|
dc.b '/'
|
|
|
|
|
dc.b 'You must first shutdown the Macintosh before/'
|
|
|
|
|
dc.b 'attaching any SCSI hard disk cables. Disconnect/'
|
|
|
|
|
dc.b 'the cable from the back of the machine right now./'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
@end
|
|
|
|
|
|
2019-07-27 14:37:48 +00:00
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; icon definitions
|
|
|
|
|
;
|
|
|
|
|
; (word) icon definition ID (used as resource ID for cicn)
|
|
|
|
|
; (word) length of rest of definition
|
|
|
|
|
; (8 bytes) location (rectangle) - global coordinates
|
|
|
|
|
; (128 bytes) icon data
|
|
|
|
|
|
|
|
|
|
; Susan’s bomb icon
|
|
|
|
|
|
|
|
|
|
BombIcon
|
|
|
|
|
dc.w dsiBomb,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 81,60,113,92
|
|
|
|
|
dc.l $00000808, $00000010, $00000420, $00008040
|
|
|
|
|
dc.l $00002200, $00000800, $001F002A, $0020C700
|
|
|
|
|
dc.l $00403800, $00400020, $00400910, $03F81008
|
|
|
|
|
dc.l $03F82104, $03F80000, $0FFE0100, $3FFF8000
|
|
|
|
|
dc.l $3FFF8000, $7FFFC000, $7FFFC000, $FFFDE000
|
|
|
|
|
dc.l $FFFFE000, $FFFEE000, $FFFEE000, $FFFEE000
|
|
|
|
|
dc.l $FFFFE000, $FFFDE000, $7FFFC000, $7FF7C000
|
|
|
|
|
dc.l $3FFF8000, $3FFF8000, $0FFE0000, $03F80000
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; disk-switched icon
|
|
|
|
|
|
|
|
|
|
; The disk-switch icon for manual-eject systems is different
|
|
|
|
|
DiskSwapIcon
|
|
|
|
|
dc.w dsiDiskSwap,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 20,24,52,56
|
|
|
|
|
dc.l $002ADE00, $00800100, $00000080, $01000080
|
|
|
|
|
dc.l $000003E0, $010001C0, $00000080, $00000000
|
|
|
|
|
dc.l $FFF83FFC, $88A44452, $88A24451, $88224411
|
|
|
|
|
dc.l $8FE247F1, $80024001, $80024001, $9FF24FF9
|
|
|
|
|
dc.l $A00A5005, $A00A5005, $A00A5005, $A00A5005
|
|
|
|
|
dc.l $A00A5005, $A00A5005, $FFFE7FFF, $00000000
|
|
|
|
|
dc.l $01000000, $03800080, $07C00000, $01000080
|
|
|
|
|
dc.l $01000000, $00800100, $007B5400, $00000000
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; stop icon
|
|
|
|
|
|
|
|
|
|
DSStopIcon
|
|
|
|
|
dc.w dsiStop,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 81,60,113,92
|
|
|
|
|
dc.l $00FFFF00, $01FFFF80, $03FFFFC0, $07FEFFE0
|
|
|
|
|
dc.l $0FFC7FF0, $1FEC67F8, $3FC447FC, $7FC447FE
|
|
|
|
|
dc.l $FF4447FF, $FE4447FF, $FE4447FF, $FE4447FF
|
|
|
|
|
dc.l $FE4447FF, $FE4447FF, $FE40071F, $FE00061F
|
|
|
|
|
dc.l $FE00061F, $FE00043F, $FE00003F, $FE00007F
|
|
|
|
|
dc.l $FE00007F, $FE0000FF, $FE0000FF, $FE0001FF
|
|
|
|
|
dc.l $FE0001FF, $7E0403FE, $3F0207FC, $1FFFFFF8
|
|
|
|
|
dc.l $0FFFFFF0, $07FFFFE0, $03FFFFC0, $01FFFF80
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; note icon
|
|
|
|
|
|
|
|
|
|
DSNoteIcon
|
|
|
|
|
dc.w dsiNote,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 81,60,113,92
|
|
|
|
|
dc.l $FFFFFFFF, $807FFFFF, $807FFFFF, $807FFFFF
|
|
|
|
|
dc.l $807FFFFF, $807FC0FF, $887F003F, $887E001F
|
|
|
|
|
dc.l $887C000F, $80780007, $80780007, $80700003
|
|
|
|
|
dc.l $8071DDC3, $80700003, $80700003, $8071DD43
|
|
|
|
|
dc.l $80700003, $80700003, $8071D703, $80700003
|
|
|
|
|
dc.l $87F00003, $81F1EEC3, $81F00007, $81F00007
|
|
|
|
|
dc.l $81F0000F, $81E0001F, $8F80007F, $81FFFFFF
|
|
|
|
|
dc.l $81FFFFFF, $81FFFFFF, $81FFFFFF, $FFFFFFFF
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; button lists
|
|
|
|
|
;
|
|
|
|
|
; (word) button definition ID
|
|
|
|
|
; (word) length of rest of definition
|
|
|
|
|
; (word) number of buttons
|
|
|
|
|
; (word) string ID
|
|
|
|
|
; (4 words) button location (rectangle)
|
|
|
|
|
; (word) procedure definition ID
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
; Restart button list
|
|
|
|
|
; this is the copy used if there is no ResumeProc
|
|
|
|
|
; note that these two are identical
|
|
|
|
|
|
|
|
|
|
RestartButtons1
|
|
|
|
|
dc.w dsbRestart,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 1
|
|
|
|
|
dc.w dssRestart,154,404,174,463,dspRestart
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; Restart button list
|
|
|
|
|
; this is the copy used if there is a ResumeProc
|
|
|
|
|
; note that these two are identical
|
|
|
|
|
|
|
|
|
|
RestartButtons2
|
|
|
|
|
dc.w dsbRestart+1,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 1
|
|
|
|
|
dc.w dssRestart,154,404,174,463,dspRestart
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; Restart/Resume button list
|
|
|
|
|
; this is the copy used if there is no ResumeProc
|
|
|
|
|
|
|
|
|
|
RestartResumeButtons1
|
|
|
|
|
dc.w dsbRestartResume,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 1
|
|
|
|
|
dc.w dssRestart,154,404,174,463,dspRestart
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; Restart/Resume button list
|
|
|
|
|
; this is the copy used if there is a ResumeProc
|
|
|
|
|
; it includes a Resume button
|
|
|
|
|
|
|
|
|
|
RestartResumeButtons2
|
|
|
|
|
dc.w dsbRestartResume+1,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 2
|
|
|
|
|
dc.w dssRestart,154,404,174,463,dspRestart
|
|
|
|
|
dc.w dssResume,154,325,174,392,dspResume
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; ShutDown button list
|
|
|
|
|
; This is the copy used if there is no ResumeProc.
|
|
|
|
|
; Note that these two are identical.
|
|
|
|
|
|
|
|
|
|
ShutDownOrRestartButtons1
|
|
|
|
|
dc.w dsbShutDownOrRestart,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 2 ; 2 buttons
|
|
|
|
|
dc.w dssShutDown,154,384,174,463,dspShutDown ; Shut Down button
|
|
|
|
|
dc.w dssRestart,154,313,174,372,dspRestart ; Restart button
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; ShutDown button list
|
|
|
|
|
; This is the copy used if there is a ResumeProc.
|
|
|
|
|
; Note that these two are identical.
|
|
|
|
|
|
|
|
|
|
ShutDownOrRestartButtons2
|
|
|
|
|
dc.w dsbShutDownOrRestart+1,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 2 ; 2 buttons
|
|
|
|
|
dc.w dssShutDown,154,384,174,463,dspShutDown ; Shut Down button
|
|
|
|
|
dc.w dssRestart,154,313,174,372,dspRestart ; Restart button
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; Cancel or Quit button list
|
|
|
|
|
; This is the copy used if there is no ResumeProc.
|
|
|
|
|
; Note that these two are identical.
|
|
|
|
|
|
|
|
|
|
CancelOrQuitButtons1
|
|
|
|
|
dc.w dsbCancelOrQuit,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 2 ; 2 buttons
|
|
|
|
|
dc.w dssCancel,154,411,174,463,0 ; Cancel button
|
|
|
|
|
dc.w dssQuit,154,324,174,399,dspExitToShell ; Quit button
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; Cancel or Quit button list
|
|
|
|
|
; This is the copy used if there is a ResumeProc.
|
|
|
|
|
; Note that these two are identical.
|
|
|
|
|
|
|
|
|
|
CancelOrQuitButtons2
|
|
|
|
|
dc.w dsbCancelOrQuit+1,@end-@rest
|
|
|
|
|
@rest
|
|
|
|
|
dc.w 2 ; 2 buttons
|
|
|
|
|
dc.w dssCancel,154,411,174,463,0 ; Cancel button
|
|
|
|
|
dc.w dssQuit,154,324,174,399,dspExitToShell ; Quit button
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; button strings
|
|
|
|
|
;
|
|
|
|
|
; (word) string ID
|
|
|
|
|
; (word) length of string (rounded to next word)
|
|
|
|
|
; (??) ASCII characters
|
|
|
|
|
;
|
|
|
|
|
; strings must be padded to even lengths with spaces since they are drawn
|
|
|
|
|
|
|
|
|
|
dc.w dssRestart,8
|
|
|
|
|
DC.B 'Restart '
|
|
|
|
|
|
|
|
|
|
dc.w dssResume,8
|
|
|
|
|
DC.B 'Continue'
|
|
|
|
|
|
|
|
|
|
dc.w dssShutDown,10
|
|
|
|
|
dc.b 'Shut Down '
|
|
|
|
|
|
|
|
|
|
dc.w dssCancel,6
|
|
|
|
|
dc.b 'Cancel'
|
|
|
|
|
|
|
|
|
|
dc.w dssQuit,10
|
|
|
|
|
dc.b 'Force Quit'
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; Procedures.
|
|
|
|
|
;
|
|
|
|
|
; (word) Procedure definition id
|
|
|
|
|
; (word) length of rest of definition
|
|
|
|
|
; (??) procedure code.
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DoRestart is used to restart.
|
|
|
|
|
|
|
|
|
|
dc.w dspRestart,EndDoRestart-DoRestart
|
|
|
|
|
|
|
|
|
|
DoRestart
|
|
|
|
|
|
|
|
|
|
; restart the machine, first try to use the shutdown manager, then do our own restart
|
|
|
|
|
; on machines with a boot 2 resource, we always have a ShutDown Manager before UserAlerts is active
|
|
|
|
|
|
|
|
|
|
bsr.s ShutDownManagerInstalled ; is there a ShutDown Manager?
|
|
|
|
|
bz.s @noShutDownManager
|
|
|
|
|
|
|
|
|
|
_SDRestart ; use the ShutDown Manager
|
|
|
|
|
|
|
|
|
|
; This code is executed on machines without ShutDown Managers.
|
|
|
|
|
|
|
|
|
|
@noShutDownManager
|
|
|
|
|
bsr.s DoUnmount ; unmount all of the volumes
|
|
|
|
|
|
|
|
|
|
Move.L ROMBase,a0 ; point to the ROM
|
|
|
|
|
Lea ROMHeader.ReStart(a0),a0 ; point to the restart routine
|
|
|
|
|
|
|
|
|
|
btst #6,ROM85 ; old machines only need reset
|
|
|
|
|
bz.s @tooNewForReset
|
|
|
|
|
reset
|
|
|
|
|
@tooNewForReset
|
|
|
|
|
|
|
|
|
|
Jmp (a0) ; exit thru the restart routine
|
|
|
|
|
|
|
|
|
|
; ShutDownManagerInstalled
|
|
|
|
|
;
|
|
|
|
|
; This determines if the ShutDown Manager is installed.
|
|
|
|
|
; It returns NZ if there is a ShutDown Manager and Z if there is not.
|
|
|
|
|
|
|
|
|
|
ShutDownManagerInstalled
|
|
|
|
|
Move.W #UnimplementedTrapNumber, D0 ; get UnImpCore
|
|
|
|
|
_GetTrapAddress
|
|
|
|
|
Move.L A0, A1 ; saves result
|
|
|
|
|
Move.W #ShutDownTrapNumber, D0 ; get ShutDown
|
|
|
|
|
_GetTrapAddress
|
|
|
|
|
Cmp.L A0, A1 ; compares the two
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
; The following routines (DoUnmount and ZapVCBQueue) are copied from the ShutDown Manager:
|
|
|
|
|
;
|
|
|
|
|
; DoUnmount - Unmount all of the Volumes on line, so the disks will be
|
|
|
|
|
; updated before our power off.
|
|
|
|
|
;
|
|
|
|
|
; Entry: No parameters.
|
|
|
|
|
|
|
|
|
|
DoUnmount
|
|
|
|
|
Sub #IOQElSize,SP ; allocate pBlock
|
|
|
|
|
|
|
|
|
|
; Go through the VCB Queue to Flush and eject all volumes.
|
|
|
|
|
|
|
|
|
|
Move.L SP,A0 ; point to the parameter block.
|
|
|
|
|
Clr.L ioVNPtr(A0)
|
|
|
|
|
Clr.W ioRefNum(A0)
|
|
|
|
|
Move.L VCBQHdr+QHead,A1 ; get the queue header
|
|
|
|
|
Move.L VCBQHdr+QTail,D2 ; get the tail too.
|
|
|
|
|
Beq.S @AllFlushed
|
|
|
|
|
Bsr.S ZapVCBQueue ; wipe out the whole Queue
|
|
|
|
|
|
|
|
|
|
@AllFlushed
|
|
|
|
|
Add #IOQElSize,SP ; deallocate pBlock
|
|
|
|
|
Rts
|
|
|
|
|
|
|
|
|
|
; ZapVCBQueue - This ReEntrant routine goes through the VCB Queue, and calls
|
|
|
|
|
; UnmountVol for each entry.
|
|
|
|
|
; Entry: A0 - IOParam Block
|
|
|
|
|
; A1 - Pointer to current Entry
|
|
|
|
|
; D2 - Tail entry Pointer.
|
|
|
|
|
; Exit: A1 - Pointer to next Entry.
|
|
|
|
|
; D1 - Preserved.
|
|
|
|
|
|
|
|
|
|
ZapVCBQueue
|
|
|
|
|
Move.W D1,-(SP) ; save for re-entrancy.
|
|
|
|
|
|
|
|
|
|
Move.W vcbVRefNum(A1),D1 ; get a VRefNum
|
|
|
|
|
Move.L QLink(A1),-(SP) ; go on to the next VCB
|
|
|
|
|
Cmp.L D2,A1
|
|
|
|
|
Move.L (SP)+,A1
|
|
|
|
|
Beq.S @FlushTime ; have we reached the end?
|
|
|
|
|
Bsr.S ZapVCBQueue ; not yet, save the VRefNum, call self.
|
|
|
|
|
@FlushTime
|
|
|
|
|
Move.W D1,ioVRefNum(A0) ; set up the refNum in the PBlock.
|
|
|
|
|
_Eject
|
|
|
|
|
_HUnmountVol ; shut the volume down.
|
|
|
|
|
Move.W (SP)+,D1 ; restore crucial VRefNum
|
|
|
|
|
Rts ; for reentrancy.
|
|
|
|
|
|
|
|
|
|
EndDoRestart
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DoResume is used for Resume.
|
|
|
|
|
|
|
|
|
|
dc.w dspResume,EndDoResume-DoResume
|
|
|
|
|
|
|
|
|
|
DoResume
|
|
|
|
|
move.l GrafSize+140(sp),CurMap ; restore top resource map (see StartAlert.a)
|
|
|
|
|
MOVE.L CurrentA5,a5 ; restore A5
|
|
|
|
|
MOVE.L CurStackBase,sp ; restore stack
|
|
|
|
|
MOVE.L ResumeProc,a0 ; call that resume proc
|
|
|
|
|
JMP (a0)
|
|
|
|
|
EndDoResume
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DoStackSniffButtons is used for the stack overflow case.
|
|
|
|
|
; Otherwise it is like DoSystemErrorButtons.
|
|
|
|
|
|
|
|
|
|
dc.w dspStackSniffError,EndDoStackSniffButtons-DoStackSniffButtons
|
|
|
|
|
|
|
|
|
|
DoStackSniffButtons
|
|
|
|
|
MOVE.L (SP)+,A0 ; get return address
|
|
|
|
|
MOVE.L CurStackBase,SP ; reset the stack
|
|
|
|
|
MOVE.L A0,-(SP) ; restore return address
|
|
|
|
|
BRA.S DoSystemErrorButtons ; go print the ID
|
|
|
|
|
EndDoStackSniffButtons
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DoSystemErrorButtons is used for system errors.
|
|
|
|
|
; It prints the ID of the DS alert.
|
|
|
|
|
|
|
|
|
|
dc.w dspGeneralError,EndDoSystemErrorButtons-DoSystemErrorButtons
|
|
|
|
|
|
|
|
|
|
DoSystemErrorButtons
|
|
|
|
|
moveq #0,d3
|
|
|
|
|
move.w DSErrCode,d3 ; get the error code
|
|
|
|
|
cmp.w #100,d3 ; is it too high to display?
|
|
|
|
|
bhs.s @done
|
|
|
|
|
|
|
|
|
|
bsr DrawCurrentName ; draw the current name and the optional extensions msg <15>
|
|
|
|
|
|
|
|
|
|
MOVE.L #((94+28)<<16)+130,-(SP) ; push location of third line
|
|
|
|
|
_MoveTo ;move the pen
|
|
|
|
|
|
|
|
|
|
moveq #0,d0
|
|
|
|
|
lea MessagesTable,a0 ; point to the table of messages
|
|
|
|
|
@next
|
|
|
|
|
tst.b (a0) ; end of table?
|
|
|
|
|
bz.s @doNumberedMessage
|
|
|
|
|
cmp.b (a0)+,d3 ; is this the message?
|
|
|
|
|
beq.s @foundMessage
|
|
|
|
|
move.b (a0)+,d0 ; get length byte of string
|
|
|
|
|
add.w d0,a0 ; advance to next message in table
|
|
|
|
|
bra.s @next
|
|
|
|
|
|
|
|
|
|
@drawDigit
|
|
|
|
|
or.w #$30,d3 ; turn into ASCII
|
|
|
|
|
move.w d3,-(SP) ; push it
|
|
|
|
|
_DrawChar
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
@foundMessage
|
|
|
|
|
move.l a0,-(sp) ; display the message
|
|
|
|
|
_DrawString
|
|
|
|
|
bra.s @done
|
|
|
|
|
|
|
|
|
|
@doNumberedMessage
|
|
|
|
|
pea NumberedMessage ; display the message
|
|
|
|
|
_DrawString
|
|
|
|
|
divu #10,d3 ; divide by 10
|
|
|
|
|
bz.s @oneDigit
|
|
|
|
|
bsr.s @drawDigit
|
|
|
|
|
@oneDigit
|
|
|
|
|
swap d3 ; get remainder
|
|
|
|
|
bsr.s @drawDigit
|
|
|
|
|
|
|
|
|
|
@done
|
|
|
|
|
RTS
|
|
|
|
|
|
|
|
|
|
string pascal
|
|
|
|
|
|
|
|
|
|
NumberedMessage
|
|
|
|
|
dc.b 'error type '
|
|
|
|
|
align
|
|
|
|
|
MessagesTable
|
|
|
|
|
dc.b 1,'bus error'
|
|
|
|
|
dc.b 2,'address error'
|
|
|
|
|
dc.b 3,'illegal instruction'
|
|
|
|
|
dc.b 4,'divide by zero'
|
|
|
|
|
dc.b 5,'CHK error'
|
|
|
|
|
dc.b 6,'numeric overflow'
|
|
|
|
|
dc.b 10,'bad F-Line instruction' ; <14>
|
|
|
|
|
dc.b 12,'unimplemented trap'
|
|
|
|
|
dc.b 13,'unserviceable interrupt'
|
|
|
|
|
dc.b 14,'Device Manager error'
|
|
|
|
|
dc.b 15,'Segment Loader error'
|
|
|
|
|
dc.b 16,'SANE error'
|
|
|
|
|
dc.b 17,'List Manager not present'
|
|
|
|
|
dc.b 18,'BitEdit not present'
|
|
|
|
|
dc.b 19,'Disk Initialization package not present'
|
|
|
|
|
dc.b 20,'Standard File not present'
|
|
|
|
|
dc.b 21,'SANE not present'
|
|
|
|
|
dc.b 22,'SANE transcendental functions not present'
|
|
|
|
|
dc.b 23,'International Utilities not present'
|
|
|
|
|
dc.b 24,'Binary-Decimal Conversion package not present'
|
|
|
|
|
dc.b 27,'file system map inconsistent'
|
|
|
|
|
dc.b 28,'stack collision with heap'
|
|
|
|
|
dc.b 33,'Memory Manager error'
|
|
|
|
|
dc.b 51,'unserviceable slot interrupt'
|
|
|
|
|
dc.b 81,'bad SANE opcode'
|
|
|
|
|
dc.b 84,'menu purged while in use'
|
|
|
|
|
dc.b 85,'couldn’t load MBDF'
|
|
|
|
|
dc.b 86,'couldn’t find hierarchical menu’s parent'
|
|
|
|
|
dc.b 87,'couldn’t load WDEF'
|
|
|
|
|
dc.b 88,'couldn’t load CDEF'
|
|
|
|
|
dc.b 90,'floating point coprocessor not installed'
|
|
|
|
|
dc.b 0
|
|
|
|
|
align
|
|
|
|
|
|
|
|
|
|
string asis
|
|
|
|
|
|
|
|
|
|
EndDoSystemErrorButtons
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DrawDiskName is used to by the disk switch alert
|
|
|
|
|
; to draw the name of the volume needed.
|
|
|
|
|
|
|
|
|
|
dc.w dspDrawDiskName,EndDrawDiskName-DrawDiskName
|
|
|
|
|
|
|
|
|
|
DrawDiskName
|
|
|
|
|
MOVE.L #$0033004B,-(SP) ;push pen position
|
|
|
|
|
_MoveTo ;position the pen
|
|
|
|
|
|
|
|
|
|
movea.l FSVarsPtr,a1 ;get address of HFS variable area <16>
|
|
|
|
|
move.l FSVars.dsRecoverNamePtr(a1), -(sp) ;grab our target volume's name <16>
|
|
|
|
|
_DrawString
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
EndDrawDiskName
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DrawCurrentName is used to draw the name of the INIT or application which ate up too much memory.
|
|
|
|
|
|
|
|
|
|
; Use the INIT name pointed to by CurApName+4 if we’re at INIT time. Otherwise, use CurApName.
|
|
|
|
|
; If the name looks bogus, don’t draw a name.
|
|
|
|
|
;
|
|
|
|
|
; If we’re at INIT time, also draw the disableExtensionMsg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dc.w dspDrawCurrentName,EndDrawCurrentName-DrawCurrentName
|
|
|
|
|
|
|
|
|
|
DrawCurrentName
|
|
|
|
|
MOVE.L #((94+28-14)<<16)+114,-(SP) ; push location of second line
|
|
|
|
|
_MoveTo ; position the pen
|
|
|
|
|
|
|
|
|
|
tst.b CurApName ; are we at boot time?
|
|
|
|
|
bmi.s @getINITName ; negative could never be right if an application name was here
|
|
|
|
|
@getApplicationName
|
|
|
|
|
lea CurApName,a2 ; push ptr to application name
|
|
|
|
|
bra.s @drawString
|
|
|
|
|
|
|
|
|
|
@getINITName
|
|
|
|
|
move.l CurApName+4,d0 ; go get the pointer to the INIT name
|
|
|
|
|
bmi.s @noName ; negative? Not valid.
|
|
|
|
|
|
|
|
|
|
btst #0,d0 ; is it odd?
|
|
|
|
|
bne.s @noName ; Not valid
|
|
|
|
|
|
|
|
|
|
move.l MemTop,d1 ; is it below the top of the boot globals (barrier)?
|
|
|
|
|
lsr.l #1,d1 ; MemTop/2
|
|
|
|
|
add.w #1024,d1 ; + 1K
|
|
|
|
|
cmp.l d0,d1 ; namePtr < barrier ?
|
|
|
|
|
bls.s @noName ; no? Not valid.
|
|
|
|
|
|
|
|
|
|
move.l d0,a2 ; namePtr
|
|
|
|
|
|
|
|
|
|
@drawString ; namePtr in a0
|
|
|
|
|
cmp.b #32,(a2) ; StringLength(namePtr^) < 32?
|
|
|
|
|
bhs.s @noName ; no? Not valid.
|
|
|
|
|
|
|
|
|
|
pea @prefix ; <15>
|
|
|
|
|
_DrawString ; <15>
|
|
|
|
|
|
|
|
|
|
move.l a2,-(sp) ; push the INIT name pointer
|
|
|
|
|
|
|
|
|
|
_DrawString ; draw it on second line
|
|
|
|
|
|
|
|
|
|
pea @suffix
|
|
|
|
|
_DrawString
|
|
|
|
|
|
|
|
|
|
@noName ; <15>
|
|
|
|
|
tst.b CurApName ; are we at boot time?
|
|
|
|
|
bpl.s @allDone ; not, so leave
|
|
|
|
|
|
|
|
|
|
MOVE.L #((94+28+14)<<16)+114,-(SP) ; push location of fourth line
|
|
|
|
|
_MoveTo ; position the pen
|
|
|
|
|
pea @disableExtensionMsg1
|
|
|
|
|
_DrawString
|
|
|
|
|
MOVE.L #((94+28+28)<<16)+114,-(SP) ; push location of fourth line
|
|
|
|
|
_MoveTo ; position the pen
|
|
|
|
|
pea @disableExtensionMsg2
|
|
|
|
|
_DrawString
|
|
|
|
|
|
|
|
|
|
@allDone
|
|
|
|
|
RTS
|
|
|
|
|
|
|
|
|
|
string pascal
|
|
|
|
|
|
|
|
|
|
@prefix dc.b '“'
|
|
|
|
|
@suffix dc.b '”'
|
|
|
|
|
align
|
|
|
|
|
@disableExtensionMsg1
|
|
|
|
|
dc.b 'To temporarily turn off extensions, restart and'
|
|
|
|
|
align
|
|
|
|
|
@disableExtensionMsg2
|
|
|
|
|
dc.b 'hold down the shift key.'
|
|
|
|
|
align
|
|
|
|
|
|
|
|
|
|
string asis
|
|
|
|
|
|
|
|
|
|
EndDrawCurrentName
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DoExitToShell is used to return to the Finder and/or kill an application.
|
|
|
|
|
|
|
|
|
|
dc.w dspExitToShell,EndExitToShell-DoExitToShell
|
|
|
|
|
|
|
|
|
|
DoExitToShell
|
|
|
|
|
|
|
|
|
|
; Clear MacJmp flag that is used to detect reentrancy, since no one else will do it <14>
|
|
|
|
|
move.b MacJmpFlag,d0 ; get possible debugger flag word
|
|
|
|
|
cmp.b #-1,d0 ; is this an implemented flag byte?
|
|
|
|
|
bne.s UseMacJmpFlag ; if so, use it
|
|
|
|
|
bclr #7,MacJmp ; NOT in debugger any longer
|
|
|
|
|
bra.s MacJmpOK ; rejoin
|
|
|
|
|
UseMacJmpFlag
|
|
|
|
|
bclr #7,MacJmpFlag ; NOT in debugger any longer
|
|
|
|
|
MacJmpOK
|
|
|
|
|
|
|
|
|
|
; This is for boneheads who patch ExitToShell and expect A5 to have something meaningful in it <14>
|
|
|
|
|
; (e.g. all apps built with Think C)
|
|
|
|
|
move.l CurrentA5,A5 ; set a5 to the application's value of it
|
|
|
|
|
|
|
|
|
|
; With VM on, there is only a single, limited supervisor stack and it is not what we normally want <14>
|
|
|
|
|
; to use as a stack. The ExitToShell is a transition from the world of interrupt and error handling
|
|
|
|
|
; back to the normal world of applications. Therefore, we need to switch back to user mode and the
|
|
|
|
|
; user stack.
|
|
|
|
|
; NOTE: The Process Manager switches to its own stack (but doesn't switch modes). Application patches
|
|
|
|
|
; to ExitToShell, though, may use the stack extensively (e.g. to close windows) before calling through.
|
|
|
|
|
; The order here is important. We don’t want to set the Supervisor stack pointer to CurStackBase. That
|
|
|
|
|
; would be interesting, but not right. So we must clear Supervisor mode first, then set the stack.
|
|
|
|
|
|
|
|
|
|
move.l #gestaltVMAttr,d0 ; pass selector for VM attributes
|
|
|
|
|
_Gestalt ; ask system about VM
|
|
|
|
|
tst.w d0
|
|
|
|
|
bne.s @stackAndModeOK ; if there was an error, forget it
|
|
|
|
|
move.l a0,d0
|
|
|
|
|
btst #gestaltVMPresent,d0
|
|
|
|
|
beq.s @stackAndModeOK ; if VM isn’t present, we shouldn't change mode/stacks
|
|
|
|
|
andi #$DFFF,SR ; turn off Supervisor mode. Do this first, or we’ll reset
|
|
|
|
|
; the wrong stack pointer. This is ~(1<<13)
|
|
|
|
|
move.l CurStackBase,sp ; reset the stack to a safe place so we can bail out cleanly
|
|
|
|
|
@stackAndModeOK
|
|
|
|
|
|
|
|
|
|
_ExitToShell ; terminate this application (finally!)
|
|
|
|
|
EndExitToShell
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; ShutDown is used by the ShutDown Manager’s “user choice” alert to turn off the machine.
|
|
|
|
|
|
|
|
|
|
dc.w dspShutDown,EndDoShutDown-DoShutDown
|
|
|
|
|
|
|
|
|
|
DoShutDown
|
|
|
|
|
bsr.s ShutDownManagerInstalled ; is there a ShutDown Manager? <14>
|
|
|
|
|
bz.s @noShutDownManager ; <14>
|
|
|
|
|
|
|
|
|
|
; *** Figure out why we have to do this! <14>
|
|
|
|
|
clr.l DSErrCode ; Voodoo black magic <14>
|
|
|
|
|
_SDPowerOff
|
|
|
|
|
|
|
|
|
|
@noShutDownManager ; <14>
|
|
|
|
|
moveq #shutDownAlert,d0 ; <14>
|
|
|
|
|
clr.l ResumeProc ; don’t show resume button <14>
|
|
|
|
|
_SysError ; <14>
|
|
|
|
|
|
|
|
|
|
EndDoShutDown
|
|
|
|
|
|
|
|
|
|
; —————————————————————————————————————————————————
|
|
|
|
|
;
|
|
|
|
|
; DrawForcedQuitMessage is used to draw the message for dsForcedQuit, since the message needs
|
|
|
|
|
; to include the name of the application. It also forces the Window Mgr. to update the screen
|
|
|
|
|
; where the forced quit alert appears by accumulating the rectangle of the alert into the
|
|
|
|
|
; SysErrorUpdateRect. This is required, since otherwise no one will erase the alert.
|
|
|
|
|
|
|
|
|
|
dc.w dspDrawForcedQuitMessage,EndDrawForcedQuitMessage-DrawForcedQuitMessage
|
|
|
|
|
|
|
|
|
|
DrawForcedQuitMessage
|
|
|
|
|
move.l #(94<<16)+114,-(SP) ; push location of third line
|
|
|
|
|
_MoveTo ; position the pen
|
|
|
|
|
|
|
|
|
|
pea @prefix
|
|
|
|
|
_DrawString
|
|
|
|
|
|
|
|
|
|
PEA CurApName ; push ptr to application name
|
|
|
|
|
_DrawString ; draw it on second line
|
|
|
|
|
|
|
|
|
|
pea @suffix
|
|
|
|
|
_DrawString
|
|
|
|
|
|
|
|
|
|
; now accumulate into the SysErrorUpdateRect
|
|
|
|
|
|
|
|
|
|
move.l DSAlertRect+botRight,-(sp) ; move the rect onto the stack
|
|
|
|
|
move.l DSAlertRect+topLeft,-(sp)
|
|
|
|
|
|
|
|
|
|
and.w #$7FFF,top(sp) ; clear the high bit of top (which is usually set)
|
|
|
|
|
|
|
|
|
|
move.l sp,-(sp) ; union this into the SysErrorUpdateRect
|
|
|
|
|
move.l ExpandMem,a0
|
|
|
|
|
pea ExpandMemRec.SysErrorUpdateRect(a0) ; into this rect
|
|
|
|
|
move.l (sp),-(sp) ; same rect is destination
|
|
|
|
|
_UnionRect
|
|
|
|
|
|
|
|
|
|
addq #8,sp ; get rid of the rect from the stack
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
string pascal
|
|
|
|
|
|
|
|
|
|
@prefix dc.b 'Force “'
|
|
|
|
|
@suffix dc.b '” to quit?'
|
|
|
|
|
align
|
|
|
|
|
|
|
|
|
|
string asis
|
|
|
|
|
|
|
|
|
|
EndDrawForcedQuitMessage
|
|
|
|
|
|
|
|
|
|
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
|
|
|
|
|
|
end
|