commit 143d8cbdd5565bf88a85a746641d44ae1b54d4b7 Author: Christopher Shepherd Date: Sat May 9 15:40:04 2015 -0400 first commit for github diff --git a/Library/.AppleDouble/.Parent b/Library/.AppleDouble/.Parent new file mode 100644 index 0000000..9d0789c Binary files /dev/null and b/Library/.AppleDouble/.Parent differ diff --git a/Library/.AppleDouble/Ace.Macs.s b/Library/.AppleDouble/Ace.Macs.s new file mode 100644 index 0000000..4131050 Binary files /dev/null and b/Library/.AppleDouble/Ace.Macs.s differ diff --git a/Library/.AppleDouble/Adb.Macs.s b/Library/.AppleDouble/Adb.Macs.s new file mode 100644 index 0000000..105d866 Binary files /dev/null and b/Library/.AppleDouble/Adb.Macs.s differ diff --git a/Library/.AppleDouble/Anim.s b/Library/.AppleDouble/Anim.s new file mode 100644 index 0000000..45c84c9 Binary files /dev/null and b/Library/.AppleDouble/Anim.s differ diff --git a/Library/.AppleDouble/Crypto.Macs.s b/Library/.AppleDouble/Crypto.Macs.s new file mode 100644 index 0000000..5d0e0d1 Binary files /dev/null and b/Library/.AppleDouble/Crypto.Macs.s differ diff --git a/Library/.AppleDouble/Ctl.Macs.s b/Library/.AppleDouble/Ctl.Macs.s new file mode 100644 index 0000000..d5d370e Binary files /dev/null and b/Library/.AppleDouble/Ctl.Macs.s differ diff --git a/Library/.AppleDouble/Desk.Macs.s b/Library/.AppleDouble/Desk.Macs.s new file mode 100644 index 0000000..5ca6197 Binary files /dev/null and b/Library/.AppleDouble/Desk.Macs.s differ diff --git a/Library/.AppleDouble/Dialog.Macs.s b/Library/.AppleDouble/Dialog.Macs.s new file mode 100644 index 0000000..0f6fed3 Binary files /dev/null and b/Library/.AppleDouble/Dialog.Macs.s differ diff --git a/Library/.AppleDouble/Dos.16.Macs.s b/Library/.AppleDouble/Dos.16.Macs.s new file mode 100644 index 0000000..bff710c Binary files /dev/null and b/Library/.AppleDouble/Dos.16.Macs.s differ diff --git a/Library/.AppleDouble/Dos.8.Macs.s b/Library/.AppleDouble/Dos.8.Macs.s new file mode 100644 index 0000000..39c2add Binary files /dev/null and b/Library/.AppleDouble/Dos.8.Macs.s differ diff --git a/Library/.AppleDouble/E16.ACE.S b/Library/.AppleDouble/E16.ACE.S new file mode 100644 index 0000000..502d4be Binary files /dev/null and b/Library/.AppleDouble/E16.ACE.S differ diff --git a/Library/.AppleDouble/E16.ADB.S b/Library/.AppleDouble/E16.ADB.S new file mode 100644 index 0000000..65dbb6c Binary files /dev/null and b/Library/.AppleDouble/E16.ADB.S differ diff --git a/Library/.AppleDouble/E16.CONTROL.S b/Library/.AppleDouble/E16.CONTROL.S new file mode 100644 index 0000000..f83684a Binary files /dev/null and b/Library/.AppleDouble/E16.CONTROL.S differ diff --git a/Library/.AppleDouble/E16.DESK.S b/Library/.AppleDouble/E16.DESK.S new file mode 100644 index 0000000..22ac5e6 Binary files /dev/null and b/Library/.AppleDouble/E16.DESK.S differ diff --git a/Library/.AppleDouble/E16.DIALOG.S b/Library/.AppleDouble/E16.DIALOG.S new file mode 100644 index 0000000..fd94dd1 Binary files /dev/null and b/Library/.AppleDouble/E16.DIALOG.S differ diff --git a/Library/.AppleDouble/E16.EVENT.S b/Library/.AppleDouble/E16.EVENT.S new file mode 100644 index 0000000..814b0b5 Binary files /dev/null and b/Library/.AppleDouble/E16.EVENT.S differ diff --git a/Library/.AppleDouble/E16.FONT.S b/Library/.AppleDouble/E16.FONT.S new file mode 100644 index 0000000..c880e26 Binary files /dev/null and b/Library/.AppleDouble/E16.FONT.S differ diff --git a/Library/.AppleDouble/E16.GSOS.S b/Library/.AppleDouble/E16.GSOS.S new file mode 100644 index 0000000..561aae9 Binary files /dev/null and b/Library/.AppleDouble/E16.GSOS.S differ diff --git a/Library/.AppleDouble/E16.INTMATH.S b/Library/.AppleDouble/E16.INTMATH.S new file mode 100644 index 0000000..ebab743 Binary files /dev/null and b/Library/.AppleDouble/E16.INTMATH.S differ diff --git a/Library/.AppleDouble/E16.LINEEDIT.S b/Library/.AppleDouble/E16.LINEEDIT.S new file mode 100644 index 0000000..3994bbf Binary files /dev/null and b/Library/.AppleDouble/E16.LINEEDIT.S differ diff --git a/Library/.AppleDouble/E16.LIST.S b/Library/.AppleDouble/E16.LIST.S new file mode 100644 index 0000000..0f6bd3c Binary files /dev/null and b/Library/.AppleDouble/E16.LIST.S differ diff --git a/Library/.AppleDouble/E16.LOADER.S b/Library/.AppleDouble/E16.LOADER.S new file mode 100644 index 0000000..7d93176 Binary files /dev/null and b/Library/.AppleDouble/E16.LOADER.S differ diff --git a/Library/.AppleDouble/E16.LOCATOR.S b/Library/.AppleDouble/E16.LOCATOR.S new file mode 100644 index 0000000..be92e4b Binary files /dev/null and b/Library/.AppleDouble/E16.LOCATOR.S differ diff --git a/Library/.AppleDouble/E16.MEMORY.S b/Library/.AppleDouble/E16.MEMORY.S new file mode 100644 index 0000000..2a00a5b Binary files /dev/null and b/Library/.AppleDouble/E16.MEMORY.S differ diff --git a/Library/.AppleDouble/E16.MENU.S b/Library/.AppleDouble/E16.MENU.S new file mode 100644 index 0000000..29b5b1c Binary files /dev/null and b/Library/.AppleDouble/E16.MENU.S differ diff --git a/Library/.AppleDouble/E16.MISCTOOL.S b/Library/.AppleDouble/E16.MISCTOOL.S new file mode 100644 index 0000000..63153de Binary files /dev/null and b/Library/.AppleDouble/E16.MISCTOOL.S differ diff --git a/Library/.AppleDouble/E16.NOTESYN.S b/Library/.AppleDouble/E16.NOTESYN.S new file mode 100644 index 0000000..b4800d4 Binary files /dev/null and b/Library/.AppleDouble/E16.NOTESYN.S differ diff --git a/Library/.AppleDouble/E16.PRINT.S b/Library/.AppleDouble/E16.PRINT.S new file mode 100644 index 0000000..83cb476 Binary files /dev/null and b/Library/.AppleDouble/E16.PRINT.S differ diff --git a/Library/.AppleDouble/E16.PRODOS.S b/Library/.AppleDouble/E16.PRODOS.S new file mode 100644 index 0000000..52e3d16 Binary files /dev/null and b/Library/.AppleDouble/E16.PRODOS.S differ diff --git a/Library/.AppleDouble/E16.QUICKDRAW.S b/Library/.AppleDouble/E16.QUICKDRAW.S new file mode 100644 index 0000000..572037a Binary files /dev/null and b/Library/.AppleDouble/E16.QUICKDRAW.S differ diff --git a/Library/.AppleDouble/E16.SANE.S b/Library/.AppleDouble/E16.SANE.S new file mode 100644 index 0000000..947dd6b Binary files /dev/null and b/Library/.AppleDouble/E16.SANE.S differ diff --git a/Library/.AppleDouble/E16.SCRAP.S b/Library/.AppleDouble/E16.SCRAP.S new file mode 100644 index 0000000..66aec53 Binary files /dev/null and b/Library/.AppleDouble/E16.SCRAP.S differ diff --git a/Library/.AppleDouble/E16.SHELL.S b/Library/.AppleDouble/E16.SHELL.S new file mode 100644 index 0000000..b792240 Binary files /dev/null and b/Library/.AppleDouble/E16.SHELL.S differ diff --git a/Library/.AppleDouble/E16.SOUND.S b/Library/.AppleDouble/E16.SOUND.S new file mode 100644 index 0000000..83f1ff7 Binary files /dev/null and b/Library/.AppleDouble/E16.SOUND.S differ diff --git a/Library/.AppleDouble/E16.STDFILE.S b/Library/.AppleDouble/E16.STDFILE.S new file mode 100644 index 0000000..ab6eadc Binary files /dev/null and b/Library/.AppleDouble/E16.STDFILE.S differ diff --git a/Library/.AppleDouble/E16.TEXTTOOL.S b/Library/.AppleDouble/E16.TEXTTOOL.S new file mode 100644 index 0000000..2f56dea Binary files /dev/null and b/Library/.AppleDouble/E16.TEXTTOOL.S differ diff --git a/Library/.AppleDouble/E16.WINDOW.S b/Library/.AppleDouble/E16.WINDOW.S new file mode 100644 index 0000000..1220c07 Binary files /dev/null and b/Library/.AppleDouble/E16.WINDOW.S differ diff --git a/Library/.AppleDouble/Event.Macs.s b/Library/.AppleDouble/Event.Macs.s new file mode 100644 index 0000000..6a916c2 Binary files /dev/null and b/Library/.AppleDouble/Event.Macs.s differ diff --git a/Library/.AppleDouble/Female.Macs.s b/Library/.AppleDouble/Female.Macs.s new file mode 100644 index 0000000..c054656 Binary files /dev/null and b/Library/.AppleDouble/Female.Macs.s differ diff --git a/Library/.AppleDouble/Font.Macs.s b/Library/.AppleDouble/Font.Macs.s new file mode 100644 index 0000000..4647ffd Binary files /dev/null and b/Library/.AppleDouble/Font.Macs.s differ diff --git a/Library/.AppleDouble/GsOs.Macs.s b/Library/.AppleDouble/GsOs.Macs.s new file mode 100644 index 0000000..002c414 Binary files /dev/null and b/Library/.AppleDouble/GsOs.Macs.s differ diff --git a/Library/.AppleDouble/Hashtool.Macs.s b/Library/.AppleDouble/Hashtool.Macs.s new file mode 100644 index 0000000..add59be Binary files /dev/null and b/Library/.AppleDouble/Hashtool.Macs.s differ diff --git a/Library/.AppleDouble/Int.Macs.s b/Library/.AppleDouble/Int.Macs.s new file mode 100644 index 0000000..3c82487 Binary files /dev/null and b/Library/.AppleDouble/Int.Macs.s differ diff --git a/Library/.AppleDouble/Line.Macs.s b/Library/.AppleDouble/Line.Macs.s new file mode 100644 index 0000000..8e6a419 Binary files /dev/null and b/Library/.AppleDouble/Line.Macs.s differ diff --git a/Library/.AppleDouble/List.Macs.s b/Library/.AppleDouble/List.Macs.s new file mode 100644 index 0000000..d9c9430 Binary files /dev/null and b/Library/.AppleDouble/List.Macs.s differ diff --git a/Library/.AppleDouble/Load.Macs.s b/Library/.AppleDouble/Load.Macs.s new file mode 100644 index 0000000..79b3443 Binary files /dev/null and b/Library/.AppleDouble/Load.Macs.s differ diff --git a/Library/.AppleDouble/Locator.Macs.s b/Library/.AppleDouble/Locator.Macs.s new file mode 100644 index 0000000..00c97fe Binary files /dev/null and b/Library/.AppleDouble/Locator.Macs.s differ diff --git a/Library/.AppleDouble/Logo.Macs.s b/Library/.AppleDouble/Logo.Macs.s new file mode 100644 index 0000000..d62864e Binary files /dev/null and b/Library/.AppleDouble/Logo.Macs.s differ diff --git a/Library/.AppleDouble/Macros.s b/Library/.AppleDouble/Macros.s new file mode 100644 index 0000000..95610d3 Binary files /dev/null and b/Library/.AppleDouble/Macros.s differ diff --git a/Library/.AppleDouble/Male.Macs.s b/Library/.AppleDouble/Male.Macs.s new file mode 100644 index 0000000..8576f05 Binary files /dev/null and b/Library/.AppleDouble/Male.Macs.s differ diff --git a/Library/.AppleDouble/Media.Macs.s b/Library/.AppleDouble/Media.Macs.s new file mode 100644 index 0000000..6f73cb6 Binary files /dev/null and b/Library/.AppleDouble/Media.Macs.s differ diff --git a/Library/.AppleDouble/Mem.Macs.s b/Library/.AppleDouble/Mem.Macs.s new file mode 100644 index 0000000..b5d3943 Binary files /dev/null and b/Library/.AppleDouble/Mem.Macs.s differ diff --git a/Library/.AppleDouble/Menu.Macs.s b/Library/.AppleDouble/Menu.Macs.s new file mode 100644 index 0000000..98d5236 Binary files /dev/null and b/Library/.AppleDouble/Menu.Macs.s differ diff --git a/Library/.AppleDouble/Midi.Macs.s b/Library/.AppleDouble/Midi.Macs.s new file mode 100644 index 0000000..f93d8f8 Binary files /dev/null and b/Library/.AppleDouble/Midi.Macs.s differ diff --git a/Library/.AppleDouble/MidiSyn.Macs.s b/Library/.AppleDouble/MidiSyn.Macs.s new file mode 100644 index 0000000..c518811 Binary files /dev/null and b/Library/.AppleDouble/MidiSyn.Macs.s differ diff --git a/Library/.AppleDouble/Misc.Macs.s b/Library/.AppleDouble/Misc.Macs.s new file mode 100644 index 0000000..df5be86 Binary files /dev/null and b/Library/.AppleDouble/Misc.Macs.s differ diff --git a/Library/.AppleDouble/NoteSeq.Macs.s b/Library/.AppleDouble/NoteSeq.Macs.s new file mode 100644 index 0000000..a720ca9 Binary files /dev/null and b/Library/.AppleDouble/NoteSeq.Macs.s differ diff --git a/Library/.AppleDouble/NoteSyn.Macs.s b/Library/.AppleDouble/NoteSyn.Macs.s new file mode 100644 index 0000000..ff8c41a Binary files /dev/null and b/Library/.AppleDouble/NoteSyn.Macs.s differ diff --git a/Library/.AppleDouble/Print.Macs.s b/Library/.AppleDouble/Print.Macs.s new file mode 100644 index 0000000..f37466b Binary files /dev/null and b/Library/.AppleDouble/Print.Macs.s differ diff --git a/Library/.AppleDouble/Qd.Macs.s b/Library/.AppleDouble/Qd.Macs.s new file mode 100644 index 0000000..83c1561 Binary files /dev/null and b/Library/.AppleDouble/Qd.Macs.s differ diff --git a/Library/.AppleDouble/QdAux.Macs.s b/Library/.AppleDouble/QdAux.Macs.s new file mode 100644 index 0000000..075a582 Binary files /dev/null and b/Library/.AppleDouble/QdAux.Macs.s differ diff --git a/Library/.AppleDouble/Resource.Macs.s b/Library/.AppleDouble/Resource.Macs.s new file mode 100644 index 0000000..0464697 Binary files /dev/null and b/Library/.AppleDouble/Resource.Macs.s differ diff --git a/Library/.AppleDouble/Sane.Macs.s b/Library/.AppleDouble/Sane.Macs.s new file mode 100644 index 0000000..233edd6 Binary files /dev/null and b/Library/.AppleDouble/Sane.Macs.s differ diff --git a/Library/.AppleDouble/Sch.Macs.s b/Library/.AppleDouble/Sch.Macs.s new file mode 100644 index 0000000..9c7f944 Binary files /dev/null and b/Library/.AppleDouble/Sch.Macs.s differ diff --git a/Library/.AppleDouble/Scrap.Macs.s b/Library/.AppleDouble/Scrap.Macs.s new file mode 100644 index 0000000..7885547 Binary files /dev/null and b/Library/.AppleDouble/Scrap.Macs.s differ diff --git a/Library/.AppleDouble/Sound.Macs.s b/Library/.AppleDouble/Sound.Macs.s new file mode 100644 index 0000000..eecacbd Binary files /dev/null and b/Library/.AppleDouble/Sound.Macs.s differ diff --git a/Library/.AppleDouble/Speech.Macs.s b/Library/.AppleDouble/Speech.Macs.s new file mode 100644 index 0000000..a3b0181 Binary files /dev/null and b/Library/.AppleDouble/Speech.Macs.s differ diff --git a/Library/.AppleDouble/Std.Macs.s b/Library/.AppleDouble/Std.Macs.s new file mode 100644 index 0000000..d109d72 Binary files /dev/null and b/Library/.AppleDouble/Std.Macs.s differ diff --git a/Library/.AppleDouble/TCPIP.Macs.s b/Library/.AppleDouble/TCPIP.Macs.s new file mode 100644 index 0000000..6119646 Binary files /dev/null and b/Library/.AppleDouble/TCPIP.Macs.s differ diff --git a/Library/.AppleDouble/TCPIPX.Macs.s b/Library/.AppleDouble/TCPIPX.Macs.s new file mode 100644 index 0000000..5896f3b Binary files /dev/null and b/Library/.AppleDouble/TCPIPX.Macs.s differ diff --git a/Library/.AppleDouble/Text.Macs.s b/Library/.AppleDouble/Text.Macs.s new file mode 100644 index 0000000..98cef30 Binary files /dev/null and b/Library/.AppleDouble/Text.Macs.s differ diff --git a/Library/.AppleDouble/TextEdit.Macs.s b/Library/.AppleDouble/TextEdit.Macs.s new file mode 100644 index 0000000..8b19a79 Binary files /dev/null and b/Library/.AppleDouble/TextEdit.Macs.s differ diff --git a/Library/.AppleDouble/Tool219.Macs.s b/Library/.AppleDouble/Tool219.Macs.s new file mode 100644 index 0000000..e4d0666 Binary files /dev/null and b/Library/.AppleDouble/Tool219.Macs.s differ diff --git a/Library/.AppleDouble/Tool220.Macs.s b/Library/.AppleDouble/Tool220.Macs.s new file mode 100644 index 0000000..a3de1a6 Binary files /dev/null and b/Library/.AppleDouble/Tool220.Macs.s differ diff --git a/Library/.AppleDouble/Util.Macs.s b/Library/.AppleDouble/Util.Macs.s new file mode 100644 index 0000000..5393afd Binary files /dev/null and b/Library/.AppleDouble/Util.Macs.s differ diff --git a/Library/.AppleDouble/VGA.Macs.s b/Library/.AppleDouble/VGA.Macs.s new file mode 100644 index 0000000..2796c3e Binary files /dev/null and b/Library/.AppleDouble/VGA.Macs.s differ diff --git a/Library/.AppleDouble/Video.Macs.s b/Library/.AppleDouble/Video.Macs.s new file mode 100644 index 0000000..31cff05 Binary files /dev/null and b/Library/.AppleDouble/Video.Macs.s differ diff --git a/Library/.AppleDouble/Window.Macs.s b/Library/.AppleDouble/Window.Macs.s new file mode 100644 index 0000000..4d49f81 Binary files /dev/null and b/Library/.AppleDouble/Window.Macs.s differ diff --git a/Library/Ace.Macs.s b/Library/Ace.Macs.s new file mode 100644 index 0000000..c23225c --- /dev/null +++ b/Library/Ace.Macs.s @@ -0,0 +1,62 @@ +* ACE tool macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; + +_ACEBootInit MAC + Tool $11D + <<< +~ACEStartUp MAC + PHW ]1 +_ACEStartUp MAC + Tool $21D + <<< +_ACEShutDown MAC + Tool $31D + <<< +~ACEVersion MAC + PHA +_ACEVersion MAC + Tool $41D + <<< +_ACEReset MAC + Tool $51D + <<< +~ACEStatus MAC + PHA +_ACEStatus MAC + Tool $61D + <<< +~ACEInfo MAC + P2SW ]1 +_ACEInfo MAC + Tool $71D + <<< +~ACECompress MAC + PxL ]1;]2;]3;]4 + PxW ]5;]6 +_ACECompress MAC + Tool $91D + <<< +~ACEExpand MAC + PxL ]1;]2;]3;]4 + PxW ]5;]6 +_ACEExpand MAC + Tool $A1D + <<< +_ACECompBegin MAC + Tool $B1D + <<< +_ACEExpBegin MAC + Tool $C1D + <<< +_GetACEExpState MAC + Tool $D1D + <<< +_SetACEExpState MAC + Tool $E1D + <<< + diff --git a/Library/Adb.Macs.s b/Library/Adb.Macs.s new file mode 100644 index 0000000..d118a3e --- /dev/null +++ b/Library/Adb.Macs.s @@ -0,0 +1,91 @@ +* Desktop Bus tool macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_ADBBootInit MAC + Tool $109 + <<< +_ADBStartUp MAC + Tool $209 + <<< +_ADBShutDown MAC + Tool $309 + <<< +_ADBVersion MAC + Tool $409 + <<< +_ADBReset MAC + Tool $509 + <<< +~ADBStatus MAC + PHA +_ADBStatus MAC + Tool $609 + <<< +~SendInfo MAC + PHW ]1 + PHLW ]2;]3 +_SendInfo MAC + Tool $909 + <<< +~ReadKeyMicroData MAC + PHW ]1 + PHLW ]2;]3 +_ReadKeyMicroData MAC + Tool $A09 + <<< +~ReadKeyMicroMem MAC + PxL ]1;]2 + PHW ]3 +_ReadKeyMicroMem MAC + Tool $B09 + <<< +~AsyncADBReceive MAC + PHLW ]1;]2 +_AsyncADBReceive MAC + Tool $D09 + <<< +~SyncADBReceive MAC + PHW ]1 + PHLW ]2;]3 +_SyncADBReceive MAC + Tool $E09 + <<< +_AbsOn MAC + Tool $F09 + <<< +_AbsOff MAC + Tool $1009 + <<< +~ReadAbs MAC + PHA +_ReadAbs MAC + Tool $1109 + <<< +~GetAbsScale MAC + PHL ]1 +_GetAbsScale MAC + Tool $1209 + <<< +~SetAbsScale MAC + PHL ]1 +_SetAbsScale MAC + Tool $1309 + <<< +~SRQPoll MAC + PHLW ]1;]2 +_SRQPoll MAC + Tool $1409 + <<< +~SRQRemove MAC + PHW ]1 +_SRQRemove MAC + Tool $1509 + <<< +_ClearSRQTable MAC + Tool $1609 + <<< + diff --git a/Library/Anim.s b/Library/Anim.s new file mode 100644 index 0000000..4b4f63e --- /dev/null +++ b/Library/Anim.s @@ -0,0 +1,83 @@ +* +* Anim Tool Set +* + +_AnimBootInit MAC + Tool $0125 + <<< +_AnimStartUp MAC + Tool $0225 + <<< +_AnimShutDown MAC + Tool $0325 + <<< +_AnimVersion MAC + Tool $0425 + <<< +_AnimReset MAC + Tool $0525 + <<< +_AnimStatus MAC + Tool $0623 + <<< +_AnimIdleDebug MAC + Tool $0825 + <<< +_StartScene MAC + Tool $0925 + <<< +_StopScene MAC + Tool $0A25 + <<< +_StartFrameTimer MAC + Tool $0B25 + <<< +_StopFrameTimer MAC + Tool $0C25 + <<< +_SetBackGndPort MAC + Tool $0D25 + <<< +_RefreshBack MAC + Tool $0E25 + <<< +_StartChar MAC + Tool $0F25 + <<< +_MoveChar MAC + Tool $1025 + <<< +_GetCharRecPtr MAC + Tool $1125 + <<< +_KillChar MAC + Tool $1225 + <<< +_LoadActor MAC + Tool $1325 + <<< +_SetCharScript MAC + Tool $1425 + <<< +_RunAnimScripts MAC + Tool $1525 + <<< +_FillAddrTable MAC + Tool $1625 + <<< +_CompileRect MAC + Tool $1725 + <<< +_StartTockTask MAC + Tool $1825 + <<< +_FireTockTask MAC + Tool $1925 + <<< +_SetForeGndPort MAC + Tool $1A25 + <<< +_SetAnimWindow MAC + Tool $1B25 + <<< + diff --git a/Library/Crypto.Macs.s b/Library/Crypto.Macs.s new file mode 100644 index 0000000..81bf344 --- /dev/null +++ b/Library/Crypto.Macs.s @@ -0,0 +1,46 @@ +* +* Crypto Tool Set Macros +* by Andrew Roughan +* +* 2002-04-05 AJR - Initial Coding +* 2002-07-03 AJR - desAddParity +* 2002-08-10 AJR - Tool number assigned +* + +]cryptotoolnum = $81 + +_cryptoBootInit MAC + Tool $0100+]cryptotoolnum + <<< +~cryptoStartUp MAC + PHW ]1 +_cryptoStartUp MAC + Tool $0200+]cryptotoolnum + <<< +_cryptoShutDown MAC + Tool $0300+]cryptotoolnum + <<< +~cryptoVersion MAC + PHA +_cryptoVersion MAC + Tool $0400+]cryptotoolnum + <<< +_cryptoReset MAC + Tool $0500+]cryptotoolnum + <<< +~cryptoStatus MAC + PHA +_cryptoStatus MAC + Tool $0600+]cryptotoolnum + <<< +~desCipher MAC + PxL ]1,]2,]3 + PHW ]4 +_desCipher MAC + Tool $0900+]cryptotoolnum + <<< +~desAddParity MAC + PxL ]1,]2 +_desAddParity MAC + Tool $0A00+]cryptotoolnum + <<< diff --git a/Library/Ctl.Macs.s b/Library/Ctl.Macs.s new file mode 100644 index 0000000..413fbce --- /dev/null +++ b/Library/Ctl.Macs.s @@ -0,0 +1,305 @@ +* Control Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_CtlBootInit MAC + Tool $110 + <<< +~CtlStartUp MAC + PxW ]1;]2 +_CtlStartUp MAC +_InitCtrlMgr MAC + Tool $210 + <<< +_CtlShutDown MAC +_CtrlShutDown MAC + Tool $310 + <<< +~CtlVersion MAC + PHA +_CtlVersion MAC + Tool $410 + <<< +_CtlReset MAC + Tool $510 + <<< +~CtlStatus MAC + PHA +_CtlStatus MAC + Tool $610 + <<< +_NewControl MAC + Tool $910 + <<< +~DisposeControl MAC + PHL ]1 +_DisposeControl MAC + Tool $A10 + <<< +~KillControls MAC + PHL ]1 +_KillControls MAC + Tool $B10 + <<< +~SetCtlTitle MAC + PxL ]1;]2 +_SetCtlTitle MAC + Tool $C10 + <<< +~GetCtlTitle MAC + P2SL ]1 +_GetCtlTitle MAC + Tool $D10 + <<< +~HideControl MAC + PHL ]1 +_HideControl MAC + Tool $E10 + <<< +~ShowControl MAC + PHL ]1 +_ShowControl MAC + Tool $F10 + <<< +~DrawControls MAC + PHL ]1 +_DrawControls MAC + Tool $1010 + <<< +~HiliteControl MAC + PHWL ]1;]2 +_HiliteControl MAC + Tool $1110 + <<< +_CtlNewRes MAC + Tool $1210 + <<< +~FindControl MAC + PHA + PHLW ]1;]2 + PHWL ]3;]4 +_FindControl MAC + Tool $1310 + <<< +~TestControl MAC + P1SW ]1 + PHWL ]2;]3 +_TestControl MAC + Tool $1410 + <<< +~TrackControl MAC + PHA + PxW ]1;]2 + PxL ]3;]4 +_TrackControl MAC + Tool $1510 + <<< +~MoveControl MAC + PxW ]1;]2 + PHL ]3 +_MoveControl MAC + Tool $1610 + <<< +~DragControl MAC + PxW ]1;]2 + PxL ]3;]4 + PHWL ]5;]6 +_DragControl MAC + Tool $1710 + <<< +~SetCtlIcons MAC + P2SL ]1 +_SetCtlIcons MAC + Tool $1810 + <<< +~SetCtlValue MAC + PHWL ]1;]2 +_SetCtlValue MAC + Tool $1910 + <<< +~GetCtlValue MAC + P1SL ]1 +_GetCtlValue MAC + Tool $1A10 + <<< +~SetCtlParams MAC + PxW ]1;]2 + PHL ]3 +_SetCtlParams MAC + Tool $1B10 + <<< +~GetCtlParams MAC + P2SL ]1 +_GetCtlParams MAC + Tool $1C10 + <<< +~DragRect MAC + P2SL ]1 + PHLW ]2;]3 + PHWL ]4;]5 + PxL ]6;]7 + PHW ]8 +_DragRect MAC + Tool $1D10 + <<< +~GrowSize MAC + PHS 2 +_GrowSize MAC + Tool $1E10 + <<< +~GetCtlDpage MAC + PHA +_GetCtlDpage MAC + Tool $1F10 + <<< +~SetCtlAction MAC + PxL ]1;]2 +_SetCtlAction MAC + Tool $2010 + <<< +~GetCtlAction MAC + P2SL ]1 +_GetCtlAction MAC + Tool $2110 + <<< +~SetCtlRefCon MAC + PxL ]1;]2 +_SetCtlRefCon MAC + Tool $2210 + <<< +~GetCtlRefCon MAC + P2SL ]1 +_GetCtlRefCon MAC + Tool $2310 + <<< +~EraseControl MAC + PHL ]1 +_EraseControl MAC + Tool $2410 + <<< +~DrawOneCtl MAC + PHL ]1 +_DrawOneCtl MAC + Tool $2510 + <<< +~FindTargetCtl MAC + PHS 2 +_FindTargetCtl MAC + Tool $2610 + <<< +~MakeNextCtlTarget MAC + PHS 2 +_MakeNextCtlTarget MAC + Tool $2710 + <<< +~MakeThisCtlTarget MAC + PHL ]1 +_MakeThisCtlTarget MAC + Tool $2810 + <<< +~SendEventToCtl MAC + P1SW ]1 + PxL ]2;]3 +_SendEventToCtl MAC + Tool $2910 + <<< +~GetCtlID MAC + P2SL ]1 +_GetCtlID MAC + Tool $2A10 + <<< +~SetCtlID MAC + PxL ]1;]2 +_SetCtlID MAC + Tool $2B10 + <<< +~CallCtlDefProc MAC + PHLW ]1;]2 + PHL ]3 +_CallCtlDefProc MAC + Tool $2C10 + <<< +~NotifyCtls MAC + PxW ]1;]2 + PxL ]3;]4 +_NotifyCtls MAC + Tool $2D10 + <<< +~GetCtlMoreFlags MAC + P1SL ]1 +_GetCtlMoreFlags MAC + Tool $2E10 + <<< +~SetCtlMoreFlags MAC + PHWL ]1;]2 +_SetCtlMoreFlags MAC + Tool $2F10 + <<< +~GetCtlHandleFromID MAC + PHS 2 + PxL ]1;]2 +_GetCtlHandleFromID MAC + Tool $3010 + <<< +~NewControl2 MAC + P2SL ]1 + PHWL ]2;]3 +_NewControl2 MAC + Tool $3110 + <<< +~CMLoadResource MAC + P2SW ]1 + PHL ]2 +_CMLoadResource MAC + Tool $3210 + <<< +~CMReleaseResource MAC + PHWL ]1;]2 +_CMReleaseResource MAC + Tool $3310 + <<< +~SetCtlParamPtr MAC + PHL ]1 +_SetCtlParamPtr MAC + Tool $3410 + <<< +~GetCtlParamPtr MAC + PHS 2 +_GetCtlParamPtr MAC + Tool $3510 + <<< +~InvalCtls MAC + PHL ]1 +_InvalCtls MAC + Tool $3710 + <<< +~qCtlStartUp MAC + PHW ]1 + NextDP ]2;$100 + Tool $210 + <<< +_FindRadioButton MAC + Tool $3910 + <<< +_SetLETextByID MAC + Tool $3A10 + <<< +_GetLETextByID MAC + Tool $3B10 + <<< +_SetCtlValueByID MAC + Tool $3C10 + <<< +_GetCtlValueByID MAC + Tool $3D10 + <<< +_InvalOneCtlByID MAC + Tool $3E10 + <<< +_HiliteCtlByID MAC + Tool $3F10 + <<< + diff --git a/Library/Desk.Macs.s b/Library/Desk.Macs.s new file mode 100644 index 0000000..7e9057f --- /dev/null +++ b/Library/Desk.Macs.s @@ -0,0 +1,143 @@ +* Desk Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_DeskBootInit MAC + Tool $105 + <<< +_DeskStartUp MAC + Tool $205 + <<< +_DeskShutDown MAC + Tool $305 + <<< +~DeskVersion MAC + PHA +_DeskVersion MAC + Tool $405 + <<< +_DeskReset MAC + Tool $505 + <<< +~DeskStatus MAC + PHA +_DeskStatus MAC + Tool $605 + <<< +_SaveScrn MAC + Tool $905 + <<< +_RestScrn MAC + Tool $A05 + <<< +_SaveAll MAC + Tool $B05 + <<< +_RestAll MAC + Tool $C05 + <<< +~InstallNDA MAC + PHL ]1 +_InstallNDA MAC + Tool $E05 + <<< +~InstallCDA MAC + PHL ]1 +_InstallCDA MAC + Tool $F05 + <<< +_ChooseCDA MAC + Tool $1105 + <<< +~SetDAStrPtr MAC + PxL ]1;]2 +_SetDAStrPtr MAC + Tool $1305 + <<< +~GetDAStrPtr MAC + PHS 2 +_GetDAStrPtr MAC + Tool $1405 + <<< +~OpenNDA MAC + P1SW ]1 +_OpenNDA MAC + Tool $1505 + <<< +~CloseNDA MAC + PHW ]1 +_CloseNDA MAC + Tool $1605 + <<< +~SystemClick MAC + PxL ]1;]2 + PHW ]3 +_SystemClick MAC + Tool $1705 + <<< +~SystemEdit MAC + P1SW ]1 +_SystemEdit MAC + Tool $1805 + <<< +_SystemTask MAC + Tool $1905 + <<< +~SystemEvent MAC + P1SW ]1 + PxL ]2;]3;]4 + PHW ]5 +_SystemEvent MAC + Tool $1A05 + <<< +~GetNumNDAs MAC + PHA +_GetNumNDAs MAC + Tool $1B05 + <<< +~CloseNDAbyWinPtr MAC + PHL ]1 +_CloseNDAbyWinPtr MAC + Tool $1C05 + <<< +_CloseAllNDAs MAC + Tool $1D05 + <<< +~FixAppleMenu MAC + PHW ]1 +_FixAppleMenu MAC + Tool $1E05 + <<< +~AddToRunQ MAC + PHL ]1 +_AddToRunQ MAC + Tool $1F05 + <<< +~RemoveFromRunQ MAC + PHL ]1 +_RemoveFromRunQ MAC + Tool $2005 + <<< +~RemoveCDA MAC + PHL ]1 +_RemoveCDA MAC + Tool $2105 + <<< +~RemoveNDA MAC + PHL ]1 +_RemoveNDA MAC + Tool $2205 + <<< +_GetDeskAccInfo MAC + Tool $2305 + <<< +_CallDeskAcc MAC + Tool $2405 + <<< +_GetDeskGlobal MAC + Tool $2505 + <<< + diff --git a/Library/Dialog.Macs.s b/Library/Dialog.Macs.s new file mode 100644 index 0000000..3fde1f2 --- /dev/null +++ b/Library/Dialog.Macs.s @@ -0,0 +1,285 @@ +* Dialog Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_DialogBootInit MAC + Tool $115 + <<< +~DialogStartUp MAC + PHW ]1 +_DialogStartUp MAC + Tool $215 + <<< +_DialogShutDown MAC + Tool $315 + <<< +~DialogVersion MAC + PHA +_DialogVersion MAC + Tool $415 + <<< +_DialogReset MAC + Tool $515 + <<< +~DialogStatus MAC + PHA +_DialogStatus MAC + Tool $615 + <<< +~ErrorSound MAC + PHL ]1 +_ErrorSound MAC + Tool $915 + <<< +~NewModalDialog MAC + P2SL ]1 + PHWL ]2;]3 +_NewModalDialog MAC + Tool $A15 + <<< +~NewModelessDialog MAC + P2SL ]1 + PxL ]2;]3 + PHWL ]4;]5 + PHL ]6 +_NewModelessDialog MAC + Tool $B15 + <<< +~CloseDialog MAC + PHL ]1 +_CloseDialog MAC + Tool $C15 + <<< +~NewDItem MAC + PHLW ]1;]2 + PHLW ]3;]4 + PHLW ]5;]6 + PHWL ]7;]8 +_NewDItem MAC + Tool $D15 + <<< +~RemoveDItem MAC + PHLW ]1;]2 +_RemoveDItem MAC + Tool $E15 + <<< +~ModalDialog MAC + P1SL ]1 +_ModalDialog MAC + Tool $F15 + <<< +~IsDialogEvent MAC + P1SL ]1 +_IsDialogEvent MAC + Tool $1015 + <<< +~DialogSelect MAC + P1SL ]1 + PxL ]2;]3 +_DialogSelect MAC + Tool $1115 + <<< +~DlgCut MAC + PHL ]1 +_DlgCut MAC + Tool $1215 + <<< +~DlgCopy MAC + PHL ]1 +_DlgCopy MAC + Tool $1315 + <<< +~DlgPaste MAC + PHL ]1 +_DlgPaste MAC + Tool $1415 + <<< +~DlgDelete MAC + PHL ]1 +_DlgDelete MAC + Tool $1515 + <<< +~DrawDialog MAC + PHL ]1 +_DrawDialog MAC + Tool $1615 + <<< +~Alert MAC + PHA + PxL ]1;]2 +_Alert MAC + Tool $1715 + <<< +~StopAlert MAC + PHA + PxL ]1;]2 +_StopAlert MAC + Tool $1815 + <<< +~NoteAlert MAC + PHA + PxL ]1;]2 +_NoteAlert MAC + Tool $1915 + <<< +~CautionAlert MAC + PHA + PxL ]1;]2 +_CautionAlert MAC + Tool $1A15 + <<< +~ParamText MAC + PxL ]1;]2;]3;]4 +_ParamText MAC + Tool $1B15 + <<< +~SetDAFont MAC + PHL ]1 +_SetDAFont MAC + Tool $1C15 + <<< +~GetControlDItem MAC + PHS 2 + PHLW ]1;]2 +_GetControlDItem MAC + Tool $1E15 + <<< +~GetIText MAC + PHL ]1 + PHWL ]2;]3 +_GetIText MAC + Tool $1F15 + <<< +~SetIText MAC + PHL ]1 + PHWL ]2;]3 +_SetIText MAC + Tool $2015 + <<< +~SelectIText MAC + PHL ]1 + PxW ]2;]3;]4 +_SelectIText MAC + Tool $2115 + <<< +~HideDItem MAC + PHLW ]1;]2 +_HideDItem MAC + Tool $2215 + <<< +~ShowDItem MAC + PHLW ]1;]2 +_ShowDItem MAC + Tool $2315 + <<< +~FindDItem MAC + PHA + PxL ]1;]2 +_FindDItem MAC + Tool $2415 + <<< +~UpdateDialog MAC + PxL ]1;]2 +_UpdateDialog MAC + Tool $2515 + <<< +~GetDItemType MAC + PHA + PHLW ]1;]2 +_GetDItemType MAC + Tool $2615 + <<< +~SetDItemType MAC + PHW ]1 + PHLW ]2;]3 +_SetDItemType MAC + Tool $2715 + <<< +~GetDItemBox MAC + PHL ]1 + PHWL ]2;]3 +_GetDItemBox MAC + Tool $2815 + <<< +~SetDItemBox MAC + PHL ]1 + PHWL ]2;]3 +_SetDItemBox MAC + Tool $2915 + <<< +~GetFirstDItem MAC + P1SL ]1 +_GetFirstDItem MAC + Tool $2A15 + <<< +~GetNextDItem MAC + PHA + PHLW ]1;]2 +_GetNextDItem MAC + Tool $2B15 + <<< +~ModalDialog2 MAC + P2SL ]1 +_ModalDialog2 MAC + Tool $2C15 + <<< +~GetDItemValue MAC + PHA + PHLW ]1;]2 +_GetDItemValue MAC + Tool $2E15 + <<< +~SetDItemValue MAC + PHW ]1 + PHLW ]2;]3 +_SetDItemValue MAC + Tool $2F15 + <<< +~GetNewModalDialog MAC + P2SL ]1 +_GetNewModalDialog MAC + Tool $3215 + <<< +~GetNewDItem MAC + PxL ]1;]2 +_GetNewDItem MAC + Tool $3315 + <<< +~GetAlertStage MAC + PHA +_GetAlertStage MAC + Tool $3415 + <<< +_ResetAlertStage MAC + Tool $3515 + <<< +~DefaultFilter MAC + PHA + PxL ]1;]2;]3 +_DefaultFilter MAC + Tool $3615 + <<< +~GetDefButton MAC + P1SL ]1 +_GetDefButton MAC + Tool $3715 + <<< +~SetDefButton MAC + PHWL ]1;]2 +_SetDefButton MAC + Tool $3815 + <<< +~DisableDItem MAC + PHLW ]1;]2 +_DisableDItem MAC + Tool $3915 + <<< +~EnableDItem MAC + PHLW ]1;]2 +_EnableDItem MAC + Tool $3A15 + <<< + diff --git a/Library/Dos.16.Macs.s b/Library/Dos.16.Macs.s new file mode 100644 index 0000000..f154166 --- /dev/null +++ b/Library/Dos.16.Macs.s @@ -0,0 +1,177 @@ +*=============================== +* ProDOS-16 macro and equates +* +* Use with syntax: +* +* _CMDNAME PARMADR +* +* where "CMDNAME" is one of the +* following labels and "PARMADR" +* is the label of the parameters +* table to use. +* +*------------------------------- + +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +open = $10 +read = $12 +write = $13 +close = $14 + +_CREATE MAC + DOS16 $01;]1 + <<< + +_DESTROY MAC + DOS16 $02;]1 + <<< + +_CHANGE_PATH MAC + DOS16 $04;]1 + <<< + +_SET_FILE_INFO MAC + DOS16 $05;]1 + <<< + +_GET_FILE_INFO MAC + DOS16 $06;]1 + <<< + +_VOLUME MAC + DOS16 $08;]1 + <<< + +_SET_PREFIX MAC + DOS16 $09;]1 + <<< + +_SETPREFIX MAC ; alternate name + DOS16 $09;]1 + <<< + +_GET_PREFIX MAC + DOS16 $0A;]1 + <<< + +_GETPREFIX MAC ; alternate name + DOS16 $0A;]1 + <<< + +_CLEAR_BACKUP_BIT MAC + DOS16 $0B;]1 + <<< + +_OPEN MAC + DOS16 $10;]1 + <<< + +_NEWLINE MAC + DOS16 $11;]1 + <<< + +_READ MAC + DOS16 $12;]1 + <<< + +_WRITE MAC + DOS16 $13;]1 + <<< + +_CLOSE MAC + DOS16 $14;]1 + <<< + +_FLUSH MAC + DOS16 $15;]1 + <<< + +_SET_MARK MAC + DOS16 $16;]1 + <<< + +_GET_MARK MAC + DOS16 $17;]1 + <<< + +_SET_EOF MAC + DOS16 $18;]1 + <<< + +_GET_EOF MAC + DOS16 $19;]1 + <<< + +_SET_LEVEL MAC + DOS16 $1A;]1 + <<< + +_GET_LEVEL MAC + DOS16 $1B;]1 + <<< + +_GET_DIR_ENTRY MAC + DOS16 $1C;]1 + <<< + +_GET_DEV_NUM MAC + DOS16 $20;]1 + <<< + +_GET_LAST_DEV MAC + DOS16 $21;]1 + <<< + +_READ_BLOCK MAC + DOS16 $22;]1 + <<< + +_WRITE_BLOCK MAC + DOS16 $23;]1 + <<< + +_FORMAT MAC + DOS16 $24;]1 + <<< + +_ERASE_DISK MAC + DOS16 $25;]1 + <<< + +_GET_NAME MAC + DOS16 $27;]1 + <<< + +_GET_BOOT_VOL MAC + DOS16 $28;]1 + <<< + +_QUIT MAC + DOS16 $29;]1 + <<< + +_GET_VERSION MAC + DOS16 $2A;]1 + <<< + +_D_INFO MAC + DOS16 $2C;]1 + <<< + +_ALLOC_INTERRUPT MAC + DOS16 $31;]1 + <<< + +_DEALLOC_INTERRUPT MAC + DOS16 $32;]1 + <<< + +DOS16 MAC + JSL $E100A8 + DA ]1 ; Change to ]1.$2000 for Class 1 P16 calls. + ADRL ]2 + <<< + diff --git a/Library/Dos.8.Macs.s b/Library/Dos.8.Macs.s new file mode 100644 index 0000000..3f0ec1a --- /dev/null +++ b/Library/Dos.8.Macs.s @@ -0,0 +1,142 @@ +*=============================== +* ProDOS-8 macro and equates +* +* Use with syntax: +* +* command PARMADR +* +* where "command" is one of the +* following labels and "PARMADR" +* is the label of the parameters +* table to use. +* +*------------------------------- + +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +* MLI call codes: + +ALLOC_INTERRUPT MAC + DOS8 $40;]1 + <<< + +DEALLOC_INTERRUPT MAC + DOS8 $41;]1 + <<< + +APPLE_TALK MAC + DOS8 $42;]1 + <<< + +SPECIAL_OPEN_FORK MAC + DOS8 $43;]1 + <<< + +BYTE_RANGE_LOCK MAC + DOS8 $44;]1 + <<< + +QUIT MAC + DOS8 $65;]1 + <<< + +READ_BLOCK MAC + DOS8 $80;]1 + <<< + +WRITE_BLOCK MAC + DOS8 $81;]1 + <<< + +GET_TIME MAC + DOS8 $82;]1 + <<< + +CREATE MAC + DOS8 $C0;]1 + <<< + +DESTROY MAC + DOS8 $C1;]1 + <<< + +RENAME MAC + DOS8 $C2;]1 + <<< + +SET_FILE_INFO MAC + DOS8 $C3;]1 + <<< + +GET_FILE_INFO MAC + DOS8 $C4;]1 + <<< + +ON_LINE MAC + DOS8 $C5;]1 + <<< + +SET_PREFIX MAC + DOS8 $C6;]1 + <<< + +GET_PREFIX MAC + DOS8 $C7;]1 + <<< + +OPEN MAC + DOS8 $C8;]1 + <<< + +NEWLINE MAC + DOS8 $C9;]1 + <<< + +READ MAC + DOS8 $CA;]1 + <<< + +WRITE MAC + DOS8 $CB;]1 + <<< + +CLOSE MAC + DOS8 $CC;]1 + <<< + +FLUSH MAC + DOS8 $CD;]1 + <<< + +SET_MARK MAC + DOS8 $CE;]1 + <<< + +GET_MARK MAC + DOS8 $CF;]1 + <<< + +SET_EOF MAC + DOS8 $D0;]1 + <<< + +GET_EOF MAC + DOS8 $D1;]1 + <<< + +SET_BUF MAC + DOS8 $D2;]1 + <<< + +GET_BUF MAC + DOS8 $D3;]1 + <<< + +DOS8 MAC + JSR $BF00 + DFB ]1 + DA ]2 + <<< + diff --git a/Library/E16.ACE.Macs.s b/Library/E16.ACE.Macs.s new file mode 100644 index 0000000..0cecb30 --- /dev/null +++ b/Library/E16.ACE.Macs.s @@ -0,0 +1,18 @@ +; File: E16.ACE +; +; +; Copyright Apple computer, Inc. 1988 +; All Rights Reserved +; +; + +aceNoError equ $0 ; Error - +aceIsActive equ $1D01 ; Error - +aceBadDP equ $1D02 ; Error - +aceNotActive equ $1D03 ; Error - +aceNoSuchParam equ $1D04 ; Error - +aceBadMethod equ $1D05 ; Error - +aceBadSrc equ $1D06 ; Error - +aceBadDest equ $1D07 ; Error - +aceDatatOverlap equ $1D08 ; Error - +aceNotImplemented equ $1DFF ; Error - diff --git a/Library/E16.ADB.Macs.s b/Library/E16.ADB.Macs.s new file mode 100644 index 0000000..d1c6925 --- /dev/null +++ b/Library/E16.ADB.Macs.s @@ -0,0 +1,65 @@ + +; File: E16.ADB +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +cmndIncomplete equ $0910 ; ADB error - Command not completed. +cantSync equ $0911 ; ADB error - Can't synchronize +adbBusy equ $0982 ; ADB error - Busy (command pending) +devNotAtAddr equ $0983 ; ADB error - Device not present at address + +srqListFull equ $0984 ; ADB error - List full + +orcRepeatDelay equ $0000 ; Byte - ReadConfigRec - Output byte: +;Repeat Delay/Rate +orcLayoutOrLang equ $0001 ; Byte - ReadConfigRec - Output byte: +;Layout/Lang +orcADBAddr equ $0002 ; Byte - ReadConfigRec - Output byte: ADB +;address - keyboard and mouse. + +oxDivide equ $0000 ; Word - ScaleRec - +oyDivide equ $0002 ; Word - ScaleRec - +oxOffset equ $0004 ; Word - ScaleRec - +oyOffset equ $0006 ; Word - ScaleRec - +oxMultiply equ $0008 ; Word - ScaleRec - +oyMultiply equ $000A ; Word - ScaleRec - + +oscADBAddr equ $0000 ; Byte - SetConfigRec - keyboard and mouse +oscLayoutOrLang equ $0001 ; Byte - SetConfigRec - +oscRepeatDelay equ $0002 ; Byte - SetConfigRec - + +osynchMode equ $0000 ; Byte - SynchRec - +osynchKybdMouseAddr equ $0001 ; Byte - SynchRec - +osynchLayoutOrLang equ $0002 ; Byte - SynchRec - +osynchRepeatDelay equ $0003 ; Byte - SynchRec - + +readModes equ $000A ; ReadKeyMicroData - +readConfig equ $000B ; ReadKeyMicroData - +readADBError equ $000C ; ReadKeyMicroData - +readVersionNum equ $000D ; ReadKeyMicroData - + +readMicroMem equ $0009 ; ReadKeyMicroMem - + +abort equ $0001 ; SendInfo - command +resetKbd equ $0002 ; SendInfo - command +flushKbd equ $0003 ; SendInfo - command +setModes equ $0004 ; SendInfo - 2nd param is pointer to mode byte +clearModes equ $0005 ; SendInfo - 2nd param is pointer to mode Byte +setConfig equ $0006 ; SendInfo - 2nd param is pointer to SetConfigRec +synch equ $0007 ; SendInfo - 2nd param is pointer to SynchRec +writeMicroMem equ $0008 ; SendInfo - 2nd param is pointer to MicroControlMemRec +resetSys equ $0010 ; SendInfo - command +keyCode equ $0011 ; SendInfo - 2nd param is pointer to key code byte. +resetADB equ $0040 ; SendInfo - command +transmitADBBytes equ $0047 ; SendInfo - add number of bytes to this +enableSRQ equ $0050 ; SendInfo - command - ADB address in low nibble +flushADBDevBuf equ $0060 ; SendInfo - command - ADB address in low nibble +disableSRQ equ $0070 ; SendInfo - command - ADB address in low nibble +transmit2ADBBytes equ $0080 ; SendInfo - add ADB address to this +listen equ $0080 ; SendInfo - adbCommand = listen + ( 16 * reg) + +; (adb address) +talk equ $00C0 ; SendInfo - adbCommand = talk + ( 16 * reg) + +; (adb address) diff --git a/Library/E16.Control.Macs.s b/Library/E16.Control.Macs.s new file mode 100644 index 0000000..254c3c0 --- /dev/null +++ b/Library/E16.Control.Macs.s @@ -0,0 +1,128 @@ + +; File: E16.Control +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +obarOutline equ $00 ; Word - BarColors - color for outlining bar +;, arrows, and thumb +obarNorArrow equ $02 ; Word - BarColors - color of arrows when n +;ot highlighted +obarSelArrow equ $04 ; Word - BarColors - color of arrows when h +;ighlighted +obarArrowBack equ $06 ; Word - BarColors - color of arrow box's +;background +obarNorThumb equ $08 ; Word - BarColors - color of thumb's backg +;round when not highlighted +obarSelThumb equ $0A ; Word - BarColors - color of thumb's backg +;round when highlighted +obarPageRgn equ $0C ; Word - BarColors - color and pattern page +;region: high byte - 1= dither, 0 = solid +obarInactive equ $0E ; Word - BarColors - color of scroll bar's +;interior when inactive + +oboxReserved equ $00 ; Word - BoxColors - reserved +oboxNor equ $02 ; Word - BoxColors - color of box when not check +;ed +oboxSel equ $04 ; Word - BoxColors - color of box when checked +oboxTitle equ $06 ; Word - BoxColors - color of check box's titl +;e + +obttnOutline equ $00 ; Word - BttnColors - color of outline +obttnNorBack equ $02 ; Word - BttnColors - color of background w +;hen not selected +obttnSelBack equ $04 ; Word - BttnColors - color of background w +;hen selected +obttnNorText equ $06 ; Word - BttnColors - color of title's text +; when not selected +obttnSelText equ $08 ; Word - BttnColors - color of title's text +; when selected + +oradReserved equ $00 ; Word - RadioColors - reserved +oradNor equ $02 ; Word - RadioColors - color of radio button whe +;n off +oradSel equ $04 ; Word - RadioColors - color of radio button whe +;n on +oradTitle equ $06 ; Word - RadioColors - color of radio button's +; title text + +octlNext equ $00 ; CtlRecHndl - CtlRec - Handle of next control. +octlOwner equ $04 ; GrafPortPtr - CtlRec - Pointer to control's +;window. +octlRect equ $08 ; Rect - CtlRec - Enclosing rectangle. +octlFlag equ $10 ; Byte - CtlRec - Bit flags. +octlHilite equ $11 ; Byte - CtlRec - Highlighted part. +octlValue equ $12 ; Integer - CtlRec - Control's value. +octlProc equ $14 ; Pointer - CtlRec - Control's definition proce +;dure. +octlAction equ $18 ; Pointer - CtlRec - Control's action procedu +;re. +octlData equ $1C ; Longint - CtlRec - Reserved for CtrlProc's us +;e. +octlRefCon equ $20 ; Longint - CtlRec - Reserved for application +;'s use. +octlColor equ $24 ; Pointer - CtlRec - Pointer to appropriate co +;lor table. + +oboundRect equ $00 ; Rect - LimitBlk - Drag bounds. +oslopRect equ $08 ; Rect - LimitBlk - Cursor bounds. +oaxisParam equ $10 ; Word - LimitBlk - Movement constrains. +odragPatt equ $12 ; Pointer - LimitBlk - Pointer to 32 byte Patt +;ern for drag outline. + +noConstraint equ $0000 ; Axis Parameter - No constraint on movem +;ent. +hAxisOnly equ $0001 ; Axis Parameter - Horizontal axis only. +vAxisOnly equ $0002 ; Axis Parameter - Vertical axis only. + +simpRound equ $0000 ; CtlFlag - Simple button flag +upFlag equ $0001 ; CtlFlag - Scroll bar flag. +boldButton equ $0001 ; CtlFlag - Bold round cornered outlined bu +;tton. +simpBRound equ $0001 ; CtlFlag - Simple button flag +downFlag equ $0002 ; CtlFlag - Scroll bar flag. +simpSquare equ $0002 ; CtlFlag - Simple button flag +simpDropSquare equ $0003 ; CtlFlag - Simple button flag +leftFlag equ $0004 ; CtlFlag - Scroll bar flag. +rightFlag equ $0008 ; CtlFlag - Scroll bar flag. +dirScroll equ $0010 ; CtlFlag - Scroll bar flag. +horScroll equ $0010 ; CtlFlag - Scroll bar flag. +family equ $007F ; CtlFlag - Mask for radio button family number +ctlInVis equ $0080 ; CtlFlag - invisible mask for any type of co +;ntrol + +simpleProc equ $00000000 ; CtlProc - +checkProc equ $02000000 ; CtlProc - +radioProc equ $04000000 ; CtlProc - +scrollProc equ $06000000 ; CtlProc - +growProc equ $08000000 ; CtlProc - + +drawCtl equ $0000 ; DefProc - Draw control command. +calcCRect equ $0001 ; DefProc - Compute drag RECT command. +testCtl equ $0002 ; DefProc - Hit test command. +initCtl equ $0003 ; DefProc - Initialize command. +dispCtl equ $0004 ; DefProc - Dispose command. +posCtl equ $0005 ; DefProc - Move indicator command. +thumbCtl equ $0006 ; DefProc - Compute drag parameters command. +dragCtl equ $0007 ; DefProc - Drag command. +autoTrack equ $0008 ; DefProc - Action command. +newValue equ $0009 ; DefProc - Set new value command. +setParams equ $000A ; DefProc - Set new parameters command. +moveCtl equ $000B ; DefProc - Move command. +recSize equ $000C ; DefProc - Return record size command. + +noHilite equ $0000 ; hiliteState - Param to HiliteControl +inactiveHilite equ $00FF ; hiliteState - Param to HiliteControl + +noPart equ $0000 ; PartCode - +simpleButton equ $0002 ; PartCode - +checkBox equ $0003 ; PartCode - +radioButton equ $0004 ; PartCode - +upArrow equ $0005 ; PartCode - +downArrow equ $0006 ; PartCode - +pageUp equ $0007 ; PartCode - +pageDown equ $0008 ; PartCode - +growBox equ $000A ; PartCode - +thumb equ $0081 ; PartCode - diff --git a/Library/E16.Desk.Macs.s b/Library/E16.Desk.Macs.s new file mode 100644 index 0000000..fdf8e9b --- /dev/null +++ b/Library/E16.Desk.Macs.s @@ -0,0 +1,25 @@ + +; File: E16.Desk +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +daNotFound equ $0510 ; Desk error - desk accessory not found +notSysWindow equ $0511 ; Desk error - not the system window + +eventAction equ $0001 ; NDA action code - +runAction equ $0002 ; NDA action code - +undoAction equ $0005 ; NDA action code - +cutAction equ $0006 ; NDA action code - +copyAction equ $0007 ; NDA action code - +pasteAction equ $0008 ; NDA action code - +clearAction equ $0009 ; NDA action code - +cursorAction equ $0003 ; NDAaction code - + +undo equ $0001 ; System Edit - edit type +cut equ $0002 ; System Edit - edit type +copy equ $0003 ; System Edit - edit type +paste equ $0004 ; System Edit - edit type +clear equ $0005 ; System Edit - edit type diff --git a/Library/E16.Dialog.Macs.s b/Library/E16.Dialog.Macs.s new file mode 100644 index 0000000..1bca00a --- /dev/null +++ b/Library/E16.Dialog.Macs.s @@ -0,0 +1,93 @@ + +; File: E16.Dialog +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +badItemType equ $150A ; Dialog error - +newItemFailed equ $150B ; Dialog error - +itemNotFound equ $150C ; Dialog error - +notModalDialog equ $150D ; Dialog error - + +oatBoundsRect equ $00 ; Rect - AlertTemplate - +oatAlertID equ $08 ; Word - AlertTemplate - +oatStage1 equ $0A ; Byte - AlertTemplate - +oatStage2 equ $0B ; Byte - AlertTemplate - +oatStage3 equ $0C ; Byte - AlertTemplate - +oatStage4 equ $0D ; Byte - AlertTemplate - +oatItemList equ $0E ; ItemTempPtr - AlertTemplate - Null termina +;ted array + +odtBoundsRect equ $00 ; Rect - DialogTemplate - +odtVisible equ $08 ; Boolean - DialogTemplate - +odtRefCon equ $0A ; Long - DialogTemplate - +odtItemList equ $0E ; ItemTempPtr - DialogTemplate - Null termin +;ated array + +oiconRect equ $00 ; Rect - IconRecord - +oiconImage equ $08 ; Byte - IconRecord - + +oitemID equ $00 ; Word - ItemTemplate - +oitemRect equ $02 ; Rect - ItemTemplate - +oitemType equ $0A ; Word - ItemTemplate - +oitemDescr equ $0C ; Pointer - ItemTemplate - +oitemValue equ $10 ; Word - ItemTemplate - +oitemFlag equ $12 ; Word - ItemTemplate - +oitemColor equ $14 ; CtlColorTablePtr - ItemTemplate - + +odefProcParm equ $00 ; Longint - UserCtlItemPB - +otitleParm equ $04 ; Pointer - UserCtlItemPB - +oparam2 equ $08 ; Word - UserCtlItemPB - +oparam1 equ $0A ; Word - UserCtlItemPB - + +getInitView equ $0001 ; Command - +getInitTotal equ $0002 ; Command - +getInitValue equ $0003 ; Command - +scrollLineUp equ $0004 ; Command - +scrollLineDown equ $0005 ; Command - +scrollPageUp equ $0006 ; Command - +scrollPageDown equ $0007 ; Command - +scrollThumb equ $0008 ; Command - + +buttonItem equ $000A ; Item Type - +checkItem equ $000B ; Item Type - +radioItem equ $000C ; Item Type - +scrollBarItem equ $000D ; Item Type - +userCtlItem equ $000E ; Item Type - +statText equ $000F ; Item Type - +longStatText equ $0010 ; Item Type - +editLine equ $0011 ; Item Type - +iconItem equ $0012 ; Item Type - +picItem equ $0013 ; Item Type - +userItem equ $0014 ; Item Type - +userCtlItem2 equ $0015 ; Item Type - +longStatText2 equ $0016 ; Item Type - +itemDisable equ $8000 ; Item Type - + +minItemType equ $000A ; Item Type Range - +maxItemType equ $0016 ; Item Type Range - + +ok equ $0001 ; ItemID - +cancel equ $0002 ; ItemID - + +inButton equ $0002 ; ModalDialog2 - Part code +inCheckBox equ $0003 ; ModalDialog2 - Part code +inRadioButton equ $0004 ; ModalDialog2 - Part code +inUpArrow equ $0005 ; ModalDialog2 - Part code +inDownArrow equ $0006 ; ModalDialog2 - Part code +inPageUp equ $0007 ; ModalDialog2 - Part code +inPageDown equ $0008 ; ModalDialog2 - Part code +inStatText equ $0009 ; ModalDialog2 - Part code +inGrow equ $000A ; ModalDialog2 - Part code +inEditLine equ $000B ; ModalDialog2 - Part code +inUserItem equ $000C ; ModalDialog2 - Part code +inLongStatText equ $000D ; ModalDialog2 - Part code +inIconItem equ $000E ; ModalDialog2 - Part code +inLongStatText2 equ $000F ; ModalDialog2 - +inThumb equ $0081 ; ModalDialog2 - Part code + +okDefault equ $0000 ; Stage Bit Vector - +cancelDefault equ $0040 ; Stage Bit Vector - +alertDrawn equ $0080 ; Stage Bit Vector - diff --git a/Library/E16.Event.Macs.s b/Library/E16.Event.Macs.s new file mode 100644 index 0000000..5de3505 --- /dev/null +++ b/Library/E16.Event.Macs.s @@ -0,0 +1,75 @@ + +; File: E16.Event +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +emDupStrtUpErr equ $0601 ; error - duplicate EMStartup Call +emResetErr equ $0602 ; error - can't reset error the Event Manag +;er +emNotActErr equ $0603 ; error - event manager not active +emBadEvtCodeErr equ $0604 ; error - illegal event code +emBadBttnNoErr equ $0605 ; error - illegal button number +emQSiz2LrgErr equ $0606 ; error - queue size too large +emNoMemQueueErr equ $0607 ; error - not enough memory for queue +emBadEvtQErr equ $0681 ; error - fatal sys error - event queue d +;amaged +emBadQHndlErr equ $0682 ; error - fatal sys error - queue handle +; damaged + +owhat equ $00 ; Word - EventRecord - event code +omessage equ $02 ; Long - EventRecord - event message +owhen equ $06 ; Long - EventRecord - ticks since startup +owhere equ $0A ; Point - EventRecord - mouse location +omodifiers equ $0E ; Word - EventRecord - modifier flags + +nullEvt equ $0000 ; Event Code - +mouseDownEvt equ $0001 ; Event Code - +mouseUpEvt equ $0002 ; Event Code - +keyDownEvt equ $0003 ; Event Code - +autoKeyEvt equ $0005 ; Event Code - +updateEvt equ $0006 ; Event Code - +activateEvt equ $0008 ; Event Code - +switchEvt equ $0009 ; Event Code - +deskAccEvt equ $000A ; Event Code - +driverEvt equ $000B ; Event Code - +app1Evt equ $000C ; Event Code - +app2Evt equ $000D ; Event Code - +app3Evt equ $000E ; Event Code - +app4Evt equ $000F ; Event Code - + +mDownMask equ $0002 ; Event Masks - +mUpMask equ $0004 ; Event Masks - +keyDownMask equ $0008 ; Event Masks - +autoKeyMask equ $0020 ; Event Masks - +updateMask equ $0040 ; Event Masks - +activeMask equ $0100 ; Event Masks - +switchMask equ $0200 ; Event Masks - +deskAccMask equ $0400 ; Event Masks - +driverMask equ $0800 ; Event Masks - +app1Mask equ $1000 ; Event Masks - +app2Mask equ $2000 ; Event Masks - +app3Mask equ $4000 ; Event Masks - +app4Mask equ $8000 ; Event Masks - +everyEvent equ $FFFF ; Event Masks - + +jcTickCount equ $00 ; Journal Code - TickCount call +jcGetMouse equ $01 ; Journal Code - GetMouse call +jcButton equ $02 ; Journal Code - Button call +jcEvent equ $04 ; Journal Code - GetNextEvent and EventAvail cal +;ls + +activeFlag equ $0001 ; Modifier Flags - set if window being acti +;vated +changeFlag equ $0002 ; Modifier Flags - set if active wind. chan +;ged state +btn1State equ $0040 ; Modifier Flags - set if button 1 up +btn0State equ $0080 ; Modifier Flags - set if button 0 up +appleKey equ $0100 ; Modifier Flags - set if Apple key down +shiftKey equ $0200 ; Modifier Flags - set if shift key down +capsLock equ $0400 ; Modifier Flags - set if caps lock key down +optionKey equ $0800 ; Modifier Flags - set if option key down +controlKey equ $1000 ; Modifier Flags - set if Control key down +keyPad equ $2000 ; Modifier Flags - set if keypress from key pad diff --git a/Library/E16.Font.Macs.s b/Library/E16.Font.Macs.s new file mode 100644 index 0000000..79f4ac1 --- /dev/null +++ b/Library/E16.Font.Macs.s @@ -0,0 +1,64 @@ + +; File: E16.Font +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +fmDupStartUpErr equ $1B01 ; Font error - duplicate FMStartUp cal +;l +fmResetErr equ $1B02 ; Font error - can't reset the Font Manager +fmNotActiveErr equ $1B03 ; Font error - Font Manager not active +fmFamNotFndErr equ $1B04 ; Font error - family not found +fmFontNtFndErr equ $1B05 ; Font error - font not found +fmFontMemErr equ $1B06 ; Font error - font not in memory +fmSysFontErr equ $1B07 ; Font error - system font cannot be purg +;eable +fmBadFamNumErr equ $1B08 ; Font error - illegal family number +fmBadSizeErr equ $1B09 ; Font error - illegal size +fmBadNameErr equ $1B0A ; Font error - illegal name length +fmMenuErr equ $1B0B ; Font error - fix font menu never called +fmScaleSizeErr equ $1B0C ; Font error - scaled size of font exee +;ds limits + +ofamNum equ $00 ; Word - FontID - +ofontStyle equ $02 ; Byte - FontID - +ofontSize equ $03 ; Byte - FontID - + +oresultID equ $00 ; FontID - FontStatRec - +oresultStats equ $04 ; Word - FontStatRec - + +newYork equ $0002 ; Family Number - +geneva equ $0003 ; Family Number - +monaco equ $0004 ; Family Number - +venice equ $0005 ; Family Number - +london equ $0006 ; Family Number - +athens equ $0007 ; Family Number - +sanFran equ $0008 ; Family Number - +toronto equ $0009 ; Family Number - +cairo equ $000B ; Family Number - +losAngeles equ $000C ; Family Number - +times equ $0014 ; Family Number - +helvetica equ $0015 ; Family Number - +courier equ $0016 ; Family Number - +symbol equ $0017 ; Family Number - +taliesin equ $0018 ; Family Number - +shaston equ $FFFE ; Family Number - + +baseOnlyBit equ $0020 ; FamSpecBits - +notBaseBit equ $0020 ; FamStatBits - +memOnlyBit equ $0001 ; FontSpecBits - +realOnlyBit equ $0002 ; FontSpecBits - +anyFamBit equ $0004 ; FontSpecBits - +anyStyleBit equ $0008 ; FontSpecBits - +anySizeBit equ $0010 ; FontSpecBits - +memBit equ $0001 ; FontStatBits - +unrealBit equ $0002 ; FontStatBits - +apFamBit equ $0004 ; FontStatBits - +apVarBit equ $0008 ; FontStatBits - +purgeBit equ $0010 ; FontStatBits - +notDiskBit equ $0020 ; FontStatBits - +notFoundBit equ $8000 ; FontStatBits - +dontScaleBit equ $0001 ; Scale Word - diff --git a/Library/E16.GsOs.Macs.s b/Library/E16.GsOs.Macs.s new file mode 100644 index 0000000..37690cd --- /dev/null +++ b/Library/E16.GsOs.Macs.s @@ -0,0 +1,405 @@ +* File: E16.GSOS +* +* These equates can be used with the GSOS.MACS in the MACRO.LIBRARY +* directory. You can also copy the data structures at the end of this +* file directly into your own source files. +* +*----------------------------------------------- +* File access - CreateRec, OpenRec access and requestAccess fields + +readEnable = $0001 ;read enable bit: +writeEnable = $0002 ;write enable bit: +backupNeeded = $0020 ;backup needed bit:must be '0' in requestAccess field ) +renameEnable = $0040 ;rename enable bit: +destroyEnable = $0080 ;read enable bit: + +* base - > setMark = ... + +startPlus = $0000 ;base - setMark = displacement +eofMinus = $0001 ;base - setMark = eof - displacement +markPlus = $0002 ;base - setMark = mark + displacement +markMinus = $0003 ;base - setMark = mark - displacement + +* cachePriority + +noCache = $0000 ;cachePriority - do not cache blocks invloved in this read +cache = $0001 ;cachePriority - cache blocks invloved in this read if possible + +*----------------------------------------------- +* GS/OS Error codes + +badSystemCall = $0001 ;bad system call number +invalidPcount = $0004 ;invalid parameter count +gsosActive = $0007 ;GS/OS already active +devNotFound = $0010 ;device not found +invalidDevNum = $0011 ;invalid device number +drvrBadReq = $0020 ;bad request or command +drvrBadCode = $0021 ;bad control or status code +drvrBadParm = $0022 ;bad call parameter +drvrNotOpen = $0023 ;character device not open +drvrPriorOpen = $0024 ;character device already open +irqTableFull = $0025 ;interrupt table full +drvrNoResrc = $0026 ;resources not available +drvrIOError = $0027 ;I/O error +drvrNoDevice = $0028 ;device not connected +drvrBusy = $0029 ;call aborted, driver is busy +drvrWrtProt = $002B ;device is write protected +drvrBadCount = $002C ;invalid byte count +drvrBadBlock = $002D ;invalid block address +drvrDiskSwitch = $002E ;disk has been switched +drvrOffLine = $002F ;device off line/ no media present +badPathSyntax = $0040 ;invalid pathname syntax +invalidRefNum = $0043 ;invalid reference number +pathNotFound = $0044 ;subdirectory does not exist +volNotFound = $0045 ;volume not found +fileNotFound = $0046 ;file not found +dupPathname = $0047 ;create or rename with existing name +volumeFull = $0048 ;volume full error +volDirFull = $0049 ;volume directory full +badFileFormat = $004A ;version error (incompatible file format) +badStoreType = $004B ;unsupported (or incorrect) storage type +eofEncountered = $004C ;end-of-file encountered +outOfRange = $004D ;position out of range +invalidAccess = $004E ;access not allowed +buffTooSmall = $004F ;buffer too small +fileBusy = $0050 ;file is already open +dirError = $0051 ;directory error +unknownVol = $0052 ;unknown volume type +paramRangeErr = $0053 ;parameter out of range +outOfMem = $0054 ;out of memory +dupVolume = $0057 ;duplicate volume name +notBlockDev = $0058 ;not a block device +invalidLevel = $0059 ;specifield level outside legal range +damagedBitMap = $005A ;block number too large +badPathNames = $005B ;invalid pathnames for ChangePath +notSystemFile = $005C ;not an executable file +osUnsupported = $005D ;Operating System not supported +stackOverflow = $005F ;too many applications on stack +dataUnavail = $0060 ;Data unavailable +endOfDir = $0061 ;end of directory has been reached +invalidClass = $0062 ;invalid FST call class +resNotFound = $0063 ;file does not contain required resource + +*----------------------------------------------- +* FileSysID's + +proDOS = $0001 ;ProDOS/SOS +dos33 = $0002 ;DOS 3.3 +dos32 = $0003 ;DOS 3.2 +dos31 = $0003 ;DOS 3.1 +appleIIPascal = $0004 ;Apple II Pascal +mfs = $0005 ;Macintosh (flat file system) +hfs = $0006 ;Macintosh (hierarchical file system) +lisa = $0007 ;Lisa file system +appleCPM = $0008 ;Apple CP/M +charFST = $0009 ;Character FST +msDOS = $000A ;MS/DOS +highSierra = $000B ;High Sierra + +* fileSysID (NEW FOR GSOS 5.0) + +ProDOSFSID = $01 ;ProDOS/SOS +dos33FSID = $02 ;DOS 3.3 +dos32FSID = $03 ;DOS 3.2 +dos31FSID = $03 ;DOS 3.1 +appleIIPascalFSID = $04 ;Apple II Pascal +mfsFSID = $05 ;Macintosh (flat file system) +hfsFSID = $06 ;Macintosh (hierarchical file system) +lisaFSID = $07 ;Lisa file system +appleCPMFSID = $08 ;Apple CP/M +charFSTFSID = $09 ;Character FST +msDOSFSID = $0A ;MS/DOS +highSierraFSID = $0B ;High Sierra +ISO9660FSID = $0C ;ISO 9660 +AppleShare = $0D ;AppleShare + +* FSTInfo.attributes + +characterFST = $4000 ;character FST +ucFST = $8000 ;SCM should upper case pathnames before +; passing them to the FST +* QuitRec.flags + +onStack = $8000 ;place state information about quitting +; program on the quit return stack +restartable = $4000 ;the quitting program is capable of being +; restarted from its dormant memory +* StorageType + +seedling = $0001 ;standard file with seedling structure +standardFile = $01 ;standard file type (no resource fork) +sapling = $0002 ;standard file with sapling structure +tree = $0003 ;standard file with tree structure +pascalRegion = $0004 ;UCSD Pascal region on a partitioned disk +extendedFile = $0005 ;extended file type (with resource fork) +directoryFile = $000D ;volume directory or subdirectory file + +* version + +minorRelNum = $00FF ;version - minor release number +majorRelNum = $7F00 ;version - major release number +finalRel = $8000 ;version - final release + +isFileExtended = $8000 + +*----------------------------------------------- +* GSOS Call ID numbers, as is for class '0' +* +* 'OR' these numbers with $2000 for class '1' +* See the macros iGSOS and sGSOS. +* +* NOTE: The v4.0 and v5.0 calls are identical with +* the exception that the APW v5.0 macros have +* 'GS' appended to the end of each call name. + +_Create = $0001 +_Destroy = $0002 +_OSShutdown = $2003 ;class '1' only +_ChangePath = $0004 +_SetFileInfo = $0005 +_GetFileInfo = $0006 +_Volume = $0008 +_SetPrefix = $0009 +_GetPrefix = $000A +_ClearBackupBit = $000B +_SetSysPrefs = $200C ;class '1' only +_Null = $200D ;class '1' only +_ExpandPath = $200E ;class '1' only +_GetSysPrefs = $200F ;class '1' only +_Open = $0010 +_Newline = $0011 +_Read = $0012 +_Write = $0013 +_Close = $0014 +_Flush = $0015 +_SetMark = $0016 +_GetMark = $0017 +_SetEOF = $0018 +_GetEOF = $0019 +_SetLevel = $001A +_GetLevel = $001B +_GetDirEntry = $001C +_BeginSession = $201D ;class '1' only +_EndSession = $201E ;class '1' only +_SessionStatus = $201F ;class '1' only +_GetDevNumber = $0020 +_GetLastDev = $0021 +_ReadBlock = $0022 ;class '0' only +_WriteBlock = $0023 ;class '0' only +_Format = $0024 +_EraseDisk = $0025 +_ResetCache = $2026 ;class '1' only +_GetName = $0027 +_GetBootVol = $0028 +_Quit = $0029 +_GetVersion = $002A +_GetFSTInfo = $202B ;class '1' only +_DInfo = $002C +_DStatus = $202D ;class '1' only +_DControl = $202E ;class '1' only +_DRead = $202F ;class '1' only +_DWrite = $2030 ;class '1' only +_AllocInterrupt = $0031 ;P16 call +_BindInt = $2031 ;GS/OS call +_DeallocInterrupt = $0032 ;P16 call +_UnbindInt = $2032 ;GS/OS call +_AddNotifyProc = $2034 ;class '1' only +_DelNotifyProc = $2035 ;class '1' only +_DRename = $2036 ;class '1' only +_GetStdRefNum = $2037 ;class '1' only +_GetRefNum = $2038 ;class '1' only +_GetRefInfo = $2039 ;class '1' only + + +*=============================================== +* Class 1 parameter tables. +* (partial listing for reference only.) +* (also refer to the class_1 help file) + + DUM 0 ; Currently set so the following doesn't +; generate any code if you include this +; entire file in your source file with +; a PUT or USE. + +ChangePathRec DA 0 ;pCount + ADRL 0 ;pathname + ADRL 0 ;newPathname + +CreateRec DA 0 ;pCount + ADRL 0 ;pathname + DA 0 ;access + DA 0 ;fileType + ADRL 0 ;auxType + DA 0 ;storageType + ADRL 0 ;eof + ADRL 0 ;resourceEOF + +DAccessRec DA 0 ;pCount + DA 0 ;devNum + DA 0 ;code + ADRL 0 ;list + ADRL 0 ;requestCount + ADRL 0 ;transferCount + +DevNumRec DA 0 ;pCount + ADRL 0 ;devName + DA 0 ;devNum + +DInfoRec DA 0 ;pCount + DA 0 ;devNum + ADRL 0 ;devName + DA 0 ;characteristics + ADRL 0 ;totalBlocks + DA 0 ;slotNum + DA 0 ;unitNum + DA 0 ;version + DA 0 ;deviceID + DA 0 ;headLink + DA 0 ;forwardLink + +DIORec DA 0 ;pCount + DA 0 ;devNum + ADRL 0 ;buffer + ADRL 0 ;requestCount + ADRL 0 ;startingBlock + DA 0 ;blockSize + ADRL 0 ;transferCount + +DirEntryRec DA 0 ;pCount + DA 0 ;refNum + DA 0 ;flags + DA 0 ;base + DA 0 ;displacement + ADRL 0 ;name + DA 0 ;entryNum + DA 0 ;fileType + ADRL 0 ;eof + ADRL 0 ;blockCount + DS 8 ;createDateTime + DS 8 ;modDateTime + DA 0 ;access + ADRL 0 ;auxType + DA 0 ;fileSysID + ADRL 0 ;optionList + ADRL 0 ;resourceEof + ADRL 0 ;resourceBlocks + +ExpandPathRec DA 0 ;pCount + ADRL 0 ;inputPath + ADRL 0 ;outputPath + DA 0 ;flags + +FileInfoRec DA 0 ;pCount + ADRL 0 ;pathname + DA 0 ;access + DA 0 ;fileType + ADRL 0 ;auxType + DA 0 ;null/storageType + DS 8 ;createDateTime + DS 8 ;modDateTime + ADRL 0 ;optionList + ADRL 0 ;null/eof + ADRL 0 ;null/blocksUsed + ADRL 0 ;null/resourceEOF + ADRL 0 ;null/resourceBlocks + +FormatRec DA 0 ;pCount + ADRL 0 ;devName + ADRL 0 ;volName + DA 0 ;fileSysID + +FSTInfoRec DA 0 ;pCount + DA 0 ;fstNum + DA 0 ;fileSysId + ADRL 0 ;fstName + DA 0 ;version + DA 0 ;attributes + DA 0 ;blockSize + ADRL 0 ;maxVolSize + ADRL 0 ;maxFileSize + +InterruptRec DA 0 ;pCount + DA 0 ;intNum + DA 0 ;vrn + ADRL 0 ;intCode + +IORec DA 0 ;pCount + DA 0 ;refNum + ADRL 0 ;dataBuffer + ADRL 0 ;requestCount + ADRL 0 ;transferCount + DA 0 ;cachePriority + +LevelRec DA 0 ;pCount + DA 0 ;level + +NameRec DA 0 ;pCount + ADRL 0 ;pathname + +NewlineRec DA 0 ;pCount + DA 0 ;refNum + DA 0 ;enableMask + DA 0 ;numChars + ADRL 0 ;newlineTable + +OpenRec DA 0 ;pCount + DA 0 ;refNum + ADRL 0 ;pathname + DA 0 ;requestAccess + DA 0 ;resourceNumber + DA 0 ;access + DA 0 ;fileType + ADRL 0 ;auxType + DA 0 ;storageType + DS 8 ;createDateTime + DS 8 ;modDateTime + ADRL 0 ;optionList + ADRL 0 ;eof + ADRL 0 ;blocksUsed + ADRL 0 ;resourceEOF + ADRL 0 ;resourceBlocks + +PositionRec DA 0 ;pCount + DA 0 ;refNum + ADRL 0 ;position + +PrefixRec DA 0 ;pCount + DA 0 ;prefixNum + ADRL 0 ;prefix + +QuitRec DA 0 ;pCount + ADRL 0 ;pathname + DA 0 ;flags + +RefNumRec DA 0 ;pCount + DA 0 ;refNum + +SetPositionRec DA 0 ;pCount + DA 0 ;refNum + DA 0 ;base + ADRL 0 ;displacement + +ShutdownRec DA 0 ;pCount + DA 0 ;flag + +TimeRec DB 0 ;second + DB 0 ;minute + DB 0 ;hour + DB 0 ;year + DB 0 ;day + DB 0 ;month + DB 0 ;extra + DB 0 ;weekDay + +VersionRec DA 0 ;pCount + DA 0 ;version + +VolumeRec DA 0 ;pCount + ADRL 0 ;devName + ADRL 0 ;volName + ADRL 0 ;totalBlocks + ADRL 0 ;freeBlocks + DA 0 ;fileSysID + DA 0 ;blockSize + + DEND ; End of dummy section... diff --git a/Library/E16.Int.Macs.s b/Library/E16.Int.Macs.s new file mode 100644 index 0000000..da13811 --- /dev/null +++ b/Library/E16.Int.Macs.s @@ -0,0 +1,34 @@ + +; File: E16.IntMath +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +imBadInptParam equ $0B01 ; IntMath error - bad input parameter +imIllegalChar equ $0B02 ; IntMath error - Illegal character in s +;tring +imOverflow equ $0B03 ; IntMath error - integer or long integer o +;verflow +imStrOverflow equ $0B04 ; IntMath error - string overflow + +minLongint equ $80000000 ; Limit - minimum negative signed long +;integer +minFrac equ $80000000 ; Limit - pinned value for negative Frac o +;verflow +minFixed equ $80000000 ; Limit - pinned value for negative Fixed +; overflow +minInt equ $8000 ; Limit - minimum negative signed integer +maxInt equ $7FFF ; Limit - maximum positive signed integer +maxUInt equ $FFFF ; Limit - maximum unsigned integer +maxLongint equ $7FFFFFFF ; Limit - maximum positive signed Longi +;nt +maxFrac equ $7FFFFFFF ; Limit - pinned value for positive Frac o +;verflow +maxFixed equ $7FFFFFFF ; Limit - pinned value for positive Fixed +; overflow +maxULong equ $FFFFFFFF ; Limit - maximum unsigned Long + +unsignedFlag equ $0000 ; SignedFlag - +signedFlag equ $0001 ; SignedFlag - diff --git a/Library/E16.Line.Macs.s b/Library/E16.Line.Macs.s new file mode 100644 index 0000000..483f093 --- /dev/null +++ b/Library/E16.Line.Macs.s @@ -0,0 +1,36 @@ + +; File: E16.LineEdit +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +leDupStrtUpErr equ $1401 ; LineEdit error - duplicate LEStartup +;call +leResetErr equ $1402 ; LineEdit error - can't reset Line Edit +leNotActiveErr equ $1403 ; LineEdit error - Line Edit not active +leScrapErr equ $1404 ; LineEdit error - desk scrap too big to co +;py + +oleLineHandle equ $00 ; Handle - LERec - +oleLength equ $04 ; Integer - LERec - +oleMaxLength equ $06 ; Integer - LERec - +oleDestRect equ $08 ; Rect - LERec - +oleViewRect equ $10 ; Rect - LERec - +olePort equ $18 ; GrafPortPtr - LERec - +oleLineHite equ $1C ; Integer - LERec - +oleBaseHite equ $1E ; Integer - LERec - +oleSelStart equ $20 ; Integer - LERec - +oleSelEnd equ $22 ; Integer - LERec - +oleActFlg equ $24 ; Word - LERec - +oleCarAct equ $26 ; Word - LERec - +oleCarOn equ $28 ; Word - LERec - +oleCarTime equ $2A ; Longint - LERec - +oleHiliteHook equ $2E ; Pointer - LERec - +oleCaretHook equ $32 ; Pointer - LERec - + +leJustLeft equ $0000 ; Justification - +leJustCenter equ $0001 ; Justification - +leJustFill equ $0002 ; Justification - +leJustRight equ $FFFF ; Justification - diff --git a/Library/E16.List.Macs.s b/Library/E16.List.Macs.s new file mode 100644 index 0000000..c724701 --- /dev/null +++ b/Library/E16.List.Macs.s @@ -0,0 +1,59 @@ + +; File: E16.List +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +omemPtr equ $0 ; Pointer - MemRec - Pointer to string, or custom +omemFlag equ $4 ; Byte - MemRec - Bit Flag + +olistFrameClr equ $00 ; Word - LColorTable - Frame color +olistNorTextClr equ $2 ; Word - LColorTable - Unhighlighted text +; color +olistSelTextClr equ $4 ; Word - LColorTable - Highlighted text c +;olor +olistNorBackClr equ $6 ; Word - LColorTable - Unhighlighted back +;ground color +olistSelBackClr equ $8 ; Word - LColorTable - Highlighted backgr +;aound color + +; Front of ListCtlRec matches CtlRec +octlMemDraw equ $28 ; Pointer - ListCtlRec - Address of routine +;to draw mem +octlMemHeight equ $2C ; Word - ListCtlRec - Member's Height in P +;ixels +octlMemSize equ $2E ; Word - ListCtlRec - Bytes in member record +octlList equ $30 ; MemRecPtr - ListCtlRec - Adress of first memb +;er record in array +octlListBar equ $34 ; CtlRecHndl - ListCtlRec - Handle of list c +;ontrlo's scroll bar control + +olistRect equ $0 ; Rect - ListRec - Enclosing Rectangle +olistSize equ $8 ; Word - ListRec - Number of List Members +olistView equ $A ; Word - ListRec - Max Viewable members +olistType equ $C ; Word - ListRec - Bit Flag +olistStart equ $E ; Word - ListRec - First member in view +olistCtl equ $10 ; CtlRecHndl - ListRec - List control's handle +olistDraw equ $14 ; Pointer - ListRec - Adress of Custum drawing +; routine +olistMemHeight equ $18 ; Word - ListRec - Height of list members +olistMemSize equ $1A ; Word - ListRec - Size of Member Records +olistPointer equ $1C ; MemRecPtr - ListRec - Pointer to first el +;ement in MemRec[] +olistRefCon equ $20 ; Long - ListRec - becomes Control's refCon +olistScrollClr equ $24 ; BarColorsPtr - ListRec - Color table fo +;r list's scroll bar + +cString equ $0001 ; ListType bit mask - null terminated string t +;ype +LIST_STRG equ $0001 ; ListType bit mask - null terminated string +; type +selectOnlyOne equ $0002 ; ListType bit mask - only one selection +; allowed +LIST_SELECT equ $0002 ; ListType bit mask - single selection onl +;y + +memDisabled equ $40 ; memFlag - Sets member flag to disabled +memSelected equ $80 ; memFlag - Sets member flag to selected diff --git a/Library/E16.Load.Macs.s b/Library/E16.Load.Macs.s new file mode 100644 index 0000000..25bcc66 --- /dev/null +++ b/Library/E16.Load.Macs.s @@ -0,0 +1,31 @@ + +; File: E16.Loader +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +idNotFound equ $1101 ; Loader error - segment/application/entry +;not found +idNotLoadFile equ $1104 ; Loader error - file is not a load file +idBusyErr equ $1105 ; Loader error - system loader is busy +idFilVersErr equ $1107 ; Loader error - file version error +idUserIDErr equ $1108 ; Loader error - user ID error +idSequenceErr equ $1109 ; Loader error - segnum out of sequence +idBadRecordErr equ $110A ; Loader error - illegal load record fo +;und +idForeignSegErr equ $110B ; Loader error - segment is foreign + +ouserID equ $00 ; Word - InitialLoadOutputRec/RestartRec - +ostartAddr equ $02 ; Pointer - InitialLoadOutputRec/RestartRec - +odPageAddr equ $06 ; Word - InitialLoadOutputRec/RestartRec - +obuffSize equ $08 ; Word - InitialLoadOutputRec/RestartRec - + +osegAddr equ $00 ; Pointer - LoadSegNameOut - +ofileNum equ $04 ; Word - LoadSegNameOut - +osegNum equ $06 ; Word - LoadSegNameOut - + +ousUserID equ $00 ; Word - UnloadSegOutRec - +ousFileNum equ $02 ; Word - UnloadSegOutRec - +ousSegNum equ $04 ; Word - UnloadSegOutRec - diff --git a/Library/E16.Locator.Macs.s b/Library/E16.Locator.Macs.s new file mode 100644 index 0000000..62c98dd --- /dev/null +++ b/Library/E16.Locator.Macs.s @@ -0,0 +1,39 @@ +* This file is converted from the original source designed for +* APW by the Merlin-converter program, written by Brian Fox. +* +* Converter version 7.11 +* +* Additional editing will be necessary, in addition to running +* the Merlin 16 MACGEN utility. +* + XC + XC + MX %00 ; Full 65816 mode for Merlin +************************************************************** + +; File: E16.Locator +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +toolNotFoundErr equ $0001 ; Locator error - +funcNotFoundErr equ $0002 ; Locator error - +toolVersionErr equ $0010 ; Locator error - +sysStrtMtErr equ $0100 ; Locator error - can't mount system star +;tup volume +messNotFoundErr equ $0111 ; Locator error - + +addMessage equ $0001 ; Message Center - +getMessage equ $0002 ; Message Center - +deleteMessage equ $0003 ; Message Center - + +fileInfoType equ $0001 ; MessageCenter - Message type parameter + +mvReturn equ $0001 ; TLMountVolume - like ok for dialogs +mvEscape equ $0002 ; TLMountVolume - like cancel for dialogs + +sysTool equ $0000 ; Tool Set Spec - +userTool equ $8000 ; Tool Set Spec - + diff --git a/Library/E16.Mem.Macs.s b/Library/E16.Mem.Macs.s new file mode 100644 index 0000000..e55dc70 --- /dev/null +++ b/Library/E16.Mem.Macs.s @@ -0,0 +1,39 @@ + +; File: E16.Memory +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +memErr equ $0201 ; error - unable to allocate block +emptyErr equ $0202 ; error - illegal operation, empty handle +notEmptyErr equ $0203 ; error - an empty handle was expected for +; this operation +lockErr equ $0204 ; error - illegal operation on a locked block +purgeErr equ $0205 ; error - attempt to purge an unpurgable bloc +;k +handleErr equ $0206 ; error - an invalid handle was given +idErr equ $0207 ; error - an invalid owner ID was given +attrErr equ $0208 ; error - operation illegal on block with give +;n attributes + +attrNoPurge equ $0000 ; Handle Attribute Bits - Not purgeable +attrBank equ $0001 ; Handle Attribute Bits - fixed bank +attrAddr equ $0002 ; Handle Attribute Bits - fixed address +attrPage equ $0004 ; Handle Attribute Bits - page aligned +attrNoSpec equ $0008 ; Handle Attribute Bits - may not use speci +;al memory +attrNoCross equ $0010 ; Handle Attribute Bits - may not cross ba +;nks +attrPurge1 equ $0100 ; Handle Attribute Bits - Purge level 1 +attrPurge2 equ $0200 ; Handle Attribute Bits - Purge level 2 +attrPurge3 equ $0300 ; Handle Attribute Bits - Purge level 3 +attrPurge equ $0300 ; Handle Attribute Bits - test or set both p +;urge bits +attrHandle equ $1000 ; Handle Attribute Bits - block of master p +;ointers +attrSystem equ $2000 ; Handle Attribute Bits - system handle +attrFixed equ $4000 ; Handle Attribute Bits - not movable +attrLocked equ $8000 ; Handle Attribute Bits - locked diff --git a/Library/E16.Menu.Macs.s b/Library/E16.Menu.Macs.s new file mode 100644 index 0000000..1c17adb --- /dev/null +++ b/Library/E16.Menu.Macs.s @@ -0,0 +1,45 @@ + +; File: E16.Menu +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +omenuID equ $00 ; Word - MenuRec - Menu's ID number. +omenuWidth equ $02 ; Word - MenuRec - Width of menu. +omenuHeight equ $04 ; Word - MenuRec - Height of menu. +omenuProc equ $06 ; Pointer - MenuRec - Menu's definition proced +;ure. +omenuFlag equ $0A ; Byte - MenuRec - Bit flags. +omenuRes equ $0B ; Byte - MenuRec - +ofirstItem equ $0C ; Byte - MenuRec - +onumOfItems equ $0D ; Byte - MenuRec - +otitleWidth equ $0E ; Word - MenuRec - Width of menu's title. +otitleName equ $10 ; Pointer - MenuRec - Menu's title. + +mDrawMsg equ $0000 ; MenuDefProcCodes - +mChooseMsg equ $0001 ; MenuDefProcCodes - +mSizeMsg equ $0002 ; MenuDefProcCodes - +mDrawTitle equ $0003 ; MenuDefProcCodes - +mDrawMItem equ $0004 ; MenuDefProcCodes - +mGetMItemID equ $0005 ; MenuDefProcCodes - + +mInvis equ $0004 ; MenuFlag - +mCustom equ $0010 ; MenuFlag - +mXor equ $0020 ; MenuFlag - +mSelected equ $0040 ; MenuFlag - +mDisabled equ $0080 ; MenuFlag - + +customMenu equ $0010 ; MenuFlagMasks - +xorMItemHilite equ $0020 ; MenuFlagMasks - +xorTitleHilite equ $0020 ; MenuFlagMasks - +underMItem equ $0040 ; MenuFlagMasks - +disableMenu equ $0080 ; MenuFlagMasks - +enableMenu equ $FF7F ; MenuFlagMasks - +noUnderMItem equ $FFBF ; MenuFlagMasks - +colorMItemHilite equ $FFDF ; MenuFlagMasks - +colorTitleHilite equ $FFDF ; MenuFlagMasks - +colorReplace equ $FFDF ; MenuFlagMasks - +standardMenu equ $FFEF ; MenuFlagMasks - diff --git a/Library/E16.Misc.Macs.s b/Library/E16.Misc.Macs.s new file mode 100644 index 0000000..10cbed6 --- /dev/null +++ b/Library/E16.Misc.Macs.s @@ -0,0 +1,309 @@ + +; File: E16.MiscTool +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +badInputErr equ $0301 ; MiscTool error - bad input parameter +noDevParamErr equ $0302 ; MiscTool error - no device for input p +;arameter +taskInstlErr equ $0303 ; MiscTool error - task already installed +; error +noSigTaskErr equ $0304 ; MiscTool error - no signature in task h +;eader +queueDmgdErr equ $0305 ; MiscTool error - queue has been damaged +; error +taskNtFdErr equ $0306 ; MiscTool error - task was not found erro +;r +firmTaskErr equ $0307 ; MiscTool error - firmware task was unsuc +;cessful +hbQueueBadErr equ $0308 ; MiscTool error - heartbeat queue damag +;ed +unCnctdDevErr equ $0309 ; MT error - attempted to dispatch to un +;connected device +idTagNtAvlErr equ $030B ; MiscTool error - ID tag not available +pdosUnClmdIntErr equ $0001 ;MT- error - ProDOS unclaimed interru +;pt error +divByZeroErr equ $0004 ; MiscTool error - divide by zero error +pdosVCBErr equ $000A ; MiscTool error - ProDOS VCB unusable +pdosFCBErr equ $000B ; MiscTool error - ProDOS FCB unusable +pdosBlk0Err equ $000C ; MT error - ProDOS block zero allocated i +;llegally +pdosIntShdwErr equ $000D ; MT error - ProDOS interrupt w/ shadow +;ing off +segLoader1Err equ $0015 ; MiscTool error - segment loader error +sPackage0Err equ $0017 ; MiscTool error - can't load a package +package1Err equ $0018 ; MiscTool error - can't load a package +package2Err equ $0019 ; MiscTool error - can't load a package +package3Err equ $001A ; MiscTool error - can't load a package +package4Err equ $001B ; MiscTool error - can't load a package +package5Err equ $001C ; MiscTool error - can't load a package +package6Err equ $001D ; MiscTool error - can't load a package +package7Err equ $001E ; MiscTool error - can't load a package +package8Err equ $0020 ; MiscTool error - can't load a package +package9Err equ $0021 ; MiscTool error - can't load a package +package10Err equ $0022 ; MiscTool error - can't load a package +package11Err equ $0023 ; MiscTool error - can't load a package +package12Err equ $0024 ; MiscTool error - can't load a package +outOfMemErr equ $0025 ; MiscTool error - out of memory error +segLoader2Err equ $0026 ; MiscTool error - segment loader error +fMapTrshdErr equ $0027 ; MiscTool error - file map trashed +stkOvrFlwErr equ $0028 ; MiscTool error - stack overflow error +psInstDiskErr equ $0030 ; error - Please Insert Disk (file manag +;er alert) +memMgr1Err equ $0032 ; MiscTool error - memory manager error +memMgr2Err equ $0033 ; MiscTool error - memory manager error +memMgr3Err equ $0034 ; MiscTool error - memory manager error +memMgr4Err equ $0035 ; MiscTool error - memory manager error +memMgr5Err equ $0036 ; MiscTool error - memory manager error +memMgr6Err equ $0037 ; MiscTool error - memory manager error +memMgr7Err equ $0038 ; MiscTool error - memory manager error +memMgr8Err equ $0039 ; MiscTool error - memory manager error +memMgr9Err equ $003A ; MiscTool error - memory manager error +memMgr10Err equ $003B ; MiscTool error - memory manager error +memMgr11Err equ $003C ; MiscTool error - memory manager error +memMgr12Err equ $003D ; MiscTool error - memory manager error +memMgr13Err equ $003E ; MiscTool error - memory manager error +memMgr14Err equ $003F ; MiscTool error - memory manager error +memMgr15Err equ $0040 ; MiscTool error - memory manager error +memMgr16Err equ $0041 ; MiscTool error - memory manager error +memMgr17Err equ $0042 ; MiscTool error - memory manager error +memMgr18Err equ $0043 ; MiscTool error - memory manager error +memMgr19Err equ $0044 ; MiscTool error - memory manager error +memMgr20Err equ $0045 ; MiscTool error - memory manager error +memMgr21Err equ $0046 ; MiscTool error - memory manager error +memMgr22Err equ $0047 ; MiscTool error - memory manager error +memMgr23Err equ $0048 ; MiscTool error - memory manager error +memMgr24Err equ $0049 ; MiscTool error - memory manager error +memMgr25Err equ $004A ; MiscTool error - memory manager error +memMgr26Err equ $004B ; MiscTool error - memory manager error +memMgr27Err equ $004C ; MiscTool error - memory manager error +memMgr28Err equ $004D ; MiscTool error - memory manager error +memMgr29Err equ $004E ; MiscTool error - memory manager error +memMgr30Err equ $004F ; MiscTool error - memory manager error +memMgr31Err equ $0050 ; MiscTool error - memory manager error +memMgr32Err equ $0051 ; MiscTool error - memory manager error +memMgr33Err equ $0052 ; MiscTool error - memory manager error +memMgr34Err equ $0053 ; MiscTool error - memory manager error + +stupVolMntErr equ $0100 ; can't mount system start up vol. + +osecond equ $00 ; byte - TimeRec +ominute equ $01 ; byte - TimeRec +ohour equ $02 ; byte - TimeRec +oyear equ $03 ; byte - TimeRec +oday equ $04 ; byte - TimeRec +omonth equ $05 ; byte - TimeRec +oextra equ $06 ; byte - TimeRec +oweekDay equ $07 ; byte - TimeRec + +omouseMode equ $00 ; byte - MouseRec +omouseStatus equ $01 ; byte - MouseRec +oyPos equ $02 ; word - MouseRec +oxPos equ $04 ; word - MouseRec + +oyMaxClamp equ $00 ; word - ClampRec +oyMinClamp equ $02 ; word - ClampRec +oxMaxClamp equ $04 ; word - ClampRec +oxMinClamp equ $06 ; word - ClampRec + +oyRegExit equ $00 ; word - FWRec +oxRegExit equ $02 ; word - FWRec +oaRegExit equ $04 ; word - FWRec +ostatus equ $06 ; word - FWRec + +p1PrntModem equ $0000 ; Battery Ram Parameter Ref Number - +p1LineLnth equ $0001 ; Battery Ram Parameter Ref Number - +p1DelLine equ $0002 ; Battery Ram Parameter Ref Number - +p1AddLine equ $0003 ; Battery Ram Parameter Ref Number - +p1Echo equ $0004 ; Battery Ram Parameter Ref Number - +p1Buffer equ $0005 ; Battery Ram Parameter Ref Number - +p1Baud equ $0006 ; Battery Ram Parameter Ref Number - +p1DtStpBits equ $0007 ; Battery Ram Parameter Ref Number - +p1Parity equ $0008 ; Battery Ram Parameter Ref Number - +p1DCDHndShk equ $0009 ; Battery Ram Parameter Ref Number - +p1DSRHndShk equ $000A ; Battery Ram Parameter Ref Number - +p1XnfHndShk equ $000B ; Battery Ram Parameter Ref Number - +p2PrntModem equ $000C ; Battery Ram Parameter Ref Number - +p2LineLnth equ $000D ; Battery Ram Parameter Ref Number - +p2DelLine equ $000E ; Battery Ram Parameter Ref Number - +p2AddLine equ $000F ; Battery Ram Parameter Ref Number - +p2Echo equ $0010 ; Battery Ram Parameter Ref Number - +p2Buffer equ $0011 ; Battery Ram Parameter Ref Number - +p2Baud equ $0012 ; Battery Ram Parameter Ref Number - +p2DtStpBits equ $0013 ; Battery Ram Parameter Ref Number - +p2Parity equ $0014 ; Battery Ram Parameter Ref Number - +p2DCDHndShk equ $0015 ; Battery Ram Parameter Ref Number - +p2DSRHndShk equ $0016 ; Battery Ram Parameter Ref Number - +p2XnfHndShk equ $0017 ; Battery Ram Parameter Ref Number - +dspColMono equ $0018 ; Battery Ram Parameter Ref Number - +dsp40or80 equ $0019 ; Battery Ram Parameter Ref Number - +dspTxtColor equ $001A ; Battery Ram Parameter Ref Number - +dspBckColor equ $001B ; Battery Ram Parameter Ref Number - +dspBrdColor equ $001C ; Battery Ram Parameter Ref Number - +hrtz50or60 equ $001D ; Battery Ram Parameter Ref Number - +userVolume equ $001E ; Battery Ram Parameter Ref Number - +bellVolume equ $001F ; Battery Ram Parameter Ref Number - +sysSpeed equ $0020 ; Battery Ram Parameter Ref Number - +slt1intExt equ $0021 ; Battery Ram Parameter Ref Number - +slt2intExt equ $0022 ; Battery Ram Parameter Ref Number - +slt3intExt equ $0023 ; Battery Ram Parameter Ref Number - +slt4intExt equ $0024 ; Battery Ram Parameter Ref Number - +slt5intExt equ $0025 ; Battery Ram Parameter Ref Number - +slt6intExt equ $0026 ; Battery Ram Parameter Ref Number - +slt7intExt equ $0027 ; Battery Ram Parameter Ref Number - +startupSlt equ $0028 ; Battery Ram Parameter Ref Number - +txtDspLang equ $0029 ; Battery Ram Parameter Ref Number - +kybdLang equ $002A ; Battery Ram Parameter Ref Number - +kyBdBuffer equ $002B ; Battery Ram Parameter Ref Number - +kyBdRepSpd equ $002C ; Battery Ram Parameter Ref Number - +kyBdRepDel equ $002D ; Battery Ram Parameter Ref Number - +dblClkTime equ $002E ; Battery Ram Parameter Ref Number - +flashRate equ $002F ; Battery Ram Parameter Ref Number - +shftCpsLCas equ $0030 ; Battery Ram Parameter Ref Number - +fstSpDelKey equ $0031 ; Battery Ram Parameter Ref Number - +dualSpeed equ $0032 ; Battery Ram Parameter Ref Number - +hiMouseRes equ $0033 ; Battery Ram Parameter Ref Number - +dateFormat equ $0034 ; Battery Ram Parameter Ref Number - +clockFormat equ $0035 ; Battery Ram Parameter Ref Number - +rdMinRam equ $0036 ; Battery Ram Parameter Ref Number - +rdMaxRam equ $0037 ; Battery Ram Parameter Ref Number - +langCount equ $0038 ; Battery Ram Parameter Ref Number - +lang1 equ $0039 ; Battery Ram Parameter Ref Number - +lang2 equ $003A ; Battery Ram Parameter Ref Number - +lang3 equ $003B ; Battery Ram Parameter Ref Number - +lang4 equ $003C ; Battery Ram Parameter Ref Number - +lang5 equ $003D ; Battery Ram Parameter Ref Number - +lang6 equ $003E ; Battery Ram Parameter Ref Number - +lang7 equ $003F ; Battery Ram Parameter Ref Number - +lang8 equ $0040 ; Battery Ram Parameter Ref Number - +layoutCount equ $0041 ; Battery Ram Parameter Ref Number - +layout1 equ $0042 ; Battery Ram Parameter Ref Number - +layout2 equ $0043 ; Battery Ram Parameter Ref Number - +layout3 equ $0044 ; Battery Ram Parameter Ref Number - +layout4 equ $0045 ; Battery Ram Parameter Ref Number - +layout5 equ $0046 ; Battery Ram Parameter Ref Number - +layout6 equ $0047 ; Battery Ram Parameter Ref Number - +layout7 equ $0048 ; Battery Ram Parameter Ref Number - +layout8 equ $0049 ; Battery Ram Parameter Ref Number - +layout9 equ $004A ; Battery Ram Parameter Ref Number - +layout10 equ $004B ; Battery Ram Parameter Ref Number - +layout11 equ $004C ; Battery Ram Parameter Ref Number - +layout12 equ $004D ; Battery Ram Parameter Ref Number - +layout13 equ $004E ; Battery Ram Parameter Ref Number - +layout14 equ $004F ; Battery Ram Parameter Ref Number - +layout15 equ $0050 ; Battery Ram Parameter Ref Number - +layout16 equ $0051 ; Battery Ram Parameter Ref Number - +aTalkNodeNo equ $0080 ; Battery Ram Parameter Ref Number - + +irqIntFlag equ $0000 ; GetAddr Param Ref No - +irqDataReg equ $0001 ; GetAddr Param Ref No - +irqSerial1 equ $0002 ; GetAddr Param Ref No - +irqSerial2 equ $0003 ; GetAddr Param Ref No - +irqAplTlkHi equ $0004 ; GetAddr Param Ref No - +tickCnt equ $0005 ; GetAddr Param Ref No - +irqVolume equ $0006 ; GetAddr Param Ref No - +irqActive equ $0007 ; GetAddr Param Ref No - +irqSndData equ $0008 ; GetAddr Param Ref No - +brkVar equ $0009 ; GetAddr Param Ref No - +evMgrData equ $000A ; GetAddr Param Ref No - +mouseSlot equ $000B ; GetAddr Param Ref No - +mouseClamps equ $000C ; GetAddr Param Ref No - +absClamps equ $000D ; GetAddr Param Ref No - +sccIntFlag equ $000E ; GetAddr Param Ref No - + +ExtVGCInt equ $01 ; Hardware Interrupt Status - Returned by GetI +;RQEnable +ScanLineInt equ $02 ; Hardware Interrupt Status - Returned by Ge +;tIRQEnable +ADTBDataInt equ $04 ; Hardware Interrupt Status - Returned by Ge +;tIRQEnable +OneSecInt equ $10 ; Hardware Interrupt Status - Returned by GetI +;RQEnable +QuartSecInt equ $20 ; Hardware Interrupt Status - Returned by Ge +;tIRQEnable +VBInt equ $40 ; Hardware Interrupt Status - Returned by GetIRQEn +;able +KbdInt equ $80 ; Hardware Interrupt Status - Returned by GetIRQE +;nable + +kybdEnable equ $0000 ; Interrupt Ref Number - Parameter to IntSo +;urce +kybdDisable equ $0001 ; Interrupt Ref Number - Parameter to IntS +;ource +vblEnable equ $0002 ; Interrupt Ref Number - Parameter to IntSou +;rce +vblDisable equ $0003 ; Interrupt Ref Number - Parameter to IntSo +;urce +qSecEnable equ $0004 ; Interrupt Ref Number - Parameter to IntSo +;urce +qSecDisable equ $0005 ; Interrupt Ref Number - Parameter to IntS +;ource +oSecEnable equ $0006 ; Interrupt Ref Number - Parameter to IntSo +;urce +oSecDisable equ $0007 ; Interrupt Ref Number - Parameter to IntS +;ource +adbEnable equ $000A ; Interrupt Ref Number - Parameter to IntSou +;rce +adbDisable equ $000B ; Interrupt Ref Number - Parameter to IntSo +;urce +scLnEnable equ $000C ; Interrupt Ref Number - Parameter to IntSo +;urce +scLnDisable equ $000D ; Interrupt Ref Number - Parameter to IntS +;ource +exVCGEnable equ $000E ; Interrupt Ref Number - Parameter to IntS +;ource +exVCGDisable equ $000F ; Interrupt Ref Number - Parameter to Int +;Source + +mouseOff equ $0000 ; Mouse Mode Value - +transparent equ $0001 ; Mouse Mode Value - +transParnt equ $0001 ; Mouse Mode Value - (old name) +moveIntrpt equ $0003 ; Mouse Mode Value - +bttnIntrpt equ $0005 ; Mouse Mode Value - +bttnOrMove equ $0007 ; Mouse Mode Value - +mouseOffVI equ $0008 ; Mouse Mode Value - +transParntVI equ $0009 ; Mouse Mode Value - (old name) +transparentVI equ $0009 ; Mouse Mode Value - +moveIntrptVI equ $000B ; Mouse Mode Value - +bttnIntrptVI equ $000D ; Mouse Mode Value - +bttnOrMoveVI equ $000F ; Mouse Mode Value - + +toolLoc1 equ $0000 ; Vector Ref Number - +toolLoc2 equ $0001 ; Vector Ref Number - +usrTLoc1 equ $0002 ; Vector Ref Number - +usrTLoc2 equ $0003 ; Vector Ref Number - +intrptMgr equ $0004 ; Vector Ref Number - +copMgr equ $0005 ; Vector Ref Number - +abortMgr equ $0006 ; Vector Ref Number - +sysFailMgr equ $0007 ; Vector Ref Number - +aTalkIntHnd equ $0008 ; Vector Ref Number - +sccIntHnd equ $0009 ; Vector Ref Number - +scLnIntHnd equ $000A ; Vector Ref Number - +sndIntHnd equ $000B ; Vector Ref Number - +vblIntHnd equ $000C ; Vector Ref Number - +mouseIntHnd equ $000D ; Vector Ref Number - +qSecIntHnd equ $000E ; Vector Ref Number - +kybdIntHnd equ $000F ; Vector Ref Number - +adbRBIHnd equ $0010 ; Vector Ref Number - +adbSRQHnd equ $0011 ; Vector Ref Number - +deskAccHnd equ $0012 ; Vector Ref Number - +flshBufHnd equ $0013 ; Vector Ref Number - +kybdMicHnd equ $0014 ; Vector Ref Number - +oneSecHnd equ $0015 ; Vector Ref Number - +extVCGHnd equ $0016 ; Vector Ref Number - +otherIntHnd equ $0017 ; Vector Ref Number - +crsrUpdtHnd equ $0018 ; Vector Ref Number - +incBsyFlag equ $0019 ; Vector Ref Number - +decBsyFlag equ $001A ; Vector Ref Number - +bellVector equ $001B ; Vector Ref Number - +breakVector equ $001C ; Vector Ref Number - +traceVector equ $001D ; Vector Ref Number - +stepVector equ $001E ; Vector Ref Number - +ctlYVector equ $0028 ; Vector Ref Number - +proDOSVctr equ $002A ; Vector Ref Number - +osVector equ $002B ; Vector Ref Number - +msgPtrVctr equ $002C ; Vector Ref Number - diff --git a/Library/E16.NoteSyn.Macs.s b/Library/E16.NoteSyn.Macs.s new file mode 100644 index 0000000..3e47987 --- /dev/null +++ b/Library/E16.NoteSyn.Macs.s @@ -0,0 +1,51 @@ + +; File: E16.NoteSyn +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +; Note Syn errors +nsAlreadyInit equ $1901 ; Note Syn error - Note Syn already init +;ialized +nsSndNotInit equ $1902 ; Note Syn error - Sound Tools not initia +;lized +nsNotAvail equ $1921 ; Note Syn error - generator not available +nsBadGenNum equ $1922 ; Note Syn error - bad generator number +nsNotInit equ $1923 ; Note Syn error - Note Syn not initialized +nsGenAlreadyOn equ $1924 ; Note Syn error - generator already on + +ost1BkPt equ $00 ; Envelope - [Byte] +ost1Increment equ $01 ; Envelope - [Word] +ost2BkPt equ $03 ; Envelope - [Byte] +ost2Increment equ $04 ; Envelope - [Word] +ost3BkPt equ $06 ; Envelope - [Byte] +ost3Increment equ $07 ; Envelope - [Word] +ost4BkPt equ $09 ; Envelope - [Byte] +ost4Increment equ $0A ; Envelope - [Word] +ost5BkPt equ $0C ; Envelope - [Byte] +ost5Increment equ $0D ; Envelope - [Word] +ost6BkPt equ $0F ; Envelope - [Byte] +ost6Increment equ $10 ; Envelope - [Word] +ost7BkPt equ $12 ; Envelope - [Byte] +ost7Increment equ $13 ; Envelope - [Word] +ost8BkPt equ $15 ; Envelope - [Byte] +ost8Increment equ $16 ; Envelope - [Word] + +otheEnvelope equ $00 ; Instrument - [Envelope] +oreleaseSegment equ $18 ; Instrument - [Byte] +opriorityIncrement equ $19 ; Instrument - [Byte] +opitchBendRange equ $1A ; Instrument - [Byte] +ovibratoDepth equ $1B ; Instrument - [Byte] +ovibratoSpeed equ $1C ; Instrument - [Byte] +oinSpare equ $1D ; Instrument - [Byte] +oaWaveCount equ $1E ; Instrument - [Byte] +obWaveCount equ $1F ; Instrument - [Byte] + +owfTopKey equ $0 ; Waveform - [Byte] +owfWaveAddress equ $01 ; Waveform - [Byte] +owfWaveSize equ $02 ; Waveform - [Byte] +owfDOCMode equ $03 ; Waveform - [Byte] +owfRelPitch equ $04 ; Waveform - [Word] diff --git a/Library/E16.Print.Macs.s b/Library/E16.Print.Macs.s new file mode 100644 index 0000000..0d6d4f2 --- /dev/null +++ b/Library/E16.Print.Macs.s @@ -0,0 +1,90 @@ + +; File: E16.Print +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; + +MemFullErr equ $FF80 ; Print error - +IOAbort equ $FFE5 ; Print error - +PrAbort equ $80 ; Print error - + +missingDriver equ $1301 ; specified driver not in system/drivers +portNotOn equ $1302 ; specified port not selected in ctl panel +noPrintRecord equ $1303 ; no print record was given +badLaserPrep equ $1304 ; laser prep in laser writer incompatible +badLPFile equ $1305 ; laser prep in system/drivers incompatible +papConnNotOpen equ $1306 ; cannot connect to laser writer +papReadWriteErr equ $1307 ; apple talk PAPRead or PAPWrite error +startUpAlreadyMade equ $1321 ; low level startup already made +invalidCtlVal equ $1322 ; invalid control value has been spec'd + +oiDev equ $0 ; Word - PrInfoRec - reserved for internal use +oiVRes equ $2 ; Word - PrInfoRec - vertical resolution of printe +;r +oiHRes equ $4 ; Word - PrInfoRec - horizontal resolution of prin +;ter +orPage equ $6 ; Rect - PrInfoRec - defining page rectangle + +oiFstPage equ $0 ; Word - PrJobRec - first page to print +oiLstPage equ $2 ; Word - PrJobRec - last page to print +oiCopies equ $4 ; Word - PrJobRec - number of copies +obJDocLoop equ $6 ; Byte - PrJobRec - printing method +ofFromUser equ $7 ; Byte - PrJobRec - used internally +opIdleProc equ $9 ; Word - PrJobRec - background procedure +opFileName equ $D ; Pointer - PrJobRec - spool file name +oiFileVol equ $11 ; Word - PrJobRec - spool file volume referenc +;e number +obFileVers equ $13 ; Byte - PrJobRec - spool file version number +obJobX equ $14 ; Byte - PrJobRec - used internally + +oprVersion equ $0 ; Word - PrRec - print manager version +oprInfo equ $2 ; PrInfoRec - PrRec - printer infomation subrecor +;d +orPaper equ $10 ; Rect - PrRec - Defining paper rectangle +oprStl equ $18 ; PrStyleRec - PrRec - style subrecord +oprInfoPT equ $2A ; Byte[14] - PrRec - reserved for internal use +oprXInfo equ $38 ; Byte[24] - PrRec - reserved for internal use +oprJob equ $50 ; PrJobRec - PrRec - job subrecord +oprintX equ $64 ; Byte[38] - PrRec - reserved for future use +oiReserved equ $8A ; Word - PrRec - reserved for internal use + +oiTotPages equ $0 ; Word - PrStatusRec - number of pages in spoo +;l file +oiCurPage equ $2 ; Word - PrStatusRec - page being printed +oiTotCopes equ $4 ; Word - PrStatusRec - number of copies reques +;ted +oiCurCopy equ $6 ; Word - PrStatusRec - copy being printed +oiTotBands equ $8 ; Word - PrStatusRec - reserved for internal u +;se +oiCurBand equ $A ; Word - PrStatusRec - reserved for internal us +;e +ofPgDirty equ $C ; Boolean - PrStatusRec - TRUE if started print +;ing page +ofImaging equ $E ; Word - PrStatusRec - reserved for internal us +;e +ohPrint equ $10 ; PrRecHndl - PrStatusRec - handle of print reco +;rd +opPrPort equ $14 ; GrafPortPtr - PrStatusRec - pointer to grafpo +;rt being use for printing +ohPic equ $18 ; Word - PrStatusRec - reserved for internal use + +owDev equ $0 ; Word - PrStyleRec - output quality information +ointernA equ $2 ; Word[3] - PrStyleRec - for internal use +ofeed equ $8 ; Word - PrStyleRec - paper feed type +opaperType equ $A ; Word - PrStyleRec - paper type +ocrWidth equ $C ; Word - PrStyleRec - carriage Width for image w +;riter +ovSizing equ $C ; Word - PrStyleRec - vertical sizing for lazer +;writer +oreduction equ $E ; Word - PrStyleRec - % reduction, laser write +;r only +ointernB equ $10 ; Word - PrStyleRec - for internal use + +reset equ $0001 ; LLDControl - Printer control value - reset pri +;nter +formFeed equ $0002 ; LLDControl - Printer control value - form f +;eed +lineFeed equ $0003 ; LLDControl - Printer control value - line f +;eed diff --git a/Library/E16.ProDOS.Macs.s b/Library/E16.ProDOS.Macs.s new file mode 100644 index 0000000..064b79b --- /dev/null +++ b/Library/E16.ProDOS.Macs.s @@ -0,0 +1,145 @@ + +; File: E16.ProDOS +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +; ProDOS errors +invalidCallNum equ $01 ; ProDOS error - invalid call number +unclaimedIntErr equ $01 ; ProDOS error - fatal error - unclaimed +; interrupt +badPBlockPtr equ $05 ; ProDOS error - call pointer out of bounds +pdosActiveErr equ $06 ; ProDOS error - ProDOS is active +vcbUnusable equ $0A ; ProDOS error - fatal error - VCB unusable +fcbUnusable equ $0B ; ProDOS error - fatal error - FCB unusable +badBlockZero equ $0C ; ProDOS error - fatal error - block zero a +;llocated illegally +shdwInterruptErr equ $0D ; ProDOS error - fatal error - interrup +;t occured while I/O shadowing off +devNotFound equ $10 ; ProDOS error - device not found +badDevRefNum equ $11 ; ProDOS error - invalid device reference n +;umber +badReqCode equ $20 ; ProDOS error - invalid request code +intTableFull equ $25 ; ProDOS error - interrupt table full +invalidOperation equ $26 ; ProDOS error - invalid operation +ioError equ $27 ; ProDOS error - I/O error +noDevConnect equ $28 ; ProDOS error - no device connected +writeProtectErr equ $2B ; ProDOS error - write protect error +diskSwitchErr equ $2E ; ProDOS error - disk switched error +badPathname equ $40 ; ProDOS error - invalid pathname syntax +fcbFullErr equ $42 ; ProDOS error - FCB full error +badFileRefNum equ $43 ; ProDOS error - invalid file reference nu +;mber +pathNotFound equ $44 ; ProDOS error - path not found +volumeNotFound equ $45 ; ProDOS error - volume not found +fileNotFound equ $46 ; ProDOS error - file not found +dupFileName equ $47 ; ProDOS error - duplicate file name +volumeFullErr equ $48 ; ProDOS error - volume full error +dirFullErr equ $49 ; ProDOS error - directory full error +versionErr equ $4A ; ProDOS error - version error (incompatible +;file format) +badStoreType equ $4B ; ProDOS error - unsupported (or incorrect) +; storage type +eofEncountered equ $4C ; ProDOS error - end-of-file encountered +positionRangeErr equ $4D ; ProDOS error - position out of range +accessErr equ $4E ; ProDOS error - access not allowed +fileOpenErr equ $50 ; ProDOS error - file is open +dirDamaged equ $51 ; ProDOS error - directory structure is damag +;ed +badVolType equ $52 ; ProDOS error - unsupported volume type +paramRangeErr equ $53 ; ProDOS error - parameter out of range +memoryFullErr equ $54 ; ProDOS error - out of memory +vcbFullErr equ $55 ; ProDOS error - VCB full error +dupVolumeErr equ $57 ; ProDOS error - duplicate volume error +notBlkDevErr equ $58 ; ProDOS error - not a blocked device +invalidLevel equ $59 ; ProDOS error - invalid level +blkNumRangeErr equ $5A ; ProDOS error - block number out of rang +;e +notSameVolErr equ $5B ; ProDOS error - different volumes found o +;n ChangePath call +notExecSysFile equ $5C ; ProDOS error - not an executable system +; file + +oblockDevNum equ $00 ; BlockRec - [Word] +oblockDataBuffer equ $02 ; BlockRec - [Ptr] +oblockNum equ $06 ; BlockRec - [Longint] + +odevName equ $00 ; DevNumRec - [Ptr] +odevNum equ $04 ; DevNumRec - [Word] + +oeofRefNum equ $00 ; EofRec - [Word] +oeofPosition equ $02 ; EofRec - [Longint] + +ofileRefNum equ $00 ; FileIORec - [Word] +odataBuffer equ $02 ; FileIORec - [Ptr] +orequestCount equ $06 ; FileIORec - [Longint] +otransferCount equ $0A ; FileIORec - [Longint] + +ofrPathname equ $00 ; FileRec - [Ptr] +ofrAccess equ $04 ; FileRec - [Word] +ofrFileType equ $06 ; FileRec - [Word] +ofrAuxType equ $08 ; FileRec - [Longint] +ofrStorageType equ $0A ; FileRec - [Word] +ofrCreateDate equ $0C ; FileRec - [Word] +ofrCreateTime equ $0E ; FileRec - [Word] +ofrModDate equ $10 ; FileRec - [Word] +ofrModTime equ $12 ; FileRec - [Word] +ofrBlocksUsed equ $14 ; FileRec - [Long] + +;odevName GEQU $00 ; FormatRec/EraseDiskRec- device name +; pointer [pointer] +ovolName equ $04 ; FormatRec/EraseDiskRec - device name pointer +; [pointer] +ofileSysID equ $08 ; FormatRec/EraseDiskRec - file system ID [w +;ord] + +ointNum equ $00 ; InterruptRec - [Word] +ointCode equ $02 ; InterruptRec - [Ptr] + +olevel equ $00 ; LevelRec - [Word] + +omarkRefNum equ $00 ; MarkRec - [Word] +oposition equ $02 ; MarkRec - [Long] + +onewLRefNum equ $00 ; NewlineRec - [Word] +oenableMask equ $02 ; NewlineRec - [Word] +onewlineChar equ $04 ; NewlineRec - [Word] + +oopenRefNum equ $00 ; OpenRec - [Word] +oopenPathname equ $02 ; OpenRec - [Ptr] +oioBuffer equ $06 ; OpenRec - [Handle] + +;opathname GEQU $00 ; PathNameRec - [Ptr] +onewPathname equ $04 ; PathNameRec - [Ptr] + +oprefixNum equ $00 ; PrefixRec - [Word] +oprefix equ $02 ; PrefixRec - [Ptr] + +opdVersion equ $00 ; VersionRec - [Word] + +ovrDeviceName equ $00 ; VolumeRec - [Ptr] +ovrVolName equ $04 ; VolumeRec - [Ptr] +ovrTotalBlocks equ $08 ; VolumeRec - [Long] +ovrFreeBlocks equ $0C ; VolumeRec - [Long] +ovrFileSysID equ $10 ; VolumeRec - [Word] + +odiDevNum equ $00 ; DInfoRec - [Word] +odiDevName equ $02 ; DInfoRec - [Ptr] + +odeRefNum equ $00 ; DirEntryRec - [Word] +odeReserved equ $02 ; DirEntryRec - [Word] +odeBase equ $04 ; DirEntryRec - [Word] +odeDisplacement equ $06 ; DirEntryRec - [Word] +odeNameBuffer equ $08 ; DirEntryRec - [Ptr] +odeEntryNum equ $0C ; DirEntryRec - [Word] +odeFileType equ $0E ; DirEntryRec - [Word] +odeEOF equ $10 ; DirEntryRec - [Long] +odeBlockCount equ $14 ; DirEntryRec - [Long] +odeCreateTime equ $18 ; DirEntryRec - [TimeRec] +odeModTime equ $20 ; DirEntryRec - [TimeRec] +odeAccess equ $28 ; DirEntryRec - [Word] +odeAuxType equ $2A ; DirEntryRec - [Long] +odeFileSysID equ $2E ; DirEntryRec - [Word] diff --git a/Library/E16.Qd.Macs.s b/Library/E16.Qd.Macs.s new file mode 100644 index 0000000..86797af --- /dev/null +++ b/Library/E16.Qd.Macs.s @@ -0,0 +1,196 @@ + +; File: E16.Quickdraw +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +alreadyInitialized equ $0401 ; Quickdraw error - Quickdraw alrea +;dy initialized +cannotReset equ $0402 ; Quickdraw error - never used +notInitialized equ $0403 ; Quickdraw error - Quickdraw not initi +;alized +screenReserved equ $0410 ; Quickdraw error - screen reserved +badRect equ $0411 ; Quickdraw error - bad rectangle +notEqualChunkiness equ $0420 ; Quickdraw error - Chunkiness is n +;ot equal +rgnAlreadyOpen equ $0430 ; Quickdraw error - region is already o +;pen +rgnNotOpen equ $0431 ; Quickdraw error - region is not open +rgnScanOverflow equ $0432 ; Quickdraw error - region scan overfl +;ow +rgnFull equ $0433 ; Quickdraw error - region is full +polyAlreadyOpen equ $0440 ; Quickdraw error - poly is already op +;en +polyNotOpen equ $0441 ; Quickdraw error - poly is not open +polyTooBig equ $0442 ; Quickdraw error - poly is too big +badTableNum equ $0450 ; Quickdraw error - bad table number +badColorNum equ $0451 ; Quickdraw error - bad color number +badScanLine equ $0452 ; Quickdraw error - bad scan line +notImplemented equ $04FF ; Quickdraw error - not implemented + +omaxWidth equ $0 ; Word - BufDimRec - +otextBufHeight equ $2 ; Word - BufDimRec - +otextBufferWords equ $4 ; Word - BufDimRec - +ofontWidth equ $6 ; Word - BufDimRec - + +ooffseToMF equ $00 ; Word - Font - fully defined front of the Fo +;nt record. +ofamily equ $02 ; Word - Font - +ostyle equ $04 ; TextStyle - Font - +osize equ $06 ; Word - Font - +oversion equ $08 ; Word - Font - +ofbrExtent equ $0A ; Word - Font - + +ofgFontID equ $00 ; Word - FontGlobalsRecord - currently 12 byte +;s long, but may be expanded +ofgStyle equ $02 ; TextStyle - FontGlobalsRecord - +ofgSize equ $04 ; Word - FontGlobalsRecord - +ofgVersion equ $06 ; Word - FontGlobalsRecord - +ofgWidMax equ $08 ; Word - FontGlobalsRecord - +ofgFBRExtent equ $0A ; Word - FontGlobalsRecord - + +oascent equ $00 ; Integer - FontInfoRecord - +odescent equ $02 ; Integer - FontInfoRecord - +owidMax equ $04 ; Integer - FontInfoRecord - +oleading equ $06 ; Integer - FontInfoRecord - + +oportInfo equ $00 ; LocInfo - GrafPort - +oportRect equ $10 ; Rect - GrafPort - PortRect +oclipRgn equ $18 ; RgnHandle - GrafPort - Clip Rgn. Pointer +ovisRgn equ $1C ; RgnHandle - GrafPort - Vis. Rgn. Pointer +obkPat equ $20 ; Pattern - GrafPort - BackGround Pattern +opnLoc equ $40 ; Point - GrafPort - Pen Location +opnSize equ $44 ; Point - GrafPort - Pen Size +opnMode equ $48 ; Word - GrafPort - Pen Mode +opnPat equ $4A ; Pattern - GrafPort - Pen Pattern +opnMask equ $6A ; Mask - GrafPort - Pen Mask +opnVis equ $72 ; Word - GrafPort - Pen Visable +ofontHandle equ $74 ; FontHndl - GrafPort - +ofontID equ $78 ; FontID - GrafPort - Font ID +ofontFlags equ $7C ; Word - GrafPort - FontFlags +otxSize equ $7E ; Integer - GrafPort - Text Size +otxFace equ $80 ; TextStyle - GrafPort - Text Face +otxMode equ $82 ; Word - GrafPort - Text Mode +ospExtra equ $84 ; Fixed - GrafPort - Fixed Point Value +ochExtra equ $88 ; Fixed - GrafPort - Fixed Point Value +ofgColor equ $8C ; Word - GrafPort - ForeGround Color +obgColor equ $8E ; Word - GrafPort - BackGround Color +opicSave equ $90 ; Handle - GrafPort - PicSave +orgnSave equ $94 ; Handle - GrafPort - RgnSave +opolySave equ $98 ; Handle - GrafPort - PolySave +ografProcs equ $9C ; QdProcsPtr - GrafPort - +oarcRot equ $A0 ; Integer - GrafPort - ArcRot +ouserField equ $A2 ; Longint - GrafPort - UserField +osysField equ $A6 ; Longint - GrafPort - SysField + +oportSCB equ $00 ; AnSCBByte - LocInfo - +oreserved equ $01 ; Byte - LocInfo - +optrToPixImage equ $02 ; Pointer - LocInfo - ImageRef +owidth equ $06 ; Word - LocInfo - Width +oboundsRect equ $08 ; Rect - LocInfo - BoundsRect + +optrToSourceLocInfo equ $00 ; LocInfoPtr - PaintParam - +optrToDestLocInfo equ $04 ; LocInfoPtr - PaintParam - +optrToSourceRect equ $08 ; RectPtr - PaintParam - +optrToDestPoint equ $0C ; PointPtr - PaintParam - +omode equ $10 ; Word - PaintParam - +omaskHandle equ $12 ; Handle - PaintParam - clip region + +opsPnLoc equ $00 ; Point - PenState - +opsPnSize equ $04 ; Point - PenState - +opsPnMode equ $08 ; Word - PenState - +opsPnPat equ $0A ; Pattern - PenState - +opsPnMask equ $2A ; Mask - PenState - + +ostdText equ $00 ; Pointer - QDProcs - +ostdLine equ $04 ; Pointer - QDProcs - +ostdRect equ $08 ; Pointer - QDProcs - +ostdRRect equ $0C ; Pointer - QDProcs - +ostdOval equ $10 ; Pointer - QDProcs - +ostdArc equ $14 ; Pointer - QDProcs - +ostdPoly equ $18 ; Pointer - QDProcs - +ostdRgn equ $1C ; Pointer - QDProcs - +ostdPixels equ $20 ; Pointer - QDProcs - +ostdComment equ $24 ; Pointer - QDProcs - +ostdTxMeas equ $28 ; Pointer - QDProcs - +ostdTxBnds equ $2C ; Pointer - QDProcs - +ostdGetPic equ $30 ; Pointer - QDProcs - +ostdPutPic equ $34 ; Pointer - QDProcs - + +orfFamNum equ $00 ; Word - RomFontRec - +orfFamStyle equ $02 ; Word - RomFontRec - +orfSize equ $04 ; Word - RomFontRec - +orfFontHandle equ $06 ; FontHndl - RomFontRec - +orfNamePtr equ $0A ; Pointer - RomFontRec - +orfFBRExtent equ $0E ; Word - RomFontRec - + +colorTable equ $0F ; AnSCBByte - Mask for SCB color table +scbReserved equ $10 ; AnSCBByte - Mask for SCB reserved bit +scbFill equ $20 ; AnSCBByte - Mask for SCB fill bit +scbInterrupt equ $40 ; AnSCBByte - Mask for SCB interrupt bit +scbColorMode equ $80 ; AnSCBByte - Mask for SCB color mode bit + +table320 equ $32 ; ColorData - (val=size) +table640 equ $32 ; ColorData - (val=size) +maskSize equ $08 ; GrafPort - Mask Size (val=size) +locSize equ $10 ; GrafPort - Loc Size (val=size) +patsize equ $20 ; GrafPort - Pattern Size (val=size) +pnStateSize equ $32 ; GrafPort - Pen State Size (Val=size) +portSize equ $AA ; GrafPort - Size of GrafPort + +blueMask equ $000F ; ColorValue - Mask for Blue nibble +greenMask equ $00F0 ; ColorValue - Mask for green nibble +redMask equ $0F00 ; ColorValue - Mask for red nibble + +widMaxSize equ $0001 ; FontFlags - +zeroSize equ $0002 ; FontFlags - + +black equ $000 ; MasterColors - These work in 320 and 640 mode +blue equ $00F ; MasterColors - These work in 320 and 640 mode +darkGreen320 equ $080 ; MasterColors - These work in 320 mode +green320 equ $0E0 ; MasterColors - These work in 320 mode +green640 equ $0F0 ; MasterColors - These work in 640 mode +lightBlue320 equ $4DF ; MasterColors - These work in 320 mode +purple320 equ $72C ; MasterColors - These work in 320 mode +darkGray320 equ $777 ; MasterColors - These work in 320 mode +periwinkleBlue320 equ $78F ; MasterColors - These work in 320 mo +;de +brown320 equ $841 ; MasterColors - These work in 320 mode +lightGray320 equ $0CCC ; MasterColors - These work in 320 mode +red320 equ $0D00 ; MasterColors - These work in 320 mode +lilac320 equ $0DAF ; MasterColors - These work in 320 mode +red640 equ $0F00 ; MasterColors - These work in 640 mode +orange320 equ $0F70 ; MasterColors - These work in 320 mode +flesh320 equ $0FA9 ; MasterColors - These work in 320 mode +yellow equ $0FF0 ; MasterColors - These work in 320 and 640 mode +white equ $0FFF ; MasterColors - These work in 320 and 640 mode + +modeCopy equ $0000 ; PenModeDATA - +modeOR equ $0001 ; PenModeDATA - +modeXOR equ $0002 ; PenModeDATA - +modeBIC equ $0003 ; PenModeDATA - +modeForeCopy equ $0004 ; PenModeDATA - +modeForeOR equ $0005 ; PenModeDATA - +modeForeXOR equ $0006 ; PenModeDATA - +modeForeBIC equ $0007 ; PenModeDATA - +modeNOT equ $8000 ; PenModeDATA - +notCopy equ $8000 ; PenModeDATA - +notOR equ $8001 ; PenModeDATA - +notXOR equ $8002 ; PenModeDATA - +notBIC equ $8003 ; PenModeDATA - +notForeCOPY equ $8004 ; PenModeDATA - +notForeOR equ $8005 ; PenModeDATA - +notForeXOR equ $8006 ; PenModeDATA - +notForeBIC equ $8007 ; PenModeDATA - + +mode320 equ $0000 ; QDStartup - Argument to QDStartup +mode640 equ $0080 ; QDStartup - Argument to QDStartup + +boldMask equ $0001 ; TextStyle - Mask for bold bit +italicMask equ $0002 ; TextStyle - Mask for italic bit +underlineMask equ $0004 ; TextStyle - Mask for underline bit +outlineMask equ $0008 ; TextStyle - Mask for outline bit +shadowMask equ $0010 ; TextStyle - Mask for shadow bit diff --git a/Library/E16.Sane.Macs.s b/Library/E16.Sane.Macs.s new file mode 100644 index 0000000..7ae2e22 --- /dev/null +++ b/Library/E16.Sane.Macs.s @@ -0,0 +1,130 @@ +*----------------------------------------------------------- +* FILE: E16.SANE +* +* Copyright Apple Computer, Inc. 1986, 1987 +* All Rights Reserved +* +* These equates give assembly language access to 65816 SANE. +*----------------------------------------------------------- + +*----------------------------------------------------------- +* Tool Set and Function Numbers. +*----------------------------------------------------------- +SANEtsNum = $A ; SANE tool set number + +FPNum = $9 ; Function number for Arithmetic +DecStrNum = $A ; Function number for Scanner/Formatter +ElemNum = $B ; Function no. for Elementary functions + +*----------------------------------------------------------- +* Operation code masks. +*----------------------------------------------------------- +FOADD = $00 ; add +FOSUB = $02 ; subtract +FOMUL = $04 ; multiply +FODIV = $06 ; divide +FOCMP = $08 ; compare, no exception from unordered +FOCPX = $0A ; compare, signal invalid if unordered +FOREM = $0C ; remainder +FOZ2X = $0E ; convert to extended +FOX2Z = $10 ; convert from extended +FOSQRT = $12 ; square root +FORTI = $14 ; round to integral value +FOTTI = $16 ; truncate to integral value +FOSCALB = $18 ; binary scale +FOLOGB = $1A ; binary log +FOCLASS = $1C ; classify +FONEXT = $1E ; next-after + +FOSETENV = $01 ; set environment +FOGETENV = $03 ; get environment +FOSETHV = $05 ; set halt vector +FOGETHV = $07 ; get halt vector +FOD2B = $09 ; convert decimal to binary +FOB2D = $0B ; convert binary to decimal +FONEG = $0D ; negate +FOABS = $0F ; absolute value +FOCPYSGN = $11 ; copy sign +; UNDEFINED = $13 +FOSETXCP = $15 ; set exception +FOPROCENTRY = $17 ; procedure-entry +FOPROCEXIT = $19 ; procedure-exit +FOTESTXCP = $1B ; test exception +; UNDEFINED = $1D +; UNDEFINED = $1F + +*----------------------------------------------------------- +* Operand format masks. +*----------------------------------------------------------- +FFEXT = $000 ; extended -- 80-bit float +FFDBL = $100 ; double -- 64-bit float +FFSGL = $200 ; single -- 32-bit float +FFLNG = $300 ; longint -- 32-bit integer +FFINT = $400 ; integer -- 16-bit integer +FFCOMP = $500 ; comp -- 64-bit integer +; UNDEFINED = $600 +; UNDEFINED = $700 + +*----------------------------------------------------------- +* Class and sign inquiries. +*----------------------------------------------------------- +FCSNAN = $FC ; -4: signaling NAN +FCQNAN = $FD ; -3: quiet NAN +FCINF = $FE ; -2: infinite +FCZERO = $FF ; -1: zero +FCNORM = $00 ; 0: normal +FCDENORM = $01 ; 1: denormal + +*----------------------------------------------------------- +* Exceptions. +*----------------------------------------------------------- +FBINVALID = $1 +FBUFLOW = $2 +FBOFLOW = $4 +FBDIVZER = $8 +FBINEXACT = $10 + +*----------------------------------------------------------- +* Elementary function operation code masks. +*----------------------------------------------------------- +FOLNX = $00 ; base-e log +FOLOG2X = $02 ; base-2 log +FOLN1X = $04 ; ln (1 + x) +FOLOG21X = $06 ; log2 (1 + x) +FOEXPX = $08 ; base-e exponential +FOEXP2X = $0A ; base-2 exponential +FOEXP1X = $0C ; exp (x) - 1 +FOEXP21X = $0E ; exp2 (x) - 1 +FOXPWRI = $10 ; integer exponentiation +FOXPWRY = $12 ; general exponentiation +FOCOMPOUND = $14 ; compound +FOANNUITY = $16 ; annuity +FOATANX = $18 ; arctangent +FOSINX = $1A ; sine +FOCOSX = $1C ; cosine +FOTANX = $1E ; tangent +FORANDX = $20 ; random + +*----------------------------------------------------------- +* Scanner and formatter operation code masks. +*----------------------------------------------------------- +FOPSTR2DEC = 0 ; Pascal string to decimal record +FOCSTR2DEC = 2 ; C string (char stream) to dec. record +FODEC2STR = 1 ; decimal record to (Pascal) string + +*----------------------------------------------------------- +* NaN codes. +*----------------------------------------------------------- +NANSQRT = 1 ; Invalid square root such as sqrt(-1) +NANADD = 2 ; Invalid addition such as +INF - +INF +NANDIV = 4 ; Invalid division such as 0/0 +NANMUL = 8 ; Invalid multiply such as 0 * INF +NANREM = 9 ; Invalid rem or mod such as x REM 0 +NANASCBIN = 17 ; Conversion of invalid ASCII string +NANCOMP = 20 ; Comp NaN converted to floating +NANZERO = 21 ; Attempt to create a NaN with zero code +NANTRIG = 33 ; Invalid argument to trig routine +NANINVTRIG = 34 ; Invalid arg to inverse trig routine +NANLOG = 36 ; Invalid argument to log routine +NANPOWER = 37 ; Invalid argument to x^i or x^y routine +NANFINAN = 38 ; Invalid argument to financial function diff --git a/Library/E16.Scrap.Macs.s b/Library/E16.Scrap.Macs.s new file mode 100644 index 0000000..8d46e0c --- /dev/null +++ b/Library/E16.Scrap.Macs.s @@ -0,0 +1,17 @@ + +;----------------------------------------------------------- +; FILE: E16.SCRAP +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; +; +; +;----------------------------------------------------------- + +badScrapType equ $1610 ; Scrap error - No scrap of this type. + +textScrap equ $0000 ; scrapType - +picScrap equ $0001 ; scrapType - diff --git a/Library/E16.Shell.Macs.s b/Library/E16.Shell.Macs.s new file mode 100644 index 0000000..64eff3c --- /dev/null +++ b/Library/E16.Shell.Macs.s @@ -0,0 +1,22 @@ + +; File: E16.SHELL +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +; GET/SET_ LINFO parameter block + +osfile equ $00 ; address of source file name +odfile equ $04 ; address of output file name +oparms equ $08 ; address of paramter list +oistring equ $0C ; address of language specific input string +omerr equ $10 ; max error level allowed +omerrf equ $11 ; max error level found +olops equ $12 ; operations flag +okflag equ $13 ; KEEP flag +omflags equ $14 ; set of letters selected with '-' +opflags equ $18 ; set of letters selected with '+' +oorg equ $1C ; abs start address of non-relloc load file diff --git a/Library/E16.Sound.Macs.s b/Library/E16.Sound.Macs.s new file mode 100644 index 0000000..327f853 --- /dev/null +++ b/Library/E16.Sound.Macs.s @@ -0,0 +1,76 @@ + +; File: E16.Sound +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +noDOCFndErr equ $0810 ; Sound error - no DOC chip found +docAddrRngErr equ $0811 ; Sound error - DOC address range error +noSAppInitErr equ $0812 ; Sound error - no SAppInit call made +invalGenNumErr equ $0813 ; Sound error - invalid generator numbe +;r +synthModeErr equ $0814 ; Sound error - synthesizer mode error +genBusyErr equ $0815 ; Sound error - generator busy error +mstrIRQNotAssgnErr equ $0817 ; Sound error - master IRQ not assi +;gned +sndAlreadyStrtErr equ $0818 ; Sound error - sound tools already +;started + +owaveStart equ $00 ; Pointer - SoundParamBlock - starting addres +;s of wave +owaveSize equ $04 ; Word - SoundParamBlock - waveform size in pa +;ges +ofreqOffset equ $06 ; Word - SoundParamBlock - +odocBuffer equ $08 ; Word - SoundParamBlock - DOC buffer start a +;ddress, low byte = 0 +obufferSize equ $0A ; Word - SoundParamBlock - DOC buffer start +;address, low byte = 0 +onextWavePtr equ $0C ; SoundPBPtr - SoundParamBlock - Pointer to +; start of next wave's parameter block +ovolSetting equ $10 ; Word - SoundParamBlock - DOC volume settin +;g. High byte = 0 + +ffSynthMode equ $0001 ; channelGenMode - Free form synthesizer m +;ode +noteSynthMode equ $0002 ; channelGenMode - Note synthesizer mode +;. + +gen0off equ $0001 ; genMask - param to FFStopSound +gen1off equ $0002 ; genMask - param to FFStopSound +gen2off equ $0004 ; genMask - param to FFStopSound +gen3off equ $0008 ; genMask - param to FFStopSound +gen4off equ $0010 ; genMask - param to FFStopSound +gen5off equ $0020 ; genMask - param to FFStopSound +gen6off equ $0040 ; genMask - param to FFStopSound +gen7off equ $0080 ; genMask - param to FFStopSound +gen8off equ $0100 ; genMask - param to FFStopSound +gen9off equ $0200 ; genMask - param to FFStopSound +gen10off equ $0400 ; genMask - param to FFStopSound +gen11off equ $0800 ; genMask - param to FFStopSound +gen12off equ $1000 ; genMask - param to FFStopSound +gen13off equ $2000 ; genMask - param to FFStopSound +gen14off equ $4000 ; genMask - param to FFStopSound + +genAvail equ $0000 ; genStatus - Generator available status +ffSynth equ $0100 ; genStatus - Free Form Synthesizer status +noteSynth equ $0200 ; genStatus - Note Synthesizer status +lastBlock equ $8000 ; genStatus - Last block of wave + +readRegister equ $00 ; Jump Table Offset - Read Register routine +writeRegister equ $04 ; Jump Table Offset - Write Register routi +;ne +readRam equ $08 ; Jump Table Offset - Read Ram routine +writeRam equ $0C ; Jump Table Offset - Write Ram routine +readNext equ $10 ; Jump Table Offset - Read Next routine +writeNext equ $14 ; Jump Table Offset - Write Next routine +oscTable equ $18 ; Jump Table Offset - Pointer to Oscillator tab +;le +genTable equ $1C ; Jump Table Offset - Pointer to generator tabl +;e +gcbAddrTable equ $20 ; Jump Table Offset - Pointer to GCB addres +;s table +disableInc equ $24 ; Jump Table Offset - Disable Increment routi +;ne diff --git a/Library/E16.Std.Macs.s b/Library/E16.Std.Macs.s new file mode 100644 index 0000000..bd2cadc --- /dev/null +++ b/Library/E16.Std.Macs.s @@ -0,0 +1,27 @@ + +;----------------------------------------------------------- +; FILE: E16.STDFILE +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; +; +; +;----------------------------------------------------------- + +ogood equ $00 ; Boolean - SFReplyRec - TRUE for open; FALSE for +;cancel +ofileType equ $02 ; Word - SFReplyRec - ProDOS file type +oauxFileType equ $04 ; Word - SFReplyRec - ProDOS aux file type +ofilename equ $06 ; Byte - SFReplyRec - Name of file in prefix 0 +ofullPathname equ $22 ; Byte - SFReplyRec - The full pathname of +; the selected file. + +noDisplay equ $0000 ; filterProc result - file not to be display +;ed +noSelect equ $0001 ; filterProc result - file displayed, but not +; selectable +displaySelect equ $0002 ; filterProc result - file displayed and +; selectable diff --git a/Library/E16.TCPIP.Macs.s b/Library/E16.TCPIP.Macs.s new file mode 100644 index 0000000..96f6d78 --- /dev/null +++ b/Library/E16.TCPIP.Macs.s @@ -0,0 +1,324 @@ +******************************************** +* Marinetti Equates +* by Richard Bennett +* +******************************************** +* 1998-08-28 RJB Original version +* 2003-05-31 AJR Update to v2.1 of TCP/IP interfaces +******************************************** + +*------------------------------------------------- +* Various numeric equates +*------------------------------------------------- + +* Connect methods +conEthernet = 1 +conMacIP = 2 +conPPPCustom = 3 +conSLIP = 4 +conTest = 5 +conPPP = 6 +conDirectConnect = 7 +conAppleEthernet = 8 + + +* Protocols +protocolAll = 0 +protocolICMP = 1 +protocolTCP = 6 +protocolUDP = 17 + +* Tool Error codes +terrOK = 0 +terrBADIPID = $3601 ;Bad IPID for this request +terrNOCONNECTION = $3602 ;Not connected to the network +terrNORECONDATA = $3603 ;No reconnect data +terrLINKERROR = $3604 ;Problem with the link layer +terrSCRIPTFAILED = $3605 ;The script failed / timed out +terrCONNECTED = $3606 ;Not while connected to the network +terrSOCKETOPEN = $3607 ;Socket still open +terrINITNOTFOUND = $3608 ;Init not found in memory +terrVERSIONMISMATCH = $3609 ;Different versions of tool, init, cdev +terrBADTUNETABLELEN = $360A ;Bad tune table length +terrIPIDTABLEFULL = $360B ;IPID table full +terrNOICMPQUEUED = $360C ;No ICMP datagrams in the queue +terrLOGINSPENDING = $360D ;There are still IPIDs logged in +terrTCPIPNOTACTIVE = $360E ;Not active. Probably in P8 mode. +terrNODNSERVERS = $360F ;No servers registered with Marinetti +terrDNRBUSY = $3610 ;DNR is current busy. Try again later +terrNOLINKLAYER = $3611 ;Unable to load link layer module +terrBADLINKLAYER = $3612 ;Not a link layer module +terrENJOYCOKE = $3613 ;But not so close to the keyboard +terrNORECONSUPPRT = $3614 ;This module doesn't support reconnect +terrUSERABORTED = $3615 ;The user aborted the connect/disconnect script +terrBADUSERPASS = $3616 ;Invalid username and/or password +terrBADPARAMETER = $3617 ;Invalid parameter for this call +terrBADENVIRONMENT = $3618 ;No desktop or tools not started +terrNOINCOMING = $3619 ;There is no pending incoming request +terrLINKBUSY = $361A ;Modem or interface is busy +terrNOLINKINTERFACE = $361B ;No dial tone or similar +terrNOLINKRESPONSE = $361C ;No modem answer or similar +terrNODNRPENDING = $361D ;No such entry in DNR list +terrBADALIVEMINUTES = $361E ;Minutes value is invalid +terrBUFFERTOOSMALL = $361F ;Buffer is too small +terrNOTSERVER = $3620 ;This ipid is not set up as a server +terrBADTRIGGERNUM = $3621 ;Invalid trigger number + +terrmask = $00FF + +* DNR status codes +DNR_Pending = 0 ;Request still being processed +DNR_OK = 1 ;Request completed successfully +DNR_Failed = 2 ;Network error/timeout +DNR_NoDNSEntry = 3 ;Requested domain has no DNS entry +DNR_Cancelled = 4 ;Cancelled by user + + +* TCP logic errors +tcperrOK = 0 ;"tcperr" error codes from TCP RFC +tcperrDeafDestPort = 1 +tcperrHostReset = 2 +tcperrConExists = 3 ;"connection already exists" +tcperrConIllegal = 4 ;"connection illegal for this process" +tcperrNoResources = 5 ;"insuficient resources" +tcperrNoSocket = 6 ;"foreign socket unspecified" +tcperrBadPrec = 7 ;"precedence not allowed" +tcperrBadSec = 8 ;"security/compartment not allowed" +tcperrBadConnection = 9 ;"connection does not exist" +tcperrConClosing = 10 ;"connection closing" +tcperrClosing = 11 ;"closing" +tcperrConReset = 12 ;"connection reset" +tcperrUserTimeout = 13 ;"connection aborted due to user timeout" +tcperrConRefused = 14 ;"connection refused" + +* TCP states +TCPSCLOSED = 0 +TCPSLISTEN = 1 +TCPSSYNSENT = 2 +TCPSSYNRCVD = 3 +TCPSESTABLISHED = 4 +TCPSFINWAIT1 = 5 +TCPSFINWAIT2 = 6 +TCPSCLOSEWAIT = 7 +TCPSLASTACK = 8 +TCPSCLOSING = 9 +TCPSTIMEWAIT = 10 +nTCPSTATES = 11 + + +TCPIPSaysHello = $8101 +TCPIPSaysNetworkUp = $8102 +TCPIPSaysNetworkDown = $8103 + +*---------------------------------------------------- +* Control/data blocks +*---------------------------------------------------- +* Error table +tcpDGMSTBLEN = 120 ;Length of table including this longword +tcpDGMSTOTAL = 4 ;Total datagrams received (good and bad) + +tcpDGMSFRAGSIN = 8 ;Got a fragment (datagram is queued to frag list) +tcpDGMSFRAGSLOST = 12 ;Fragment purged after timeout in queue +tcpDGMSBUILT = 16 ;Built a datagram from fragments (is then queued) + +tcpDGMSOK = 20 ;datagrams queued from link *OR* tcpDGMSBUILT + +tcpDGMSBADCHK = 24 ;Bad IP checksum (datagram is purged) +tcpDGMSBADHEADLEN = 28 ;Bad IP header lengths (datagram is purged) +tcpDGMSBADPROTO = 32 ;Unsupported protocols (added to misc queue) +tcpDGMSBADIP = 36 ;Not my or loopback IP (datagram is purged) + +tcpDGMSICMP = 40 ;ICMP total datagrams in (good and bad) +tcpDGMSICMPUSER = 44 ;ICMP user datagrams +tcpDGMSICMPKERNEL = 48 ;ICMP kernel datagrams +tcpDGMSICMPBAD = 52 ;ICMP bad checksum or datagram too short +tcpDGMSICMPBADTYPE = 56 ;ICMP bad ic_type +tcpDGMSICMPBADCODE = 60 ;ICMP bad ic_code +tcpDGMSICMPECHORQ = 64 ;ICMP ECHORQs in +tcpDGMSICMPECHORQOUT = 68 ;ICMP ECHORQ replies sent out +tcpDGMSICMPECHORP = 72 ;ICMP ECHORPs in +tcpDGMSICMPECHORPBADID = 76 ;ICMP ECHORPs unclaimed + +tcpDGMSUDP = 80 ;UDPs OK (added to UDP queue) +tcpDGMSUDPBAD = 84 ;Bad UDP header (datagram is purged) +tcpDGMSUDPNOPORT = 88 ;No such logged in port (datagram is purged) + +tcpDGMSTCP = 92 ;TCPs OK (returned to TCP main logic) +tcpDGMSTCPBAD = 96 ;Bad TCP header or checksum (datagram is purged) +tcpDGMSTCPNOPORT = 100 ;No such logged in port (datagram is purged) +tcpDGMSTCPQUEUED = 104 ;Arrived before required (datagram is queued) +tcpDGMSTCPOLD = 108 ;Already received this segment (datagram is purged) + +tcpDGMSOFRAGMENTS = 112 ;Fragments transmitted +tcpDGMSFRAGMENTED = 116 ;Datagrams fragmented for transmission + +tcpPKTSLEN = 120 ;Length of error table in bytes + +* TCPIPReadTCP response buffer +rrBuffCount = 0 +rrBuffHandle = 4 +rrMoreFlag = 8 +rrPushFlag = 10 +rrUrgentFlag = 12 +rrlen = 14 + +* TCPIPReadLineTCP response buffer +rlrBuffCount = 0 +rlrBuffHandle = 4 +rlrIsDataFlag = 8 +rlrMoreFlag = 10 +rlrBuffSize = 12 +rlrlen = 16 + +*TCPIPStatusTCP response buffer +srState = 0 +srNetworkError = 2 +srSndQueued = 4 +srRcvQueued = 8 +srDestIP = 12 +srDestPort = 16 +srConnectType = 18 +srAcceptCount = 20 +srlen = 22 + +* TCPIPStatusUDP +uvQueueSize = 0 +uvError = 2 +uvErrorTick = 4 +uvCount = 8 +uvTotalCount = 12 ;same as tcpDGMSUDP +uvDispatchFlag = 16 +uvlen = 18 + +* TCPIPGetDestination +drUserID = 0 +drDestIP = 2 +drDestPort = 6 +drlen = 8 + +* TCPIPConvertIPToHex +cvtIPAddress = 0 +cvtPort = 4 + +* Link layer module info +liMethodID = 0 ;Ethernet=1, PPP=3, SLIP=4 +liName = 2 ; length byte + 20 chars = 21 bytes +liVersion = 23 +liFlags = 27 +liFilename = 29 ; length byte + 15 chars +liMenuItem = 45 ;rMenuItem template +lilen = 64 + +* IPC records +inwLength = 0 +inwIP = 2 +inwMethod = 6 +inwMTU = 8 +inwLVPtr = 10 +inwlen = 14 + +* Module list record +rmiversion = 0 +rmiItemID = 2 +rmiChar = 4 +rmiAltChar = 5 +rmiCheck = 6 +rmiFlag = 8 +rmiTitleRef = 10 + +* DNR dsects +DNRstatus = 0 +DNRname = 2 +DNRIPaddress = 2 + +*------------------------------------------------- +* Miscellaneous datagram header equates +*------------------------------------------------- +* ICMP types - TCP_TYPE - Comer/Steven, vol II, p128 + +ICT_ECHORP = 0 +ICT_DESTUR = 3 +ICT_SRCQ = 4 +ICT_REDIRECT = 5 +ICT_ECHORQ = 8 +ICT_TIMEX = 11 +ICT_PARAMP = 12 +ICT_TIMERQ = 13 +ICT_TIMERP = 14 +ICT_INFORQ = 15 +ICT_INFORP = 16 +ICT_MASKRQ = 17 +ICT_MASKRP = 18 +ictmax = 19 + +ICC_NETUR = 0 ;p128, Internetworking with TCP/IP Vol 2. +ICC_HOSTUR = 1 ; Design Implementation, and Internals +ICC_PROTOUR = 2 ; Douglas E. Comer / David L. Stevens +ICC_PORTUR = 3 +ICC_FNADF = 4 +ICC_SRCRT = 5 +ICC_NETRD = 0 +ICC_HOSTRD = 1 +IC_TOSNRD = 2 +IC_TOSHRD = 3 +ICC_TIMEX = 0 +ICC_FTIMEX = 1 +IC_HLEN = 8 +IC_PADLEN = 3 +IC_RDTTL = 300 + +* UDP standard port numbers +UP_ECHO = 7 ;echo server +UP_DISCARD = 9 ;discard packet +UP_USERS = 11 ;users server +UP_DAYTIME = 13 ;day and time server +UP_QOTD = 17 ;quote of the day server +UP_CHARGEN = 19 ;character generator +UP_TIME = 37 ;time server +UP_WHOIS = 43 ;who is server (user information) +UP_DNAME = 53 ;domain name server +UP_TFTP = 69 ;trivial file transfer protocol server +UP_RWHO = 513 ;remote who server (ruptime) +UP_RIP = 520 ;route information exchange (RIP) + +* IP header +ip_verlen = 0 +ip_tos = 1 +ip_len = 2 +ip_id = 4 +ip_fragoff = 6 +ip_ttl = 8 +ip_proto = 9 ;protocol* +ip_cksum = 10 +ip_src = 12 +ip_dst = 16 +ip_data = 20 + +* ICMP header +ic_type = 0 ;ICT_* +ic_code = 1 ;ICC_* +ic_cksum = 2 +ic_data = 4 +* Echo Offsets +ic_echo_id = 4 +ic_echo_seq = 6 + +* UDP header +u_source = 0 ;source UDP port number - UP_* +u_dst = 2 ;destination UDP port number +u_len = 4 ;length of UDP data +u_cksum = 6 ;UDP checksum (0 = none) +u_data = 8 + +* TCP header +tcp_sport = 0 ;source port - TCP_* +tcp_dport = 2 ;destination port +tcp_seq = 4 ;sequence number +tcp_ack = 8 ;acknowledgement number +tcp_offset = 12 ;longword count in header (def=6) +tcp_code = 13 ;flags +tcp_window = 14 ;window advertisement +tcp_cksum = 16 ;checksum +tcp_urgptr = 18 ;urgent pointer +tcp_options = 20 +tcp_data = 20 diff --git a/Library/E16.Text.Macs.s b/Library/E16.Text.Macs.s new file mode 100644 index 0000000..30bed44 --- /dev/null +++ b/Library/E16.Text.Macs.s @@ -0,0 +1,49 @@ + +;----------------------------------------------------------- +; FILE: E16.TEXT +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; +; +; +;----------------------------------------------------------- + +badDevType equ $0C01 ; TextTool error - not implemented +badDevNum equ $0C02 ; TextTool error - Illegal device number. +badMode equ $0C03 ; TextTool error - Bad mode: illegal operation +;. +unDefHW equ $0C04 ; TextTool error - Undefined hardware error +lostDev equ $0C05 ; TextTool error - Lost device: Device no long +;er on line +lostFile equ $0C06 ; TextTool error - File no longer in diskette +; directory +badTitle equ $0C07 ; TextTool error - Illegal Filename +noRoom equ $0C08 ; TT error - Insufficient space on specified di +;skette +noDevice equ $0C09 ; TextTool error - Volume not online +noFile equ $0C0A ; TextTool error - File not in specifiled direc +;tory +dupFile equ $0C0B ; TextTool error - Filename already exists +notClosed equ $0C0C ; TextTool error - Attempt to open an open f +;ile +notOpen equ $0C0D ; TextTool error - Attempt to close closed fil +;e +badFormat equ $0C0E ; TextTool error - error reading real or int +;eger +ringBuffOFlo equ $0C0F ; TextTool error - Chars arriving too fas +;t +writeProtected equ $0C10 ; TextTool error - +devErr equ $0C40 ; TextTool error - Read or Write failed + +input equ $0000 ; deviceNum - +output equ $0001 ; deviceNum - +errorOutput equ $0002 ; deviceNum - +basicType equ $0000 ; deviceType - +pascalType equ $0001 ; deviceType - +ramBased equ $0002 ; deviceType - + +noEcho equ $0000 ; echoFlag - +echo equ $0001 ; echoFlag - diff --git a/Library/E16.Window.Macs.s b/Library/E16.Window.Macs.s new file mode 100644 index 0000000..308354e --- /dev/null +++ b/Library/E16.Window.Macs.s @@ -0,0 +1,185 @@ + +; File: E16.Window +; +; +; Copyright Apple Computer, Inc. 1986, 1987 +; All Rights Reserved +; +; + +paramLenErr equ $0E01 ; Window error - first word of parameter l +;ist is the wrong size +allocateErr equ $0E02 ; Window error - unable to allocate window +; record +taskMaskErr equ $0E03 ; Window error - bits 12-15 are not clear +;in WmTaskMask field of WmTaskRec + +owNext equ $00 ; GrafPortPtr - WindRec - Pointer to next window +;Record. +oport equ $04 ; GrafPort - WindRec - Window's port. +owPadding equ $AE ; 16 Bytes - WindRec - Space for possible futu +;re expansion +owStrucRgn equ $BE ; RgnHandle - WindRec - Region of frame plus +;content. +owContRgn equ $C2 ; RgnHandle - WindRec - Content region. +owUpdateRgn equ $C6 ; RgnHandle - WindRec - Update region. +owControls equ $CA ; CtlRecHndl - WindRec - Window's control lis +;t. +owFrameCtrls equ $CE ; CtlRecHndl - WindRec - Window frame's con +;trol list. +owFrame equ $D2 ; Word - WindRec - Bit flags. + +oframeColor equ $00 ; Word - WindColor - Color of window frame. +otitleColor equ $02 ; Word - WindColor - Color of title and bar. +otBarColor equ $04 ; Word - WindColor - Color/pattern of title b +;ar. +ogrowColor equ $06 ; Word - WindColor - Color of grow box. +oinfoColor equ $08 ; Word - WindColor - Color of information bar +;. + +oparamLength equ $00 ; Word - ParamList - Parameter to NewWindow +;. +owFrameBits equ $02 ; Word - ParamList - Parameter to NewWindow. +owTitle equ $04 ; Pointer - ParamList - Parameter to NewWindow. +owRefCon equ $08 ; Long - ParamList - Parameter to NewWindow. +owZoom equ $0C ; Rect - ParamList - Parameter to NewWindow. +owColor equ $14 ; WindColorPtr - ParamList - Parameter to NewWin +;dow. +owYOrigin equ $18 ; Integer - ParamList - Parameter to NewWindow +;. +owXOrigin equ $1A ; Integer - ParamList - Parameter to NewWindow +;. +owDataH equ $1C ; Word - ParamList - Parameter to NewWindow. +owDataW equ $1E ; Word - ParamList - Parameter to NewWindow. +owMaxH equ $20 ; Word - ParamList - Parameter to NewWindow. +owMaxW equ $22 ; Word - ParamList - Parameter to NewWindow. +owScrollVer equ $24 ; Word - ParamList - Parameter to NewWindow. +owScrollHor equ $26 ; Word - ParamList - Parameter to NewWindow. +owPageVer equ $28 ; Word - ParamList - Parameter to NewWindow. +owPageHor equ $2A ; Word - ParamList - Parameter to NewWindow. +owInfoRefCon equ $2C ; Long - ParamList - Parameter to NewWindow +;. +owInfoHeight equ $30 ; Word - ParamList - height of information +;bar +owFrameDefProc equ $32 ; Pointer - ParamList - Parameter to NewW +;indow. +owInfoDefProc equ $36 ; Pointer - ParamList - Parameter to NewWi +;ndow. +owContDefProc equ $3A ; Pointer - ParamList - Parameter to NewWi +;ndow. +owPosition equ $3E ; Rect - ParamList - Parameter to NewWindow. +owPlane equ $46 ; GrafPortPtr - ParamList - Parameter to NewWind +;ow. +owStorage equ $4A ; WindRecPtr - ParamList - Parameter to NewWin +;dow. + +owmWhat equ $00 ; Word - WmTaskRec - +owmMessage equ $02 ; Long - WmTaskRec - +owmWhen equ $06 ; Long - WmTaskRec - +owmWhere equ $0A ; Point - WmTaskRec - +owmModifiers equ $0E ; Word - WmTaskRec - +owmTaskData equ $10 ; Long - WmTaskRec - TaskMaster return value +;. +owmTaskMask equ $14 ; Long - WmTaskRec - TaskMaster feature mask +;. + +wNoConstraint equ $0000 ; Axis parameter - No constraint on move +;ment. +wHAxisOnly equ $0001 ; Axis parameter - Horizontal axis only. +wVAxisOnly equ $0002 ; Axis parameter - Vertical axis only. + +FromDesk equ $00 ; Desktop Command - Subtract region from deskto +;p +ToDesk equ $1 ; Desktop Command - Add region to desktop +GetDesktop equ $2 ; Desktop Command - Get Handle of Desktop regi +;on +SetDesktop equ $3 ; Desktop Command - Set Handle of Desktop regi +;on +GetDeskPat equ $4 ; Desktop command - Address of pattern or dra +;wing routine +SetDeskPat equ $5 ; Desktop command - Change Address of pattern +; or drawing routine +GetVisDesktop equ $6 ; Desktop command - Get destop region less +;visible windows. +BackGroundRgn equ $7 ; Desktop command - For drawing directly on +; desktop. + +toBottom equ -2 ; SendBehind value - To send window to bottom. +topMost equ -1 ; SendBehind value - To make window top. +bottomMost equ $0000 ; SendBehind value - To make window bottom. + +tmMenuKey equ $0001 ; Task Mask - +tmUpdate equ $0002 ; Task Mask - +tmFindW equ $0004 ; Task Mask - +tmMenuSel equ $0008 ; Task Mask - +tmOpenNDA equ $0010 ; Task Mask - +tmSysClick equ $0020 ; Task Mask - +tmDragW equ $0040 ; Task Mask - +tmContent equ $0080 ; Task Mask - +tmClose equ $0100 ; Task Mask - +tmZoom equ $0200 ; Task Mask - +tmGrow equ $0400 ; Task Mask - +tmScroll equ $0800 ; Task Mask - +tmSpecial equ $1000 ; Task Mask - +tmCRedraw equ $2000 ; Task Mask - +tmInactive equ $4000 ; Task Mask - +tmInfo equ $8000 ; Task Mask - + +wNoHit equ $0000 ; TaskMaster codes - retained for back compatib +;ility. +inNull equ $0000 ; TaskMaster codes - retained for back compatib +;ility +inKey equ $0003 ; TaskMaster codes - retained for back compatibi +;lity +inButtDwn equ $0001 ; TaskMaster codes - retained for back compa +;tibility +inUpdate equ $0006 ; TaskMaster codes - retained for back compat +;ibility +wInDesk equ $0010 ; TaskMaster codes - On Desktop +wInMenuBar equ $0011 ; TaskMaster codes - On system menu bar +wClickCalled equ $0012 ; TaskMaster codes - system click called +wInContent equ $0013 ; TaskMaster codes - In content region +wInDrag equ $0014 ; TaskMaster codes - In drag region +wInGrow equ $0015 ; TaskMaster codes - In grow region, active wi +;ndow only +wInGoAway equ $0016 ; TaskMaster codes - In go-away region, acti +;ve window only +wInZoom equ $0017 ; TaskMaster codes - In zoom region, active wi +;ndow only +wInInfo equ $0018 ; TaskMaster codes - In information bar +wInSpecial equ $0019 ; TaskMaster codes - Item ID selected was 2 +;50 - 255 +wInDeskItem equ $001A ; TaskMaster codes - Item ID selected was +;1 - 249 +wInFrame equ $1B ; TaskMaster codes - in Frame, but not on anyth +;ing else +wInactMenu equ $1C ; TaskMaster codes - "selection" of inactive +;menu item +wInSysWindow equ $8000 ; TaskMaster codes - hi bit set for syste +;m windows + +wDraw equ $00 ; VarCode - Draw window frame command. +wHit equ $01 ; VarCode - Hit test command. +wCalcRgns equ $02 ; VarCode - Compute regions command. +wNew equ $03 ; VarCode - Initialization command. +wDispose equ $04 ; VarCode - Dispose command. + +fHilited equ $0001 ; WFrame - Window is highlighted. +fZoomed equ $0002 ; WFrame - Window is zoomed. +fAllocated equ $0004 ; WFrame - Window record was allocated. +fCtlTie equ $0008 ; WFrame - Window state tied to controls. +fInfo equ $0010 ; WFrame - Window has an information bar. +fVis equ $0020 ; WFrame - Window is visible. +fQContent equ $0040 ; WFrame - +fMove equ $0080 ; WFrame - Window is movable. +fZoom equ $0100 ; WFrame - Window is zoomable. +fFlex equ $0200 ; WFrame - +fGrow equ $0400 ; WFrame - Window has grow box. +fBScroll equ $0800 ; WFrame - Window has horizontal scroll bar. +fRScroll equ $1000 ; WFrame - Window has vertical scroll bar. +fAlert equ $2000 ; WFrame - +fClose equ $4000 ; WFrame - Window has a close box. +fTitle equ $8000 ; WFrame - Window has a title bar. + +windSize equ $145 ; WindRec - Size of WindRec. +wmTaskRecSize equ $16 ; WmTaskRec - Size of WmTaskRec. diff --git a/Library/Event.Macs.s b/Library/Event.Macs.s new file mode 100644 index 0000000..5c40376 --- /dev/null +++ b/Library/Event.Macs.s @@ -0,0 +1,144 @@ +* Event Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_EMBootInit MAC + Tool $106 + <<< +~EMStartUp MAC + PxW ]1;]2;]3;]4 + PxW ]5;]6;]7 +_EMStartUp MAC + Tool $206 + <<< +_EMShutDown MAC + Tool $306 + <<< +~EMVersion MAC + PHA +_EMVersion MAC + Tool $406 + <<< +_EMReset MAC + Tool $506 + <<< +~EMStatus MAC + PHA +_EMStatus MAC + Tool $606 + <<< +~DoWindows MAC + PHA +_DoWindows MAC + Tool $906 + <<< +~GetNextEvent MAC + PHA + PHWL ]1;]2 +_GetNextEvent MAC + Tool $A06 + <<< +~EventAvail MAC + PHA + PHWL ]1;]2 +_EventAvail MAC + Tool $B06 + <<< +~GetMouse MAC + PHL ]1 +_GetMouse MAC + Tool $C06 + <<< +~Button MAC + P1SW ]1 +_Button MAC + Tool $D06 + <<< +~StillDown MAC + P1SW ]1 +_StillDown MAC + Tool $E06 + <<< +~WaitMouseUp MAC + P1SW ]1 +_WaitMouseUp MAC + Tool $F06 + <<< +~TickCount MAC + PHS 2 +_TickCount MAC + Tool $1006 + <<< +~GetDblTime MAC + PHS 2 +_GetDblTime MAC + Tool $1106 + <<< +~GetCaretTime MAC + PHS 2 +_GetCaretTime MAC + Tool $1206 + <<< +_SetSwitch MAC + Tool $1306 + <<< +~PostEvent MAC + PHA + PHWL ]1;]2 +_PostEvent MAC + Tool $1406 + <<< +~FlushEvents MAC + PHA + PxW ]1;]2 +_FlushEvents MAC + Tool $1506 + <<< +~GetOSEvent MAC + PHA + PHWL ]1;]2 +_GetOSEvent MAC + Tool $1606 + <<< +~OSEventAvail MAC + PHA + PHWL ]1;]2 +_OSEventAvail MAC + Tool $1706 + <<< +~SetEventMask MAC + PHW ]1 +_SetEventMask MAC + Tool $1806 + <<< +~FakeMouse MAC + PxW ]1;]2;]3;]4 + PHW ]5 +_FakeMouse MAC + Tool $1906 + <<< +~SetAutoKeyLimit MAC + PHW ]1 +_SetAutoKeyLimit MAC + Tool $1A06 + <<< +~GetKeyTranslation MAC + P1SW ]1 +_GetKeyTranslation MAC + Tool $1B06 + <<< +~SetKeyTranslation MAC + PHW ]1 +_SetKeyTranslation MAC + Tool $1C06 + <<< +~qEMStartUp MAC + NextDP ]1;$100 + PxW ]2;]3;]4;]5 + PxW ]6;]7 + Tool $206 + <<< + diff --git a/Library/Female.Macs.s b/Library/Female.Macs.s new file mode 100644 index 0000000..cbe99f6 --- /dev/null +++ b/Library/Female.Macs.s @@ -0,0 +1,26 @@ +* +* Female Voice tool calls +* + +_FemaleBootInit mac + Tool $0133 + <<< +_FemaleStartUp mac + Tool $0233 + <<< +_FemaleShutDown mac + Tool $0333 + <<< +_FemaleVersion mac + Tool $0433 + <<< +_FemaleReset mac + Tool $0533 + <<< +_FemaleStatus mac + Tool $0633 + <<< +_FemaleSpeak mac + Tool $0933 + <<< + diff --git a/Library/Font.Macs.s b/Library/Font.Macs.s new file mode 100644 index 0000000..5696b44 --- /dev/null +++ b/Library/Font.Macs.s @@ -0,0 +1,142 @@ +* Font Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_FMBootInit MAC + Tool $11B + <<< +~FMStartUp MAC + PxW ]1;]2 +_FMStartUp MAC + Tool $21B + <<< +_FMShutDown MAC + Tool $31B + <<< +~FMVersion MAC + PHA +_FMVersion MAC + Tool $41B + <<< +_FMReset MAC + Tool $51B + <<< +~FMStatus MAC + PHA +_FMStatus MAC + Tool $61B + <<< +~CountFamilies MAC + P1SW ]1 +_CountFamilies MAC + Tool $91B + <<< +~FindFamily MAC + P1SW ]1 + PHWL ]2;]3 +_FindFamily MAC + Tool $A1B + <<< +~GetFamInfo MAC + PHA + PHWL ]1;]2 +_GetFamInfo MAC + Tool $B1B + <<< +~GetFamNum MAC + P1SL ]1 +_GetFamNum MAC + Tool $C1B + <<< +~AddFamily MAC + PHWL ]1;]2 +_AddFamily MAC + Tool $D1B + <<< +~InstallFont MAC + PHLW ]1;]2 +_InstallFont MAC + Tool $E1B + <<< +~SetPurgeStat MAC + PHLW ]1;]2 +_SetPurgeStat MAC + Tool $F1B + <<< +~CountFonts MAC + P1SL ]1 + PHW ]2 +_CountFonts MAC + Tool $101B + <<< +~FindFontStats MAC + PHLW ]1;]2 + PHWL ]3;]4 +_FindFontStats MAC + Tool $111B + <<< +~LoadFont MAC + PHLW ]1;]2 + PHWL ]3;]4 +_LoadFont MAC + Tool $121B + <<< +_LoadSysFont MAC + Tool $131B + <<< +~AddFontVar MAC + PHLW ]1;]2 +_AddFontVar MAC + Tool $141B + <<< +~FixFontMenu MAC + PxW ]1;]2;]3 +_FixFontMenu MAC + Tool $151B + <<< +~ChooseFont MAC + P2SL ]1 + PHW ]2 +_ChooseFont MAC + Tool $161B + <<< +~ItemID2FamNum MAC + P1SW ]1 +_ItemID2FamNum MAC + Tool $171B + <<< +~FMSetSysFont MAC + PHL ]1 +_FMSetSysFont MAC + Tool $181B + <<< +~FMGetSysFID MAC + PHS 2 +_FMGetSysFID MAC + Tool $191B + <<< +~FMGetCurFID MAC + PHS 2 +_FMGetCurFID MAC + Tool $1A1B + <<< +~FamNum2ItemID MAC + P1SW ]1 +_FamNum2ItemID MAC + Tool $1B1B + <<< +~InstallWithStats MAC + PHLW ]1;]2 + PHL ]3 +_InstallWithStats MAC + Tool $1C1B + <<< +~qFMStartUp MAC + PHW ]1 + NextDP ]2;$100 + Tool $21B + <<< + diff --git a/Library/GsOs.Macs.s b/Library/GsOs.Macs.s new file mode 100644 index 0000000..1835453 --- /dev/null +++ b/Library/GsOs.Macs.s @@ -0,0 +1,39 @@ +* File: MGSOS +* +* Copyright 1989 by Dave Klimas +* +* IMPORTANT! To use these macros, you must also include the +* label equates as defined in the file E16.GSOS from the TOOL.EQUATES +* directory. +*----------------------------------------------- +* +* xGSOS ;;class 0/1 flag +* +* iGSOS _Create;addr;0 ;this is a class 0 Create call +* +*----------------------------------------------- +* Inline GS/OS call macro + +iGSOS MAC + JSL $E100A8 + DO ]3 + DA ]1.$2000 + ELSE + DA ]1 + FIN + ADRL ]2 + <<< + +*----------------------------------------------- +* Stack GS/OS call macro + +sGSOS MAC + PHL ]2 + DO ]3 + PEA ]1.$2000 + ELSE + PEA ]1 + FIN + JSL $E100B0 + <<< + diff --git a/Library/Hashtool.Macs.s b/Library/Hashtool.Macs.s new file mode 100644 index 0000000..50151f0 --- /dev/null +++ b/Library/Hashtool.Macs.s @@ -0,0 +1,67 @@ +* HashTool Macros +* by Andrew Roughan +* +* 5/3/2002 +* 1/8/2002 - Added md4 calls + +_hashBootInit MAC + Tool $0180 + <<< +_hashStartUp MAC + Tool $0280 + <<< +_hashShutDown MAC + Tool $0380 + <<< +~hashVersion MAC + PHA +_hashVersion MAC + Tool $0480 + <<< +_hashReset MAC + Tool $0580 + <<< +~hashStatus MAC + PHA +_hashStatus MAC + Tool $0680 + <<< +~md5init MAC + PHL ]1 +_md5init MAC + Tool $0980 + <<< +~md5append MAC + PxL ]1;]2;]3 +_md5append MAC + Tool $0A80 + <<< +~md5finish MAC + PxL ]1;]2 +_md5finish MAC + Tool $0B80 + <<< +~md4init MAC + PHL ]1 +_md4init MAC + Tool $0C80 + <<< +~md4append MAC + PxL ]1;]2;]3 +_md4append MAC + Tool $0D80 + <<< +~md4finish MAC + PxL ]1;]2 +_md4finish MAC + Tool $0E80 + <<< + +mdDigestLen EQU 16 + DUM 0 +mdWorkBlk +msglength DS 8 +digest DS mdDigestLen +accumulate DS 64 +mdWorkBlkLen EQU *-mdWorkBlk + DEND diff --git a/Library/Int.Macs.s b/Library/Int.Macs.s new file mode 100644 index 0000000..85f57d8 --- /dev/null +++ b/Library/Int.Macs.s @@ -0,0 +1,221 @@ +* Integer Math macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_IMBootInit MAC + Tool $10B + <<< +_IMStartUp MAC +_IntStartUp MAC + Tool $20B + <<< +_IMShutDown MAC +_IntShutDown MAC + Tool $30B + <<< +~IMVersion MAC + PHA +_IMVersion MAC + Tool $40B + <<< +_IMReset MAC + Tool $50B + <<< +~IMStatus MAC + PHA +_IMStatus MAC + Tool $60B + <<< +~Multiply MAC + PHS 2 + PxW ]1;]2 +_Multiply MAC + Tool $90B + <<< +~SDivide MAC + PHS 2 + PxW ]1;]2 +_SDivide MAC + Tool $A0B + <<< +~UDivide MAC + PHS 2 + PxW ]1;]2 +_UDivide MAC + Tool $B0B + <<< +~LongMul MAC + PHS 4 + PxL ]1;]2 +_LongMul MAC + Tool $C0B + <<< +~LongDivide MAC + PHS 4 + PxL ]1;]2 +_LongDivide MAC + Tool $D0B + <<< +~FixRatio MAC + PHS 2 + PxW ]1;]2 +_FixRatio MAC + Tool $E0B + <<< +~FixMul MAC + PHS 2 + PxL ]1;]2 +_FixMul MAC + Tool $F0B + <<< +~FracMul MAC + PHS 2 + PxL ]1;]2 +_FracMul MAC + Tool $100B + <<< +~FixDiv MAC + PHS 2 + PxL ]1;]2 +_FixDiv MAC + Tool $110B + <<< +~FracDiv MAC + PHS 2 + PxL ]1;]2 +_FracDiv MAC + Tool $120B + <<< +~FixRound MAC + P1SL ]1 +_FixRound MAC + Tool $130B + <<< +~FracSqrt MAC + P2SL ]1 +_FracSqrt MAC + Tool $140B + <<< +~FracCos MAC + P2SL ]1 +_FracCos MAC + Tool $150B + <<< +~FracSin MAC + P2SL ]1 +_FracSin MAC + Tool $160B + <<< +~FixATan2 MAC + PHS 2 + PxL ]1;]2 +_FixATan2 MAC + Tool $170B + <<< +~HiWord MAC + P1SL ]1 +_HiWord MAC + Tool $180B + <<< +~LoWord MAC + P1SL ]1 +_LoWord MAC + Tool $190B + <<< +~Long2Fix MAC + P2SL ]1 +_Long2Fix MAC + Tool $1A0B + <<< +~Fix2Long MAC + P2SL ]1 +_Fix2Long MAC + Tool $1B0B + <<< +~Fix2Frac MAC + P2SL ]1 +_Fix2Frac MAC + Tool $1C0B + <<< +~Frac2Fix MAC + P2SL ]1 +_Frac2Fix MAC + Tool $1D0B + <<< +~Fix2X MAC + PxL ]1;]2 +_Fix2X MAC + Tool $1E0B + <<< +~Frac2X MAC + PxL ]1;]2 +_Frac2X MAC + Tool $1F0B + <<< +~X2Fix MAC + P2SL ]1 +_X2Fix MAC + Tool $200B + <<< +~X2Frac MAC + P2SL ]1 +_X2Frac MAC + Tool $210B + <<< +~Int2Hex MAC + PHW ]1 + PHLW ]2;]3 +_Int2Hex MAC + Tool $220B + <<< +~Long2Hex MAC + PxL ]1;]2 + PHW ]3 +_Long2Hex MAC + Tool $230B + <<< +~Hex2Int MAC + PHA + PHLW ]1;]2 +_Hex2Int MAC + Tool $240B + <<< +~Hex2Long MAC + PHS 2 + PHLW ]1;]2 +_Hex2Long MAC + Tool $250B + <<< +~Int2Dec MAC + PHWL ]1;]2 + PxW ]3;]4 +_Int2Dec MAC + Tool $260B + <<< +~Long2Dec MAC + PxL ]1;]2 + PxW ]3;]4 +_Long2Dec MAC + Tool $270B + <<< +~Dec2Int MAC + P1SL ]1 + PxW ]2;]3 +_Dec2Int MAC + Tool $280B + <<< +~Dec2Long MAC + P2SL ]1 + PxW ]2;]3 +_Dec2Long MAC + Tool $290B + <<< +~HexIt MAC + P2SW ]1 +_HexIt MAC + Tool $2A0B + <<< + diff --git a/Library/Line.Macs.s b/Library/Line.Macs.s new file mode 100644 index 0000000..59443a9 --- /dev/null +++ b/Library/Line.Macs.s @@ -0,0 +1,183 @@ +* LineEdit macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_LEBootInit MAC + Tool $114 + <<< +~LEStartUp MAC + PxW ]1;]2 +_LEStartUp MAC + Tool $214 + <<< +_LEShutDown MAC + Tool $314 + <<< +~LEVersion MAC + PHA +_LEVersion MAC + Tool $414 + <<< +_LEReset MAC + Tool $514 + <<< +~LEStatus MAC + PHA +_LEStatus MAC + Tool $614 + <<< +~LENew MAC + P2SL ]1 + PHLW ]2;]3 +_LENew MAC + Tool $914 + <<< +~LEDispose MAC + PHL ]1 +_LEDispose MAC + Tool $A14 + <<< +~LESetText MAC + PHL ]1 + PHWL ]2;]3 +_LESetText MAC + Tool $B14 + <<< +~LEIdle MAC + PHL ]1 +_LEIdle MAC + Tool $C14 + <<< +~LEClick MAC + PxL ]1;]2 +_LEClick MAC + Tool $D14 + <<< +~LESetSelect MAC + PxW ]1;]2 + PHL ]3 +_LESetSelect MAC + Tool $E14 + <<< +~LEActivate MAC + PHL ]1 +_LEActivate MAC + Tool $F14 + <<< +~LEDeactivate MAC + PHL ]1 +_LEDeactivate MAC + Tool $1014 + <<< +~LEKey MAC + PxW ]1;]2 + PHL ]3 +_LEKey MAC + Tool $1114 + <<< +~LECut MAC + PHL ]1 +_LECut MAC + Tool $1214 + <<< +~LECopy MAC + PHL ]1 +_LECopy MAC + Tool $1314 + <<< +~LEPaste MAC + PHL ]1 +_LEPaste MAC + Tool $1414 + <<< +~LEDelete MAC + PHL ]1 +_LEDelete MAC + Tool $1514 + <<< +~LEInsert MAC + PHL ]1 + PHWL ]2;]3 +_LEInsert MAC + Tool $1614 + <<< +~LEUpdate MAC + PHL ]1 +_LEUpdate MAC + Tool $1714 + <<< +~LETextBox MAC + PHLW ]1;]2 + PHLW ]3;]4 +_LETextBox MAC + Tool $1814 + <<< +_LEFromScrap MAC + Tool $1914 + <<< +_LEToScrap MAC + Tool $1A14 + <<< +~LEScrapHandle MAC + PHS 2 +_LEScrapHandle MAC + Tool $1B14 + <<< +~LEGetScrapLen MAC + PHA +_LEGetScrapLen MAC + Tool $1C14 + <<< +~LESetScrapLen MAC + PHW ]1 +_LESetScrapLen MAC + Tool $1D14 + <<< +~LESetHilite MAC + PxL ]1;]2 +_LESetHilite MAC + Tool $1E14 + <<< +~LESetCaret MAC + PxL ]1;]2 +_LESetCaret MAC + Tool $1F14 + <<< +~LETextBox2 MAC + PHLW ]1;]2 + PHLW ]3;]4 +_LETextBox2 MAC + Tool $2014 + <<< +~LESetJust MAC + PHWL ]1;]2 +_LESetJust MAC + Tool $2114 + <<< +~LEGetTextHand MAC + P2SL ]1 +_LEGetTextHand MAC + Tool $2214 + <<< +~LEGetTextLen MAC + P1SL ]1 +_LEGetTextLen MAC + Tool $2314 + <<< +~GetLEDefProc MAC + PHS 2 +_GetLEDefProc MAC + Tool $2414 + <<< +~qLEStartUp MAC + PHW ]1 + NextDP ]2;$100 + Tool $214 + <<< +_LEClassifyKey MAC + Tool $2514 + <<< + diff --git a/Library/List.Macs.s b/Library/List.Macs.s new file mode 100644 index 0000000..9fe3751 --- /dev/null +++ b/Library/List.Macs.s @@ -0,0 +1,111 @@ +* List Mgr. macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_ListBootInit MAC + Tool $011C + <<< +_ListStartup MAC + Tool $021C + <<< +_ListShutDown MAC + Tool $031C + <<< +~ListVersion MAC + PHA +_ListVersion MAC + Tool $041C + <<< +_ListReset MAC + Tool $051C + <<< +~ListStatus MAC + PHA +_ListStatus MAC + Tool $061C + <<< +~CreateList MAC + PHS 2 + PxL ]1;]2 +_CreateList MAC + Tool $091C + <<< +~SortList MAC + PxL ]1;]2 +_SortList MAC + Tool $0A1C + <<< +~NextMember MAC + PHS 2 + PxL ]1;]2 +_NextMember MAC + Tool $0B1C + <<< +~DrawMember MAC + PxL ]1;]2 +_DrawMember MAC + Tool $0C1C + <<< +~SelectMember MAC + PxL ]1;]2 +_SelectMember MAC + Tool $0D1C + <<< +~GetListDefProc MAC + PHS 2 +_GetListDefProc MAC + Tool $0E1C + <<< +~ResetMember MAC + P2SL ]1 +_ResetMember MAC + Tool $0F1C + <<< +~NewList MAC + PxL ]1;]2 +_NewList MAC + Tool $101C + <<< +~DrawMember2 MAC + PHWL ]1;]2 +_DrawMember2 MAC + Tool $111C + <<< +~NextMember2 MAC + PHA + PHWL ]1;]2 +_NextMember2 MAC + Tool $121C + <<< +~ResetMember2 MAC + P1SL ]1 +_ResetMember2 MAC + Tool $131C + <<< +~SelectMember2 MAC + PHWL ]1;]2 +_SelectMember2 MAC + Tool $141C + <<< +~SortList2 MAC + PxL ]1;]2 +_SortList2 MAC + Tool $151C + <<< +~NewList2 MAC + PHL ]1 + PxW ]2;]3;]4;]5 + PHL ]6 +_NewList2 MAC + Tool $161C + <<< +_ListKey MAC + Tool $171C + <<< +_CompareStrings MAC + Tool $181C + <<< + diff --git a/Library/Load.Macs.s b/Library/Load.Macs.s new file mode 100644 index 0000000..9d96ddd --- /dev/null +++ b/Library/Load.Macs.s @@ -0,0 +1,113 @@ +* Load Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_LoaderInitialization MAC + Tool $111 + <<< +_LoaderStartUp MAC + Tool $211 + <<< +_LoaderShutDown MAC + Tool $311 + <<< +~LoaderVersion MAC + PHA +_LoaderVersion MAC + Tool $411 + <<< +_LoaderReset MAC + Tool $511 + <<< +~LoaderStatus MAC + PHA +_LoaderStatus MAC + Tool $611 + <<< +~InitialLoad MAC + PHS 5 + PHWL ]1;]2 + PHW ]3 +_InitialLoad MAC + Tool $911 + <<< +~InitialLoad2 MAC + PHS 5 + PHWL ]1;]2 + PxW ]3;]4 +_InitialLoad2 MAC + Tool $2011 + <<< +~Restart MAC + PHS 5 + PHW ]1 +_Restart MAC + Tool $A11 + <<< +~LoadSegNum MAC + PHS 2 + PxW ]1;]2;]3 +_LoadSegNum MAC + Tool $B11 + <<< +~UnloadSegNum MAC + PxW ]1;]2;]3 +_UnloadSegNum MAC + Tool $C11 + <<< +~LoadSegName MAC + PHS 4 + PHW ]1 + PxL ]2;]3 +_LoadSegName MAC + Tool $D11 + <<< +~UnloadSeg MAC + PHS 3 + PHL ]1 +_UnloadSeg MAC + Tool $E11 + <<< +~GetLoadSegInfo MAC + PxW ]1;]2;]3 + PHL ]4 +_GetLoadSegInfo MAC + Tool $F11 + <<< +~GetUserID MAC + P1SL ]1 +_GetUserID MAC + Tool $1011 + <<< +~GetUserID2 MAC + P1SL ]1 +_GetUserID2 MAC + Tool $2111 + <<< +~LGetPathname MAC + PHS 2 + PxW ]1;]2 +_LGetPathname MAC + Tool $1111 + <<< +~LGetPathname2 MAC + PHS 2 + PxW ]1;]2 +_LGetPathname2 MAC + Tool $2211 + <<< +~UserShutDown MAC + PHA + PxW ]1;]2 +_UserShutDown MAC + Tool $1211 + <<< +~RenamePathname MAC + PxL ]1;]2 +_RenamePathname MAC + Tool $1311 + <<< + diff --git a/Library/Locator.Macs.s b/Library/Locator.Macs.s new file mode 100644 index 0000000..2d2e891 --- /dev/null +++ b/Library/Locator.Macs.s @@ -0,0 +1,135 @@ +* Tool Locator macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_TLBootInit MAC + Tool $101 + <<< +_TLStartUp MAC + Tool $201 + <<< +_TLShutDown MAC + Tool $301 + <<< +~TLVersion MAC + PHA +_TLVersion MAC + Tool $401 + <<< +_TLReset MAC + Tool $501 + <<< +~TLStatus MAC + PHA +_TLStatus MAC + Tool $601 + <<< +~GetTSPtr MAC + PHS 2 + PxW ]1;]2 +_GetTSPtr MAC + Tool $901 + <<< +~SetTSPtr MAC + PxW ]1;]2 + PHL ]3 +_SetTSPtr MAC + Tool $A01 + <<< +~GetFuncPtr MAC + PHS 2 + PxW ]1;]2 +_GetFuncPtr MAC + Tool $B01 + <<< +~GetWAP MAC + PHS 2 + PxW ]1;]2 +_GetWAP MAC + Tool $C01 + <<< +~SetWAP MAC + PxW ]1;]2 + PHL ]3 +_SetWAP MAC + Tool $D01 + <<< +~LoadTools MAC + PHL ]1 +_LoadTools MAC + Tool $E01 + <<< +~LoadOneTool MAC + PxW ]1;]2 +_LoadOneTool MAC + Tool $F01 + <<< +~UnloadOneTool MAC + PHW ]1 +_UnloadOneTool MAC + Tool $1001 + <<< +~TLMountVolume MAC + PHA + PxW ]1;]2 + PxL ]3;]4;]5;]6 +_TLMountVolume MAC + Tool $1101 + <<< +~TLTextMountVolume MAC + PHA + PxL ]1;]2;]3;]4 +_TLTextMountVolume MAC + Tool $1201 + <<< +~SaveTextState MAC + PHS 2 +_SaveTextState MAC + Tool $1301 + <<< +~RestoreTextState MAC + PHL ]1 +_RestoreTextState MAC + Tool $1401 + <<< +~MessageCenter MAC + PxW ]1;]2 + PHL ]3 +_MessageCenter MAC + Tool $1501 + <<< +_SetDefaultTPT MAC + Tool $1601 + <<< +~MessageByName MAC + PHS 2 + PHWL ]1;]2 + PxW ]3;]4 +_MessageByName MAC + Tool $1701 + <<< +~StartUpTools MAC + PHA + PxW ]1;]2 + PxL ]3;]4 +_StartUpTools MAC + Tool $1801 + <<< +~ShutDownTools MAC + PHWL ]1;]2 +_ShutDownTools MAC + Tool $1901 + <<< +_GetMsgHandle MAC + Tool $1A01 + <<< +_AcceptRequests MAC + Tool $1B01 + <<< +_SendRequest MAC + Tool $1C01 + <<< + diff --git a/Library/Logo.Macs.s b/Library/Logo.Macs.s new file mode 100644 index 0000000..4cd188c --- /dev/null +++ b/Library/Logo.Macs.s @@ -0,0 +1,87 @@ +*----------------------------- +* LoGo's useful tools... +*----------------------------- + +_En8 mac + sec + xce + sep #$30 + <<< + +_En16 mac + clc + xce + rep #$30 + <<< + +_ClrScr mac + ldx #$7ffe + lda #$0000 +]lp stal $e12000,x + stal $012000,x + dex + dex + bpl ]lp + <<< + +_fadeIN mac ; Fait un fondu de l'image + lda ]1 ; A= banc/adrh de l'image + ldy ]2 ; Y= $0000, fondu sur l'image + jsr fadeIN ; $ffff, que sur les palettes + <<< + +_fadeOUT mac ; Efface l'ecran doucement + jsr fadeOUT + <<< + +_File mac ; Charge un fichier + lda ]1 + ldx ]2 + jsr loadFILE + <<< + +_Key mac ; Attend une touche au clavier +]lp ldal $e0bfff + bpl ]lp + stal $e0c010 + <<< + +_Unpack mac ; Decompacte un fichier + lda ]1 ; A= banc/adrh du fichier source + jsr unPACK + <<< + +_wait mac ; Routine d'attente + lda ]1 ; A= duree d'attente (env. 1 seconde) + jsr nowWAIT + eom + +_Write8 mac ; Affiche un message + lda ]1 ; A= adresse de la chaine + ldx ]2 ; X= coordonnee sur l'ecran + ldy ]3 ; Y= banc/adrh ou afficher + jsr Print8 + <<< + +_Write16 mac ; Affiche un message + lda ]1 ; A= adresse de la chaine + ldx ]2 ; X= coordonnee sur l'ecran + ldy ]3 ; Y= banc/adrh ou afficher + jsr Print16 + <<< + +_Reset mac + lda #$51 + sta $0 + PushWord #2 + PushWord #0 + PushWord #0 + PushWord #8 + Tool $0909 + sec + xce + lda #0 + stal $0003f4 + jmp ($fffc) + <<< + diff --git a/Library/Macros.s b/Library/Macros.s new file mode 100644 index 0000000..25e0db5 --- /dev/null +++ b/Library/Macros.s @@ -0,0 +1,571 @@ +*------------------------- +* Macro library +*------------------------- + +INCD MAC ;Two byte INC + INC ]1 + IF MX>1 + BNE NC + INC ]1+1 +NC FIN + <<< + +DECD MAC ;Two byte DEC + IF MX>1 + LDA ]1 + BNE NC + DEC ]1+1 +NC FIN + DEC ]1 + <<< + +MOV MAC + LDA ]1 + STA ]2 + <<< + +MOVD MAC + MOV ]1;]2 + IF MX>1 ;If A is short + IF (=]1 ;Syntax MOVD (ADR1),Y;???? + INY + IF (=]2 ; MOVD (ADR1),Y;(ADR2),Y + MOV ]1;]2 + ELSE ; MOVD (ADR1),Y;ADR2 + MOV ]1;]2+1 + FIN + ELSE + IF (=]2 ;Syntax MOVD ????;(ADR2),Y + INY + IF #=]1 ; MOVD #ADR1;(ADR2),Y + MOV ]1/$100;]2 + ELSE ; MOVD ADR1;(ADR2),Y + MOV ]1+1;]2 + FIN + ELSE ;Syntax MOVD ????;ADR2 + IF #=]1 ; MOVD #ADR1;ADR2 + MOV ]1/$100;]2+1 + ELSE ; MOVD ADR1;ADR2 + MOV ]1+1;]2+1 + FIN + FIN + FIN + FIN + <<< + +LDHI MAC ;For calls from other macs + IF #=]1 + LDA ]1/$100 + ELSE + LDA ]1+1 + FIN + <<< + +ADD MAC + IF #=]2 + IF #=]1 + ERR 1 ;Error if ADD #lab1;#lab2.. + FIN + FIN + CLC + LDA ]1 ;Syntax ADD lab1;lab2;lab3 + ADC ]2 ; or ADD #lab1;lab2;lab3 etc + DO ]0/3 + STA ]3 ;If 3 parms + ELSE ;2 parm cases: + IF #=]2 + STA ]1 ;Syntax ADD lab1;#lab2 + ELSE ;Syntax ADD lab1;lab2 + STA ]2 ; or ADD #lab1;lab2 -> lab2 + FIN + FIN + IF MX>1 ;Following ignored if M long + LDA ]1+1 + IF #=]2 + ADC ]2/$100 + ELSE + ADC ]2+1 + FIN + DO ]0/3 + STA ]3+1 ;If 3 parms + ELSE ;Two parm cases: + IF #=]2 + STA ]1+1 ;Syntax ADD lab1;#lab2 + ELSE ; -> lab1 + STA ]2+1 ;Syntax ADD lab1;lab2 -> lab2 + FIN ; or ADD #lab1;lab2 -> lab2 + FIN + FIN + <<< + +SUB MAC + IF #=]2 + IF #=]1 + ERR 1 ;Error if SUB #lab1;#lab2.. + FIN + FIN + SEC + LDA ]1 ;Syntax SUB lab1;lab2;lab3 + SBC ]2 ; or SUB #lab1;lab2;lab3 etc + DO ]0/3 + STA ]3 ;If 3 parms + ELSE ;Two parm cases: + IF #=]2 + STA ]1 ;Syntax SUB lab1;#lab2 + ELSE ;Syntax SUB lab1;lab2 + STA ]2 ; or SUB #lab1;lab2 -> lab2 + FIN + FIN ;Of 2 parm cases + IF MX>1 ;Rest ignored if M long + LDHI ]1 + IF #=]2 + SBC ]2/$100 ;Case #lab2 + ELSE + SBC ]2+1 ;Case lab2 + FIN + DO ]0/3 + STA ]3+1 ;If 3 parms + ELSE ;Two parm cases: + IF #=]2 + STA ]1+1 ;Syntax SUB lab1;#lab2 + ELSE ; -> lab1 + STA ]2+1 ;Syntax SUB lab1;lab2 -> lab2 + FIN ; or SUB #lab1;lab2 -> lab2 + FIN ;Of 2 parm cases + FIN ;Of M short + <<< + +ADDX MAC + TXA +ADDA MAC + CLC + ADC ]1 + STA ]2 + IF MX>1 + LDHI ]1 + ADC #0 + STA ]2+1 + FIN + <<< + +ADDY MAC + TYA + ADDA ]1;]2 + <<< + +ADDNUM MAC + LDA #]1 + CLC + ADC ]2 + STA ]2 + IF MX>1 + BCC NC + INC ]2+1 +NC FIN + <<< + +SWAP MAC + LDA ]1 + PHA + LDA ]2 + STA ]1 + PLA + STA ]2 + <<< + +COMPARE MAC + LDA ]1 + CMP ]2 + IF MX>1 + LDHI ]1 ;Syntax COMPARE lab1;lab2 + IF #=]2 ; or COMPARE lab1;#lab2 + SBC ]2/$100 + ELSE + SBC ]2+1 + FIN + FIN + <<< + +POKE MAC + MOV #]2;]1 + <<< + +STADR MAC + POKE ]2;]1 + IF MX>1 ;If M is short, do high byte + POKE ]2+1;]1/$100 + FIN + <<< + +*================================================= +* Save and restore registers macros. Recommended +* for use at the start and end of subroutines +* which might be called from unknown status and +* which must set up register lengths. +*------------------------------------------------- + +SAVSTAT MAC ;Save registers & status + PHA + PHY + PHX + PHP + <<< + +RESTORE MAC ;Restore regs & status + PLP ;This must come first + PLX ; so register restores + PLY ; have correct length. + PLA + <<< + +*================================================= +* Conditional branches not available on the 65816: +*------------------------------------------------- + +BLE MAC ;Branch if less than or = + BEQ ]1 + BLT ]1 + <<< + +BGT MAC ;Branch if greater than + BEQ OV + BGE ]1 +OV <<< + +*================================================= +* Conditional long branches. For use when out of +* range of a short branch and branching mechanism +* is wanted to be hidden on the listing. +*------------------------------------------------- + +BRTL MAC ;BRL if less than (long) +BCCL MAC ;BRL if carry clear (long) + BCS OV + BRL ]1 +OV <<< + +BGEL MAC ;BRL if greater or equal (long) +BCSL MAC ;BRL if carry set (long) + BCC OV + BRL ]1 +OV <<< + +BPLL MAC ;BRL if plus (long) + BMI OV + BRL ]1 +OV <<< + +BMIL MAC ;BRL if minus (long) + BPL OV + BRL ]1 +OV <<< + +BEQL MAC ;BRL if equal (long) + BNE OV + BRL ]1 +OV <<< + +BNEL MAC ;BRL if not equal (long) + BEQ OV + BRL ]1 +OV <<< + +BVCL MAC ;BRL if V clear (long) + BVS OV + BRL ]1 +OV <<< + +BVSL MAC ;BRL if V set (long) + BVC OV + BRL ]1 +OV <<< + +BLEL MAC ;BRL if less or equal (long) + BEQ BR + BGE OV +BR BRL ]1 +OV <<< + +BLTL MAC ;BRL if less than (long) + BGE OV + BRL ]1 +OV <<< + +BGTL MAC ;BRL if greater than (long) + BEQ OV + BLT OV +BR BRL ]1 +OV <<< + +*================================================= +* The I/O macros below expect the COUT routine +* to be included or linked in as an external. +* PRINT expects the same of the SENDMSG routine. +* +* (Just declare COUT and SENDMSG as externals +* and include the linker command LIB 5 in the +* linker command file. SENDMSG also requires an +* OUTPUT routine in your source declared as an +* entry. It can be as simple as: +* +* OUTPUT JMP COUT +* +* SENDMSG and COUT are in the LIB directory and +* their source files are in the SOURCE directory. +*------------------------------------------------- + +PRINT MAC ;Syntax PRINT "message" + JSR SENDMSG ; or PRINT 8D8D or + ASC ]1 ; PRINT 8D8D"text"8D"more" + BRK ; etc. + <<< + +OUT MAC + LDA ]1 ;Syntax OUT #"A" + JSR COUT ; or OUT ADDRESS + <<< ; or OUT (PNT),Y etc. + +HOME MAC ;Clear 80 col screen + OUT #"L"&$9F + <<< + +NORMAL MAC ;Set normal text + OUT #"N"&$9F + <<< + +INVERSE MAC ;Set inverse text + OUT #"O"&$9F + <<< + +MOUSEON MAC ;Turn mousetext on + OUT #"["&$9F + INVERSE + <<< + +MOUSEOFF MAC ;Turn mousetext off + OUT #"X"&$9F + NORMAL + <<< + +BELL MAC ;Ring bell + OUT #"G"&$9F + <<< + +CLEOL MAC ;Clear to end of line + OUT #$9D + <<< + +CLEOP MAC ;Clear to end of screen + OUT #$8B + <<< + +OUTCR MAC ;Do carriage return + OUT #$8D + <<< + +GOTOXY MAC ;Pascal output only! + OUT #$1E + LDA ]1 ;X coor (imm or location) + CLC + ADC #' ' + JSR COUT + LDA ]2 ;Y coor (") + CLC + ADC #' ' + JSR COUT + <<< + +CURSXY MAC ;GOTOXY for BASIC output + OUT #"Y"&$9F ;Home cursor + LDX ]2 ;Syntax (both versions): + BEQ H ; CURSXY #55;#10 or +CR OUTCR ; CURSXY XLOC,YLOC etc. + DEX + BNE CR +H IF MX<2 ;If M is long then + SEP %00100000 ; must shorten it + LDA ]1 + STAL $24 + REP %00100000 ; and lengthen on exit. + ELSE ;If M is short then + LDA ]1 ; leave as is + STAL $24 + FIN + <<< + +************************************************** +* APW-Equivalent Macros 1/20/89 * +* For use with APW or ORCA/M source listings. * +* * +************************************************** + +*================================================ + +DP MAC + ADRL ]1 + <<< + +ASL4 MAC + LDA ]1+2 + DO ]0/2 ;If 2 parms then set + LDX ]2 ; X to 2nd parm. + FIN +]A ASL ;Otherwise use X to + ASL ]1 ; decide how many + ADC #0 ; ASL's to do. + DEX + BNE ]A + STA ]1+2 + <<< + +LSR4 MAC + DO ]0/2 ;If 2 parms, then COMPLEMENT + LDA ]2 ; of X must be 2nd parm. + EOR $FFFF + CLC + ADC #1 + TAX + FIN + LDA ]1 +]A LSR + LSR ]1+2 + BCC ]B + ORA #$8000 +]B INX + BNE ]A + STA ]1 + <<< + +DEC4 MAC + IF MX/2-1 ; IF M IS SHORT + ERR 1 ; ERR IF NOT 16-BIT MODE + ELSE + DEC ]1 + BPL ]A + DEC ]1+2 +]A FIN + <<< + +INC4 MAC + IF MX/2-1 ; IF M IS SHORT + ERR 1 ; ERR IF NOT 16-BIT MODE + ELSE + INC ]1 + BNE ]A + INC ]1+2 +]A FIN + <<< + +ADD4 MAC + CLC ;If 3 parms then use + DO ]0/3 ; raw 4 byte addresses. + + IF #=]1 + LDA #<]1 + ELSE ;Make sure we use the + LDA ]1 ; right LDA for data + FIN ; or addresses. + + IF #=]2 + ADC #<]2 + ELSE ;Make sure we use the + ADC ]2 ; right ADC for data + FIN ; or addresses. + + STA ]3 + + IF #=]1 + LDA #^]1 + ELSE ;Make sure we use the + LDA ]1+2 ; right LDA for data + FIN ; or addresses. + + IF #=]2 + ADC #^]2 + ELSE ;Make sure we use the + ADC ]2+2 ; right ADC for data + FIN ; or addresses. + + STA ]3+2 + + ELSE ;If 2 parms then use +; 2 byte Accumulator. + + + IF #=]1 + ADC #<]1 + ELSE ;Make sure we use the + ADC ]1 ; right ADC for data + FIN ; or addresses. + + STA ]2 + + + IF #=]1 + LDA #^]1 + ELSE ;Make sure we use the + LDA ]1+2 ; right LDA for data + FIN ; or addresses. + + ADC #0 + STA ]2+2 + + FIN + <<< + +SUB4 MAC + SEC ;If 3 parms then use + DO ]0/3 ; raw 4 byte addresses. + + + IF #=]1 + LDA #<]1 + ELSE ;Make sure we use the + LDA ]1 ; right LDA for data + FIN ; or addresses. + + IF #=]2 + SBC #<]2 + ELSE ;Make sure we use the + SBC ]2 ; right SBC for data + FIN ; or addresses. + + STA ]3 + + + IF #=]1 + LDA #^]1 + ELSE ;Make sure we use the + LDA ]1+2 ; right LDA for data + FIN ; or addresses. + + IF #=]2 + SBC #^]2 + ELSE ;Make sure we use the + SBC ]2+2 ; right SBC for data + FIN ; or addresses. + + STA ]3+2 + + ELSE + + IF #=]1 + SBC #<]1 + ELSE ;Make sure we use the + SBC ]1 ; right SBC for data + FIN ; or addresses. + + STA ]2 + + IF #=]1 + LDA #^]1 + ELSE ;Make sure we use the + LDA ]1+2 ; right LDA for data + FIN ; or addresses. + + SBC #0 + STA ]2+2 + + FIN + <<< + diff --git a/Library/Male.Macs.s b/Library/Male.Macs.s new file mode 100644 index 0000000..31da52f --- /dev/null +++ b/Library/Male.Macs.s @@ -0,0 +1,26 @@ +* +* Male Voice tool calls +* + +_MaleBootInit mac + Tool $0132 + <<< +_MaleStartUp mac + Tool $0232 + <<< +_MaleShutDown mac + Tool $0332 + <<< +_MaleVersion mac + Tool $0432 + <<< +_MaleReset mac + Tool $0532 + <<< +_MaleStatus mac + Tool $0632 + <<< +_MaleSpeak mac + Tool $0932 + <<< + diff --git a/Library/Media.Macs.s b/Library/Media.Macs.s new file mode 100644 index 0000000..090d387 --- /dev/null +++ b/Library/Media.Macs.s @@ -0,0 +1,137 @@ +* +* Media Controller tool calls +* + +_MCBootInit mac + Tool $0126 + <<< +_MCStartUp mac + Tool $0226 + <<< +_MCShutDown mac + Tool $0326 + <<< +_MCVersion mac + Tool $0426 + <<< +_MCReset mac + Tool $0526 + <<< +_MCStatus mac + Tool $0626 + <<< +_MCGetErrorMsg mac + Tool $0926 + <<< +_MCLoadDriver mac + Tool $0a26 + <<< +_MCUnLoadDriver mac + Tool $0b26 + <<< +_MCTime2Bin mac + Tool $0c26 + <<< +_MCBin2Time mac + Tool $0d26 + <<< +_MCGetTrackTitle mac + Tool $0e26 + <<< +_MCSetTrackTitle mac + Tool $0f26 + <<< +_MCGetProgram mac + Tool $1026 + <<< +_MCSetProgram mac + Tool $1126 + <<< +_MCGetDiscTitle mac + Tool $1226 + <<< +_MCSetDiscTitle mac + Tool $1326 + <<< +_MCDStartUp mac + Tool $1426 + <<< +_MCDShutDown mac + Tool $1526 + <<< +_MCGetFeatures mac + Tool $1626 + <<< +_MCPlay mac + Tool $1726 + <<< +_MCPause mac + Tool $1826 + <<< +_MCSendRawData mac + Tool $1926 + <<< +_MCGetStatus mac + Tool $1a26 + <<< +_MCControl mac + Tool $1b26 + <<< +_MCScan mac + Tool $1c26 + <<< +_MCGetSpeeds mac + Tool $1d26 + <<< +_MCSpeed mac + Tool $1e26 + <<< +_MCStopAt mac + Tool $1f26 + <<< +_MCJog mac + Tool $2026 + <<< +_MCSearchTo mac + Tool $2126 + <<< +_MCSearchDone mac + Tool $2226 + <<< +_MCSearchWait mac + Tool $2326 + <<< +_MCGetPosition mac + Tool $2426 + <<< +_MCSetAudio mac + Tool $2526 + <<< +_MCGetTimes mac + Tool $2626 + <<< +_MCGetDiscTOC mac + Tool $2726 + <<< +_MCGetDiscID mac + Tool $2826 + <<< +_MCGetNoTracks mac + Tool $2926 + <<< +_MCRecord mac + Tool $2a26 + <<< +_MCStop mac + Tool $2b26 + <<< +_MCWaitRawData mac + Tool $2c26 + <<< +_MCGetName mac + Tool $2d26 + <<< +_MCSetVolume mac + Tool $2e26 + <<< + diff --git a/Library/Mem.Macs.s b/Library/Mem.Macs.s new file mode 100644 index 0000000..5d2b7d5 --- /dev/null +++ b/Library/Mem.Macs.s @@ -0,0 +1,179 @@ +* Memory Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_MMBootInit MAC + Tool $102 + <<< +~MMStartUp MAC + PHA +_MMStartUp MAC + Tool $202 + <<< +~MMShutDown MAC + PHW ]1 +_MMShutDown MAC + Tool $302 + <<< +~MMVersion MAC + PHA +_MMVersion MAC + Tool $402 + <<< +_MMReset MAC + Tool $502 + <<< +~MMStatus MAC + PHA +_MMStatus MAC + Tool $602 + <<< +~NewHandle MAC + P2SL ]1 + PxW ]2;]3 + PHL ]4 +_NewHandle MAC + Tool $902 + <<< +~ReallocHandle MAC + PHLW ]1;]2 + PHWL ]3;]4 + PHL ]5 +_ReallocHandle MAC + Tool $A02 + <<< +~RestoreHandle MAC + PHL ]1 +_RestoreHandle MAC + Tool $B02 + <<< +~AddToOOMQueue MAC + PHL ]1 +_AddToOOMQueue MAC + Tool $C02 + <<< +~DeleteFromOOMQueue MAC + PHL ]1 +_DeleteFromOOMQueue MAC + Tool $D02 + <<< +~DisposeHandle MAC + PHL ]1 +_DisposeHandle MAC + Tool $1002 + <<< +~DisposeAll MAC + PHW ]1 +_DisposeAll MAC + Tool $1102 + <<< +~PurgeHandle MAC + PHL ]1 +_PurgeHandle MAC + Tool $1202 + <<< +~PurgeAll MAC + PHW ]1 +_PurgeAll MAC + Tool $1302 + <<< +~GetHandleSize MAC + P2SL ]1 +_GetHandleSize MAC + Tool $1802 + <<< +~SetHandleSize MAC + PxL ]1;]2 +_SetHandleSize MAC + Tool $1902 + <<< +~FindHandle MAC + P2SL ]1 +_FindHandle MAC + Tool $1A02 + <<< +~FreeMem MAC + PHS 2 +_FreeMem MAC + Tool $1B02 + <<< +~MaxBlock MAC + PHS 2 +_MaxBlock MAC + Tool $1C02 + <<< +~TotalMem MAC + PHS 2 +_TotalMem MAC + Tool $1D02 + <<< +~CheckHandle MAC + PHL ]1 +_CheckHandle MAC + Tool $1E02 + <<< +_CompactMem MAC + Tool $1F02 + <<< +~HLock MAC + PHL ]1 +_HLock MAC + Tool $2002 + <<< +~HLockAll MAC + PHW ]1 +_HLockAll MAC + Tool $2102 + <<< +~HUnlock MAC + PHL ]1 +_HUnlock MAC + Tool $2202 + <<< +~HUnlockAll MAC + PHW ]1 +_HUnlockAll MAC + Tool $2302 + <<< +~SetPurge MAC + PHWL ]1;]2 +_SetPurge MAC + Tool $2402 + <<< +~SetPurgeAll MAC + PxW ]1;]2 +_SetPurgeAll MAC + Tool $2502 + <<< +~PtrToHand MAC + PxL ]1;]2;]3 +_PtrToHand MAC + Tool $2802 + <<< +~HandToPtr MAC + PxL ]1;]2;]3 +_HandToPtr MAC + Tool $2902 + <<< +~HandToHand MAC + PxL ]1;]2;3 +_HandToHand MAC + Tool $2A02 + <<< +~BlockMove MAC + PxL ]1;]2;]3 +_BlockMove MAC + Tool $2B02 + <<< +~RealFreeMem MAC + PHS 2 +_RealFreeMem MAC + Tool $2F02 + <<< +_SetHandleID MAC + Tool $3002 + <<< + diff --git a/Library/Menu.Macs.s b/Library/Menu.Macs.s new file mode 100644 index 0000000..3c87e62 --- /dev/null +++ b/Library/Menu.Macs.s @@ -0,0 +1,372 @@ +* Menu Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_MenuBootInit MAC + Tool $10F + <<< +~MenuStartUp MAC + PxW ]1;]2 +_MenuStartUp MAC + Tool $20F + <<< +_MenuShutDown MAC + Tool $30F + <<< +~MenuVersion MAC + PHA +_MenuVersion MAC + Tool $40F + <<< +_MenuReset MAC + Tool $50F + <<< +~MenuStatus MAC + PHA +_MenuStatus MAC + Tool $60F + <<< +~MenuKey MAC + PxL ]1;]2 +_MenuKey MAC + Tool $90F + <<< +~GetMenuBar MAC + PHS 2 +_GetMenuBar MAC + Tool $A0F + <<< +~MenuRefresh MAC + PHL ]1 +_MenuRefresh MAC + Tool $B0F + <<< +_FlashMenuBar MAC + Tool $C0F + <<< +~InsertMenu MAC + PHLW ]1;]2 +_InsertMenu MAC + Tool $D0F + <<< +~DeleteMenu MAC + PHW ]1 +_DeleteMenu MAC + Tool $E0F + <<< +~InsertMItem MAC + PHL ]1 + PxW ]2;]3 +_InsertMItem MAC + Tool $F0F + <<< +~DeleteMItem MAC + PHW ]1 +_DeleteMItem MAC + Tool $100F + <<< +~GetSysBar MAC + PHS 2 +_GetSysBar MAC + Tool $110F + <<< +~SetSysBar MAC + PHL ]1 +_SetSysBar MAC + Tool $120F + <<< +~FixMenuBar MAC + PHA +_FixMenuBar MAC + Tool $130F + <<< +~CountMItems MAC + P1SW ]1 +_CountMItems MAC + Tool $140F + <<< +~NewMenuBar MAC + P2SL ]1 +_NewMenuBar MAC + Tool $150F + <<< +~GetMHandle MAC + P2SW ]1 +_GetMHandle MAC + Tool $160F + <<< +~SetBarColors MAC + PxW ]1;]2;]3 +_SetBarColors MAC + Tool $170F + <<< +~GetBarColors MAC + PHS 2 +_GetBarColors MAC + Tool $180F + <<< +~SetMTitleStart MAC + PHW ]1 +_SetMTitleStart MAC + Tool $190F + <<< +~GetMTitleStart MAC + PHA +_GetMTitleStart MAC + Tool $1A0F + <<< +~GetMenuMgrPort MAC + PHS 2 +_GetMenuMgrPort MAC + Tool $1B0F + <<< +~CalcMenuSize MAC + PxW ]1;]2;]3 +_CalcMenuSize MAC + Tool $1C0F + <<< +~SetMTitleWidth MAC + PxW ]1;]2 +_SetMTitleWidth MAC + Tool $1D0F + <<< +~GetMTitleWidth MAC + P1SW ]1 +_GetMTitleWidth MAC + Tool $1E0F + <<< +~SetMenuFlag MAC + PxW ]1;]2 +_SetMenuFlag MAC + Tool $1F0F + <<< +~GetMenuFlag MAC + P1SW ]1 +_GetMenuFlag MAC + Tool $200F + <<< +~SetMenuTitle MAC + PHLW ]1;]2 +_SetMenuTitle MAC + Tool $210F + <<< +~GetMenuTitle MAC + P2SW ]1 +_GetMenuTitle MAC + Tool $220F + <<< +~MenuGlobal MAC + P1SW ]1 +_MenuGlobal MAC + Tool $230F + <<< +~SetMItem MAC + PHLW ]1;]2 +_SetMItem MAC + Tool $240F + <<< +~GetMItem MAC + PHLW ]1;]2 +_GetMItem MAC + Tool $250F + <<< +~SetMItemFlag MAC + PxW ]1;]2 +_SetMItemFlag MAC + Tool $260F + <<< +~GetMItemFlag MAC + P1SW ]1 +_GetMItemFlag MAC + Tool $270F + <<< +~SetMItemBlink MAC + PHW ]1 +_SetMItemBlink MAC + Tool $280F + <<< +_MenuNewRes MAC + Tool $290F + <<< +_DrawMenuBar MAC + Tool $2A0F + <<< +~MenuSelect MAC + PxL ]1;]2 +_MenuSelect MAC + Tool $2B0F + <<< +~HiliteMenu MAC + PxW ]1;]2 +_HiliteMenu MAC + Tool $2C0F + <<< +~NewMenu MAC + P2SL ]1 +_NewMenu MAC + Tool $2D0F + <<< +~DisposeMenu MAC + PHL ]1 +_DisposeMenu MAC + Tool $2E0F + <<< +_InitPalette MAC + Tool $2F0F + <<< +~EnableMItem MAC + PHW ]1 +_EnableMItem MAC + Tool $300F + <<< +~DisableMItem MAC + PHW ]1 +_DisableMItem MAC + Tool $310F + <<< +~CheckMItem MAC + PxW ]1;]2 +_CheckMItem MAC + Tool $320F + <<< +~SetMItemMark MAC + PxW ]1;]2 +_SetMItemMark MAC + Tool $330F + <<< +~GetMItemMark MAC + P1SW ]1 +_GetMItemMark MAC + Tool $340F + <<< +~SetMItemStyle MAC + PxW ]1;]2 +_SetMItemStyle MAC + Tool $350F + <<< +~GetMItemStyle MAC + P1SW ]1 +_GetMItemStyle MAC + Tool $360F + <<< +~SetMenuID MAC + PxW ]1;]2 +_SetMenuID MAC + Tool $370F + <<< +~SetMItemID MAC + PxW ]1;]2 +_SetMItemID MAC + Tool $380F + <<< +~SetMenuBar MAC + PHL ]1 +_SetMenuBar MAC + Tool $390F + <<< +~SetMItemName MAC + PHLW ]1;]2 +_SetMItemName MAC + Tool $3A0F + <<< +~GetPopUpDefProc MAC + PHS 2 +_GetPopUpDefProc MAC + Tool $3B0F + <<< +~PopUpMenuSelect MAC + PHA + PxW ]1;]2;]3;]4 + PHL ]5 +_PopUpMenuSelect MAC + Tool $3C0F + <<< +~DrawPopUp MAC + PxW ]1;]2;]3;]4 + PxW ]5;]6;]7 +_DrawPopUp MAC + Tool $3D0F + <<< +~NewMenu2 MAC + P2SW ]1 + PHL ]2 +_NewMenu2 MAC + Tool $3E0F + <<< +~InsertMItem2 MAC + PHWL ]1;]2 + PxW ]3;]4 +_InsertMItem2 MAC + Tool $3F0F + <<< +~SetMenuTitle2 MAC + PHWL ]1;]2 + PHW ]3 +_SetMenuTitle2 MAC + Tool $400F + <<< +~SetMItem2 MAC + PHWL ]1;]2 + PHW ]3 +_SetMItem2 MAC + Tool $410F + <<< +~SetMItemName2 MAC + PHWL ]1;]2 + PHW ]3 +_SetMItemName2 MAC + Tool $420F + <<< +~NewMenuBar2 MAC + P2SW ]1 + PxL ]2;]3 +_NewMenuBar2 MAC + Tool $430F + <<< +_HideMenuBar MAC + Tool $450F + <<< +_ShowMenuBar MAC + Tool $460F + <<< +_SetMItemIcon MAC + Tool $470F + <<< +_GetMItemIcon MAC + Tool $480F + <<< +_SetMItemStruct MAC + Tool $490F + <<< +_GetMItemStruct MAC + Tool $4A0F + <<< +_RemoveMItemStruct MAC + Tool $4B0F + <<< +_GetMItemFlag2 MAC + Tool $4C0F + <<< +_SetMItemFlag2 MAC + Tool $4D0F + <<< +_GetMItemBlink MAC + Tool $4F0F + <<< +_InsertPathMItems MAC + Tool $500F + <<< +~qMenuStartUp MAC + PHW ]1 + NextDP ]2;$100 + Tool $20F + <<< +~qNewMenu MAC + ~NewMenu ]1 + PHW #0 + _InsertMenu + <<< + diff --git a/Library/Midi.Macs.s b/Library/Midi.Macs.s new file mode 100644 index 0000000..147dd4c --- /dev/null +++ b/Library/Midi.Macs.s @@ -0,0 +1,79 @@ +* MIDI tool macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; + +_MidiBootInit MAC + Tool $120 + <<< +~MidiStartUp MAC + PxW ]1;]2 +_MidiStartUp MAC + Tool $220 + <<< +_MidiShutDown MAC + Tool $320 + <<< +~MidiVersion MAC + PHA +_MidiVersion MAC + Tool $420 + <<< +_MidiReset MAC + Tool $520 + <<< +~MidiStatus MAC + PHA +_MidiStatus MAC + Tool $620 + <<< +~MidiControl MAC + PHWL ]1;]2 +_MidiControl MAC + Tool $920 + <<< +~MidiDevice MAC + PHWL ]1;]2 +_MidiDevice MAC + Tool $A20 + <<< +~MidiClock MAC + PHWL ]1;]2 +_MidiClock MAC + Tool $B20 + <<< +~MidiInfo MAC + P2SW ]1 +_MidiInfo MAC + Tool $C20 + <<< +~MidiReadPacket MAC + P1SL ]1 + PHW ]2 +_MidiReadPacket MAC + Tool $D20 + <<< +~MidiWritePacket MAC + P1SL ]1 +_MidiWritePacket MAC + Tool $E20 + <<< +_MidiRecordSeq MAC + Tool $F20 + <<< +_MidiStopRecord MAC + Tool $1020 + <<< +_MidiPlaySeq MAC + Tool $1120 + <<< +_MidiStopPlay MAC + Tool $1220 + <<< +_MidiConvert MAC + Tool $1320 + <<< + diff --git a/Library/MidiSyn.Macs.s b/Library/MidiSyn.Macs.s new file mode 100644 index 0000000..01950a1 --- /dev/null +++ b/Library/MidiSyn.Macs.s @@ -0,0 +1,119 @@ +* +* Midi Synth tool calls +* + +_MSBootInit mac + Tool $0123 + <<< +_MSStartUp mac + Tool $0223 + <<< +_MSShutDown mac + Tool $0323 + <<< +_MSVersion mac + Tool $0423 + <<< +_MSReset mac + Tool $0523 + <<< +_MSStatus mac + Tool $0623 + <<< +_SetBasicChannel mac + Tool $0923 + <<< +_SetMIDIMode mac + Tool $0a23 + <<< +_PlayNote mac + Tool $0b23 + <<< +_StopNote mac + Tool $0c23 + <<< +_KillAllNotes mac + Tool $0d23 + <<< +_SetRecTrack mac + Tool $0e23 + <<< +_SetPlayTrack mac + Tool $0f23 + <<< +_TrackToChannel mac + Tool $1023 + <<< +_Locate mac + Tool $1123 + <<< +_SetVelComp mac + Tool $1223 + <<< +_SetMIDIPort mac + Tool $1323 + <<< +_SetInstrument mac + Tool $1423 + <<< +_SeqPlayer mac + Tool $1523 + <<< +_SetTempo mac + Tool $1623 + <<< +_SetCallBack mac + Tool $1723 + <<< +_SysExOut mac + Tool $1823 + <<< +_SetBeat mac + Tool $1923 + <<< +_MIDIMessage mac + Tool $1a23 + <<< +_LocateEnd mac + Tool $1b23 + <<< +_Merge mac + Tool $1c23 + <<< +_DeleteTrack mac + Tool $1d23 + <<< +_SetMetro mac + Tool $1e23 + <<< +_GetMSData mac + Tool $1f23 + <<< +_ConvertToTime mac + Tool $2023 + <<< +_ConvertToMeasure mac + Tool $2123 + <<< +_MSSuspend mac + Tool $2223 + <<< +_MSResume mac + Tool $2323 + <<< +_SetTuningTable mac + Tool $2423 + <<< +_GetTuningTable mac + Tool $2523 + <<< +_SetTrackOut mac + Tool $2623 + <<< +_InitMIDIDriver mac + Tool $2723 + <<< +_RemoveMIDIDriver mac + Tool $2823 + <<< + diff --git a/Library/Misc.Macs.s b/Library/Misc.Macs.s new file mode 100644 index 0000000..76e0b62 --- /dev/null +++ b/Library/Misc.Macs.s @@ -0,0 +1,278 @@ +* Misc Tool macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_MTBootInit MAC + Tool $103 + <<< +_MTStartUp MAC + Tool $203 + <<< +_MTShutDown MAC + Tool $303 + <<< +~MTVersion MAC + PHA +_MTVersion MAC + Tool $403 + <<< +_MTReset MAC + Tool $503 + <<< +~MTStatus MAC + PHA +_MTStatus MAC + Tool $603 + <<< +~WriteBRam MAC + PHL ]1 +_WriteBRam MAC + Tool $903 + <<< +~ReadBRam MAC + PHL ]1 +_ReadBRam MAC + Tool $A03 + <<< +~WriteBParam MAC + PxW ]1;]2 +_WriteBParam MAC + Tool $B03 + <<< +~ReadBParam MAC + P1SW ]1 +_ReadBParam MAC + Tool $C03 + <<< +~ReadTimeHex MAC + PHS 4 +_ReadTimeHex MAC + Tool $D03 + <<< +~WriteTimeHex MAC + PxW ]1;]2;]3 +_WriteTimeHex MAC + Tool $E03 + <<< +~ReadAsciiTime MAC + PHL ]1 +_ReadAsciiTime MAC + Tool $F03 + <<< +~SetVector MAC + PHWL ]1;]2 +_SetVector MAC + Tool $1003 + <<< +~GetVector MAC + P2SW ]1 +_GetVector MAC + Tool $1103 + <<< +~SetHeartBeat MAC + PHL ]1 +_SetHeartBeat MAC + Tool $1203 + <<< +~DelHeartBeat MAC + PHL ]1 +_DelHeartBeat MAC + Tool $1303 + <<< +_ClrHeartBeat MAC + Tool $1403 + <<< +~SysFailMgr MAC + PHWL ]1;]2 +_SysFailMgr MAC + Tool $1503 + <<< +~GetAddr MAC + P2SW ]1 +_GetAddr MAC + Tool $1603 + <<< +~ReadMouse MAC + PHS 3 +_ReadMouse MAC + Tool $1703 + <<< +~InitMouse MAC + PHW ]1 +_InitMouse MAC + Tool $1803 + <<< +~SetMouse MAC + PHW ]1 +_SetMouse MAC + Tool $1903 + <<< +_HomeMouse MAC + Tool $1A03 + <<< +_ClearMouse MAC + Tool $1B03 + <<< +~ClampMouse MAC + PxW ]1;]2;]3;]4 +_ClampMouse MAC + Tool $1C03 + <<< +~GetMouseClamp MAC + PHS 4 +_GetMouseClamp MAC + Tool $1D03 + <<< +~PosMouse MAC + PxW ]1;]2 +_PosMouse MAC + Tool $1E03 + <<< +~ServeMouse MAC + PHA +_ServeMouse MAC + Tool $1F03 + <<< +~GetNewID MAC + P1SW ]1 +_GetNewID MAC + Tool $2003 + <<< +~DeleteID MAC + PHW ]1 +_DeleteID MAC + Tool $2103 + <<< +~StatusID MAC + PHW ]1 +_StatusID MAC + Tool $2203 + <<< +~IntSource MAC + PHW ]1 +_IntSource MAC + Tool $2303 + <<< +~FWEntry MAC + PHS 4 + PxW ]1;]2;]3;]4 +_FWEntry MAC + Tool $2403 + <<< +~GetTick MAC + PHS 2 +_GetTick MAC + Tool $2503 + <<< +~PackBytes MAC + P1SL ]1 + PxL ]2;]3 + PHW ]4 +_PackBytes MAC + Tool $2603 + <<< +~UnPackBytes MAC + P1SL ]1 + PHW ]2 + PxL ]3;]4 +_UnPackBytes MAC + Tool $2703 + <<< +~Munger MAC + P1SL ]1 + PxL ]2;]3 + PHWL ]4;]5 + PHWL ]6;]7 +_Munger MAC + Tool $2803 + <<< +~GetIRQEnable MAC + PHA +_GetIRQEnable MAC + Tool $2903 + <<< +~SetAbsClamp MAC + PxW ]1;]2;]3;]4 +_SetAbsClamp MAC + Tool $2A03 + <<< +~GetAbsClamp MAC + PHS 4 +_GetAbsClamp MAC + Tool $2B03 + <<< +_SysBeep MAC + Tool $2C03 + <<< +~AddToQueue MAC + PxL ]1;]2 +_AddToQueue MAC + Tool $2E03 + <<< +~DeleteFromQueue MAC + PxL ]1;]2 +_DeleteFromQueue MAC + Tool $2F03 + <<< +~SetInterruptState MAC + PHLW ]1;]2 +_SetInterruptState MAC + Tool $3003 + <<< +~GetInterruptState MAC + PHLW ]1;]2 +_GetInterruptState MAC + Tool $3103 + <<< +~GetIntStateRecSize MAC + PHA +_GetIntStateRecSize MAC + Tool $3203 + <<< +~ReadMouse2 MAC + PHS 3 +_ReadMouse2 MAC + Tool $3303 + <<< +~GetCodeResConverter MAC + PHS 2 +_GetCodeResConverter MAC + Tool $3403 + <<< +_GetROMResource MAC ;private + Tool $3503 + <<< +_ReleaseROMResource MAC ;private + Tool $3603 + <<< +_ConvSeconds MAC + Tool $3703 + <<< +_SysBeep2 MAC + Tool $3803 + <<< +_VersionString MAC + Tool $3903 + <<< +_WaitUntil MAC + Tool $3A03 + <<< +_StringToText MAC + Tool $3B03 + <<< +_ShowBootInfo MAC + Tool $3C03 + <<< +_ScanDevices MAC + Tool $3D03 + <<< +_AlertMessage MAC + Tool $3E03 + <<< +_DoSysPrefs MAC + Tool $3F03 + <<< + diff --git a/Library/NoteSeq.Macs.s b/Library/NoteSeq.Macs.s new file mode 100644 index 0000000..facd288 --- /dev/null +++ b/Library/NoteSeq.Macs.s @@ -0,0 +1,89 @@ +* Note sequencer macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_SeqBootInit MAC + Tool $011A + <<< +~SeqStartUp MAC + PxW ]1;]2;]3;]4 +_SeqStartUp MAC + Tool $021A + <<< +_SeqShutDown MAC + Tool $031A + <<< +~SeqVersion MAC + PHA +_SeqVersion MAC + Tool $041A + <<< +_SeqReset MAC + Tool $051A + <<< +~SeqStatus MAC + PHA +_SeqStatus MAC + Tool $061A + <<< +~SetIncr MAC + PHW ]1 +_SetIncr MAC + Tool $091A + <<< +~ClearIncr MAC + PHA +_ClearIncr MAC + Tool $0A1A + <<< +~GetTimer MAC + PHA +_GetTimer MAC + Tool $0B1A + <<< +~GetLoc MAC + PHS 3 +_GetLoc MAC + Tool $0C1A + <<< +_SeqAllNotesOff MAC + Tool $0D1A + <<< +~SetTrkInfo MAC + PxW ]1;]2;]3 +_SetTrkInfo MAC + Tool $0E1A + <<< +~StartSeq MAC + PxL ]1;]2;]3 +_StartSeq MAC + Tool $0F1A + <<< +_StepSeq MAC + Tool $101A + <<< +~StopSeq MAC + PHW ]1 +_StopSeq MAC + Tool $111A + <<< +~SetInstTable MAC + PHL ]1 +_SetInstTable MAC + Tool $121A + <<< +_StartInts MAC + Tool $131A + <<< +_StopInts MAC + Tool $141A + <<< +~StartSeqRel MAC + PxL ]1;]2;]3 +_StartSeqRel MAC + Tool $151A + <<< + diff --git a/Library/NoteSyn.Macs.s b/Library/NoteSyn.Macs.s new file mode 100644 index 0000000..af201c3 --- /dev/null +++ b/Library/NoteSyn.Macs.s @@ -0,0 +1,66 @@ +* Note synthesizer macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_NSBootInit MAC + Tool $119 + <<< +~NSStartUp MAC + PHWL ]1;]2 +_NSStartUp MAC + Tool $219 + <<< +_NSShutDown MAC + Tool $319 + <<< +~NSVersion MAC + PHA +_NSVersion MAC + Tool $419 + <<< +_NSReset MAC + Tool $519 + <<< +~NSStatus MAC + PHA +_NSStatus MAC + Tool $619 + <<< +~AllocGen MAC + P1SW ]1 +_AllocGen MAC + Tool $919 + <<< +~DeallocGen MAC + PHW ]1 +_DeallocGen MAC + Tool $A19 + <<< +~NoteOn MAC + PxW ]1;]2;]3 + PHL ]4 +_NoteOn MAC + Tool $B19 + <<< +~NoteOff MAC + PxW ]1;]2 +_NoteOff MAC + Tool $C19 + <<< +_AllNotesOff MAC + Tool $D19 + <<< +~NSSetUpdateRate MAC + P1SW ]1 +_NSSetUpdateRate MAC + Tool $E19 + <<< +~NSSetUserUpdateRtn MAC + P2SL ]1 +_NSSetUserUpdateRtn MAC + Tool $F19 + <<< + diff --git a/Library/Print.Macs.s b/Library/Print.Macs.s new file mode 100644 index 0000000..eb65d3a --- /dev/null +++ b/Library/Print.Macs.s @@ -0,0 +1,220 @@ +* Print Mgr. macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_PMBootInit MAC + Tool $0113 + <<< +~PMStartUp MAC + PxW ]1;]2 +_PMStartUp MAC + Tool $0213 + <<< +_PMShutDown MAC + Tool $0313 + <<< +~PMVersion MAC + PHA +_PMVersion MAC + Tool $0413 + <<< +_PMReset MAC + Tool $0513 + <<< +~PMStatus MAC + PHA +_PMStatus MAC + Tool $0613 + <<< +~PrDefault MAC + PHL ]1 +_PrDefault MAC + Tool $0913 + <<< +~PrValidate MAC + P1SL ]1 +_PrValidate MAC + Tool $0A13 + <<< +~PrStlDialog MAC + P1SL ]1 +_PrStlDialog MAC + Tool $0B13 + <<< +~PrJobDialog MAC + P1SL ]1 +_PrJobDialog MAC + Tool $0C13 + <<< +~PrPixelMap MAC + PxL ]1;]2 + PHW ]3 +_PrPixelMap MAC + Tool $0D13 + <<< +~PrOpenDoc MAC + P2SL ]1 + PHL ]2 +_PrOpenDoc MAC + Tool $0E13 + <<< +~PrCloseDoc MAC + PHL ]1 +_PrCloseDoc MAC + Tool $0F13 + <<< +~PrOpenPage MAC + PxL ]1;]2 +_PrOpenPage MAC + Tool $1013 + <<< +~PrClosePage MAC + PHL ]1 +_PrClosePage MAC + Tool $1113 + <<< +~PrPicFile MAC + PxL ]1;]2;]3 +_PrPicFile MAC + Tool $1213 + <<< +_PrControl MAC + Tool $1313 + <<< +~PrError MAC + PHA +_PrError MAC + Tool $1413 + <<< +~PrSetError MAC + PHW ]1 +_PrSetError MAC + Tool $1513 + <<< +~PrChoosePrinter MAC + PHA +_PrChoosePrinter MAC + Tool $1613 + <<< +_GetDeviceName MAC + Tool $1703 + <<< +~PrGetPrinterSpecs MAC + PHS 2 +_PrGetPrinterSpecs MAC + Tool $1813 + <<< +_PrDevPrChanged MAC + Tool $1913 + <<< +_PrDevStartup MAC + Tool $1A13 + <<< +_PrDevShutDown MAC + Tool $1B13 + <<< +_PrDevOpen MAC + Tool $1C13 + <<< +_PrDevRead MAC + Tool $1D13 + <<< +_PrDevWrite MAC + Tool $1E13 + <<< +_PrDevClose MAC + Tool $1F13 + <<< +_PrDevStatus MAC + Tool $2013 + <<< +_PrDevAsyncRead MAC + Tool $2113 + <<< +_PrDevWriteBackground MAC + Tool $2213 + <<< +~PrDriverVer MAC + PHA +_PrDriverVer MAC + Tool $2313 + <<< +~PrPortVer MAC + PHA +_PrPortVer MAC + Tool $2413 + <<< +~PrGetZoneName MAC + PHS 2 +_PrGetZoneName MAC + Tool $2513 + <<< +~PrGetPrinterDvrName MAC + PHS 2 +_PrGetPrinterDvrName MAC + Tool $2813 + <<< +~PrGetPortDvrName MAC + PHS 2 +_PrGetPortDvrName MAC + Tool $2913 + <<< +~PrGetUserName MAC + PHS 2 +_PrGetUserName MAC + Tool $2A13 + <<< +~PrGetNetworkName MAC + PHS 2 +_PrGetNetworkName MAC + Tool $2B13 + <<< +_PrDevIsItSafe MAC + Tool $3013 + <<< +_GetZoneList MAC + Tool $3113 + <<< +_GetMyZone MAC + Tool $3213 + <<< +_GetPrinterList MAC + Tool $3313 + <<< +~PMUnloadDriver MAC + PHW ]1 +_PMUnloadDriver MAC + Tool $3413 + <<< +~PMLoadDriver MAC + PHW ]1 +_PMLoadDriver MAC + Tool $3513 + <<< +~PrGetDocName MAC + PHS 2 +_PrGetDocName MAC + Tool $3613 + <<< +~PrSetDocName MAC + PHL ]1 +_PrSetDocName MAC + Tool $3713 + <<< +~PrGetPgOrientation MAC + P1SL ]1 +_PrGetPgOrientation MAC + Tool $3813 + <<< +~qPMStartUp MAC + PHW ]1 + CLC + LDA ]2 + ADC ]NextDP + PHA + Tool $0213 + <<< + diff --git a/Library/Qd.Macs.s b/Library/Qd.Macs.s new file mode 100644 index 0000000..08ecdba --- /dev/null +++ b/Library/Qd.Macs.s @@ -0,0 +1,1102 @@ +* QuickDraw II macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_QDBootInit MAC + Tool $104 + <<< +~QDStartUp MAC + PxW ]1;]2;]3;]4 +_QDStartUp MAC + Tool $204 + <<< +_QDShutDown MAC + Tool $304 + <<< +~QDVersion MAC + PHA +_QDVersion MAC + Tool $404 + <<< +_QDReset MAC + Tool $504 + <<< +~QDStatus MAC + PHA +_QDStatus MAC + Tool $604 + <<< +~GetAddress MAC + P2SW ]1 +_GetAddress MAC + Tool $904 + <<< +_GrafOn MAC + Tool $A04 + <<< +_GrafOff MAC + Tool $B04 + <<< +~GetStandardSCB MAC + PHA +_GetStandardSCB MAC + Tool $C04 + <<< +~InitColorTable MAC + PHL ]1 +_InitColorTable MAC + Tool $D04 + <<< +~SetColorTable MAC + PHWL ]1;]2 +_SetColorTable MAC + Tool $E04 + <<< +~GetColorTable MAC + PHWL ]1;]2 +_GetColorTable MAC + Tool $F04 + <<< +~SetColorEntry MAC + PxW ]1;]2;]3 +_SetColorEntry MAC + Tool $1004 + <<< +~GetColorEntry MAC + PHA + PxW ]1;]2 +_GetColorEntry MAC + Tool $1104 + <<< +~SetSCB MAC + PxW ]1;]2 +_SetSCB MAC + Tool $1204 + <<< +~GetSCB MAC + P1SW ]1 +_GetSCB MAC + Tool $1304 + <<< +~SetAllSCBs MAC + PHW ]1 +_SetAllSCBs MAC + Tool $1404 + <<< +~ClearScreen MAC + PHW ]1 +_ClearScreen MAC + Tool $1504 + <<< +~SetMasterSCB MAC + PHW ]1 +_SetMasterSCB MAC + Tool $1604 + <<< +~GetMasterSCB MAC + PHA +_GetMasterSCB MAC + Tool $1704 + <<< +~OpenPort MAC + PHL ]1 +_OpenPort MAC + Tool $1804 + <<< +~InitPort MAC + PHL ]1 +_InitPort MAC + Tool $1904 + <<< +~ClosePort MAC + PHL ]1 +_ClosePort MAC + Tool $1A04 + <<< +~SetPort MAC + PHL ]1 +_SetPort MAC + Tool $1B04 + <<< +~GetPort MAC + PHS 2 +_GetPort MAC + Tool $1C04 + <<< +~SetPortLoc MAC + PHL ]1 +_SetPortLoc MAC + Tool $1D04 + <<< +~GetPortLoc MAC + PHL ]1 +_GetPortLoc MAC + Tool $1E04 + <<< +~SetPortRect MAC + PHL ]1 +_SetPortRect MAC + Tool $1F04 + <<< +~GetPortRect MAC + PHL ]1 +_GetPortRect MAC + Tool $2004 + <<< +~SetPortSize MAC + PxW ]1;]2 +_SetPortSize MAC + Tool $2104 + <<< +~MovePortTo MAC + PxW ]1;]2 +_MovePortTo MAC + Tool $2204 + <<< +~SetOrigin MAC + PxW ]1;]2 +_SetOrigin MAC + Tool $2304 + <<< +~SetClip MAC + PHL ]1 +_SetClip MAC + Tool $2404 + <<< +~GetClip MAC + PHL ]1 +_GetClip MAC + Tool $2504 + <<< +~ClipRect MAC + PHL ]1 +_ClipRect MAC + Tool $2604 + <<< +_HidePen MAC + Tool $2704 + <<< +_ShowPen MAC + Tool $2804 + <<< +~GetPen MAC + PHL ]1 +_GetPen MAC + Tool $2904 + <<< +~SetPenState MAC + PHL ]1 +_SetPenState MAC + Tool $2A04 + <<< +~GetPenState MAC + PHL ]1 +_GetPenState MAC + Tool $2B04 + <<< +~SetPenSize MAC + PxW ]1;]2 +_SetPenSize MAC + Tool $2C04 + <<< +~GetPenSize MAC + PHL ]1 +_GetPenSize MAC + Tool $2D04 + <<< +~SetPenMode MAC + PHW ]1 +_SetPenMode MAC + Tool $2E04 + <<< +~GetPenMode MAC + PHA +_GetPenMode MAC + Tool $2F04 + <<< +~SetPenPat MAC + PHL ]1 +_SetPenPat MAC + Tool $3004 + <<< +~GetPenPat MAC + PHL ]1 +_GetPenPat MAC + Tool $3104 + <<< +~SetPenMask MAC + PHL ]1 +_SetPenMask MAC + Tool $3204 + <<< +~GetPenMask MAC + PHL ]1 +_GetPenMask MAC + Tool $3304 + <<< +~SetBackPat MAC + PHL ]1 +_SetBackPat MAC + Tool $3404 + <<< +~GetBackPat MAC + PHL ]1 +_GetBackPat MAC + Tool $3504 + <<< +_PenNormal MAC + Tool $3604 + <<< +~SetSolidPenPat MAC + PHW ]1 +_SetSolidPenPat MAC + Tool $3704 + <<< +~SetSolidBackPat MAC + PHW ]1 +_SetSolidBackPat MAC + Tool $3804 + <<< +~SolidPattern MAC + PHWL ]1;]2 +_SolidPattern MAC + Tool $3904 + <<< +~MoveTo MAC +GotoXY MAC +QDGotoXY MAC + PxW ]1;]2 +_MoveTo MAC + Tool $3A04 + <<< +~Move MAC + PxW ]1;]2 +_Move MAC + Tool $3B04 + <<< +~LineTo MAC + PxW ]1;]2 +_LineTo MAC + Tool $3C04 + <<< +~Line MAC + PxW ]1;]2 +_Line MAC + Tool $3D04 + <<< +~SetPicSave MAC + PHL ]1 +_SetPicSave MAC + Tool $3E04 + <<< +~GetPicSave MAC + PHS 2 +_GetPicSave MAC + Tool $3F04 + <<< +~SetRgnSave MAC + PHL ]1 +_SetRgnSave MAC + Tool $4004 + <<< +~GetRgnSave MAC + PHS 2 +_GetRgnSave MAC + Tool $4104 + <<< +~SetPolySave MAC + PHL ]1 +_SetPolySave MAC + Tool $4204 + <<< +~GetPolySave MAC + PHS 2 +_GetPolySave MAC + Tool $4304 + <<< +~SetGrafProcs MAC + PHL ]1 +_SetGrafProcs MAC + Tool $4404 + <<< +~GetGrafProcs MAC + PHS 2 +_GetGrafProcs MAC + Tool $4504 + <<< +~SetUserField MAC + PHL ]1 +_SetUserField MAC + Tool $4604 + <<< +~GetUserField MAC + PHS 2 +_GetUserField MAC + Tool $4704 + <<< +~SetSysField MAC + PHL ]1 +_SetSysField MAC + Tool $4804 + <<< +~GetSysField MAC + PHS 2 +_GetSysField MAC + Tool $4904 + <<< +~SetRect MAC + PHL ]1 + PxW ]2;]3;]4;]5 +_SetRect MAC + Tool $4A04 + <<< +~OffsetRect MAC + PHL ]1 + PxW ]2;]3 +_OffsetRect MAC + Tool $4B04 + <<< +~InsetRect MAC + PHL ]1 + PxW ]2;]3 +_InsetRect MAC + Tool $4C04 + <<< +~SectRect MAC + PHA + PxL ]1;]2;]3 +_SectRect MAC + Tool $4D04 + <<< +~UnionRect MAC + PxL ]1;]2;]3 +_UnionRect MAC + Tool $4E04 + <<< +~PtInRect MAC + PHA + PxL ]1;]2 +_PtInRect MAC + Tool $4F04 + <<< +~Pt2Rect MAC + PxL ]1;]2;]3 +_Pt2Rect MAC + Tool $5004 + <<< +~EqualRect MAC + PHA + PxL ]1;]2 +_EqualRect MAC + Tool $5104 + <<< +~NotEmptyRect MAC + P1SL ]1 +_NotEmptyRect MAC + Tool $5204 + <<< +~EmptyRect MAC + P1SL ]1 +_EmptyRect MAC + Tool $5204 + <<< +~FrameRect MAC + PHL ]1 +_FrameRect MAC + Tool $5304 + <<< +~PaintRect MAC + PHL ]1 +_PaintRect MAC + Tool $5404 + <<< +~EraseRect MAC + PHL ]1 +_EraseRect MAC + Tool $5504 + <<< +~InvertRect MAC + PHL ]1 +_InvertRect MAC + Tool $5604 + <<< +~FillRect MAC + PxL ]1;]2 +_FillRect MAC + Tool $5704 + <<< +~FrameOval MAC + PHL ]1 +_FrameOval MAC + Tool $5804 + <<< +~PaintOval MAC + PHL ]1 +_PaintOval MAC + Tool $5904 + <<< +~EraseOval MAC + PHL ]1 +_EraseOval MAC + Tool $5A04 + <<< +~InvertOval MAC + PHL ]1 +_InvertOval MAC + Tool $5B04 + <<< +~FillOval MAC + PxL ]1;]2 +_FillOval MAC + Tool $5C04 + <<< +~FrameRRect MAC + PHL ]1 + PxW ]2;]3 +_FrameRRect MAC + Tool $5D04 + <<< +~PaintRRect MAC + PHL ]1 + PxW ]2;]3 +_PaintRRect MAC + Tool $5E04 + <<< +~EraseRRect MAC + PHL ]1 + PxW ]2;]3 +_EraseRRect MAC + Tool $5F04 + <<< +~InvertRRect MAC + PHL ]1 + PxW ]2;]3 +_InvertRRect MAC + Tool $6004 + <<< +~FillRRect MAC + PHLW ]1;]2 + PHWL ]3;]4 +_FillRRect MAC + Tool $6104 + <<< +~FrameArc MAC + PHL ]1 + PxW ]2;]3 +_FrameArc MAC + Tool $6204 + <<< +~PaintArc MAC + PHL ]1 + PxW ]2;]3 +_PaintArc MAC + Tool $6304 + <<< +~EraseArc MAC + PHL ]1 + PxW ]2;]3 +_EraseArc MAC + Tool $6404 + <<< +~InvertArc MAC + PHL ]1 + PxW ]2;]3 +_InvertArc MAC + Tool $6504 + <<< +~FillArc MAC + PHLW ]1;]2 + PHWL ]3;]4 +_FillArc MAC + Tool $6604 + <<< +~NewRgn MAC + PHS 2 +_NewRgn MAC + Tool $6704 + <<< +~DisposeRgn MAC + PHL ]1 +_DisposeRgn MAC + Tool $6804 + <<< +~CopyRgn MAC + PxL ]1;]2 +_CopyRgn MAC + Tool $6904 + <<< +~SetEmptyRgn MAC + PHL ]1 +_SetEmptyRgn MAC + Tool $6A04 + <<< +~SetRectRgn MAC + PHL ]1 + PxW ]2;]3;]4;]5 +_SetRectRgn MAC + Tool $6B04 + <<< +~RectRgn MAC + PxL ]1;]2 +_RectRgn MAC + Tool $6C04 + <<< +_OpenRgn MAC + Tool $6D04 + <<< +~CloseRgn MAC + PHL ]1 +_CloseRgn MAC + Tool $6E04 + <<< +~OffsetRgn MAC + PHL ]1 + PxW ]2;]3 +_OffsetRgn MAC + Tool $6F04 + <<< +~InsetRgn MAC + PHL ]1 + PxW ]2;]3 +_InsetRgn MAC + Tool $7004 + <<< +~SectRgn MAC + PxL ]1;]2;]3 +_SectRgn MAC + Tool $7104 + <<< +~UnionRgn MAC + PxL ]1;]2;]3 +_UnionRgn MAC + Tool $7204 + <<< +~DiffRgn MAC + PxL ]1;]2;]3 +_DiffRgn MAC + Tool $7304 + <<< +~XorRgn MAC + PxL ]1;]2;]3 +_XorRgn MAC + Tool $7404 + <<< +~PtInRgn MAC + PHA + PxL ]1;]2 +_PtInRgn MAC + Tool $7504 + <<< +~RectInRgn MAC + PHA + PxL ]1;]2 +_RectInRgn MAC + Tool $7604 + <<< +~EqualRgn MAC + PHA + PxL ]1;]2 +_EqualRgn MAC + Tool $7704 + <<< +~EmptyRgn MAC + P1SL ]1 +_EmptyRgn MAC + Tool $7804 + <<< +~FrameRgn MAC + PHL ]1 +_FrameRgn MAC + Tool $7904 + <<< +~PaintRgn MAC + PHL ]1 +_PaintRgn MAC + Tool $7A04 + <<< +~EraseRgn MAC + PHL ]1 +_EraseRgn MAC + Tool $7B04 + <<< +~InvertRgn MAC + PHL ]1 +_InvertRgn MAC + Tool $7C04 + <<< +~FillRgn MAC + PxL ]1;]2 +_FillRgn MAC + Tool $7D04 + <<< +~ScrollRect MAC + PHLW ]1;]2 + PHWL ]3;]4 +_ScrollRect MAC + Tool $7E04 + <<< +~PaintPixels MAC + PHL ]1 +_PaintPixels MAC + Tool $7F04 + <<< +~AddPt MAC + PxL ]1;]2 +_AddPt MAC + Tool $8004 + <<< +~SubPt MAC + PxL ]1;]2 +_SubPt MAC + Tool $8104 + <<< +~SetPt MAC + PHL ]1 + PxW ]2;]3 +_SetPt MAC + Tool $8204 + <<< +~EqualPt MAC + PHA + PxL ]1;]2 +_EqualPt MAC + Tool $8304 + <<< +~LocalToGlobal MAC + PHL ]1 +_LocalToGlobal MAC + Tool $8404 + <<< +~GlobalToLocal MAC + PHL ]1 +_GlobalToLocal MAC + Tool $8504 + <<< +~Random MAC + PHA +_Random MAC + Tool $8604 + <<< +~SetRandSeed MAC + PHL ]1 +_SetRandSeed MAC + Tool $8704 + <<< +~GetPixel MAC + PHA + PxW ]1;]2 +_GetPixel MAC + Tool $8804 + <<< +~ScalePt MAC + PxL ]1;]2;]3 +_ScalePt MAC + Tool $8904 + <<< +~MapPt MAC + PxL ]1;]2;]3 +_MapPt MAC + Tool $8A04 + <<< +~MapRect MAC + PxL ]1;]2;]3 +_MapRect MAC + Tool $8B04 + <<< +~MapRgn MAC + PxL ]1;]2;]3 +_MapRgn MAC + Tool $8C04 + <<< +~SetStdProcs MAC + PHL ]1 +_SetStdProcs MAC + Tool $8D04 + <<< +~SetCursor MAC + PHL ]1 +_SetCursor MAC + Tool $8E04 + <<< +~GetCursorAdr MAC + PHS 2 +_GetCursorAdr MAC + Tool $8F04 + <<< +_HideCursor MAC + Tool $9004 + <<< +_ShowCursor MAC + Tool $9104 + <<< +_ObscureCursor MAC + Tool $9204 + <<< +_SetMouseLoc MAC + Tool $9304 + <<< +~SetFont MAC + PHL ]1 +_SetFont MAC + Tool $9404 + <<< +~GetFont MAC + PHS 2 +_GetFont MAC + Tool $9504 + <<< +~GetFontInfo MAC + PHL ]1 +_GetFontInfo MAC + Tool $9604 + <<< +~GetFontGlobals MAC + PHL ]1 +_GetFontGlobals MAC + Tool $9704 + <<< +~SetFontFlags MAC + PHW ]1 +_SetFontFlags MAC + Tool $9804 + <<< +~GetFontFlags MAC + PHA +_GetFontFlags MAC + Tool $9904 + <<< +~SetTextFace MAC + PHW ]1 +_SetTextFace MAC + Tool $9A04 + <<< +~GetTextFace MAC + PHA +_GetTextFace MAC + Tool $9B04 + <<< +~SetTextMode MAC + PHW ]1 +_SetTextMode MAC + Tool $9C04 + <<< +~GetTextMode MAC + PHA +_GetTextMode MAC + Tool $9D04 + <<< +~SetSpaceExtra MAC + PHL ]1 +_SetSpaceExtra MAC + Tool $9E04 + <<< +~GetSpaceExtra MAC + PHS 2 +_GetSpaceExtra MAC + Tool $9F04 + <<< +~SetForeColor MAC + PHW ]1 +_SetForeColor MAC + Tool $A004 + <<< +~GetForeColor MAC + PHA +_GetForeColor MAC + Tool $A104 + <<< +~SetBackColor MAC + PHW ]1 +_SetBackColor MAC + Tool $A204 + <<< +~GetBackColor MAC + PHA +_GetBackColor MAC + Tool $A304 + <<< +~DrawChar MAC + PHW ]1 +_DrawChar MAC + Tool $A404 + <<< +~DrawString MAC + PHL ]1 +_DrawString MAC + Tool $A504 + <<< +~DrawCString MAC + PHL ]1 +_DrawCString MAC + Tool $A604 + <<< +~DrawText MAC + PHLW ]1;]2 +_DrawText MAC + Tool $A704 + <<< +~CharWidth MAC + P1SW ]1 +_CharWidth MAC + Tool $A804 + <<< +~StringWidth MAC + P1SL ]1 +_StringWidth MAC + Tool $A904 + <<< +~CStringWidth MAC + P1SL ]1 +_CStringWidth MAC + Tool $AA04 + <<< +~TextWidth MAC + P1SL ]1 + PHW ]2 +_TextWidth MAC + Tool $AB04 + <<< +~CharBounds MAC + PHWL ]1;]2 +_CharBounds MAC + Tool $AC04 + <<< +~StringBounds MAC + PxL ]1;]2 +_StringBounds MAC + Tool $AD04 + <<< +~CStringBounds MAC + PxL ]1;]2 +_CStringBounds MAC + Tool $AE04 + <<< +~TextBounds MAC + PHLW ]1;]2 + PHL ]3 +_TextBounds MAC + Tool $AF04 + <<< +~SetArcRot MAC + PHW ]1 +_SetArcRot MAC + Tool $B004 + <<< +~GetArcRot MAC + PHA +_GetArcRot MAC + Tool $B104 + <<< +~SetSysFont MAC + PHL ]1 +_SetSysFont MAC + Tool $B204 + <<< +~GetSysFont MAC + PHS 2 +_GetSysFont MAC + Tool $B304 + <<< +~SetVisRgn MAC + PHL ]1 +_SetVisRgn MAC + Tool $B404 + <<< +~GetVisRgn MAC + PHL ]1 +_GetVisRgn MAC + Tool $B504 + <<< +~SetIntUse MAC + PHW ]1 +_SetIntUse MAC + Tool $B604 + <<< +~OpenPicture MAC + P2SL ]1 +_OpenPicture MAC + Tool $B704 + <<< +~PicComment MAC + PHW ]1 + PHWL ]2;]3 +_PicComment MAC + Tool $B804 + <<< +_ClosePicture MAC + Tool $B904 + <<< +~DrawPicture MAC + PxL ]1;]2 +_DrawPicture MAC + Tool $BA04 + <<< +~KillPicture MAC + PHL ]1 +_KillPicture MAC + Tool $BB04 + <<< +~FramePoly MAC + PHL ]1 +_FramePoly MAC + Tool $BC04 + <<< +~PaintPoly MAC + PHL ]1 +_PaintPoly MAC + Tool $BD04 + <<< +~ErasePoly MAC + PHL ]1 +_ErasePoly MAC + Tool $BE04 + <<< +~InvertPoly MAC + PHL ]1 +_InvertPoly MAC + Tool $BF04 + <<< +~FillPoly MAC + PxL ]1;]2 +_FillPoly MAC + Tool $C004 + <<< +~OpenPoly MAC + PHS 2 +_OpenPoly MAC + Tool $C104 + <<< +_ClosePoly MAC + Tool $C204 + <<< +~KillPoly MAC + PHL ]1 +_KillPoly MAC + Tool $C304 + <<< +~OffsetPoly MAC + PHL ]1 + PxW ]2;]3 +_OffsetPoly MAC + Tool $C404 + <<< +~MapPoly MAC + PxL ]1;]2;]3 +_MapPoly MAC + Tool $C504 + <<< +~SetClipHandle MAC + PHL ]1 +_SetClipHandle MAC + Tool $C604 + <<< +~GetClipHandle MAC + PHS 2 +_GetClipHandle MAC + Tool $C704 + <<< +~SetVisHandle MAC + PHL ]1 +_SetVisHandle MAC + Tool $C804 + <<< +~GetVisHandle MAC + PHS 2 +_GetVisHandle MAC + Tool $C904 + <<< +_InitCursor MAC + Tool $CA04 + <<< +~SetBufDims MAC + PxW ]1;]2;]3 +_SetBufDims MAC + Tool $CB04 + <<< +~ForceBufDims MAC + PxW ]1;]2;]3 +_ForceBufDims MAC + Tool $CC04 + <<< +~SaveBufDims MAC + PHL ]1 +_SaveBufDims MAC + Tool $CD04 + <<< +~RestoreBufDims MAC + PHL ]1 +_RestoreBufDims MAC + Tool $CE04 + <<< +~GetFGSize MAC + PHA +_GetFGSize MAC + Tool $CF04 + <<< +~SetFontID MAC + PHL ]1 +_SetFontID MAC + Tool $D004 + <<< +~GetFontID MAC + PHS 2 +_GetFontID MAC + Tool $D104 + <<< +~SetTextSize MAC + PHW ]1 +_SetTextSize MAC + Tool $D204 + <<< +~GetTextSize MAC + PHA +_GetTextSize MAC + Tool $D304 + <<< +~SetCharExtra MAC + PHL ]1 +_SetCharExtra MAC + Tool $D404 + <<< +~GetCharExtra MAC + PHS 2 +_GetCharExtra MAC + Tool $D504 + <<< +~PPToPort MAC + PxL ]1;]2 + PxW ]3;]4;]5 +_PPToPort MAC + Tool $D604 + <<< +~InflateTextBuffer MAC + PxW ]1;]2 +_InflateTextBuffer MAC + Tool $D704 + <<< +~GetRomFont MAC + PHL ]1 +_GetRomFont MAC + Tool $D804 + <<< +~GetFontLore MAC + PHA + PHLW ]1;]2 +_GetFontLore MAC + Tool $D904 + <<< +_Get640Colors MAC + Tool $DA04 + <<< +_Set640Color MAC + Tool $DB04 + <<< +~qQDStartUp MAC + NextDP ]1;$300 + PxW ]2;]3;]4 + Tool $204 + <<< + diff --git a/Library/QdAux.Macs.s b/Library/QdAux.Macs.s new file mode 100644 index 0000000..eb15572 --- /dev/null +++ b/Library/QdAux.Macs.s @@ -0,0 +1,86 @@ +* QuickDraw Aux macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_QDAuxBootInit MAC + Tool $112 + <<< +_QDAuxStartUp MAC + Tool $212 + <<< +_QDAuxShutDown MAC + Tool $312 + <<< +~QDAuxVersion MAC + PHA +_QDAuxVersion MAC + Tool $412 + <<< +_QDAuxReset MAC + Tool $512 + <<< +~QDAuxStatus MAC + PHA +_QDAuxStatus MAC + Tool $612 + <<< +~CopyPixels MAC + PxL ]1;]2;]3;]4 + PHWL ]5;]6 +_CopyPixels MAC + Tool $912 + <<< +_WaitCursor MAC + Tool $A12 + <<< +~DrawIcon MAC + PHLW ]1;]2 + PxW ]3;]4 +_DrawIcon MAC + Tool $B12 + <<< +~SpecialRect MAC + PHL ]1 + PxW ]2;]3 +_SpecialRect MAC + Tool $C12 + <<< +~SeedFill MAC + PxL ]1;]2;]3;]4 + PxW ]5;]6;]7 + PxL ]8;]9 +_SeedFill MAC + Tool $D12 + <<< +~CalcMask MAC + PxL ]1;]2;]3;]4 + PHW ]5 + PxL ]6;]7 +_CalcMask MAC + Tool $E12 + <<< +_GetSysIcon MAC + Tool $F12 + <<< +_PixelMap2Rgn MAC + Tool $1012 + <<< +_IBeamCursor MAC + Tool $1312 + <<< +_WhooshRect MAC + Tool $1412 + <<< +_DrawStringWidth MAC + Tool $1512 + <<< +_UseColorTable MAC + Tool $1612 + <<< +_RestoreColorTable MAC + Tool $1712 + <<< + diff --git a/Library/Resource.Macs.s b/Library/Resource.Macs.s new file mode 100644 index 0000000..f1ee030 --- /dev/null +++ b/Library/Resource.Macs.s @@ -0,0 +1,229 @@ +* Resource macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_ResourceBootInit MAC + Tool $11E + <<< +~ResourceStartUp MAC + PHW ]1 +_ResourceStartUp MAC + Tool $21E + <<< +_ResourceShutDown MAC + Tool $31E + <<< +~ResourceVersion MAC + PHA +_ResourceVersion MAC + Tool $41E + <<< +_ResourceReset MAC + Tool $51E + <<< +~ResourceStatus MAC + PHA +_ResourceStatus MAC + Tool $61E + <<< +~CreateResourceFile MAC + PHLW ]1;]2 + PHWL ]3;]4 +_CreateResourceFile MAC + Tool $91E + <<< +~OpenResourceFile MAC + P1SW ]1 + PxL ]2;]3 +_OpenResourceFile MAC + Tool $A1E + <<< +~CloseResourceFile MAC + PHW ]1 +_CloseResourceFile MAC + Tool $B1E + <<< +~AddResource MAC + PHLW ]1;]2 + PHWL ]3;]4 +_AddResource MAC + Tool $C1E + <<< +~UpdateResourceFile MAC + PHW ]1 +_UpdateResourceFile MAC + Tool $D1E + <<< +~LoadResource MAC + P2SW ]1 + PHL ]2 +_LoadResource MAC + Tool $E1E + <<< +~RemoveResource MAC + PHWL ]1;]2 +_RemoveResource MAC + Tool $F1E + <<< +~MarkResourceChange MAC + PxW ]1;]2 + PHL ]3 +_MarkResourceChange MAC + Tool $101E + <<< +~SetCurResourceFile MAC + PHW ]1 +_SetCurResourceFile MAC + Tool $111E + <<< +~GetCurResourceFile MAC + PHA +_GetCurResourceFile MAC + Tool $121E + <<< +~SetCurResourceApp MAC + PHW ]1 +_SetCurResourceApp MAC + Tool $131E + <<< +~GetCurResourceApp MAC + PHA +_GetCurResourceApp MAC + Tool $141E + <<< +~HomeResourceFile MAC + P1SW ]1 + PHL ]2 +_HomeResourceFile MAC + Tool $151E + <<< +~WriteResource MAC + PHWL ]1;]2 +_WriteResource MAC + Tool $161E + <<< +~ReleaseResource MAC + PxW ]1;]2 + PHL ]3 +_ReleaseResource MAC + Tool $171E + <<< +~DetachResource MAC + PHWL ]1;]2 +_DetachResource MAC + Tool $181E + <<< +~UniqueResourceID MAC + P2SW ]1 + PHW ]2 +_UniqueResourceID MAC + Tool $191E + <<< +~SetResourceID MAC + PHLW ]1;]2 + PHL ]3 +_SetResourceID MAC + Tool $1A1E + <<< +~GetResourceAttr MAC + P1SW ]1 + PHL ]2 +_GetResourceAttr MAC + Tool $1B1E + <<< +~SetResourceAttr MAC + PxW ]1;]2 + PHL ]3 +_SetResourceAttr MAC + Tool $1C1E + <<< +~GetResourceSize MAC + P2SW ]1 + PHL ]2 +_GetResourceSize MAC + Tool $1D1E + <<< +~MatchResourceHandle MAC + PxL ]1;]2 +_MatchResourceHandle MAC + Tool $1E1E + <<< +~GetOpenFileRefNum MAC + P1SW ]1 +_GetOpenFileRefNum MAC + Tool $1F1E + <<< +~CountTypes MAC + PHA +_CountTypes MAC + Tool $201E + <<< +~GetIndType MAC + P1SW ]1 +_GetIndType MAC + Tool $211E + <<< +~CountResources MAC + P2SW ]1 +_CountResources MAC + Tool $221E + <<< +~GetIndResource MAC + P2SW ]1 + PHL ]2 +_GetIndResource MAC + Tool $231E + <<< +~SetResourceLoad MAC + P1SW ]1 +_SetResourceLoad MAC + Tool $241E + <<< +~SetResourceFileDepth MAC + P1SW ]1 +_SetResourceFileDepth MAC + Tool $251E + <<< +~GetMapHandle MAC + P2SW ]1 +_GetMapHandle MAC + Tool $261E + <<< +~LoadAbsResource MAC + P2SL ]1 + PHL ]2 + PHWL ]3;]4 +_LoadAbsResource MAC + Tool $271E + <<< +~ResourceConverter MAC + PHL ]1 + PxW ]2;]3 +_ResourceConverter MAC + Tool $281E + <<< +_LoadResource2 MAC + Tool $291E + <<< +_RMFindeNamedResource MAC + Tool $2A1E + <<< +_RMGetResourceName MAC + Tool $2B1E + <<< +_RMLoadNamedResource MAC + Tool $2C1E + <<< +_RMSetResourceName MAC + Tool $2D1E + <<< +_OpenResourceFileByID MAC + Tool $2E1E + <<< +_CompactResourceFile MAC + Tool $2F1E + <<< + diff --git a/Library/Sane.Macs.s b/Library/Sane.Macs.s new file mode 100644 index 0000000..4f0a4bd --- /dev/null +++ b/Library/Sane.Macs.s @@ -0,0 +1,604 @@ +* Sane Toolset macros. +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_SANEBootInit MAC + Tool $10A + <<< +~SANEStartUp MAC + PHW ]1 +_SANEStartUp MAC + Tool $20A + <<< +_SANEShutDown MAC + Tool $30A + <<< +~SANEVersion MAC + PHA +_SANEVersion MAC + Tool $40A + <<< +_SANEReset MAC + Tool $50A + <<< +~SANEStatus MAC + PHA +_SANEStatus MAC + Tool $60A + <<< +_SANEFP816 MAC + Tool $90A + <<< +_SANEDecStr816 MAC + Tool $A0A + <<< +_SANEElems816 MAC + Tool $B0A + <<< +~qSANEStartUp MAC + NextDP ]1;$100 + Tool $20A + <<< +* Auxiliary macros + +FOPRF MAC ;call FP + PEA ]1 + _SANEFP816 + <<< +FOPRD MAC ;call DecStr + PEA ]1 + _SANEDecStr816 + <<< +FOPRE MAC ;call Elems + PEA ]1 + _SANEElems816 + <<< +* Addition + +FADDX MAC + FOPRF 0 + <<< +FADDD MAC + FOPRF $100 + <<< +FADDS MAC + FOPRF $200 + <<< +FADDC MAC + FOPRF $500 + <<< +FADDI MAC + FOPRF $400 + <<< +FADDL MAC + FOPRF $300 + <<< +* Subtraction + +FSUBX MAC + FOPRF $002 + <<< +FSUBD MAC + FOPRF $102 + <<< +FSUBS MAC + FOPRF $202 + <<< +FSUBC MAC + FOPRF $502 + <<< +FSUBI MAC + FOPRF $402 + <<< +FSUBL MAC + FOPRF $302 + <<< +* Multiplication + +FMULX MAC + FOPRF $004 + <<< +FMULD MAC + FOPRF $104 + <<< +FMULS MAC + FOPRF $204 + <<< +FMULC MAC + FOPRF $504 + <<< +FMULI MAC + FOPRF $404 + <<< +FMULL MAC + FOPRF $304 + <<< +* Division + +FDIVX MAC + FOPRF $006 + <<< +FDIVD MAC + FOPRF $106 + <<< +FDIVS MAC + FOPRF $206 + <<< +FDIVC MAC + FOPRF $506 + <<< +FDIVI MAC + FOPRF $406 + <<< +FDIVL MAC + FOPRF $306 + <<< +* Square root + +FSQRTX MAC + FOPRF $12 + <<< + +* Round to integer, according to the current rounding mode + +FRINTX MAC + FOPRF $14 + <<< + +* Truncate to integer, using round toward zero. + +FTINTX MAC + FOPRF $16 + <<< +* Remainder + +FREMX MAC + FOPRF $00C + <<< +FREMD MAC + FOPRF $10C + <<< +FREMS MAC + FOPRF $20C + <<< +FREMC MAC + FOPRF $50C + <<< +FREMI MAC + FOPRF $40C + <<< +FREML MAC + FOPRF $30C + <<< +* Logb + +FLOGBX MAC + FOPRF $1A + <<< +* Scalb + +FSCALBX MAC + FOPRF $18 + <<< +* Copy-sign + +FCPYSGNX MAC + FOPRF $011 + <<< +FCPYSGND MAC + FOPRF $111 + <<< +FCPYSGNS MAC + FOPRF $211 + <<< +FCPYSGNC MAC + FOPRF $511 + <<< +FCPYSGNI MAC + FOPRF $411 + <<< +FCPYSGNL MAC + FOPRF $311 + <<< +* Negate + +FNEGX MAC + FOPRF $0D + <<< + +* Absolute value + +FABSX MAC + FOPRF $0F + <<< + +* Next-after. NOTE: both operands are of the +* the same format, as specified by the usual suffix. + +FNEXTS MAC + FOPRF $21E + <<< +FNEXTD MAC + FOPRF $11E + <<< +FNEXTX MAC + FOPRF $01E + <<< + +* Conversion to extended + +FX2X MAC + FOPRF $00E + <<< +FD2X MAC + FOPRF $10E + <<< +FS2X MAC + FOPRF $20E + <<< + +* 16-bit integer, by address + +FI2X MAC + FOPRF $40E + <<< + +* 32-bit integer, by address + +FL2X MAC + FOPRF $30E + <<< +FC2X MAC + FOPRF $50E + <<< + +* Conversion from extended + +FX2D MAC + FOPRF $110 + <<< +FX2S MAC + FOPRF $210 + <<< +FX2I MAC + FOPRF $410 + <<< +FX2L MAC + FOPRF $310 + <<< +FX2C MAC + FOPRF $510 + <<< + +* Binary to decimal conversion + +FX2DEC MAC + FOPRF $00B + <<< +FD2DEC MAC + FOPRF $10B + <<< +FS2DEC MAC + FOPRF $20B + <<< +FC2DEC MAC + FOPRF $50B + <<< +FI2DEC MAC + FOPRF $40B + <<< +FL2DEC MAC + FOPRF $30B + <<< + +* Decimal to binary conversion + +FDEC2X MAC + FOPRF $009 + <<< +FDEC2D MAC + FOPRF $109 + <<< +FDEC2S MAC + FOPRF $209 + <<< +FDEC2C MAC + FOPRF $509 + <<< +FDEC2I MAC + FOPRF $409 + <<< +FDEC2L MAC + FOPRF $309 + <<< + +* Compare, not signaling invalid on unordered + +FCMPX MAC + FOPRF $008 + <<< +FCMPD MAC + FOPRF $108 + <<< +FCMPS MAC + FOPRF $208 + <<< +FCMPC MAC + FOPRF $508 + <<< +FCMPI MAC + FOPRF $408 + <<< +FCMPL MAC + FOPRF $308 + <<< + +* Compare, signaling invalid on unordered + +FCPXX MAC + FOPRF $00A + <<< +FCPXD MAC + FOPRF $10A + <<< +FCPXS MAC + FOPRF $20A + <<< +FCPXC MAC + FOPRF $50A + <<< +FCPXI MAC + FOPRF $40A + <<< +FCPXL MAC + FOPRF $30A + <<< + +* The following macros define a set of so-called floating +* branches. They presume that the appropriate compare +* operation, macro FCMPz or FCPXz, precedes. + +FBEQ MAC + BEQ ]1 + <<< +FBLT MAC ;less + BMI ]1 + <<< +FBLE MAC ;less or equal + BMI ]1 + BEQ ]1 + <<< +FBGT MAC ;greater + BVS ]1 + <<< +FBGE MAC ;greater or equal + BVS ]1 + BEQ ]1 + <<< +FBULT MAC ;less or unordered + BMI ]1 + BVS *+4 + BNE ]1 + <<< +FBULE MAC ;unordered, less, or equal + BMI ]1 + BEQ ]1 + BVC ]1 + <<< +FBUGT MAC ;unordered or greater + BVS ]1 + BMI *+4 + BNE ]1 + <<< +FBUGE MAC ;unordered, greater, or equal + BVS ]1 + BEQ ]1 + BPL ]1 + <<< +FBU MAC ;unordered + BVS *+6 + BMI *+4 + BNE ]1 + <<< +FBO MAC ;ordered + BMI ]1 + BVS ]1 + BEQ ]1 + <<< +FBNE MAC ;not equal + BMI ]1 + BVS ]1 + BNE ]1 + <<< +FBUE MAC ;unordered, equal + BEQ ]1 + BMI *+4 + BVC ]1 + <<< +FBLG MAC ;less or greater + BMI ]1 + BVS ]1 + <<< + +FCLASSS MAC + FOPRF $21C + <<< +FCLASSD MAC + FOPRF $11C + <<< +FCLASSX MAC + FOPRF $01C + <<< +FCLASSC MAC + FOPRF $51C + <<< +FCLASSI MAC + FOPRF $41C + <<< +FCLASSL MAC + FOPRF $31C + <<< + +* The following macros provide branches based on the +* the result of a FCLASSz macro. + +FBSNAN MAC ;signaling NaN + TXA + ASL + CMP #2*$FC + BEQ ]1 + <<< +FBQNAN MAC ;quiet NaN + TXA + ASL + CMP #2*$FD + BEQ ]1 + <<< +FBINF MAC ;infinite + TXA + ASL + CMP #2*$FE + BEQ ]1 + <<< +FBZERO MAC ;zero + TXA + ASL + CMP #2*$FF + BEQ ]1 + <<< +FBNORM MAC ;normal + TXA + ASL + BEQ ]1 + <<< +FBDENORM MAC ;denormal + TXA + ASL + CMP #2*1 + BEQ ]1 + <<< +FBNZENUM MAC ;non-zero num (norm or denorm) + TXA + XBA + ASL + BCC ]1 + <<< +FBNUM MAC ;number (zero, norm or denorm) + TXA + INC A + XBA + ASL + BCC ]1 + <<< +FBMINUS MAC ;minus sign + BMI ]1 + <<< +FBPLUS MAC ;plus sign + BPL ]1 + <<< + +* Get and set environment + +FGETENV MAC + FOPRF $03 + <<< +FSETENV MAC + FOPRF $01 + <<< + +* Test and set exception + +FTESTXCP MAC + FOPRF $1B + <<< +FSETXCP MAC + FOPRF $15 + <<< + +* Procedure entry and exit + +FPROCENTRY MAC + FOPRF $17 + <<< +FPROCEXIT MAC + FOPRF $19 + <<< + +* Get and set halt vector + +FGETHV MAC + FOPRF $07 + <<< +FSETHV MAC + FOPRF $05 + <<< + +* Elementary function macros + +FLNX MAC ;natural (base-e) log + FOPRE $00 + <<< +FLOG2X MAC ;base-2 log + FOPRE $02 + <<< +FLN1X MAC ;ln (1 + x) + FOPRE $04 + <<< +FLOG21X MAC ;log2 (1 +x) + FOPRE $06 + <<< +FEXPX MAC ;base-e exponential + FOPRE $08 + <<< +FEXP2X MAC ;base-2 exponential + FOPRE $0A + <<< +FEXP1X MAC ;exp (x) - 1 + FOPRE $0C + <<< +FEXP21X MAC ;exp2 (x) - 1 + FOPRE $0E + <<< +FXPWRI MAC ;integer exponential + FOPRE $10 + <<< +FXPWRY MAC ;general exponential + FOPRE $12 + <<< +FCOMPOUND MAC ;compound + FOPRE $14 + <<< +FANNUITY MAC ;annuity + FOPRE $16 + <<< +FATANX MAC ;arctangent + FOPRE $18 + <<< +FSINX MAC ;sine + FOPRE $1A + <<< +FCOSX MAC ;cosine + FOPRE $1C + <<< +FTANX MAC ;tangent + FOPRE $1E + <<< +FRANDX MAC ;random number generator + FOPRE $20 + <<< + +* Scanner and formatter function macros + +FPSTR2DEC MAC ;pascal string to decimal record + FOPRD 0 + <<< +FDEC2STR MAC ;decimal record to pascal string + FOPRD 1 + <<< +FCSTR2DEC MAC ;C string to decimal record + FOPRD 2 + <<< + diff --git a/Library/Sch.Macs.s b/Library/Sch.Macs.s new file mode 100644 index 0000000..d576686 --- /dev/null +++ b/Library/Sch.Macs.s @@ -0,0 +1,38 @@ +* Scheduler macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_SchBootInit MAC + Tool $107 + <<< +_SchStartUp MAC + Tool $207 + <<< +_SchShutDown MAC + Tool $307 + <<< +~SchVersion MAC + PHA +_SchVersion MAC + Tool $407 + <<< +_SchReset MAC + Tool $507 + <<< +~SchStatus MAC + PHA +_SchStatus MAC + Tool $607 + <<< +~SchAddTask MAC + P1SL ]1 +_SchAddTask MAC + Tool $907 + <<< +_SchFlush MAC + Tool $A07 + <<< + diff --git a/Library/Scrap.Macs.s b/Library/Scrap.Macs.s new file mode 100644 index 0000000..a75c5ea --- /dev/null +++ b/Library/Scrap.Macs.s @@ -0,0 +1,86 @@ +* Scrap manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_ScrapBootInit MAC + Tool $116 + <<< +_ScrapStartUp MAC + Tool $216 + <<< +_ScrapShutDown MAC + Tool $316 + <<< +~ScrapVersion MAC + PHA +_ScrapVersion MAC + Tool $416 + <<< +_ScrapReset MAC + Tool $516 + <<< +~ScrapStatus MAC + PHA +_ScrapStatus MAC + Tool $616 + <<< +_UnloadScrap MAC + Tool $916 + <<< +_LoadScrap MAC + Tool $A16 + <<< +_ZeroScrap MAC + Tool $B16 + <<< +~PutScrap MAC + PHL ]1 + PHWL ]2;]3 +_PutScrap MAC + Tool $C16 + <<< +~GetScrap MAC + PHLW ]1;]2 +_GetScrap MAC + Tool $D16 + <<< +~GetScrapHandle MAC + P2SW ]1 +_GetScrapHandle MAC + Tool $E16 + <<< +~GetScrapSize MAC + P2SW ]1 +_GetScrapSize MAC + Tool $F16 + <<< +~GetScrapPath MAC + PHS 2 +_GetScrapPath MAC + Tool $1016 + <<< +~SetScrapPath MAC + PHL ]1 +_SetScrapPath MAC + Tool $1116 + <<< +~GetScrapCount MAC + PHA +_GetScrapCount MAC + Tool $1216 + <<< +~GetScrapState MAC + PHA +_GetScrapState MAC + Tool $1316 + <<< +_GetIndScrap MAC + Tool $1416 + <<< +_ShowClipboard MAC + Tool $1516 + <<< + diff --git a/Library/Sound.Macs.s b/Library/Sound.Macs.s new file mode 100644 index 0000000..1923fff --- /dev/null +++ b/Library/Sound.Macs.s @@ -0,0 +1,111 @@ +* Sound manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_SoundBootInit MAC + Tool $108 + <<< +~SoundStartUp MAC + PHW ]1 +_SoundStartUp MAC + Tool $208 + <<< +_SoundShutDown MAC + Tool $308 + <<< +~SoundVersion MAC + PHA +_SoundVersion MAC + Tool $408 + <<< +_SoundReset MAC + Tool $508 + <<< +~SoundToolStatus MAC + PHA +_SoundToolStatus MAC + Tool $608 + <<< +~WriteRamBlock MAC + PHL ]1 + PxW ]2;]3 +_WriteRamBlock MAC + Tool $908 + <<< +~ReadRamBlock MAC + PHL ]1 + PxW ]2;]3 +_ReadRamBlock MAC + Tool $A08 + <<< +~GetTableAddress MAC + PHS 2 +_GetTableAddress MAC + Tool $B08 + <<< +~GetSoundVolume MAC + P1SW ]1 +_GetSoundVolume MAC + Tool $C08 + <<< +~SetSoundVolume MAC + PxW ]1;]2 +_SetSoundVolume MAC + Tool $D08 + <<< +~FFStartSound MAC + PHWL ]1;]2 +_FFStartSound MAC + Tool $E08 + <<< +~FFStopSound MAC + PHW ]1 +_FFStopSound MAC + Tool $F08 + <<< +~FFSoundStatus MAC + PHA +_FFSoundStatus MAC + Tool $1008 + <<< +~FFGeneratorStatus MAC + P1SW ]1 +_FFGeneratorStatus MAC + Tool $1108 + <<< +~SetSoundMIRQV MAC + PHL ]1 +_SetSoundMIRQV MAC + Tool $1208 + <<< +~SetUserSoundIRQV MAC + P2SL ]1 +_SetUserSoundIRQV MAC + Tool $1308 + <<< +~FFSoundDoneStatus MAC + P1SW ]1 +_FFSoundDoneStatus MAC + Tool $1408 + <<< +_FFSetUpSound MAC + Tool $1508 + <<< +_FFStartPlaying MAC + Tool $1608 + <<< +_SetDocReg MAC + Tool $1708 + <<< +_ReadDocReg MAC + Tool $1808 + <<< + +~qSoundStartUp MAC + NextDP ]1;$100 + Tool $208 + <<< + diff --git a/Library/Speech.Macs.s b/Library/Speech.Macs.s new file mode 100644 index 0000000..98cc85a --- /dev/null +++ b/Library/Speech.Macs.s @@ -0,0 +1,47 @@ +* +* Speech Toolkit tool calls +* + +_SpeechBootInit mac + Tool $0134 + <<< +_SpeechStartUp mac + Tool $0234 + <<< +_SpeechShutDown mac + Tool $0334 + <<< +_SpeechVersion mac + Tool $0434 + <<< +_SpeechReset mac + Tool $0534 + <<< +_SpeechStatus mac + Tool $0634 + <<< +_Parse mac + Tool $0934 + <<< +_DictInsert mac + Tool $0a34 + <<< +_DictDelete mac + Tool $0b34 + <<< +_DictDump mac + Tool $0c34 + <<< +_SetSayGlobals mac + Tool $0d34 + <<< +_DictInit mac + Tool $0e34 + <<< +_Say mac + Tool $0f34 + <<< +_Activate mac + Tool $1034 + <<< + diff --git a/Library/Std.Macs.s b/Library/Std.Macs.s new file mode 100644 index 0000000..2fc274d --- /dev/null +++ b/Library/Std.Macs.s @@ -0,0 +1,108 @@ +* Standard File Operations macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_SFBootInit MAC + Tool $117 + <<< +~SFStartUp MAC + PxW ]1;]2 +_SFStartUp MAC + Tool $217 + <<< +_SFShutDown MAC + Tool $317 + <<< +~SFVersion MAC + PHA +_SFVersion MAC + Tool $417 + <<< +_SFReset MAC + Tool $517 + <<< +~SFStatus MAC + PHA +_SFStatus MAC + Tool $617 + <<< +~SFGetFile MAC + PxW ]1;]2 + PxL ]3;]4;]5;]6 +_SFGetFile MAC + Tool $917 + <<< +~SFPutFile MAC + PxW ]1;]2 + PxL ]3;]4 + PHWL ]5;]6 +_SFPutFile MAC + Tool $A17 + <<< +~SFPGetFile MAC + PxW ]1;]2 + PxL ]3;]4;]5;]6 + PxL ]7;]8 +_SFPGetFile MAC + Tool $B17 + <<< +~SFPPutFile MAC + PxW ]1;]2 + PxL ]3;]4 + PHWL ]5;]6 + PxL ]7;]8 +_SFPPutFile MAC + Tool $C17 + <<< +~SFAllCaps MAC + PHW ]1 +_SFAllCaps MAC + Tool $D17 + <<< +~SFGetFile2 MAC + PxW ]1;]2;]3 + PxL ]4;]5;]6;]7 +_SFGetFile2 MAC + Tool $E17 + <<< +~SFPutFile2 MAC + PxW ]1;]2;]3 + PHLW ]4;]5 + PxL ]6;]7 +_SFPutFile2 MAC + Tool $F17 + <<< +_SFPGetFile2 MAC + Tool $1017 + <<< +_SFPPutFile2 MAC + Tool $1117 + <<< +~SFShowInvisible MAC + P1SW ]1 +_SFShowInvisible MAC + Tool $1217 + <<< +~SFReScan MAC + PxL ]1;]2 +_SFReScan MAC + Tool $1317 + <<< +~SFMultiGet2 MAC + PxW ]1;]2;]3 + PxL ]4;]5;]6;]7 +_SFMultiGet2 MAC + Tool $1417 + <<< +_SFPMultiGet2 MAC + Tool $1517 + <<< +~qSFStartUp MAC + PHW ]1 + NextDP ]2;$100 + Tool $217 + <<< + diff --git a/Library/TCPIP.Macs.s b/Library/TCPIP.Macs.s new file mode 100644 index 0000000..a441e00 --- /dev/null +++ b/Library/TCPIP.Macs.s @@ -0,0 +1,630 @@ +*================================================= +* +* TCPIP.MACS.S - Developer macros for Marinetti +* +* Copyright (C) 1997-2003 Richard Bennett-Forrest +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*================================================= +* +* 2000.08.12 RJB Initial release as open source +* 2003.07.05 AJR Update for Marinetti 3.0 +* +*================================================= + +~TCPIPBootInit MAC +_TCPIPBootInit MAC + LDX #$0100+$36 + JSL $E10000 + <<< +~TCPIPStartUp MAC +_TCPIPStartUp MAC + LDX #$0200+$36 + JSL $E10000 + <<< +~TCPIPShutDown MAC +_TCPIPShutDown MAC + LDX #$0300+$36 + JSL $E10000 + <<< +~TCPIPVersion MAC + PHA +_TCPIPVersion MAC + LDX #$0400+$36 + JSL $E10000 + <<< +~TCPIPReset MAC +_TCPIPReset MAC + LDX #$0500+$36 + JSL $E10000 + <<< +~TCPIPStatus MAC + PHA +_TCPIPStatus MAC + LDX #$0600+$36 + JSL $E10000 + <<< +~TCPIPLongVersion MAC + PHS 2 +_TCPIPLongVersion MAC + LDX #$0800+$36 + JSL $E10000 + <<< +~TCPIPGetConnectStatus MAC + PHA +_TCPIPGetConnectStatus MAC + LDX #$0900+$36 + JSL $E10000 + <<< +~TCPIPGetErrorTable MAC + PHS 2 +_TCPIPGetErrorTable MAC + LDX #$0A00+$36 + JSL $E10000 + <<< +~TCPIPGetReconnectStatus MAC + PHA +_TCPIPGetReconnectStatus MAC + LDX #$0B00+$36 + JSL $E10000 + <<< +~TCPIPReconnect MAC + PHL ]1 +_TCPIPReconnect MAC + LDX #$0C00+$36 + JSL $E10000 + <<< +~TCPIPConvertIPToHex MAC + PxL ]1;]2 +_TCPIPConvertIPToHex MAC + LDX #$0D00+$36 + JSL $E10000 + <<< +~TCPIPConvertIPCToHex MAC + PxL ]1;]2 +_TCPIPConvertIPCToHex MAC + LDX #$3F00+$36 + JSL $E10000 + <<< +~TCPIPConvertIPToASCII MAC + PHA + PxL ]1;]2 + PHW ]3 +_TCPIPConvertIPToASCII MAC + LDX #$0E00+$36 + JSL $E10000 + <<< +~TCPIPConvertIPToCASCII MAC + PHA + PxL ]1;]2 + PHW ]3 +_TCPIPConvertIPToCASCII MAC + LDX #$5800+$36 + JSL $E10000 + <<< +~TCPIPGetMyIPAddress MAC + PHS 2 +_TCPIPGetMyIPAddress MAC + LDX #$0F00+$36 + JSL $E10000 + <<< +~TCPIPGetConnectMethod MAC + PHA +_TCPIPGetConnectMethod MAC + LDX #$1000+$36 + JSL $E10000 + <<< +~TCPIPSetConnectMethod MAC + PHW ]1 +_TCPIPSetConnectMethod MAC + LDX #$1100+$36 + JSL $E10000 + <<< +~TCPIPConnect MAC + PHL ]1 +_TCPIPConnect MAC + LDX #$1200+$36 + JSL $E10000 + <<< +~TCPIPDisconnect MAC + PHWL ]1;]2 +_TCPIPDisconnect MAC + LDX #$1300+$36 + JSL $E10000 + <<< +~TCPIPGetMTU MAC + PHA +_TCPIPGetMTU MAC + LDX #$1400+$36 + JSL $E10000 + <<< +~TCPIPGetConnectData MAC + PHS 2 + PxW ]1;]2 +_TCPIPGetConnectData MAC + LDX #$1600+$36 + JSL $E10000 + <<< +~TCPIPSetConnectData MAC + PHWL ]1;]2 +_TCPIPSetConnectData MAC + LDX #$1700+$36 + JSL $E10000 + <<< +~TCPIPGetDisconnectData MAC + PHS 2 + PxW ]1;]2 +_TCPIPGetDisconnectData MAC + LDX #$1800+$36 + JSL $E10000 + <<< +~TCPIPSetDisconnectData MAC + PHWL ]1;]2 +_TCPIPSetDisconnectData MAC + LDX #$1900+$36 + JSL $E10000 + <<< +~TCPIPLoadPreferences MAC +_TCPIPLoadPreferences MAC + LDX #$1A00+$36 + JSL $E10000 + <<< +~TCPIPSavePreferences MAC +_TCPIPSavePreferences MAC + LDX #$1B00+$36 + JSL $E10000 + <<< +~TCPIPGetTuningTable MAC + PHL ]1 +_TCPIPGetTuningTable MAC + LDX #$1E00+$36 + JSL $E10000 + <<< +~TCPIPSetTuningTable MAC + PHL ]1 +_TCPIPSetTuningTable MAC + LDX #$1F00+$36 + JSL $E10000 + <<< +~TCPIPGetDNS MAC + PHL ]1 +_TCPIPGetDNS MAC + LDX #$1C00+$36 + JSL $E10000 + <<< +~TCPIPSetDNS MAC + PHL ]1 +_TCPIPSetDNS MAC + LDX #$1D00+$36 + JSL $E10000 + <<< +~TCPIPCancelDNR MAC + PHL ]1 +_TCPIPCancelDNR MAC + LDX #$2000+$36 + JSL $E10000 + <<< +~TCPIPDNRNameToIP MAC + PxL ]1;]2 +_TCPIPDNRNameToIP MAC + LDX #$2100+$36 + JSL $E10000 + <<< +~TCPIPPoll MAC +_TCPIPPoll MAC + LDX #$2200+$36 + JSL $E10000 + <<< +~TCPIPLogin MAC + PHS + PHWL ]1;]2 + PxW ]3;]4;]5 +_TCPIPLogin MAC + LDX #$2300+$36 + JSL $E10000 + <<< +~TCPIPLogout MAC + PHW ]1 +_TCPIPLogout MAC + LDX #$2400+$36 + JSL $E10000 + <<< +~TCPIPSendICMP MAC + PHW ]1 + PHLW ]2;]3 +_TCPIPSendICMP MAC + LDX #$2500+$36 + JSL $E10000 + <<< +~TCPIPSendUDP MAC + PHW ]1 + PHLW ]2;]3 +_TCPIPSendUDP MAC + LDX #$2600+$36 + JSL $E10000 + <<< +~TCPIPGetDatagramCount MAC + PHA + PxW ]1;]2 +_TCPIPGetDatagramCount MAC + LDX #$2700+$36 + JSL $E10000 + <<< +~TCPIPGetNextDatagram MAC + PHS 2 + PxW ]1;]2;]3 +_TCPIPGetNextDatagram MAC + LDX #$2800+$36 + JSL $E10000 + <<< +~TCPIPGetLoginCount MAC + PHA +_TCPIPGetLoginCount MAC + LDX #$2900+$36 + JSL $E10000 + <<< +~TCPIPSendICMPEcho MAC + PxW ]1;]2 +_TCPIPSendICMPEcho MAC + LDX #$2A00+$36 + JSL $E10000 + <<< +~TCPIPReceiveICMPEcho MAC + PHA + PHW ]1 +_TCPIPReceiveICMPEcho MAC + LDX #$2B00+$36 + JSL $E10000 + <<< +~TCPIPOpenTCP MAC + PHA + PHW ]1 +_TCPIPOpenTCP MAC + LDX #$2C00+$36 + JSL $E10000 + <<< +~TCPIPWriteTCP MAC + PHA + PHW ]1 + PxL ]2;]3 + PxW ]4;]5 +_TCPIPWriteTCP MAC + LDX #$2D00+$36 + JSL $E10000 + <<< +~TCPIPReadTCP MAC + PHA + PxW ]1;]2 + PxL ]3;]4;]5 +_TCPIPReadTCP MAC + LDX #$2E00+$36 + JSL $E10000 + <<< +~TCPIPCloseTCP MAC + PHA + PHW ]1 +_TCPIPCloseTCP MAC + LDX #$2F00+$36 + JSL $E10000 + <<< +~TCPIPAbortTCP MAC + PHA + PHW ]1 +_TCPIPAbortTCP MAC + LDX #$3000+$36 + JSL $E10000 + <<< +~TCPIPStatusTCP MAC + PHA + PHWL ]1;]2 +_TCPIPStatusTCP MAC + LDX #$3100+$36 + JSL $E10000 + <<< +~TCPIPGetSourcePort MAC + PHA + PHW ]1 +_TCPIPGetSourcePort MAC + LDX #$3200+$36 + JSL $E10000 + <<< +~TCPIPGetTOS MAC + PHA + PHW ]1 +_TCPIPGetTOS MAC + LDX #$3300+$36 + JSL $E10000 + <<< +~TCPIPSetTOS MAC + PxW ]1;]2 +_TCPIPSetTOS MAC + LDX #$3400+$36 + JSL $E10000 + <<< +~TCPIPGetTTL MAC + PHA + PHW ]1 +_TCPIPGetTTL MAC + LDX #$3500+$36 + JSL $E10000 + <<< +~TCPIPSetTTL MAC + PxW ]1;]2 +_TCPIPSetTTL MAC + LDX #$3600+$36 + JSL $E10000 + <<< +~TCPIPSetSourcePort MAC + PHW ]1;]2 +_TCPIPSetSourcePort MAC + LDX #$3700+$36 + JSL $E10000 + <<< +~TCPIPSendIPDatagram MAC + PHL ]1 +_TCPIPSendIPDatagram MAC + LDX #$4000+$36 + JSL $E10000 + <<< +~TCPIPConvertIPToClass MAC + PHS + PHL ]1 +_TCPIPConvertIPToClass MAC + LDX #$4100+$36 + JSL $E10000 + <<< +~TCPIPGetConnectMsgFlag MAC + PHS +_TCPIPGetConnectMsgFlag MAC + LDX #$4200+$36 + JSL $E10000 + <<< +~TCPIPSetConnectMsgFlag MAC + PHW ]1 +_TCPIPSetConnectMsgFlag MAC + LDX #$4300+$36 + JSL $E10000 + <<< +~TCPIPGetUsername MAC + PHL ]1 +_TCPIPGetUsername MAC + LDX #$4400+$36 + JSL $E10000 + <<< +~TCPIPSetUsername MAC + PHL ]1 +_TCPIPSetUsername MAC + LDX #$4500+$36 + JSL $E10000 + <<< +~TCPIPGetPassword MAC + PHL ]1 +_TCPIPGetPassword MAC + LDX #$4600+$36 + JSL $E10000 + <<< +~TCPIPSetPassword MAC + PHL ]1 +_TCPIPSetPassword MAC + LDX #$4700+$36 + JSL $E10000 + <<< +~TCPIPValidateIPString MAC + PHS + PHL ]1 +_TCPIPValidateIPString MAC + LDX #$4800+$36 + JSL $E10000 + <<< +~TCPIPValidateIPCString MAC + PHS + PHL ]1 +_TCPIPValidateIPCString MAC + LDX #$1500+$36 + JSL $E10000 + <<< +~TCPIPGetUserStatistic MAC + PHS 2 + PxW ]1;]2 +_TCPIPGetUserStatistic MAC + LDX #$4900+$36 + JSL $E10000 + <<< +~TCPIPGetLinkVariables MAC + PHS 2 +_TCPIPGetLinkVariables MAC + LDX #$4A00+$36 + JSL $E10000 + <<< +~TCPIPEditLinkConfig MAC + PxL ]1;]2 +_TCPIPEditLinkConfig MAC + LDX #$4B00+$36 + JSL $E10000 + <<< +~TCPIPGetModuleNames MAC + PHS 2 +_TCPIPGetModuleNames MAC + LDX #$4C00+$36 + JSL $E10000 + <<< +~TCPIPListenTCP MAC + PHA + PHW ]1 +_TCPIPListenTCP MAC + LDX #$4E00+$36 + JSL $E10000 + <<< +~TCPIPAcceptTCP MAC + PHA + PxW ]1;]2 +_TCPIPAcceptTCP MAC + LDX #$4F00+$36 + JSL $E10000 + <<< +~TCPIPSetNewDestination MAC + PHWL ]1;]2 + PHW ]3 +_TCPIPSetNewDestination MAC + LDX #$5000+$36 + JSL $E10000 + <<< +~TCPIPGetHostName MAC + PHL ]1 +_TCPIPGetHostName MAC + LDX #$5100+$36 + JSL $E10000 + <<< +~TCPIPSetHostName MAC + PHL ]1 +_TCPIPSetHostName MAC + LDX #$5200+$36 + JSL $E10000 + <<< +~TCPIPStatusUDP MAC + PHWL ]1;]2 +_TCPIPStatusUDP MAC + LDX #$5300+$36 + JSL $E10000 + <<< +~TCPIPGetLinkLayer MAC + PHL ]1 +_TCPIPGetLinkLayer MAC + LDX #$5400+$36 + JSL $E10000 + <<< +~TCPIPPtrToPtr MAC + PxL ]1;]2;]3 +_TCPIPPtrToPtr MAC + LDX #$5500+$36 + JSL $E10000 + <<< +~TCPIPPtrToPtrNeg MAC + PxL ]1;]2;]3 +_TCPIPPtrToPtrNeg MAC + LDX #$5600+$36 + JSL $E10000 + <<< +~TCPIPGetAuthMessage MAC + PHS 2 + PHW ]1 +_TCPIPGetAuthMessage MAC + LDX #$5700+$36 + JSL $E10000 + <<< +~TCPIPMangleDomainName MAC + PHS + PHWL ]1;]2 +_TCPIPMangleDomainName MAC + LDX #$5900+$36 + JSL $E10000 + <<< +~TCPIPGetAliveFlag MAC + PHS +_TCPIPGetAliveFlag MAC + LDX #$5A00+$36 + JSL $E10000 + <<< +~TCPIPSetAliveFlag MAC + PHW ]1 +_TCPIPSetAliveFlag MAC + LDX #$5B00+$36 + JSL $E10000 + <<< +~TCPIPGetAliveMinutes MAC + PHS +_TCPIPGetAliveMinutes MAC + LDX #$5C00+$36 + JSL $E10000 + <<< +~TCPIPSetAliveMinutes MAC + PHW ]1 +_TCPIPSetAliveMinutes MAC + LDX #$5D00+$36 + JSL $E10000 + <<< +~TCPIPReadLineTCP MAC + PHA + PHWL ]1;]2 + PHW ]3 + PxL ]4;]5;]6 +_TCPIPReadLineTCP MAC + LDX #$5E00+$36 + JSL $E10000 + <<< +~TCPIPGetBootConnectFlag MAC + PHS +_TCPIPGetBootConnectFlag MAC + LDX #$5F00+$36 + JSL $E10000 + <<< +~TCPIPSetBootConnectFlag MAC + PHW ]1 +_TCPIPSetBootConnectFlag MAC + LDX #$6000+$36 + JSL $E10000 + <<< +~TCPIPSetUDPDispatch MAC + PxW ]1;]2 +_TCPIPSetUDPDispatch MAC + LDX #$6100+$36 + JSL $E10000 + <<< +~TCPIPGetDestination MAC + PHWL ]1;]2 +_TCPIPGetDestination MAC + LDX #$6200+$36 + JSL $E10000 + <<< +~TCPIPGetUserEventTrigger MAC ;v2.1 + PHS 2 + PxW ]1;]2 +_TCPIPGetUserEventTrigger MAC + LDX #$6300+$36 + JSL $E10000 + <<< +~TCPIPSetUserEventTrigger MAC ;v2.1 + PxW ]1;]2 + PHL ]3 +_TCPIPSetUserEventTrigger MAC + LDX #$6400+$36 + JSL $E10000 + <<< +~TCPIPGetSysEventTrigger MAC ;v2.1 + PHS 2 + PHW ]1 +_TCPIPGetSysEventTrigger MAC + LDX #$6500+$36 + JSL $E10000 + <<< +~TCPIPSetSysEventTrigger MAC ;v2.1 + PHWL ]1;]2 +_TCPIPSetSysEventTrigger MAC + LDX #$6600+$36 + JSL $E10000 + <<< +~TCPIPGetDNRTimeouts MAC ;v3.0 + PHS 2 +_TCPIPGetDNRTimeouts MAC + LDX #$6700+$36 + JSL $E10000 + <<< +~TCPIPSetDNRTimeouts MAC ;v3.0 + PHL ]1 +_TCPIPSetDNRTimeouts MAC + LDX #$6800+$36 + JSL $E10000 + <<< diff --git a/Library/TCPIPX.Macs.s b/Library/TCPIPX.Macs.s new file mode 100644 index 0000000..fefad8e --- /dev/null +++ b/Library/TCPIPX.Macs.s @@ -0,0 +1,52 @@ +* Marinetti 2.0 internal tool macros +* by Richard Bennett - 5th August 1998 + +]tcpiptoolnum = $36 + +~TCPIPSetMyIPAddress MAC + PHL ]1 +_TCPIPSetMyIPAddress MAC + LDX #$3800+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPGetDP MAC + PHA +_TCPIPGetDP MAC + LDX #$3900+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPGetDebugHex MAC + PHA +_TCPIPGetDebugHex MAC + LDX #$3A00+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPSetDebugHex MAC + PHW ]1 +_TCPIPSetDebugHex MAC + LDX #$3B00+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPGetDebugTCP MAC + PHA +_TCPIPGetDebugTCP MAC + LDX #$3C00+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPSetDebugTCP MAC + PHW ]1 +_TCPIPSetDebugTCP MAC + LDX #$3D00+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPGetUserRecord MAC + P2SW ]1 +_TCPIPGetUserRecord MAC + LDX #$3E00+]tcpiptoolnum + JSL $E10000 + <<< +~TCPIPReloadModuleList MAC +_TCPIPReloadModuleList MAC + LDX #$4D00+]tcpiptoolnum + JSL $E10000 + <<< diff --git a/Library/Text.Macs.s b/Library/Text.Macs.s new file mode 100644 index 0000000..bf206a0 --- /dev/null +++ b/Library/Text.Macs.s @@ -0,0 +1,184 @@ +* Text tool macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_TextBootInit MAC + Tool $10C + <<< +_TextStartUp MAC + Tool $20C + <<< +_TextShutDown MAC + Tool $30C + <<< +~TextVersion MAC + PHA +_TextVersion MAC + Tool $40C + <<< +_TextReset MAC + Tool $50C + <<< +~TextStatus MAC + PHA +_TextStatus MAC + Tool $60C + <<< +~SetInGlobals MAC + PxW ]1;]2 +_SetInGlobals MAC + Tool $90C + <<< +~SetOutGlobals MAC + PxW ]1;]2 +_SetOutGlobals MAC + Tool $A0C + <<< +~SetErrGlobals MAC + PxW ]1;]2 +_SetErrGlobals MAC + Tool $B0C + <<< +~GetInGlobals MAC + PHS 2 +_GetInGlobals MAC + Tool $C0C + <<< +~GetOutGlobals MAC + PHS 2 +_GetOutGlobals MAC + Tool $D0C + <<< +~GetErrGlobals MAC + PHS 2 +_GetErrGlobals MAC + Tool $E0C + <<< +~SetInputDevice MAC + PHWL ]1;]2 +_SetInputDevice MAC + Tool $F0C + <<< +~SetOutputDevice MAC + PHWL ]1;]2 +_SetOutputDevice MAC + Tool $100C + <<< +~SetErrorDevice MAC + PHWL ]1;]2 +_SetErrorDevice MAC + Tool $110C + <<< +~GetInputDevice MAC + PHS 3 +_GetInputDevice MAC + Tool $120C + <<< +~GetOutputDevice MAC + PHS 3 +_GetOutputDevice MAC + Tool $130C + <<< +~GetErrorDevice MAC + PHS 3 +_GetErrorDevice MAC + Tool $140C + <<< +~InitTextDev MAC + PHW ]1 +_InitTextDev MAC + Tool $150C + <<< +~CtlTextDev MAC + PxW ]1;]2 +_CtlTextDev MAC + Tool $160C + <<< +~StatusTextDev MAC + PxW ]1;]2 +_StatusTextDev MAC + Tool $170C + <<< +~WriteChar MAC + PHW ]1 +_WriteChar MAC + Tool $180C + <<< +~ErrWriteChar MAC + PHW ]1 +_ErrWriteChar MAC + Tool $190C + <<< +~WriteLine MAC + PHL ]1 +_WriteLine MAC + Tool $1A0C + <<< +~ErrWriteLine MAC + PHL ]1 +_ErrWriteLine MAC + Tool $1B0C + <<< +~WriteString MAC + PHL ]1 +_WriteString MAC + Tool $1C0C + <<< +~ErrWriteString MAC + PHL ]1 +_ErrWriteString MAC + Tool $1D0C + <<< +~TextWriteBlock MAC + PHL ]1 + PxW ]2;]3 +_TextWriteBlock MAC + Tool $1E0C + <<< +~ErrWriteBlock MAC + PHL ]1 + PxW ]2;]3 +_ErrWriteBlock MAC + Tool $1F0C + <<< +~WriteCString MAC + PHL ]1 +_WriteCString MAC + Tool $200C + <<< +~ErrWriteCString MAC + PHL ]1 +_ErrWriteCString MAC + Tool $210C + <<< +~ReadChar MAC + P1SW ]1 +_ReadChar MAC + Tool $220C + <<< +~TextReadBlock MAC + PHL ]1 + PxW ]2;]3;]4 +_TextReadBlock MAC + Tool $230C + <<< +~ReadLine MAC + P1SL ]1 + PxW ]2;]3;]4 +_ReadLine MAC + Tool $240C + <<< + +PrintLn MAC ; print a line of text + pea ^text + pea text + ldx #$1A0C + jsl $E10000 + bra cont +text str ]1 +cont + <<< + diff --git a/Library/TextEdit.Macs.s b/Library/TextEdit.Macs.s new file mode 100644 index 0000000..68ed7a9 --- /dev/null +++ b/Library/TextEdit.Macs.s @@ -0,0 +1,199 @@ +* TextEdit macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_TEBootInit MAC + Tool $122 + <<< +~TEStartUp MAC + PxW ]1;]2 +_TEStartUp MAC + Tool $222 + <<< +_TEShutDown MAC + Tool $322 + <<< +~TEVersion MAC + PHA +_TEVersion MAC + Tool $422 + <<< +_TEReset MAC + Tool $522 + <<< +~TEStatus MAC + PHA +_TEStatus MAC + Tool $622 + <<< +~TENew MAC + P2SL ]1 +_TENew MAC + Tool $922 + <<< +~TEKill MAC + PHL ]1 +_TEKill MAC + Tool $A22 + <<< +~TESetText MAC + PHWL ]1;]2 + PHLW ]3;]4 + PxL ]5;]6 +_TESetText MAC + Tool $B22 + <<< +~TEGetText MAC + PHS 2 + PHWL ]1;]2 + PHLW ]3;]4 + PxL ]5;]6 +_TEGetText MAC + Tool $C22 + <<< +~TEGetTextInfo MAC + PHLW ]1;]2 + PHL ]3 +_TEGetTextInfo MAC + Tool $D22 + <<< +~TEIdle MAC + PHL ]1 +_TEIdle MAC + Tool $E22 + <<< +~TEActivate MAC + PHL ]1 +_TEActivate MAC + Tool $F22 + <<< +~TEDeactivate MAC + PHL ]1 +_TEDeactivate MAC + Tool $1022 + <<< +~TEClick MAC + PxL ]1;]2 +_TEClick MAC + Tool $1122 + <<< +~TEUpdate MAC + PHL ]1 +_TEUpdate MAC + Tool $1222 + <<< +~TEPaintText MAC + P2SL ]1 + PxL ]2;]3 + PHWL ]4;]5 +_TEPaintText MAC + Tool $1322 + <<< +~TEKey MAC + PxL ]1;]2 +_TEKey MAC + Tool $1422 + <<< +~TECut MAC + PHL ]1 +_TECut MAC + Tool $1622 + <<< +~TECopy MAC + PHL ]1 +_TECopy MAC + Tool $1722 + <<< +~TEPaste MAC + PHL ]1 +_TEPaste MAC + Tool $1822 + <<< +~TEClear MAC + PHL ]1 +_TEClear MAC + Tool $1922 + <<< +~TEInsert MAC + PHWL ]1;]2 + PHLW ]3;]4 + PxL ]5;]6 +_TEInsert MAC + Tool $1A22 + <<< +~TEReplace MAC + PHWL ]1;]2 + PHLW ]3;]4 + PxL ]5;]6 +_TEReplace MAC + Tool $1B22 + <<< +~TEGetSelection MAC + PxL ]1;]2;]3 +_TEGetSelection MAC + Tool $1C22 + <<< +~TESetSelection MAC + PxL ]1;]2;]3 +_TESetSelection MAC + Tool $1D22 + <<< +~TEGetSelectionStyle MAC + PHA + PxL ]1;]2;]3 +_TEGetSelectionStyle MAC + Tool $1E22 + <<< +~TEStyleChange MAC + PHW ]1 + PxL ]2;]3 +_TEStyleChange MAC + Tool $1F22 + <<< +~TEOffsetToPoint MAC + PxL ]1;]2;]3;]4 +_TEOffsetToPoint MAC + Tool $2022 + <<< +~TEPointToOffset MAC + PHS 2 + PxL ]1;]2;]3 +_TEPointToOffset MAC + Tool $2122 + <<< +~TEGetDefProc MAC + PHS 2 +_TEGetDefProc MAC + Tool $2222 + <<< +~TEGetRuler MAC + PHWL ]1;]2 + PHL ]3 +_TEGetRuler MAC + Tool $2322 + <<< +~TESetRuler MAC + PHW ]1 + PxL ]2;]3 +_TESetRuler MAC + Tool $2422 + <<< +~TEScroll MAC + PHW ]1 + PxL ]2;]3;]4 +_TEScroll MAC + Tool $2522 + <<< +_TEGetInternalProc MAC + Tool $2622 + <<< +_TEGetLastError MAC + Tool $2722 + <<< +_TECompactRecord MAC + Tool $2822 + <<< + diff --git a/Library/Tool219.Macs.s b/Library/Tool219.Macs.s new file mode 100644 index 0000000..d92fd8c --- /dev/null +++ b/Library/Tool219.Macs.s @@ -0,0 +1,86 @@ +* SoundSmith Tool +* FTA, 1991 + +~STStartUp mac + PHW ]1 +_STStartUp mac + Tool $02DB + <<< +_STShutDown mac + Tool $03DB + <<< +~STVersion mac + phd ; WordResult +_STVersion mac + Tool $04DB + <<< +_STReset mac + Tool $05DB + <<< +~STStatus mac + phd ; WordResult +STStatus mac + Tool $06DB + <<< +~STLoadOneMusic mac + PHL ]1 +_STLoadOneMusic mac + Tool $09DB + <<< +~STPlayMusic mac + PHW ]1 +_STPlayMusic mac + Tool $0ADB + <<< +_STStopMusic mac + Tool $0BDB + <<< +~STGetEOfMusic mac + phd ; WordResult +_STGetEOfMusic mac + Tool $0CDB + <<< +~STAddToBatch mac + PHLW ]1;]2 +_STAddToBatch mac + Toll $0DDB + <<< +~STSelectBatch mac + PHW ]1 +_STSelectBatch mac + Tool $0EDB + <<< +~STKillBatch mac + PHW ]1 +_STKillBatch mac + Tool $0FDB + <<< +~STGetPlayingMusic mac + phd ; WordResult +_STGetPlayingMusic mac + Tool $10DB + <<< +~STPlayBatch mac + PHL ]1 +_STPlayBatch mac + Tool $11DB + <<< +~STGetTrackVu mac + phd ;Long + phd ; Result +_STGetTrackVu mac + Tool $12DB + <<< +_STPauseMusic mac + Tool $13DB + <<< +_STContinueMusic mac + Tool $14DB + <<< +_STinternal15 mac + Tool $15DB + <<< +_STinternal16 mac + Tool $16DB + <<< + diff --git a/Library/Tool220.Macs.s b/Library/Tool220.Macs.s new file mode 100644 index 0000000..cf5e072 --- /dev/null +++ b/Library/Tool220.Macs.s @@ -0,0 +1,34 @@ +* NoiseTracker Tool +* FTA, 1992 + +_NTBootInit mac + Tool $01dc + <<< +_NTStartUp mac + Tool $02dc + <<< +_NTShutDown mac + Tool $03dc + <<< +_NTVersion mac + Tool $04dc + <<< +_NTReset mac + Tool $05dc + <<< +_NTStatus mac + Tool $06dc + <<< +_NTInitMusic mac + Tool $09dc + <<< +_NTLaunchMusic mac + Tool $0adc + <<< +_NTUpdateSound mac + Tool $0bdc + <<< +_NTStopMusic mac + Tool $0cdc + <<< + diff --git a/Library/Util.Macs.s b/Library/Util.Macs.s new file mode 100644 index 0000000..0a685aa --- /dev/null +++ b/Library/Util.Macs.s @@ -0,0 +1,796 @@ +*================================================= +* Utility Macros - from Merlin disk +* by Dave Klimas, et al +* +* Copyright Apple Computer, Inc. 1986, 1987 +* and Roger Wagner Publishing, Inc. 1988 +* All Rights Reserved +*------------------------------------------------- + +PHWL MAC + PHW ]1 + PHL ]2 + <<< +PHLW MAC + PHL ]1 + PHW ]2 + <<< +PxW MAC + DO ]0/1 + PHW ]1 + DO ]0/2 + PHW ]2 + DO ]0/3 + PHW ]3 + DO ]0/4 + PHW ]4 + FIN + FIN + FIN + FIN + <<< +PxL MAC + DO ]0/1 + PHL ]1 + DO ]0/2 + PHL ]2 + DO ]0/3 + PHL ]3 + DO ]0/4 + PHL ]4 + FIN + FIN + FIN + FIN + <<< +P2SL MAC + PHA +P1SL MAC + PHA +PHL MAC + IF #=]1 + PEA ^]1 + ELSE + PHW ]1+2 + FIN + PHW ]1 + <<< +P2SW MAC + PHA +P1SW MAC + PHA +PHW MAC + IF #=]1 + PEA ]1 + ELSE + IF MX/2 + LDA ]1+1 + PHA + FIN + LDA ]1 + PHA + FIN + <<< +PushSpace MAC +PHS MAC + DO ]0 + LUP ]1 + PHA + --^ + ELSE + PHA + FIN + <<< + +******************************** + +Push4 MAC + PushLong #0 + PushLong #0 + <<< + +PushPtr MAC + PEA ^]1 + PEA ]1 + EOM + +PushLong MAC + IF #=]1 + PushWord #^]1 + ELSE + PushWord ]1+2 + FIN + PushWord ]1 + <<< + +PushWord MAC + IF #=]1 + PEA ]1 + ELSE + IF MX/2 + LDA ]1+1 + PHA + FIN + LDA ]1 + PHA + FIN + <<< + +PullLong MAC + DO ]0 + PullWord ]1 + PullWord ]1+2 + ELSE + PullWord + PullWord + FIN + <<< + +PullWord MAC + PLA + DO ]0 + STA ]1 + FIN + IF MX/2 + PLA + DO ]0 + STA ]1+1 + FIN + FIN + <<< + +MoveLong MAC + MoveWord ]1;]2 + MoveWord ]1+2;]2+2 + <<< + +MoveWord MAC + LDA ]1 + STA ]2 + IF MX/2 + LDA ]1+1 + STA ]2+1 + FIN + <<< + +MoveBlock MAC ;1st_byte;last_byte;dest + DO ]2/]1 + DO ]3/]1 + LDX #]2 + LDY #]3+]2-]1 + LDA #]2-]1 + MVP ]1,]3 + ELSE + LDX #]1 + LDY #]3 + LDA #]2-]1 + MVN ]1,]3 + FIN + ELSE + ERR 1 ;Last adrs < first adrs + FIN + <<< + +CmpLong MAC + LDA ]1 + CMP ]2 + IF #=]1 + LDA ^]1 + ELSE + LDA ]1+2 + FIN + IF #=]2 + SBC ^]2 + ELSE + SBC ]2+2 + FIN + <<< + +LONGM MAC +LONGACC MAC ;Assumes native mode + IF MX&2 ;If A is now short + REP %00100000 + FIN + <<< + +LONGX MAC +LONGXY MAC ;Assumes native mode + IF MX&1 ;If X is now short + REP %00010000 + FIN + <<< + +LONG MAC +LONGAX MAC ;Assumes native mode + IF MX ;If not now in full 16 + REP %00110000 + FIN + <<< + +SHORTM MAC +SHORTACC MAC ;Assumes native mode + IF MX&2 ;If A is now short, + ELSE ; ignore + SEP %00100000 + FIN + <<< + +SHORTX MAC +SHORTXY MAC ;Assumes native mode + IF MX&1 ;If X is now short, + ELSE ; ignore + SEP %00010000 + FIN + <<< + +SHORT MAC +SHORTAX MAC ;Assumes native mode + IF MX!%11 ;If not now in full 8 + SEP %00110000 + FIN + <<< + +LONGI MAC ; Duplicates APW function + LST OFF + DO ]1 ; If arg = 1 = "on" = make long + + IF MX-3/-1 ; If M is short and X is long +; Leave alone + FIN ; End of this test + + IF MX/3 ; If M is short and X is short + MX %10 ; Make X long, leave M short + FIN ; End of this test + + IF MX!3/3 ; If M is long and X is long + FIN ; Leave alone + + IF MX-2/-1 ; If M is long and X is short + MX %00 ; Make X long, leave M long + FIN ; End of this test + + ELSE ; If arg = 0 = "off" = make short + + IF MX/3 ; If M is short and X is short + ; Leave alone + FIN ; End of this test + + IF MX-3/-1 ; If M is short and X is long + MX %11 ; Make X short, leave M short + FIN ; End of this test + + IF MX-2/-1 ; If M is long and X is short + ; Leave alone + FIN ; End of this test + + + IF MX!3/3 ; If M is long and X is long + MX %01 ; Make X short, leave M long + FIN ; Leave alone + + FIN ; End of macro tests + + LST RTN + <<< + +LONGA MAC ; Duplicates APW function + LST OFF + DO ]1 ; If arg = 1 = "on" = make long + + IF MX-3/-1 ; If M is short and X is long + MX %00 ; Make M long, leave X long + FIN ; End of this test + + IF MX/3 ; If M is short and X is short + MX %01 ; Make M long, leave X short + FIN ; End of this test + + IF MX!3/3 ; If M is long and X is long + FIN ; Leave alone + + IF MX-2/-1 ; If M is long and X is short + ; Leave alone + FIN ; End of this test + + ELSE ; If arg = 0 = "off" = make short + + IF MX/3 ; If M is short and X is short + ; Leave alone + FIN ; End of this test + + IF MX-3/-1 ; If M is short and X is long + ; Leave alone + FIN ; End of this test + + IF MX-2/-1 ; If M is long and X is short + MX %11 ; Make M short, leave X short + FIN ; End of this test + + + IF MX!3/3 ; If M is long and X is long + MX %10 ; Make M short, leave X long + FIN ; Leave alone + + FIN ; End of macro tests + + LST RTN + <<< + +M65816 MAC + DO ]1 + XC + XC ; Full 65816 mode for assembler + MX %00 + ELSE + MX %11 ; 8 bit mode for assembler + FIN + <<< + +Expmac MAC ; Replace APW GEN function + DO ]1 + EXP ONLY ; Expand macros + ELSE + EXP OFF + FIN + <<< + +Tool MAC + LDX #]1 ; load tool call # + JSL $E10000 ; go to dispatcher + <<< + +************************************************** +* Auto-menu item macros * +* This is one alternative for defining a menu * +* item. It has the advantage of letting you * +* include specifiers for Bold, Italic, etc. * +************************************************** + +*------------------------------------------------- +* Syntax: +* ]mnum = 0 ; initialize menu # at startvalue-1 +* Menu ' Menu 1 ' +* +* (See Menu macro, defined later....) +* +* ]inum = 255 ; Menu item starts with #256 +* Item ' Choice 1 ';Kybd;'Bb';Check +* Ch1 = ]inum ; Set label Ch1 if somewhere else +* needs to use this item #. +* Item ' Choice 2 ';Disable;'';Kybd;'Cc' +* Item ' Choice 3 ';Divide;'' +* +* Menu ' Menu 2 ' +* +* Item ' Choice 4 ';Bold;'';Check +* Item ' Choice 5 ';Italic;'';Blank +* Item ' Choice 6 ';Underline';Kybd;'Dd' +* +* IMPORTANT: ALL items, except for Check and Blank, are followed by a second +* value. For the Kybd item, the ASCII characters follow in single quotes, Ex: +* Kybd;'Cc' (specifies Apple-C as an equivalent). +* All other items use a null 2nd value, as in: +* Italic;'' or Divide;'' etc. +* +* The variable ]inum MUST be initialized for the value of your first +* menu item MINUS 1 before using the first Item macro. +* +* Check or Blank, if used, MUST be the last item in the macro line. +* +* There can be up to three parameter pairs after the item name. +*------------------------------------------------- +* The point of all this is that rather than hard- +* code menu items values and subsequent references +* to that number when disabling menus, etc., this +* lets you add and delete menu items at will, +* and have labels like Ch1, etc. above, auto- +* matically set for the correct value during the +* assembly. +*------------------------------------------------- + +* Equates for Item macro: + +Bold = 'B' ; bold menu item +Disable = 'D' ; disabled menu item +Italic = 'I' ; italic menu item +Underline = 'U' ; underlined menu item +Divide = 'V' ; menu dividing line +ColorHi = 'X' ; color hilite menu item +Kybd = '*' ; keyboard menu equivalent +Check = $1243 ; menu item with checkmark +Blank = $2043 ; menu item with blank + +*------------------------------------------------- + +Item MAC ; Macro for creating a menu item + + ASC '--' + ASC ]1 ; Text of menu item + ASC '\H' + DA ]inum ; Menu item # + + DO ]0/2 ; Only if more items to do... (>2) + + DO ]2-Check-1/-1 ; Only if Check item + DA ]2 ; ]2 = Check + ELSE ; otherwise kybd char or null + DO ]2-Blank-1/-1 ; Only if Blank check item + DA ]2 ; ]2 = Blank + ELSE + DB ]2 ; Function char value + ASC ]3 ; ASCII argument, if any for Kybd + FIN + FIN + + FIN + + DO ]0/4 ; Only if more items to do... (>3) + + DO ]4-Check-1/-1 ; Only if Check item + DA ]4 ; ]4 = Check + ELSE ; otherwise kybd char or null + DO ]4-Blank-1/-1 ; Only if Blank check item + DA ]4 ; ]4 = Blank + ELSE + DB ]4 ; Function char value + ASC ]5 ; ASCII argument, if any for Kybd + FIN + FIN + + FIN + + DO ]0/6 ; Only if more items to do... (>5) + + DO ]6-Check-1/-1 ; Only if Check item + DA ]6 ; ]6 = Check + ELSE ; otherwise kybd char or null + DO ]6-Blank-1/-1 ; Only if Blank check item + DA ]6 ; ]6 = Blank + ELSE + DB ]6 ; Function char value + ASC ]7 ; ASCII argument, if any for Kybd + FIN + FIN + + FIN + + DB $00 ; End of menu item + +]inum = ]inum+1 + <<< + +************************************************** +* This is another alternative macro for both * +* menus and menu items. It is simpler, and * +* more compact, but not as versatile. * +************************************************** + +*=============================================== +* Variables ]mnum,]inum should be defined +* prior to using these MenuMaker macros. +* +* They both should be starting value-1 +* +* Syntax: +* +* ]mnum = 0 ; 1st menu number will be 1 +* ]inum = 255 ; 1st menu item number will be 256 +* +* Menu ' @';X ; Apple menu, color highlighting. +* +* MItem ' About... ' ; "About" menu item +* +* Menu ' Menu Title 1' ; (this will be menu number 2) +* +* MItem ' Choice 1 ' +* MItem ' Choice 2 ';'D*Cc' ; Disabled, kybd char: Cc +* ; Above will be menu item #'s 2&3 +* +* + + +Menu MAC + ASC '>>' + ASC ]1 + ASC '\H' + DA ]mnum + DO ]0>1 + ASC ]2 + FIN + DB 0 +]mnum = ]mnum+1 + <<< + +MItem MAC + ASC '--' + ASC ]1 + ASC '\H' + DA ]inum + DO ]0>1 + ASC ]2 + FIN + DB 0 +]inum = ]inum+1 + <<< + +*----------------------------------------------------- +* +* Native -- Processor is in LONG "native" mode. +* Native Long -- Processor is in LONG "native" mode. +* Native Short -- Processor is in SHORT "native" mode. +* + +Native MAC + CLC + XCE + IF 0=]0 ;If Native (Long) + LONGAX + FIN + + DO ]0 + IF L=]1 ;If Native Long + LONGAX + + FIN ;If Native Short only + FIN ; do CLC, XCE. + EOM + +*-------------------------------------------------------- +* +* Emulation -- Set Processor into "emulation" mode. +* + +Emulation MAC + SEC + XCE + EOM + +*----------------------------------------------------- +* +* WriteCh -- Print Character From Accumulator +* WriteCh ADDR -- Print Character At Label +* WriteCh ADDR,X -- Print Character At Label,X +* + +WriteCh MAC + DO ]0 + LDA ]1 + FIN + PHA + LDX #$180C + JSL $E10000 + EOM + +*----------------------------------------------------- +* +* ReadCh -- Get Keypress in Accumulator +* ReadCh ADDR -- Get Keypress in Label +* + +ReadCh MAC + PEA 0 + PEA 1 + LDX #$220C + JSL $E10000 + PLA + DO ]0 + STA ]1 + FIN + EOM + +*----------------------------------------------------- +* +* WriteLn "STRING" -- Print Literal String with CR. +* WriteLn ADDR -- Print String At Address with CR. +* WriteLn -- Print CR. +* + +WriteLn MAC + DO ]0 + WriteStr ]1 + FIN + WriteCh #$8D + EOM + +*----------------------------------------------------- +* +* WriteStr "STRING" -- Print Literal String. +* WriteStr ADDR -- Print String At Address. +* WriteStr -- Print String At A (Lo),Y (Hi). +* + +WriteStr MAC + IF 0=]0 ;If No Label + PHY + PHA + + ELSE + + IF "=]1 + PEA ^]String + PEA ]String + BRL ]Skip +]String STR ]1 +]Skip + ELSE + + IF '=]1 + PEA ^]String + PEA ]String + BRL ]Skip +]String STR ]1 +]Skip + ELSE + + PEA ^]1 + PEA ]1 + + FIN + FIN + FIN + LDX #$1C0C + JSL $E10000 + EOM + +*----------------------------------------------------- +* +* DrawStrHV 8;12;"STRING" Print Literal String on +* DrawStr 8;12;ADDR Super Hi-Res Screen. +* + +DrawStrHV MAC + HtabVtab ]1;]2 + DrawStr ]3 + <<< + +*----------------------------------------------------- +* +* DrawStr "STRING" -- Print Literal String. +* DrawStr ADDR -- Print String At Address. +* + +DrawStr MAC + IF "=]1 + PEA ^]String + PEA ]String + BRL ]Skip +]String STR ]1 +]Skip + ELSE + IF '=]1 + PEA ^]String + PEA ]String + BRL ]Skip +]String STR ]1 +]Skip + ELSE + PEA ^]1 + PEA ]1 + FIN + FIN + LDX #$A504 ;DrawString + JSL $E10000 + <<< + +*----------------------------------------------------- +* +* HtabVtab #8;#12 -- Position at Htab 8, Vtab 12. +* HtabVtab H;V on super hires screens. +* + +HtabVtab MAC + IF #=]1 + LDA ]1*8 + ELSE + LDA ]1 + ASL + ASL + ASL + FIN + PHA + IF #=]1 + LDA ]2*8 + ELSE + LDA ]2 + ASL + ASL + ASL + FIN + PHA + LDX #$3A04 ;MoveTo + JSL $E10000 + <<< + +*----------------------------------------------------- +* +* Deref MyHandle;MyPtr -- Uses zero page 0-3 to +* de-reference a handle. +* + +Deref MAC + LDA ]1 + LDX ]1+2 + STA 0 + STX 2 + LDA [0] + STA ]2 + LDY #2 + LDA [0],Y + STA ]2+2 + <<< + +*================================================== +* The MLI16 macro assumes the CALLDOS file from the +* SUBROUT.LIB is linked in. It provides an easy +* way to make MLI calls. Example syntax: +* +* MLI16 close;CLSPARMS +*-------------------------------------------------- + +MLI16 MAC ;Uses CALLDOS file in the + IF MX ; subroutine library + REP %00110000 ;Force full 16-bit mode, if + FIN ; not already there. + LDX #]1 ;Call code (use MLI.CODES) + LDA #]2 ;Low word of PARMS tbl adr + JSR CALLDOS ;Returns CS if an error + <<< + +*================================================= +* The following macros are APW-equivalents for +* compatibility with APW style listings. +* +* One difference between Merlin and APW here: Instead of +* using the syntax PULL1 ADDRESS;X, Merlin can take +* the raw statement PULL1 ADDRESS,X. +* + +PULL1 MAC + SEP #%00100000 + PLA + REP #%00100000 + DO ]0/1 ;If 1 parm + IF MX>0 + STA ]1 + FIN + IF MX=0 + STAL ]1 + FIN + FIN + <<< + +PULL3 MAC + SEP #%00100000 + PLA + STA ]1 + REP #%00100000 + PLA + STA ]1+1 + FIN + <<< + +PUSH1 MAC + SEP #%00100000 + IF ]0/1 ;if one parm + LDA ]1 + FIN + PHA + REP #%00100000 + <<< + +PUSH3 MAC + IF #=]1 + LDA #^]1 ;get two hi order bytes + PHA + PHB + LDA #<]1 + STA 1,S + ELSE + LDA ]1+1 + PHA + PHB + LDA ]1 + STA 1,S + FIN + <<< + diff --git a/Library/VGA.Macs.s b/Library/VGA.Macs.s new file mode 100644 index 0000000..84c1f30 --- /dev/null +++ b/Library/VGA.Macs.s @@ -0,0 +1,66 @@ +* +* Macros SecondSight +* +* (c) 1995, Brutal Deluxe +* + +_SSGetStatus MAC + jsl _xGetStatus + <<< + +_SSSetMode MAC + jsl _xSetMode + <<< + +_SSUploadData MAC + jsl _xUploadData + <<< + +_SSScrollScreen MAC + jsl _xScrollScreen + <<< + +_SSScreenOff MAC + jsl _xScreenOff + <<< + +_SSScreenOn MAC + jsl _xScreenOn + <<< + +_SSSetPalette MAC + jsl _xSetPalette + <<< + +_SSSetPaletteEntry MAC + jsl _xSetPaletteEntry + <<< + +_SSSetBorder MAC + jsl _xSetBorder + <<< + +_SSRunCode MAC + jsl _xRunCode + <<< + +_SSClearScreen MAC + jsl _xClearScreen + <<< + +_SSSetShadow MAC + jsl _xSetShadow + <<< + +_SSSetVGAReg MAC + jsl _xSetVGAReg + <<< + +_SSGetVGAReg MAC + jsl _xGetVGAReg + <<< + +_SSSetUserMode MAC + jsl _xSetUserMode + <<< + diff --git a/Library/Video.Macs.s b/Library/Video.Macs.s new file mode 100644 index 0000000..d8d1f8d --- /dev/null +++ b/Library/Video.Macs.s @@ -0,0 +1,89 @@ +* +* Video Overlay tool calls +* + +_VDBootInit mac + Tool $0121 + <<< +_VDStartUp mac + Tool $0221 + <<< +_VDShutDown mac + Tool $0321 + <<< +_VDVersion mac + Tool $0421 + <<< +_VDReset mac + Tool $0521 + <<< +_VDStatus mac + Tool $0621 + <<< +_VDInStatus mac + Tool $0921 + <<< +_VDInSetStd mac + Tool $0a21 + <<< +_VDInGetStd mac + Tool $0b21 + <<< +_VDInConvAdj mac + Tool $0c21 + <<< +_VDKeyControl mac + Tool $0d21 + <<< +_VDKeyStatus mac + Tool $0e21 + <<< +_VDKeySetKCol mac + Tool $0f21 + <<< +_VDKeyGetKRCol mac + Tool $1021 + <<< +_VDKeyGetKGCol mac + Tool $1121 + <<< +_VDKeyGetKBCol mac + Tool $1221 + <<< +_VDKeySetKDiss mac + Tool $1321 + <<< +_VDKeyGetKDiss mac + Tool $1421 + <<< +_VDKeySetNKDiss mac + Tool $1521 + <<< +_VDKeyGetNKDiss mac + Tool $1621 + <<< +_VDOutSetStd mac + Tool $1721 + <<< +_VDOutGetStd mac + Tool $1821 + <<< +_VDOutControl mac + Tool $1921 + <<< +_VDOutStatus mac + Tool $1a21 + <<< +_VDGetFeatures mac + Tool $1b21 + <<< +_VDInControl mac + Tool $1c21 + <<< +_VDGGControl mac + Tool $1d21 + <<< +_VDGGStatus mac + Tool $1e21 + <<< + diff --git a/Library/Window.Macs.s b/Library/Window.Macs.s new file mode 100644 index 0000000..589263a --- /dev/null +++ b/Library/Window.Macs.s @@ -0,0 +1,537 @@ +* Window Manager macros +* by Dave Klimas +; +; Copyright Apple Computer, Inc. 1986, 1987 +; and Roger Wagner Publishing, Inc. 1988 +; All Rights Reserved +; +_WindBootInit MAC + Tool $10E + <<< +~WindStartUp MAC + PHW ]1 +_WindStartUp MAC + Tool $20E + <<< +_WindShutDown MAC + Tool $30E + <<< +~WindVersion MAC + PHA +_WindVersion MAC + Tool $40E + <<< +_WindReset MAC + Tool $50E + <<< +~WindStatus MAC + PHA +_WindStatus MAC + Tool $60E + <<< +~NewWindow MAC + P2SL ]1 +_NewWindow MAC + Tool $90E + <<< +~CheckUpdate MAC + P1SL ]1 +_CheckUpdate MAC + Tool $A0E + <<< +~CloseWindow MAC + PHL ]1 +_CloseWindow MAC + Tool $B0E + <<< +~Desktop MAC + IF 2=]1 + IF 3=]1 + IF 4=]1 + PHS 2 + FIN + FIN + FIN + PHWL ]1;]2 +_Desktop MAC + Tool $C0E + <<< +~SetWTitle MAC + PxL ]1;]2 +_SetWTitle MAC + Tool $D0E + <<< +~GetWTitle MAC + P2SL ]1 +_GetWTitle MAC + Tool $E0E + <<< +~SetFrameColor MAC + PxL ]1;]2 +_SetFrameColor MAC + Tool $F0E + <<< +~GetFrameColor MAC + PxL ]1;]2 +_GetFrameColor MAC + Tool $100E + <<< +~SelectWindow MAC + PHL ]1 +_SelectWindow MAC + Tool $110E + <<< +~HideWindow MAC + PHL ]1 +_HideWindow MAC + Tool $120E + <<< +~ShowWindow MAC + PHL ]1 +_ShowWindow MAC + Tool $130E + <<< +~SendBehind MAC + PxL ]1;]2 +_SendBehind MAC + Tool $140E + <<< +~FrontWindow MAC + PHS 2 +_FrontWindow MAC + Tool $150E + <<< +~SetInfoDraw MAC + PxL ]1;]2 +_SetInfoDraw MAC + Tool $160E + <<< +~FindWindow MAC + P1SL ]1 + PxW ]2;]3 +_FindWindow MAC + Tool $170E + <<< +~TrackGoAway MAC + P1SW ]1 + PHWL ]2;]3 +_TrackGoAway MAC + Tool $180E + <<< +~MoveWindow MAC + PxW ]1;]2 + PHL ]3 +_MoveWindow MAC + Tool $190E + <<< +~DragWindow MAC + PxW ]1;]2;]3;]4 + PxL ]5;]6 +_DragWindow MAC + Tool $1A0E + <<< +~GrowWindow MAC + PHS 2 + PxW ]1;]2;]3;]4 + PHL ]5 +_GrowWindow MAC + Tool $1B0E + <<< +~SizeWindow MAC + PxW ]1;]2 + PHL ]3 +_SizeWindow MAC + Tool $1C0E + <<< +~TaskMaster MAC + PHA + PHWL ]1;]2 +_TaskMaster MAC + Tool $1D0E + <<< +~BeginUpdate MAC + PHL ]1 +_BeginUpdate MAC + Tool $1E0E + <<< +~EndUpdate MAC + PHL ]1 +_EndUpdate MAC + Tool $1F0E + <<< +~GetWMgrPort MAC + PHS 2 +_GetWMgrPort MAC + Tool $200E + <<< +~PinRect MAC + PHS 2 + PxW ]1;]2 + PHL ]3 +_PinRect MAC + Tool $210E + <<< +~HiliteWindow MAC + PHWL ]1;]2 +_HiliteWindow MAC + Tool $220E + <<< +~ShowHide MAC + PHWL ]1;]2 +_ShowHide MAC + Tool $230E + <<< +~BringToFront MAC + PHL ]1 +_BringToFront MAC + Tool $240E + <<< +_WindNewRes MAC + Tool $250E + <<< +~TrackZoom MAC + P1SW ]1 + PHWL ]2;]3 +_TrackZoom MAC + Tool $260E + <<< +~ZoomWindow MAC + PHL ]1 +_ZoomWindow MAC + Tool $270E + <<< +~SetWRefCon MAC + PxL ]1;]2 +_SetWRefCon MAC + Tool $280E + <<< +~GetWRefCon MAC + P2SL ]1 +_GetWRefCon MAC + Tool $290E + <<< +~GetNextWindow MAC + P2SL ]1 +_GetNextWindow MAC + Tool $2A0E + <<< +~GetWKind MAC + P1SL ]1 +_GetWKind MAC + Tool $2B0E + <<< +~SetWFrame MAC + PHWL ]1;]2 +_SetWFrame MAC + Tool $2D0E + <<< +~GetWFrame MAC + P1SL ]1 +_GetWFrame MAC + Tool $2C0E + <<< +~GetStructRgn MAC + P2SL ]1 +_GetStructRgn MAC + Tool $2E0E + <<< +~GetContentRgn MAC + P2SL ]1 +_GetContentRgn MAC + Tool $2F0E + <<< +~GetUpdateRgn MAC + P2SL ]1 +_GetUpdateRgn MAC + Tool $300E + <<< +~GetDefProc MAC + P2SL ]1 +_GetDefProc MAC + Tool $310E + <<< +~SetDefProc MAC + PxL ]1;]2 +_SetDefProc MAC + Tool $320E + <<< +~GetWControls MAC + P2SL ]1 +_GetWControls MAC + Tool $330E + <<< +~SetOriginMask MAC + PHWL ]1;]2 +_SetOriginMask MAC + Tool $340E + <<< +~GetInfoRefCon MAC + P2SL ]1 +_GetInfoRefCon MAC + Tool $350E + <<< +~SetInfoRefCon MAC + PxL ]1;]2 +_SetInfoRefCon MAC + Tool $360E + <<< +~GetZoomRect MAC + P2SL ]1 +_GetZoomRect MAC + Tool $370E + <<< +~SetZoomRect MAC + PxL ]1;]2 +_SetZoomRect MAC + Tool $380E + <<< +~RefreshDesktop MAC + PHL ]1 +_RefreshDesktop MAC + Tool $390E + <<< +~InvalRect MAC + PHL ]1 +_InvalRect MAC + Tool $3A0E + <<< +~InvalRgn MAC + PHL ]1 +_InvalRgn MAC + Tool $3B0E + <<< +~ValidRect MAC + PHL ]1 +_ValidRect MAC + Tool $3C0E + <<< +~ValidRgn MAC + PHL ]1 +_ValidRgn MAC + Tool $3D0E + <<< +~GetContentOrigin MAC + P2SL ]1 +_GetContentOrigin MAC + Tool $3E0E + <<< +~SetContentOrigin MAC + PxW ]1;]2 + PHL ]3 +_SetContentOrigin MAC + Tool $3F0E + <<< +~GetDataSize MAC + P2SL ]1 +_GetDataSize MAC + Tool $400E + <<< +~SetDataSize MAC + PxW ]1;]2 + PHL ]3 +_SetDataSize MAC + Tool $410E + <<< +~GetMaxGrow MAC + P2SL ]1 +_GetMaxGrow MAC + Tool $420E + <<< +~SetMaxGrow MAC + PxW ]1;]2 + PHL ]3 +_SetMaxGrow MAC + Tool $430E + <<< +~GetScroll MAC + P2SL ]1 +_GetScroll MAC + Tool $440E + <<< +~SetScroll MAC + PxW ]1;]2 + PHL ]3 +_SetScroll MAC + Tool $450E + <<< +~GetPage MAC + P2SL ]1 +_GetPage MAC + Tool $460E + <<< +~SetPage MAC + PxW ]1;]2 + PHL ]3 +_SetPage MAC + Tool $470E + <<< +~GetContentDraw MAC + P2SL ]1 +_GetContentDraw MAC + Tool $480E + <<< +~SetContentDraw MAC + PxL ]1;]2 +_SetContentDraw MAC + Tool $490E + <<< +~GetInfoDraw MAC + P2SL ]1 +_GetInfoDraw MAC + Tool $4A0E + <<< +~SetSysWindow MAC + PHL ]1 +_SetSysWindow MAC + Tool $4B0E + <<< +~GetSysWFlag MAC + P1SL ]1 +_GetSysWFlag MAC + Tool $4C0E + <<< +~StartDrawing MAC + PHL ]1 +_StartDrawing MAC + Tool $4D0E + <<< +~SetWindowIcons MAC + P2SL ]1 +_SetWindowIcons MAC + Tool $4E0E + <<< +~GetRectInfo MAC + PxL ]1;]2 +_GetRectInfo MAC + Tool $4F0E + <<< +~StartInfoDrawing MAC + PxL ]1;]2 +_StartInfoDrawing MAC + Tool $500E + <<< +_EndInfoDrawing MAC + Tool $510E + <<< +~GetFirstWindow MAC + PHS 2 +_GetFirstWindow MAC + Tool $520E + <<< +~WindDragRect MAC + P2SL ]1 + PHLW ]2;]3 + PHWL ]4;]5 + PxL ]6;]7 + PHW ]8 +_WindDragRect MAC + Tool $530E + <<< +_Private01 MAC + Tool $540E + <<< +~DrawInfoBar MAC + PHL ]1 +_DrawInfoBar MAC + Tool $550E + <<< +~WindowGlobal MAC + P1SW ]1 +_WindowGlobal MAC + Tool $560E + <<< +~SetContentOrigin2 MAC + PxW ]1;]2;]3 + PHL ]4 +_SetContentOrigin2 MAC + Tool $570E + <<< +~GetWindowMgrGlobals MAC + PHS 2 +_GetWindowMgrGlobals MAC + Tool $580E + <<< +~AlertWindow MAC + P1SW ]1 + PxL ]2;]3 +_AlertWindow MAC + Tool $590E + <<< +~StartFrameDrawing MAC + PHL ]1 +_StartFrameDrawing MAC + Tool $5A0E + <<< +_EndFrameDrawing MAC + Tool $5B0E + <<< +~ResizeWindow MAC + PHWL ]1;]2 + PHL ]3 +_ResizeWindow MAC + Tool $5C0E + <<< +_TaskMasterContent MAC ;private + Tool $5D0E + <<< +_TaskMasterKey MAC ;private + Tool $5E0E + <<< +~TaskMasterDA MAC + P1SW ]1 + PHL ]2 +_TaskMasterDA MAC + Tool $5F0E + <<< +~CompileText MAC + P2SW ]1 + PxL ]2;]3 + PHW ]4 +_CompileText MAC + Tool $600E + <<< +~NewWindow2 MAC + PHS 2 + PxL ]1;]2;]3;]4 + PHWL ]5;]6 + PHW ]7 +_NewWindow2 MAC + Tool $610E + <<< +~ErrorWindow MAC + P1SW ]1 + PHLW ]2;]3 +_ErrorWindow MAC + Tool $620E + <<< +_GetAuxWindInfo MAC + Tool $630E + <<< +_DoModalWindow MAC + Tool $640E + <<< +_MWGetCtlPart MAC + Tool $650E + <<< +_MWSetMenuProc MAC + Tool $660E + <<< +_MWStdDrawProc MAC + Tool $670E + <<< +_MWSetUpEditMenu MAC + Tool $680E + <<< +_FindCursorCtl MAC + Tool $690E + <<< +_ResizeInfoBar MAC + Tool $6A0E + <<< +_HandleDiskInsert MAC + Tool $6B0E + <<< +_UpdateWindow MAC + Tool $6C0E + <<< + diff --git a/README.md b/README.md new file mode 100644 index 0000000..75e8b96 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +Whatever, play along, but no apologies for lack of optimization and style yet. You'll see I don't dynamically allocate some things I should. At the moment I'm more interested in digging through tcpdumps and making things act right. + +You'll see I'm just trying to copy the 'libtinysmb' portion of libogc from the Nintendo Wii because it's pretty easy to follow. It is in the 'reference' folder for you to check out. Also if you haven't yet, read all of http://www.ubiqx.org/cifs/SMB.html ... There, now you know exactly as much as me (probably more, I'm old and I forget things, I've probably forgotten it already). + +Oh and we're only working with port 445 (naked SMB over TCP) at the moment. port 139 NBT is really not much harder, but at the moment is just another thing to do for potentially better compatibility(?) + +As you can see, the hope here is to make 'SMBDEMO' S16 program connect to a CIFS server, mount a share, and maybe download a file. Only then do we worry about fancier things (breaking CIFS into its own library, making a FST, figuring out how much federal and state tax we owe on $2500). + +I mostly only hack on weekends, but can test and merge all week long. + +If this is not your style, fork it or start over, but at least try. + diff --git a/bin/.AppleDouble/.Parent b/bin/.AppleDouble/.Parent new file mode 100644 index 0000000..f67c728 Binary files /dev/null and b/bin/.AppleDouble/.Parent differ diff --git a/reference/libtinysmb/des.c b/reference/libtinysmb/des.c new file mode 100644 index 0000000..1dcf8ee --- /dev/null +++ b/reference/libtinysmb/des.c @@ -0,0 +1,439 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * DES encryption/decryption Algorithm + ****************************************************************************/ + +#include +#include + +typedef struct +{ + uint32_t encrypt_subkeys[32]; + uint32_t decrypt_subkeys[32]; +} gl_des_ctx; +/* + * The s-box values are permuted according to the 'primitive function P' + * and are rotated one bit to the left. + */ +static const uint32_t sbox1[64] = { + 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, + 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, + 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, + 0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, + 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, + 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 +}; + +static const uint32_t sbox2[64] = { + 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, + 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, + 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, + 0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, + 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, + 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 +}; + +static const uint32_t sbox3[64] = { + 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, + 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, + 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, + 0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, + 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, + 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 +}; + +static const uint32_t sbox4[64] = { + 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, + 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, + 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, + 0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, + 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, + 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 +}; + +static const uint32_t sbox5[64] = { + 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, + 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, + 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, + 0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, + 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, + 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 +}; + +static const uint32_t sbox6[64] = { + 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, + 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, + 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, + 0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, + 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, + 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 +}; + +static const uint32_t sbox7[64] = { + 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, + 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, + 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, + 0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, + 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, + 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 +}; + +static const uint32_t sbox8[64] = { + 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, + 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, + 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, + 0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, + 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, + 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 +}; + +/* + * These two tables are part of the 'permuted choice 1' function. + * In this implementation several speed improvements are done. + */ +static const uint32_t leftkey_swap[16] = { + 0x00000000, 0x00000001, 0x00000100, 0x00000101, + 0x00010000, 0x00010001, 0x00010100, 0x00010101, + 0x01000000, 0x01000001, 0x01000100, 0x01000101, + 0x01010000, 0x01010001, 0x01010100, 0x01010101 +}; + +static const uint32_t rightkey_swap[16] = { + 0x00000000, 0x01000000, 0x00010000, 0x01010000, + 0x00000100, 0x01000100, 0x00010100, 0x01010100, + 0x00000001, 0x01000001, 0x00010001, 0x01010001, + 0x00000101, 0x01000101, 0x00010101, 0x01010101, +}; + +/* + * Numbers of left shifts per round for encryption subkeys. To + * calculate the decryption subkeys we just reverse the ordering of + * the calculated encryption subkeys, so there is no need for a + * decryption rotate tab. + */ +static const unsigned char encrypt_rotate_tab[16] = { + 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 +}; + +/* + * Table with weak DES keys sorted in ascending order. In DES there + * are 64 known keys which are weak. They are weak because they + * produce only one, two or four different subkeys in the subkey + * scheduling process. The keys in this table have all their parity + * bits cleared. + */ +static const unsigned char weak_keys[64][8] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*w */ + {0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e}, + {0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0}, + {0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe}, + {0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e}, /*sw */ + {0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00}, + {0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe}, + {0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0}, + {0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0}, /*sw */ + {0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe}, + {0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00}, + {0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e}, + {0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe}, /*sw */ + {0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0}, + {0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e}, + {0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00}, + {0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e}, + {0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00}, /*sw */ + {0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe}, + {0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0}, + {0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00}, + {0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e}, /*w */ + {0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0}, + {0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe}, + {0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe}, + {0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0}, /*sw */ + {0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e}, + {0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00}, + {0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0}, + {0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe}, /*sw */ + {0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00}, + {0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e}, + {0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0}, + {0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe}, + {0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00}, /*sw */ + {0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e}, + {0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe}, + {0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0}, + {0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e}, /*sw */ + {0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00}, + {0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00}, + {0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e}, + {0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0}, /*w */ + {0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe}, + {0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e}, + {0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00}, + {0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe}, /*sw */ + {0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0}, + {0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe}, + {0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0}, + {0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e}, + {0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00}, /*sw */ + {0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0}, + {0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe}, + {0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00}, + {0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e}, /*sw */ + {0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e}, + {0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00}, + {0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe}, + {0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0}, /*sw */ + {0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00}, + {0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e}, + {0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0}, + {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe} /*w */ +}; + +/* + * Macro to swap bits across two words. + */ +#define DO_PERMUTATION(a, temp, b, offset, mask) \ + temp = ((a>>offset) ^ b) & mask; \ + b ^= temp; \ + a ^= temp<> 31); \ + temp = (left ^ right) & 0xaaaaaaaa; \ + right ^= temp; \ + left ^= temp; \ + left = (left << 1) | (left >> 31); + +/* + * The 'inverse initial permutation'. + */ +#define FINAL_PERMUTATION(left, temp, right) \ + left = (left << 31) | (left >> 1); \ + temp = (left ^ right) & 0xaaaaaaaa; \ + left ^= temp; \ + right ^= temp; \ + right = (right << 31) | (right >> 1); \ + DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ + DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ + DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ + DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) + + +/* + * A full DES round including 'expansion function', 'sbox substitution' + * and 'primitive function P' but without swapping the left and right word. + * Please note: The data in 'from' and 'to' is already rotated one bit to + * the left, done in the initial permutation. + */ +#define DES_ROUND(from, to, work, subkey) \ + work = from ^ *subkey++; \ + to ^= sbox8[ work & 0x3f ]; \ + to ^= sbox6[ (work>>8) & 0x3f ]; \ + to ^= sbox4[ (work>>16) & 0x3f ]; \ + to ^= sbox2[ (work>>24) & 0x3f ]; \ + work = ((from << 28) | (from >> 4)) ^ *subkey++; \ + to ^= sbox7[ work & 0x3f ]; \ + to ^= sbox5[ (work>>8) & 0x3f ]; \ + to ^= sbox3[ (work>>16) & 0x3f ]; \ + to ^= sbox1[ (work>>24) & 0x3f ]; + +/* + * Macros to convert 8 bytes from/to 32bit words. + */ +#define READ_64BIT_DATA(data, left, right) \ + left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ + right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; + +#define WRITE_64BIT_DATA(data, left, right) \ + data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ + data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ + data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ + data[6] = (right >> 8) &0xff; data[7] = right &0xff; + +/* + * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for + * 16 encryption rounds. + * To calculate subkeys for decryption the caller + * have to reorder the generated subkeys. + * + * rawkey: 8 Bytes of key data + * subkey: Array of at least 32 uint32_ts. Will be filled + * with calculated subkeys. + * + */ +static void +des_key_schedule (const char * _rawkey, uint32_t * subkey) +{ + const unsigned char *rawkey = (const unsigned char *) _rawkey; + uint32_t left, right, work; + int round; + + READ_64BIT_DATA (rawkey, left, right) + DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) + DO_PERMUTATION (right, work, left, 0, 0x10101010) + left = ((leftkey_swap[(left >> 0) & 0xf] << 3) + | (leftkey_swap[(left >> 8) & 0xf] << 2) + | (leftkey_swap[(left >> 16) & 0xf] << 1) + | (leftkey_swap[(left >> 24) & 0xf]) + | (leftkey_swap[(left >> 5) & 0xf] << 7) + | (leftkey_swap[(left >> 13) & 0xf] << 6) + | (leftkey_swap[(left >> 21) & 0xf] << 5) + | (leftkey_swap[(left >> 29) & 0xf] << 4)); + + left &= 0x0fffffff; + + right = ((rightkey_swap[(right >> 1) & 0xf] << 3) + | (rightkey_swap[(right >> 9) & 0xf] << 2) + | (rightkey_swap[(right >> 17) & 0xf] << 1) + | (rightkey_swap[(right >> 25) & 0xf]) + | (rightkey_swap[(right >> 4) & 0xf] << 7) + | (rightkey_swap[(right >> 12) & 0xf] << 6) + | (rightkey_swap[(right >> 20) & 0xf] << 5) + | (rightkey_swap[(right >> 28) & 0xf] << 4)); + + right &= 0x0fffffff; + + for (round = 0; round < 16; ++round) + { + left = ((left << encrypt_rotate_tab[round]) + | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; + right = ((right << encrypt_rotate_tab[round]) + | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; + + *subkey++ = (((left << 4) & 0x24000000) + | ((left << 28) & 0x10000000) + | ((left << 14) & 0x08000000) + | ((left << 18) & 0x02080000) + | ((left << 6) & 0x01000000) + | ((left << 9) & 0x00200000) + | ((left >> 1) & 0x00100000) + | ((left << 10) & 0x00040000) + | ((left << 2) & 0x00020000) + | ((left >> 10) & 0x00010000) + | ((right >> 13) & 0x00002000) + | ((right >> 4) & 0x00001000) + | ((right << 6) & 0x00000800) + | ((right >> 1) & 0x00000400) + | ((right >> 14) & 0x00000200) + | (right & 0x00000100) + | ((right >> 5) & 0x00000020) + | ((right >> 10) & 0x00000010) + | ((right >> 3) & 0x00000008) + | ((right >> 18) & 0x00000004) + | ((right >> 26) & 0x00000002) + | ((right >> 24) & 0x00000001)); + + *subkey++ = (((left << 15) & 0x20000000) + | ((left << 17) & 0x10000000) + | ((left << 10) & 0x08000000) + | ((left << 22) & 0x04000000) + | ((left >> 2) & 0x02000000) + | ((left << 1) & 0x01000000) + | ((left << 16) & 0x00200000) + | ((left << 11) & 0x00100000) + | ((left << 3) & 0x00080000) + | ((left >> 6) & 0x00040000) + | ((left << 15) & 0x00020000) + | ((left >> 4) & 0x00010000) + | ((right >> 2) & 0x00002000) + | ((right << 8) & 0x00001000) + | ((right >> 14) & 0x00000808) + | ((right >> 9) & 0x00000400) + | ((right) & 0x00000200) + | ((right << 7) & 0x00000100) + | ((right >> 7) & 0x00000020) + | ((right >> 3) & 0x00000011) + | ((right << 2) & 0x00000004) + | ((right >> 21) & 0x00000002)); + } +} + +void +gl_des_setkey (gl_des_ctx *ctx, const char * key) +{ + int i; + + des_key_schedule (key, ctx->encrypt_subkeys); + + for (i = 0; i < 32; i += 2) + { + ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30 - i]; + ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[31 - i]; + } +} + +void +gl_des_ecb_encrypt (gl_des_ctx *ctx, const char * _from, char * _to) +{ + const unsigned char *from = (const unsigned char *) _from; + unsigned char *to = (unsigned char *) _to; + uint32_t left, right, work; + uint32_t *keys; + + keys = ctx->encrypt_subkeys; + + READ_64BIT_DATA (from, left, right) + INITIAL_PERMUTATION (left, work, right) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + FINAL_PERMUTATION (right, work, left) + WRITE_64BIT_DATA (to, right, left) +} diff --git a/reference/libtinysmb/md4.c b/reference/libtinysmb/md4.c new file mode 100644 index 0000000..6a54667 --- /dev/null +++ b/reference/libtinysmb/md4.c @@ -0,0 +1,300 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * MD4 message digest + ****************************************************************************/ + +#include +#include + +/* Structure to save state of computation between the single steps. */ +struct md4_ctx +{ + uint32_t A; + uint32_t B; + uint32_t C; + uint32_t D; + + uint32_t total[2]; + uint32_t buflen; + uint32_t buffer[32]; +}; + +# define MD4_DIGEST_SIZE 16 + +# define SWAP(n) \ + (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) + +#define BLOCKSIZE 4096 +#if BLOCKSIZE % 64 != 0 +# error "invalid BLOCKSIZE" +#endif + +/* MD4 round constants */ +#define K1 0x5a827999 +#define K2 0x6ed9eba1 + +/* Round functions. */ +#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) +#define R1(a,b,c,d,k,s) a=rol(a+F(b,c,d)+x[k],s); +#define R2(a,b,c,d,k,s) a=rol(a+G(b,c,d)+x[k]+K1,s); +#define R3(a,b,c,d,k,s) a=rol(a+H(b,c,d)+x[k]+K2,s); + +/* This array contains the bytes used to pad the buffer to the next + 64-byte boundary. (RFC 1320, 3.1: Step 1) */ +static const unsigned char fillbuf[64] = +{ 0x80, 0 /* , 0, 0, ... */}; + +/* Initialize structure containing state of computation. + (RFC 1320, 3.3: Step 3) */ +static void md4_init_ctx(struct md4_ctx *ctx) +{ + ctx->A = 0x67452301; + ctx->B = 0xefcdab89; + ctx->C = 0x98badcfe; + ctx->D = 0x10325476; + + ctx->total[0] = ctx->total[1] = 0; + ctx->buflen = 0; +} + +/* Copy the 4 byte value from v into the memory location pointed to by *cp, + If your architecture allows unaligned access this is equivalent to + * (uint32_t *) cp = v */ +static inline void set_uint32(char *cp, uint32_t v) +{ + memcpy(cp, &v, sizeof v); +} + +/* Put result from CTX in first 16 bytes following RESBUF. The result + must be in little endian byte order. */ +static void * +md4_read_ctx(const struct md4_ctx *ctx, void *resbuf) +{ + char *r = resbuf; + set_uint32(r + 0 * sizeof ctx->A, SWAP (ctx->A)); + set_uint32(r + 1 * sizeof ctx->B, SWAP (ctx->B)); + set_uint32(r + 2 * sizeof ctx->C, SWAP (ctx->C)); + set_uint32(r + 3 * sizeof ctx->D, SWAP (ctx->D)); + + return resbuf; +} + +/* Process LEN bytes of BUFFER, accumulating context into CTX. + It is assumed that LEN % 64 == 0. */ + +static void md4_process_block(const void *buffer, size_t len, + struct md4_ctx *ctx) +{ + const uint32_t *words = buffer; + size_t nwords = len / sizeof(uint32_t); + const uint32_t *endp = words + nwords; + uint32_t x[16]; + uint32_t A = ctx->A; + uint32_t B = ctx->B; + uint32_t C = ctx->C; + uint32_t D = ctx->D; + + /* First increment the byte count. RFC 1320 specifies the possible + length of the file up to 2^64 bits. Here we only compute the + number of bytes. Do a double word increment. */ + ctx->total[0] += len; + if (ctx->total[0] < len) + ++ctx->total[1]; + + /* Process all bytes in the buffer with 64 bytes in each round of + the loop. */ + while (words < endp) + { + int t; + for (t = 0; t < 16; t++) + { + x[t] = SWAP (*words); + words++; + } + + /* Round 1. */ + R1 (A, B, C, D, 0, 3); + R1 (D, A, B, C, 1, 7); + R1 (C, D, A, B, 2, 11); + R1 (B, C, D, A, 3, 19); + R1 (A, B, C, D, 4, 3); + R1 (D, A, B, C, 5, 7); + R1 (C, D, A, B, 6, 11); + R1 (B, C, D, A, 7, 19); + R1 (A, B, C, D, 8, 3); + R1 (D, A, B, C, 9, 7); + R1 (C, D, A, B, 10, 11); + R1 (B, C, D, A, 11, 19); + R1 (A, B, C, D, 12, 3); + R1 (D, A, B, C, 13, 7); + R1 (C, D, A, B, 14, 11); + R1 (B, C, D, A, 15, 19); + + /* Round 2. */ + R2 (A, B, C, D, 0, 3); + R2 (D, A, B, C, 4, 5); + R2 (C, D, A, B, 8, 9); + R2 (B, C, D, A, 12, 13); + R2 (A, B, C, D, 1, 3); + R2 (D, A, B, C, 5, 5); + R2 (C, D, A, B, 9, 9); + R2 (B, C, D, A, 13, 13); + R2 (A, B, C, D, 2, 3); + R2 (D, A, B, C, 6, 5); + R2 (C, D, A, B, 10, 9); + R2 (B, C, D, A, 14, 13); + R2 (A, B, C, D, 3, 3); + R2 (D, A, B, C, 7, 5); + R2 (C, D, A, B, 11, 9); + R2 (B, C, D, A, 15, 13); + + /* Round 3. */ + R3 (A, B, C, D, 0, 3); + R3 (D, A, B, C, 8, 9); + R3 (C, D, A, B, 4, 11); + R3 (B, C, D, A, 12, 15); + R3 (A, B, C, D, 2, 3); + R3 (D, A, B, C, 10, 9); + R3 (C, D, A, B, 6, 11); + R3 (B, C, D, A, 14, 15); + R3 (A, B, C, D, 1, 3); + R3 (D, A, B, C, 9, 9); + R3 (C, D, A, B, 5, 11); + R3 (B, C, D, A, 13, 15); + R3 (A, B, C, D, 3, 3); + R3 (D, A, B, C, 11, 9); + R3 (C, D, A, B, 7, 11); + R3 (B, C, D, A, 15, 15); + + A = ctx->A += A; + B = ctx->B += B; + C = ctx->C += C; + D = ctx->D += D; + } +} + +/* Process the remaining bytes in the internal buffer and the usual + prolog according to the standard and write the result to RESBUF. */ +static void * +md4_finish_ctx(struct md4_ctx *ctx, void *resbuf) +{ + /* Take yet unprocessed bytes into account. */ + uint32_t bytes = ctx->buflen; + size_t pad; + + /* Now count remaining bytes. */ + ctx->total[0] += bytes; + if (ctx->total[0] < bytes) + ++ctx->total[1]; + + pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; + memcpy(&((char*) ctx->buffer)[bytes], fillbuf, pad); + + /* Put the 64-bit file length in *bits* at the end of the buffer. */ + ctx->buffer[(bytes + pad) / 4] = SWAP (ctx->total[0] << 3); + ctx->buffer[(bytes + pad) / 4 + 1] = SWAP ((ctx->total[1] << 3) | + (ctx->total[0] >> 29)); + + /* Process last bytes. */ + md4_process_block(ctx->buffer, bytes + pad + 8, ctx); + + return md4_read_ctx(ctx, resbuf); +} + +static void md4_process_bytes(const void *buffer, size_t len, + struct md4_ctx *ctx) +{ + /* When we already have some bits in our internal buffer concatenate + both inputs first. */ + if (ctx->buflen != 0) + { + size_t left_over = ctx->buflen; + size_t add = 128 - left_over > len ? len : 128 - left_over; + + memcpy(&((char*) ctx->buffer)[left_over], buffer, add); + ctx->buflen += add; + + if (ctx->buflen > 64) + { + md4_process_block(ctx->buffer, ctx->buflen & ~63, ctx); + + ctx->buflen &= 63; + /* The regions in the following copy operation cannot overlap. */ + memcpy(ctx->buffer, + &((char*) ctx->buffer)[(left_over + add) & ~63], + ctx->buflen); + } + + buffer = (const char *) buffer + add; + len -= add; + } + + /* Process available complete blocks. */ + if (len >= 64) + { +#if !_STRING_ARCH_unaligned + /* To check alignment gcc has an appropriate operator. Other + compilers don't. */ +# if __GNUC__ >= 2 +# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint32_t) != 0) +# else +# define alignof(type) offsetof (struct { char c; type x; }, x) +# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) +# endif + if ( + UNALIGNED_P (buffer)) + while (len> 64) + { + md4_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); + buffer = (const char *) buffer + 64; + len -= 64; + } + else +#endif + { + md4_process_block (buffer, len & ~63, ctx); + buffer = (const char *) buffer + (len & ~63); + len &= 63; + } + } + + /* Move remaining bytes in internal buffer. */ + if (len > 0) + { + size_t left_over = ctx->buflen; + + memcpy(&((char*) ctx->buffer)[left_over], buffer, len); + left_over += len; + if (left_over >= 64) + { + md4_process_block(ctx->buffer, 64, ctx); + left_over -= 64; + memcpy(ctx->buffer, &ctx->buffer[16], left_over); + } + ctx->buflen = left_over; + } +} + +/* Compute MD4 message digest for LEN bytes beginning at BUFFER. The + result is always in little endian byte order, so that a byte-wise + output yields to the wanted ASCII representation of the message + digest. */ +void * +md4_buffer(const char *buffer, size_t len, void *resblock) +{ + struct md4_ctx ctx; + + /* Initialize the computation context. */ + md4_init_ctx(&ctx); + + /* Process whole buffer but last len % 64 bytes. */ + md4_process_bytes(buffer, len, &ctx); + + /* Put result in desired memory area. */ + return md4_finish_ctx(&ctx, resblock); +} diff --git a/reference/libtinysmb/ntlm.c b/reference/libtinysmb/ntlm.c new file mode 100644 index 0000000..580178c --- /dev/null +++ b/reference/libtinysmb/ntlm.c @@ -0,0 +1,97 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * NTLM authentication + ****************************************************************************/ + +#include +#include +#include +#include +#include + +typedef struct +{ + uint32_t encrypt_subkeys[32]; + uint32_t decrypt_subkeys[32]; +} gl_des_ctx; + +extern void *md4_buffer(const char *buffer, size_t len, void *resblock); +extern void gl_des_setkey(gl_des_ctx *ctx, const char * key); +extern void gl_des_ecb_encrypt(gl_des_ctx *ctx, const char * from, char * to); + +/* C89 compliant way to cast 'char' to 'unsigned char'. */ +static inline unsigned char to_uchar(char ch) +{ + return ch; +} + +/* + * turns a 56 bit key into the 64 bit, and sets the key schedule ks. + */ +static void ntlm_convert_key(char *key_56, gl_des_ctx * ks) +{ + char key[8]; + + key[0] = to_uchar(key_56[0]); + key[1] = ((to_uchar(key_56[0]) << 7) & 0xFF) | (to_uchar(key_56[1]) >> 1); + key[2] = ((to_uchar(key_56[1]) << 6) & 0xFF) | (to_uchar(key_56[2]) >> 2); + key[3] = ((to_uchar(key_56[2]) << 5) & 0xFF) | (to_uchar(key_56[3]) >> 3); + key[4] = ((to_uchar(key_56[3]) << 4) & 0xFF) | (to_uchar(key_56[4]) >> 4); + key[5] = ((to_uchar(key_56[4]) << 3) & 0xFF) | (to_uchar(key_56[5]) >> 5); + key[6] = ((to_uchar(key_56[5]) << 2) & 0xFF) | (to_uchar(key_56[6]) >> 6); + key[7] = (to_uchar(key_56[6]) << 1) & 0xFF; + + gl_des_setkey(ks, key); + + memset(&key, 0, sizeof(key)); +} + +/* + * takes a 21 byte array and treats it as 3 56-bit DES keys. The + * 8 byte plaintext is encrypted with each key and the resulting 24 + * bytes are stored in the results array. + */ +static void ntlm_encrypt_answer(char *hash, const char *challenge, char *answer) +{ + gl_des_ctx ks; + + ntlm_convert_key(hash, &ks); + gl_des_ecb_encrypt(&ks, challenge, answer); + + ntlm_convert_key(&hash[7], &ks); + gl_des_ecb_encrypt(&ks, challenge, &answer[8]); + + ntlm_convert_key(&hash[14], &ks); + gl_des_ecb_encrypt(&ks, challenge, &answer[16]); + + memset(&ks, 0, sizeof(ks)); +} + +void ntlm_smb_nt_encrypt(const char *passwd, const u8 * challenge, u8 * answer) +{ + size_t len, i; + unsigned char hash[24]; + unsigned char nt_pw[256]; + + /* NT resp */ + len = strlen(passwd); + if (len > 128) + len = 128; + for (i = 0; i < len; ++i) + { + nt_pw[2 * i] = passwd[i]; + nt_pw[2 * i + 1] = 0; + } + + md4_buffer((const char *) nt_pw, len * 2, hash); + + memset(hash + 16, 0, 5); + ntlm_encrypt_answer((char *) hash, (const char *) challenge, + (char *) answer); + + /* with security is best be pedantic */ + memset(hash, 0, sizeof(hash)); + memset(nt_pw, 0, sizeof(nt_pw)); +} diff --git a/reference/libtinysmb/smb.c b/reference/libtinysmb/smb.c new file mode 100644 index 0000000..d445e3e --- /dev/null +++ b/reference/libtinysmb/smb.c @@ -0,0 +1,2333 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * Copyright softdev + * Modified by Tantric to utilize NTLM authentication + * PathInfo added by rodries + * SMB devoptab by scip, rodries + * + * You will find WireShark (http://www.wireshark.org/) + * invaluable for debugging SAMBA implementations. + * + * Recommended Reading + * Implementing CIFS - Christopher R Hertel + * http://www.ubiqx.org/cifs/SMB.html + * + * License: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define IOS_O_NONBLOCK 0x04 +#define RECV_TIMEOUT 3000 // in ms +#define CONN_TIMEOUT 6000 + +/** + * Field offsets. + */ +#define SMB_OFFSET_PROTO 0 +#define SMB_OFFSET_CMD 4 +#define SMB_OFFSET_NTSTATUS 5 +#define SMB_OFFSET_ECLASS 5 +#define SMB_OFFSET_ECODE 7 +#define SMB_OFFSET_FLAGS 9 +#define SMB_OFFSET_FLAGS2 10 +#define SMB_OFFSET_EXTRA 12 +#define SMB_OFFSET_TID 24 +#define SMB_OFFSET_PID 26 +#define SMB_OFFSET_UID 28 +#define SMB_OFFSET_MID 30 +#define SMB_HEADER_SIZE 32 /*** SMB Headers are always 32 bytes long ***/ + +/** + * Message / Commands + */ +#define NBT_SESSISON_MSG 0x00 + +#define SMB_NEG_PROTOCOL 0x72 +#define SMB_SETUP_ANDX 0x73 +#define SMB_TREEC_ANDX 0x75 + + +#define NBT_KEEPALIVE_MSG 0x85 +#define KEEPALIVE_SIZE 4 + +/** + * SMBTrans2 + */ +#define SMB_TRANS2 0x32 + +#define SMB_OPEN2 0 +#define SMB_FIND_FIRST2 1 +#define SMB_FIND_NEXT2 2 +#define SMB_QUERY_FS_INFO 3 +#define SMB_QUERY_PATH_INFO 5 +#define SMB_SET_PATH_INFO 6 +#define SMB_QUERY_FILE_INFO 7 +#define SMB_SET_FILE_INFO 8 +#define SMB_CREATE_DIR 13 +#define SMB_FIND_CLOSE2 0x34 +#define SMB_QUERY_FILE_ALL_INFO 0x107 + +/** + * File I/O + */ +#define SMB_OPEN_ANDX 0x2d +#define SMB_WRITE_ANDX 0x2f +#define SMB_READ_ANDX 0x2e +#define SMB_CLOSE 0x04 + +/** + * SMB_COM + */ +#define SMB_COM_CREATE_DIRECTORY 0x00 +#define SMB_COM_DELETE_DIRECTORY 0x01 +#define SMB_COM_DELETE 0x06 +#define SMB_COM_RENAME 0x07 +#define SMB_COM_QUERY_INFORMATION_DISK 0x80 + +/** + * TRANS2 Offsets + */ +#define T2_WORD_CNT (SMB_HEADER_SIZE) +#define T2_PRM_CNT (T2_WORD_CNT+1) +#define T2_DATA_CNT (T2_PRM_CNT+2) +#define T2_MAXPRM_CNT (T2_DATA_CNT+2) +#define T2_MAXBUFFER (T2_MAXPRM_CNT+2) +#define T2_SETUP_CNT (T2_MAXBUFFER+2) +#define T2_SPRM_CNT (T2_SETUP_CNT+10) +#define T2_SPRM_OFS (T2_SPRM_CNT+2) +#define T2_SDATA_CNT (T2_SPRM_OFS+2) +#define T2_SDATA_OFS (T2_SDATA_CNT+2) +#define T2_SSETUP_CNT (T2_SDATA_OFS+2) +#define T2_SUB_CMD (T2_SSETUP_CNT+2) +#define T2_BYTE_CNT (T2_SUB_CMD+2) + + +#define SMB_PROTO 0x424d53ff +#define SMB_HANDLE_NULL 0xffffffff +#define SMB_MAX_NET_READ_SIZE (16*1024) // see smb_recv +#define SMB_MAX_NET_WRITE_SIZE 4096 // see smb_sendv +#define SMB_MAX_TRANSMIT_SIZE 65472 + +#define CAP_LARGE_FILES 0x00000008 // 64-bit file sizes and offsets supported +#define CAP_UNICODE 0x00000004 // Unicode supported +#define CIFS_FLAGS1 0x08 // Paths are caseless +#define CIFS_FLAGS2_UNICODE 0x8001 // Server may return long components in paths in the response - use 0x8001 for Unicode support +#define CIFS_FLAGS2 0x0001 // Server may return long components in paths in the response - use 0x0001 for ASCII support + +#define SMB_CONNHANDLES_MAX 8 +#define SMB_FILEHANDLES_MAX (32*SMB_CONNHANDLES_MAX) + +#define SMB_OBJTYPE_HANDLE 7 +#define SMB_CHECK_HANDLE(hndl) \ +{ \ + if(((hndl)==SMB_HANDLE_NULL) || (LWP_OBJTYPE(hndl)!=SMB_OBJTYPE_HANDLE)) \ + return NULL; \ +} + +/* NBT Session Service Packet Type Codes + */ + +#define SESS_MSG 0x00 +#define SESS_REQ 0x81 +#define SESS_POS_RESP 0x82 +#define SESS_NEG_RESP 0x83 +#define SESS_RETARGET 0x84 +#define SESS_KEEPALIVE 0x85 + +struct _smbfile +{ + lwp_node node; + u16 sfid; + SMBCONN conn; +}; + +/** + * NBT/SMB Wrapper + */ +typedef struct _nbtsmb +{ + u8 msg; /*** NBT Message ***/ + u8 length_high; + u16 length; /*** Length, excluding NBT ***/ + u8 smb[SMB_MAX_TRANSMIT_SIZE+128]; +} NBTSMB; + +/** + * Session Information + */ +typedef struct _smbsession +{ + u16 TID; + u16 PID; + u16 UID; + u16 MID; + u32 sKey; + u32 capabilities; + u32 MaxBuffer; + u16 MaxMpx; + u16 MaxVCS; + u8 challenge[10]; + u8 p_domain[64]; + s64 timeOffset; + u16 count; + u16 eos; + bool challengeUsed; + u8 securityLevel; +} SMBSESSION; + +typedef struct _smbhandle +{ + lwp_obj object; + char *user; + char *pwd; + char *share_name; + char *server_name; + s32 sck_server; + struct sockaddr_in server_addr; + bool conn_valid; + SMBSESSION session; + NBTSMB message; + bool unicode; +} SMBHANDLE; + +static u32 smb_dialectcnt = 1; +static bool smb_inited = false; +static lwp_objinfo smb_handle_objects; +static lwp_queue smb_filehandle_queue; +static struct _smbfile smb_filehandles[SMB_FILEHANDLES_MAX]; +static const char *smb_dialects[] = {"NT LM 0.12",NULL}; + +extern void ntlm_smb_nt_encrypt(const char *passwd, const u8 * challenge, u8 * answer); + +// UTF conversion functions +size_t utf16_to_utf8(char* dst, char* src, size_t len) +{ + mbstate_t ps; + size_t count = 0; + int bytes; + char buff[MB_CUR_MAX]; + int i; + unsigned short c; + memset(&ps, 0, sizeof(mbstate_t)); + + while (count < len && *src != '\0') + { + c = *(src + 1) << 8 | *src; // little endian + if (c == 0) + break; + bytes = wcrtomb(buff, c, &ps); + if (bytes < 0) + { + *dst = '\0'; + return -1; + } + if (bytes > 0) + { + for (i = 0; i < bytes; i++) + { + *dst++ = buff[i]; + } + src += 2; + count += 2; + } + else + { + break; + } + } + *dst = '\0'; + return count; +} + +size_t utf8_to_utf16(char* dst, char* src, size_t len) +{ + mbstate_t ps; + wchar_t tempWChar; + char *tempChar; + int bytes; + size_t count = 0; + tempChar = (char*) &tempWChar; + memset(&ps, 0, sizeof(mbstate_t)); + + while (count < len - 1 && src != '\0') + { + bytes = mbrtowc(&tempWChar, src, MB_CUR_MAX, &ps); + if (bytes > 0) + { + *dst = tempChar[3]; + dst++; + *dst = tempChar[2]; + dst++; + src += bytes; + count += 2; + } + else if (bytes == 0) + { + break; + } + else + { + *dst = '\0'; + dst++; + *dst = '\0'; + return -1; + } + } + *dst = '\0'; + dst++; + *dst = '\0'; + return count; +} + +/** + * SMB Endian aware supporting functions + * + * SMB always uses Intel Little-Endian values, so htons etc are + * of little or no use :) ... Thanks M$ + */ + +/*** get unsigned char ***/ +static __inline__ u8 getUChar(u8 *buffer,u32 offset) +{ + return (u8)buffer[offset]; +} + +/*** set unsigned char ***/ +static __inline__ void setUChar(u8 *buffer,u32 offset,u8 value) +{ + buffer[offset] = value; +} + +/*** get signed short ***/ +static __inline__ s16 getShort(u8 *buffer,u32 offset) +{ + return (s16)((buffer[offset+1]<<8)|(buffer[offset])); +} + +/*** get unsigned short ***/ +static __inline__ u16 getUShort(u8 *buffer,u32 offset) +{ + return (u16)((buffer[offset+1]<<8)|(buffer[offset])); +} + +/*** set unsigned short ***/ +static __inline__ void setUShort(u8 *buffer,u32 offset,u16 value) +{ + buffer[offset] = (value&0xff); + buffer[offset+1] = ((value&0xff00)>>8); +} + +/*** get unsigned int ***/ +static __inline__ u32 getUInt(u8 *buffer,u32 offset) +{ + return (u32)((buffer[offset+3]<<24)|(buffer[offset+2]<<16)|(buffer[offset+1]<<8)|buffer[offset]); +} + +/*** set unsigned int ***/ +static __inline__ void setUInt(u8 *buffer,u32 offset,u32 value) +{ + buffer[offset] = (value&0xff); + buffer[offset+1] = ((value&0xff00)>>8); + buffer[offset+2] = ((value&0xff0000)>>16); + buffer[offset+3] = ((value&0xff000000)>>24); +} + +/*** get unsigned long long ***/ +static __inline__ u64 getULongLong(u8 *buffer,u32 offset) +{ + return (u64)(getUInt(buffer, offset) | (u64)getUInt(buffer, offset+4) << 32); +} + +static __inline__ SMBHANDLE* __smb_handle_open(SMBCONN smbhndl) +{ + u32 level; + SMBHANDLE *handle; + + SMB_CHECK_HANDLE(smbhndl); + + _CPU_ISR_Disable(level); + handle = (SMBHANDLE*)__lwp_objmgr_getnoprotection(&smb_handle_objects,LWP_OBJMASKID(smbhndl)); + _CPU_ISR_Restore(level); + return handle; +} + + +static __inline__ void __smb_handle_free(SMBHANDLE *handle) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_objmgr_close(&smb_handle_objects,&handle->object); + __lwp_objmgr_free(&smb_handle_objects,&handle->object); + _CPU_ISR_Restore(level); +} + +static void __smb_init() +{ + smb_inited = true; + __lwp_objmgr_initinfo(&smb_handle_objects,SMB_CONNHANDLES_MAX,sizeof(SMBHANDLE)); + __lwp_queue_initialize(&smb_filehandle_queue,smb_filehandles,SMB_FILEHANDLES_MAX,sizeof(struct _smbfile)); +} + +static SMBHANDLE* __smb_allocate_handle() +{ + u32 level; + SMBHANDLE *handle; + + _CPU_ISR_Disable(level); + handle = (SMBHANDLE*)__lwp_objmgr_allocate(&smb_handle_objects); + if(handle) { + handle->user = NULL; + handle->pwd = NULL; + handle->server_name = NULL; + handle->share_name = NULL; + handle->sck_server = INVALID_SOCKET; + handle->conn_valid = false; + __lwp_objmgr_open(&smb_handle_objects,&handle->object); + } + _CPU_ISR_Restore(level); + return handle; +} + +static void __smb_free_handle(SMBHANDLE *handle) +{ + if(handle->user) free(handle->user); + if(handle->pwd) free(handle->pwd); + if(handle->server_name) free(handle->server_name); + if(handle->share_name) free(handle->share_name); + + handle->user = NULL; + handle->pwd = NULL; + handle->server_name = NULL; + handle->share_name = NULL; + handle->sck_server = INVALID_SOCKET; + + __smb_handle_free(handle); +} + +static void MakeSMBHeader(u8 command,u8 flags,u16 flags2,SMBHANDLE *handle) +{ + u8 *ptr = handle->message.smb; + NBTSMB *nbt = &handle->message; + SMBSESSION *sess = &handle->session; + + memset(nbt,0,sizeof(NBTSMB)); + + setUInt(ptr,SMB_OFFSET_PROTO,SMB_PROTO); + setUChar(ptr,SMB_OFFSET_CMD,command); + setUChar(ptr,SMB_OFFSET_FLAGS,flags); + setUShort(ptr,SMB_OFFSET_FLAGS2,flags2); + setUShort(ptr,SMB_OFFSET_TID,sess->TID); + setUShort(ptr,SMB_OFFSET_PID,sess->PID); + setUShort(ptr,SMB_OFFSET_UID,sess->UID); + setUShort(ptr,SMB_OFFSET_MID,sess->MID); + + ptr[SMB_HEADER_SIZE] = 0; +} + +/** + * MakeTRANS2Hdr + */ +static void MakeTRANS2Header(u8 subcommand,SMBHANDLE *handle) +{ + u8 *ptr = handle->message.smb; + + setUChar(ptr, T2_WORD_CNT, 15); + setUShort(ptr, T2_MAXPRM_CNT, 10); + setUShort(ptr, T2_MAXBUFFER, 16384); + setUChar(ptr, T2_SSETUP_CNT, 1); + setUShort(ptr, T2_SUB_CMD, subcommand); +} + +/** + * smb_send + * + * blocking call with timeout + * will return when ALL data has been sent. Number of bytes sent is returned. + * OR timeout. Timeout will return -1 + * OR network error. -ve value will be returned + */ +static inline s32 smb_send(s32 s,const void *data,s32 size) +{ + u64 t1,t2; + s32 ret, len = size, nextsend; + + t1=ticks_to_millisecs(gettime()); + while(len>0) + { + nextsend=len; + + if(nextsend>SMB_MAX_NET_WRITE_SIZE) + nextsend=SMB_MAX_NET_WRITE_SIZE; //optimized value + + ret=net_send(s,data,nextsend,0); + if(ret==-EAGAIN) + { + t2=ticks_to_millisecs(gettime()); + if( (t2 - t1) > RECV_TIMEOUT) + { + return -1; // timeout + } + usleep(100); // allow system to perform work. Stabilizes system + continue; + } + else if(ret<0) + { + return ret; // an error occurred + } + else + { + data+=ret; + len-=ret; + if(len==0) return size; + t1=ticks_to_millisecs(gettime()); + } + usleep(100); + } + return size; +} + +/** + * smb_recv + * + * blocking call with timeout + * will return when ANY data has been read from socket. Number of bytes read is returned. + * OR timeout. Timeout will return -1 + * OR network error. -ve value will be returned + */ +static s32 smb_recv(s32 s,void *mem,s32 len) +{ + s32 ret,read,readtotal=0; + u64 t1,t2; + + t1=ticks_to_millisecs(gettime()); + while(len > 0) + { + read=len; + if(read>SMB_MAX_NET_READ_SIZE) + read=SMB_MAX_NET_READ_SIZE; // optimized value + + ret=net_recv(s,mem+readtotal,read,0); + if(ret>0) + { + readtotal+=ret; + len-=ret; + if(len==0) return readtotal; + } + else + { + if(ret!=-EAGAIN) return ret; + t2=ticks_to_millisecs(gettime()); + if( (t2 - t1) > RECV_TIMEOUT) return -1; + } + usleep(1000); + } + return readtotal; +} + +static void clear_network(s32 s,u8 *ptr) +{ + u64 t1,t2; + + t1=ticks_to_millisecs(gettime()); + while(true) + { + net_recv(s,ptr,SMB_MAX_NET_READ_SIZE,0); + + t2=ticks_to_millisecs(gettime()); + if( (t2 - t1) > 600) return; + usleep(100); + } +} + +/** + * SMBCheck + * + * Do very basic checking on the return SMB + * Read bytes + * if ==0 then read a single SMB packet + * discard any non NBT_SESSISON_MSG packets along the way. + */ +static s32 SMBCheck(u8 command,SMBHANDLE *handle) +{ + s32 ret; + u8 *ptr = handle->message.smb; + NBTSMB *nbt = &handle->message; + u32 readlen; + u64 t1,t2; + + if(handle->sck_server == INVALID_SOCKET) return SMB_ERROR; + + memset(nbt,0xFF,sizeof(NBTSMB)); //NBT_SESSISON_MSG is 0x00 so fill mem with 0xFF + + t1=ticks_to_millisecs(gettime()); + + /*keep going till we get a NBT session message*/ + do{ + ret=smb_recv(handle->sck_server, (u8*)nbt, 4); + if(ret!=4) goto failed; + + if(nbt->msg!=NBT_SESSISON_MSG) + { + readlen=(u32)((nbt->length_high<<16)|nbt->length); + if(readlen>0) + { + t1=ticks_to_millisecs(gettime()); + smb_recv(handle->sck_server, ptr, readlen); //clear unexpected NBT message + } + } + t2=ticks_to_millisecs(gettime()); + if( (t2 - t1) > RECV_TIMEOUT * 2) goto failed; + + } while(nbt->msg!=NBT_SESSISON_MSG); + + /* obtain required length from NBT header if readlen==0*/ + readlen=(u32)((nbt->length_high<<16)|nbt->length); + + // Get server message block + ret=smb_recv(handle->sck_server, ptr, readlen); + if(readlen!=ret) goto failed; + + /*** Do basic SMB Header checks ***/ + ret = getUInt(ptr,SMB_OFFSET_PROTO); + if(ret!=SMB_PROTO) goto failed; + + ret = getUChar(ptr, SMB_OFFSET_CMD); + if(ret!=command) goto failed; + + ret = getUInt(ptr,SMB_OFFSET_NTSTATUS); + if(ret) goto failed; + + return SMB_SUCCESS; +failed: + clear_network(handle->sck_server,ptr); + return SMB_ERROR; +} + +/** + * SMB_SetupAndX + * + * Setup the SMB session, including authentication with the + * magic 'NTLM Response' + */ +static s32 SMB_SetupAndX(SMBHANDLE *handle) +{ + s32 pos; + s32 bcpos; + s32 i, ret; + u8 *ptr = handle->message.smb; + SMBSESSION *sess = &handle->session; + char pwd[30], ntRespData[24]; + + if(handle->sck_server == INVALID_SOCKET) return SMB_ERROR; + + MakeSMBHeader(SMB_SETUP_ANDX,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + pos = SMB_HEADER_SIZE; + + setUChar(ptr,pos,13); + pos++; /*** Word Count ***/ + setUChar(ptr,pos,0xff); + pos++; /*** Next AndX ***/ + setUChar(ptr,pos,0); + pos++; /*** Reserved ***/ + pos += 2; /*** Next AndX Offset ***/ + setUShort(ptr,pos,sess->MaxBuffer); + pos += 2; + setUShort(ptr,pos,sess->MaxMpx); + pos += 2; + setUShort(ptr,pos,sess->MaxVCS); + pos += 2; + setUInt(ptr,pos,sess->sKey); + pos += 4; + setUShort(ptr,pos,24); /*** Password length (case-insensitive) ***/ + pos += 2; + setUShort(ptr,pos,24); /*** Password length (case-sensitive) ***/ + pos += 2; + setUInt(ptr,pos,0); + pos += 4; /*** Reserved ***/ + setUInt(ptr,pos,sess->capabilities); + pos += 4; /*** Capabilities ***/ + bcpos = pos; + pos += 2; /*** Byte count ***/ + + /*** The magic 'NTLM Response' ***/ + strcpy(pwd, handle->pwd); + if (sess->challengeUsed) + ntlm_smb_nt_encrypt((const char *) pwd, (const u8 *) sess->challenge, (u8*) ntRespData); + + /*** Build information ***/ + memset(&ptr[pos],0,24); + pos += 24; + memcpy(&ptr[pos],ntRespData,24); + pos += 24; + pos++; + /*** Account ***/ + strcpy(pwd, handle->user); + for(i=0;iunicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],pwd,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],pwd,strlen(pwd)); + pos += strlen(pwd)+1; + } + + /*** Primary Domain ***/ + if(handle->user[0]=='\0') sess->p_domain[0] = '\0'; + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],(char*)sess->p_domain,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],sess->p_domain,strlen((const char*)sess->p_domain)); + pos += strlen((const char*)sess->p_domain)+1; + } + + /*** Native OS ***/ + strcpy(pwd,"Unix (libOGC)"); + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],pwd,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],pwd,strlen(pwd)); + pos += strlen(pwd)+1; + } + + /*** Native LAN Manager ***/ + strcpy(pwd,"Nintendo Wii"); + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],pwd,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],pwd,strlen(pwd)); + pos += strlen (pwd)+1; + } + + /*** Update byte count ***/ + setUShort(ptr,bcpos,((pos-bcpos)-2)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons (pos); + pos += 4; + + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<=0) return SMB_ERROR; + + if((ret=SMBCheck(SMB_SETUP_ANDX,handle))==SMB_SUCCESS) { + /*** Collect UID ***/ + sess->UID = getUShort(handle->message.smb,SMB_OFFSET_UID); + return SMB_SUCCESS; + } + return ret; +} + +/** + * SMB_TreeAndX + * + * Finally, net_connect to the remote share + */ +static s32 SMB_TreeAndX(SMBHANDLE *handle) +{ + s32 pos, bcpos, ret; + char path[512]; + u8 *ptr = handle->message.smb; + SMBSESSION *sess = &handle->session; + + if(handle->sck_server == INVALID_SOCKET) return SMB_ERROR; + + MakeSMBHeader(SMB_TREEC_ANDX,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + pos = SMB_HEADER_SIZE; + + setUChar(ptr,pos,4); + pos++; /*** Word Count ***/ + setUChar(ptr,pos,0xff); + pos++; /*** Next AndX ***/ + pos++; /*** Reserved ***/ + pos += 2; /*** Next AndX Offset ***/ + pos += 2; /*** Flags ***/ + setUShort(ptr,pos,1); + pos += 2; /*** Password Length ***/ + bcpos = pos; + pos += 2; + pos++; /*** NULL Password ***/ + + /*** Build server share path ***/ + strcpy ((char*)path, "\\\\"); + strcat ((char*)path, handle->server_name); + strcat ((char*)path, "\\"); + strcat ((char*)path, handle->share_name); + + for(ret=0;retunicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],path,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],path,strlen((const char*)path)); + pos += strlen((const char*)path)+1; + } + + /*** Service ***/ + strcpy((char*)path,"?????"); + memcpy(&ptr[pos],path,strlen((const char*)path)); + pos += strlen((const char*)path)+1; + + + /*** Update byte count ***/ + setUShort(ptr,bcpos,(pos-bcpos)-2); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons (pos); + pos += 4; + + ret = smb_send(handle->sck_server,(char *)&handle->message,pos); + if(ret<=0) return SMB_ERROR; + + if((ret=SMBCheck(SMB_TREEC_ANDX,handle))==SMB_SUCCESS) { + /*** Collect Tree ID ***/ + sess->TID = getUShort(handle->message.smb,SMB_OFFSET_TID); + return SMB_SUCCESS; + } + return ret; +} + +/** + * SMB_NegotiateProtocol + * + * The only protocol we admit to is 'NT LM 0.12' + */ +static s32 SMB_NegotiateProtocol(const char *dialects[],int dialectc,SMBHANDLE *handle) +{ + u8 *ptr; + s32 pos; + s32 bcnt,i,j; + s32 ret,len; + u32 serverMaxBuffer; + SMBSESSION *sess; + + if(!handle || !dialects || dialectc<=0) + return SMB_ERROR; + + if(handle->sck_server == INVALID_SOCKET) return SMB_ERROR; + + /*** Clear session variables ***/ + sess = &handle->session; + memset(sess,0,sizeof(SMBSESSION)); + sess->PID = 0xdead; + sess->MID = 1; + sess->capabilities = 0; + + MakeSMBHeader(SMB_NEG_PROTOCOL,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE+3; + ptr = handle->message.smb; + for(i=0,bcnt=0;imessage.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + pos += 4; + + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<=0) return SMB_ERROR; + + /*** Check response ***/ + if((ret=SMBCheck(SMB_NEG_PROTOCOL,handle))==SMB_SUCCESS) + { + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + + /*** Collect information ***/ + if(getUChar(ptr,pos)!=17) return SMB_PROTO_FAIL; // UCHAR WordCount; Count of parameter words = 17 + + pos++; + if(getUShort(ptr,pos)!=0) return SMB_PROTO_FAIL; // USHORT DialectIndex; Index of selected dialect - should always be 0 since we only supplied 1! + + pos += 2; + if(getUChar(ptr,pos) & 1) + { + // user level security + sess->securityLevel = 1; + } + else + { + // share level security - can we skip SetupAndX? If so, we would need to specify the password in TreeAndX + sess->securityLevel = 0; + } + + pos++; + sess->MaxMpx = getUShort(ptr, pos); //USHORT MaxMpxCount; Max pending outstanding requests + + pos += 2; + sess->MaxVCS = getUShort(ptr, pos); //USHORT MaxNumberVcs; Max VCs between client and server + + pos += 2; + serverMaxBuffer = getUInt(ptr, pos); //ULONG MaxBufferSize; Max transmit buffer size + + + if(serverMaxBuffer>SMB_MAX_TRANSMIT_SIZE) + sess->MaxBuffer = SMB_MAX_TRANSMIT_SIZE; + else + sess->MaxBuffer = serverMaxBuffer; + pos += 4; + pos += 4; //ULONG MaxRawSize; Maximum raw buffer size + sess->sKey = getUInt(ptr,pos); pos += 4; + u32 servcap = getUInt(ptr,pos); pos += 4; //ULONG Capabilities; Server capabilities + pos += 4; //ULONG SystemTimeLow; System (UTC) time of the server (low). + pos += 4; //ULONG SystemTimeHigh; System (UTC) time of the server (high). + sess->timeOffset = getShort(ptr,pos) * 600000000LL; pos += 2; //SHORT ServerTimeZone; Time zone of server (minutes from UTC) + + //UCHAR EncryptionKeyLength - 0 or 8 + if(getUChar(ptr,pos)!=8) + { + if (getUChar(ptr,pos)!=0) + { + return SMB_BAD_KEYLEN; + } + else + { + // Challenge key not used + sess->challengeUsed = false; + } + } + else + { + sess->challengeUsed = true; + } + + pos++; + getUShort(ptr,pos); // byte count + + if (sess->challengeUsed) + { + /*** Copy challenge key ***/ + pos += 2; + memcpy(&sess->challenge,&ptr[pos],8); + } + + /*** Primary domain ***/ + pos += 8; + i = j = 0; + while(ptr[pos+j]!=0) { + sess->p_domain[i] = ptr[pos+j]; + j += 2; + i++; + } + sess->p_domain[i] = '\0'; + + // setup capabilities + //if(servcap & CAP_LARGE_FILES) + // sess->capabilities |= CAP_LARGE_FILES; + + if(servcap & CAP_UNICODE) + { + sess->capabilities |= CAP_UNICODE; + handle->unicode = true; + } + + return SMB_SUCCESS; + } + return ret; +} + +static s32 do_netconnect(SMBHANDLE *handle) +{ + u32 set = 1; + s32 ret; + s32 sock; + u64 t1,t2; + + handle->sck_server = INVALID_SOCKET; + /*** Create the global net_socket ***/ + sock = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + if(sock==INVALID_SOCKET) return -1; + + // Switch off Nagle with TCP_NODELAY + net_setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,&set,sizeof(set)); + + // create non blocking socket + ret = net_ioctl(sock, FIONBIO, &set); + if (ret < 0) + { + net_close(sock); + return ret; + } + + t1=ticks_to_millisecs(gettime()); + while(1) + { + ret = net_connect(sock,(struct sockaddr*)&handle->server_addr,sizeof(handle->server_addr)); + if(ret==-EISCONN) break; + t2=ticks_to_millisecs(gettime()); + usleep(1000); + if((t2-t1) > CONN_TIMEOUT) break; // usually not more than 90ms + } + + if(ret!=-EISCONN) + { + net_close(sock); + return -1; + } + + handle->sck_server = sock; + return 0; +} + +static s32 do_smbconnect(SMBHANDLE *handle) +{ + s32 ret; + + if(handle->sck_server == INVALID_SOCKET) return -1; + + ret = SMB_NegotiateProtocol(smb_dialects,smb_dialectcnt,handle); + if(ret!=SMB_SUCCESS) + { + net_close(handle->sck_server); + handle->sck_server = INVALID_SOCKET; + return -1; + } + + ret = SMB_SetupAndX(handle); + if(ret!=SMB_SUCCESS) + { + net_close(handle->sck_server); + handle->sck_server = INVALID_SOCKET; + return -1; + } + + ret = SMB_TreeAndX(handle); + if(ret!=SMB_SUCCESS) + { + net_close(handle->sck_server); + handle->sck_server = INVALID_SOCKET; + return -1; + } + + handle->conn_valid = true; + return 0; +} + +/**************************************************************************** + * Create an NBT SESSION REQUEST message. + ****************************************************************************/ +static int MakeSessReq(unsigned char *bufr, unsigned char *Called, unsigned char *Calling) +{ + // Write the header. + bufr[0] = SESS_REQ; + bufr[1] = 0; + bufr[2] = 0; + bufr[3] = 68; // 2x34 bytes in length. + + // Copy the Called and Calling names into the buffer. + (void) memcpy(&bufr[4], Called, 34); + (void) memcpy(&bufr[38], Calling, 34); + + // Return the total message length. + return 72; +} + +static unsigned char *L1_Encode(unsigned char *dst, const unsigned char *name, + const unsigned char pad, const unsigned char sfx) +{ + int i = 0; + int j = 0; + int k = 0; + + while (('\0' != name[i]) && (i < 15)) + { + k = toupper(name[i++]); + dst[j++] = 'A' + ((k & 0xF0) >> 4); + dst[j++] = 'A' + (k & 0x0F); + } + + i = 'A' + ((pad & 0xF0) >> 4); + k = 'A' + (pad & 0x0F); + while (j < 30) + { + dst[j++] = i; + dst[j++] = k; + } + + dst[30] = 'A' + ((sfx & 0xF0) >> 4); + dst[31] = 'A' + (sfx & 0x0F); + dst[32] = '\0'; + + return (dst); +} + +static int L2_Encode(unsigned char *dst, const unsigned char *name, + const unsigned char pad, const unsigned char sfx, + const unsigned char *scope) +{ + int lenpos; + int i; + int j; + + if (NULL == L1_Encode(&dst[1], name, pad, sfx)) + return (-1); + + dst[0] = 0x20; + lenpos = 33; + + if ('\0' != *scope) + { + do + { + for (i = 0, j = (lenpos + 1); ('.' != scope[i]) && ('\0' + != scope[i]); i++, j++) + dst[j] = toupper(scope[i]); + + dst[lenpos] = (unsigned char) i; + lenpos += i + 1; + scope += i; + } while ('.' == *(scope++)); + + dst[lenpos] = '\0'; + } + + return (lenpos + 1); +} + +/**************************************************************************** + * Send an NBT SESSION REQUEST over the TCP connection, then wait for a reply. + ****************************************************************************/ +static s32 SMB_RequestNBTSession(SMBHANDLE *handle) +{ + unsigned char Called[34]; + unsigned char Calling[34]; + unsigned char bufr[128]; + int result; + + if(handle->sck_server == INVALID_SOCKET) return -1; + + L2_Encode(Called, (const unsigned char*) "*SMBSERVER", 0x20, 0x20, + (const unsigned char*) ""); + L2_Encode(Calling, (const unsigned char*) "SMBCLIENT", 0x20, 0x00, + (const unsigned char*) ""); + + // Create the NBT Session Request message. + result = MakeSessReq(bufr, Called, Calling); + + //Send the NBT Session Request message. + result = smb_send(handle->sck_server, bufr, result); + if (result < 0) + { + // Error sending Session Request message + return -1; + } + + // Now wait for and handle the reply (2 seconds). + result = smb_recv(handle->sck_server, bufr, 128); + if (result <= 0) + { + // Timeout waiting for NBT Session Response + return -1; + } + + switch (*bufr) + { + case SESS_POS_RESP: + // Positive Session Response + return 0; + + case SESS_NEG_RESP: + // Negative Session Response + return -1; + + case SESS_RETARGET: + // Retarget Session Response + return -1; + + default: + // Unexpected Session Response + return -1; + } +} + +/**************************************************************************** + * Primary setup, logon and connection all in one :) + ****************************************************************************/ +s32 SMB_Connect(SMBCONN *smbhndl, const char *user, const char *password, const char *share, const char *server) +{ + s32 ret = 0; + SMBHANDLE *handle; + struct in_addr val; + + *smbhndl = SMB_HANDLE_NULL; + + if(!user || !password || !share || !server || + strlen(user) > 20 || strlen(password) > 14 || + strlen(share) > 80 || strlen(server) > 80) + { + return SMB_BAD_LOGINDATA; + } + + if(!smb_inited) + { + u32 level; + _CPU_ISR_Disable(level); + __smb_init(); + _CPU_ISR_Restore(level); + } + + handle = __smb_allocate_handle(); + if(!handle) return SMB_ERROR; + + handle->user = strdup(user); + handle->pwd = strdup(password); + handle->server_name = strdup(server); + handle->share_name = strdup(share); + handle->server_addr.sin_family = AF_INET; + handle->server_addr.sin_port = htons(445); + handle->unicode = false; + + if(strlen(server) < 16 && inet_aton(server, &val)) + { + handle->server_addr.sin_addr.s_addr = val.s_addr; + } + else // might be a hostname + { +#ifdef HW_RVL + struct hostent *hp = net_gethostbyname(server); + if (!hp || !(hp->h_addrtype == PF_INET)) + ret = SMB_BAD_LOGINDATA; + else + memcpy((char *)&handle->server_addr.sin_addr.s_addr, hp->h_addr_list[0], hp->h_length); +#else + __smb_free_handle(handle); + return SMB_ERROR; +#endif + } + + *smbhndl =(SMBCONN)(LWP_OBJMASKTYPE(SMB_OBJTYPE_HANDLE)|LWP_OBJMASKID(handle->object.id)); + + if(ret==0) + { + ret = do_netconnect(handle); + if(ret==0) ret = do_smbconnect(handle); + + if(ret!=0) + { + // try port 139 + handle->server_addr.sin_port = htons(139); + ret = do_netconnect(handle); + if(ret==0) ret = SMB_RequestNBTSession(handle); + if(ret==0) ret = do_smbconnect(handle); + } + } + if(ret!=0) + { + __smb_free_handle(handle); + return SMB_ERROR; + } + + return SMB_SUCCESS; +} + +/**************************************************************************** + * SMB_Destroy + ****************************************************************************/ +void SMB_Close(SMBCONN smbhndl) +{ + SMBHANDLE *handle = __smb_handle_open(smbhndl); + if(!handle) return; + + if(handle->sck_server!=INVALID_SOCKET) + net_close(handle->sck_server); + + __smb_free_handle(handle); +} + +s32 SMB_Reconnect(SMBCONN *_smbhndl, bool test_conn) +{ + s32 ret = SMB_SUCCESS; + SMBCONN smbhndl = *_smbhndl; + SMBHANDLE *handle = __smb_handle_open(smbhndl); + if(!handle) + return SMB_ERROR; // we have no handle, so we can't reconnect + + if(handle->conn_valid && test_conn) + { + SMBDIRENTRY dentry; + if(SMB_PathInfo("\\", &dentry, smbhndl)==SMB_SUCCESS) return SMB_SUCCESS; // no need to reconnect + handle->conn_valid = false; // else connection is invalid + } + if(!handle->conn_valid) + { + // shut down connection + if(handle->sck_server!=INVALID_SOCKET) + { + net_close(handle->sck_server); + handle->sck_server = INVALID_SOCKET; + } + + // reconnect + if(handle->server_addr.sin_port > 0) + { + ret = do_netconnect(handle); + if(ret==0 && handle->server_addr.sin_port == htons(139)) + ret = SMB_RequestNBTSession(handle); + if(ret==0) + ret = do_smbconnect(handle); + } + else // initial connection + { + handle->server_addr.sin_port = htons(445); + ret = do_netconnect(handle); + if(ret==0) ret = do_smbconnect(handle); + + if(ret != 0) + { + // try port 139 + handle->server_addr.sin_port = htons(139); + ret = do_netconnect(handle); + if(ret==0) ret = SMB_RequestNBTSession(handle); + if(ret==0) ret = do_smbconnect(handle); + } + + if(ret != 0) + handle->server_addr.sin_port = 0; + } + } + return ret; +} + +SMBFILE SMB_OpenFile(const char *filename, u16 access, u16 creation,SMBCONN smbhndl) +{ + s32 pos; + s32 bpos,ret; + u8 *ptr; + struct _smbfile *fid = NULL; + SMBHANDLE *handle; + char realfile[512]; + + if(filename == NULL) + return NULL; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return NULL; + + handle = __smb_handle_open(smbhndl); + if(!handle) return NULL; + + MakeSMBHeader(SMB_OPEN_ANDX,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 15); + pos++; /*** Word Count ***/ + setUChar(ptr, pos, 0xff); + pos++; /*** AndXCommand 0xFF = None ***/ + setUChar(ptr, pos, 0); + pos++; /*** AndX Reserved must be 0 ***/ + pos += 2; /*** Next AndX Offset to next Command ***/ + pos += 2; /*** Flags ***/ + setUShort(ptr, pos, access); + pos += 2; /*** Access mode ***/ + setUShort(ptr, pos, 0x6); + pos += 2; /*** Type of file ***/ + pos += 2; /*** File Attributes ***/ + pos += 4; /*** File time - don't care - let server decide ***/ + setUShort(ptr, pos, creation); + pos += 2; /*** Creation flags ***/ + pos += 4; /*** Allocation size ***/ + setUInt(ptr, pos, 0); + pos += 4; /*** Reserved[0] must be 0 ***/ + setUInt(ptr, pos, 0); + pos += 4; /*** Reserved[1] must be 0 ***/ + pos += 2; /*** Byte Count ***/ + bpos = pos; + setUChar(ptr, pos, 0x04); /** Bufferformat **/ + pos++; + + realfile[0]='\0'; + if (filename[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,filename); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],realfile,strlen(realfile)); + pos += strlen(realfile)+1; + } + + setUShort(ptr,(bpos-2),(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) goto failed; + + if(SMBCheck(SMB_OPEN_ANDX,handle)==SMB_SUCCESS) { + /*** Check file handle ***/ + fid = (struct _smbfile*)__lwp_queue_get(&smb_filehandle_queue); + if(fid) { + fid->conn = smbhndl; + fid->sfid = getUShort(handle->message.smb,(SMB_HEADER_SIZE+5)); + } + } + return (SMBFILE)fid; + +failed: + handle->conn_valid = false; + return NULL; +} + +/** + * SMB_CloseFile + */ +void SMB_CloseFile(SMBFILE sfid) +{ + u8 *ptr; + s32 pos, ret; + SMBHANDLE *handle; + struct _smbfile *fid = (struct _smbfile*)sfid; + + if(!fid) return; + + handle = __smb_handle_open(fid->conn); + if(!handle) return; + + MakeSMBHeader(SMB_CLOSE,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 3); + pos++; /** Word Count **/ + setUShort(ptr, pos, fid->sfid); + pos += 2; + setUInt(ptr, pos, 0xffffffff); + pos += 4; /*** Last Write ***/ + pos += 2; /*** Byte Count ***/ + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) handle->conn_valid = false; + else SMBCheck(SMB_CLOSE,handle); + __lwp_queue_append(&smb_filehandle_queue,&fid->node); +} + +/** + * SMB_CreateDirectory + */ +s32 SMB_CreateDirectory(const char *dirname, SMBCONN smbhndl) +{ + s32 pos; + s32 bpos,ret; + u8 *ptr; + SMBHANDLE *handle; + char realfile[512]; + + if(dirname == NULL) + return -1; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return -1; + + handle = __smb_handle_open(smbhndl); + if(!handle) return -1; + + MakeSMBHeader(SMB_COM_CREATE_DIRECTORY,CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 0); + pos++; /*** Word Count ***/ + pos += 2; /*** Byte Count ***/ + bpos = pos; + setUChar(ptr, pos, 0x04); /*** Buffer format ***/ + pos++; + + realfile[0]='\0'; + if (dirname[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,dirname); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],realfile,strlen(realfile)); + pos += strlen(realfile)+1; + } + + setUShort(ptr,(bpos-2),(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret < 0) goto failed; + + ret = SMBCheck(SMB_COM_CREATE_DIRECTORY,handle); + + return ret; + +failed: + return ret; +} + +/** + * SMB_DeleteDirectory + */ +s32 SMB_DeleteDirectory(const char *dirname, SMBCONN smbhndl) +{ + s32 pos; + s32 bpos,ret; + u8 *ptr; + SMBHANDLE *handle; + char realfile[512]; + + if(dirname == NULL) + return -1; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return -1; + + handle = __smb_handle_open(smbhndl); + if(!handle) return -1; + + MakeSMBHeader(SMB_COM_DELETE_DIRECTORY,CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 0); + pos++; /*** Word Count ***/ + pos += 2; /*** Byte Count ***/ + bpos = pos; + setUChar(ptr, pos, 0x04); /** Bufferformat **/ + pos++; + + realfile[0]='\0'; + if (dirname[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,dirname); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],realfile,strlen(realfile)); + pos += strlen(realfile)+1; + } + + setUShort(ptr,(bpos-2),(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret < 0) goto failed; + + ret = SMBCheck(SMB_COM_DELETE_DIRECTORY,handle); + + return ret; + +failed: + return ret; +} + +/** + * SMB_DeleteFile + */ +s32 SMB_DeleteFile(const char *filename, SMBCONN smbhndl) +{ + s32 pos; + s32 bpos,ret; + u8 *ptr; + SMBHANDLE *handle; + char realfile[512]; + + if(filename == NULL) + return -1; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return -1; + + handle = __smb_handle_open(smbhndl); + if(!handle) return -1; + + MakeSMBHeader(SMB_COM_DELETE,CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 1); + pos++; /*** Word Count ***/ + setUShort(ptr, pos, SMB_SRCH_HIDDEN); + pos += 2; /*** SearchAttributes ***/ + pos += 2; /*** Byte Count ***/ + bpos = pos; + setUChar(ptr, pos, 0x04); /** Bufferformat **/ + pos++; + + realfile[0]='\0'; + if (filename[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,filename); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],realfile,strlen(realfile)); + pos += strlen(realfile)+1; + } + + setUShort(ptr,(bpos-2),(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret < 0) goto failed; + + ret = SMBCheck(SMB_COM_DELETE,handle); + + return ret; + +failed: + return ret; +} + +/** + * SMB_Rename + */ +s32 SMB_Rename(const char *filename, const char * newfilename, SMBCONN smbhndl) +{ + s32 pos; + s32 bpos,ret; + u8 *ptr; + SMBHANDLE *handle; + char realfile[512]; + char newrealfile[512]; + + if(filename == NULL || newfilename == NULL) + return -1; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) + return -1; + + handle = __smb_handle_open(smbhndl); + if(!handle) return -1; + + MakeSMBHeader(SMB_COM_RENAME,CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 1); + pos++; /*** Word Count ***/ + setUShort(ptr, pos, SMB_SRCH_HIDDEN); + pos += 2; /*** SearchAttributes ***/ + pos += 2; /*** Byte Count ***/ + bpos = pos; + setUChar(ptr, pos, 0x04); /** Bufferformat **/ + pos++; + + realfile[0]='\0'; + if (filename[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,filename); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],realfile,strlen(realfile)); + pos += strlen(realfile)+1; + } + + pos++; + setUChar(ptr, pos, 0x04); /** Bufferformat **/ + pos++; + + newrealfile[0]='\0'; + if (newfilename[0] != '\\') + strcpy(newrealfile,"\\"); + strcat(newrealfile,newfilename); + + if(handle->unicode) + { + pos += utf8_to_utf16((char*)&ptr[pos],newrealfile,SMB_MAXPATH-2); + pos += 2; + } + else + { + memcpy(&ptr[pos],newrealfile,strlen(newrealfile)); + pos += strlen(newrealfile)+1; + } + + setUShort(ptr,(bpos-2),(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret < 0) goto failed; + + ret = SMBCheck(SMB_COM_RENAME,handle); + + return ret; + +failed: + return ret; +} + +/** + * SMB_DiskInformation + */ +s32 SMB_DiskInformation(struct statvfs *buf, SMBCONN smbhndl) +{ + s32 pos; + s32 ret; + u16 TotalUnits, BlocksPerUnit, BlockSize, FreeUnits; + u8 *ptr; + SMBHANDLE *handle; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return -1; + + handle = __smb_handle_open(smbhndl); + if(!handle) return -1; + + MakeSMBHeader(SMB_COM_QUERY_INFORMATION_DISK,CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 0); + pos++; /*** Word Count ***/ + setUShort(ptr, pos, 0); + pos += 2; /*** Byte Count ***/ + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret < 0) goto failed; + + if((ret=SMBCheck(SMB_COM_QUERY_INFORMATION_DISK, handle))==SMB_SUCCESS) + { + ptr = handle->message.smb; + /** Read the received data ***/ + /** WordCount **/ + s32 recv_pos = 1; + /** TotalUnits **/ + TotalUnits = getUShort(ptr,(SMB_HEADER_SIZE+recv_pos)); + recv_pos += 2; + /** BlocksPerUnit **/ + BlocksPerUnit = getUShort(ptr,(SMB_HEADER_SIZE+recv_pos)); + recv_pos += 2; + /** BlockSize **/ + BlockSize = getUShort(ptr,(SMB_HEADER_SIZE+recv_pos)); + recv_pos += 2; + /** FreeUnits **/ + FreeUnits = getUShort(ptr,(SMB_HEADER_SIZE+recv_pos)); + recv_pos += 2; + + buf->f_bsize = (unsigned long) BlockSize; // File system block size. + buf->f_frsize = (unsigned long) BlockSize; // Fundamental file system block size. + buf->f_blocks = (fsblkcnt_t) (TotalUnits*BlocksPerUnit); // Total number of blocks on file system in units of f_frsize. + buf->f_bfree = (fsblkcnt_t) (FreeUnits*BlocksPerUnit); // Total number of free blocks. + buf->f_bavail = 0; // Number of free blocks available to non-privileged process. + buf->f_files = 0; // Total number of file serial numbers. + buf->f_ffree = 0; // Total number of free file serial numbers. + buf->f_favail = 0; // Number of file serial numbers available to non-privileged process. + buf->f_fsid = 0; // File system ID. 32bit ioType value + buf->f_flag = 0; // Bit mask of f_flag values. + buf->f_namemax = SMB_MAXPATH; // Maximum filename length. + + return SMB_SUCCESS; + } + +failed: + handle->conn_valid = false; + return ret; +} + +/** + * SMB_Read + */ +s32 SMB_ReadFile(char *buffer, size_t size, off_t offset, SMBFILE sfid) +{ + u8 *ptr; + u32 pos, ret, ofs; + u16 length = 0; + SMBHANDLE *handle; + size_t totalread=0,nextread; + struct _smbfile *fid = (struct _smbfile*)sfid; + + if(!fid) return -1; + + // Check for invalid size + if(size == 0) return -1; + + handle = __smb_handle_open(fid->conn); + if(!handle) return -1; + + while(totalread < size) + { + if((size-totalread) > SMB_MAX_TRANSMIT_SIZE) + nextread=SMB_MAX_TRANSMIT_SIZE; + else + nextread=size-totalread; + + MakeSMBHeader(SMB_READ_ANDX,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 12); + pos++; /*** Word count ***/ + setUChar(ptr, pos, 0xff); + pos++; + setUChar(ptr, pos, 0); + pos++; /*** Reserved must be 0 ***/ + pos += 2; /*** Next AndX Offset ***/ + setUShort(ptr, pos, fid->sfid); + pos += 2; /*** FID ***/ + setUInt(ptr, pos, (offset+totalread) & 0xffffffff); + pos += 4; /*** Offset ***/ + + setUShort(ptr, pos, nextread & 0xffff); + pos += 2; + setUShort(ptr, pos, nextread & 0xffff); + pos += 2; + setUInt(ptr, pos, 0); + pos += 4; /*** Reserved must be 0 ***/ + setUShort(ptr, pos, nextread & 0xffff); + pos += 2; /*** Remaining ***/ + setUInt(ptr, pos, (offset+totalread) >> 32); // offset high + pos += 4; /*** OffsetHIGH ***/ + pos += 2; /*** Byte count ***/ + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + + ret = smb_send(handle->sck_server,(char*)&handle->message, pos); + if(ret<0) goto failed; + + /*** SMBCheck ***/ + if(SMBCheck(SMB_READ_ANDX,handle)!=SMB_SUCCESS) goto failed; + + ptr = handle->message.smb; + // Retrieve data length for this packet + length = getUShort(ptr,(SMB_HEADER_SIZE+11)); + + if(length==0) + break; + + // Retrieve offset to data + ofs = getUShort(ptr,(SMB_HEADER_SIZE+13)); + memcpy(&buffer[totalread],&ptr[ofs],length); + totalread+=length; + } + return size; + +failed: + handle->conn_valid = false; + return SMB_ERROR; +} + +/** + * SMB_Write + */ +s32 SMB_WriteFile(const char *buffer, size_t size, off_t offset, SMBFILE sfid) +{ + u8 *ptr,*src; + s32 pos, ret; + s32 blocks64; + u32 copy_len; + SMBHANDLE *handle; + struct _smbfile *fid = (struct _smbfile*)sfid; + + if(!fid) return -1; + + handle = __smb_handle_open(fid->conn); + if(!handle) return -1; + + MakeSMBHeader(SMB_WRITE_ANDX,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 14); + pos++; /*** Word Count ***/ + setUChar(ptr, pos, 0xff); + pos += 2; /*** Next AndX ***/ + pos += 2; /*** Next AndX Offset ***/ + + setUShort(ptr, pos, fid->sfid); + pos += 2; + setUInt(ptr, pos, offset & 0xffffffff); + pos += 4; + setUInt(ptr, pos, 0); /*** Reserved, must be 0 ***/ + pos += 4; + setUShort(ptr, pos, 0); /*** Write Mode ***/ + pos += 2; + pos += 2; /*** Remaining ***/ + + blocks64 = size >> 16; + + setUShort(ptr, pos, blocks64); + pos += 2; /*** Length High ***/ + setUShort(ptr, pos, size & 0xffff); + pos += 2; /*** Length Low ***/ + setUShort(ptr, pos, 63); + pos += 2; /*** Data Offset ***/ + setUInt(ptr, pos, offset >> 32); /*** OffsetHigh ***/ + pos += 4; + setUShort(ptr, pos, size & 0xffff); + pos += 2; /*** Data Byte Count ***/ + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos+size); + + src = (u8*)buffer; + copy_len = size; + + if((copy_len+pos)>SMB_MAX_TRANSMIT_SIZE) + copy_len = (SMB_MAX_TRANSMIT_SIZE-pos); + + memcpy(&ptr[pos],src,copy_len); + size -= copy_len; + src += copy_len; + pos += copy_len; + + pos += 4; + + /*** Send Header Information ***/ + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) goto failed; + + if(size>0) { + /*** Send the data ***/ + ret = smb_send(handle->sck_server,src,size); + if(ret<0) goto failed; + } + + ret = 0; + if(SMBCheck(SMB_WRITE_ANDX,handle)==SMB_SUCCESS) { + ptr = handle->message.smb; + ret = getUShort(ptr,(SMB_HEADER_SIZE+5)); + } + + return ret; + +failed: + handle->conn_valid = false; + return ret; +} + +/** +* SMB_PathInfo +*/ +s32 SMB_PathInfo(const char *filename, SMBDIRENTRY *sdir, SMBCONN smbhndl) +{ + u8 *ptr; + s32 pos; + s32 ret; + s32 bpos; + int len; + SMBHANDLE *handle; + char realfile[512]; + + if(filename == NULL) + return SMB_ERROR; + + handle = __smb_handle_open(smbhndl); + if (!handle) return SMB_ERROR; + + MakeSMBHeader(SMB_TRANS2, CIFS_FLAGS1, handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2, handle); + MakeTRANS2Header(SMB_QUERY_PATH_INFO, handle); + + bpos = pos = (T2_BYTE_CNT + 2); + pos += 3; /*** Padding ***/ + ptr = handle->message.smb; + setUShort(ptr, pos, SMB_QUERY_FILE_ALL_INFO); + pos += 2; /*** Level of information requested ***/ + setUInt(ptr, pos, 0); + pos += 4; /*** reserved ***/ + + realfile[0] = '\0'; + if (filename[0] != '\\') + strcpy(realfile,"\\"); + strcat(realfile,filename); + + if(handle->unicode) + { + len = utf8_to_utf16((char*)&ptr[pos],realfile,SMB_MAXPATH-2); + pos += len+2; + len+=1; + } + else + { + len = strlen(realfile); + memcpy(&ptr[pos],realfile,len); + pos += len+1; + } + + /*** Update counts ***/ + setUShort(ptr, T2_PRM_CNT, (7 + len)); + setUShort(ptr, T2_SPRM_CNT, (7 + len)); + setUShort(ptr, T2_SPRM_OFS, 68); + setUShort(ptr, T2_BYTE_CNT, (pos - bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server, (char*) &handle->message, pos); + if(ret<0) goto failed; + + ret = SMB_ERROR; + if (SMBCheck(SMB_TRANS2, handle) == SMB_SUCCESS) { + + ptr = handle->message.smb; + /*** Get parameter offset ***/ + pos = getUShort(ptr, (SMB_HEADER_SIZE + 9)); + pos += 4; // padding + sdir->ctime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - creation time + sdir->atime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - access time + sdir->mtime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - write time + pos += 8; // ULONGLONG - change time + sdir->attributes = getUInt(ptr,pos); pos += 4; // ULONG - file attributes + pos += 4; // padding + pos += 8; // ULONGLONG - allocated file size + sdir->size = getULongLong(ptr, pos); pos += 8; // ULONGLONG - file size + pos += 4; // ULONG NumberOfLinks; + pos += 2; // UCHAR DeletePending; + pos += 2; // UCHAR Directory; + pos += 2; // USHORT Pad2; // for alignment only + pos += 4; // ULONG EaSize; + pos += 4; // ULONG FileNameLength; + + strcpy(sdir->name,realfile); + + ret = SMB_SUCCESS; + } + return ret; + +failed: + handle->conn_valid = false; + return ret; +} + +/** + * SMB_FindFirst + * + * Uses TRANS2 to support long filenames + */ +s32 SMB_FindFirst(const char *filename, unsigned short flags, SMBDIRENTRY *sdir, SMBCONN smbhndl) +{ + u8 *ptr; + s32 pos; + s32 ret; + s32 bpos; + unsigned int len; + SMBHANDLE *handle; + SMBSESSION *sess; + + if(filename == NULL) + return SMB_ERROR; + + if(SMB_Reconnect(&smbhndl,true)!=SMB_SUCCESS) return SMB_ERROR; + + handle = __smb_handle_open(smbhndl); + if(!handle) return SMB_ERROR; + + sess = &handle->session; + MakeSMBHeader(SMB_TRANS2,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + MakeTRANS2Header(SMB_FIND_FIRST2,handle); + + ptr = handle->message.smb; + + bpos = pos = (T2_BYTE_CNT+2); + pos += 3; /*** Padding ***/ + setUShort(ptr, pos, flags); + pos += 2; /*** Flags ***/ + setUShort(ptr, pos, 1); + pos += 2; /*** Count ***/ + setUShort(ptr, pos, 6); + pos += 2; /*** Internal Flags ***/ + setUShort(ptr, pos, 260); // SMB_FIND_FILE_BOTH_DIRECTORY_INFO + pos += 2; /*** Level of Interest ***/ + pos += 4; /*** Storage Type == 0 ***/ + + if(handle->unicode) + { + len = utf8_to_utf16((char*)&ptr[pos], (char*)filename,SMB_MAXPATH-2); + pos += len+2; + len++; + } + else + { + len = strlen(filename); + memcpy(&ptr[pos],filename,len); + pos += len+1; + } + + /*** Update counts ***/ + setUShort(ptr, T2_PRM_CNT, (13+len)); + setUShort(ptr, T2_SPRM_CNT, (13+len)); + setUShort(ptr, T2_SPRM_OFS, 68); + setUShort(ptr, T2_BYTE_CNT,(pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) goto failed; + + sess->eos = 1; + sess->count = 0; + ret = SMB_ERROR; + if(SMBCheck(SMB_TRANS2,handle)==SMB_SUCCESS) { + ptr = handle->message.smb; + /*** Get parameter offset ***/ + pos = getUShort(ptr,(SMB_HEADER_SIZE+9)); + sdir->sid = getUShort(ptr, pos); pos += 2; + sess->count = getUShort(ptr, pos); pos += 2; + sess->eos = getUShort(ptr, pos); pos += 2; + pos += 2; // USHORT EaErrorOffset; + pos += 2; // USHORT LastNameOffset; + pos += 2; // padding? + + if (sess->count) + { + pos += 4; // ULONG NextEntryOffset; + pos += 4; // ULONG FileIndex; + sdir->ctime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - creation time + sdir->atime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - access time + sdir->mtime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - write time + pos += 8; // ULONGLONG - change time low + sdir->size = getULongLong(ptr, pos); pos += 8; + pos += 8; + sdir->attributes = getUInt(ptr, pos); pos += 4; + len=getUInt(ptr, pos); + pos += 34; + if(handle->unicode) + utf16_to_utf8(sdir->name,(char*)&ptr[pos],len); + else + strcpy(sdir->name,(const char*)&ptr[pos]); + + ret = SMB_SUCCESS; + } + } + return ret; + +failed: + handle->conn_valid = false; + return ret; +} + +/** + * SMB_FindNext + */ +s32 SMB_FindNext(SMBDIRENTRY *sdir,SMBCONN smbhndl) +{ + u8 *ptr; + s32 pos; + s32 ret; + s32 bpos; + SMBHANDLE *handle; + SMBSESSION *sess; + + handle = __smb_handle_open(smbhndl); + if(!handle) return SMB_ERROR; + + sess = &handle->session; + if(sess->eos || sdir->sid==0) return SMB_ERROR; + + MakeSMBHeader(SMB_TRANS2,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + MakeTRANS2Header(SMB_FIND_NEXT2,handle); + + bpos = pos = (T2_BYTE_CNT+2); + pos += 3; /*** Padding ***/ + ptr = handle->message.smb; + setUShort(ptr, pos, sdir->sid); + pos += 2; /*** Search ID ***/ + setUShort(ptr, pos, 1); + pos += 2; /*** Count ***/ + setUShort(ptr, pos, 260); // SMB_FIND_FILE_BOTH_DIRECTORY_INFO + pos += 2; /*** Level of Interest ***/ + pos += 4; /*** Storage Type == 0 ***/ + setUShort(ptr, pos, 12); + pos+=2; /*** Search flags ***/ + pos++; + + int pad=0; + if(handle->unicode)pad=1; + pos+=pad; + + /*** Update counts ***/ + setUShort(ptr, T2_PRM_CNT, 13+pad); + setUShort(ptr, T2_SPRM_CNT, 13+pad); + setUShort(ptr, T2_SPRM_OFS, 68); + setUShort(ptr, T2_BYTE_CNT, (pos-bpos)); + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) goto failed; + + ret = SMB_ERROR; + if (SMBCheck(SMB_TRANS2,handle)==SMB_SUCCESS) { + ptr = handle->message.smb; + /*** Get parameter offset ***/ + pos = getUShort(ptr,(SMB_HEADER_SIZE+9)); + sess->count = getUShort(ptr, pos); pos += 2; + sess->eos = getUShort(ptr, pos); pos += 2; + pos += 2; // USHORT EaErrorOffset; + pos += 2; // USHORT LastNameOffset; + + if (sess->count) + { + int len; + pos += 4; // ULONG NextEntryOffset; + pos += 4; // ULONG FileIndex; + sdir->ctime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - creation time + sdir->atime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - access time + sdir->mtime = getULongLong(ptr, pos) - handle->session.timeOffset; pos += 8; // ULONGLONG - write time + pos += 8; // ULONGLONG - change time low + sdir->size = getULongLong(ptr, pos); pos += 8; + pos += 8; + sdir->attributes = getUInt(ptr, pos); pos += 4; + len=getUInt(ptr, pos); + pos += 34; + if(handle->unicode) + utf16_to_utf8(sdir->name, (char*)&ptr[pos],len); + else + strcpy (sdir->name, (const char*)&ptr[pos]); + + ret = SMB_SUCCESS; + } + } + return ret; + +failed: + handle->conn_valid = false; + return ret; +} + +/** + * SMB_FindClose + */ +s32 SMB_FindClose(SMBDIRENTRY *sdir,SMBCONN smbhndl) +{ + u8 *ptr; + s32 pos; + s32 ret; + SMBHANDLE *handle; + + handle = __smb_handle_open(smbhndl); + if(!handle) return SMB_ERROR; + + if(sdir->sid==0) return SMB_ERROR; + + MakeSMBHeader(SMB_FIND_CLOSE2,CIFS_FLAGS1,handle->unicode?CIFS_FLAGS2_UNICODE:CIFS_FLAGS2,handle); + + pos = SMB_HEADER_SIZE; + ptr = handle->message.smb; + setUChar(ptr, pos, 1); + pos++; /*** Word Count ***/ + setUShort(ptr, pos, sdir->sid); + pos += 2; + pos += 2; /*** Byte Count ***/ + + handle->message.msg = NBT_SESSISON_MSG; + handle->message.length = htons(pos); + + pos += 4; + ret = smb_send(handle->sck_server,(char*)&handle->message,pos); + if(ret<0) goto failed; + + ret = SMBCheck(SMB_FIND_CLOSE2,handle); + return ret; + +failed: + handle->conn_valid = false; + return ret; +} diff --git a/reference/libtinysmb/smb_devoptab.c b/reference/libtinysmb/smb_devoptab.c new file mode 100644 index 0000000..81f7159 --- /dev/null +++ b/reference/libtinysmb/smb_devoptab.c @@ -0,0 +1,1551 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * SMB devoptab + ****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "smb.h" + +#define MAX_SMB_MOUNTED 10 + +static lwp_t cache_thread = LWP_THREAD_NULL; +static SMBDIRENTRY last_dentry; +static int last_env=-1; +static char last_path[SMB_MAXPATH]; + + +typedef struct +{ + SMBFILE handle; + off_t offset; + off_t len; + char filename[SMB_MAXPATH]; + unsigned short access; + int env; + u32 attributes; +} SMBFILESTRUCT; + +typedef struct +{ + SMBDIRENTRY smbdir; + int env; + char dir[SMB_MAXPATH]; +} SMBDIRSTATESTRUCT; + +static bool smbInited = false; +static unsigned short smbFlags = SMB_SRCH_DIRECTORY | SMB_SRCH_READONLY; + +/////////////////////////////////////////// +// CACHE FUNCTION DEFINITIONS // +/////////////////////////////////////////// +#define SMB_READ_BUFFERSIZE 65472 +#define SMB_WRITE_BUFFERSIZE (60*1024) + +typedef struct +{ + off_t offset; + u64 last_used; + SMBFILESTRUCT *file; + void *ptr; +} smb_cache_page; + +typedef struct +{ + u64 used; + size_t len; + SMBFILESTRUCT *file; + void *ptr; +} smb_write_cache; + +static void DestroySMBReadAheadCache(const char *name); +static void SMBEnableReadAhead(const char *name, u32 pages); +static int ReadSMBFromCache(void *buf, size_t len, SMBFILESTRUCT *file); + +/////////////////////////////////////////// +// END CACHE FUNCTION DEFINITIONS // +/////////////////////////////////////////// + +// SMB Enviroment +typedef struct +{ + char *name; + int pos; + devoptab_t *devoptab; + + SMBCONN smbconn; + u8 SMBCONNECTED; + + char currentpath[SMB_MAXPATH]; + bool first_item_dir; + bool diropen_root; + + smb_write_cache SMBWriteCache; + smb_cache_page *SMBReadAheadCache; + int SMB_RA_pages; + + mutex_t _SMB_mutex; +} smb_env; + +static smb_env SMBEnv[MAX_SMB_MOUNTED]; + +static inline void _SMB_lock(int i) +{ + if(SMBEnv[i]._SMB_mutex!=LWP_MUTEX_NULL) LWP_MutexLock(SMBEnv[i]._SMB_mutex); +} + +static inline void _SMB_unlock(int i) +{ + if(SMBEnv[i]._SMB_mutex!=LWP_MUTEX_NULL) LWP_MutexUnlock(SMBEnv[i]._SMB_mutex); +} + +/////////////////////////////////////////// +// CACHE FUNCTIONS // +/////////////////////////////////////////// + +static smb_env* FindSMBEnv(const char *name) +{ + int i; + char *aux; + + aux=strdup(name); + i=strlen(aux); + if(aux[i-1]==':')aux[i-1]='\0'; + for(i=0;iSMBWriteCache.file == NULL || env->SMBWriteCache.len == 0) + { + return 0; + } + + int ret; + int written = 0; + + while(env->SMBWriteCache.len > 0) + { + ret = SMB_WriteFile(env->SMBWriteCache.ptr+written, env->SMBWriteCache.len, + env->SMBWriteCache.file->offset, env->SMBWriteCache.file->handle); + + if (ret <= 0) + return -1; + + written += ret; + env->SMBWriteCache.file->offset += ret; + if (env->SMBWriteCache.file->offset > env->SMBWriteCache.file->len) + env->SMBWriteCache.file->len = env->SMBWriteCache.file->offset; + + env->SMBWriteCache.len-=ret; + if(env->SMBWriteCache.len==0) break; + } + env->SMBWriteCache.used = 0; + env->SMBWriteCache.file = NULL; + + return 0; +} + +static void DestroySMBReadAheadCache(const char *name) +{ + smb_env *env; + env=FindSMBEnv(name); + if(env==NULL) return ; + + int i; + if (env->SMBReadAheadCache != NULL) + { + for (i = 0; i < env->SMB_RA_pages; i++) + { + if(env->SMBReadAheadCache[i].ptr) + free(env->SMBReadAheadCache[i].ptr); + } + free(env->SMBReadAheadCache); + env->SMBReadAheadCache = NULL; + env->SMB_RA_pages = 0; + } + FlushWriteSMBCache(env->name); + + if(env->SMBWriteCache.ptr) + free(env->SMBWriteCache.ptr); + + env->SMBWriteCache.used = 0; + env->SMBWriteCache.len = 0; + env->SMBWriteCache.file = NULL; + env->SMBWriteCache.ptr = NULL; +} + +static void *process_cache_thread(void *ptr) +{ + int i; + while (1) + { + for(i=0;i 0) + { + if (ticks_to_millisecs(gettime())-ticks_to_millisecs(SMBEnv[i].SMBWriteCache.used) > 500) + { + _SMB_lock(i); + FlushWriteSMBCache(SMBEnv[i].name); + _SMB_unlock(i); + } + } + } + } + usleep(10000); + } + return NULL; +} + +static void SMBEnableReadAhead(const char *name, u32 pages) +{ + s32 i, j; + + smb_env *env; + env=FindSMBEnv(name); + if(env==NULL) return; + + DestroySMBReadAheadCache(name); + + if (pages == 0) + return; + + //only 1 page for write + env->SMBWriteCache.ptr = memalign(32, SMB_WRITE_BUFFERSIZE); + env->SMBWriteCache.used = 0; + env->SMBWriteCache.len = 0; + env->SMBWriteCache.file = NULL; + + env->SMB_RA_pages = pages; + env->SMBReadAheadCache = (smb_cache_page *) malloc(sizeof(smb_cache_page) * env->SMB_RA_pages); + if (env->SMBReadAheadCache == NULL) + return; + for (i = 0; i < env->SMB_RA_pages; i++) + { + env->SMBReadAheadCache[i].offset = 0; + env->SMBReadAheadCache[i].last_used = 0; + env->SMBReadAheadCache[i].file = NULL; + env->SMBReadAheadCache[i].ptr = memalign(32, SMB_READ_BUFFERSIZE); + if (env->SMBReadAheadCache[i].ptr == NULL) + { + for (j = i - 1; j >= 0; j--) + if (env->SMBReadAheadCache[j].ptr) + free(env->SMBReadAheadCache[j].ptr); + free(env->SMBReadAheadCache); + env->SMBReadAheadCache = NULL; + free(env->SMBWriteCache.ptr); + return; + } + memset(env->SMBReadAheadCache[i].ptr, 0, SMB_READ_BUFFERSIZE); + } +} + +// clear cache from file +// called when file is closed +static void ClearSMBFileCache(SMBFILESTRUCT *file) +{ + int i,j; + j=file->env; + + for (i = 0; i < SMBEnv[j].SMB_RA_pages; i++) + { + if (SMBEnv[j].SMBReadAheadCache[i].file == file) + { + SMBEnv[j].SMBReadAheadCache[i].offset = 0; + SMBEnv[j].SMBReadAheadCache[i].last_used = 0; + SMBEnv[j].SMBReadAheadCache[i].file = NULL; + memset(SMBEnv[j].SMBReadAheadCache[i].ptr, 0, SMB_READ_BUFFERSIZE); + } + } +} + +static int ReadSMBFromCache(void *buf, size_t len, SMBFILESTRUCT *file) +{ + int i,j, leastUsed; + off_t new_offset, rest; + j=file->env; + + if ( len == 0 ) return 0; + + if (SMBEnv[j].SMBReadAheadCache == NULL) + { + if (SMB_ReadFile(buf, len, file->offset, file->handle) <= 0) + { + return -1; + } + return 0; + } + + new_offset = file->offset; + rest = len; + +continue_read: + + for (i = 0; i < SMBEnv[j].SMB_RA_pages; i++) + { + if (SMBEnv[j].SMBReadAheadCache[i].file == file) + { + if ((new_offset >= SMBEnv[j].SMBReadAheadCache[i].offset) && + (new_offset < (SMBEnv[j].SMBReadAheadCache[i].offset + SMB_READ_BUFFERSIZE))) + { + //we hit the page + //copy as much as we can + SMBEnv[j].SMBReadAheadCache[i].last_used = gettime(); + + off_t buffer_used = (SMBEnv[j].SMBReadAheadCache[i].offset + SMB_READ_BUFFERSIZE) - new_offset; + if (buffer_used > rest) buffer_used = rest; + memcpy(buf, SMBEnv[j].SMBReadAheadCache[i].ptr + (new_offset - SMBEnv[j].SMBReadAheadCache[i].offset), buffer_used); + buf += buffer_used; + rest -= buffer_used; + new_offset += buffer_used; + + if (rest == 0) + { + return 0; + } + goto continue_read; + } + } + } + + leastUsed = 0; + for ( i = 1; i < SMBEnv[j].SMB_RA_pages; i++) + { + if ((SMBEnv[j].SMBReadAheadCache[i].last_used < SMBEnv[j].SMBReadAheadCache[leastUsed].last_used)) + leastUsed = i; + } + + //fill least used page with new data + + off_t cache_offset = new_offset; + + //do not interset with existing pages + for (i = 0; i < SMBEnv[j].SMB_RA_pages; i++) + { + if ( i == leastUsed ) continue; + if ( SMBEnv[j].SMBReadAheadCache[i].file != file ) continue; + + if ( (cache_offset < SMBEnv[j].SMBReadAheadCache[i].offset ) && (cache_offset + SMB_READ_BUFFERSIZE > SMBEnv[j].SMBReadAheadCache[i].offset) ) + { + //tail of new page intersects with some cache block, clear page + SMBEnv[j].SMBReadAheadCache[i].file = NULL; + } + + if ( (cache_offset >= SMBEnv[j].SMBReadAheadCache[i].offset ) && (cache_offset < SMBEnv[j].SMBReadAheadCache[i].offset + SMB_READ_BUFFERSIZE ) ) + { + //head of new page intersects with some cache block, clear page + SMBEnv[j].SMBReadAheadCache[i].file = NULL; + } + } + + off_t cache_to_read = file->len - cache_offset; + if ( cache_to_read > SMB_READ_BUFFERSIZE ) + { + cache_to_read = SMB_READ_BUFFERSIZE; + } + + int read=0, readed; + while(readhandle); + if ( readed <=0 ) + { + SMBEnv[j].SMBReadAheadCache[leastUsed].file = NULL; + return -1; + } + read += readed; + } + SMBEnv[j].SMBReadAheadCache[leastUsed].last_used = gettime(); + + SMBEnv[j].SMBReadAheadCache[leastUsed].offset = cache_offset; + SMBEnv[j].SMBReadAheadCache[leastUsed].file = file; + + goto continue_read; +} + +static int WriteSMBUsingCache(const char *buf, size_t len, SMBFILESTRUCT *file) +{ + size_t size=len; + if (file == NULL || buf == NULL) + return -1; + int j; + j=file->env; + if (SMBEnv[j].SMBWriteCache.file != NULL) + { + if (strcmp(SMBEnv[j].SMBWriteCache.file->filename, file->filename) != 0) + { + //Flush current buffer + if (FlushWriteSMBCache(SMBEnv[j].name) < 0) + { + goto failed; + } + SMBEnv[j].SMBWriteCache.file = file; + SMBEnv[j].SMBWriteCache.len = 0; + } + } + else + { + SMBEnv[j].SMBWriteCache.file = file; + SMBEnv[j].SMBWriteCache.len = 0; + } + int rest; + s32 written; + while(len > 0) + { + if(SMBEnv[j].SMBWriteCache.len+len >= SMB_WRITE_BUFFERSIZE) + { + rest = SMB_WRITE_BUFFERSIZE - SMBEnv[j].SMBWriteCache.len; + memcpy(SMBEnv[j].SMBWriteCache.ptr + SMBEnv[j].SMBWriteCache.len, buf, rest); + + written = SMB_WriteFile(SMBEnv[j].SMBWriteCache.ptr, SMB_WRITE_BUFFERSIZE, file->offset, file->handle); + if(written<0) + { + goto failed; + } + file->offset += written; + if (file->offset > file->len) + file->len = file->offset; + + buf += rest; + len -= rest; + SMBEnv[j].SMBWriteCache.used = gettime(); + SMBEnv[j].SMBWriteCache.len = 0; + } + else + { + memcpy(SMBEnv[j].SMBWriteCache.ptr + SMBEnv[j].SMBWriteCache.len, buf, len); + SMBEnv[j].SMBWriteCache.len += len; + SMBEnv[j].SMBWriteCache.used = gettime(); + break; + } + } + return size; + +failed: + return -1; +} + +/////////////////////////////////////////// +// END CACHE FUNCTIONS // +/////////////////////////////////////////// + +static char *smb_absolute_path_no_device(const char *srcpath, char *destpath, int env) +{ + char temp[SMB_MAXPATH]; + int i=0,j=0; + + if (strchr(srcpath, ':') != NULL) + { + srcpath = strchr(srcpath, ':') + 1; + } + if (strchr(srcpath, ':') != NULL) + { + return NULL; + } + + memset(temp,0,SMB_MAXPATH); + + if (srcpath[0] != '\\' && srcpath[0] != '/') + { + strcpy(temp, SMBEnv[env].currentpath); + } + if(srcpath[0]!='\0') //strlen(srcpath) > 0 + { + if(srcpath[0]=='.' && (srcpath[1]=='\\' || srcpath[1]=='\0')) // to fix opendir(".") or chdir(".") + strcat(temp, &srcpath[1]); + else + strcat(temp, srcpath); + } + + while(temp[i]!='\0' && i < SMB_MAXPATH) + { + if(temp[i]=='/') + { + destpath[j++]='\\'; + while(temp[i]!='\0' && i < SMB_MAXPATH && (temp[i]=='/' || temp[i]=='\\'))i++; + } + else if(srcpath[i]=='\\') + { + destpath[j++]=temp[i++]; + while(temp[i]!='\0' && i < SMB_MAXPATH && (temp[i]=='/' || temp[i]=='\\'))i++; + } + else + { + destpath[j++]=temp[i++]; + } + } + destpath[j]='\0'; + + return destpath; +} + +static char *ExtractDevice(const char *path, char *device) +{ + int i,l; + l=strlen(path); + + for(i=0;i_errno = ENODEV; + return -1; + } + file->env=env->pos; + + if (!env->SMBCONNECTED) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(path, fixedpath, file->env) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + if(!smbCheckConnection(env->name)) + { + r->_errno = ENODEV; + return -1; + } + + SMBDIRENTRY dentry; + bool fileExists = true; + _SMB_lock(env->pos); + if (SMB_PathInfo(fixedpath, &dentry, env->smbconn) != SMB_SUCCESS) + fileExists = false; + + + // Determine which mode the file is open for + u8 smb_mode; + unsigned short access; + if ((flags & 0x03) == O_RDONLY) + { + // Open the file for read-only access + smb_mode = SMB_OF_OPEN; + access = SMB_OPEN_READING; + } + else if ((flags & 0x03) == O_WRONLY) + { + // Open file for write only access + if (fileExists) + smb_mode = SMB_OF_OPEN; + else + smb_mode = SMB_OF_CREATE; + access = SMB_OPEN_WRITING; + } + else if ((flags & 0x03) == O_RDWR) + { + // Open file for read/write access + access = SMB_OPEN_READWRITE; + if (fileExists) + smb_mode = SMB_OF_OPEN; + else + smb_mode = SMB_OF_CREATE; + } + else + { + r->_errno = EACCES; + _SMB_unlock(env->pos); + return -1; + } + + if ((flags & O_CREAT) && !fileExists) + smb_mode = SMB_OF_CREATE; + if (!(flags & O_APPEND) && fileExists && ((flags & 0x03) != O_RDONLY)) + smb_mode = SMB_OF_TRUNCATE; + file->handle = SMB_OpenFile(fixedpath, access, smb_mode, env->smbconn); + if (!file->handle) + { + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return -1; + } + + file->len = 0; + file->attributes = 0; + if (fileExists) + { + file->len = dentry.size; + file->attributes = dentry.attributes; + } + + if (flags & O_APPEND) + file->offset = file->len; + else + file->offset = 0; + + file->access=access; + + strcpy(file->filename, fixedpath); + _SMB_unlock(env->pos); + return 0; +} + +static off_t __smb_seek(struct _reent *r, int fd, off_t pos, int dir) +{ + SMBFILESTRUCT *file = (SMBFILESTRUCT*) fd; + off_t position; + + if (file == NULL) + { + r->_errno = EBADF; + return -1; + } + + //have to flush because SMBWriteCache.file->offset holds offset of cached block not yet written + _SMB_lock(file->env); + if (SMBEnv[file->env].SMBWriteCache.file == file) + { + FlushWriteSMBCache(SMBEnv[file->env].name); + } + + switch (dir) + { + case SEEK_SET: + position = pos; + break; + case SEEK_CUR: + position = file->offset + pos; + break; + case SEEK_END: + position = file->len + pos; + break; + default: + r->_errno = EINVAL; + _SMB_unlock(file->env); + return -1; + } + + if (pos > 0 && position < 0) + { + r->_errno = EOVERFLOW; + _SMB_unlock(file->env); + return -1; + } + if (position < 0) + { + r->_errno = EINVAL; + _SMB_unlock(file->env); + return -1; + } + + // Save position + file->offset = position; + _SMB_unlock(file->env); + return position; +} + +static ssize_t __smb_read(struct _reent *r, int fd, char *ptr, size_t len) +{ + size_t offset = 0; + size_t readsize; + int ret = 0; + int cnt_retry=2; + SMBFILESTRUCT *file = (SMBFILESTRUCT*) fd; + + if (file == NULL) + { + r->_errno = EBADF; + return -1; + } + + if (len <= 0) + { + return 0; + } + //have to flush because SMBWriteCache.file->offset holds offset of cached block not yet writeln + //and file->len also may not have been updated yet + _SMB_lock(file->env); + if (SMBEnv[file->env].SMBWriteCache.file == file) + { + FlushWriteSMBCache(SMBEnv[file->env].name); + } + + // Don't try to read if the read pointer is past the end of file + if (file->offset >= file->len) + { + r->_errno = EOVERFLOW; + _SMB_unlock(file->env); + return 0; + } + + // Don't read past end of file + if (len + file->offset > file->len) + { + r->_errno = EOVERFLOW; + len = file->len - file->offset; + } + + // Short circuit cases where len is 0 (or less) + if (len <= 0) + { + _SMB_unlock(file->env); + return 0; + } +retry_read: + while(offset < len) + { + readsize = len - offset; + if(readsize > SMB_READ_BUFFERSIZE) readsize = SMB_READ_BUFFERSIZE; + ret = ReadSMBFromCache(ptr+offset, readsize, file); + if(ret < 0) break; + offset += readsize; + file->offset += readsize; + } + + if (ret < 0) + { + retry_reconnect: + cnt_retry--; + if(cnt_retry>=0) + { + if(smbCheckConnection(SMBEnv[file->env].name)) + { + ClearSMBFileCache(file); + file->handle = SMB_OpenFile(file->filename, file->access, SMB_OF_OPEN, SMBEnv[file->env].smbconn); + if (!file->handle) + { + r->_errno = ENOENT; + _SMB_unlock(file->env); + return -1; + } + goto retry_read; + } + usleep(10000); + goto retry_reconnect; + } + r->_errno = EIO; + _SMB_unlock(file->env); + return -1; + } + _SMB_unlock(file->env); + return len; +} + +static ssize_t __smb_write(struct _reent *r, int fd, const char *ptr, size_t len) +{ + SMBFILESTRUCT *file = (SMBFILESTRUCT*) fd; + int written; + if (file == NULL) + { + r->_errno = EBADF; + return -1; + } + + // Don't try to write if the pointer is past the end of file + if (file->offset > file->len) + { + r->_errno = EOVERFLOW; + return -1; + } + + // Short circuit cases where len is 0 (or less) + if (len == 0) + return 0; + + _SMB_lock(file->env); + written = WriteSMBUsingCache(ptr, len, file); + _SMB_unlock(file->env); + + if (written <= 0) + { + r->_errno = EIO; + return -1; + } + + return written; +} + +static int __smb_close(struct _reent *r, int fd) +{ + SMBFILESTRUCT *file = (SMBFILESTRUCT*) fd; + int j; + j=file->env; + _SMB_lock(j); + if (SMBEnv[j].SMBWriteCache.file == file) + { + FlushWriteSMBCache(SMBEnv[j].name); + } + ClearSMBFileCache(file); + SMB_CloseFile(file->handle); + file->len = 0; + file->offset = 0; + file->filename[0] = '\0'; + _SMB_unlock(j); + + return 0; +} + +static int __smb_chdir(struct _reent *r, const char *path) +{ + char path_absolute[SMB_MAXPATH]; + + SMBDIRENTRY dentry; + int found; + + ExtractDevice(path,path_absolute); + if(path_absolute[0]=='\0') + { + getcwd(path_absolute,SMB_MAXPATH); + ExtractDevice(path_absolute,path_absolute); + } + + smb_env* env; + env=FindSMBEnv(path_absolute); + + if(env == NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (!env->SMBCONNECTED) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(path, path_absolute,env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + if(!smbCheckConnection(env->name)) + { + r->_errno = ENODEV; + return -1; + } + + memset(&dentry, 0, sizeof(SMBDIRENTRY)); + + _SMB_lock(env->pos); + found = SMB_PathInfo(path_absolute, &dentry, env->smbconn); + + if (found != SMB_SUCCESS) + { + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return -1; + } + + if (!(dentry.attributes & SMB_SRCH_DIRECTORY)) + { + r->_errno = ENOTDIR; + _SMB_unlock(env->pos); + return -1; + } + + strcpy(env->currentpath, path_absolute); + if (env->currentpath[0] != 0) + { + if (env->currentpath[strlen(env->currentpath) - 1] != '\\') + strcat(env->currentpath, "\\"); + } + _SMB_unlock(env->pos); + return 0; +} + +static int __smb_dirreset(struct _reent *r, DIR_ITER *dirState) +{ + char path_abs[SMB_MAXPATH]; + SMBDIRSTATESTRUCT* state = (SMBDIRSTATESTRUCT*) (dirState->dirStruct); + SMBDIRENTRY dentry; + + memset(&dentry, 0, sizeof(SMBDIRENTRY)); + + _SMB_lock(state->env); + SMB_FindClose(&state->smbdir, SMBEnv[state->env].smbconn); + + strcpy(path_abs,SMBEnv[state->env].currentpath); + strcat(path_abs,"*"); + int found = SMB_FindFirst(path_abs, smbFlags, &dentry, SMBEnv[state->env].smbconn); + + if (found != SMB_SUCCESS) + { + r->_errno = ENOENT; + _SMB_unlock(state->env); + return -1; + } + + if (!(dentry.attributes & SMB_SRCH_DIRECTORY)) + { + r->_errno = ENOTDIR; + _SMB_unlock(state->env); + return -1; + } + + state->smbdir.size = dentry.size; + state->smbdir.ctime = dentry.ctime; + state->smbdir.atime = dentry.atime; + state->smbdir.mtime = dentry.mtime; + state->smbdir.attributes = dentry.attributes; + state->smbdir.sid = dentry.sid; + strcpy(state->smbdir.name, dentry.name); + + SMBEnv[state->env].first_item_dir = true; + _SMB_unlock(state->env); + return 0; +} + +static DIR_ITER* __smb_diropen(struct _reent *r, DIR_ITER *dirState, const char *path) +{ + char path_absolute[SMB_MAXPATH]; + int found; + SMBDIRSTATESTRUCT* state = (SMBDIRSTATESTRUCT*) (dirState->dirStruct); + SMBDIRENTRY dentry; + + ExtractDevice(path,path_absolute); + if(path_absolute[0]=='\0') + { + getcwd(path_absolute,SMB_MAXPATH); + ExtractDevice(path_absolute,path_absolute); + } + + smb_env* env; + env=FindSMBEnv(path_absolute); + + if(env == NULL) + { + r->_errno = ENODEV; + return NULL; + } + + if (smb_absolute_path_no_device(path, path_absolute, env->pos) == NULL) + { + r->_errno = EINVAL; + return NULL; + } + if (strlen(path_absolute) > 0 && path_absolute[strlen(path_absolute) - 1] != '\\') + strcat(path_absolute, "\\"); + + if(!strcmp(path_absolute,"\\")) + env->diropen_root=true; + else + env->diropen_root=false; + + if(!smbCheckConnection(env->name)) + { + r->_errno = ENODEV; + return NULL; + } + + _SMB_lock(env->pos); + if(!env->diropen_root) // root must be valid - we don't need check it + { + memset(&dentry, 0, sizeof(SMBDIRENTRY)); + found = SMB_PathInfo(path_absolute, &dentry, env->smbconn); + if (found != SMB_SUCCESS) + { + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return NULL; + } + + if (!(dentry.attributes & SMB_SRCH_DIRECTORY)) + { + r->_errno = ENOTDIR; + _SMB_unlock(env->pos); + return NULL; + } + } + + strcpy(state->dir,path_absolute); + + strcat(path_absolute, "*"); + memset(&dentry, 0, sizeof(SMBDIRENTRY)); + found = SMB_FindFirst(path_absolute, smbFlags, &dentry, env->smbconn); + + if (found != SMB_SUCCESS) + { + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return NULL; + } + + state->env=env->pos; + state->smbdir.size = dentry.size; + state->smbdir.ctime = dentry.ctime; + state->smbdir.atime = dentry.atime; + state->smbdir.mtime = dentry.mtime; + state->smbdir.attributes = dentry.attributes; + state->smbdir.sid = dentry.sid; + strcpy(state->smbdir.name, dentry.name); + env->first_item_dir = true; + _SMB_unlock(env->pos); + return dirState; +} + +static int dentry_to_stat(SMBDIRENTRY *dentry, struct stat *st) +{ + if (!st) + return -1; + if (!dentry) + return -1; + + st->st_dev = 0; + st->st_ino = 0; + + st->st_mode = ((dentry->attributes & SMB_SRCH_DIRECTORY) ? S_IFDIR : S_IFREG); + st->st_nlink = 1; + st->st_uid = 1; // Faked + st->st_rdev = st->st_dev; + st->st_gid = 2; // Faked + st->st_size = dentry->size; + st->st_atime = dentry->atime/10000000.0 - 11644473600LL; + st->st_spare1 = 0; + st->st_mtime = dentry->mtime/10000000.0 - 11644473600LL; + st->st_spare2 = 0; + st->st_ctime = dentry->ctime/10000000.0 - 11644473600LL; + st->st_spare3 = 0; + st->st_blksize = 1024; + st->st_blocks = (st->st_size + st->st_blksize - 1) / st->st_blksize; // File size in blocks + st->st_spare4[0] = 0; + st->st_spare4[1] = 0; + + return 0; +} + +static int cpy_dentry(SMBDIRENTRY *dest, SMBDIRENTRY *source) +{ + if (!dest || !source) + return -1; + + dest->attributes=source->attributes; + dest->size=source->size; + dest->atime=source->atime; + dest->mtime=source->mtime; + dest->ctime=source->ctime; + strcpy(dest->name,source->name); + + return 0; +} + +static int __smb_dirnext(struct _reent *r, DIR_ITER *dirState, char *filename, + struct stat *filestat) +{ + int ret; + SMBDIRSTATESTRUCT* state = (SMBDIRSTATESTRUCT*) (dirState->dirStruct); + SMBDIRENTRY dentry; + + if (SMBEnv[state->env].currentpath[0] == '\0' || filestat == NULL) + { + r->_errno = ENOENT; + return -1; + } + + memset(&dentry, 0, sizeof(SMBDIRENTRY)); + _SMB_lock(state->env); + if (SMBEnv[state->env].first_item_dir) + { + SMBEnv[state->env].first_item_dir = false; + dentry.size = state->smbdir.size; + dentry.ctime = state->smbdir.ctime; + dentry.atime = state->smbdir.atime; + dentry.mtime = state->smbdir.mtime; + dentry.attributes = state->smbdir.attributes; + strcpy(dentry.name, state->smbdir.name); + strcpy(filename, dentry.name); + dentry_to_stat(&dentry, filestat); + cpy_dentry(&last_dentry,&dentry); + last_env=state->env; + strcpy(last_path,state->dir); + _SMB_unlock(state->env); + return 0; + } + + dentry.sid = state->smbdir.sid; + + ret = SMB_FindNext(&dentry, SMBEnv[state->env].smbconn); + if(ret==SMB_SUCCESS && SMBEnv[state->env].diropen_root) + { + if(strlen(dentry.name) == 2 && strcmp(dentry.name,"..") == 0) + ret = SMB_FindNext(&dentry, SMBEnv[state->env].smbconn); + } + if (ret == SMB_SUCCESS) + { + state->smbdir.size = dentry.size; + state->smbdir.ctime = dentry.ctime; + state->smbdir.atime = dentry.atime; + state->smbdir.mtime = dentry.mtime; + state->smbdir.attributes = dentry.attributes; + strcpy(state->smbdir.name, dentry.name); + strcpy(filename, dentry.name); + } + else + { + r->_errno = ENOENT; + _SMB_unlock(state->env); + return -1; + } + + dentry_to_stat(&dentry, filestat); + cpy_dentry(&last_dentry,&dentry); + last_env=state->env; + strcpy(last_path,state->dir); + _SMB_unlock(state->env); + return 0; +} + +static int __smb_dirclose(struct _reent *r, DIR_ITER *dirState) +{ + SMBDIRSTATESTRUCT* state = (SMBDIRSTATESTRUCT*) (dirState->dirStruct); + + int j = state->env; + _SMB_lock(j); + SMB_FindClose(&state->smbdir, SMBEnv[j].smbconn); + memset(state, 0, sizeof(SMBDIRSTATESTRUCT)); + _SMB_unlock(j); + return 0; +} + +static int __smb_stat(struct _reent *r, const char *path, struct stat *st) +{ + char path_absolute[SMB_MAXPATH]; + SMBDIRENTRY dentry; + + if(path == NULL) + { + r->_errno = ENODEV; + return -1; + } + + if(strcmp(path,".")==0 || strcmp(path,"..")==0) + { + memset(st,0,sizeof(struct stat)); + st->st_mode = S_IFDIR; + return 0; + } + + ExtractDevice(path,path_absolute); + if(path_absolute[0]=='\0') + { + getcwd(path_absolute,SMB_MAXPATH); + ExtractDevice(path_absolute,path_absolute); + } + + smb_env* env; + env=FindSMBEnv(path_absolute); + + if(env == NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(path, path_absolute, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + if(env->pos==last_env) //optimization, usually after a dirnext we do stat + { + char file[SMB_MAXPATH]; + strcpy(file,last_path); + strcat(file,last_dentry.name); + if(strcmp(file,path_absolute)==0) + { + dentry_to_stat(&last_dentry, st); + return 0; + } + } + + _SMB_lock(env->pos); + if (SMB_PathInfo(path_absolute, &dentry, env->smbconn) != SMB_SUCCESS) + { + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return -1; + } + + if (dentry.name[0] == '\0') + { + + r->_errno = ENOENT; + _SMB_unlock(env->pos); + return -1; + } + + dentry_to_stat(&dentry, st); + _SMB_unlock(env->pos); + + return 0; +} + +static int __smb_fstat(struct _reent *r, int fd, struct stat *st) +{ + SMBFILESTRUCT *filestate = (SMBFILESTRUCT *) fd; + + if (!filestate) + { + r->_errno = EBADF; + return -1; + } + + st->st_size = filestate->len; + st->st_mode = ((filestate->attributes & SMB_SRCH_DIRECTORY) ? S_IFDIR : S_IFREG); + + return 0; +} + +static int __smb_mkdir(struct _reent *r, const char *name, int mode) +{ + char fixedName[SMB_MAXPATH]; + smb_env *env; + + ExtractDevice(name,fixedName); + if(fixedName[0]=='\0') + { + getcwd(fixedName,SMB_MAXPATH); + ExtractDevice(fixedName,fixedName); + } + + env=FindSMBEnv(fixedName); + if(env==NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(name, fixedName, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + s32 ret = 0; + _SMB_lock(env->pos); + if(SMB_CreateDirectory(fixedName, env->smbconn) != SMB_SUCCESS) + ret = -1; + _SMB_unlock(env->pos); + + return ret; +} + +static int __smb_unlink(struct _reent *r, const char *name) +{ + char fixedName[SMB_MAXPATH]; + smb_env *env; + bool isDir = false; + + DIR *dir = NULL; + dir = opendir(name); + if(dir) + { + closedir(dir); + isDir = true; + } + + ExtractDevice(name,fixedName); + if(fixedName[0]=='\0') + { + getcwd(fixedName,SMB_MAXPATH); + ExtractDevice(fixedName,fixedName); + } + + env=FindSMBEnv(fixedName); + if(env==NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(name, fixedName, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + s32 ret = 0; + _SMB_lock(env->pos); + if(isDir) + ret = SMB_DeleteDirectory(fixedName, env->smbconn); + else + ret = SMB_DeleteFile(fixedName, env->smbconn); + _SMB_unlock(env->pos); + + if(ret != SMB_SUCCESS) + return -1; + + return 0; +} + +static int __smb_rename(struct _reent *r, const char *oldName, const char *newName) +{ + char fixedOldName[SMB_MAXPATH]; + char fixedNewName[SMB_MAXPATH]; + smb_env *env; + + ExtractDevice(oldName,fixedOldName); + if(fixedOldName[0]=='\0') + { + getcwd(fixedOldName,SMB_MAXPATH); + ExtractDevice(fixedOldName,fixedOldName); + } + + env=FindSMBEnv(fixedOldName); + if(env==NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(oldName, fixedOldName, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + ExtractDevice(newName,fixedNewName); + if(fixedNewName[0]=='\0') + { + getcwd(fixedNewName,SMB_MAXPATH); + ExtractDevice(fixedNewName,fixedNewName); + } + + if (smb_absolute_path_no_device(newName, fixedNewName, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + s32 ret = 0; + _SMB_lock(env->pos); + if (SMB_Rename(fixedOldName, fixedNewName, env->smbconn) != SMB_SUCCESS) + ret = -1; + _SMB_unlock(env->pos); + + return ret; +} + +static int __smb_statvfs_r(struct _reent *r, const char *name, struct statvfs *buf) +{ + char fixedName[SMB_MAXPATH]; + smb_env *env; + + ExtractDevice(name,fixedName); + if(fixedName[0]=='\0') + { + getcwd(fixedName,SMB_MAXPATH); + ExtractDevice(fixedName,fixedName); + } + + env=FindSMBEnv(fixedName); + if(env==NULL) + { + r->_errno = ENODEV; + return -1; + } + + if (smb_absolute_path_no_device(name, fixedName, env->pos) == NULL) + { + r->_errno = EINVAL; + return -1; + } + + s32 ret = 0; + _SMB_lock(env->pos); + if(SMB_DiskInformation(buf, env->smbconn) != SMB_SUCCESS) + ret = -1; + _SMB_unlock(env->pos); + + return ret; +} + +static void MountDevice(const char *name,SMBCONN smbconn, int env) +{ + devoptab_t *dotab_smb; + char *aux; + int l; + + aux=strdup(name); + l=strlen(aux); + if(aux[l-1]==':')aux[l-1]='\0'; + + dotab_smb=(devoptab_t*)malloc(sizeof(devoptab_t)); + + dotab_smb->name=strdup(aux); + dotab_smb->structSize=sizeof(SMBFILESTRUCT); // size of file structure + dotab_smb->open_r=__smb_open; // device open + dotab_smb->close_r=__smb_close; // device close + dotab_smb->write_r=__smb_write; // device write + dotab_smb->read_r=__smb_read; // device read + dotab_smb->seek_r=__smb_seek; // device seek + dotab_smb->fstat_r=__smb_fstat; // device fstat + dotab_smb->stat_r=__smb_stat; // device stat + dotab_smb->link_r=NULL; // device link + dotab_smb->unlink_r=__smb_unlink; // device unlink + dotab_smb->chdir_r=__smb_chdir; // device chdir + dotab_smb->rename_r=__smb_rename; // device rename + dotab_smb->mkdir_r=__smb_mkdir; // device mkdir + + dotab_smb->dirStateSize=sizeof(SMBDIRSTATESTRUCT); // dirStateSize + dotab_smb->diropen_r=__smb_diropen; // device diropen_r + dotab_smb->dirreset_r=__smb_dirreset; // device dirreset_r + dotab_smb->dirnext_r=__smb_dirnext; // device dirnext_r + dotab_smb->dirclose_r=__smb_dirclose; // device dirclose_r + dotab_smb->statvfs_r=__smb_statvfs_r; // device statvfs_r + dotab_smb->ftruncate_r=NULL; // device ftruncate_r + dotab_smb->fsync_r=NULL; // device fsync_r + dotab_smb->deviceData=NULL; /* Device data */ + + AddDevice(dotab_smb); + + SMBEnv[env].pos=env; + SMBEnv[env].smbconn=smbconn; + SMBEnv[env].first_item_dir=false; + SMBEnv[env].diropen_root=false; + SMBEnv[env].devoptab=dotab_smb; + SMBEnv[env].SMBCONNECTED=true; + SMBEnv[env].name=strdup(aux); + + SMBEnableReadAhead(aux,8); + + free(aux); +} + +bool smbInitDevice(const char* name, const char *user, const char *password, const char *share, const char *ip) +{ + int i; + + if(!name || strlen(name) > 9) + return false; + + char devname[10]; + sprintf(devname, "%s:", name); + if(FindDevice(devname) >= 0) + return false; + + if(!smbInited) + { + for(i=0;ipos); + if(env->SMBCONNECTED) + SMB_Close(env->smbconn); + + char device[11]; + sprintf(device, "%s:", env->name); + RemoveDevice(device); + env->SMBCONNECTED=false; + _SMB_unlock(env->pos); +} + +bool smbCheckConnection(const char* name) +{ + char device[10]; + int i; + bool ret; + smb_env *env; + + for(i=0; i < 10 && name[i]!='\0' && name[i]!=':'; i++) device[i]=name[i]; + device[i]='\0'; + + env=FindSMBEnv(device); + if(env==NULL) return false; + _SMB_lock(env->pos); + ret=(SMB_Reconnect(&env->smbconn,true)==SMB_SUCCESS); + _SMB_unlock(env->pos); + return ret; +} + +void smbSetSearchFlags(unsigned short flags) +{ + smbFlags = flags; +} diff --git a/src/.AppleDouble/.Parent b/src/.AppleDouble/.Parent new file mode 100644 index 0000000..099f529 Binary files /dev/null and b/src/.AppleDouble/.Parent differ diff --git a/src/.AppleDouble/CMD.S b/src/.AppleDouble/CMD.S new file mode 100644 index 0000000..1b3ff16 Binary files /dev/null and b/src/.AppleDouble/CMD.S differ diff --git a/src/.AppleDouble/GSTEST2.L b/src/.AppleDouble/GSTEST2.L new file mode 100644 index 0000000..6ef1f38 Binary files /dev/null and b/src/.AppleDouble/GSTEST2.L differ diff --git a/src/.AppleDouble/GSTEST2.S b/src/.AppleDouble/GSTEST2.S new file mode 100644 index 0000000..06a6146 Binary files /dev/null and b/src/.AppleDouble/GSTEST2.S differ diff --git a/src/.AppleDouble/GSTEST2.S16 b/src/.AppleDouble/GSTEST2.S16 new file mode 100644 index 0000000..1fb9af7 Binary files /dev/null and b/src/.AppleDouble/GSTEST2.S16 differ diff --git a/src/.AppleDouble/GSTEST22.S b/src/.AppleDouble/GSTEST22.S new file mode 100644 index 0000000..15d380c Binary files /dev/null and b/src/.AppleDouble/GSTEST22.S differ diff --git a/src/.AppleDouble/SMBDEMO.S b/src/.AppleDouble/SMBDEMO.S new file mode 100644 index 0000000..017014a Binary files /dev/null and b/src/.AppleDouble/SMBDEMO.S differ diff --git a/src/.AppleDouble/_FileInformation.txt b/src/.AppleDouble/_FileInformation.txt new file mode 100644 index 0000000..9358e59 Binary files /dev/null and b/src/.AppleDouble/_FileInformation.txt differ diff --git a/src/.AppleDouble/error_output.txt b/src/.AppleDouble/error_output.txt new file mode 100644 index 0000000..b58d769 Binary files /dev/null and b/src/.AppleDouble/error_output.txt differ diff --git a/src/.AppleDouble/smbdemo b/src/.AppleDouble/smbdemo new file mode 100644 index 0000000..540e913 Binary files /dev/null and b/src/.AppleDouble/smbdemo differ diff --git a/src/.AppleDouble/smbdemo_Output.txt b/src/.AppleDouble/smbdemo_Output.txt new file mode 100644 index 0000000..79cb179 Binary files /dev/null and b/src/.AppleDouble/smbdemo_Output.txt differ diff --git a/src/.AppleDouble/strip_high_bit.php b/src/.AppleDouble/strip_high_bit.php new file mode 100644 index 0000000..4080d54 Binary files /dev/null and b/src/.AppleDouble/strip_high_bit.php differ diff --git a/src/CMD.S b/src/CMD.S new file mode 100644 index 0000000..c85d8fb --- /dev/null +++ b/src/CMD.S @@ -0,0 +1,14 @@ +* +* Linker File for SMBDEMO +* + + dsk smbdemo + typ $b3 + xpl + asm SMBDEMO.S + ds 0 + knd #$1100 + ali None + lna smbdemo.s16 + sna Main + diff --git a/src/SMBDEMO.S b/src/SMBDEMO.S new file mode 100644 index 0000000..08513f5 --- /dev/null +++ b/src/SMBDEMO.S @@ -0,0 +1,1406 @@ +* +* Marinetti / SMB2 Test, Mark II +* +* CHANGELOG +* Thursday, April 30, 2015 - Restarted effort, ported code from ORCA/M to Merlin32 and debugged Merlin32 environment +* Friday, May 1, 2015 - Ported more code to Merlin32, set up Merlin32 equates +* Saturday, May 2, 2015 - Formatting fixes, refactoring, rewritten SMB Negotiation code +* Saturday, May 9, 2015 - Receive and interpret NEG_PROT reply and start login +* +* REFERENCES +* smb.c / smb.h from libOGC +* http://www.ubiqx.org/cifs/SMB.html +* + + rel + dsk smbdemo.l + +* Macros (mostly from Merlin32 dist) + use GsOs.Macs + use Util.Macs + use Misc.Macs + use Locator.Macs + use Mem.Macs + use Qd.Macs + use QdAux.Macs + use Event.Macs + use Window.Macs + use Ctl.Macs + use Menu.Macs + use Desk.Macs + use Sound.Macs + use Line.Macs + use Dialog.Macs + use TCPIP.Macs ; from MOSP CVS + +* Equates (ripped off from Merlin 16) + use E16.Dialog.Macs + use E16.GsOs.Macs +* Equates (from MOSP/Tools/Orca.M/e16.tcpip) + use E16.TCPIP.Macs + +*----------------------------------------------------------------------------- +* DP variables and local equates +*----------------------------------------------------------------------------- + +* DUM $000000 is broken on merlin32, if you want LDA (DP) $A5 opcode, write one-byte equates instead +* cause merlin32 will always give you $AD (LDAL) +* dum 0 +*AppMMID +* ds 2,0 ; Memory Manager ID +*HndlRef +* ds 2,0 ; For Dereferencing MM Handle +*DPBase +* ds 1,0 ; Deref'd handle +* dend + +* workaround: do this instead for DP variables +AppMMID = $0 +HndlRef = $2 +DPBase = $4 + +*----------------------------------------------------------------------------- +* GS/OS Program Entry Point +*----------------------------------------------------------------------------- + +Entry mx %00 + phk + plb + brl Main + +* +* Check for toolbox errors +* too-simple error handler +* +CheckError bcs SysDeath + rts + +SysDeath pha + PushLong #0000 + _SysFailMgr + +* +* StartUpTools - start up the various toolsets +* +StartUpTools _TLStartUp + pha + _MMStartUp + jsr CheckError + PullWord AppMMID + _MTStartUp + + pha + pha + PushLong #$800 ; 8 pages of DP space + PushWord AppMMID + PushWord #$C005 ; Fixed, Page-Aligned, Locked, Unpurgeable + PushLong #$000000 ; in Bank $00, $0000 + _NewHandle + jsr CheckError + PullLong HndlRef + lda [HndlRef] + sta DPBase + + pha ; save dp pointer for later + pha + PushWord #$0080 ; Screen Mode ($0000 = 320, $0080 = 640) + PushWord #$00A0 ; Pixel Map Size ($0050 = 320, $00A0 = 640) + PushWord AppMMID + _QDStartUp + jsr CheckError + + pla ; saved dp pointer + clc + adc #$300 + pha ; save dp pointer for later + pha + PushWord #20 ; Event Queue size + PushWord #0 ; Min X clamp + PushWord #640 ; Max X clamp + PushWord #0 ; Min Y clamp + PushWord #200 ; Max Y clamp + PushWord AppMMID + _EMStartUp + jsr CheckError + + PushWord #0 + _SetBackColor + + PushWord #3 + _SetForeColor + + PushWord #50 ; X position + PushWord #85 ; Y position + _MoveTo + + PushLong #OneMoment + _DrawCString + + PushLong #ToolList + _LoadTools + jsr CheckError + + PushWord AppMMID + _WindStartUp + jsr CheckError + + pla ; saved dp pointer + clc + adc #$100 + pha ; save it for later + tax ; save dp pointer in x + PushWord AppMMID + phx + _CtlStartUp + jsr CheckError + + pla + clc + adc #$100 + pha + tax + PushWord AppMMID + phx + _LEStartUp + jsr CheckError + + PushWord AppMMID + _DialogStartUp + jsr CheckError + + pla + clc + adc #$100 + pha + tax + PushWord AppMMID + phx + _MenuStartUp + jsr CheckError + + _DeskStartUp + jsr CheckError + + pla + clc + adc #$100 + pha + _SoundStartUp + jsr CheckError + + _TCPIPStartUp + jsr CheckError + + rts + +* +* ShutDownTools - shut em back down +* +ShutDownTools lda ToolList + asl + asl + tax + lda ToolList-2,x + cmp #$2 ; Memory Manager? + bne ShutDownOne ; Nope, do it normally + PushWord AppMMID + _DisposeAll + PushWord AppMMID + lda #$2 ; set up for toolset #2 (MM) +ShutDownOne ora #$300 ; Call #3 (Shutdown) + tax + jsl $E10000 + dec ToolList + bne ShutDownTools + rts + +* +* Main - main sequence of events +* +Main jsr StartUpTools + jsr PrepDeskTop + sep $20 + ldal $e0c034 + sta ScreenColorByte + lda #00 + stal $e0c034 + rep $30 + +* pretty corner rounding + PushWord #0000 + _SetForeColor +* upper left + PushWord #0001 + PushWord #0000 + _MoveTo + PushWord #0001 + PushWord #0002 + _LineTo + PushWord #0002 + PushWord #0000 + _MoveTo + PushWord #0002 + PushWord #0001 + _LineTo + PushWord #0003 + PushWord #0000 + _MoveTo + PushWord #0003 + PushWord #0000 + _LineTo +* upper right + PushWord #0638 + PushWord #0000 + _MoveTo + PushWord #0638 + PushWord #0002 + _LineTo + PushWord #0637 + PushWord #0000 + _MoveTo + PushWord #0637 + PushWord #0001 + _LineTo +* lower left + PushWord #0000 + PushWord #0195 + _MoveTo + PushWord #0000 + PushWord #0199 + _LineTo + PushWord #0001 + PushWord #0197 + _MoveTo + PushWord #0001 + PushWord #0199 + _LineTo + PushWord #0002 + PushWord #0199 + _MoveTo + PushWord #0002 + PushWord #0199 + _LineTo +* lower right + PushWord #0639 + PushWord #0195 + _MoveTo + PushWord #0639 + PushWord #0199 + _LineTo + PushWord #0638 + PushWord #0197 + _MoveTo + PushWord #0638 + PushWord #0199 + _LineTo + PushWord #0637 + PushWord #0199 + _MoveTo + PushWord #0637 + PushWord #0199 + _LineTo + +EventLoop pha ; Result Space + PushWord #$ffff ; Event Mask + PushLong #EventRec + _TaskMaster + pla + beq EventLoop + + cmp #$11 ; wInMenuBar? + bne EventLoop ; no, so ignore + + jsr MenuDispatch + bit QuitFlag + bpl EventLoop + + sep $20 + lda ScreenColorByte + stal $e0c034 + rep $30 + + jsr ShutDownTools + iGSOS _Quit;QParams;1 + +* +* Prepare Desktop +* +PrepDeskTop PushLong #0000 + _RefreshDesktop + _InitCursor + +NextMenu pha + pha + lda MenuTbl + asl + tax + lda MenuTbl,x + phb + phb + pha + _NewMenu + PushWord #0000 + _InsertMenu + + dec MenuTbl + bne NextMenu + + PushWord #1 + _FixAppleMenu + + pha + _FixMenuBar + pla + + _DrawMenuBar + rts + +* +* Apple Menu: About +* +About PushLong #AboutString + jsr InfoDialog + rts + +* +* File Menu: Quit +* +Quit dec QuitFlag + rts + +* +* TCP/IP Test +* +TCPIPTest pha + PushWord #0000 + _TCPIPGetConnectStatus + pla + cmp #$0000 + bne tgood + PushLong #MarinettiBad + jsr InfoDialog + bra tret +tgood PushLong #MarinettiGood + jsr InfoDialog +tret pla + rts + +* +* Connect To Server +* +ConnectToSvr PushLong #$00000000 ; space for result + PushLong #CTSRect + _GetNewModalDialog + PullLong CTSWinPtr + + PushLong CTSWinPtr + _BeginUpdate + + PushLong CTSWinPtr + _DrawDialog + + PushLong CTSWinPtr + _EndUpdate + + PushLong #00000000 + _TCPIPConnect ; make sure marinetti is connected + + PushLong #00000000 + _TCPIPGetMyIPAddress + plx + ply + PushWord #0000 + phy + phx + PushLong #ascaddr + PushWord #0000 + _TCPIPConvertIPToASCII ; convert our address to ASCII + pla + PushLong CTSWinPtr + PushWord #1360 + PushLong #ascaddr + _SetIText ; show it + +CTSLoop1 PushWord #0000 ; space for result + PushLong #00000000 ; nil filter + _ModalDialog + pla ; get item hit + cmp #2 ; Cancel? + beq CTSClose + cmp #1 ; Connect? + bne CTSLoop1 + bra CTSConnect +CTSClose PushLong CTSWinPtr + _CloseDialog + rts +CTSConnect PushLong #00000000 + PushLong CTSWinPtr + PushWord #0001 + _GetControlDItem + plx + ply + PushWord #255 + phy + phx + _HiliteControl ; dim/disable 'Connect' button + + PushLong #00000000 + PushLong CTSWinPtr + PushWord #1349 + _GetControlDItem + plx + ply + PushWord #255 + phy + phx + _HiliteControl ; dim/disable 'Address' text input + + PushLong CTSWinPtr + PushWord #1349 + PushLong #fqdnptr + _GetIText + + PushWord CTSText4 ; preserve old length byte (word) + + sep #$30 + mx %11 + lda fqdnptr + tax + clc + adc CTSText4 + sta CTSText4 +hostcopy lda fqdnptr,x + sta inhost-1,x + dex + bne hostcopy + rep #$30 + mx %00 + + PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSText4 + _SetIText ; show 'resolving' status string + + pla + sta CTSText4 + + PushWord #0000 + PushWord #$F800 + PushLong #fqdnptr + _TCPIPMangleDomainName ; mangle entered domain name + pla ; port number; trash + + PushWord #0000 + PushLong #fqdnptr + _TCPIPValidateIPString + pla + beq resolve ; engage DNS if this wasn't an ip address + PushLong #ipaddrip + PushLong #fqdnptr + _TCPIPConvertIPToHex ; else just convert to long + bra Connect ; and on with the show + +resolve PushLong #fqdnptr + PushLong #ipaddr + _TCPIPDNRNameToIP ; resolve fqdn +ResolvLoop PushWord #0000 ; check for mouse events (cancel) + PushWord #$0006 ; with _EventAvail + PushLong #EventRec ; because _ModalDialog will block + _EventAvail + pla + beq noevent + PushWord #0000 + PushLong #00000000 + _ModalDialog + pla + cmp #2 + beq CTSClose2 +noevent _TCPIPPoll + lda ipaddr + cmp #$0001 + beq Connect ; continue to Connect if resolved okay + cmp #$0000 + beq ResolvLoop ; pending; stay in 'Resolving' loop + bra CTSBadDNS +CTSClose2 PushLong CTSWinPtr + _CloseDialog + rts +CTSBadDNS PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSText5 + _SetIText + bra CTSClose2 + +Connect PushWord #0000 + PushLong ipaddrip + PushLong #destaddr + PushWord #0000 + _TCPIPConvertIPToASCII + pla + + PushWord CTSText6 ; preserve old length byte (word) + + sep #$30 + mx %11 + lda destaddr + tax + clc + adc CTSText6 + sta CTSText6 +ipcopy lda destaddr,x + sta ascdest-1,x + dex + bne ipcopy + rep #$30 + mx %00 + + PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSText6 + _SetIText ; change status to 'Connecting' + + pla + sta CTSText6 ; restore length byte + + PushWord #0000 ; space for result + PushWord AppMMID ; our Memory Manager handle + PushLong ipaddrip ; ipaddress to connect to + PushWord #0445 ; try port 445 first + PushWord #0000 ; default TOS: 0000 + PushWord #$0040 ; default TTL: 64 + _TCPIPLogin + pla + sta MyIPID + + PushWord #$0000 + PushWord MyIPID + _TCPIPOpenTCP + pla + beq ConnectLoop + + jmp CTSClose3 + +ConnectLoop PushWord #0000 + PushWord #$0006 + PushLong #EventRec + _EventAvail + pla + beq noevent2 + PushWord #0000 ; space for result + PushLong #00000000 ; nil filter procedure + _ModalDialog + pla + cmp #2 + bne noevent2 + jmp CTSClose3 +noevent2 _TCPIPPoll + PushWord #0000 + PushWord MyIPID + PushLong #statbuf + _TCPIPStatusTCP + pla + beq notbroke + jmp CTSClose3 ; something broke +notbroke lda statbuf + cmp #$0004 + beq estab + cmp #$0000 + beq closed_trampoline + bra ConnectLoop + +estab PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSText9 + _SetIText + + PushLong MyIPID + jsr SMB_Init ; feed our Marinetti IPID into SMB system + PullLong MySMBHandle ; get back our SMB handle + + PushLong MySMBHandle ; SMB_Negotiate wants our SMB handle + jsr SMB_Negotiate ; and hopefully we send a SMB Negotiate Protocol Request and get a response + + bra ct_far +closed_trampoline jmp closed +ct_far + +sendloop2 PushWord #0000 + PushWord #$0006 + PushLong #EventRec + _EventAvail + pla + beq noevent3 + PushWord #0000 + PushLong #00000000 + _ModalDialog + pla + cmp #2 + bne noevent3 + bra CTSClose3 +noevent3 jsr SMB_Negotiate_Poll + bcc sendloop2 + +login PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSTextB + _SetIText + + jmp SMB_staging_brk ; die so we can inspect things + +closed PushLong CTSWinPtr + PushWord #1350 + PushLong #CTSTextA + _SetIText + +CTSClose3 PushWord #MyIPID + _TCPIPLogout ; get rid of our IPID + PushLong CTSWinPtr ; and close the dialog window + _CloseDialog + rts + +* +* Menu Dispatcher +* +MenuDispatch lda TaskData + and #$00ff + asl + tax + jsr (MenuDispatchTbl,x) + + PushWord #0000 + PushWord TaskData+2 + _HiliteMenu + rts + +* +* Information Dialog +* +InfoDialog plx ; preserve return address + PullLong dialogMsg + phx ; put return back on stack + pha ; room for result + PushLong #OurAlert ; pointer to dialog + PushLong #$0000 + _NoteAlert + pla ; get the item selected + rts + +* +* Non-DP Variables +* +QuitFlag dw 00,00 +ScreenColorByte dw 00 +MyIPID dw 00 ; Marinetti IPID +MySMBHandle dw 00,00 ; SMB driver handle +CTSWinPtr dw 00,00 ; Connect To Server grafport ptr +fqdnptr ds 101 ; 101 bytes for user-entered hostname +ipaddr dw 00 ; DNS resolution status +ipaddrip dw 00,00 ; Resolved IP address +ascaddr ds 16 ; My IP address, in ASCII +destaddr ds 16 ; Destination IP address, in ASCII +statbuf ds 2 ; TCP state, statbuf+0 + ds 2 ; ICMP error code, statbuf+2 + ds 4 ; sendq size, statbuf+4 + ds 4 ; recvq size, statbuf+8 + ds 4 ; dest ip + ds 2 ; dest port + ds 2 ; connection type + ds 2 ; accept count +readbuf ds 4 ; rrBuffCount + ds 4 ; rrBuffHandle + ds 2 ; rrMoreFlag + ds 2 ; rrPushFlag + ds 2 ; rrUrgentFlag + +* +* Tool List +* +ToolList dw 13 ; Tool Count + dw 01,00 ; Tool Locator, any vers + dw 02,00 ; Memory Manager, any vers + dw 03,00 ; Misc Tools, any vers + dw 04,00 ; QuickDraw II, any vers + dw 06,00 ; Event Manager, any vers + dw 14,00 ; Window Manager, any vers + dw 16,00 ; Control Manager, any vers + dw 15,00 ; Menu Manager, any vers + dw 05,00 ; Desk Manager, any vers + dw 08,00 ; Sound Manager, any vers + dw 20,00 ; Line Edit, any vers + dw 21,00 ; Dialog Manager, any vers + dw 54,00 ; Marinetti, any vers +ToolListEnd + +* +* Menu Structures +* + +MenuDispatchTbl dw About + dw Quit + dw TCPIPTest + dw ConnectToSvr + +MenuTbl dw 4 ; count + dw Menu1 + dw Menu2 + dw Menu3 + dw Menu4 +MenuTblEnd + +Menu1 asc '>>@\XN1'00 + asc '--About This Program...\N256*??'00 + asc '---\D'00 + asc '>' + +Menu2 asc '>> File \N2'00 + asc '--Quit\N257*Qq'00 + asc '>' + +Menu3 asc '>> Edit \N3D'00 + asc '--Undo\N250V*Zz'00 + asc '--Cut\N251*Xx'00 + asc '--Copy\N252*Cc'00 + asc '--Paste\N253V*Vv'00 + asc '--Clear\N254'00 + asc '>' + +Menu4 asc '>> Test \N4'00 + asc '--TCP/IP Test\N258*Tt'00 + asc '--Connect to Server\N259*Uu'00 + asc '>' + +* +* Event Record +* +EventRec +Event_What ds 2 +Event_Msg ds 4 +Event_When ds 4 +Event_Where ds 4 +Event_Mods ds 2 +TaskData ds 4 +TaskMask dw $1fff,$0000 + +* +* Strings +* +OneMoment asc 'One Moment Please...'00 +MarinettiGood str 'Marinetti is Up.' +MarinettiBad str 'Marinetti is Not Up.' +AboutString str 'TCPIP Test Program' +But1 str 'OK' + +* +* Connect To Server Dialog +* +CTSRect dw 30,120,120,520 ; bounds rect +CTSVis dw 0001 ; visible +CTSRef dw 0000,0000 ; refcon +CTSiptr1 adrl CTSItem1 ; string 'Host To Connect To' +CTSiptr2 adrl CTSItem2 ; edit line +CTSiptr3 adrl CTSItem3 ; connect button +CTSiptr4 adrl CTSItem4 ; cancel button +CTSiptr5 adrl CTSItem5 ; status line +CTSiptr6 adrl CTSItem6 ; My IP Address +CTSiptr7 adrl CTSItem7 ; "My Ip Address: " + dw 0000 ; end of the line + +CTSItem1 dw 1348 ; id + dw 5,10,15,300 ; bounds + dw statText+$8000 ; type + disabled + adrl CTSText1 + dw 00 ; item value + dw 00 ; item flag + adrl 00 ; end +CTSText1 str 'Address Of CIFS Server To Connect To:' + +CTSItem2 dw 1349 ; id + dw 25,10,38,200 ; bounds + dw editLine + adrl CTSText2 + dw 100 + dw 00 + adrl 00 +CTSText2 str 'example.com' + +CTSItem3 dw 1 + dw 50,10,60,100 + dw buttonItem + adrl But2 + dw 00 + dw 00 + adrl 00 +But2 str 'Connect' + +CTSItem4 dw 2 + dw 50,111,60,210 + dw buttonItem + adrl But3 + dw 00 + dw 00 + adrl 00 +But3 str 'Cancel' + +CTSItem5 dw 1350 ; id + dw 65,10,75,300 ; bounds + dw statText+$8000 ; type + disabled + adrl CTSText3 + dw 00 + dw 00 + adrl 00 +CTSText3 str 'Status: Awaiting Input' +CTSText4 str 'Status: Resolving Hostname ' +inhost ds 101 +CTSText5 str 'Status: Resolution Failure' +CTSText6 str 'Status: Connecting to ' +ascdest ds 20 +CTSText9 str 'Status: Connected, CIFS negotiating' +CTSTextA str 'Status: Connect Failed' +CTSTextB str 'Status: Logging In' + +CTSItem6 dw 1360 ; id + dw 77,120,87,300 ; bounds + dw statText+$8000 + adrl CTSText7 + dw 00 + dw 00 + adrl 00 +CTSText7 str '0.0.0.0' + +CTSItem7 dw 1361 ; id + dw 77,10,87,120 ; bounds + dw statText+$8000 + adrl CTSText8 + dw 00 + dw 00 + adrl 00 +CTSText8 str 'My IP Address:' + +* +* TCPIP Test Output Dialog +* +OurAlert dw 30,120,80,520 ; bounds rect + dw 2374 ; id + db $80 + db $80 + db $80 + db $80 + adrl item1 + adrl item2 + adrl 00 + +item1 dw 1 ; id + dw 25,320,0,0 ; bounds rect for button + dw buttonItem ; type + adrl But1 ; item descriptor + dw 00 ; item value + dw 00 ; item flag + adrl 00 ; item color + +item2 dw 1348 ; id + dw 11,72,200,640 ; bounds rect for message + dw statText+$8000 ; type + disabled +dialogMsg adrl MarinettiGood ; item descriptor + dw 00 ; item value + dw 00 ; item flag + adrl 00 ; item color + +* +* GS/OS Quit Params +* +QParams ds 4 + ds 4 + +*** CIFS / SMB internals only past this point (will eventually be its own linker segment) + +* +* SMB equates (should move into Library/E16.CIFS.Macs.s eventually) +* + +* offsets into SMB header +SMB_offset_tcplength = 1 ; tcp length: all dgram length including header +SMB_offset_proto = 0+4 +SMB_offset_cmd = 4+4 +SMB_offset_ntstatus = 5+4 +SMB_offset_eclass = 5+4 +SMB_offset_flags = 9+4 +SMB_offset_flags2 = 10+4 +SMB_offset_extra = 12+4 +SMB_offset_tid = 24+4 +SMB_offset_pid = 26+4 +SMB_offset_uid = 28+4 +SMB_offset_mid = 30+4 +SMB_header_size = 32+4 ; SMB headers are always 32 bytes long + +* message / commands +NBT_session_msg = 00 +SMB_neg_protocol = $72 +SMB_setup_ANDX = $73 +SMB_treec_ANDX = $75 + +* keepalive +NBT_keepalive_msg = $85 +keepalive_size = 4 + +* SMBTrans2 +SMB_trans2 = $32 +SMB_open2 = 0 +SMB_find_first2 = 1 +SMB_find_next2 = 2 +SMB_query_fs_info = 3 +SMB_query_path_info = 5 +SMB_set_path_info = 6 +SMB_query_file_info = 7 +SMB_set_file_info = 8 +SMB_create_dir = 13 +SMB_find_close2 = $34 +SMB_query_file_all_info = $107 + +* File I/O +SMB_open_ANDX = $2d +SMB_write_ANDX = $2f +SMB_read_ANDX = $2e +SMB_close = $04 + +* SMB_COM +SMB_COM_create_directory = $00 +SMB_COM_delete_directory = $01 +SMB_COM_delete = $06 +SMB_COM_rename = $07 +SMB_COM_query_information_disk = $80 + +* TRANS2 offsets +T2_word_cnt = SMB_header_size +T2_prm_cnt = T2_word_cnt+1 +T2_data_cnt = T2_prm_cnt+2 +T2_maxprm_cnt = T2_data_cnt+2 +T2_maxbuffer = T2_maxprm_cnt+2 +T2_setup_cnt = T2_maxbuffer+2 +T2_sprm_cnt = T2_setup_cnt+10 +T2_sprm_ofs = T2_sprm_cnt+2 +T2_sdata_cnt = T2_sprm_ofs+2 +T2_sdata_ofs = T2_sdata_cnd+2 +T2_ssetup_cnt = T2_sdata_ofs+2 +T2_sub_cmd = T2_ssetup_cnt+2 +T2_byte_cnt = T2_sub_cmd+2 + +SMB_proto1 = $53ff ; $ff + 'S' +SMB_proto2 = $424d ; 'MB' + +SMB_max_net_read_size = 16384 +SMB_max_net_write_size = 4096 +SMB_max_transmit_size = 16384 + +CAP_large_files = $00000008 ; 64-bit file sizes and offsets supported +CAP_unicode = $00000004 ; unicode supported + +CIFS_flags1 = $08 ; paths are caseless +CIFS_flags2_unicode = $8001 ; server may return long components in paths in the response - Unicode supported +CIFS_flags2 = $0001 ; server may return long components in paths in the response - ASCII supported + +SMB_connhandles_max = 8 +SMB_filehandles_max = (32*SMB_connhandles_max) + +SMB_objtype_handle = 7 + +* NBT session service packet type codes +SESS_msg = $0 +SESS_req = $81 +SESS_pos_resp = $82 +SESS_neg_resp = $83 +SESS_retarget = $84 +SESS_keepalive = $85 + +SMB_maxpath = 4096 + +* SMB error codes +SMB_success = 0 +SMB_error = $ffff ; -1 +SMB_bad_protocol = $fffe ; -2 +SMB_bad_command = $fffd ; -3 +SMB_proto_fail = $fffc ; -4 +SMB_not_user = $fffb ; -5 +SMB_bad_keylen = $fffa ; -6 +SMB_bad_datalen = $fff9 ; -7 +SMB_bad_logindata = $fff8 ; -8 + +* SMB file open function +SMB_of_open = 1 +SMB_of_truncate = 2 +SMB_of_create = 16 + +* FileSearch +SMB_srch_readonly = 1 +SMB_srch_hidden = 2 +SMB_srch_system = 4 +SMB_srch_volume = 8 +SMB_srch_directory = 16 +SMB_srch_archive = 32 + +* SMB file access modes +SMB_open_reading = 0 +SMB_open_writing = 1 +SMB_open_readwrite = 2 +SMB_open_compatible = 0 +SMB_deny_readwrite = $10 +SMB_deny_write = $20 +SMB_deny_read = $30 +SMB_deny_none = $40 + +* +* SMB variable space +* + +* SMB DP variables +SMB_sessid = 8 +SMB_tmp1 = 12 +SMB_tmp2 = 14 + +* SMB session information +* TODO dynamically allocate these - see SMB_Init +SMB_sess_begin +SMB_sess_ipid dw 0 ; Marinetti IPID +SMB_sess_tid dw 0 ; SMB TID +SMB_sess_pid dw $dead ; SMB PID +SMB_sess_uid dw 0 ; SMB UID +SMB_sess_mid dw $0001 ; SMB MID +SMB_sess_skey dw 0,0 ; sKey +SMB_sess_caps dw 0,0 ; capabilities +SMB_sess_maxbuffer dw 0,0 ; max buffer +SMB_sess_seclvl dw 0 ; server security level +SMB_sess_maxmpx dw 0 ; server max pending outstanding requests +SMB_sess_maxvcs dw 0 ; server max virtual circuits +SMB_sess_challenge_used dw 0 ; challenge Used? +SMB_sess_challenge dw 0,0,0,0 ; challenge +SMB_sess_domain ds 32 ; sloppy 32 byte buffer to hold SMB domain + +* Strings +SMB_dialect asc 02'NT LM 0.12'00 ; the only dialect we're gonna speak + +* SMB packet staging area +* TODO these will probably be dynamically allocated too? +* also SMB_max_transmit size should go up to 65535 and use an allocated bank like Marinetti does +SMB_staging_brk brk 00 ; jump here to crash somewhere where you can easily inspect the generated SMB datagram +SMB_staging ds SMB_max_transmit_size+2 +SMB_input ds SMB_max_net_read_size ; TODO Memory Manage this eh + +* +* SMB Subroutines +* + +* SMB_Init - Call me to tell me about your Marinetti IPID and get a session handle returned for future SMB calls +* Arguments: +* Marinetti IPID (one word, on stack) +* Returns: +* SMB session handle (two words, on stack) +* Carry flag set if error +* TODO: make this support multiple sessions in the future +SMB_Init plx ; return address + pla + sta SMB_sess_ipid + PushLong #SMB_sess_begin + phx ; saved return address + clc + rts + +* SMB_Negotiate - Call me when you've opened a TCPIP connection and want to perform Negotiate Protocol Request +* Arguments: +* SMB session handle (two words, on stack) +* Things I return on stack: +* Carry flag set if error +SMB_Negotiate plx ; return address + PullLong SMB_sessid + phx ; saved return address + + PushWord #SMB_neg_protocol ; command + PushWord #CIFS_flags1 ; flags1 + PushWord #CIFS_flags2 ; flags2 + jsr _InitSMBHeader ; make an SMB header with this information + + sep $30 + mx %11 + ldy #0 + ldx #0 +dialect_copy lda SMB_dialect,x ; 8-bit copy of dialect string into SMB staging area + beq dialect_done + sta SMB_staging+SMB_header_size+3,x + inx + iny + bra dialect_copy +dialect_done sta SMB_staging+SMB_header_size+3,x ; do write the trailing zero + inx + iny + rep $30 + mx %00 + + tya + sta SMB_staging+SMB_header_size+1 ; save byte count + + clc + adc #SMB_header_size+3 + pha ; 'length' parameter for _SMB_Send + dec + dec + dec + dec + xba + sta SMB_staging+SMB_offset_tcplength+1 ; save length for naked-TCP dgram + + jsr _SMB_Send + clc + rts + +* SMB_Negotiate_Poll - Call me until I tell you to stop, to receive and complete SMB negotiation +* Arguments: +* SMB session handle (two words, on stock) +* Things I return on stack: +* Negotiation status (word) +* $0000 - Negotiation proceeding +* $0001 - Negotiation finished +* $0002 - Negotiation failed +* Carry flag set means you can stop calling me +SMB_Negotiate_Poll + plx ; our return address + PullLong SMB_sessid ; your smb sessid + phx + + PushWord #0000 ; space for result + ldy #SMB_sess_ipid-SMB_sess_begin + lda [SMB_sessid],y + pha ; push Marinetti IPID for this SMB_sessid + PushLong #statbuf + _TCPIPStatusTCP ; see if marinetti has anything for us + pla + cmp #terrNOCONNECTION + beq nf_trampoline + cmp #terrBADIPID + beq nf_trampoline + lda statbuf+8 ; get recvq size, low word + cmp #0000 ; yeah i know. for clarity. + beq np_trampoline ; poll us again later, marinetti got nothing + + PushWord #0000 ; space for result + ldy #SMB_sess_ipid-SMB_sess_begin + lda [SMB_sessid],y + pha ; push Marinetti IPID for this SMB_sessid + PushWord #0000 ; bufftype: static pre-allocated buffer + PushLong #SMB_input ; where it's all goin + PushLong #SMB_max_net_read_size + PushLong #readbuf + _TCPIPReadTCP + pla + cmp #terrNOCONNECTION + beq nf_trampoline + cmp #terrBADIPID + beq nf_trampoline + + jsr _SMB_Check ; do basic check to make sure we received SMB data + bcs np_trampoline ; if not, wait for them to send again i guess + + lda SMB_input+SMB_offset_cmd + cmp #SMB_neg_protocol + bne np_trampoline ; punt if not protocol negotiation reply + + lda SMB_input+SMB_offset_eclass + cmp #0000 + bne nf_trampoline ; they returned an error, kbye + + lda SMB_input+SMB_header_size + and #$ff + cmp #17 + bne nf_trampoline ; they should always return 17 words + + lda SMB_input+SMB_header_size + xba + and #$ff + cmp #00 + bne nf_trampoline ; they should always select dialect 0 + + bra nft_far +nf_trampoline jmp nego_failed +np_trampoline jmp nego_proceeding +nft_far + + lda SMB_input+SMB_header_size+2 + and #$01 + ldy #SMB_sess_seclvl-SMB_sess_begin + sta [SMB_sessid],y ; save session security level (1=user level, 0=share level) + + lda SMB_input+SMB_header_size+3 + and #$ff + ldy #SMB_sess_maxmpx-SMB_sess_begin + sta [SMB_sessid],y ; save session MaxMPX + + lda SMB_input+SMB_header_size+5 + and #$ff + ldy #SMB_sess_maxvcs-SMB_sess_begin + sta [SMB_sessid],y ; save session MaxVCS + + lda SMB_input+SMB_header_size+7 + ldy #SMB_sess_maxbuffer-SMB_sess_begin + sta [SMB_sessid],y ; save session maxbuffer + + lda SMB_input+SMB_header_size+15 + ldy #SMB_sess_skey-SMB_sess_begin + sta [SMB_sessid],y ; save skey + + lda SMB_input+SMB_header_size+19 + ldy #SMB_sess_caps-SMB_sess_begin + sta [SMB_sessid],y + iny + iny + lda SMB_input+SMB_header_size+21 + sta [SMB_sessid],y ; save server capabilities + + ; TODO serverTime + + lda SMB_input+SMB_header_size+33 + and #$ff + cmp #8 + bne challenge_used + cmp #0 + bne nego_failed ; should be either 8 or zero + lda #$0000 + ldy #SMB_sess_challenge_used + sta [SMB_sessid],y + bra getdomain + +challenge_used lda #$0001 + ldy #SMB_sess_challenge_used + sta [SMB_sessid],y + + lda SMB_input+SMB_header_size+36 + ldy #SMB_sess_challenge-SMB_sess_begin + sta [SMB_sessid],y + iny + iny + lda SMB_input+SMB_header_size+38 + sta [SMB_sessid],y + iny + iny + lda SMB_input+SMB_header_size+40 + sta [SMB_sessid],y + iny + iny + lda SMB_input+SMB_header_size+42 + sta [SMB_sessid],y ; save 8-byte challenge + +getdomain ldy #SMB_sess_domain-SMB_sess_begin + ldx #00 +gdloop lda SMB_input+SMB_header_size+50,x + and #$ff00 + xba + cmp #0000 + beq eod + sta [SMB_sessid],y ; if this looks off to you, see how + iny ; the domain name is actually encoded + inx ; W\00O\00R\00K\00G\00R\00O\00U\00P\00 + inx + bra gdloop + +eod sta [SMB_sessid],y ; save terminating zero + +nego_finished plx ; our return address + PushWord #0001 ; finished! + phx + sec + rts + +nego_failed plx ; our return address + PushWord #0002 ; failure + phx + sec + rts + +nego_proceeding plx ; our return address + PushWord #0000 ; in progress + phx + clc + rts + +* +* SMB internal subroutines +* + +* _SMB_Check - Check to see if TCP received data is SMB +_SMB_Check lda SMB_input + cmp #SMB_proto1 + bne check_inv + lda SMB_staging+2 + cmp #SMB_proto2 + bne check_inv ; starts with 'SMB'\ff + rts +check_inv sec + rts + +* _SMB_Send - Send the SMB datagram staging area out to Marinetti +* Arguments: +* length (word, pushed on stack first) +_SMB_Send plx ; save return address + PullWord SMB_tmp1 + phx ; restore return address + lda #0 + sta SMB_tmp2 + PushWord #0000 + ldy #SMB_sess_ipid-SMB_sess_begin + lda [SMB_sessid],y + pha ; IPID for Marinetti + PushLong #SMB_staging + PushLong SMB_tmp1 ; length + PushWord #0001 ; Samba sets PSH, so will I + PushWord #0000 + _TCPIPWriteTCP + pla + rts + +* _InitSMBHeader - Zero-out old SMB datagram data and start with some fresh header values +* Arguments: +* Command (word, pushed on stack first) +* Flags1 (word, pushed on stack second) +* Flags2 (word, pushed on stack third) +* Session Handle (already stored in DP SMB_sessid) +* Things I return on stack: +* Carry flag set if error +_InitSMBHeader ldx #00 + lda #00 +zero_loop sta SMB_staging,x ; loop to zero-out any old data from SMB header staging place + inx + inx + cpx #SMB_max_transmit_size + blt zero_loop + + lda #SMB_proto1 + sta SMB_staging+SMB_offset_proto + lda #SMB_proto2 + sta SMB_staging+SMB_offset_proto+2 ; $FF + 'SMB' at start of header + + ldy #SMB_sess_tid-SMB_sess_begin + lda [SMB_sessid],y + sta SMB_staging+SMB_offset_tid ; set session TID + + ldy #SMB_sess_pid-SMB_sess_begin + lda [SMB_sessid],y + sta SMB_staging+SMB_offset_pid ; set session PID + + ldy #SMB_sess_uid-SMB_sess_begin + lda [SMB_sessid],y + sta SMB_staging+SMB_offset_uid ; set session UID + + ldy #SMB_sess_mid-SMB_sess_begin + lda [SMB_sessid],y + sta SMB_staging+SMB_offset_mid ; set session MID + + plx ; save return address + pla ; flags2 (word) + sta SMB_staging+SMB_offset_flags2 ; set Flags2 + + pla ; flags1 (word, but written as byte) + ora SMB_staging+SMB_offset_flags + sta SMB_staging+SMB_offset_flags ; write one-byte value where it goes + + pla ; command (word, but written as byte) + ora SMB_staging+SMB_offset_cmd + sta SMB_staging+SMB_offset_cmd ; write one-byte value where it goes + + phx + rts diff --git a/src/_FileInformation.txt b/src/_FileInformation.txt new file mode 100644 index 0000000..12ca29b --- /dev/null +++ b/src/_FileInformation.txt @@ -0,0 +1,4 @@ +GSTEST2=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) +"GSTEST2=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) +GSTEST2DS16=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) +smbdemo=Type(B3),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) diff --git a/src/smbdemo b/src/smbdemo new file mode 100644 index 0000000..25cbb74 Binary files /dev/null and b/src/smbdemo differ diff --git a/src/smbdemo_Output.txt b/src/smbdemo_Output.txt new file mode 100644 index 0000000..635d771 --- /dev/null +++ b/src/smbdemo_Output.txt @@ -0,0 +1,6015 @@ +------+---------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code +------+---------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 | 1 SMBDEMO.S 1 | Comment | 11 | | 0 | 00/0000 | * + 2 | 1 SMBDEMO.S 2 | Comment | 11 | | 0 | 00/0000 | * Marinetti / SMB2 Test, Mark II + 3 | 1 SMBDEMO.S 3 | Comment | 11 | | 0 | 00/0000 | * + 4 | 1 SMBDEMO.S 4 | Comment | 11 | | 0 | 00/0000 | * CHANGELOG + 5 | 1 SMBDEMO.S 5 | Comment | 11 | | 0 | 00/0000 | * Thursday, April 30, 2015 - Restarted effort, ported code from ORCA/M to Merlin32 and debugged Merlin32 environment + 6 | 1 SMBDEMO.S 6 | Comment | 11 | | 0 | 00/0000 | * Friday, May 1, 2015 - Ported more code to Merlin32, set up Merlin32 equates + 7 | 1 SMBDEMO.S 7 | Comment | 11 | | 0 | 00/0000 | * Saturday, May 2, 2015 - Formatting fixes, refactoring, rewritten SMB Negotiation code + 8 | 1 SMBDEMO.S 8 | Comment | 11 | | 0 | 00/0000 | * + 9 | 1 SMBDEMO.S 9 | Comment | 11 | | 0 | 00/0000 | * REFERENCES + 10 | 1 SMBDEMO.S 10 | Comment | 11 | | 0 | 00/0000 | * smb.c / smb.h from libOGC + 11 | 1 SMBDEMO.S 11 | Comment | 11 | | 0 | 00/0000 | * http://www.ubiqx.org/cifs/SMB.html + 12 | 1 SMBDEMO.S 12 | Comment | 11 | | 0 | 00/0000 | * + 13 | 1 SMBDEMO.S 13 | Empty | 11 | | 0 | 00/0000 | + 14 | 1 SMBDEMO.S 14 | Directive | 11 | | 0 | 00/0000 | rel + 15 | 1 SMBDEMO.S 15 | Directive | 11 | | 0 | 00/0000 | dsk smbdemo.l + 16 | 1 SMBDEMO.S 16 | Empty | 11 | | 0 | 00/0000 | + 17 | 1 SMBDEMO.S 17 | Comment | 11 | | 0 | 00/0000 | * Macros (mostly from Merlin32 dist) + 18 | 1 SMBDEMO.S 18 | Directive | 11 | | 0 | 00/0000 | use GsOs.Macs + 19 | 1 SMBDEMO.S 19 | Directive | 11 | | 0 | 00/0000 | use Util.Macs + 20 | 1 SMBDEMO.S 20 | Directive | 11 | | 0 | 00/0000 | use Misc.Macs + 21 | 1 SMBDEMO.S 21 | Directive | 11 | | 0 | 00/0000 | use Locator.Macs + 22 | 1 SMBDEMO.S 22 | Directive | 11 | | 0 | 00/0000 | use Mem.Macs + 23 | 1 SMBDEMO.S 23 | Directive | 11 | | 0 | 00/0000 | use Qd.Macs + 24 | 1 SMBDEMO.S 24 | Directive | 11 | | 0 | 00/0000 | use QdAux.Macs + 25 | 1 SMBDEMO.S 25 | Directive | 11 | | 0 | 00/0000 | use Event.Macs + 26 | 1 SMBDEMO.S 26 | Directive | 11 | | 0 | 00/0000 | use Window.Macs + 27 | 1 SMBDEMO.S 27 | Directive | 11 | | 0 | 00/0000 | use Ctl.Macs + 28 | 1 SMBDEMO.S 28 | Directive | 11 | | 0 | 00/0000 | use Menu.Macs + 29 | 1 SMBDEMO.S 29 | Directive | 11 | | 0 | 00/0000 | use Desk.Macs + 30 | 1 SMBDEMO.S 30 | Directive | 11 | | 0 | 00/0000 | use Sound.Macs + 31 | 1 SMBDEMO.S 31 | Directive | 11 | | 0 | 00/0000 | use Line.Macs + 32 | 1 SMBDEMO.S 32 | Directive | 11 | | 0 | 00/0000 | use Dialog.Macs + 33 | 1 SMBDEMO.S 33 | Directive | 11 | | 0 | 00/0000 | use TCPIP.Macs ; from MOSP CVS + 34 | 1 SMBDEMO.S 34 | Empty | 11 | | 0 | 00/0000 | + 35 | 1 SMBDEMO.S 35 | Comment | 11 | | 0 | 00/0000 | * Equates (ripped off from Merlin 16) + 36 | 1 SMBDEMO.S 36 | Directive | 11 | | 0 | 00/0000 | use E16.Dialog.Macs + 37 | 1 SMBDEMO.S 37 | Directive | 11 | | 0 | 00/0000 | use E16.GsOs.Macs + 38 | 1 SMBDEMO.S 38 | Comment | 11 | | 0 | 00/0000 | * Equates (from MOSP/Tools/Orca.M/e16.tcpip) + 39 | 1 SMBDEMO.S 39 | Directive | 11 | | 0 | 00/0000 | use E16.TCPIP.Macs + 40 | 1 SMBDEMO.S 40 | Empty | 11 | | 0 | 00/0000 | + 41 | 1 SMBDEMO.S 41 | Comment | 11 | | 0 | 00/0000 | *----------------------------------------------------------------------------- + 42 | 1 SMBDEMO.S 42 | Comment | 11 | | 0 | 00/0000 | * DP variables and local equates + 43 | 1 SMBDEMO.S 43 | Comment | 11 | | 0 | 00/0000 | *----------------------------------------------------------------------------- + 44 | 1 SMBDEMO.S 44 | Empty | 11 | | 0 | 00/0000 | + 45 | 1 SMBDEMO.S 45 | Comment | 11 | | 0 | 00/0000 | * DUM $000000 is broken on merlin32, if you want LDA (DP) $A5 opcode, write one-byte equates instead + 46 | 1 SMBDEMO.S 46 | Comment | 11 | | 0 | 00/0000 | * cause merlin32 will always give you $AD (LDAL) + 47 | 1 SMBDEMO.S 47 | Comment | 11 | | 0 | 00/0000 | * dum 0 + 48 | 1 SMBDEMO.S 48 | Comment | 11 | | 0 | 00/0000 | *AppMMID + 49 | 1 SMBDEMO.S 49 | Comment | 11 | | 0 | 00/0000 | * ds 2,0 ; Memory Manager ID + 50 | 1 SMBDEMO.S 50 | Comment | 11 | | 0 | 00/0000 | *HndlRef + 51 | 1 SMBDEMO.S 51 | Comment | 11 | | 0 | 00/0000 | * ds 2,0 ; For Dereferencing MM Handle + 52 | 1 SMBDEMO.S 52 | Comment | 11 | | 0 | 00/0000 | *DPBase + 53 | 1 SMBDEMO.S 53 | Comment | 11 | | 0 | 00/0000 | * ds 1,0 ; Deref'd handle + 54 | 1 SMBDEMO.S 54 | Comment | 11 | | 0 | 00/0000 | * dend + 55 | 1 SMBDEMO.S 55 | Empty | 11 | | 0 | 00/0000 | + 56 | 1 SMBDEMO.S 56 | Comment | 11 | | 0 | 00/0000 | * workaround: do this instead for DP variables + 57 | 1 SMBDEMO.S 57 | Equivalence | 11 | | 0 | 00/0000 | AppMMID = $0 + 58 | 1 SMBDEMO.S 58 | Equivalence | 11 | | 0 | 00/0000 | HndlRef = $2 + 59 | 1 SMBDEMO.S 59 | Equivalence | 11 | | 0 | 00/0000 | DPBase = $4 + 60 | 1 SMBDEMO.S 60 | Empty | 11 | | 0 | 00/0000 | + 61 | 1 SMBDEMO.S 61 | Comment | 11 | | 0 | 00/0000 | *----------------------------------------------------------------------------- + 62 | 1 SMBDEMO.S 62 | Comment | 11 | | 0 | 00/0000 | * GS/OS Program Entry Point + 63 | 1 SMBDEMO.S 63 | Comment | 11 | | 0 | 00/0000 | *----------------------------------------------------------------------------- + 64 | 1 SMBDEMO.S 64 | Empty | 11 | | 0 | 00/0000 | + 65 | 1 SMBDEMO.S 65 | Directive | 00 | | 0 | 00/0000 | Entry mx %00 + 66 | 1 SMBDEMO.S 66 | Code | 00 | | 1 | 00/0000 : 4B | phk + 67 | 1 SMBDEMO.S 67 | Code | 00 | | 1 | 00/0001 : AB | plb + 68 | 1 SMBDEMO.S 68 | Code | 00 | | 3 | 00/0002 : 82 75 01 | brl Main + 69 | 1 SMBDEMO.S 69 | Empty | 00 | | 0 | 00/0005 | + 70 | 1 SMBDEMO.S 70 | Comment | 00 | | 0 | 00/0005 | * + 71 | 1 SMBDEMO.S 71 | Comment | 00 | | 0 | 00/0005 | * Check for toolbox errors + 72 | 1 SMBDEMO.S 72 | Comment | 00 | | 0 | 00/0005 | * too-simple error handler + 73 | 1 SMBDEMO.S 73 | Comment | 00 | | 0 | 00/0005 | * + 74 | 1 SMBDEMO.S 74 | Code | 00 | | 2 | 00/0005 : B0 01 | CheckError bcs SysDeath + 75 | 1 SMBDEMO.S 75 | Code | 00 | | 1 | 00/0007 : 60 | rts + 76 | 1 SMBDEMO.S 76 | Empty | 00 | | 0 | 00/0008 | + 77 | 1 SMBDEMO.S 77 | Code | 00 | | 1 | 00/0008 : 48 | SysDeath pha + 78 | 1 SMBDEMO.S 78 | Macro | 00 | | 0 | 00/0009 | PushLong #0000 + 82 | 1 SMBDEMO.S 78 | Code | 00 | | 3 | 00/0009 : F4 00 00 | PEA #^#0000 + 89 | 1 SMBDEMO.S 78 | Code | 00 | | 3 | 00/000C : F4 00 00 | PEA #0000 + 92 | 1 SMBDEMO.S 79 | Macro | 00 | | 0 | 00/000F | _SysFailMgr + 94 | 1 SMBDEMO.S 79 | Code | 00 | | 3 | 00/000F : A2 03 15 | LDX #$1503 ; load tool call # + 95 | 1 SMBDEMO.S 79 | Code | 00 | | 4 | 00/0012 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 96 | 1 SMBDEMO.S 80 | Empty | 00 | | 0 | 00/0016 | + 97 | 1 SMBDEMO.S 81 | Comment | 00 | | 0 | 00/0016 | * + 98 | 1 SMBDEMO.S 82 | Comment | 00 | | 0 | 00/0016 | * StartUpTools - start up the various toolsets + 99 | 1 SMBDEMO.S 83 | Comment | 00 | | 0 | 00/0016 | * + 100 | 1 SMBDEMO.S 84 | Macro | 00 | | 0 | 00/0016 | StartUpTools _TLStartUp + 102 | 1 SMBDEMO.S 84 | Code | 00 | | 3 | 00/0016 : A2 01 02 | LDX #$201 ; load tool call # + 103 | 1 SMBDEMO.S 84 | Code | 00 | | 4 | 00/0019 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 104 | 1 SMBDEMO.S 85 | Code | 00 | | 1 | 00/001D : 48 | pha + 105 | 1 SMBDEMO.S 86 | Macro | 00 | | 0 | 00/001E | _MMStartUp + 107 | 1 SMBDEMO.S 86 | Code | 00 | | 3 | 00/001E : A2 02 02 | LDX #$202 ; load tool call # + 108 | 1 SMBDEMO.S 86 | Code | 00 | | 4 | 00/0021 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 109 | 1 SMBDEMO.S 87 | Code | 00 | 2 | 3 | 00/0025 : 20 05 00 | jsr CheckError + 110 | 1 SMBDEMO.S 88 | Macro | 00 | | 0 | 00/0028 | PullWord {$0} + 111 | 1 SMBDEMO.S 88 | Code | 00 | | 1 | 00/0028 : 68 | PLA + 113 | 1 SMBDEMO.S 88 | Code | 00 | | 2 | 00/0029 : 85 00 | STA {$0} + 117 | 1 SMBDEMO.S 89 | Macro | 00 | | 0 | 00/002B | _MTStartUp + 119 | 1 SMBDEMO.S 89 | Code | 00 | | 3 | 00/002B : A2 03 02 | LDX #$203 ; load tool call # + 120 | 1 SMBDEMO.S 89 | Code | 00 | | 4 | 00/002E : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 121 | 1 SMBDEMO.S 90 | Empty | 00 | | 0 | 00/0032 | + 122 | 1 SMBDEMO.S 91 | Code | 00 | | 1 | 00/0032 : 48 | pha + 123 | 1 SMBDEMO.S 92 | Code | 00 | | 1 | 00/0033 : 48 | pha + 124 | 1 SMBDEMO.S 93 | Macro | 00 | | 0 | 00/0034 | PushLong #$800 ; 8 pages of DP space + 128 | 1 SMBDEMO.S 93 | Code | 00 | | 3 | 00/0034 : F4 00 00 | PEA #^#$800 + 135 | 1 SMBDEMO.S 93 | Code | 00 | | 3 | 00/0037 : F4 00 08 | PEA #$800 + 138 | 1 SMBDEMO.S 94 | Macro | 00 | | 0 | 00/003A | PushWord {$0} + 143 | 1 SMBDEMO.S 94 | Code | 00 | | 2 | 00/003A : A5 00 | LDA {$0} + 144 | 1 SMBDEMO.S 94 | Code | 00 | | 1 | 00/003C : 48 | PHA + 146 | 1 SMBDEMO.S 95 | Macro | 00 | | 0 | 00/003D | PushWord #$C005 ; Fixed, Page-Aligned, Locked, Unpurgeable + 148 | 1 SMBDEMO.S 95 | Code | 00 | | 3 | 00/003D : F4 05 C0 | PEA #$C005 + 151 | 1 SMBDEMO.S 96 | Macro | 00 | | 0 | 00/0040 | PushLong #$000000 ; in Bank $00, $0000 + 155 | 1 SMBDEMO.S 96 | Code | 00 | | 3 | 00/0040 : F4 00 00 | PEA #^#$000000 + 162 | 1 SMBDEMO.S 96 | Code | 00 | | 3 | 00/0043 : F4 00 00 | PEA #$000000 + 165 | 1 SMBDEMO.S 97 | Macro | 00 | | 0 | 00/0046 | _NewHandle + 167 | 1 SMBDEMO.S 97 | Code | 00 | | 3 | 00/0046 : A2 02 09 | LDX #$902 ; load tool call # + 168 | 1 SMBDEMO.S 97 | Code | 00 | | 4 | 00/0049 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 169 | 1 SMBDEMO.S 98 | Code | 00 | 2 | 3 | 00/004D : 20 05 00 | jsr CheckError + 170 | 1 SMBDEMO.S 99 | Macro | 00 | | 0 | 00/0050 | PullLong {$2} + 173 | 1 SMBDEMO.S 99 | Code | 00 | | 1 | 00/0050 : 68 | PLA + 175 | 1 SMBDEMO.S 99 | Code | 00 | | 2 | 00/0051 : 85 02 | STA {$2} + 180 | 1 SMBDEMO.S 99 | Code | 00 | | 1 | 00/0053 : 68 | PLA + 182 | 1 SMBDEMO.S 99 | Code | 00 | | 2 | 00/0054 : 85 04 | STA {$2}+2 + 188 | 1 SMBDEMO.S 100 | Code | 00 | | 2 | 00/0056 : A7 02 | lda [{$2}] + 189 | 1 SMBDEMO.S 101 | Code | 00 | | 2 | 00/0058 : 85 04 | sta {$4} + 190 | 1 SMBDEMO.S 102 | Empty | 00 | | 0 | 00/005A | + 191 | 1 SMBDEMO.S 103 | Code | 00 | | 1 | 00/005A : 48 | pha ; save dp pointer for later + 192 | 1 SMBDEMO.S 104 | Code | 00 | | 1 | 00/005B : 48 | pha + 193 | 1 SMBDEMO.S 105 | Macro | 00 | | 0 | 00/005C | PushWord #$0080 ; Screen Mode ($0000 = 320, $0080 = 640) + 195 | 1 SMBDEMO.S 105 | Code | 00 | | 3 | 00/005C : F4 80 00 | PEA #$0080 + 198 | 1 SMBDEMO.S 106 | Macro | 00 | | 0 | 00/005F | PushWord #$00A0 ; Pixel Map Size ($0050 = 320, $00A0 = 640) + 200 | 1 SMBDEMO.S 106 | Code | 00 | | 3 | 00/005F : F4 A0 00 | PEA #$00A0 + 203 | 1 SMBDEMO.S 107 | Macro | 00 | | 0 | 00/0062 | PushWord {$0} + 208 | 1 SMBDEMO.S 107 | Code | 00 | | 2 | 00/0062 : A5 00 | LDA {$0} + 209 | 1 SMBDEMO.S 107 | Code | 00 | | 1 | 00/0064 : 48 | PHA + 211 | 1 SMBDEMO.S 108 | Macro | 00 | | 0 | 00/0065 | _QDStartUp + 213 | 1 SMBDEMO.S 108 | Code | 00 | | 3 | 00/0065 : A2 04 02 | LDX #$204 ; load tool call # + 214 | 1 SMBDEMO.S 108 | Code | 00 | | 4 | 00/0068 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 215 | 1 SMBDEMO.S 109 | Code | 00 | 2 | 3 | 00/006C : 20 05 00 | jsr CheckError + 216 | 1 SMBDEMO.S 110 | Empty | 00 | | 0 | 00/006F | + 217 | 1 SMBDEMO.S 111 | Code | 00 | | 1 | 00/006F : 68 | pla ; saved dp pointer + 218 | 1 SMBDEMO.S 112 | Code | 00 | | 1 | 00/0070 : 18 | clc + 219 | 1 SMBDEMO.S 113 | Code | 00 | | 3 | 00/0071 : 69 00 03 | adc #$300 + 220 | 1 SMBDEMO.S 114 | Code | 00 | | 1 | 00/0074 : 48 | pha ; save dp pointer for later + 221 | 1 SMBDEMO.S 115 | Code | 00 | | 1 | 00/0075 : 48 | pha + 222 | 1 SMBDEMO.S 116 | Macro | 00 | | 0 | 00/0076 | PushWord #20 ; Event Queue size + 224 | 1 SMBDEMO.S 116 | Code | 00 | | 3 | 00/0076 : F4 14 00 | PEA #20 + 227 | 1 SMBDEMO.S 117 | Macro | 00 | | 0 | 00/0079 | PushWord #0 ; Min X clamp + 229 | 1 SMBDEMO.S 117 | Code | 00 | | 3 | 00/0079 : F4 00 00 | PEA #0 + 232 | 1 SMBDEMO.S 118 | Macro | 00 | | 0 | 00/007C | PushWord #640 ; Max X clamp + 234 | 1 SMBDEMO.S 118 | Code | 00 | | 3 | 00/007C : F4 80 02 | PEA #640 + 237 | 1 SMBDEMO.S 119 | Macro | 00 | | 0 | 00/007F | PushWord #0 ; Min Y clamp + 239 | 1 SMBDEMO.S 119 | Code | 00 | | 3 | 00/007F : F4 00 00 | PEA #0 + 242 | 1 SMBDEMO.S 120 | Macro | 00 | | 0 | 00/0082 | PushWord #200 ; Max Y clamp + 244 | 1 SMBDEMO.S 120 | Code | 00 | | 3 | 00/0082 : F4 C8 00 | PEA #200 + 247 | 1 SMBDEMO.S 121 | Macro | 00 | | 0 | 00/0085 | PushWord {$0} + 252 | 1 SMBDEMO.S 121 | Code | 00 | | 2 | 00/0085 : A5 00 | LDA {$0} + 253 | 1 SMBDEMO.S 121 | Code | 00 | | 1 | 00/0087 : 48 | PHA + 255 | 1 SMBDEMO.S 122 | Macro | 00 | | 0 | 00/0088 | _EMStartUp + 257 | 1 SMBDEMO.S 122 | Code | 00 | | 3 | 00/0088 : A2 06 02 | LDX #$206 ; load tool call # + 258 | 1 SMBDEMO.S 122 | Code | 00 | | 4 | 00/008B : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 259 | 1 SMBDEMO.S 123 | Code | 00 | 2 | 3 | 00/008F : 20 05 00 | jsr CheckError + 260 | 1 SMBDEMO.S 124 | Empty | 00 | | 0 | 00/0092 | + 261 | 1 SMBDEMO.S 125 | Macro | 00 | | 0 | 00/0092 | PushWord #0 + 263 | 1 SMBDEMO.S 125 | Code | 00 | | 3 | 00/0092 : F4 00 00 | PEA #0 + 266 | 1 SMBDEMO.S 126 | Macro | 00 | | 0 | 00/0095 | _SetBackColor + 268 | 1 SMBDEMO.S 126 | Code | 00 | | 3 | 00/0095 : A2 04 A2 | LDX #$A204 ; load tool call # + 269 | 1 SMBDEMO.S 126 | Code | 00 | | 4 | 00/0098 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 270 | 1 SMBDEMO.S 127 | Empty | 00 | | 0 | 00/009C | + 271 | 1 SMBDEMO.S 128 | Macro | 00 | | 0 | 00/009C | PushWord #3 + 273 | 1 SMBDEMO.S 128 | Code | 00 | | 3 | 00/009C : F4 03 00 | PEA #3 + 276 | 1 SMBDEMO.S 129 | Macro | 00 | | 0 | 00/009F | _SetForeColor + 278 | 1 SMBDEMO.S 129 | Code | 00 | | 3 | 00/009F : A2 04 A0 | LDX #$A004 ; load tool call # + 279 | 1 SMBDEMO.S 129 | Code | 00 | | 4 | 00/00A2 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 280 | 1 SMBDEMO.S 130 | Empty | 00 | | 0 | 00/00A6 | + 281 | 1 SMBDEMO.S 131 | Macro | 00 | | 0 | 00/00A6 | PushWord #50 ; X position + 283 | 1 SMBDEMO.S 131 | Code | 00 | | 3 | 00/00A6 : F4 32 00 | PEA #50 + 286 | 1 SMBDEMO.S 132 | Macro | 00 | | 0 | 00/00A9 | PushWord #85 ; Y position + 288 | 1 SMBDEMO.S 132 | Code | 00 | | 3 | 00/00A9 : F4 55 00 | PEA #85 + 291 | 1 SMBDEMO.S 133 | Macro | 00 | | 0 | 00/00AC | _MoveTo + 293 | 1 SMBDEMO.S 133 | Code | 00 | | 3 | 00/00AC : A2 04 3A | LDX #$3A04 ; load tool call # + 294 | 1 SMBDEMO.S 133 | Code | 00 | | 4 | 00/00AF : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 295 | 1 SMBDEMO.S 134 | Empty | 00 | | 0 | 00/00B3 | + 296 | 1 SMBDEMO.S 135 | Macro | 00 | | 0 | 00/00B3 | PushLong #OneMoment + 300 | 1 SMBDEMO.S 135 | Code | 00 | 1 >>16 | 3 | 00/00B3 : F4 00 00 | PEA #^#OneMoment + 307 | 1 SMBDEMO.S 135 | Code | 00 | 2 | 3 | 00/00B6 : F4 49 09 | PEA #OneMoment + 310 | 1 SMBDEMO.S 136 | Macro | 00 | | 0 | 00/00B9 | _DrawCString + 312 | 1 SMBDEMO.S 136 | Code | 00 | | 3 | 00/00B9 : A2 04 A6 | LDX #$A604 ; load tool call # + 313 | 1 SMBDEMO.S 136 | Code | 00 | | 4 | 00/00BC : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 314 | 1 SMBDEMO.S 137 | Empty | 00 | | 0 | 00/00C0 | + 315 | 1 SMBDEMO.S 138 | Macro | 00 | | 0 | 00/00C0 | PushLong #ToolList + 319 | 1 SMBDEMO.S 138 | Code | 00 | 1 >>16 | 3 | 00/00C0 : F4 00 00 | PEA #^#ToolList + 326 | 1 SMBDEMO.S 138 | Code | 00 | 2 | 3 | 00/00C3 : F4 00 08 | PEA #ToolList + 329 | 1 SMBDEMO.S 139 | Macro | 00 | | 0 | 00/00C6 | _LoadTools + 331 | 1 SMBDEMO.S 139 | Code | 00 | | 3 | 00/00C6 : A2 01 0E | LDX #$E01 ; load tool call # + 332 | 1 SMBDEMO.S 139 | Code | 00 | | 4 | 00/00C9 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 333 | 1 SMBDEMO.S 140 | Code | 00 | 2 | 3 | 00/00CD : 20 05 00 | jsr CheckError + 334 | 1 SMBDEMO.S 141 | Empty | 00 | | 0 | 00/00D0 | + 335 | 1 SMBDEMO.S 142 | Macro | 00 | | 0 | 00/00D0 | PushWord {$0} + 340 | 1 SMBDEMO.S 142 | Code | 00 | | 2 | 00/00D0 : A5 00 | LDA {$0} + 341 | 1 SMBDEMO.S 142 | Code | 00 | | 1 | 00/00D2 : 48 | PHA + 343 | 1 SMBDEMO.S 143 | Macro | 00 | | 0 | 00/00D3 | _WindStartUp + 345 | 1 SMBDEMO.S 143 | Code | 00 | | 3 | 00/00D3 : A2 0E 02 | LDX #$20E ; load tool call # + 346 | 1 SMBDEMO.S 143 | Code | 00 | | 4 | 00/00D6 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 347 | 1 SMBDEMO.S 144 | Code | 00 | 2 | 3 | 00/00DA : 20 05 00 | jsr CheckError + 348 | 1 SMBDEMO.S 145 | Empty | 00 | | 0 | 00/00DD | + 349 | 1 SMBDEMO.S 146 | Code | 00 | | 1 | 00/00DD : 68 | pla ; saved dp pointer + 350 | 1 SMBDEMO.S 147 | Code | 00 | | 1 | 00/00DE : 18 | clc + 351 | 1 SMBDEMO.S 148 | Code | 00 | | 3 | 00/00DF : 69 00 01 | adc #$100 + 352 | 1 SMBDEMO.S 149 | Code | 00 | | 1 | 00/00E2 : 48 | pha ; save it for later + 353 | 1 SMBDEMO.S 150 | Code | 00 | | 1 | 00/00E3 : AA | tax ; save dp pointer in x + 354 | 1 SMBDEMO.S 151 | Macro | 00 | | 0 | 00/00E4 | PushWord {$0} + 359 | 1 SMBDEMO.S 151 | Code | 00 | | 2 | 00/00E4 : A5 00 | LDA {$0} + 360 | 1 SMBDEMO.S 151 | Code | 00 | | 1 | 00/00E6 : 48 | PHA + 362 | 1 SMBDEMO.S 152 | Code | 00 | | 1 | 00/00E7 : DA | phx + 363 | 1 SMBDEMO.S 153 | Macro | 00 | | 0 | 00/00E8 | _CtlStartUp + 365 | 1 SMBDEMO.S 153 | Code | 00 | | 3 | 00/00E8 : A2 10 02 | LDX #$210 ; load tool call # + 366 | 1 SMBDEMO.S 153 | Code | 00 | | 4 | 00/00EB : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 367 | 1 SMBDEMO.S 154 | Code | 00 | 2 | 3 | 00/00EF : 20 05 00 | jsr CheckError + 368 | 1 SMBDEMO.S 155 | Empty | 00 | | 0 | 00/00F2 | + 369 | 1 SMBDEMO.S 156 | Code | 00 | | 1 | 00/00F2 : 68 | pla + 370 | 1 SMBDEMO.S 157 | Code | 00 | | 1 | 00/00F3 : 18 | clc + 371 | 1 SMBDEMO.S 158 | Code | 00 | | 3 | 00/00F4 : 69 00 01 | adc #$100 + 372 | 1 SMBDEMO.S 159 | Code | 00 | | 1 | 00/00F7 : 48 | pha + 373 | 1 SMBDEMO.S 160 | Code | 00 | | 1 | 00/00F8 : AA | tax + 374 | 1 SMBDEMO.S 161 | Macro | 00 | | 0 | 00/00F9 | PushWord {$0} + 379 | 1 SMBDEMO.S 161 | Code | 00 | | 2 | 00/00F9 : A5 00 | LDA {$0} + 380 | 1 SMBDEMO.S 161 | Code | 00 | | 1 | 00/00FB : 48 | PHA + 382 | 1 SMBDEMO.S 162 | Code | 00 | | 1 | 00/00FC : DA | phx + 383 | 1 SMBDEMO.S 163 | Macro | 00 | | 0 | 00/00FD | _LEStartUp + 385 | 1 SMBDEMO.S 163 | Code | 00 | | 3 | 00/00FD : A2 14 02 | LDX #$214 ; load tool call # + 386 | 1 SMBDEMO.S 163 | Code | 00 | | 4 | 00/0100 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 387 | 1 SMBDEMO.S 164 | Code | 00 | 2 | 3 | 00/0104 : 20 05 00 | jsr CheckError + 388 | 1 SMBDEMO.S 165 | Empty | 00 | | 0 | 00/0107 | + 389 | 1 SMBDEMO.S 166 | Macro | 00 | | 0 | 00/0107 | PushWord {$0} + 394 | 1 SMBDEMO.S 166 | Code | 00 | | 2 | 00/0107 : A5 00 | LDA {$0} + 395 | 1 SMBDEMO.S 166 | Code | 00 | | 1 | 00/0109 : 48 | PHA + 397 | 1 SMBDEMO.S 167 | Macro | 00 | | 0 | 00/010A | _DialogStartUp + 399 | 1 SMBDEMO.S 167 | Code | 00 | | 3 | 00/010A : A2 15 02 | LDX #$215 ; load tool call # + 400 | 1 SMBDEMO.S 167 | Code | 00 | | 4 | 00/010D : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 401 | 1 SMBDEMO.S 168 | Code | 00 | 2 | 3 | 00/0111 : 20 05 00 | jsr CheckError + 402 | 1 SMBDEMO.S 169 | Empty | 00 | | 0 | 00/0114 | + 403 | 1 SMBDEMO.S 170 | Code | 00 | | 1 | 00/0114 : 68 | pla + 404 | 1 SMBDEMO.S 171 | Code | 00 | | 1 | 00/0115 : 18 | clc + 405 | 1 SMBDEMO.S 172 | Code | 00 | | 3 | 00/0116 : 69 00 01 | adc #$100 + 406 | 1 SMBDEMO.S 173 | Code | 00 | | 1 | 00/0119 : 48 | pha + 407 | 1 SMBDEMO.S 174 | Code | 00 | | 1 | 00/011A : AA | tax + 408 | 1 SMBDEMO.S 175 | Macro | 00 | | 0 | 00/011B | PushWord {$0} + 413 | 1 SMBDEMO.S 175 | Code | 00 | | 2 | 00/011B : A5 00 | LDA {$0} + 414 | 1 SMBDEMO.S 175 | Code | 00 | | 1 | 00/011D : 48 | PHA + 416 | 1 SMBDEMO.S 176 | Code | 00 | | 1 | 00/011E : DA | phx + 417 | 1 SMBDEMO.S 177 | Macro | 00 | | 0 | 00/011F | _MenuStartUp + 419 | 1 SMBDEMO.S 177 | Code | 00 | | 3 | 00/011F : A2 0F 02 | LDX #$20F ; load tool call # + 420 | 1 SMBDEMO.S 177 | Code | 00 | | 4 | 00/0122 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 421 | 1 SMBDEMO.S 178 | Code | 00 | 2 | 3 | 00/0126 : 20 05 00 | jsr CheckError + 422 | 1 SMBDEMO.S 179 | Empty | 00 | | 0 | 00/0129 | + 423 | 1 SMBDEMO.S 180 | Macro | 00 | | 0 | 00/0129 | _DeskStartUp + 425 | 1 SMBDEMO.S 180 | Code | 00 | | 3 | 00/0129 : A2 05 02 | LDX #$205 ; load tool call # + 426 | 1 SMBDEMO.S 180 | Code | 00 | | 4 | 00/012C : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 427 | 1 SMBDEMO.S 181 | Code | 00 | 2 | 3 | 00/0130 : 20 05 00 | jsr CheckError + 428 | 1 SMBDEMO.S 182 | Empty | 00 | | 0 | 00/0133 | + 429 | 1 SMBDEMO.S 183 | Code | 00 | | 1 | 00/0133 : 68 | pla + 430 | 1 SMBDEMO.S 184 | Code | 00 | | 1 | 00/0134 : 18 | clc + 431 | 1 SMBDEMO.S 185 | Code | 00 | | 3 | 00/0135 : 69 00 01 | adc #$100 + 432 | 1 SMBDEMO.S 186 | Code | 00 | | 1 | 00/0138 : 48 | pha + 433 | 1 SMBDEMO.S 187 | Macro | 00 | | 0 | 00/0139 | _SoundStartUp + 435 | 1 SMBDEMO.S 187 | Code | 00 | | 3 | 00/0139 : A2 08 02 | LDX #$208 ; load tool call # + 436 | 1 SMBDEMO.S 187 | Code | 00 | | 4 | 00/013C : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 437 | 1 SMBDEMO.S 188 | Code | 00 | 2 | 3 | 00/0140 : 20 05 00 | jsr CheckError + 438 | 1 SMBDEMO.S 189 | Empty | 00 | | 0 | 00/0143 | + 439 | 1 SMBDEMO.S 190 | Macro | 00 | | 0 | 00/0143 | _TCPIPStartUp + 440 | 1 SMBDEMO.S 190 | Code | 00 | | 3 | 00/0143 : A2 36 02 | LDX #$0200+$36 + 441 | 1 SMBDEMO.S 190 | Code | 00 | | 4 | 00/0146 : 22 00 00 E1 | JSL $E10000 + 442 | 1 SMBDEMO.S 191 | Code | 00 | 2 | 3 | 00/014A : 20 05 00 | jsr CheckError + 443 | 1 SMBDEMO.S 192 | Empty | 00 | | 0 | 00/014D | + 444 | 1 SMBDEMO.S 193 | Code | 00 | | 1 | 00/014D : 60 | rts + 445 | 1 SMBDEMO.S 194 | Empty | 00 | | 0 | 00/014E | + 446 | 1 SMBDEMO.S 195 | Comment | 00 | | 0 | 00/014E | * + 447 | 1 SMBDEMO.S 196 | Comment | 00 | | 0 | 00/014E | * ShutDownTools - shut em back down + 448 | 1 SMBDEMO.S 197 | Comment | 00 | | 0 | 00/014E | * + 449 | 1 SMBDEMO.S 198 | Code | 00 | 2 | 3 | 00/014E : AD 00 08 | ShutDownTools lda ToolList + 450 | 1 SMBDEMO.S 199 | Code | 00 | | 1 | 00/0151 : 0A | asl + 451 | 1 SMBDEMO.S 200 | Code | 00 | | 1 | 00/0152 : 0A | asl + 452 | 1 SMBDEMO.S 201 | Code | 00 | | 1 | 00/0153 : AA | tax + 453 | 1 SMBDEMO.S 202 | Code | 00 | 2 | 3 | 00/0154 : BD FE 07 | lda ToolList-2,x + 454 | 1 SMBDEMO.S 203 | Code | 00 | | 3 | 00/0157 : C9 02 00 | cmp #$2 ; Memory Manager? + 455 | 1 SMBDEMO.S 204 | Code | 00 | | 2 | 00/015A : D0 10 | bne ShutDownOne ; Nope, do it normally + 456 | 1 SMBDEMO.S 205 | Macro | 00 | | 0 | 00/015C | PushWord {$0} + 461 | 1 SMBDEMO.S 205 | Code | 00 | | 2 | 00/015C : A5 00 | LDA {$0} + 462 | 1 SMBDEMO.S 205 | Code | 00 | | 1 | 00/015E : 48 | PHA + 464 | 1 SMBDEMO.S 206 | Macro | 00 | | 0 | 00/015F | _DisposeAll + 466 | 1 SMBDEMO.S 206 | Code | 00 | | 3 | 00/015F : A2 02 11 | LDX #$1102 ; load tool call # + 467 | 1 SMBDEMO.S 206 | Code | 00 | | 4 | 00/0162 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 468 | 1 SMBDEMO.S 207 | Macro | 00 | | 0 | 00/0166 | PushWord {$0} + 473 | 1 SMBDEMO.S 207 | Code | 00 | | 2 | 00/0166 : A5 00 | LDA {$0} + 474 | 1 SMBDEMO.S 207 | Code | 00 | | 1 | 00/0168 : 48 | PHA + 476 | 1 SMBDEMO.S 208 | Code | 00 | | 3 | 00/0169 : A9 02 00 | lda #$2 ; set up for toolset #2 (MM) + 477 | 1 SMBDEMO.S 209 | Code | 00 | | 3 | 00/016C : 09 00 03 | ShutDownOne ora #$300 ; Call #3 (Shutdown) + 478 | 1 SMBDEMO.S 210 | Code | 00 | | 1 | 00/016F : AA | tax + 479 | 1 SMBDEMO.S 211 | Code | 00 | | 4 | 00/0170 : 22 00 00 E1 | jsl $E10000 + 480 | 1 SMBDEMO.S 212 | Code | 00 | 2 | 3 | 00/0174 : CE 00 08 | dec ToolList + 481 | 1 SMBDEMO.S 213 | Code | 00 | | 2 | 00/0177 : D0 D5 | bne ShutDownTools + 482 | 1 SMBDEMO.S 214 | Code | 00 | | 1 | 00/0179 : 60 | rts + 483 | 1 SMBDEMO.S 215 | Empty | 00 | | 0 | 00/017A | + 484 | 1 SMBDEMO.S 216 | Comment | 00 | | 0 | 00/017A | * + 485 | 1 SMBDEMO.S 217 | Comment | 00 | | 0 | 00/017A | * Main - main sequence of events + 486 | 1 SMBDEMO.S 218 | Comment | 00 | | 0 | 00/017A | * + 487 | 1 SMBDEMO.S 219 | Code | 00 | 2 | 3 | 00/017A : 20 16 00 | Main jsr StartUpTools + 488 | 1 SMBDEMO.S 220 | Code | 00 | 2 | 3 | 00/017D : 20 F2 02 | jsr PrepDeskTop + 489 | 1 SMBDEMO.S 221 | Code | 10 | | 2 | 00/0180 : E2 20 | sep $20 + 490 | 1 SMBDEMO.S 222 | Code | 10 | | 4 | 00/0182 : AF 34 C0 E0 | ldal $e0c034 + 491 | 1 SMBDEMO.S 223 | Code | 10 | 2 | 3 | 00/0186 : 8D 53 07 | sta ScreenColorByte + 492 | 1 SMBDEMO.S 224 | Code | 10 | | 2 | 00/0189 : A9 00 | lda #00 + 493 | 1 SMBDEMO.S 225 | Code | 10 | | 4 | 00/018B : 8F 34 C0 E0 | stal $e0c034 + 494 | 1 SMBDEMO.S 226 | Code | 00 | | 2 | 00/018F : C2 30 | rep $30 + 495 | 1 SMBDEMO.S 227 | Empty | 00 | | 0 | 00/0191 | + 496 | 1 SMBDEMO.S 228 | Comment | 00 | | 0 | 00/0191 | * pretty corner rounding + 497 | 1 SMBDEMO.S 229 | Macro | 00 | | 0 | 00/0191 | PushWord #0000 + 499 | 1 SMBDEMO.S 229 | Code | 00 | | 3 | 00/0191 : F4 00 00 | PEA #0000 + 502 | 1 SMBDEMO.S 230 | Macro | 00 | | 0 | 00/0194 | _SetForeColor + 504 | 1 SMBDEMO.S 230 | Code | 00 | | 3 | 00/0194 : A2 04 A0 | LDX #$A004 ; load tool call # + 505 | 1 SMBDEMO.S 230 | Code | 00 | | 4 | 00/0197 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 506 | 1 SMBDEMO.S 231 | Comment | 00 | | 0 | 00/019B | * upper left + 507 | 1 SMBDEMO.S 232 | Macro | 00 | | 0 | 00/019B | PushWord #0001 + 509 | 1 SMBDEMO.S 232 | Code | 00 | | 3 | 00/019B : F4 01 00 | PEA #0001 + 512 | 1 SMBDEMO.S 233 | Macro | 00 | | 0 | 00/019E | PushWord #0000 + 514 | 1 SMBDEMO.S 233 | Code | 00 | | 3 | 00/019E : F4 00 00 | PEA #0000 + 517 | 1 SMBDEMO.S 234 | Macro | 00 | | 0 | 00/01A1 | _MoveTo + 519 | 1 SMBDEMO.S 234 | Code | 00 | | 3 | 00/01A1 : A2 04 3A | LDX #$3A04 ; load tool call # + 520 | 1 SMBDEMO.S 234 | Code | 00 | | 4 | 00/01A4 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 521 | 1 SMBDEMO.S 235 | Macro | 00 | | 0 | 00/01A8 | PushWord #0001 + 523 | 1 SMBDEMO.S 235 | Code | 00 | | 3 | 00/01A8 : F4 01 00 | PEA #0001 + 526 | 1 SMBDEMO.S 236 | Macro | 00 | | 0 | 00/01AB | PushWord #0002 + 528 | 1 SMBDEMO.S 236 | Code | 00 | | 3 | 00/01AB : F4 02 00 | PEA #0002 + 531 | 1 SMBDEMO.S 237 | Macro | 00 | | 0 | 00/01AE | _LineTo + 533 | 1 SMBDEMO.S 237 | Code | 00 | | 3 | 00/01AE : A2 04 3C | LDX #$3C04 ; load tool call # + 534 | 1 SMBDEMO.S 237 | Code | 00 | | 4 | 00/01B1 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 535 | 1 SMBDEMO.S 238 | Macro | 00 | | 0 | 00/01B5 | PushWord #0002 + 537 | 1 SMBDEMO.S 238 | Code | 00 | | 3 | 00/01B5 : F4 02 00 | PEA #0002 + 540 | 1 SMBDEMO.S 239 | Macro | 00 | | 0 | 00/01B8 | PushWord #0000 + 542 | 1 SMBDEMO.S 239 | Code | 00 | | 3 | 00/01B8 : F4 00 00 | PEA #0000 + 545 | 1 SMBDEMO.S 240 | Macro | 00 | | 0 | 00/01BB | _MoveTo + 547 | 1 SMBDEMO.S 240 | Code | 00 | | 3 | 00/01BB : A2 04 3A | LDX #$3A04 ; load tool call # + 548 | 1 SMBDEMO.S 240 | Code | 00 | | 4 | 00/01BE : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 549 | 1 SMBDEMO.S 241 | Macro | 00 | | 0 | 00/01C2 | PushWord #0002 + 551 | 1 SMBDEMO.S 241 | Code | 00 | | 3 | 00/01C2 : F4 02 00 | PEA #0002 + 554 | 1 SMBDEMO.S 242 | Macro | 00 | | 0 | 00/01C5 | PushWord #0001 + 556 | 1 SMBDEMO.S 242 | Code | 00 | | 3 | 00/01C5 : F4 01 00 | PEA #0001 + 559 | 1 SMBDEMO.S 243 | Macro | 00 | | 0 | 00/01C8 | _LineTo + 561 | 1 SMBDEMO.S 243 | Code | 00 | | 3 | 00/01C8 : A2 04 3C | LDX #$3C04 ; load tool call # + 562 | 1 SMBDEMO.S 243 | Code | 00 | | 4 | 00/01CB : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 563 | 1 SMBDEMO.S 244 | Macro | 00 | | 0 | 00/01CF | PushWord #0003 + 565 | 1 SMBDEMO.S 244 | Code | 00 | | 3 | 00/01CF : F4 03 00 | PEA #0003 + 568 | 1 SMBDEMO.S 245 | Macro | 00 | | 0 | 00/01D2 | PushWord #0000 + 570 | 1 SMBDEMO.S 245 | Code | 00 | | 3 | 00/01D2 : F4 00 00 | PEA #0000 + 573 | 1 SMBDEMO.S 246 | Macro | 00 | | 0 | 00/01D5 | _MoveTo + 575 | 1 SMBDEMO.S 246 | Code | 00 | | 3 | 00/01D5 : A2 04 3A | LDX #$3A04 ; load tool call # + 576 | 1 SMBDEMO.S 246 | Code | 00 | | 4 | 00/01D8 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 577 | 1 SMBDEMO.S 247 | Macro | 00 | | 0 | 00/01DC | PushWord #0003 + 579 | 1 SMBDEMO.S 247 | Code | 00 | | 3 | 00/01DC : F4 03 00 | PEA #0003 + 582 | 1 SMBDEMO.S 248 | Macro | 00 | | 0 | 00/01DF | PushWord #0000 + 584 | 1 SMBDEMO.S 248 | Code | 00 | | 3 | 00/01DF : F4 00 00 | PEA #0000 + 587 | 1 SMBDEMO.S 249 | Macro | 00 | | 0 | 00/01E2 | _LineTo + 589 | 1 SMBDEMO.S 249 | Code | 00 | | 3 | 00/01E2 : A2 04 3C | LDX #$3C04 ; load tool call # + 590 | 1 SMBDEMO.S 249 | Code | 00 | | 4 | 00/01E5 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 591 | 1 SMBDEMO.S 250 | Comment | 00 | | 0 | 00/01E9 | * upper right + 592 | 1 SMBDEMO.S 251 | Macro | 00 | | 0 | 00/01E9 | PushWord #0638 + 594 | 1 SMBDEMO.S 251 | Code | 00 | | 3 | 00/01E9 : F4 7E 02 | PEA #0638 + 597 | 1 SMBDEMO.S 252 | Macro | 00 | | 0 | 00/01EC | PushWord #0000 + 599 | 1 SMBDEMO.S 252 | Code | 00 | | 3 | 00/01EC : F4 00 00 | PEA #0000 + 602 | 1 SMBDEMO.S 253 | Macro | 00 | | 0 | 00/01EF | _MoveTo + 604 | 1 SMBDEMO.S 253 | Code | 00 | | 3 | 00/01EF : A2 04 3A | LDX #$3A04 ; load tool call # + 605 | 1 SMBDEMO.S 253 | Code | 00 | | 4 | 00/01F2 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 606 | 1 SMBDEMO.S 254 | Macro | 00 | | 0 | 00/01F6 | PushWord #0638 + 608 | 1 SMBDEMO.S 254 | Code | 00 | | 3 | 00/01F6 : F4 7E 02 | PEA #0638 + 611 | 1 SMBDEMO.S 255 | Macro | 00 | | 0 | 00/01F9 | PushWord #0002 + 613 | 1 SMBDEMO.S 255 | Code | 00 | | 3 | 00/01F9 : F4 02 00 | PEA #0002 + 616 | 1 SMBDEMO.S 256 | Macro | 00 | | 0 | 00/01FC | _LineTo + 618 | 1 SMBDEMO.S 256 | Code | 00 | | 3 | 00/01FC : A2 04 3C | LDX #$3C04 ; load tool call # + 619 | 1 SMBDEMO.S 256 | Code | 00 | | 4 | 00/01FF : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 620 | 1 SMBDEMO.S 257 | Macro | 00 | | 0 | 00/0203 | PushWord #0637 + 622 | 1 SMBDEMO.S 257 | Code | 00 | | 3 | 00/0203 : F4 7D 02 | PEA #0637 + 625 | 1 SMBDEMO.S 258 | Macro | 00 | | 0 | 00/0206 | PushWord #0000 + 627 | 1 SMBDEMO.S 258 | Code | 00 | | 3 | 00/0206 : F4 00 00 | PEA #0000 + 630 | 1 SMBDEMO.S 259 | Macro | 00 | | 0 | 00/0209 | _MoveTo + 632 | 1 SMBDEMO.S 259 | Code | 00 | | 3 | 00/0209 : A2 04 3A | LDX #$3A04 ; load tool call # + 633 | 1 SMBDEMO.S 259 | Code | 00 | | 4 | 00/020C : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 634 | 1 SMBDEMO.S 260 | Macro | 00 | | 0 | 00/0210 | PushWord #0637 + 636 | 1 SMBDEMO.S 260 | Code | 00 | | 3 | 00/0210 : F4 7D 02 | PEA #0637 + 639 | 1 SMBDEMO.S 261 | Macro | 00 | | 0 | 00/0213 | PushWord #0001 + 641 | 1 SMBDEMO.S 261 | Code | 00 | | 3 | 00/0213 : F4 01 00 | PEA #0001 + 644 | 1 SMBDEMO.S 262 | Macro | 00 | | 0 | 00/0216 | _LineTo + 646 | 1 SMBDEMO.S 262 | Code | 00 | | 3 | 00/0216 : A2 04 3C | LDX #$3C04 ; load tool call # + 647 | 1 SMBDEMO.S 262 | Code | 00 | | 4 | 00/0219 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 648 | 1 SMBDEMO.S 263 | Comment | 00 | | 0 | 00/021D | * lower left + 649 | 1 SMBDEMO.S 264 | Macro | 00 | | 0 | 00/021D | PushWord #0000 + 651 | 1 SMBDEMO.S 264 | Code | 00 | | 3 | 00/021D : F4 00 00 | PEA #0000 + 654 | 1 SMBDEMO.S 265 | Macro | 00 | | 0 | 00/0220 | PushWord #0195 + 656 | 1 SMBDEMO.S 265 | Code | 00 | | 3 | 00/0220 : F4 C3 00 | PEA #0195 + 659 | 1 SMBDEMO.S 266 | Macro | 00 | | 0 | 00/0223 | _MoveTo + 661 | 1 SMBDEMO.S 266 | Code | 00 | | 3 | 00/0223 : A2 04 3A | LDX #$3A04 ; load tool call # + 662 | 1 SMBDEMO.S 266 | Code | 00 | | 4 | 00/0226 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 663 | 1 SMBDEMO.S 267 | Macro | 00 | | 0 | 00/022A | PushWord #0000 + 665 | 1 SMBDEMO.S 267 | Code | 00 | | 3 | 00/022A : F4 00 00 | PEA #0000 + 668 | 1 SMBDEMO.S 268 | Macro | 00 | | 0 | 00/022D | PushWord #0199 + 670 | 1 SMBDEMO.S 268 | Code | 00 | | 3 | 00/022D : F4 C7 00 | PEA #0199 + 673 | 1 SMBDEMO.S 269 | Macro | 00 | | 0 | 00/0230 | _LineTo + 675 | 1 SMBDEMO.S 269 | Code | 00 | | 3 | 00/0230 : A2 04 3C | LDX #$3C04 ; load tool call # + 676 | 1 SMBDEMO.S 269 | Code | 00 | | 4 | 00/0233 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 677 | 1 SMBDEMO.S 270 | Macro | 00 | | 0 | 00/0237 | PushWord #0001 + 679 | 1 SMBDEMO.S 270 | Code | 00 | | 3 | 00/0237 : F4 01 00 | PEA #0001 + 682 | 1 SMBDEMO.S 271 | Macro | 00 | | 0 | 00/023A | PushWord #0197 + 684 | 1 SMBDEMO.S 271 | Code | 00 | | 3 | 00/023A : F4 C5 00 | PEA #0197 + 687 | 1 SMBDEMO.S 272 | Macro | 00 | | 0 | 00/023D | _MoveTo + 689 | 1 SMBDEMO.S 272 | Code | 00 | | 3 | 00/023D : A2 04 3A | LDX #$3A04 ; load tool call # + 690 | 1 SMBDEMO.S 272 | Code | 00 | | 4 | 00/0240 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 691 | 1 SMBDEMO.S 273 | Macro | 00 | | 0 | 00/0244 | PushWord #0001 + 693 | 1 SMBDEMO.S 273 | Code | 00 | | 3 | 00/0244 : F4 01 00 | PEA #0001 + 696 | 1 SMBDEMO.S 274 | Macro | 00 | | 0 | 00/0247 | PushWord #0199 + 698 | 1 SMBDEMO.S 274 | Code | 00 | | 3 | 00/0247 : F4 C7 00 | PEA #0199 + 701 | 1 SMBDEMO.S 275 | Macro | 00 | | 0 | 00/024A | _LineTo + 703 | 1 SMBDEMO.S 275 | Code | 00 | | 3 | 00/024A : A2 04 3C | LDX #$3C04 ; load tool call # + 704 | 1 SMBDEMO.S 275 | Code | 00 | | 4 | 00/024D : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 705 | 1 SMBDEMO.S 276 | Macro | 00 | | 0 | 00/0251 | PushWord #0002 + 707 | 1 SMBDEMO.S 276 | Code | 00 | | 3 | 00/0251 : F4 02 00 | PEA #0002 + 710 | 1 SMBDEMO.S 277 | Macro | 00 | | 0 | 00/0254 | PushWord #0199 + 712 | 1 SMBDEMO.S 277 | Code | 00 | | 3 | 00/0254 : F4 C7 00 | PEA #0199 + 715 | 1 SMBDEMO.S 278 | Macro | 00 | | 0 | 00/0257 | _MoveTo + 717 | 1 SMBDEMO.S 278 | Code | 00 | | 3 | 00/0257 : A2 04 3A | LDX #$3A04 ; load tool call # + 718 | 1 SMBDEMO.S 278 | Code | 00 | | 4 | 00/025A : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 719 | 1 SMBDEMO.S 279 | Macro | 00 | | 0 | 00/025E | PushWord #0002 + 721 | 1 SMBDEMO.S 279 | Code | 00 | | 3 | 00/025E : F4 02 00 | PEA #0002 + 724 | 1 SMBDEMO.S 280 | Macro | 00 | | 0 | 00/0261 | PushWord #0199 + 726 | 1 SMBDEMO.S 280 | Code | 00 | | 3 | 00/0261 : F4 C7 00 | PEA #0199 + 729 | 1 SMBDEMO.S 281 | Macro | 00 | | 0 | 00/0264 | _LineTo + 731 | 1 SMBDEMO.S 281 | Code | 00 | | 3 | 00/0264 : A2 04 3C | LDX #$3C04 ; load tool call # + 732 | 1 SMBDEMO.S 281 | Code | 00 | | 4 | 00/0267 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 733 | 1 SMBDEMO.S 282 | Comment | 00 | | 0 | 00/026B | * lower right + 734 | 1 SMBDEMO.S 283 | Macro | 00 | | 0 | 00/026B | PushWord #0639 + 736 | 1 SMBDEMO.S 283 | Code | 00 | | 3 | 00/026B : F4 7F 02 | PEA #0639 + 739 | 1 SMBDEMO.S 284 | Macro | 00 | | 0 | 00/026E | PushWord #0195 + 741 | 1 SMBDEMO.S 284 | Code | 00 | | 3 | 00/026E : F4 C3 00 | PEA #0195 + 744 | 1 SMBDEMO.S 285 | Macro | 00 | | 0 | 00/0271 | _MoveTo + 746 | 1 SMBDEMO.S 285 | Code | 00 | | 3 | 00/0271 : A2 04 3A | LDX #$3A04 ; load tool call # + 747 | 1 SMBDEMO.S 285 | Code | 00 | | 4 | 00/0274 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 748 | 1 SMBDEMO.S 286 | Macro | 00 | | 0 | 00/0278 | PushWord #0639 + 750 | 1 SMBDEMO.S 286 | Code | 00 | | 3 | 00/0278 : F4 7F 02 | PEA #0639 + 753 | 1 SMBDEMO.S 287 | Macro | 00 | | 0 | 00/027B | PushWord #0199 + 755 | 1 SMBDEMO.S 287 | Code | 00 | | 3 | 00/027B : F4 C7 00 | PEA #0199 + 758 | 1 SMBDEMO.S 288 | Macro | 00 | | 0 | 00/027E | _LineTo + 760 | 1 SMBDEMO.S 288 | Code | 00 | | 3 | 00/027E : A2 04 3C | LDX #$3C04 ; load tool call # + 761 | 1 SMBDEMO.S 288 | Code | 00 | | 4 | 00/0281 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 762 | 1 SMBDEMO.S 289 | Macro | 00 | | 0 | 00/0285 | PushWord #0638 + 764 | 1 SMBDEMO.S 289 | Code | 00 | | 3 | 00/0285 : F4 7E 02 | PEA #0638 + 767 | 1 SMBDEMO.S 290 | Macro | 00 | | 0 | 00/0288 | PushWord #0197 + 769 | 1 SMBDEMO.S 290 | Code | 00 | | 3 | 00/0288 : F4 C5 00 | PEA #0197 + 772 | 1 SMBDEMO.S 291 | Macro | 00 | | 0 | 00/028B | _MoveTo + 774 | 1 SMBDEMO.S 291 | Code | 00 | | 3 | 00/028B : A2 04 3A | LDX #$3A04 ; load tool call # + 775 | 1 SMBDEMO.S 291 | Code | 00 | | 4 | 00/028E : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 776 | 1 SMBDEMO.S 292 | Macro | 00 | | 0 | 00/0292 | PushWord #0638 + 778 | 1 SMBDEMO.S 292 | Code | 00 | | 3 | 00/0292 : F4 7E 02 | PEA #0638 + 781 | 1 SMBDEMO.S 293 | Macro | 00 | | 0 | 00/0295 | PushWord #0199 + 783 | 1 SMBDEMO.S 293 | Code | 00 | | 3 | 00/0295 : F4 C7 00 | PEA #0199 + 786 | 1 SMBDEMO.S 294 | Macro | 00 | | 0 | 00/0298 | _LineTo + 788 | 1 SMBDEMO.S 294 | Code | 00 | | 3 | 00/0298 : A2 04 3C | LDX #$3C04 ; load tool call # + 789 | 1 SMBDEMO.S 294 | Code | 00 | | 4 | 00/029B : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 790 | 1 SMBDEMO.S 295 | Macro | 00 | | 0 | 00/029F | PushWord #0637 + 792 | 1 SMBDEMO.S 295 | Code | 00 | | 3 | 00/029F : F4 7D 02 | PEA #0637 + 795 | 1 SMBDEMO.S 296 | Macro | 00 | | 0 | 00/02A2 | PushWord #0199 + 797 | 1 SMBDEMO.S 296 | Code | 00 | | 3 | 00/02A2 : F4 C7 00 | PEA #0199 + 800 | 1 SMBDEMO.S 297 | Macro | 00 | | 0 | 00/02A5 | _MoveTo + 802 | 1 SMBDEMO.S 297 | Code | 00 | | 3 | 00/02A5 : A2 04 3A | LDX #$3A04 ; load tool call # + 803 | 1 SMBDEMO.S 297 | Code | 00 | | 4 | 00/02A8 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 804 | 1 SMBDEMO.S 298 | Macro | 00 | | 0 | 00/02AC | PushWord #0637 + 806 | 1 SMBDEMO.S 298 | Code | 00 | | 3 | 00/02AC : F4 7D 02 | PEA #0637 + 809 | 1 SMBDEMO.S 299 | Macro | 00 | | 0 | 00/02AF | PushWord #0199 + 811 | 1 SMBDEMO.S 299 | Code | 00 | | 3 | 00/02AF : F4 C7 00 | PEA #0199 + 814 | 1 SMBDEMO.S 300 | Macro | 00 | | 0 | 00/02B2 | _LineTo + 816 | 1 SMBDEMO.S 300 | Code | 00 | | 3 | 00/02B2 : A2 04 3C | LDX #$3C04 ; load tool call # + 817 | 1 SMBDEMO.S 300 | Code | 00 | | 4 | 00/02B5 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 818 | 1 SMBDEMO.S 301 | Empty | 00 | | 0 | 00/02B9 | + 819 | 1 SMBDEMO.S 302 | Code | 00 | | 1 | 00/02B9 : 48 | EventLoop pha ; Result Space + 820 | 1 SMBDEMO.S 303 | Macro | 00 | | 0 | 00/02BA | PushWord #$ffff ; Event Mask + 822 | 1 SMBDEMO.S 303 | Code | 00 | | 3 | 00/02BA : F4 FF FF | PEA #$ffff + 825 | 1 SMBDEMO.S 304 | Macro | 00 | | 0 | 00/02BD | PushLong #EventRec + 829 | 1 SMBDEMO.S 304 | Code | 00 | 1 >>16 | 3 | 00/02BD : F4 00 00 | PEA #^#EventRec + 836 | 1 SMBDEMO.S 304 | Code | 00 | 2 | 3 | 00/02C0 : F4 31 09 | PEA #EventRec + 839 | 1 SMBDEMO.S 305 | Macro | 00 | | 0 | 00/02C3 | _TaskMaster + 841 | 1 SMBDEMO.S 305 | Code | 00 | | 3 | 00/02C3 : A2 0E 1D | LDX #$1D0E ; load tool call # + 842 | 1 SMBDEMO.S 305 | Code | 00 | | 4 | 00/02C6 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 843 | 1 SMBDEMO.S 306 | Code | 00 | | 1 | 00/02CA : 68 | pla + 844 | 1 SMBDEMO.S 307 | Code | 00 | | 2 | 00/02CB : F0 EC | beq EventLoop + 845 | 1 SMBDEMO.S 308 | Empty | 00 | | 0 | 00/02CD | + 846 | 1 SMBDEMO.S 309 | Code | 00 | | 3 | 00/02CD : C9 11 00 | cmp #$11 ; wInMenuBar? + 847 | 1 SMBDEMO.S 310 | Code | 00 | | 2 | 00/02D0 : D0 E7 | bne EventLoop ; no, so ignore + 848 | 1 SMBDEMO.S 311 | Empty | 00 | | 0 | 00/02D2 | + 849 | 1 SMBDEMO.S 312 | Code | 00 | 2 | 3 | 00/02D2 : 20 15 07 | jsr MenuDispatch + 850 | 1 SMBDEMO.S 313 | Code | 00 | 2 | 3 | 00/02D5 : 2C 4F 07 | bit QuitFlag + 851 | 1 SMBDEMO.S 314 | Code | 00 | | 2 | 00/02D8 : 10 DF | bpl EventLoop + 852 | 1 SMBDEMO.S 315 | Empty | 00 | | 0 | 00/02DA | + 853 | 1 SMBDEMO.S 316 | Code | 10 | | 2 | 00/02DA : E2 20 | sep $20 + 854 | 1 SMBDEMO.S 317 | Code | 10 | 2 | 3 | 00/02DC : AD 53 07 | lda ScreenColorByte + 855 | 1 SMBDEMO.S 318 | Code | 10 | | 4 | 00/02DF : 8F 34 C0 E0 | stal $e0c034 + 856 | 1 SMBDEMO.S 319 | Code | 00 | | 2 | 00/02E3 : C2 30 | rep $30 + 857 | 1 SMBDEMO.S 320 | Empty | 00 | | 0 | 00/02E5 | + 858 | 1 SMBDEMO.S 321 | Code | 00 | 2 | 3 | 00/02E5 : 20 4E 01 | jsr ShutDownTools + 859 | 1 SMBDEMO.S 322 | Macro | 00 | | 0 | 00/02E8 | iGSOS {$0029};QParams;1 + 860 | 1 SMBDEMO.S 322 | Code | 00 | | 4 | 00/02E8 : 22 A8 00 E1 | JSL $E100A8 + 862 | 1 SMBDEMO.S 322 | Data | 00 | | 2 | 00/02EC : 29 20 | DA {$0029}.$2000 + 865 | 1 SMBDEMO.S 322 | Data | 00 | 3 | 4 | 00/02EE : 29 0C 00 00 | ADRL QParams + 866 | 1 SMBDEMO.S 323 | Empty | 00 | | 0 | 00/02F2 | + 867 | 1 SMBDEMO.S 324 | Comment | 00 | | 0 | 00/02F2 | * + 868 | 1 SMBDEMO.S 325 | Comment | 00 | | 0 | 00/02F2 | * Prepare Desktop + 869 | 1 SMBDEMO.S 326 | Comment | 00 | | 0 | 00/02F2 | * + 870 | 1 SMBDEMO.S 327 | Macro | 00 | | 0 | 00/02F2 | PrepDeskTop PushLong #0000 + 874 | 1 SMBDEMO.S 327 | Code | 00 | | 3 | 00/02F2 : F4 00 00 | PEA #^#0000 + 881 | 1 SMBDEMO.S 327 | Code | 00 | | 3 | 00/02F5 : F4 00 00 | PEA #0000 + 884 | 1 SMBDEMO.S 328 | Macro | 00 | | 0 | 00/02F8 | _RefreshDesktop + 886 | 1 SMBDEMO.S 328 | Code | 00 | | 3 | 00/02F8 : A2 0E 39 | LDX #$390E ; load tool call # + 887 | 1 SMBDEMO.S 328 | Code | 00 | | 4 | 00/02FB : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 888 | 1 SMBDEMO.S 329 | Macro | 00 | | 0 | 00/02FF | _InitCursor + 890 | 1 SMBDEMO.S 329 | Code | 00 | | 3 | 00/02FF : A2 04 CA | LDX #$CA04 ; load tool call # + 891 | 1 SMBDEMO.S 329 | Code | 00 | | 4 | 00/0302 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 892 | 1 SMBDEMO.S 330 | Empty | 00 | | 0 | 00/0306 | + 893 | 1 SMBDEMO.S 331 | Code | 00 | | 1 | 00/0306 : 48 | NextMenu pha + 894 | 1 SMBDEMO.S 332 | Code | 00 | | 1 | 00/0307 : 48 | pha + 895 | 1 SMBDEMO.S 333 | Code | 00 | 2 | 3 | 00/0308 : AD 3E 08 | lda MenuTbl + 896 | 1 SMBDEMO.S 334 | Code | 00 | | 1 | 00/030B : 0A | asl + 897 | 1 SMBDEMO.S 335 | Code | 00 | | 1 | 00/030C : AA | tax + 898 | 1 SMBDEMO.S 336 | Code | 00 | 2 | 3 | 00/030D : BD 3E 08 | lda MenuTbl,x + 899 | 1 SMBDEMO.S 337 | Code | 00 | | 1 | 00/0310 : 8B | phb + 900 | 1 SMBDEMO.S 338 | Code | 00 | | 1 | 00/0311 : 8B | phb + 901 | 1 SMBDEMO.S 339 | Code | 00 | | 1 | 00/0312 : 48 | pha + 902 | 1 SMBDEMO.S 340 | Macro | 00 | | 0 | 00/0313 | _NewMenu + 904 | 1 SMBDEMO.S 340 | Code | 00 | | 3 | 00/0313 : A2 0F 2D | LDX #$2D0F ; load tool call # + 905 | 1 SMBDEMO.S 340 | Code | 00 | | 4 | 00/0316 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 906 | 1 SMBDEMO.S 341 | Macro | 00 | | 0 | 00/031A | PushWord #0000 + 908 | 1 SMBDEMO.S 341 | Code | 00 | | 3 | 00/031A : F4 00 00 | PEA #0000 + 911 | 1 SMBDEMO.S 342 | Macro | 00 | | 0 | 00/031D | _InsertMenu + 913 | 1 SMBDEMO.S 342 | Code | 00 | | 3 | 00/031D : A2 0F 0D | LDX #$D0F ; load tool call # + 914 | 1 SMBDEMO.S 342 | Code | 00 | | 4 | 00/0320 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 915 | 1 SMBDEMO.S 343 | Empty | 00 | | 0 | 00/0324 | + 916 | 1 SMBDEMO.S 344 | Code | 00 | 2 | 3 | 00/0324 : CE 3E 08 | dec MenuTbl + 917 | 1 SMBDEMO.S 345 | Code | 00 | | 2 | 00/0327 : D0 DD | bne NextMenu + 918 | 1 SMBDEMO.S 346 | Empty | 00 | | 0 | 00/0329 | + 919 | 1 SMBDEMO.S 347 | Macro | 00 | | 0 | 00/0329 | PushWord #1 + 921 | 1 SMBDEMO.S 347 | Code | 00 | | 3 | 00/0329 : F4 01 00 | PEA #1 + 924 | 1 SMBDEMO.S 348 | Macro | 00 | | 0 | 00/032C | _FixAppleMenu + 926 | 1 SMBDEMO.S 348 | Code | 00 | | 3 | 00/032C : A2 05 1E | LDX #$1E05 ; load tool call # + 927 | 1 SMBDEMO.S 348 | Code | 00 | | 4 | 00/032F : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 928 | 1 SMBDEMO.S 349 | Empty | 00 | | 0 | 00/0333 | + 929 | 1 SMBDEMO.S 350 | Code | 00 | | 1 | 00/0333 : 48 | pha + 930 | 1 SMBDEMO.S 351 | Macro | 00 | | 0 | 00/0334 | _FixMenuBar + 932 | 1 SMBDEMO.S 351 | Code | 00 | | 3 | 00/0334 : A2 0F 13 | LDX #$130F ; load tool call # + 933 | 1 SMBDEMO.S 351 | Code | 00 | | 4 | 00/0337 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 934 | 1 SMBDEMO.S 352 | Code | 00 | | 1 | 00/033B : 68 | pla + 935 | 1 SMBDEMO.S 353 | Empty | 00 | | 0 | 00/033C | + 936 | 1 SMBDEMO.S 354 | Macro | 00 | | 0 | 00/033C | _DrawMenuBar + 938 | 1 SMBDEMO.S 354 | Code | 00 | | 3 | 00/033C : A2 0F 2A | LDX #$2A0F ; load tool call # + 939 | 1 SMBDEMO.S 354 | Code | 00 | | 4 | 00/033F : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 940 | 1 SMBDEMO.S 355 | Code | 00 | | 1 | 00/0343 : 60 | rts + 941 | 1 SMBDEMO.S 356 | Empty | 00 | | 0 | 00/0344 | + 942 | 1 SMBDEMO.S 357 | Comment | 00 | | 0 | 00/0344 | * + 943 | 1 SMBDEMO.S 358 | Comment | 00 | | 0 | 00/0344 | * Apple Menu: About + 944 | 1 SMBDEMO.S 359 | Comment | 00 | | 0 | 00/0344 | * + 945 | 1 SMBDEMO.S 360 | Macro | 00 | | 0 | 00/0344 | About PushLong #AboutString + 949 | 1 SMBDEMO.S 360 | Code | 00 | 1 >>16 | 3 | 00/0344 : F4 00 00 | PEA #^#AboutString + 956 | 1 SMBDEMO.S 360 | Code | 00 | 2 | 3 | 00/0347 : F4 84 09 | PEA #AboutString + 959 | 1 SMBDEMO.S 361 | Code | 00 | 2 | 3 | 00/034A : 20 2F 07 | jsr InfoDialog + 960 | 1 SMBDEMO.S 362 | Code | 00 | | 1 | 00/034D : 60 | rts + 961 | 1 SMBDEMO.S 363 | Empty | 00 | | 0 | 00/034E | + 962 | 1 SMBDEMO.S 364 | Comment | 00 | | 0 | 00/034E | * + 963 | 1 SMBDEMO.S 365 | Comment | 00 | | 0 | 00/034E | * File Menu: Quit + 964 | 1 SMBDEMO.S 366 | Comment | 00 | | 0 | 00/034E | * + 965 | 1 SMBDEMO.S 367 | Code | 00 | 2 | 3 | 00/034E : CE 4F 07 | Quit dec QuitFlag + 966 | 1 SMBDEMO.S 368 | Code | 00 | | 1 | 00/0351 : 60 | rts + 967 | 1 SMBDEMO.S 369 | Empty | 00 | | 0 | 00/0352 | + 968 | 1 SMBDEMO.S 370 | Comment | 00 | | 0 | 00/0352 | * + 969 | 1 SMBDEMO.S 371 | Comment | 00 | | 0 | 00/0352 | * TCP/IP Test + 970 | 1 SMBDEMO.S 372 | Comment | 00 | | 0 | 00/0352 | * + 971 | 1 SMBDEMO.S 373 | Code | 00 | | 1 | 00/0352 : 48 | TCPIPTest pha + 972 | 1 SMBDEMO.S 374 | Macro | 00 | | 0 | 00/0353 | PushWord #0000 + 974 | 1 SMBDEMO.S 374 | Code | 00 | | 3 | 00/0353 : F4 00 00 | PEA #0000 + 977 | 1 SMBDEMO.S 375 | Macro | 00 | | 0 | 00/0356 | _TCPIPGetConnectStatus + 978 | 1 SMBDEMO.S 375 | Code | 00 | | 3 | 00/0356 : A2 36 09 | LDX #$0900+$36 + 979 | 1 SMBDEMO.S 375 | Code | 00 | | 4 | 00/0359 : 22 00 00 E1 | JSL $E10000 + 980 | 1 SMBDEMO.S 376 | Code | 00 | | 1 | 00/035D : 68 | pla + 981 | 1 SMBDEMO.S 377 | Code | 00 | | 3 | 00/035E : C9 00 00 | cmp #$0000 + 982 | 1 SMBDEMO.S 378 | Code | 00 | | 2 | 00/0361 : D0 0B | bne tgood + 983 | 1 SMBDEMO.S 379 | Macro | 00 | | 0 | 00/0363 | PushLong #MarinettiBad + 987 | 1 SMBDEMO.S 379 | Code | 00 | 1 >>16 | 3 | 00/0363 : F4 00 00 | PEA #^#MarinettiBad + 994 | 1 SMBDEMO.S 379 | Code | 00 | 2 | 3 | 00/0366 : F4 6F 09 | PEA #MarinettiBad + 997 | 1 SMBDEMO.S 380 | Code | 00 | 2 | 3 | 00/0369 : 20 2F 07 | jsr InfoDialog + 998 | 1 SMBDEMO.S 381 | Code | 00 | | 2 | 00/036C : 80 09 | bra tret + 999 | 1 SMBDEMO.S 382 | Macro | 00 | | 0 | 00/036E | tgood PushLong #MarinettiGood + 1003 | 1 SMBDEMO.S 382 | Code | 00 | 1 >>16 | 3 | 00/036E : F4 00 00 | PEA #^#MarinettiGood + 1010 | 1 SMBDEMO.S 382 | Code | 00 | 2 | 3 | 00/0371 : F4 5E 09 | PEA #MarinettiGood + 1013 | 1 SMBDEMO.S 383 | Code | 00 | 2 | 3 | 00/0374 : 20 2F 07 | jsr InfoDialog + 1014 | 1 SMBDEMO.S 384 | Code | 00 | | 1 | 00/0377 : 68 | tret pla + 1015 | 1 SMBDEMO.S 385 | Code | 00 | | 1 | 00/0378 : 60 | rts + 1016 | 1 SMBDEMO.S 386 | Empty | 00 | | 0 | 00/0379 | + 1017 | 1 SMBDEMO.S 387 | Comment | 00 | | 0 | 00/0379 | * + 1018 | 1 SMBDEMO.S 388 | Comment | 00 | | 0 | 00/0379 | * Connect To Server + 1019 | 1 SMBDEMO.S 389 | Comment | 00 | | 0 | 00/0379 | * + 1020 | 1 SMBDEMO.S 390 | Macro | 00 | | 0 | 00/0379 | ConnectToSvr PushLong #$00000000 ; space for result + 1024 | 1 SMBDEMO.S 390 | Code | 00 | | 3 | 00/0379 : F4 00 00 | PEA #^#$00000000 + 1031 | 1 SMBDEMO.S 390 | Code | 00 | | 3 | 00/037C : F4 00 00 | PEA #$00000000 + 1034 | 1 SMBDEMO.S 391 | Macro | 00 | | 0 | 00/037F | PushLong #CTSRect + 1038 | 1 SMBDEMO.S 391 | Code | 00 | 1 >>16 | 3 | 00/037F : F4 00 00 | PEA #^#CTSRect + 1045 | 1 SMBDEMO.S 391 | Code | 00 | 2 | 3 | 00/0382 : F4 9A 09 | PEA #CTSRect + 1048 | 1 SMBDEMO.S 392 | Macro | 00 | | 0 | 00/0385 | _GetNewModalDialog + 1050 | 1 SMBDEMO.S 392 | Code | 00 | | 3 | 00/0385 : A2 15 32 | LDX #$3215 ; load tool call # + 1051 | 1 SMBDEMO.S 392 | Code | 00 | | 4 | 00/0388 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1052 | 1 SMBDEMO.S 393 | Macro | 00 | | 0 | 00/038C | PullLong CTSWinPtr + 1055 | 1 SMBDEMO.S 393 | Code | 00 | | 1 | 00/038C : 68 | PLA + 1057 | 1 SMBDEMO.S 393 | Code | 00 | 2 | 3 | 00/038D : 8D 5B 07 | STA CTSWinPtr + 1062 | 1 SMBDEMO.S 393 | Code | 00 | | 1 | 00/0390 : 68 | PLA + 1064 | 1 SMBDEMO.S 393 | Code | 00 | 2 | 3 | 00/0391 : 8D 5D 07 | STA CTSWinPtr+2 + 1070 | 1 SMBDEMO.S 394 | Empty | 00 | | 0 | 00/0394 | + 1071 | 1 SMBDEMO.S 395 | Macro | 00 | | 0 | 00/0394 | PushLong CTSWinPtr + 1079 | 1 SMBDEMO.S 395 | Code | 00 | 2 | 3 | 00/0394 : AD 5D 07 | LDA CTSWinPtr+2 + 1080 | 1 SMBDEMO.S 395 | Code | 00 | | 1 | 00/0397 : 48 | PHA + 1088 | 1 SMBDEMO.S 395 | Code | 00 | 2 | 3 | 00/0398 : AD 5B 07 | LDA CTSWinPtr + 1089 | 1 SMBDEMO.S 395 | Code | 00 | | 1 | 00/039B : 48 | PHA + 1091 | 1 SMBDEMO.S 396 | Macro | 00 | | 0 | 00/039C | _BeginUpdate + 1093 | 1 SMBDEMO.S 396 | Code | 00 | | 3 | 00/039C : A2 0E 1E | LDX #$1E0E ; load tool call # + 1094 | 1 SMBDEMO.S 396 | Code | 00 | | 4 | 00/039F : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1095 | 1 SMBDEMO.S 397 | Empty | 00 | | 0 | 00/03A3 | + 1096 | 1 SMBDEMO.S 398 | Macro | 00 | | 0 | 00/03A3 | PushLong CTSWinPtr + 1104 | 1 SMBDEMO.S 398 | Code | 00 | 2 | 3 | 00/03A3 : AD 5D 07 | LDA CTSWinPtr+2 + 1105 | 1 SMBDEMO.S 398 | Code | 00 | | 1 | 00/03A6 : 48 | PHA + 1113 | 1 SMBDEMO.S 398 | Code | 00 | 2 | 3 | 00/03A7 : AD 5B 07 | LDA CTSWinPtr + 1114 | 1 SMBDEMO.S 398 | Code | 00 | | 1 | 00/03AA : 48 | PHA + 1116 | 1 SMBDEMO.S 399 | Macro | 00 | | 0 | 00/03AB | _DrawDialog + 1118 | 1 SMBDEMO.S 399 | Code | 00 | | 3 | 00/03AB : A2 15 16 | LDX #$1615 ; load tool call # + 1119 | 1 SMBDEMO.S 399 | Code | 00 | | 4 | 00/03AE : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1120 | 1 SMBDEMO.S 400 | Empty | 00 | | 0 | 00/03B2 | + 1121 | 1 SMBDEMO.S 401 | Macro | 00 | | 0 | 00/03B2 | PushLong CTSWinPtr + 1129 | 1 SMBDEMO.S 401 | Code | 00 | 2 | 3 | 00/03B2 : AD 5D 07 | LDA CTSWinPtr+2 + 1130 | 1 SMBDEMO.S 401 | Code | 00 | | 1 | 00/03B5 : 48 | PHA + 1138 | 1 SMBDEMO.S 401 | Code | 00 | 2 | 3 | 00/03B6 : AD 5B 07 | LDA CTSWinPtr + 1139 | 1 SMBDEMO.S 401 | Code | 00 | | 1 | 00/03B9 : 48 | PHA + 1141 | 1 SMBDEMO.S 402 | Macro | 00 | | 0 | 00/03BA | _EndUpdate + 1143 | 1 SMBDEMO.S 402 | Code | 00 | | 3 | 00/03BA : A2 0E 1F | LDX #$1F0E ; load tool call # + 1144 | 1 SMBDEMO.S 402 | Code | 00 | | 4 | 00/03BD : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1145 | 1 SMBDEMO.S 403 | Empty | 00 | | 0 | 00/03C1 | + 1146 | 1 SMBDEMO.S 404 | Macro | 00 | | 0 | 00/03C1 | PushLong #00000000 + 1150 | 1 SMBDEMO.S 404 | Code | 00 | | 3 | 00/03C1 : F4 00 00 | PEA #^#00000000 + 1157 | 1 SMBDEMO.S 404 | Code | 00 | | 3 | 00/03C4 : F4 00 00 | PEA #00000000 + 1160 | 1 SMBDEMO.S 405 | Macro | 00 | | 0 | 00/03C7 | _TCPIPConnect ; make sure marinetti is connected + 1161 | 1 SMBDEMO.S 405 | Code | 00 | | 3 | 00/03C7 : A2 36 12 | LDX #$1200+$36 + 1162 | 1 SMBDEMO.S 405 | Code | 00 | | 4 | 00/03CA : 22 00 00 E1 | JSL $E10000 + 1163 | 1 SMBDEMO.S 406 | Empty | 00 | | 0 | 00/03CE | + 1164 | 1 SMBDEMO.S 407 | Macro | 00 | | 0 | 00/03CE | PushLong #00000000 + 1168 | 1 SMBDEMO.S 407 | Code | 00 | | 3 | 00/03CE : F4 00 00 | PEA #^#00000000 + 1175 | 1 SMBDEMO.S 407 | Code | 00 | | 3 | 00/03D1 : F4 00 00 | PEA #00000000 + 1178 | 1 SMBDEMO.S 408 | Macro | 00 | | 0 | 00/03D4 | _TCPIPGetMyIPAddress + 1179 | 1 SMBDEMO.S 408 | Code | 00 | | 3 | 00/03D4 : A2 36 0F | LDX #$0F00+$36 + 1180 | 1 SMBDEMO.S 408 | Code | 00 | | 4 | 00/03D7 : 22 00 00 E1 | JSL $E10000 + 1181 | 1 SMBDEMO.S 409 | Code | 00 | | 1 | 00/03DB : FA | plx + 1182 | 1 SMBDEMO.S 410 | Code | 00 | | 1 | 00/03DC : 7A | ply + 1183 | 1 SMBDEMO.S 411 | Macro | 00 | | 0 | 00/03DD | PushWord #0000 + 1185 | 1 SMBDEMO.S 411 | Code | 00 | | 3 | 00/03DD : F4 00 00 | PEA #0000 + 1188 | 1 SMBDEMO.S 412 | Code | 00 | | 1 | 00/03E0 : 5A | phy + 1189 | 1 SMBDEMO.S 413 | Code | 00 | | 1 | 00/03E1 : DA | phx + 1190 | 1 SMBDEMO.S 414 | Macro | 00 | | 0 | 00/03E2 | PushLong #ascaddr + 1194 | 1 SMBDEMO.S 414 | Code | 00 | 1 >>16 | 3 | 00/03E2 : F4 00 00 | PEA #^#ascaddr + 1201 | 1 SMBDEMO.S 414 | Code | 00 | 2 | 3 | 00/03E5 : F4 CA 07 | PEA #ascaddr + 1204 | 1 SMBDEMO.S 415 | Macro | 00 | | 0 | 00/03E8 | PushWord #0000 + 1206 | 1 SMBDEMO.S 415 | Code | 00 | | 3 | 00/03E8 : F4 00 00 | PEA #0000 + 1209 | 1 SMBDEMO.S 416 | Macro | 00 | | 0 | 00/03EB | _TCPIPConvertIPToASCII ; convert our address to ASCII + 1210 | 1 SMBDEMO.S 416 | Code | 00 | | 3 | 00/03EB : A2 36 0E | LDX #$0E00+$36 + 1211 | 1 SMBDEMO.S 416 | Code | 00 | | 4 | 00/03EE : 22 00 00 E1 | JSL $E10000 + 1212 | 1 SMBDEMO.S 417 | Code | 00 | | 1 | 00/03F2 : 68 | pla + 1213 | 1 SMBDEMO.S 418 | Macro | 00 | | 0 | 00/03F3 | PushLong CTSWinPtr + 1221 | 1 SMBDEMO.S 418 | Code | 00 | 2 | 3 | 00/03F3 : AD 5D 07 | LDA CTSWinPtr+2 + 1222 | 1 SMBDEMO.S 418 | Code | 00 | | 1 | 00/03F6 : 48 | PHA + 1230 | 1 SMBDEMO.S 418 | Code | 00 | 2 | 3 | 00/03F7 : AD 5B 07 | LDA CTSWinPtr + 1231 | 1 SMBDEMO.S 418 | Code | 00 | | 1 | 00/03FA : 48 | PHA + 1233 | 1 SMBDEMO.S 419 | Macro | 00 | | 0 | 00/03FB | PushWord #1360 + 1235 | 1 SMBDEMO.S 419 | Code | 00 | | 3 | 00/03FB : F4 50 05 | PEA #1360 + 1238 | 1 SMBDEMO.S 420 | Macro | 00 | | 0 | 00/03FE | PushLong #ascaddr + 1242 | 1 SMBDEMO.S 420 | Code | 00 | 1 >>16 | 3 | 00/03FE : F4 00 00 | PEA #^#ascaddr + 1249 | 1 SMBDEMO.S 420 | Code | 00 | 2 | 3 | 00/0401 : F4 CA 07 | PEA #ascaddr + 1252 | 1 SMBDEMO.S 421 | Macro | 00 | | 0 | 00/0404 | _SetIText ; show it + 1254 | 1 SMBDEMO.S 421 | Code | 00 | | 3 | 00/0404 : A2 15 20 | LDX #$2015 ; load tool call # + 1255 | 1 SMBDEMO.S 421 | Code | 00 | | 4 | 00/0407 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1256 | 1 SMBDEMO.S 422 | Empty | 00 | | 0 | 00/040B | + 1257 | 1 SMBDEMO.S 423 | Macro | 00 | | 0 | 00/040B | CTSLoop1 PushWord #0000 ; space for result + 1259 | 1 SMBDEMO.S 423 | Code | 00 | | 3 | 00/040B : F4 00 00 | PEA #0000 + 1262 | 1 SMBDEMO.S 424 | Macro | 00 | | 0 | 00/040E | PushLong #00000000 ; nil filter + 1266 | 1 SMBDEMO.S 424 | Code | 00 | | 3 | 00/040E : F4 00 00 | PEA #^#00000000 + 1273 | 1 SMBDEMO.S 424 | Code | 00 | | 3 | 00/0411 : F4 00 00 | PEA #00000000 + 1276 | 1 SMBDEMO.S 425 | Macro | 00 | | 0 | 00/0414 | _ModalDialog + 1278 | 1 SMBDEMO.S 425 | Code | 00 | | 3 | 00/0414 : A2 15 0F | LDX #$F15 ; load tool call # + 1279 | 1 SMBDEMO.S 425 | Code | 00 | | 4 | 00/0417 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1280 | 1 SMBDEMO.S 426 | Code | 00 | | 1 | 00/041B : 68 | pla ; get item hit + 1281 | 1 SMBDEMO.S 427 | Code | 00 | | 3 | 00/041C : C9 02 00 | cmp #2 ; Cancel? + 1282 | 1 SMBDEMO.S 428 | Code | 00 | | 2 | 00/041F : F0 07 | beq CTSClose + 1283 | 1 SMBDEMO.S 429 | Code | 00 | | 3 | 00/0421 : C9 01 00 | cmp #1 ; Connect? + 1284 | 1 SMBDEMO.S 430 | Code | 00 | | 2 | 00/0424 : D0 E5 | bne CTSLoop1 + 1285 | 1 SMBDEMO.S 431 | Code | 00 | | 2 | 00/0426 : 80 10 | bra CTSConnect + 1286 | 1 SMBDEMO.S 432 | Macro | 00 | | 0 | 00/0428 | CTSClose PushLong CTSWinPtr + 1294 | 1 SMBDEMO.S 432 | Code | 00 | 2 | 3 | 00/0428 : AD 5D 07 | LDA CTSWinPtr+2 + 1295 | 1 SMBDEMO.S 432 | Code | 00 | | 1 | 00/042B : 48 | PHA + 1303 | 1 SMBDEMO.S 432 | Code | 00 | 2 | 3 | 00/042C : AD 5B 07 | LDA CTSWinPtr + 1304 | 1 SMBDEMO.S 432 | Code | 00 | | 1 | 00/042F : 48 | PHA + 1306 | 1 SMBDEMO.S 433 | Macro | 00 | | 0 | 00/0430 | _CloseDialog + 1308 | 1 SMBDEMO.S 433 | Code | 00 | | 3 | 00/0430 : A2 15 0C | LDX #$C15 ; load tool call # + 1309 | 1 SMBDEMO.S 433 | Code | 00 | | 4 | 00/0433 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1310 | 1 SMBDEMO.S 434 | Code | 00 | | 1 | 00/0437 : 60 | rts + 1311 | 1 SMBDEMO.S 435 | Macro | 00 | | 0 | 00/0438 | CTSConnect PushLong #00000000 + 1315 | 1 SMBDEMO.S 435 | Code | 00 | | 3 | 00/0438 : F4 00 00 | PEA #^#00000000 + 1322 | 1 SMBDEMO.S 435 | Code | 00 | | 3 | 00/043B : F4 00 00 | PEA #00000000 + 1325 | 1 SMBDEMO.S 436 | Macro | 00 | | 0 | 00/043E | PushLong CTSWinPtr + 1333 | 1 SMBDEMO.S 436 | Code | 00 | 2 | 3 | 00/043E : AD 5D 07 | LDA CTSWinPtr+2 + 1334 | 1 SMBDEMO.S 436 | Code | 00 | | 1 | 00/0441 : 48 | PHA + 1342 | 1 SMBDEMO.S 436 | Code | 00 | 2 | 3 | 00/0442 : AD 5B 07 | LDA CTSWinPtr + 1343 | 1 SMBDEMO.S 436 | Code | 00 | | 1 | 00/0445 : 48 | PHA + 1345 | 1 SMBDEMO.S 437 | Macro | 00 | | 0 | 00/0446 | PushWord #0001 + 1347 | 1 SMBDEMO.S 437 | Code | 00 | | 3 | 00/0446 : F4 01 00 | PEA #0001 + 1350 | 1 SMBDEMO.S 438 | Macro | 00 | | 0 | 00/0449 | _GetControlDItem + 1352 | 1 SMBDEMO.S 438 | Code | 00 | | 3 | 00/0449 : A2 15 1E | LDX #$1E15 ; load tool call # + 1353 | 1 SMBDEMO.S 438 | Code | 00 | | 4 | 00/044C : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1354 | 1 SMBDEMO.S 439 | Code | 00 | | 1 | 00/0450 : FA | plx + 1355 | 1 SMBDEMO.S 440 | Code | 00 | | 1 | 00/0451 : 7A | ply + 1356 | 1 SMBDEMO.S 441 | Macro | 00 | | 0 | 00/0452 | PushWord #255 + 1358 | 1 SMBDEMO.S 441 | Code | 00 | | 3 | 00/0452 : F4 FF 00 | PEA #255 + 1361 | 1 SMBDEMO.S 442 | Code | 00 | | 1 | 00/0455 : 5A | phy + 1362 | 1 SMBDEMO.S 443 | Code | 00 | | 1 | 00/0456 : DA | phx + 1363 | 1 SMBDEMO.S 444 | Macro | 00 | | 0 | 00/0457 | _HiliteControl ; dim/disable 'Connect' button + 1365 | 1 SMBDEMO.S 444 | Code | 00 | | 3 | 00/0457 : A2 10 11 | LDX #$1110 ; load tool call # + 1366 | 1 SMBDEMO.S 444 | Code | 00 | | 4 | 00/045A : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1367 | 1 SMBDEMO.S 445 | Empty | 00 | | 0 | 00/045E | + 1368 | 1 SMBDEMO.S 446 | Macro | 00 | | 0 | 00/045E | PushLong #00000000 + 1372 | 1 SMBDEMO.S 446 | Code | 00 | | 3 | 00/045E : F4 00 00 | PEA #^#00000000 + 1379 | 1 SMBDEMO.S 446 | Code | 00 | | 3 | 00/0461 : F4 00 00 | PEA #00000000 + 1382 | 1 SMBDEMO.S 447 | Macro | 00 | | 0 | 00/0464 | PushLong CTSWinPtr + 1390 | 1 SMBDEMO.S 447 | Code | 00 | 2 | 3 | 00/0464 : AD 5D 07 | LDA CTSWinPtr+2 + 1391 | 1 SMBDEMO.S 447 | Code | 00 | | 1 | 00/0467 : 48 | PHA + 1399 | 1 SMBDEMO.S 447 | Code | 00 | 2 | 3 | 00/0468 : AD 5B 07 | LDA CTSWinPtr + 1400 | 1 SMBDEMO.S 447 | Code | 00 | | 1 | 00/046B : 48 | PHA + 1402 | 1 SMBDEMO.S 448 | Macro | 00 | | 0 | 00/046C | PushWord #1349 + 1404 | 1 SMBDEMO.S 448 | Code | 00 | | 3 | 00/046C : F4 45 05 | PEA #1349 + 1407 | 1 SMBDEMO.S 449 | Macro | 00 | | 0 | 00/046F | _GetControlDItem + 1409 | 1 SMBDEMO.S 449 | Code | 00 | | 3 | 00/046F : A2 15 1E | LDX #$1E15 ; load tool call # + 1410 | 1 SMBDEMO.S 449 | Code | 00 | | 4 | 00/0472 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1411 | 1 SMBDEMO.S 450 | Code | 00 | | 1 | 00/0476 : FA | plx + 1412 | 1 SMBDEMO.S 451 | Code | 00 | | 1 | 00/0477 : 7A | ply + 1413 | 1 SMBDEMO.S 452 | Macro | 00 | | 0 | 00/0478 | PushWord #255 + 1415 | 1 SMBDEMO.S 452 | Code | 00 | | 3 | 00/0478 : F4 FF 00 | PEA #255 + 1418 | 1 SMBDEMO.S 453 | Code | 00 | | 1 | 00/047B : 5A | phy + 1419 | 1 SMBDEMO.S 454 | Code | 00 | | 1 | 00/047C : DA | phx + 1420 | 1 SMBDEMO.S 455 | Macro | 00 | | 0 | 00/047D | _HiliteControl ; dim/disable 'Address' text input + 1422 | 1 SMBDEMO.S 455 | Code | 00 | | 3 | 00/047D : A2 10 11 | LDX #$1110 ; load tool call # + 1423 | 1 SMBDEMO.S 455 | Code | 00 | | 4 | 00/0480 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1424 | 1 SMBDEMO.S 456 | Empty | 00 | | 0 | 00/0484 | + 1425 | 1 SMBDEMO.S 457 | Macro | 00 | | 0 | 00/0484 | PushLong CTSWinPtr + 1433 | 1 SMBDEMO.S 457 | Code | 00 | 2 | 3 | 00/0484 : AD 5D 07 | LDA CTSWinPtr+2 + 1434 | 1 SMBDEMO.S 457 | Code | 00 | | 1 | 00/0487 : 48 | PHA + 1442 | 1 SMBDEMO.S 457 | Code | 00 | 2 | 3 | 00/0488 : AD 5B 07 | LDA CTSWinPtr + 1443 | 1 SMBDEMO.S 457 | Code | 00 | | 1 | 00/048B : 48 | PHA + 1445 | 1 SMBDEMO.S 458 | Macro | 00 | | 0 | 00/048C | PushWord #1349 + 1447 | 1 SMBDEMO.S 458 | Code | 00 | | 3 | 00/048C : F4 45 05 | PEA #1349 + 1450 | 1 SMBDEMO.S 459 | Macro | 00 | | 0 | 00/048F | PushLong #fqdnptr + 1454 | 1 SMBDEMO.S 459 | Code | 00 | 1 >>16 | 3 | 00/048F : F4 00 00 | PEA #^#fqdnptr + 1461 | 1 SMBDEMO.S 459 | Code | 00 | 2 | 3 | 00/0492 : F4 5F 07 | PEA #fqdnptr + 1464 | 1 SMBDEMO.S 460 | Macro | 00 | | 0 | 00/0495 | _GetIText + 1466 | 1 SMBDEMO.S 460 | Code | 00 | | 3 | 00/0495 : A2 15 1F | LDX #$1F15 ; load tool call # + 1467 | 1 SMBDEMO.S 460 | Code | 00 | | 4 | 00/0498 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1468 | 1 SMBDEMO.S 461 | Empty | 00 | | 0 | 00/049C | + 1469 | 1 SMBDEMO.S 462 | Macro | 00 | | 0 | 00/049C | PushWord CTSText4 ; preserve old length byte (word) + 1474 | 1 SMBDEMO.S 462 | Code | 00 | 2 | 3 | 00/049C : AD 96 0A | LDA CTSText4 + 1475 | 1 SMBDEMO.S 462 | Code | 00 | | 1 | 00/049F : 48 | PHA + 1477 | 1 SMBDEMO.S 463 | Empty | 00 | | 0 | 00/04A0 | + 1478 | 1 SMBDEMO.S 464 | Code | 11 | | 2 | 00/04A0 : E2 30 | sep #$30 + 1479 | 1 SMBDEMO.S 465 | Directive | 11 | | 0 | 00/04A2 | mx %11 + 1480 | 1 SMBDEMO.S 466 | Code | 11 | 2 | 3 | 00/04A2 : AD 5F 07 | lda fqdnptr + 1481 | 1 SMBDEMO.S 467 | Code | 11 | | 1 | 00/04A5 : AA | tax + 1482 | 1 SMBDEMO.S 468 | Code | 11 | | 1 | 00/04A6 : 18 | clc + 1483 | 1 SMBDEMO.S 469 | Code | 11 | 2 | 3 | 00/04A7 : 6D 96 0A | adc CTSText4 + 1484 | 1 SMBDEMO.S 470 | Code | 11 | 2 | 3 | 00/04AA : 8D 96 0A | sta CTSText4 + 1485 | 1 SMBDEMO.S 471 | Code | 11 | 2 | 3 | 00/04AD : BD 5F 07 | hostcopy lda fqdnptr,x + 1486 | 1 SMBDEMO.S 472 | Code | 11 | 2 | 3 | 00/04B0 : 9D B1 0A | sta inhost-1,x + 1487 | 1 SMBDEMO.S 473 | Code | 11 | | 1 | 00/04B3 : CA | dex + 1488 | 1 SMBDEMO.S 474 | Code | 11 | | 2 | 00/04B4 : D0 F7 | bne hostcopy + 1489 | 1 SMBDEMO.S 475 | Code | 00 | | 2 | 00/04B6 : C2 30 | rep #$30 + 1490 | 1 SMBDEMO.S 476 | Directive | 00 | | 0 | 00/04B8 | mx %00 + 1491 | 1 SMBDEMO.S 477 | Empty | 00 | | 0 | 00/04B8 | + 1492 | 1 SMBDEMO.S 478 | Macro | 00 | | 0 | 00/04B8 | PushLong CTSWinPtr + 1500 | 1 SMBDEMO.S 478 | Code | 00 | 2 | 3 | 00/04B8 : AD 5D 07 | LDA CTSWinPtr+2 + 1501 | 1 SMBDEMO.S 478 | Code | 00 | | 1 | 00/04BB : 48 | PHA + 1509 | 1 SMBDEMO.S 478 | Code | 00 | 2 | 3 | 00/04BC : AD 5B 07 | LDA CTSWinPtr + 1510 | 1 SMBDEMO.S 478 | Code | 00 | | 1 | 00/04BF : 48 | PHA + 1512 | 1 SMBDEMO.S 479 | Macro | 00 | | 0 | 00/04C0 | PushWord #1350 + 1514 | 1 SMBDEMO.S 479 | Code | 00 | | 3 | 00/04C0 : F4 46 05 | PEA #1350 + 1517 | 1 SMBDEMO.S 480 | Macro | 00 | | 0 | 00/04C3 | PushLong #CTSText4 + 1521 | 1 SMBDEMO.S 480 | Code | 00 | 1 >>16 | 3 | 00/04C3 : F4 00 00 | PEA #^#CTSText4 + 1528 | 1 SMBDEMO.S 480 | Code | 00 | 2 | 3 | 00/04C6 : F4 96 0A | PEA #CTSText4 + 1531 | 1 SMBDEMO.S 481 | Macro | 00 | | 0 | 00/04C9 | _SetIText ; show 'resolving' status string + 1533 | 1 SMBDEMO.S 481 | Code | 00 | | 3 | 00/04C9 : A2 15 20 | LDX #$2015 ; load tool call # + 1534 | 1 SMBDEMO.S 481 | Code | 00 | | 4 | 00/04CC : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1535 | 1 SMBDEMO.S 482 | Empty | 00 | | 0 | 00/04D0 | + 1536 | 1 SMBDEMO.S 483 | Code | 00 | | 1 | 00/04D0 : 68 | pla + 1537 | 1 SMBDEMO.S 484 | Code | 00 | 2 | 3 | 00/04D1 : 8D 96 0A | sta CTSText4 + 1538 | 1 SMBDEMO.S 485 | Empty | 00 | | 0 | 00/04D4 | + 1539 | 1 SMBDEMO.S 486 | Macro | 00 | | 0 | 00/04D4 | PushWord #0000 + 1541 | 1 SMBDEMO.S 486 | Code | 00 | | 3 | 00/04D4 : F4 00 00 | PEA #0000 + 1544 | 1 SMBDEMO.S 487 | Macro | 00 | | 0 | 00/04D7 | PushWord #$F800 + 1546 | 1 SMBDEMO.S 487 | Code | 00 | | 3 | 00/04D7 : F4 00 F8 | PEA #$F800 + 1549 | 1 SMBDEMO.S 488 | Macro | 00 | | 0 | 00/04DA | PushLong #fqdnptr + 1553 | 1 SMBDEMO.S 488 | Code | 00 | 1 >>16 | 3 | 00/04DA : F4 00 00 | PEA #^#fqdnptr + 1560 | 1 SMBDEMO.S 488 | Code | 00 | 2 | 3 | 00/04DD : F4 5F 07 | PEA #fqdnptr + 1563 | 1 SMBDEMO.S 489 | Macro | 00 | | 0 | 00/04E0 | _TCPIPMangleDomainName ; mangle entered domain name + 1564 | 1 SMBDEMO.S 489 | Code | 00 | | 3 | 00/04E0 : A2 36 59 | LDX #$5900+$36 + 1565 | 1 SMBDEMO.S 489 | Code | 00 | | 4 | 00/04E3 : 22 00 00 E1 | JSL $E10000 + 1566 | 1 SMBDEMO.S 490 | Code | 00 | | 1 | 00/04E7 : 68 | pla ; port number; trash + 1567 | 1 SMBDEMO.S 491 | Empty | 00 | | 0 | 00/04E8 | + 1568 | 1 SMBDEMO.S 492 | Macro | 00 | | 0 | 00/04E8 | PushWord #0000 + 1570 | 1 SMBDEMO.S 492 | Code | 00 | | 3 | 00/04E8 : F4 00 00 | PEA #0000 + 1573 | 1 SMBDEMO.S 493 | Macro | 00 | | 0 | 00/04EB | PushLong #fqdnptr + 1577 | 1 SMBDEMO.S 493 | Code | 00 | 1 >>16 | 3 | 00/04EB : F4 00 00 | PEA #^#fqdnptr + 1584 | 1 SMBDEMO.S 493 | Code | 00 | 2 | 3 | 00/04EE : F4 5F 07 | PEA #fqdnptr + 1587 | 1 SMBDEMO.S 494 | Macro | 00 | | 0 | 00/04F1 | _TCPIPValidateIPString + 1588 | 1 SMBDEMO.S 494 | Code | 00 | | 3 | 00/04F1 : A2 36 48 | LDX #$4800+$36 + 1589 | 1 SMBDEMO.S 494 | Code | 00 | | 4 | 00/04F4 : 22 00 00 E1 | JSL $E10000 + 1590 | 1 SMBDEMO.S 495 | Code | 00 | | 1 | 00/04F8 : 68 | pla + 1591 | 1 SMBDEMO.S 496 | Code | 00 | | 2 | 00/04F9 : F0 15 | beq resolve ; engage DNS if this wasn't an ip address + 1592 | 1 SMBDEMO.S 497 | Macro | 00 | | 0 | 00/04FB | PushLong #ipaddrip + 1596 | 1 SMBDEMO.S 497 | Code | 00 | 1 >>16 | 3 | 00/04FB : F4 00 00 | PEA #^#ipaddrip + 1603 | 1 SMBDEMO.S 497 | Code | 00 | 2 | 3 | 00/04FE : F4 C6 07 | PEA #ipaddrip + 1606 | 1 SMBDEMO.S 498 | Macro | 00 | | 0 | 00/0501 | PushLong #fqdnptr + 1610 | 1 SMBDEMO.S 498 | Code | 00 | 1 >>16 | 3 | 00/0501 : F4 00 00 | PEA #^#fqdnptr + 1617 | 1 SMBDEMO.S 498 | Code | 00 | 2 | 3 | 00/0504 : F4 5F 07 | PEA #fqdnptr + 1620 | 1 SMBDEMO.S 499 | Macro | 00 | | 0 | 00/0507 | _TCPIPConvertIPToHex ; else just convert to long + 1621 | 1 SMBDEMO.S 499 | Code | 00 | | 3 | 00/0507 : A2 36 0D | LDX #$0D00+$36 + 1622 | 1 SMBDEMO.S 499 | Code | 00 | | 4 | 00/050A : 22 00 00 E1 | JSL $E10000 + 1623 | 1 SMBDEMO.S 500 | Code | 00 | | 2 | 00/050E : 80 7F | bra Connect ; and on with the show + 1624 | 1 SMBDEMO.S 501 | Empty | 00 | | 0 | 00/0510 | + 1625 | 1 SMBDEMO.S 502 | Macro | 00 | | 0 | 00/0510 | resolve PushLong #fqdnptr + 1629 | 1 SMBDEMO.S 502 | Code | 00 | 1 >>16 | 3 | 00/0510 : F4 00 00 | PEA #^#fqdnptr + 1636 | 1 SMBDEMO.S 502 | Code | 00 | 2 | 3 | 00/0513 : F4 5F 07 | PEA #fqdnptr + 1639 | 1 SMBDEMO.S 503 | Macro | 00 | | 0 | 00/0516 | PushLong #ipaddr + 1643 | 1 SMBDEMO.S 503 | Code | 00 | 1 >>16 | 3 | 00/0516 : F4 00 00 | PEA #^#ipaddr + 1650 | 1 SMBDEMO.S 503 | Code | 00 | 2 | 3 | 00/0519 : F4 C4 07 | PEA #ipaddr + 1653 | 1 SMBDEMO.S 504 | Macro | 00 | | 0 | 00/051C | _TCPIPDNRNameToIP ; resolve fqdn + 1654 | 1 SMBDEMO.S 504 | Code | 00 | | 3 | 00/051C : A2 36 21 | LDX #$2100+$36 + 1655 | 1 SMBDEMO.S 504 | Code | 00 | | 4 | 00/051F : 22 00 00 E1 | JSL $E10000 + 1656 | 1 SMBDEMO.S 505 | Macro | 00 | | 0 | 00/0523 | ResolvLoop PushWord #0000 ; check for mouse events (cancel) + 1658 | 1 SMBDEMO.S 505 | Code | 00 | | 3 | 00/0523 : F4 00 00 | PEA #0000 + 1661 | 1 SMBDEMO.S 506 | Macro | 00 | | 0 | 00/0526 | PushWord #$0006 ; with _EventAvail + 1663 | 1 SMBDEMO.S 506 | Code | 00 | | 3 | 00/0526 : F4 06 00 | PEA #$0006 + 1666 | 1 SMBDEMO.S 507 | Macro | 00 | | 0 | 00/0529 | PushLong #EventRec ; because _ModalDialog will block + 1670 | 1 SMBDEMO.S 507 | Code | 00 | 1 >>16 | 3 | 00/0529 : F4 00 00 | PEA #^#EventRec + 1677 | 1 SMBDEMO.S 507 | Code | 00 | 2 | 3 | 00/052C : F4 31 09 | PEA #EventRec + 1680 | 1 SMBDEMO.S 508 | Macro | 00 | | 0 | 00/052F | _EventAvail + 1682 | 1 SMBDEMO.S 508 | Code | 00 | | 3 | 00/052F : A2 06 0B | LDX #$B06 ; load tool call # + 1683 | 1 SMBDEMO.S 508 | Code | 00 | | 4 | 00/0532 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1684 | 1 SMBDEMO.S 509 | Code | 00 | | 1 | 00/0536 : 68 | pla + 1685 | 1 SMBDEMO.S 510 | Code | 00 | | 2 | 00/0537 : F0 16 | beq noevent + 1686 | 1 SMBDEMO.S 511 | Macro | 00 | | 0 | 00/0539 | PushWord #0000 + 1688 | 1 SMBDEMO.S 511 | Code | 00 | | 3 | 00/0539 : F4 00 00 | PEA #0000 + 1691 | 1 SMBDEMO.S 512 | Macro | 00 | | 0 | 00/053C | PushLong #00000000 + 1695 | 1 SMBDEMO.S 512 | Code | 00 | | 3 | 00/053C : F4 00 00 | PEA #^#00000000 + 1702 | 1 SMBDEMO.S 512 | Code | 00 | | 3 | 00/053F : F4 00 00 | PEA #00000000 + 1705 | 1 SMBDEMO.S 513 | Macro | 00 | | 0 | 00/0542 | _ModalDialog + 1707 | 1 SMBDEMO.S 513 | Code | 00 | | 3 | 00/0542 : A2 15 0F | LDX #$F15 ; load tool call # + 1708 | 1 SMBDEMO.S 513 | Code | 00 | | 4 | 00/0545 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1709 | 1 SMBDEMO.S 514 | Code | 00 | | 1 | 00/0549 : 68 | pla + 1710 | 1 SMBDEMO.S 515 | Code | 00 | | 3 | 00/054A : C9 02 00 | cmp #2 + 1711 | 1 SMBDEMO.S 516 | Code | 00 | | 2 | 00/054D : F0 16 | beq CTSClose2 + 1712 | 1 SMBDEMO.S 517 | Macro | 00 | | 0 | 00/054F | noevent _TCPIPPoll + 1713 | 1 SMBDEMO.S 517 | Code | 00 | | 3 | 00/054F : A2 36 22 | LDX #$2200+$36 + 1714 | 1 SMBDEMO.S 517 | Code | 00 | | 4 | 00/0552 : 22 00 00 E1 | JSL $E10000 + 1715 | 1 SMBDEMO.S 518 | Code | 00 | 2 | 3 | 00/0556 : AD C4 07 | lda ipaddr + 1716 | 1 SMBDEMO.S 519 | Code | 00 | | 3 | 00/0559 : C9 01 00 | cmp #$0001 + 1717 | 1 SMBDEMO.S 520 | Code | 00 | | 2 | 00/055C : F0 31 | beq Connect ; continue to Connect if resolved okay + 1718 | 1 SMBDEMO.S 521 | Code | 00 | | 3 | 00/055E : C9 00 00 | cmp #$0000 + 1719 | 1 SMBDEMO.S 522 | Code | 00 | | 2 | 00/0561 : F0 C0 | beq ResolvLoop ; pending; stay in 'Resolving' loop + 1720 | 1 SMBDEMO.S 523 | Code | 00 | | 2 | 00/0563 : 80 10 | bra CTSBadDNS + 1721 | 1 SMBDEMO.S 524 | Macro | 00 | | 0 | 00/0565 | CTSClose2 PushLong CTSWinPtr + 1729 | 1 SMBDEMO.S 524 | Code | 00 | 2 | 3 | 00/0565 : AD 5D 07 | LDA CTSWinPtr+2 + 1730 | 1 SMBDEMO.S 524 | Code | 00 | | 1 | 00/0568 : 48 | PHA + 1738 | 1 SMBDEMO.S 524 | Code | 00 | 2 | 3 | 00/0569 : AD 5B 07 | LDA CTSWinPtr + 1739 | 1 SMBDEMO.S 524 | Code | 00 | | 1 | 00/056C : 48 | PHA + 1741 | 1 SMBDEMO.S 525 | Macro | 00 | | 0 | 00/056D | _CloseDialog + 1743 | 1 SMBDEMO.S 525 | Code | 00 | | 3 | 00/056D : A2 15 0C | LDX #$C15 ; load tool call # + 1744 | 1 SMBDEMO.S 525 | Code | 00 | | 4 | 00/0570 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1745 | 1 SMBDEMO.S 526 | Code | 00 | | 1 | 00/0574 : 60 | rts + 1746 | 1 SMBDEMO.S 527 | Macro | 00 | | 0 | 00/0575 | CTSBadDNS PushLong CTSWinPtr + 1754 | 1 SMBDEMO.S 527 | Code | 00 | 2 | 3 | 00/0575 : AD 5D 07 | LDA CTSWinPtr+2 + 1755 | 1 SMBDEMO.S 527 | Code | 00 | | 1 | 00/0578 : 48 | PHA + 1763 | 1 SMBDEMO.S 527 | Code | 00 | 2 | 3 | 00/0579 : AD 5B 07 | LDA CTSWinPtr + 1764 | 1 SMBDEMO.S 527 | Code | 00 | | 1 | 00/057C : 48 | PHA + 1766 | 1 SMBDEMO.S 528 | Macro | 00 | | 0 | 00/057D | PushWord #1350 + 1768 | 1 SMBDEMO.S 528 | Code | 00 | | 3 | 00/057D : F4 46 05 | PEA #1350 + 1771 | 1 SMBDEMO.S 529 | Macro | 00 | | 0 | 00/0580 | PushLong #CTSText5 + 1775 | 1 SMBDEMO.S 529 | Code | 00 | 1 >>16 | 3 | 00/0580 : F4 00 00 | PEA #^#CTSText5 + 1782 | 1 SMBDEMO.S 529 | Code | 00 | 2 | 3 | 00/0583 : F4 17 0B | PEA #CTSText5 + 1785 | 1 SMBDEMO.S 530 | Macro | 00 | | 0 | 00/0586 | _SetIText + 1787 | 1 SMBDEMO.S 530 | Code | 00 | | 3 | 00/0586 : A2 15 20 | LDX #$2015 ; load tool call # + 1788 | 1 SMBDEMO.S 530 | Code | 00 | | 4 | 00/0589 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1789 | 1 SMBDEMO.S 531 | Code | 00 | | 2 | 00/058D : 80 D6 | bra CTSClose2 + 1790 | 1 SMBDEMO.S 532 | Empty | 00 | | 0 | 00/058F | + 1791 | 1 SMBDEMO.S 533 | Macro | 00 | | 0 | 00/058F | Connect PushWord #0000 + 1793 | 1 SMBDEMO.S 533 | Code | 00 | | 3 | 00/058F : F4 00 00 | PEA #0000 + 1796 | 1 SMBDEMO.S 534 | Macro | 00 | | 0 | 00/0592 | PushLong ipaddrip + 1804 | 1 SMBDEMO.S 534 | Code | 00 | 2 | 3 | 00/0592 : AD C8 07 | LDA ipaddrip+2 + 1805 | 1 SMBDEMO.S 534 | Code | 00 | | 1 | 00/0595 : 48 | PHA + 1813 | 1 SMBDEMO.S 534 | Code | 00 | 2 | 3 | 00/0596 : AD C6 07 | LDA ipaddrip + 1814 | 1 SMBDEMO.S 534 | Code | 00 | | 1 | 00/0599 : 48 | PHA + 1816 | 1 SMBDEMO.S 535 | Macro | 00 | | 0 | 00/059A | PushLong #destaddr + 1820 | 1 SMBDEMO.S 535 | Code | 00 | 1 >>16 | 3 | 00/059A : F4 00 00 | PEA #^#destaddr + 1827 | 1 SMBDEMO.S 535 | Code | 00 | 2 | 3 | 00/059D : F4 DA 07 | PEA #destaddr + 1830 | 1 SMBDEMO.S 536 | Macro | 00 | | 0 | 00/05A0 | PushWord #0000 + 1832 | 1 SMBDEMO.S 536 | Code | 00 | | 3 | 00/05A0 : F4 00 00 | PEA #0000 + 1835 | 1 SMBDEMO.S 537 | Macro | 00 | | 0 | 00/05A3 | _TCPIPConvertIPToASCII + 1836 | 1 SMBDEMO.S 537 | Code | 00 | | 3 | 00/05A3 : A2 36 0E | LDX #$0E00+$36 + 1837 | 1 SMBDEMO.S 537 | Code | 00 | | 4 | 00/05A6 : 22 00 00 E1 | JSL $E10000 + 1838 | 1 SMBDEMO.S 538 | Code | 00 | | 1 | 00/05AA : 68 | pla + 1839 | 1 SMBDEMO.S 539 | Empty | 00 | | 0 | 00/05AB | + 1840 | 1 SMBDEMO.S 540 | Macro | 00 | | 0 | 00/05AB | PushWord CTSText6 ; preserve old length byte (word) + 1845 | 1 SMBDEMO.S 540 | Code | 00 | 2 | 3 | 00/05AB : AD 32 0B | LDA CTSText6 + 1846 | 1 SMBDEMO.S 540 | Code | 00 | | 1 | 00/05AE : 48 | PHA + 1848 | 1 SMBDEMO.S 541 | Empty | 00 | | 0 | 00/05AF | + 1849 | 1 SMBDEMO.S 542 | Code | 11 | | 2 | 00/05AF : E2 30 | sep #$30 + 1850 | 1 SMBDEMO.S 543 | Directive | 11 | | 0 | 00/05B1 | mx %11 + 1851 | 1 SMBDEMO.S 544 | Code | 11 | 2 | 3 | 00/05B1 : AD DA 07 | lda destaddr + 1852 | 1 SMBDEMO.S 545 | Code | 11 | | 1 | 00/05B4 : AA | tax + 1853 | 1 SMBDEMO.S 546 | Code | 11 | | 1 | 00/05B5 : 18 | clc + 1854 | 1 SMBDEMO.S 547 | Code | 11 | 2 | 3 | 00/05B6 : 6D 32 0B | adc CTSText6 + 1855 | 1 SMBDEMO.S 548 | Code | 11 | 2 | 3 | 00/05B9 : 8D 32 0B | sta CTSText6 + 1856 | 1 SMBDEMO.S 549 | Code | 11 | 2 | 3 | 00/05BC : BD DA 07 | ipcopy lda destaddr,x + 1857 | 1 SMBDEMO.S 550 | Code | 11 | 2 | 3 | 00/05BF : 9D 48 0B | sta ascdest-1,x + 1858 | 1 SMBDEMO.S 551 | Code | 11 | | 1 | 00/05C2 : CA | dex + 1859 | 1 SMBDEMO.S 552 | Code | 11 | | 2 | 00/05C3 : D0 F7 | bne ipcopy + 1860 | 1 SMBDEMO.S 553 | Code | 00 | | 2 | 00/05C5 : C2 30 | rep #$30 + 1861 | 1 SMBDEMO.S 554 | Directive | 00 | | 0 | 00/05C7 | mx %00 + 1862 | 1 SMBDEMO.S 555 | Empty | 00 | | 0 | 00/05C7 | + 1863 | 1 SMBDEMO.S 556 | Macro | 00 | | 0 | 00/05C7 | PushLong CTSWinPtr + 1871 | 1 SMBDEMO.S 556 | Code | 00 | 2 | 3 | 00/05C7 : AD 5D 07 | LDA CTSWinPtr+2 + 1872 | 1 SMBDEMO.S 556 | Code | 00 | | 1 | 00/05CA : 48 | PHA + 1880 | 1 SMBDEMO.S 556 | Code | 00 | 2 | 3 | 00/05CB : AD 5B 07 | LDA CTSWinPtr + 1881 | 1 SMBDEMO.S 556 | Code | 00 | | 1 | 00/05CE : 48 | PHA + 1883 | 1 SMBDEMO.S 557 | Macro | 00 | | 0 | 00/05CF | PushWord #1350 + 1885 | 1 SMBDEMO.S 557 | Code | 00 | | 3 | 00/05CF : F4 46 05 | PEA #1350 + 1888 | 1 SMBDEMO.S 558 | Macro | 00 | | 0 | 00/05D2 | PushLong #CTSText6 + 1892 | 1 SMBDEMO.S 558 | Code | 00 | 1 >>16 | 3 | 00/05D2 : F4 00 00 | PEA #^#CTSText6 + 1899 | 1 SMBDEMO.S 558 | Code | 00 | 2 | 3 | 00/05D5 : F4 32 0B | PEA #CTSText6 + 1902 | 1 SMBDEMO.S 559 | Macro | 00 | | 0 | 00/05D8 | _SetIText ; change status to 'Connecting' + 1904 | 1 SMBDEMO.S 559 | Code | 00 | | 3 | 00/05D8 : A2 15 20 | LDX #$2015 ; load tool call # + 1905 | 1 SMBDEMO.S 559 | Code | 00 | | 4 | 00/05DB : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 1906 | 1 SMBDEMO.S 560 | Empty | 00 | | 0 | 00/05DF | + 1907 | 1 SMBDEMO.S 561 | Code | 00 | | 1 | 00/05DF : 68 | pla + 1908 | 1 SMBDEMO.S 562 | Code | 00 | 2 | 3 | 00/05E0 : 8D 32 0B | sta CTSText6 ; restore length byte + 1909 | 1 SMBDEMO.S 563 | Empty | 00 | | 0 | 00/05E3 | + 1910 | 1 SMBDEMO.S 564 | Macro | 00 | | 0 | 00/05E3 | PushWord #0000 ; space for result + 1912 | 1 SMBDEMO.S 564 | Code | 00 | | 3 | 00/05E3 : F4 00 00 | PEA #0000 + 1915 | 1 SMBDEMO.S 565 | Macro | 00 | | 0 | 00/05E6 | PushWord {$0} ; our Memory Manager handle + 1920 | 1 SMBDEMO.S 565 | Code | 00 | | 2 | 00/05E6 : A5 00 | LDA {$0} + 1921 | 1 SMBDEMO.S 565 | Code | 00 | | 1 | 00/05E8 : 48 | PHA + 1923 | 1 SMBDEMO.S 566 | Macro | 00 | | 0 | 00/05E9 | PushLong ipaddrip ; ipaddress to connect to + 1931 | 1 SMBDEMO.S 566 | Code | 00 | 2 | 3 | 00/05E9 : AD C8 07 | LDA ipaddrip+2 + 1932 | 1 SMBDEMO.S 566 | Code | 00 | | 1 | 00/05EC : 48 | PHA + 1940 | 1 SMBDEMO.S 566 | Code | 00 | 2 | 3 | 00/05ED : AD C6 07 | LDA ipaddrip + 1941 | 1 SMBDEMO.S 566 | Code | 00 | | 1 | 00/05F0 : 48 | PHA + 1943 | 1 SMBDEMO.S 567 | Macro | 00 | | 0 | 00/05F1 | PushWord #0445 ; try port 445 first + 1945 | 1 SMBDEMO.S 567 | Code | 00 | | 3 | 00/05F1 : F4 BD 01 | PEA #0445 + 1948 | 1 SMBDEMO.S 568 | Macro | 00 | | 0 | 00/05F4 | PushWord #0000 ; default TOS: 0000 + 1950 | 1 SMBDEMO.S 568 | Code | 00 | | 3 | 00/05F4 : F4 00 00 | PEA #0000 + 1953 | 1 SMBDEMO.S 569 | Macro | 00 | | 0 | 00/05F7 | PushWord #$0040 ; default TTL: 64 + 1955 | 1 SMBDEMO.S 569 | Code | 00 | | 3 | 00/05F7 : F4 40 00 | PEA #$0040 + 1958 | 1 SMBDEMO.S 570 | Macro | 00 | | 0 | 00/05FA | _TCPIPLogin + 1959 | 1 SMBDEMO.S 570 | Code | 00 | | 3 | 00/05FA : A2 36 23 | LDX #$2300+$36 + 1960 | 1 SMBDEMO.S 570 | Code | 00 | | 4 | 00/05FD : 22 00 00 E1 | JSL $E10000 + 1961 | 1 SMBDEMO.S 571 | Code | 00 | | 1 | 00/0601 : 68 | pla + 1962 | 1 SMBDEMO.S 572 | Code | 00 | 2 | 3 | 00/0602 : 8D 55 07 | sta MyIPID + 1963 | 1 SMBDEMO.S 573 | Empty | 00 | | 0 | 00/0605 | + 1964 | 1 SMBDEMO.S 574 | Macro | 00 | | 0 | 00/0605 | PushWord #$0000 + 1966 | 1 SMBDEMO.S 574 | Code | 00 | | 3 | 00/0605 : F4 00 00 | PEA #$0000 + 1969 | 1 SMBDEMO.S 575 | Macro | 00 | | 0 | 00/0608 | PushWord MyIPID + 1974 | 1 SMBDEMO.S 575 | Code | 00 | 2 | 3 | 00/0608 : AD 55 07 | LDA MyIPID + 1975 | 1 SMBDEMO.S 575 | Code | 00 | | 1 | 00/060B : 48 | PHA + 1977 | 1 SMBDEMO.S 576 | Macro | 00 | | 0 | 00/060C | _TCPIPOpenTCP + 1978 | 1 SMBDEMO.S 576 | Code | 00 | | 3 | 00/060C : A2 36 2C | LDX #$2C00+$36 + 1979 | 1 SMBDEMO.S 576 | Code | 00 | | 4 | 00/060F : 22 00 00 E1 | JSL $E10000 + 1980 | 1 SMBDEMO.S 577 | Code | 00 | | 1 | 00/0613 : 68 | pla + 1981 | 1 SMBDEMO.S 578 | Code | 00 | | 2 | 00/0614 : F0 03 | beq ConnectLoop + 1982 | 1 SMBDEMO.S 579 | Empty | 00 | | 0 | 00/0616 | + 1983 | 1 SMBDEMO.S 580 | Code | 00 | 2 | 3 | 00/0616 : 4C FB 06 | jmp CTSClose3 + 1984 | 1 SMBDEMO.S 581 | Empty | 00 | | 0 | 00/0619 | + 1985 | 1 SMBDEMO.S 582 | Macro | 00 | | 0 | 00/0619 | ConnectLoop PushWord #0000 + 1987 | 1 SMBDEMO.S 582 | Code | 00 | | 3 | 00/0619 : F4 00 00 | PEA #0000 + 1990 | 1 SMBDEMO.S 583 | Macro | 00 | | 0 | 00/061C | PushWord #$0006 + 1992 | 1 SMBDEMO.S 583 | Code | 00 | | 3 | 00/061C : F4 06 00 | PEA #$0006 + 1995 | 1 SMBDEMO.S 584 | Macro | 00 | | 0 | 00/061F | PushLong #EventRec + 1999 | 1 SMBDEMO.S 584 | Code | 00 | 1 >>16 | 3 | 00/061F : F4 00 00 | PEA #^#EventRec + 2006 | 1 SMBDEMO.S 584 | Code | 00 | 2 | 3 | 00/0622 : F4 31 09 | PEA #EventRec + 2009 | 1 SMBDEMO.S 585 | Macro | 00 | | 0 | 00/0625 | _EventAvail + 2011 | 1 SMBDEMO.S 585 | Code | 00 | | 3 | 00/0625 : A2 06 0B | LDX #$B06 ; load tool call # + 2012 | 1 SMBDEMO.S 585 | Code | 00 | | 4 | 00/0628 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2013 | 1 SMBDEMO.S 586 | Code | 00 | | 1 | 00/062C : 68 | pla + 2014 | 1 SMBDEMO.S 587 | Code | 00 | | 2 | 00/062D : F0 19 | beq noevent2 + 2015 | 1 SMBDEMO.S 588 | Macro | 00 | | 0 | 00/062F | PushWord #0000 ; space for result + 2017 | 1 SMBDEMO.S 588 | Code | 00 | | 3 | 00/062F : F4 00 00 | PEA #0000 + 2020 | 1 SMBDEMO.S 589 | Macro | 00 | | 0 | 00/0632 | PushLong #00000000 ; nil filter procedure + 2024 | 1 SMBDEMO.S 589 | Code | 00 | | 3 | 00/0632 : F4 00 00 | PEA #^#00000000 + 2031 | 1 SMBDEMO.S 589 | Code | 00 | | 3 | 00/0635 : F4 00 00 | PEA #00000000 + 2034 | 1 SMBDEMO.S 590 | Macro | 00 | | 0 | 00/0638 | _ModalDialog + 2036 | 1 SMBDEMO.S 590 | Code | 00 | | 3 | 00/0638 : A2 15 0F | LDX #$F15 ; load tool call # + 2037 | 1 SMBDEMO.S 590 | Code | 00 | | 4 | 00/063B : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2038 | 1 SMBDEMO.S 591 | Code | 00 | | 1 | 00/063F : 68 | pla + 2039 | 1 SMBDEMO.S 592 | Code | 00 | | 3 | 00/0640 : C9 02 00 | cmp #2 + 2040 | 1 SMBDEMO.S 593 | Code | 00 | | 2 | 00/0643 : D0 03 | bne noevent2 + 2041 | 1 SMBDEMO.S 594 | Code | 00 | 2 | 3 | 00/0645 : 4C FB 06 | jmp CTSClose3 + 2042 | 1 SMBDEMO.S 595 | Macro | 00 | | 0 | 00/0648 | noevent2 _TCPIPPoll + 2043 | 1 SMBDEMO.S 595 | Code | 00 | | 3 | 00/0648 : A2 36 22 | LDX #$2200+$36 + 2044 | 1 SMBDEMO.S 595 | Code | 00 | | 4 | 00/064B : 22 00 00 E1 | JSL $E10000 + 2045 | 1 SMBDEMO.S 596 | Macro | 00 | | 0 | 00/064F | PushWord #0000 + 2047 | 1 SMBDEMO.S 596 | Code | 00 | | 3 | 00/064F : F4 00 00 | PEA #0000 + 2050 | 1 SMBDEMO.S 597 | Macro | 00 | | 0 | 00/0652 | PushWord MyIPID + 2055 | 1 SMBDEMO.S 597 | Code | 00 | 2 | 3 | 00/0652 : AD 55 07 | LDA MyIPID + 2056 | 1 SMBDEMO.S 597 | Code | 00 | | 1 | 00/0655 : 48 | PHA + 2058 | 1 SMBDEMO.S 598 | Macro | 00 | | 0 | 00/0656 | PushLong #statbuf + 2062 | 1 SMBDEMO.S 598 | Code | 00 | 1 >>16 | 3 | 00/0656 : F4 00 00 | PEA #^#statbuf + 2069 | 1 SMBDEMO.S 598 | Code | 00 | 2 | 3 | 00/0659 : F4 EA 07 | PEA #statbuf + 2072 | 1 SMBDEMO.S 599 | Macro | 00 | | 0 | 00/065C | _TCPIPStatusTCP + 2073 | 1 SMBDEMO.S 599 | Code | 00 | | 3 | 00/065C : A2 36 31 | LDX #$3100+$36 + 2074 | 1 SMBDEMO.S 599 | Code | 00 | | 4 | 00/065F : 22 00 00 E1 | JSL $E10000 + 2075 | 1 SMBDEMO.S 600 | Code | 00 | | 1 | 00/0663 : 68 | pla + 2076 | 1 SMBDEMO.S 601 | Code | 00 | | 2 | 00/0664 : F0 03 | beq notbroke + 2077 | 1 SMBDEMO.S 602 | Code | 00 | 2 | 3 | 00/0666 : 4C FB 06 | jmp CTSClose3 ; something broke + 2078 | 1 SMBDEMO.S 603 | Code | 00 | 2 | 3 | 00/0669 : AD EA 07 | notbroke lda statbuf + 2079 | 1 SMBDEMO.S 604 | Code | 00 | | 3 | 00/066C : C9 04 00 | cmp #$0004 + 2080 | 1 SMBDEMO.S 605 | Code | 00 | | 2 | 00/066F : F0 07 | beq estab + 2081 | 1 SMBDEMO.S 606 | Code | 00 | | 3 | 00/0671 : C9 00 00 | cmp #$0000 + 2082 | 1 SMBDEMO.S 607 | Code | 00 | | 2 | 00/0674 : F0 6D | beq closed + 2083 | 1 SMBDEMO.S 608 | Code | 00 | | 2 | 00/0676 : 80 A1 | bra ConnectLoop + 2084 | 1 SMBDEMO.S 609 | Empty | 00 | | 0 | 00/0678 | + 2085 | 1 SMBDEMO.S 610 | Macro | 00 | | 0 | 00/0678 | estab PushLong CTSWinPtr + 2093 | 1 SMBDEMO.S 610 | Code | 00 | 2 | 3 | 00/0678 : AD 5D 07 | LDA CTSWinPtr+2 + 2094 | 1 SMBDEMO.S 610 | Code | 00 | | 1 | 00/067B : 48 | PHA + 2102 | 1 SMBDEMO.S 610 | Code | 00 | 2 | 3 | 00/067C : AD 5B 07 | LDA CTSWinPtr + 2103 | 1 SMBDEMO.S 610 | Code | 00 | | 1 | 00/067F : 48 | PHA + 2105 | 1 SMBDEMO.S 611 | Macro | 00 | | 0 | 00/0680 | PushWord #1350 + 2107 | 1 SMBDEMO.S 611 | Code | 00 | | 3 | 00/0680 : F4 46 05 | PEA #1350 + 2110 | 1 SMBDEMO.S 612 | Macro | 00 | | 0 | 00/0683 | PushLong #CTSText9 + 2114 | 1 SMBDEMO.S 612 | Code | 00 | 1 >>16 | 3 | 00/0683 : F4 00 00 | PEA #^#CTSText9 + 2121 | 1 SMBDEMO.S 612 | Code | 00 | 2 | 3 | 00/0686 : F4 5D 0B | PEA #CTSText9 + 2124 | 1 SMBDEMO.S 613 | Macro | 00 | | 0 | 00/0689 | _SetIText + 2126 | 1 SMBDEMO.S 613 | Code | 00 | | 3 | 00/0689 : A2 15 20 | LDX #$2015 ; load tool call # + 2127 | 1 SMBDEMO.S 613 | Code | 00 | | 4 | 00/068C : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2128 | 1 SMBDEMO.S 614 | Empty | 00 | | 0 | 00/0690 | + 2129 | 1 SMBDEMO.S 615 | Macro | 00 | | 0 | 00/0690 | PushLong MyIPID + 2137 | 1 SMBDEMO.S 615 | Code | 00 | 2 | 3 | 00/0690 : AD 57 07 | LDA MyIPID+2 + 2138 | 1 SMBDEMO.S 615 | Code | 00 | | 1 | 00/0693 : 48 | PHA + 2146 | 1 SMBDEMO.S 615 | Code | 00 | 2 | 3 | 00/0694 : AD 55 07 | LDA MyIPID + 2147 | 1 SMBDEMO.S 615 | Code | 00 | | 1 | 00/0697 : 48 | PHA + 2149 | 1 SMBDEMO.S 616 | Code | 00 | 2 | 3 | 00/0698 : 20 57 4C | jsr SMB_Init ; feed our Marinetti IPID into SMB system + 2150 | 1 SMBDEMO.S 617 | Macro | 00 | | 0 | 00/069B | PullLong MySMBHandle ; get back our SMB handle + 2153 | 1 SMBDEMO.S 617 | Code | 00 | | 1 | 00/069B : 68 | PLA + 2155 | 1 SMBDEMO.S 617 | Code | 00 | 2 | 3 | 00/069C : 8D 57 07 | STA MySMBHandle + 2160 | 1 SMBDEMO.S 617 | Code | 00 | | 1 | 00/069F : 68 | PLA + 2162 | 1 SMBDEMO.S 617 | Code | 00 | 2 | 3 | 00/06A0 : 8D 59 07 | STA MySMBHandle+2 + 2168 | 1 SMBDEMO.S 618 | Empty | 00 | | 0 | 00/06A3 | + 2169 | 1 SMBDEMO.S 619 | Macro | 00 | | 0 | 00/06A3 | PushLong MySMBHandle ; SMB_Negotiate wants our SMB handle + 2177 | 1 SMBDEMO.S 619 | Code | 00 | 2 | 3 | 00/06A3 : AD 59 07 | LDA MySMBHandle+2 + 2178 | 1 SMBDEMO.S 619 | Code | 00 | | 1 | 00/06A6 : 48 | PHA + 2186 | 1 SMBDEMO.S 619 | Code | 00 | 2 | 3 | 00/06A7 : AD 57 07 | LDA MySMBHandle + 2187 | 1 SMBDEMO.S 619 | Code | 00 | | 1 | 00/06AA : 48 | PHA + 2189 | 1 SMBDEMO.S 620 | Code | 00 | 2 | 3 | 00/06AB : 20 65 4C | jsr SMB_Negotiate ; and hopefully we send a SMB Negotiate Protocol Request and get a response + 2190 | 1 SMBDEMO.S 621 | Empty | 00 | | 0 | 00/06AE | + 2191 | 1 SMBDEMO.S 622 | Macro | 00 | | 0 | 00/06AE | sendloop2 PushWord #0000 + 2193 | 1 SMBDEMO.S 622 | Code | 00 | | 3 | 00/06AE : F4 00 00 | PEA #0000 + 2196 | 1 SMBDEMO.S 623 | Macro | 00 | | 0 | 00/06B1 | PushWord #$0006 + 2198 | 1 SMBDEMO.S 623 | Code | 00 | | 3 | 00/06B1 : F4 06 00 | PEA #$0006 + 2201 | 1 SMBDEMO.S 624 | Macro | 00 | | 0 | 00/06B4 | PushLong #EventRec + 2205 | 1 SMBDEMO.S 624 | Code | 00 | 1 >>16 | 3 | 00/06B4 : F4 00 00 | PEA #^#EventRec + 2212 | 1 SMBDEMO.S 624 | Code | 00 | 2 | 3 | 00/06B7 : F4 31 09 | PEA #EventRec + 2215 | 1 SMBDEMO.S 625 | Macro | 00 | | 0 | 00/06BA | _EventAvail + 2217 | 1 SMBDEMO.S 625 | Code | 00 | | 3 | 00/06BA : A2 06 0B | LDX #$B06 ; load tool call # + 2218 | 1 SMBDEMO.S 625 | Code | 00 | | 4 | 00/06BD : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2219 | 1 SMBDEMO.S 626 | Code | 00 | | 1 | 00/06C1 : 68 | pla + 2220 | 1 SMBDEMO.S 627 | Code | 00 | | 2 | 00/06C2 : F0 16 | beq noevent3 + 2221 | 1 SMBDEMO.S 628 | Macro | 00 | | 0 | 00/06C4 | PushWord #0000 + 2223 | 1 SMBDEMO.S 628 | Code | 00 | | 3 | 00/06C4 : F4 00 00 | PEA #0000 + 2226 | 1 SMBDEMO.S 629 | Macro | 00 | | 0 | 00/06C7 | PushLong #00000000 + 2230 | 1 SMBDEMO.S 629 | Code | 00 | | 3 | 00/06C7 : F4 00 00 | PEA #^#00000000 + 2237 | 1 SMBDEMO.S 629 | Code | 00 | | 3 | 00/06CA : F4 00 00 | PEA #00000000 + 2240 | 1 SMBDEMO.S 630 | Macro | 00 | | 0 | 00/06CD | _ModalDialog + 2242 | 1 SMBDEMO.S 630 | Code | 00 | | 3 | 00/06CD : A2 15 0F | LDX #$F15 ; load tool call # + 2243 | 1 SMBDEMO.S 630 | Code | 00 | | 4 | 00/06D0 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2244 | 1 SMBDEMO.S 631 | Code | 00 | | 1 | 00/06D4 : 68 | pla + 2245 | 1 SMBDEMO.S 632 | Code | 00 | 2 | 3 | 00/06D5 : 4C 53 0C | jmp SMB_staging_brk ; die so we can inspect datagram + 2246 | 1 SMBDEMO.S 633 | Code | 00 | | 2 | 00/06D8 : 80 21 | bra CTSClose3 + 2247 | 1 SMBDEMO.S 634 | Macro | 00 | | 0 | 00/06DA | noevent3 _TCPIPPoll + 2248 | 1 SMBDEMO.S 634 | Code | 00 | | 3 | 00/06DA : A2 36 22 | LDX #$2200+$36 + 2249 | 1 SMBDEMO.S 634 | Code | 00 | | 4 | 00/06DD : 22 00 00 E1 | JSL $E10000 + 2250 | 1 SMBDEMO.S 635 | Code | 00 | | 2 | 00/06E1 : 80 CB | bra sendloop2 + 2251 | 1 SMBDEMO.S 636 | Empty | 00 | | 0 | 00/06E3 | + 2252 | 1 SMBDEMO.S 637 | Macro | 00 | | 0 | 00/06E3 | closed PushLong CTSWinPtr + 2260 | 1 SMBDEMO.S 637 | Code | 00 | 2 | 3 | 00/06E3 : AD 5D 07 | LDA CTSWinPtr+2 + 2261 | 1 SMBDEMO.S 637 | Code | 00 | | 1 | 00/06E6 : 48 | PHA + 2269 | 1 SMBDEMO.S 637 | Code | 00 | 2 | 3 | 00/06E7 : AD 5B 07 | LDA CTSWinPtr + 2270 | 1 SMBDEMO.S 637 | Code | 00 | | 1 | 00/06EA : 48 | PHA + 2272 | 1 SMBDEMO.S 638 | Macro | 00 | | 0 | 00/06EB | PushWord #1350 + 2274 | 1 SMBDEMO.S 638 | Code | 00 | | 3 | 00/06EB : F4 46 05 | PEA #1350 + 2277 | 1 SMBDEMO.S 639 | Macro | 00 | | 0 | 00/06EE | PushLong #CTSTextA + 2281 | 1 SMBDEMO.S 639 | Code | 00 | 1 >>16 | 3 | 00/06EE : F4 00 00 | PEA #^#CTSTextA + 2288 | 1 SMBDEMO.S 639 | Code | 00 | 2 | 3 | 00/06F1 : F4 81 0B | PEA #CTSTextA + 2291 | 1 SMBDEMO.S 640 | Macro | 00 | | 0 | 00/06F4 | _SetIText + 2293 | 1 SMBDEMO.S 640 | Code | 00 | | 3 | 00/06F4 : A2 15 20 | LDX #$2015 ; load tool call # + 2294 | 1 SMBDEMO.S 640 | Code | 00 | | 4 | 00/06F7 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2295 | 1 SMBDEMO.S 641 | Empty | 00 | | 0 | 00/06FB | + 2296 | 1 SMBDEMO.S 642 | Macro | 00 | | 0 | 00/06FB | CTSClose3 PushWord #MyIPID + 2298 | 1 SMBDEMO.S 642 | Code | 00 | 2 | 3 | 00/06FB : F4 55 07 | PEA #MyIPID + 2301 | 1 SMBDEMO.S 643 | Macro | 00 | | 0 | 00/06FE | _TCPIPLogout ; get rid of our IPID + 2302 | 1 SMBDEMO.S 643 | Code | 00 | | 3 | 00/06FE : A2 36 24 | LDX #$2400+$36 + 2303 | 1 SMBDEMO.S 643 | Code | 00 | | 4 | 00/0701 : 22 00 00 E1 | JSL $E10000 + 2304 | 1 SMBDEMO.S 644 | Macro | 00 | | 0 | 00/0705 | PushLong CTSWinPtr ; and close the dialog window + 2312 | 1 SMBDEMO.S 644 | Code | 00 | 2 | 3 | 00/0705 : AD 5D 07 | LDA CTSWinPtr+2 + 2313 | 1 SMBDEMO.S 644 | Code | 00 | | 1 | 00/0708 : 48 | PHA + 2321 | 1 SMBDEMO.S 644 | Code | 00 | 2 | 3 | 00/0709 : AD 5B 07 | LDA CTSWinPtr + 2322 | 1 SMBDEMO.S 644 | Code | 00 | | 1 | 00/070C : 48 | PHA + 2324 | 1 SMBDEMO.S 645 | Macro | 00 | | 0 | 00/070D | _CloseDialog + 2326 | 1 SMBDEMO.S 645 | Code | 00 | | 3 | 00/070D : A2 15 0C | LDX #$C15 ; load tool call # + 2327 | 1 SMBDEMO.S 645 | Code | 00 | | 4 | 00/0710 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2328 | 1 SMBDEMO.S 646 | Code | 00 | | 1 | 00/0714 : 60 | rts + 2329 | 1 SMBDEMO.S 647 | Empty | 00 | | 0 | 00/0715 | + 2330 | 1 SMBDEMO.S 648 | Comment | 00 | | 0 | 00/0715 | * + 2331 | 1 SMBDEMO.S 649 | Comment | 00 | | 0 | 00/0715 | * Menu Dispatcher + 2332 | 1 SMBDEMO.S 650 | Comment | 00 | | 0 | 00/0715 | * + 2333 | 1 SMBDEMO.S 651 | Code | 00 | 2 | 3 | 00/0715 : AD 41 09 | MenuDispatch lda TaskData + 2334 | 1 SMBDEMO.S 652 | Code | 00 | | 3 | 00/0718 : 29 FF 00 | and #$00ff + 2335 | 1 SMBDEMO.S 653 | Code | 00 | | 1 | 00/071B : 0A | asl + 2336 | 1 SMBDEMO.S 654 | Code | 00 | | 1 | 00/071C : AA | tax + 2337 | 1 SMBDEMO.S 655 | Code | 00 | 2 | 3 | 00/071D : FC 36 08 | jsr (MenuDispatchTbl,x) + 2338 | 1 SMBDEMO.S 656 | Empty | 00 | | 0 | 00/0720 | + 2339 | 1 SMBDEMO.S 657 | Macro | 00 | | 0 | 00/0720 | PushWord #0000 + 2341 | 1 SMBDEMO.S 657 | Code | 00 | | 3 | 00/0720 : F4 00 00 | PEA #0000 + 2344 | 1 SMBDEMO.S 658 | Macro | 00 | | 0 | 00/0723 | PushWord TaskData+2 + 2349 | 1 SMBDEMO.S 658 | Code | 00 | 2 | 3 | 00/0723 : AD 43 09 | LDA TaskData+2 + 2350 | 1 SMBDEMO.S 658 | Code | 00 | | 1 | 00/0726 : 48 | PHA + 2352 | 1 SMBDEMO.S 659 | Macro | 00 | | 0 | 00/0727 | _HiliteMenu + 2354 | 1 SMBDEMO.S 659 | Code | 00 | | 3 | 00/0727 : A2 0F 2C | LDX #$2C0F ; load tool call # + 2355 | 1 SMBDEMO.S 659 | Code | 00 | | 4 | 00/072A : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2356 | 1 SMBDEMO.S 660 | Code | 00 | | 1 | 00/072E : 60 | rts + 2357 | 1 SMBDEMO.S 661 | Empty | 00 | | 0 | 00/072F | + 2358 | 1 SMBDEMO.S 662 | Comment | 00 | | 0 | 00/072F | * + 2359 | 1 SMBDEMO.S 663 | Comment | 00 | | 0 | 00/072F | * Information Dialog + 2360 | 1 SMBDEMO.S 664 | Comment | 00 | | 0 | 00/072F | * + 2361 | 1 SMBDEMO.S 665 | Code | 00 | | 1 | 00/072F : FA | InfoDialog plx ; preserve return address + 2362 | 1 SMBDEMO.S 666 | Macro | 00 | | 0 | 00/0730 | PullLong dialogMsg + 2365 | 1 SMBDEMO.S 666 | Code | 00 | | 1 | 00/0730 : 68 | PLA + 2367 | 1 SMBDEMO.S 666 | Code | 00 | 2 | 3 | 00/0731 : 8D 1D 0C | STA dialogMsg + 2372 | 1 SMBDEMO.S 666 | Code | 00 | | 1 | 00/0734 : 68 | PLA + 2374 | 1 SMBDEMO.S 666 | Code | 00 | 2 | 3 | 00/0735 : 8D 1F 0C | STA dialogMsg+2 + 2380 | 1 SMBDEMO.S 667 | Code | 00 | | 1 | 00/0738 : DA | phx ; put return back on stack + 2381 | 1 SMBDEMO.S 668 | Code | 00 | | 1 | 00/0739 : 48 | pha ; room for result + 2382 | 1 SMBDEMO.S 669 | Macro | 00 | | 0 | 00/073A | PushLong #OurAlert ; pointer to dialog + 2386 | 1 SMBDEMO.S 669 | Code | 00 | 1 >>16 | 3 | 00/073A : F4 00 00 | PEA #^#OurAlert + 2393 | 1 SMBDEMO.S 669 | Code | 00 | 2 | 3 | 00/073D : F4 DF 0B | PEA #OurAlert + 2396 | 1 SMBDEMO.S 670 | Macro | 00 | | 0 | 00/0740 | PushLong #$0000 + 2400 | 1 SMBDEMO.S 670 | Code | 00 | | 3 | 00/0740 : F4 00 00 | PEA #^#$0000 + 2407 | 1 SMBDEMO.S 670 | Code | 00 | | 3 | 00/0743 : F4 00 00 | PEA #$0000 + 2410 | 1 SMBDEMO.S 671 | Macro | 00 | | 0 | 00/0746 | _NoteAlert + 2412 | 1 SMBDEMO.S 671 | Code | 00 | | 3 | 00/0746 : A2 15 19 | LDX #$1915 ; load tool call # + 2413 | 1 SMBDEMO.S 671 | Code | 00 | | 4 | 00/0749 : 22 00 00 E1 | JSL $E10000 ; go to dispatcher + 2414 | 1 SMBDEMO.S 672 | Code | 00 | | 1 | 00/074D : 68 | pla ; get the item selected + 2415 | 1 SMBDEMO.S 673 | Code | 00 | | 1 | 00/074E : 60 | rts + 2416 | 1 SMBDEMO.S 674 | Empty | 00 | | 0 | 00/074F | + 2417 | 1 SMBDEMO.S 675 | Comment | 00 | | 0 | 00/074F | * + 2418 | 1 SMBDEMO.S 676 | Comment | 00 | | 0 | 00/074F | * Non-DP Variables + 2419 | 1 SMBDEMO.S 677 | Comment | 00 | | 0 | 00/074F | * + 2420 | 1 SMBDEMO.S 678 | Data | 00 | | 4 | 00/074F : 00 00 00 00 | QuitFlag dw 00,00 + 2421 | 1 SMBDEMO.S 679 | Data | 00 | | 2 | 00/0753 : 00 00 | ScreenColorByte dw 00 + 2422 | 1 SMBDEMO.S 680 | Data | 00 | | 2 | 00/0755 : 00 00 | MyIPID dw 00 ; Marinetti IPID + 2423 | 1 SMBDEMO.S 681 | Data | 00 | | 4 | 00/0757 : 00 00 00 00 | MySMBHandle dw 00,00 ; SMB driver handle + 2424 | 1 SMBDEMO.S 682 | Data | 00 | | 4 | 00/075B : 00 00 00 00 | CTSWinPtr dw 00,00 ; Connect To Server grafport ptr + 2425 | 1 SMBDEMO.S 683 | Data | 00 | | 101 | 00/075F : 00 00 00 00 | fqdnptr ds 101 ; 101 bytes for user-entered hostname + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 | + 2426 | 1 SMBDEMO.S 684 | Data | 00 | | 2 | 00/07C4 : 00 00 | ipaddr dw 00 ; DNS resolution status + 2427 | 1 SMBDEMO.S 685 | Data | 00 | | 4 | 00/07C6 : 00 00 00 00 | ipaddrip dw 00,00 ; Resolved IP address + 2428 | 1 SMBDEMO.S 686 | Data | 00 | | 16 | 00/07CA : 00 00 00 00 | ascaddr ds 16 ; My IP address, in ASCII + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + 2429 | 1 SMBDEMO.S 687 | Data | 00 | | 16 | 00/07DA : 00 00 00 00 | destaddr ds 16 ; Destination IP address, in ASCII + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + 2430 | 1 SMBDEMO.S 688 | Data | 00 | | 2 | 00/07EA : 00 00 | statbuf ds 2 ; TCP state, statbuf+0 + 2431 | 1 SMBDEMO.S 689 | Data | 00 | | 2 | 00/07EC : 00 00 | ds 2 ; ICMP error code, statbuf+2 + 2432 | 1 SMBDEMO.S 690 | Data | 00 | | 4 | 00/07EE : 00 00 00 00 | ds 4 ; sendq size, statbuf+4 + 2433 | 1 SMBDEMO.S 691 | Data | 00 | | 4 | 00/07F2 : 00 00 00 00 | ds 4 ; recvq size + 2434 | 1 SMBDEMO.S 692 | Data | 00 | | 4 | 00/07F6 : 00 00 00 00 | ds 4 ; dest ip + 2435 | 1 SMBDEMO.S 693 | Data | 00 | | 2 | 00/07FA : 00 00 | ds 2 ; dest port + 2436 | 1 SMBDEMO.S 694 | Data | 00 | | 2 | 00/07FC : 00 00 | ds 2 ; connection type + 2437 | 1 SMBDEMO.S 695 | Data | 00 | | 2 | 00/07FE : 00 00 | ds 2 ; accept count + 2438 | 1 SMBDEMO.S 696 | Empty | 00 | | 0 | 00/0800 | + 2439 | 1 SMBDEMO.S 697 | Comment | 00 | | 0 | 00/0800 | * + 2440 | 1 SMBDEMO.S 698 | Comment | 00 | | 0 | 00/0800 | * Tool List + 2441 | 1 SMBDEMO.S 699 | Comment | 00 | | 0 | 00/0800 | * + 2442 | 1 SMBDEMO.S 700 | Data | 00 | | 2 | 00/0800 : 0D 00 | ToolList dw 13 ; Tool Count + 2443 | 1 SMBDEMO.S 701 | Data | 00 | | 4 | 00/0802 : 01 00 00 00 | dw 01,00 ; Tool Locator, any vers + 2444 | 1 SMBDEMO.S 702 | Data | 00 | | 4 | 00/0806 : 02 00 00 00 | dw 02,00 ; Memory Manager, any vers + 2445 | 1 SMBDEMO.S 703 | Data | 00 | | 4 | 00/080A : 03 00 00 00 | dw 03,00 ; Misc Tools, any vers + 2446 | 1 SMBDEMO.S 704 | Data | 00 | | 4 | 00/080E : 04 00 00 00 | dw 04,00 ; QuickDraw II, any vers + 2447 | 1 SMBDEMO.S 705 | Data | 00 | | 4 | 00/0812 : 06 00 00 00 | dw 06,00 ; Event Manager, any vers + 2448 | 1 SMBDEMO.S 706 | Data | 00 | | 4 | 00/0816 : 0E 00 00 00 | dw 14,00 ; Window Manager, any vers + 2449 | 1 SMBDEMO.S 707 | Data | 00 | | 4 | 00/081A : 10 00 00 00 | dw 16,00 ; Control Manager, any vers + 2450 | 1 SMBDEMO.S 708 | Data | 00 | | 4 | 00/081E : 0F 00 00 00 | dw 15,00 ; Menu Manager, any vers + 2451 | 1 SMBDEMO.S 709 | Data | 00 | | 4 | 00/0822 : 05 00 00 00 | dw 05,00 ; Desk Manager, any vers + 2452 | 1 SMBDEMO.S 710 | Data | 00 | | 4 | 00/0826 : 08 00 00 00 | dw 08,00 ; Sound Manager, any vers + 2453 | 1 SMBDEMO.S 711 | Data | 00 | | 4 | 00/082A : 14 00 00 00 | dw 20,00 ; Line Edit, any vers + 2454 | 1 SMBDEMO.S 712 | Data | 00 | | 4 | 00/082E : 15 00 00 00 | dw 21,00 ; Dialog Manager, any vers + 2455 | 1 SMBDEMO.S 713 | Data | 00 | | 4 | 00/0832 : 36 00 00 00 | dw 54,00 ; Marinetti, any vers + 2456 | 1 SMBDEMO.S 714 | Empty | 00 | | 0 | 00/0836 | ToolListEnd + 2457 | 1 SMBDEMO.S 715 | Empty | 00 | | 0 | 00/0836 | + 2458 | 1 SMBDEMO.S 716 | Comment | 00 | | 0 | 00/0836 | * + 2459 | 1 SMBDEMO.S 717 | Comment | 00 | | 0 | 00/0836 | * Menu Structures + 2460 | 1 SMBDEMO.S 718 | Comment | 00 | | 0 | 00/0836 | * + 2461 | 1 SMBDEMO.S 719 | Empty | 00 | | 0 | 00/0836 | + 2462 | 1 SMBDEMO.S 720 | Data | 00 | 2 | 2 | 00/0836 : 44 03 | MenuDispatchTbl dw About + 2463 | 1 SMBDEMO.S 721 | Data | 00 | 2 | 2 | 00/0838 : 4E 03 | dw Quit + 2464 | 1 SMBDEMO.S 722 | Data | 00 | 2 | 2 | 00/083A : 52 03 | dw TCPIPTest + 2465 | 1 SMBDEMO.S 723 | Data | 00 | 2 | 2 | 00/083C : 79 03 | dw ConnectToSvr + 2466 | 1 SMBDEMO.S 724 | Empty | 00 | | 0 | 00/083E | + 2467 | 1 SMBDEMO.S 725 | Data | 00 | | 2 | 00/083E : 04 00 | MenuTbl dw 4 ; count + 2468 | 1 SMBDEMO.S 726 | Data | 00 | 2 | 2 | 00/0840 : 48 08 | dw Menu1 + 2469 | 1 SMBDEMO.S 727 | Data | 00 | 2 | 2 | 00/0842 : 77 08 | dw Menu2 + 2470 | 1 SMBDEMO.S 728 | Data | 00 | 2 | 2 | 00/0844 : 95 08 | dw Menu3 + 2471 | 1 SMBDEMO.S 729 | Data | 00 | 2 | 2 | 00/0846 : F0 08 | dw Menu4 + 2472 | 1 SMBDEMO.S 730 | Empty | 00 | | 0 | 00/0848 | MenuTblEnd + 2473 | 1 SMBDEMO.S 731 | Empty | 00 | | 0 | 00/0848 | + 2474 | 1 SMBDEMO.S 732 | Data | 00 | | 8 | 00/0848 : 3E 3E 40 5C | Menu1 asc '>>@\XN1'00 + | | | | | | 58 4E 31 00 | + 2475 | 1 SMBDEMO.S 733 | Data | 00 | | 32 | 00/0850 : 2D 2D 41 62 | asc '--About This Program...\N256*??'00 + | | | | | | 6F 75 74 20 | + | | | | | | 54 68 69 73 | + | | | | | | 20 50 72 6F | + | | | | | | 67 72 61 6D | + | | | | | | 2E 2E 2E 5C | + | | | | | | 4E 32 35 36 | + | | | | | | 2A 3F 3F 00 | + 2476 | 1 SMBDEMO.S 734 | Data | 00 | | 6 | 00/0870 : 2D 2D 2D 5C | asc '---\D'00 + | | | | | | 44 00 | + 2477 | 1 SMBDEMO.S 735 | Data | 00 | | 1 | 00/0876 : 3E | asc '>' + 2478 | 1 SMBDEMO.S 736 | Empty | 00 | | 0 | 00/0877 | + 2479 | 1 SMBDEMO.S 737 | Data | 00 | | 14 | 00/0877 : 3E 3E 20 20 | Menu2 asc '>> File \N2'00 + | | | | | | 46 69 6C 65 | + | | | | | | 20 20 5C 4E | + | | | | | | 32 00 | + 2480 | 1 SMBDEMO.S 738 | Data | 00 | | 15 | 00/0885 : 2D 2D 51 75 | asc '--Quit\N257*Qq'00 + | | | | | | 69 74 5C 4E | + | | | | | | 32 35 37 2A | + | | | | | | 51 71 00 | + 2481 | 1 SMBDEMO.S 739 | Data | 00 | | 1 | 00/0894 : 3E | asc '>' + 2482 | 1 SMBDEMO.S 740 | Empty | 00 | | 0 | 00/0895 | + 2483 | 1 SMBDEMO.S 741 | Data | 00 | | 15 | 00/0895 : 3E 3E 20 20 | Menu3 asc '>> Edit \N3D'00 + | | | | | | 45 64 69 74 | + | | | | | | 20 20 5C 4E | + | | | | | | 33 44 00 | + 2484 | 1 SMBDEMO.S 742 | Data | 00 | | 16 | 00/08A4 : 2D 2D 55 6E | asc '--Undo\N250V*Zz'00 + | | | | | | 64 6F 5C 4E | + | | | | | | 32 35 30 56 | + | | | | | | 2A 5A 7A 00 | + 2485 | 1 SMBDEMO.S 743 | Data | 00 | | 14 | 00/08B4 : 2D 2D 43 75 | asc '--Cut\N251*Xx'00 + | | | | | | 74 5C 4E 32 | + | | | | | | 35 31 2A 58 | + | | | | | | 78 00 | + 2486 | 1 SMBDEMO.S 744 | Data | 00 | | 15 | 00/08C2 : 2D 2D 43 6F | asc '--Copy\N252*Cc'00 + | | | | | | 70 79 5C 4E | + | | | | | | 32 35 32 2A | + | | | | | | 43 63 00 | + 2487 | 1 SMBDEMO.S 745 | Data | 00 | | 17 | 00/08D1 : 2D 2D 50 61 | asc '--Paste\N253V*Vv'00 + | | | | | | 73 74 65 5C | + | | | | | | 4E 32 35 33 | + | | | | | | 56 2A 56 76 | + | | | | | | 00 | + 2488 | 1 SMBDEMO.S 746 | Data | 00 | | 13 | 00/08E2 : 2D 2D 43 6C | asc '--Clear\N254'00 + | | | | | | 65 61 72 5C | + | | | | | | 4E 32 35 34 | + | | | | | | 00 | + 2489 | 1 SMBDEMO.S 747 | Data | 00 | | 1 | 00/08EF : 3E | asc '>' + 2490 | 1 SMBDEMO.S 748 | Empty | 00 | | 0 | 00/08F0 | + 2491 | 1 SMBDEMO.S 749 | Data | 00 | | 14 | 00/08F0 : 3E 3E 20 20 | Menu4 asc '>> Test \N4'00 + | | | | | | 54 65 73 74 | + | | | | | | 20 20 5C 4E | + | | | | | | 34 00 | + 2492 | 1 SMBDEMO.S 750 | Data | 00 | | 22 | 00/08FE : 2D 2D 54 43 | asc '--TCP/IP Test\N258*Tt'00 + | | | | | | 50 2F 49 50 | + | | | | | | 20 54 65 73 | + | | | | | | 74 5C 4E 32 | + | | | | | | 35 38 2A 54 | + | | | | | | 74 00 | + 2493 | 1 SMBDEMO.S 751 | Data | 00 | | 28 | 00/0914 : 2D 2D 43 6F | asc '--Connect to Server\N259*Uu'00 + | | | | | | 6E 6E 65 63 | + | | | | | | 74 20 74 6F | + | | | | | | 20 53 65 72 | + | | | | | | 76 65 72 5C | + | | | | | | 4E 32 35 39 | + | | | | | | 2A 55 75 00 | + 2494 | 1 SMBDEMO.S 752 | Data | 00 | | 1 | 00/0930 : 3E | asc '>' + 2495 | 1 SMBDEMO.S 753 | Empty | 00 | | 0 | 00/0931 | + 2496 | 1 SMBDEMO.S 754 | Comment | 00 | | 0 | 00/0931 | * + 2497 | 1 SMBDEMO.S 755 | Comment | 00 | | 0 | 00/0931 | * Event Record + 2498 | 1 SMBDEMO.S 756 | Comment | 00 | | 0 | 00/0931 | * + 2499 | 1 SMBDEMO.S 757 | Empty | 00 | | 0 | 00/0931 | EventRec + 2500 | 1 SMBDEMO.S 758 | Data | 00 | | 2 | 00/0931 : 00 00 | Event_What ds 2 + 2501 | 1 SMBDEMO.S 759 | Data | 00 | | 4 | 00/0933 : 00 00 00 00 | Event_Msg ds 4 + 2502 | 1 SMBDEMO.S 760 | Data | 00 | | 4 | 00/0937 : 00 00 00 00 | Event_When ds 4 + 2503 | 1 SMBDEMO.S 761 | Data | 00 | | 4 | 00/093B : 00 00 00 00 | Event_Where ds 4 + 2504 | 1 SMBDEMO.S 762 | Data | 00 | | 2 | 00/093F : 00 00 | Event_Mods ds 2 + 2505 | 1 SMBDEMO.S 763 | Data | 00 | | 4 | 00/0941 : 00 00 00 00 | TaskData ds 4 + 2506 | 1 SMBDEMO.S 764 | Data | 00 | | 4 | 00/0945 : FF 1F 00 00 | TaskMask dw $1fff,$0000 + 2507 | 1 SMBDEMO.S 765 | Empty | 00 | | 0 | 00/0949 | + 2508 | 1 SMBDEMO.S 766 | Comment | 00 | | 0 | 00/0949 | * + 2509 | 1 SMBDEMO.S 767 | Comment | 00 | | 0 | 00/0949 | * Strings + 2510 | 1 SMBDEMO.S 768 | Comment | 00 | | 0 | 00/0949 | * + 2511 | 1 SMBDEMO.S 769 | Data | 00 | | 21 | 00/0949 : 4F 6E 65 20 | OneMoment asc 'One Moment Please...'00 + | | | | | | 4D 6F 6D 65 | + | | | | | | 6E 74 20 50 | + | | | | | | 6C 65 61 73 | + | | | | | | 65 2E 2E 2E | + | | | | | | 00 | + 2512 | 1 SMBDEMO.S 770 | Data | 00 | | 17 | 00/095E : 10 4D 61 72 | MarinettiGood str 'Marinetti is Up.' + | | | | | | 69 6E 65 74 | + | | | | | | 74 69 20 69 | + | | | | | | 73 20 55 70 | + | | | | | | 2E | + 2513 | 1 SMBDEMO.S 771 | Data | 00 | | 21 | 00/096F : 14 4D 61 72 | MarinettiBad str 'Marinetti is Not Up.' + | | | | | | 69 6E 65 74 | + | | | | | | 74 69 20 69 | + | | | | | | 73 20 4E 6F | + | | | | | | 74 20 55 70 | + | | | | | | 2E | + 2514 | 1 SMBDEMO.S 772 | Data | 00 | | 19 | 00/0984 : 12 54 43 50 | AboutString str 'TCPIP Test Program' + | | | | | | 49 50 20 54 | + | | | | | | 65 73 74 20 | + | | | | | | 50 72 6F 67 | + | | | | | | 72 61 6D | + 2515 | 1 SMBDEMO.S 773 | Data | 00 | | 3 | 00/0997 : 02 4F 4B | But1 str 'OK' + 2516 | 1 SMBDEMO.S 774 | Empty | 00 | | 0 | 00/099A | + 2517 | 1 SMBDEMO.S 775 | Comment | 00 | | 0 | 00/099A | * + 2518 | 1 SMBDEMO.S 776 | Comment | 00 | | 0 | 00/099A | * Connect To Server Dialog + 2519 | 1 SMBDEMO.S 777 | Comment | 00 | | 0 | 00/099A | * + 2520 | 1 SMBDEMO.S 778 | Data | 00 | | 8 | 00/099A : 1E 00 78 00 | CTSRect dw 30,120,120,520 ; bounds rect + | | | | | | 78 00 08 02 | + 2521 | 1 SMBDEMO.S 779 | Data | 00 | | 2 | 00/09A2 : 01 00 | CTSVis dw 0001 ; visible + 2522 | 1 SMBDEMO.S 780 | Data | 00 | | 4 | 00/09A4 : 00 00 00 00 | CTSRef dw 0000,0000 ; refcon + 2523 | 1 SMBDEMO.S 781 | Data | 00 | 3 | 4 | 00/09A8 : C6 09 00 00 | CTSiptr1 adrl CTSItem1 ; string 'Host To Connect To' + 2524 | 1 SMBDEMO.S 782 | Data | 00 | 3 | 4 | 00/09AC : 04 0A 00 00 | CTSiptr2 adrl CTSItem2 ; edit line + 2525 | 1 SMBDEMO.S 783 | Data | 00 | 3 | 4 | 00/09B0 : 28 0A 00 00 | CTSiptr3 adrl CTSItem3 ; connect button + 2526 | 1 SMBDEMO.S 784 | Data | 00 | 3 | 4 | 00/09B4 : 48 0A 00 00 | CTSiptr4 adrl CTSItem4 ; cancel button + 2527 | 1 SMBDEMO.S 785 | Data | 00 | 3 | 4 | 00/09B8 : 67 0A 00 00 | CTSiptr5 adrl CTSItem5 ; status line + 2528 | 1 SMBDEMO.S 786 | Data | 00 | 3 | 4 | 00/09BC : 98 0B 00 00 | CTSiptr6 adrl CTSItem6 ; My IP Address + 2529 | 1 SMBDEMO.S 787 | Data | 00 | 3 | 4 | 00/09C0 : B8 0B 00 00 | CTSiptr7 adrl CTSItem7 ; "My Ip Address: " + 2530 | 1 SMBDEMO.S 788 | Data | 00 | | 2 | 00/09C4 : 00 00 | dw 0000 ; end of the line + 2531 | 1 SMBDEMO.S 789 | Empty | 00 | | 0 | 00/09C6 | + 2532 | 1 SMBDEMO.S 790 | Data | 00 | | 2 | 00/09C6 : 44 05 | CTSItem1 dw 1348 ; id + 2533 | 1 SMBDEMO.S 791 | Data | 00 | | 8 | 00/09C8 : 05 00 0A 00 | dw 5,10,15,300 ; bounds + | | | | | | 0F 00 2C 01 | + 2534 | 1 SMBDEMO.S 792 | Data | 00 | | 2 | 00/09D0 : 0F 80 | dw {$000F}+$8000 ; type + disabled + 2535 | 1 SMBDEMO.S 793 | Data | 00 | 3 | 4 | 00/09D2 : DE 09 00 00 | adrl CTSText1 + 2536 | 1 SMBDEMO.S 794 | Data | 00 | | 2 | 00/09D6 : 00 00 | dw 00 ; item value + 2537 | 1 SMBDEMO.S 795 | Data | 00 | | 2 | 00/09D8 : 00 00 | dw 00 ; item flag + 2538 | 1 SMBDEMO.S 796 | Data | 00 | | 4 | 00/09DA : 00 00 00 00 | adrl 00 ; end + 2539 | 1 SMBDEMO.S 797 | Data | 00 | | 38 | 00/09DE : 25 41 64 64 | CTSText1 str 'Address Of CIFS Server To Connect To:' + | | | | | | 72 65 73 73 | + | | | | | | 20 4F 66 20 | + | | | | | | 43 49 46 53 | + | | | | | | 20 53 65 72 | + | | | | | | 76 65 72 20 | + | | | | | | 54 6F 20 43 | + | | | | | | 6F 6E 6E 65 | + | | | | | | 63 74 20 54 | + | | | | | | 6F 3A | + 2540 | 1 SMBDEMO.S 798 | Empty | 00 | | 0 | 00/0A04 | + 2541 | 1 SMBDEMO.S 799 | Data | 00 | | 2 | 00/0A04 : 45 05 | CTSItem2 dw 1349 ; id + 2542 | 1 SMBDEMO.S 800 | Data | 00 | | 8 | 00/0A06 : 19 00 0A 00 | dw 25,10,38,200 ; bounds + | | | | | | 26 00 C8 00 | + 2543 | 1 SMBDEMO.S 801 | Data | 00 | | 2 | 00/0A0E : 11 00 | dw {$0011} + 2544 | 1 SMBDEMO.S 802 | Data | 00 | 3 | 4 | 00/0A10 : 1C 0A 00 00 | adrl CTSText2 + 2545 | 1 SMBDEMO.S 803 | Data | 00 | | 2 | 00/0A14 : 64 00 | dw 100 + 2546 | 1 SMBDEMO.S 804 | Data | 00 | | 2 | 00/0A16 : 00 00 | dw 00 + 2547 | 1 SMBDEMO.S 805 | Data | 00 | | 4 | 00/0A18 : 00 00 00 00 | adrl 00 + 2548 | 1 SMBDEMO.S 806 | Data | 00 | | 12 | 00/0A1C : 0B 65 78 61 | CTSText2 str 'example.com' + | | | | | | 6D 70 6C 65 | + | | | | | | 2E 63 6F 6D | + 2549 | 1 SMBDEMO.S 807 | Empty | 00 | | 0 | 00/0A28 | + 2550 | 1 SMBDEMO.S 808 | Data | 00 | | 2 | 00/0A28 : 01 00 | CTSItem3 dw 1 + 2551 | 1 SMBDEMO.S 809 | Data | 00 | | 8 | 00/0A2A : 32 00 0A 00 | dw 50,10,60,100 + | | | | | | 3C 00 64 00 | + 2552 | 1 SMBDEMO.S 810 | Data | 00 | | 2 | 00/0A32 : 0A 00 | dw {$000A} + 2553 | 1 SMBDEMO.S 811 | Data | 00 | 3 | 4 | 00/0A34 : 40 0A 00 00 | adrl But2 + 2554 | 1 SMBDEMO.S 812 | Data | 00 | | 2 | 00/0A38 : 00 00 | dw 00 + 2555 | 1 SMBDEMO.S 813 | Data | 00 | | 2 | 00/0A3A : 00 00 | dw 00 + 2556 | 1 SMBDEMO.S 814 | Data | 00 | | 4 | 00/0A3C : 00 00 00 00 | adrl 00 + 2557 | 1 SMBDEMO.S 815 | Data | 00 | | 8 | 00/0A40 : 07 43 6F 6E | But2 str 'Connect' + | | | | | | 6E 65 63 74 | + 2558 | 1 SMBDEMO.S 816 | Empty | 00 | | 0 | 00/0A48 | + 2559 | 1 SMBDEMO.S 817 | Data | 00 | | 2 | 00/0A48 : 02 00 | CTSItem4 dw 2 + 2560 | 1 SMBDEMO.S 818 | Data | 00 | | 8 | 00/0A4A : 32 00 6F 00 | dw 50,111,60,210 + | | | | | | 3C 00 D2 00 | + 2561 | 1 SMBDEMO.S 819 | Data | 00 | | 2 | 00/0A52 : 0A 00 | dw {$000A} + 2562 | 1 SMBDEMO.S 820 | Data | 00 | 3 | 4 | 00/0A54 : 60 0A 00 00 | adrl But3 + 2563 | 1 SMBDEMO.S 821 | Data | 00 | | 2 | 00/0A58 : 00 00 | dw 00 + 2564 | 1 SMBDEMO.S 822 | Data | 00 | | 2 | 00/0A5A : 00 00 | dw 00 + 2565 | 1 SMBDEMO.S 823 | Data | 00 | | 4 | 00/0A5C : 00 00 00 00 | adrl 00 + 2566 | 1 SMBDEMO.S 824 | Data | 00 | | 7 | 00/0A60 : 06 43 61 6E | But3 str 'Cancel' + | | | | | | 63 65 6C | + 2567 | 1 SMBDEMO.S 825 | Empty | 00 | | 0 | 00/0A67 | + 2568 | 1 SMBDEMO.S 826 | Data | 00 | | 2 | 00/0A67 : 46 05 | CTSItem5 dw 1350 ; id + 2569 | 1 SMBDEMO.S 827 | Data | 00 | | 8 | 00/0A69 : 41 00 0A 00 | dw 65,10,75,300 ; bounds + | | | | | | 4B 00 2C 01 | + 2570 | 1 SMBDEMO.S 828 | Data | 00 | | 2 | 00/0A71 : 0F 80 | dw {$000F}+$8000 ; type + disabled + 2571 | 1 SMBDEMO.S 829 | Data | 00 | 3 | 4 | 00/0A73 : 7F 0A 00 00 | adrl CTSText3 + 2572 | 1 SMBDEMO.S 830 | Data | 00 | | 2 | 00/0A77 : 00 00 | dw 00 + 2573 | 1 SMBDEMO.S 831 | Data | 00 | | 2 | 00/0A79 : 00 00 | dw 00 + 2574 | 1 SMBDEMO.S 832 | Data | 00 | | 4 | 00/0A7B : 00 00 00 00 | adrl 00 + 2575 | 1 SMBDEMO.S 833 | Data | 00 | | 23 | 00/0A7F : 16 53 74 61 | CTSText3 str 'Status: Awaiting Input' + | | | | | | 74 75 73 3A | + | | | | | | 20 41 77 61 | + | | | | | | 69 74 69 6E | + | | | | | | 67 20 49 6E | + | | | | | | 70 75 74 | + 2576 | 1 SMBDEMO.S 834 | Data | 00 | | 28 | 00/0A96 : 1B 53 74 61 | CTSText4 str 'Status: Resolving Hostname ' + | | | | | | 74 75 73 3A | + | | | | | | 20 52 65 73 | + | | | | | | 6F 6C 76 69 | + | | | | | | 6E 67 20 48 | + | | | | | | 6F 73 74 6E | + | | | | | | 61 6D 65 20 | + 2577 | 1 SMBDEMO.S 835 | Data | 00 | | 101 | 00/0AB2 : 00 00 00 00 | inhost ds 101 + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 | + 2578 | 1 SMBDEMO.S 836 | Data | 00 | | 27 | 00/0B17 : 1A 53 74 61 | CTSText5 str 'Status: Resolution Failure' + | | | | | | 74 75 73 3A | + | | | | | | 20 52 65 73 | + | | | | | | 6F 6C 75 74 | + | | | | | | 69 6F 6E 20 | + | | | | | | 46 61 69 6C | + | | | | | | 75 72 65 | + 2579 | 1 SMBDEMO.S 837 | Data | 00 | | 23 | 00/0B32 : 16 53 74 61 | CTSText6 str 'Status: Connecting to ' + | | | | | | 74 75 73 3A | + | | | | | | 20 43 6F 6E | + | | | | | | 6E 65 63 74 | + | | | | | | 69 6E 67 20 | + | | | | | | 74 6F 20 | + 2580 | 1 SMBDEMO.S 838 | Data | 00 | | 20 | 00/0B49 : 00 00 00 00 | ascdest ds 20 + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + 2581 | 1 SMBDEMO.S 839 | Data | 00 | | 36 | 00/0B5D : 23 53 74 61 | CTSText9 str 'Status: Connected, CIFS negotiating' + | | | | | | 74 75 73 3A | + | | | | | | 20 43 6F 6E | + | | | | | | 6E 65 63 74 | + | | | | | | 65 64 2C 20 | + | | | | | | 43 49 46 53 | + | | | | | | 20 6E 65 67 | + | | | | | | 6F 74 69 61 | + | | | | | | 74 69 6E 67 | + 2582 | 1 SMBDEMO.S 840 | Data | 00 | | 23 | 00/0B81 : 16 53 74 61 | CTSTextA str 'Status: Connect Failed' + | | | | | | 74 75 73 3A | + | | | | | | 20 43 6F 6E | + | | | | | | 6E 65 63 74 | + | | | | | | 20 46 61 69 | + | | | | | | 6C 65 64 | + 2583 | 1 SMBDEMO.S 841 | Empty | 00 | | 0 | 00/0B98 | + 2584 | 1 SMBDEMO.S 842 | Data | 00 | | 2 | 00/0B98 : 50 05 | CTSItem6 dw 1360 ; id + 2585 | 1 SMBDEMO.S 843 | Data | 00 | | 8 | 00/0B9A : 4D 00 78 00 | dw 77,120,87,300 ; bounds + | | | | | | 57 00 2C 01 | + 2586 | 1 SMBDEMO.S 844 | Data | 00 | | 2 | 00/0BA2 : 0F 80 | dw {$000F}+$8000 + 2587 | 1 SMBDEMO.S 845 | Data | 00 | 3 | 4 | 00/0BA4 : B0 0B 00 00 | adrl CTSText7 + 2588 | 1 SMBDEMO.S 846 | Data | 00 | | 2 | 00/0BA8 : 00 00 | dw 00 + 2589 | 1 SMBDEMO.S 847 | Data | 00 | | 2 | 00/0BAA : 00 00 | dw 00 + 2590 | 1 SMBDEMO.S 848 | Data | 00 | | 4 | 00/0BAC : 00 00 00 00 | adrl 00 + 2591 | 1 SMBDEMO.S 849 | Data | 00 | | 8 | 00/0BB0 : 07 30 2E 30 | CTSText7 str '0.0.0.0' + | | | | | | 2E 30 2E 30 | + 2592 | 1 SMBDEMO.S 850 | Empty | 00 | | 0 | 00/0BB8 | + 2593 | 1 SMBDEMO.S 851 | Data | 00 | | 2 | 00/0BB8 : 51 05 | CTSItem7 dw 1361 ; id + 2594 | 1 SMBDEMO.S 852 | Data | 00 | | 8 | 00/0BBA : 4D 00 0A 00 | dw 77,10,87,120 ; bounds + | | | | | | 57 00 78 00 | + 2595 | 1 SMBDEMO.S 853 | Data | 00 | | 2 | 00/0BC2 : 0F 80 | dw {$000F}+$8000 + 2596 | 1 SMBDEMO.S 854 | Data | 00 | 3 | 4 | 00/0BC4 : D0 0B 00 00 | adrl CTSText8 + 2597 | 1 SMBDEMO.S 855 | Data | 00 | | 2 | 00/0BC8 : 00 00 | dw 00 + 2598 | 1 SMBDEMO.S 856 | Data | 00 | | 2 | 00/0BCA : 00 00 | dw 00 + 2599 | 1 SMBDEMO.S 857 | Data | 00 | | 4 | 00/0BCC : 00 00 00 00 | adrl 00 + 2600 | 1 SMBDEMO.S 858 | Data | 00 | | 15 | 00/0BD0 : 0E 4D 79 20 | CTSText8 str 'My IP Address:' + | | | | | | 49 50 20 41 | + | | | | | | 64 64 72 65 | + | | | | | | 73 73 3A | + 2601 | 1 SMBDEMO.S 859 | Empty | 00 | | 0 | 00/0BDF | + 2602 | 1 SMBDEMO.S 860 | Comment | 00 | | 0 | 00/0BDF | * + 2603 | 1 SMBDEMO.S 861 | Comment | 00 | | 0 | 00/0BDF | * TCPIP Test Output Dialog + 2604 | 1 SMBDEMO.S 862 | Comment | 00 | | 0 | 00/0BDF | * + 2605 | 1 SMBDEMO.S 863 | Data | 00 | | 8 | 00/0BDF : 1E 00 78 00 | OurAlert dw 30,120,80,520 ; bounds rect + | | | | | | 50 00 08 02 | + 2606 | 1 SMBDEMO.S 864 | Data | 00 | | 2 | 00/0BE7 : 46 09 | dw 2374 ; id + 2607 | 1 SMBDEMO.S 865 | Data | 00 | | 1 | 00/0BE9 : 80 | db $80 + 2608 | 1 SMBDEMO.S 866 | Data | 00 | | 1 | 00/0BEA : 80 | db $80 + 2609 | 1 SMBDEMO.S 867 | Data | 00 | | 1 | 00/0BEB : 80 | db $80 + 2610 | 1 SMBDEMO.S 868 | Data | 00 | | 1 | 00/0BEC : 80 | db $80 + 2611 | 1 SMBDEMO.S 869 | Data | 00 | 3 | 4 | 00/0BED : F9 0B 00 00 | adrl item1 + 2612 | 1 SMBDEMO.S 870 | Data | 00 | 3 | 4 | 00/0BF1 : 11 0C 00 00 | adrl item2 + 2613 | 1 SMBDEMO.S 871 | Data | 00 | | 4 | 00/0BF5 : 00 00 00 00 | adrl 00 + 2614 | 1 SMBDEMO.S 872 | Empty | 00 | | 0 | 00/0BF9 | + 2615 | 1 SMBDEMO.S 873 | Data | 00 | | 2 | 00/0BF9 : 01 00 | item1 dw 1 ; id + 2616 | 1 SMBDEMO.S 874 | Data | 00 | | 8 | 00/0BFB : 19 00 40 01 | dw 25,320,0,0 ; bounds rect for button + | | | | | | 00 00 00 00 | + 2617 | 1 SMBDEMO.S 875 | Data | 00 | | 2 | 00/0C03 : 0A 00 | dw {$000A} ; type + 2618 | 1 SMBDEMO.S 876 | Data | 00 | 3 | 4 | 00/0C05 : 97 09 00 00 | adrl But1 ; item descriptor + 2619 | 1 SMBDEMO.S 877 | Data | 00 | | 2 | 00/0C09 : 00 00 | dw 00 ; item value + 2620 | 1 SMBDEMO.S 878 | Data | 00 | | 2 | 00/0C0B : 00 00 | dw 00 ; item flag + 2621 | 1 SMBDEMO.S 879 | Data | 00 | | 4 | 00/0C0D : 00 00 00 00 | adrl 00 ; item color + 2622 | 1 SMBDEMO.S 880 | Empty | 00 | | 0 | 00/0C11 | + 2623 | 1 SMBDEMO.S 881 | Data | 00 | | 2 | 00/0C11 : 44 05 | item2 dw 1348 ; id + 2624 | 1 SMBDEMO.S 882 | Data | 00 | | 8 | 00/0C13 : 0B 00 48 00 | dw 11,72,200,640 ; bounds rect for message + | | | | | | C8 00 80 02 | + 2625 | 1 SMBDEMO.S 883 | Data | 00 | | 2 | 00/0C1B : 0F 80 | dw {$000F}+$8000 ; type + disabled + 2626 | 1 SMBDEMO.S 884 | Data | 00 | 3 | 4 | 00/0C1D : 5E 09 00 00 | dialogMsg adrl MarinettiGood ; item descriptor + 2627 | 1 SMBDEMO.S 885 | Data | 00 | | 2 | 00/0C21 : 00 00 | dw 00 ; item value + 2628 | 1 SMBDEMO.S 886 | Data | 00 | | 2 | 00/0C23 : 00 00 | dw 00 ; item flag + 2629 | 1 SMBDEMO.S 887 | Data | 00 | | 4 | 00/0C25 : 00 00 00 00 | adrl 00 ; item color + 2630 | 1 SMBDEMO.S 888 | Empty | 00 | | 0 | 00/0C29 | + 2631 | 1 SMBDEMO.S 889 | Comment | 00 | | 0 | 00/0C29 | * + 2632 | 1 SMBDEMO.S 890 | Comment | 00 | | 0 | 00/0C29 | * GS/OS Quit Params + 2633 | 1 SMBDEMO.S 891 | Comment | 00 | | 0 | 00/0C29 | * + 2634 | 1 SMBDEMO.S 892 | Data | 00 | | 4 | 00/0C29 : 00 00 00 00 | QParams ds 4 + 2635 | 1 SMBDEMO.S 893 | Data | 00 | | 4 | 00/0C2D : 00 00 00 00 | ds 4 + 2636 | 1 SMBDEMO.S 894 | Empty | 00 | | 0 | 00/0C31 | + 2637 | 1 SMBDEMO.S 895 | Comment | 00 | | 0 | 00/0C31 | *** CIFS / SMB internals only past this point (will eventually be its own linker segment) + 2638 | 1 SMBDEMO.S 896 | Empty | 00 | | 0 | 00/0C31 | + 2639 | 1 SMBDEMO.S 897 | Comment | 00 | | 0 | 00/0C31 | * + 2640 | 1 SMBDEMO.S 898 | Comment | 00 | | 0 | 00/0C31 | * SMB equates (should move into Library/E16.CIFS.Macs.s eventually) + 2641 | 1 SMBDEMO.S 899 | Comment | 00 | | 0 | 00/0C31 | * + 2642 | 1 SMBDEMO.S 900 | Empty | 00 | | 0 | 00/0C31 | + 2643 | 1 SMBDEMO.S 901 | Comment | 00 | | 0 | 00/0C31 | * offsets into SMB header + 2644 | 1 SMBDEMO.S 902 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_tcplength = 1 ; tcp length: all dgram length including header + 2645 | 1 SMBDEMO.S 903 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_proto = 0+4 + 2646 | 1 SMBDEMO.S 904 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_cmd = 4+4 + 2647 | 1 SMBDEMO.S 905 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_ntstatus = 5+4 + 2648 | 1 SMBDEMO.S 906 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_eclass = 5+4 + 2649 | 1 SMBDEMO.S 907 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_flags = 9+4 + 2650 | 1 SMBDEMO.S 908 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_flags2 = 10+4 + 2651 | 1 SMBDEMO.S 909 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_extra = 12+4 + 2652 | 1 SMBDEMO.S 910 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_tid = 24+4 + 2653 | 1 SMBDEMO.S 911 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_pid = 26+4 + 2654 | 1 SMBDEMO.S 912 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_uid = 28+4 + 2655 | 1 SMBDEMO.S 913 | Equivalence | 00 | | 0 | 00/0C31 | SMB_offset_mid = 30+4 + 2656 | 1 SMBDEMO.S 914 | Equivalence | 00 | | 0 | 00/0C31 | SMB_header_size = 32+4 ; SMB headers are always 32 bytes long + 2657 | 1 SMBDEMO.S 915 | Empty | 00 | | 0 | 00/0C31 | + 2658 | 1 SMBDEMO.S 916 | Comment | 00 | | 0 | 00/0C31 | * message / commands + 2659 | 1 SMBDEMO.S 917 | Equivalence | 00 | | 0 | 00/0C31 | NBT_session_msg = 00 + 2660 | 1 SMBDEMO.S 918 | Equivalence | 00 | | 0 | 00/0C31 | SMB_neg_protocol = $72 + 2661 | 1 SMBDEMO.S 919 | Equivalence | 00 | | 0 | 00/0C31 | SMB_setup_ANDX = $73 + 2662 | 1 SMBDEMO.S 920 | Equivalence | 00 | | 0 | 00/0C31 | SMB_treec_ANDX = $75 + 2663 | 1 SMBDEMO.S 921 | Empty | 00 | | 0 | 00/0C31 | + 2664 | 1 SMBDEMO.S 922 | Comment | 00 | | 0 | 00/0C31 | * keepalive + 2665 | 1 SMBDEMO.S 923 | Equivalence | 00 | | 0 | 00/0C31 | NBT_keepalive_msg = $85 + 2666 | 1 SMBDEMO.S 924 | Equivalence | 00 | | 0 | 00/0C31 | keepalive_size = 4 + 2667 | 1 SMBDEMO.S 925 | Empty | 00 | | 0 | 00/0C31 | + 2668 | 1 SMBDEMO.S 926 | Comment | 00 | | 0 | 00/0C31 | * SMBTrans2 + 2669 | 1 SMBDEMO.S 927 | Equivalence | 00 | | 0 | 00/0C31 | SMB_trans2 = $32 + 2670 | 1 SMBDEMO.S 928 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open2 = 0 + 2671 | 1 SMBDEMO.S 929 | Equivalence | 00 | | 0 | 00/0C31 | SMB_find_first2 = 1 + 2672 | 1 SMBDEMO.S 930 | Equivalence | 00 | | 0 | 00/0C31 | SMB_find_next2 = 2 + 2673 | 1 SMBDEMO.S 931 | Equivalence | 00 | | 0 | 00/0C31 | SMB_query_fs_info = 3 + 2674 | 1 SMBDEMO.S 932 | Equivalence | 00 | | 0 | 00/0C31 | SMB_query_path_info = 5 + 2675 | 1 SMBDEMO.S 933 | Equivalence | 00 | | 0 | 00/0C31 | SMB_set_path_info = 6 + 2676 | 1 SMBDEMO.S 934 | Equivalence | 00 | | 0 | 00/0C31 | SMB_query_file_info = 7 + 2677 | 1 SMBDEMO.S 935 | Equivalence | 00 | | 0 | 00/0C31 | SMB_set_file_info = 8 + 2678 | 1 SMBDEMO.S 936 | Equivalence | 00 | | 0 | 00/0C31 | SMB_create_dir = 13 + 2679 | 1 SMBDEMO.S 937 | Equivalence | 00 | | 0 | 00/0C31 | SMB_find_close2 = $34 + 2680 | 1 SMBDEMO.S 938 | Equivalence | 00 | | 0 | 00/0C31 | SMB_query_file_all_info = $107 + 2681 | 1 SMBDEMO.S 939 | Empty | 00 | | 0 | 00/0C31 | + 2682 | 1 SMBDEMO.S 940 | Comment | 00 | | 0 | 00/0C31 | * File I/O + 2683 | 1 SMBDEMO.S 941 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open_ANDX = $2d + 2684 | 1 SMBDEMO.S 942 | Equivalence | 00 | | 0 | 00/0C31 | SMB_write_ANDX = $2f + 2685 | 1 SMBDEMO.S 943 | Equivalence | 00 | | 0 | 00/0C31 | SMB_read_ANDX = $2e + 2686 | 1 SMBDEMO.S 944 | Equivalence | 00 | | 0 | 00/0C31 | SMB_close = $04 + 2687 | 1 SMBDEMO.S 945 | Empty | 00 | | 0 | 00/0C31 | + 2688 | 1 SMBDEMO.S 946 | Comment | 00 | | 0 | 00/0C31 | * SMB_COM + 2689 | 1 SMBDEMO.S 947 | Equivalence | 00 | | 0 | 00/0C31 | SMB_COM_create_directory = $00 + 2690 | 1 SMBDEMO.S 948 | Equivalence | 00 | | 0 | 00/0C31 | SMB_COM_delete_directory = $01 + 2691 | 1 SMBDEMO.S 949 | Equivalence | 00 | | 0 | 00/0C31 | SMB_COM_delete = $06 + 2692 | 1 SMBDEMO.S 950 | Equivalence | 00 | | 0 | 00/0C31 | SMB_COM_rename = $07 + 2693 | 1 SMBDEMO.S 951 | Equivalence | 00 | | 0 | 00/0C31 | SMB_COM_query_information_disk = $80 + 2694 | 1 SMBDEMO.S 952 | Empty | 00 | | 0 | 00/0C31 | + 2695 | 1 SMBDEMO.S 953 | Comment | 00 | | 0 | 00/0C31 | * TRANS2 offsets + 2696 | 1 SMBDEMO.S 954 | Equivalence | 00 | | 0 | 00/0C31 | T2_word_cnt = {32+4} + 2697 | 1 SMBDEMO.S 955 | Equivalence | 00 | | 0 | 00/0C31 | T2_prm_cnt = {{32+4}}+1 + 2698 | 1 SMBDEMO.S 956 | Equivalence | 00 | | 0 | 00/0C31 | T2_data_cnt = {{{32+4}}+1}+2 + 2699 | 1 SMBDEMO.S 957 | Equivalence | 00 | | 0 | 00/0C31 | T2_maxprm_cnt = {{{{32+4}}+1}+2}+2 + 2700 | 1 SMBDEMO.S 958 | Equivalence | 00 | | 0 | 00/0C31 | T2_maxbuffer = {{{{{32+4}}+1}+2}+2}+2 + 2701 | 1 SMBDEMO.S 959 | Equivalence | 00 | | 0 | 00/0C31 | T2_setup_cnt = {{{{{{32+4}}+1}+2}+2}+2}+2 + 2702 | 1 SMBDEMO.S 960 | Equivalence | 00 | | 0 | 00/0C31 | T2_sprm_cnt = {{{{{{{32+4}}+1}+2}+2}+2}+2}+10 + 2703 | 1 SMBDEMO.S 961 | Equivalence | 00 | | 0 | 00/0C31 | T2_sprm_ofs = {{{{{{{{32+4}}+1}+2}+2}+2}+2}+10}+2 + 2704 | 1 SMBDEMO.S 962 | Equivalence | 00 | | 0 | 00/0C31 | T2_sdata_cnt = {{{{{{{{{32+4}}+1}+2}+2}+2}+2}+10}+2}+2 + 2705 | 1 SMBDEMO.S 963 | Equivalence | 00 | | 0 | 00/0C31 | T2_sdata_ofs = T2_sdata_cnd+2 + 2706 | 1 SMBDEMO.S 964 | Equivalence | 00 | | 0 | 00/0C31 | T2_ssetup_cnt = {T2_sdata_cnd+2}+2 + 2707 | 1 SMBDEMO.S 965 | Equivalence | 00 | | 0 | 00/0C31 | T2_sub_cmd = {{T2_sdata_cnd+2}+2}+2 + 2708 | 1 SMBDEMO.S 966 | Equivalence | 00 | | 0 | 00/0C31 | T2_byte_cnt = {{{T2_sdata_cnd+2}+2}+2}+2 + 2709 | 1 SMBDEMO.S 967 | Empty | 00 | | 0 | 00/0C31 | + 2710 | 1 SMBDEMO.S 968 | Equivalence | 00 | | 0 | 00/0C31 | SMB_proto1 = $53ff ; $ff + 'S' + 2711 | 1 SMBDEMO.S 969 | Equivalence | 00 | | 0 | 00/0C31 | SMB_proto2 = $424d ; 'MB' + 2712 | 1 SMBDEMO.S 970 | Empty | 00 | | 0 | 00/0C31 | + 2713 | 1 SMBDEMO.S 971 | Equivalence | 00 | | 0 | 00/0C31 | SMB_max_net_read_size = 16*1024 + 2714 | 1 SMBDEMO.S 972 | Equivalence | 00 | | 0 | 00/0C31 | SMB_max_net_write_size = 4*1024 + 2715 | 1 SMBDEMO.S 973 | Equivalence | 00 | | 0 | 00/0C31 | SMB_max_transmit_size = 16384 + 2716 | 1 SMBDEMO.S 974 | Empty | 00 | | 0 | 00/0C31 | + 2717 | 1 SMBDEMO.S 975 | Equivalence | 00 | | 0 | 00/0C31 | CAP_large_files = $00000008 ; 64-bit file sizes and offsets supported + 2718 | 1 SMBDEMO.S 976 | Equivalence | 00 | | 0 | 00/0C31 | CAP_unicode = $00000004 ; unicode supported + 2719 | 1 SMBDEMO.S 977 | Empty | 00 | | 0 | 00/0C31 | + 2720 | 1 SMBDEMO.S 978 | Equivalence | 00 | | 0 | 00/0C31 | CIFS_flags1 = $08 ; paths are caseless + 2721 | 1 SMBDEMO.S 979 | Equivalence | 00 | | 0 | 00/0C31 | CIFS_flags2_unicode = $8001 ; server may return long components in paths in the response - Unicode supported + 2722 | 1 SMBDEMO.S 980 | Equivalence | 00 | | 0 | 00/0C31 | CIFS_flags2 = $0001 ; server may return long components in paths in the response - ASCII supported + 2723 | 1 SMBDEMO.S 981 | Empty | 00 | | 0 | 00/0C31 | + 2724 | 1 SMBDEMO.S 982 | Equivalence | 00 | | 0 | 00/0C31 | SMB_connhandles_max = 8 + 2725 | 1 SMBDEMO.S 983 | Equivalence | 00 | | 0 | 00/0C31 | SMB_filehandles_max = (32*{8}) + 2726 | 1 SMBDEMO.S 984 | Empty | 00 | | 0 | 00/0C31 | + 2727 | 1 SMBDEMO.S 985 | Equivalence | 00 | | 0 | 00/0C31 | SMB_objtype_handle = 7 + 2728 | 1 SMBDEMO.S 986 | Empty | 00 | | 0 | 00/0C31 | + 2729 | 1 SMBDEMO.S 987 | Comment | 00 | | 0 | 00/0C31 | * NBT session service packet type codes + 2730 | 1 SMBDEMO.S 988 | Equivalence | 00 | | 0 | 00/0C31 | SESS_msg = $0 + 2731 | 1 SMBDEMO.S 989 | Equivalence | 00 | | 0 | 00/0C31 | SESS_req = $81 + 2732 | 1 SMBDEMO.S 990 | Equivalence | 00 | | 0 | 00/0C31 | SESS_pos_resp = $82 + 2733 | 1 SMBDEMO.S 991 | Equivalence | 00 | | 0 | 00/0C31 | SESS_neg_resp = $83 + 2734 | 1 SMBDEMO.S 992 | Equivalence | 00 | | 0 | 00/0C31 | SESS_retarget = $84 + 2735 | 1 SMBDEMO.S 993 | Equivalence | 00 | | 0 | 00/0C31 | SESS_keepalive = $85 + 2736 | 1 SMBDEMO.S 994 | Empty | 00 | | 0 | 00/0C31 | + 2737 | 1 SMBDEMO.S 995 | Equivalence | 00 | | 0 | 00/0C31 | SMB_maxpath = 4096 + 2738 | 1 SMBDEMO.S 996 | Empty | 00 | | 0 | 00/0C31 | + 2739 | 1 SMBDEMO.S 997 | Comment | 00 | | 0 | 00/0C31 | * SMB error codes + 2740 | 1 SMBDEMO.S 998 | Equivalence | 00 | | 0 | 00/0C31 | SMB_success = 0 + 2741 | 1 SMBDEMO.S 999 | Equivalence | 00 | | 0 | 00/0C31 | SMB_error = $ffff ; -1 + 2742 | 1 SMBDEMO.S 1000 | Equivalence | 00 | | 0 | 00/0C31 | SMB_bad_protocol = $fffe ; -2 + 2743 | 1 SMBDEMO.S 1001 | Equivalence | 00 | | 0 | 00/0C31 | SMB_bad_command = $fffd ; -3 + 2744 | 1 SMBDEMO.S 1002 | Equivalence | 00 | | 0 | 00/0C31 | SMB_proto_fail = $fffc ; -4 + 2745 | 1 SMBDEMO.S 1003 | Equivalence | 00 | | 0 | 00/0C31 | SMB_not_user = $fffb ; -5 + 2746 | 1 SMBDEMO.S 1004 | Equivalence | 00 | | 0 | 00/0C31 | SMB_bad_keylen = $fffa ; -6 + 2747 | 1 SMBDEMO.S 1005 | Equivalence | 00 | | 0 | 00/0C31 | SMB_bad_datalen = $fff9 ; -7 + 2748 | 1 SMBDEMO.S 1006 | Equivalence | 00 | | 0 | 00/0C31 | SMB_bad_logindata = $fff8 ; -8 + 2749 | 1 SMBDEMO.S 1007 | Empty | 00 | | 0 | 00/0C31 | + 2750 | 1 SMBDEMO.S 1008 | Comment | 00 | | 0 | 00/0C31 | * SMB file open function + 2751 | 1 SMBDEMO.S 1009 | Equivalence | 00 | | 0 | 00/0C31 | SMB_of_open = 1 + 2752 | 1 SMBDEMO.S 1010 | Equivalence | 00 | | 0 | 00/0C31 | SMB_of_truncate = 2 + 2753 | 1 SMBDEMO.S 1011 | Equivalence | 00 | | 0 | 00/0C31 | SMB_of_create = 16 + 2754 | 1 SMBDEMO.S 1012 | Empty | 00 | | 0 | 00/0C31 | + 2755 | 1 SMBDEMO.S 1013 | Comment | 00 | | 0 | 00/0C31 | * FileSearch + 2756 | 1 SMBDEMO.S 1014 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_readonly = 1 + 2757 | 1 SMBDEMO.S 1015 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_hidden = 2 + 2758 | 1 SMBDEMO.S 1016 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_system = 4 + 2759 | 1 SMBDEMO.S 1017 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_volume = 8 + 2760 | 1 SMBDEMO.S 1018 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_directory = 16 + 2761 | 1 SMBDEMO.S 1019 | Equivalence | 00 | | 0 | 00/0C31 | SMB_srch_archive = 32 + 2762 | 1 SMBDEMO.S 1020 | Empty | 00 | | 0 | 00/0C31 | + 2763 | 1 SMBDEMO.S 1021 | Comment | 00 | | 0 | 00/0C31 | * SMB file access modes + 2764 | 1 SMBDEMO.S 1022 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open_reading = 0 + 2765 | 1 SMBDEMO.S 1023 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open_writing = 1 + 2766 | 1 SMBDEMO.S 1024 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open_readwrite = 2 + 2767 | 1 SMBDEMO.S 1025 | Equivalence | 00 | | 0 | 00/0C31 | SMB_open_compatible = 0 + 2768 | 1 SMBDEMO.S 1026 | Equivalence | 00 | | 0 | 00/0C31 | SMB_deny_readwrite = $10 + 2769 | 1 SMBDEMO.S 1027 | Equivalence | 00 | | 0 | 00/0C31 | SMB_deny_write = $20 + 2770 | 1 SMBDEMO.S 1028 | Equivalence | 00 | | 0 | 00/0C31 | SMB_deny_read = $30 + 2771 | 1 SMBDEMO.S 1029 | Equivalence | 00 | | 0 | 00/0C31 | SMB_deny_none = $40 + 2772 | 1 SMBDEMO.S 1030 | Empty | 00 | | 0 | 00/0C31 | + 2773 | 1 SMBDEMO.S 1031 | Comment | 00 | | 0 | 00/0C31 | * + 2774 | 1 SMBDEMO.S 1032 | Comment | 00 | | 0 | 00/0C31 | * SMB variable space + 2775 | 1 SMBDEMO.S 1033 | Comment | 00 | | 0 | 00/0C31 | * + 2776 | 1 SMBDEMO.S 1034 | Empty | 00 | | 0 | 00/0C31 | + 2777 | 1 SMBDEMO.S 1035 | Comment | 00 | | 0 | 00/0C31 | * SMB DP variables + 2778 | 1 SMBDEMO.S 1036 | Equivalence | 00 | | 0 | 00/0C31 | SMB_sessid = 8 + 2779 | 1 SMBDEMO.S 1037 | Equivalence | 00 | | 0 | 00/0C31 | SMB_tmp1 = 12 + 2780 | 1 SMBDEMO.S 1038 | Equivalence | 00 | | 0 | 00/0C31 | SMB_tmp2 = 14 + 2781 | 1 SMBDEMO.S 1039 | Empty | 00 | | 0 | 00/0C31 | + 2782 | 1 SMBDEMO.S 1040 | Comment | 00 | | 0 | 00/0C31 | * SMB session information + 2783 | 1 SMBDEMO.S 1041 | Comment | 00 | | 0 | 00/0C31 | * TODO dynamically allocate these - see SMB_Init + 2784 | 1 SMBDEMO.S 1042 | Empty | 00 | | 0 | 00/0C31 | SMB_sess_begin + 2785 | 1 SMBDEMO.S 1043 | Data | 00 | | 2 | 00/0C31 : 00 00 | SMB_sess_ipid dw 0 ; Marinetti IPID + 2786 | 1 SMBDEMO.S 1044 | Data | 00 | | 2 | 00/0C33 : 00 00 | SMB_sess_tid dw 0 ; SMB TID + 2787 | 1 SMBDEMO.S 1045 | Data | 00 | | 2 | 00/0C35 : AD DE | SMB_sess_pid dw $dead ; SMB PID + 2788 | 1 SMBDEMO.S 1046 | Data | 00 | | 2 | 00/0C37 : 00 00 | SMB_sess_uid dw 0 ; SMB UID + 2789 | 1 SMBDEMO.S 1047 | Data | 00 | | 2 | 00/0C39 : 01 00 | SMB_sess_mid dw $0001 ; SMB MID + 2790 | 1 SMBDEMO.S 1048 | Data | 00 | | 4 | 00/0C3B : 00 00 00 00 | SMB_sess_skey dw 0,0 ; sKey + 2791 | 1 SMBDEMO.S 1049 | Data | 00 | | 4 | 00/0C3F : 00 00 00 00 | SMB_sess_caps dw 0,0 ; capabilities + 2792 | 1 SMBDEMO.S 1050 | Data | 00 | | 4 | 00/0C43 : 00 00 00 00 | SMB_sess_maxbuffer dw 0,0 ; max buffer + 2793 | 1 SMBDEMO.S 1051 | Empty | 00 | | 0 | 00/0C47 | + 2794 | 1 SMBDEMO.S 1052 | Comment | 00 | | 0 | 00/0C47 | * Strings + 2795 | 1 SMBDEMO.S 1053 | Data | 00 | | 12 | 00/0C47 : 02 4E 54 20 | SMB_dialect asc 02'NT LM 0.12'00 ; the only dialect we're gonna speak + | | | | | | 4C 4D 20 30 | + | | | | | | 2E 31 32 00 | + 2796 | 1 SMBDEMO.S 1054 | Empty | 00 | | 0 | 00/0C53 | + 2797 | 1 SMBDEMO.S 1055 | Comment | 00 | | 0 | 00/0C53 | * SMB packet staging area + 2798 | 1 SMBDEMO.S 1056 | Comment | 00 | | 0 | 00/0C53 | * TODO these will probably be dynamically allocated too? + 2799 | 1 SMBDEMO.S 1057 | Comment | 00 | | 0 | 00/0C53 | * also SMB_max_transmit size should go up to 65535 and use an allocated bank like Marinetti does + 2800 | 1 SMBDEMO.S 1058 | Code | 00 | | 2 | 00/0C53 : 00 00 | SMB_staging_brk brk 00 ; jump here to crash somewhere where you can easily inspect the generated SMB datagram + 2801 | 1 SMBDEMO.S 1059 | Data | 00 | | 16386 | 00/0C55 : 00 00 00 00 | SMB_staging ds {16384}+2 + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 | + 2802 | 1 SMBDEMO.S 1060 | Empty | 00 | | 0 | 00/4C57 | + 2803 | 1 SMBDEMO.S 1061 | Comment | 00 | | 0 | 00/4C57 | * + 2804 | 1 SMBDEMO.S 1062 | Comment | 00 | | 0 | 00/4C57 | * SMB Subroutines + 2805 | 1 SMBDEMO.S 1063 | Comment | 00 | | 0 | 00/4C57 | * + 2806 | 1 SMBDEMO.S 1064 | Empty | 00 | | 0 | 00/4C57 | + 2807 | 1 SMBDEMO.S 1065 | Comment | 00 | | 0 | 00/4C57 | * SMB_Init - Call me to tell me about your Marinetti IPID and get a session handle returned for future SMB calls + 2808 | 1 SMBDEMO.S 1066 | Comment | 00 | | 0 | 00/4C57 | * Arguments: + 2809 | 1 SMBDEMO.S 1067 | Comment | 00 | | 0 | 00/4C57 | * Marinetti IPID (one word, on stack) + 2810 | 1 SMBDEMO.S 1068 | Comment | 00 | | 0 | 00/4C57 | * Returns: + 2811 | 1 SMBDEMO.S 1069 | Comment | 00 | | 0 | 00/4C57 | * SMB session handle (two words, on stack) + 2812 | 1 SMBDEMO.S 1070 | Comment | 00 | | 0 | 00/4C57 | * Carry flag set if error + 2813 | 1 SMBDEMO.S 1071 | Comment | 00 | | 0 | 00/4C57 | * TODO: make this support multiple sessions in the future + 2814 | 1 SMBDEMO.S 1072 | Code | 00 | | 1 | 00/4C57 : FA | SMB_Init plx ; return address + 2815 | 1 SMBDEMO.S 1073 | Code | 00 | | 1 | 00/4C58 : 68 | pla + 2816 | 1 SMBDEMO.S 1074 | Code | 00 | 2 | 3 | 00/4C59 : 8D 31 0C | sta SMB_sess_ipid + 2817 | 1 SMBDEMO.S 1075 | Macro | 00 | | 0 | 00/4C5C | PushLong #SMB_sess_begin + 2821 | 1 SMBDEMO.S 1075 | Code | 00 | 1 >>16 | 3 | 00/4C5C : F4 00 00 | PEA #^#SMB_sess_begin + 2828 | 1 SMBDEMO.S 1075 | Code | 00 | 2 | 3 | 00/4C5F : F4 31 0C | PEA #SMB_sess_begin + 2831 | 1 SMBDEMO.S 1076 | Code | 00 | | 1 | 00/4C62 : DA | phx ; saved return address + 2832 | 1 SMBDEMO.S 1077 | Code | 00 | | 1 | 00/4C63 : 18 | clc + 2833 | 1 SMBDEMO.S 1078 | Code | 00 | | 1 | 00/4C64 : 60 | rts + 2834 | 1 SMBDEMO.S 1079 | Empty | 00 | | 0 | 00/4C65 | + 2835 | 1 SMBDEMO.S 1080 | Comment | 00 | | 0 | 00/4C65 | * SMB_Negotiate - Call me when you've opened a TCPIP connection and want to perform Negotiate Protocol Request + 2836 | 1 SMBDEMO.S 1081 | Comment | 00 | | 0 | 00/4C65 | * Arguments: + 2837 | 1 SMBDEMO.S 1082 | Comment | 00 | | 0 | 00/4C65 | * SMB session handle (two words, on stack) + 2838 | 1 SMBDEMO.S 1083 | Comment | 00 | | 0 | 00/4C65 | * Things I return on stack: + 2839 | 1 SMBDEMO.S 1084 | Comment | 00 | | 0 | 00/4C65 | * Carry flag set if error + 2840 | 1 SMBDEMO.S 1085 | Code | 00 | | 1 | 00/4C65 : FA | SMB_Negotiate plx ; return address + 2841 | 1 SMBDEMO.S 1086 | Macro | 00 | | 0 | 00/4C66 | PullLong {8} + 2844 | 1 SMBDEMO.S 1086 | Code | 00 | | 1 | 00/4C66 : 68 | PLA + 2846 | 1 SMBDEMO.S 1086 | Code | 00 | | 2 | 00/4C67 : 85 08 | STA {8} + 2851 | 1 SMBDEMO.S 1086 | Code | 00 | | 1 | 00/4C69 : 68 | PLA + 2853 | 1 SMBDEMO.S 1086 | Code | 00 | | 2 | 00/4C6A : 85 0A | STA {8}+2 + 2859 | 1 SMBDEMO.S 1087 | Code | 00 | | 1 | 00/4C6C : DA | phx ; saved return address + 2860 | 1 SMBDEMO.S 1088 | Empty | 00 | | 0 | 00/4C6D | + 2861 | 1 SMBDEMO.S 1089 | Macro | 00 | | 0 | 00/4C6D | PushWord #{$72} ; command + 2863 | 1 SMBDEMO.S 1089 | Code | 00 | | 3 | 00/4C6D : F4 72 00 | PEA #{$72} + 2866 | 1 SMBDEMO.S 1090 | Macro | 00 | | 0 | 00/4C70 | PushWord #{$08} ; flags1 + 2868 | 1 SMBDEMO.S 1090 | Code | 00 | | 3 | 00/4C70 : F4 08 00 | PEA #{$08} + 2871 | 1 SMBDEMO.S 1091 | Macro | 00 | | 0 | 00/4C73 | PushWord #{$0001} ; flags2 + 2873 | 1 SMBDEMO.S 1091 | Code | 00 | | 3 | 00/4C73 : F4 01 00 | PEA #{$0001} + 2876 | 1 SMBDEMO.S 1092 | Code | 00 | 2 | 3 | 00/4C76 : 20 D6 4C | jsr _InitSMBHeader ; make an SMB header with this information + 2877 | 1 SMBDEMO.S 1093 | Empty | 00 | | 0 | 00/4C79 | + 2878 | 1 SMBDEMO.S 1094 | Code | 11 | | 2 | 00/4C79 : E2 30 | sep $30 + 2879 | 1 SMBDEMO.S 1095 | Directive | 11 | | 0 | 00/4C7B | mx %11 + 2880 | 1 SMBDEMO.S 1096 | Code | 11 | | 2 | 00/4C7B : A0 00 | ldy #0 + 2881 | 1 SMBDEMO.S 1097 | Code | 11 | | 2 | 00/4C7D : A2 00 | ldx #0 + 2882 | 1 SMBDEMO.S 1098 | Code | 11 | 2 | 3 | 00/4C7F : BD 47 0C | dialect_copy lda SMB_dialect,x ; 8-bit copy of dialect string into SMB staging area + 2883 | 1 SMBDEMO.S 1099 | Code | 11 | | 2 | 00/4C82 : F0 07 | beq dialect_done + 2884 | 1 SMBDEMO.S 1100 | Code | 11 | 2 | 3 | 00/4C84 : 9D 7C 0C | sta SMB_staging+{32+4}+3,x + 2885 | 1 SMBDEMO.S 1101 | Code | 11 | | 1 | 00/4C87 : E8 | inx + 2886 | 1 SMBDEMO.S 1102 | Code | 11 | | 1 | 00/4C88 : C8 | iny + 2887 | 1 SMBDEMO.S 1103 | Code | 11 | | 2 | 00/4C89 : 80 F4 | bra dialect_copy + 2888 | 1 SMBDEMO.S 1104 | Code | 11 | 2 | 3 | 00/4C8B : 9D 7C 0C | dialect_done sta SMB_staging+{32+4}+3,x; do write the trailing zero + 2889 | 1 SMBDEMO.S 1105 | Code | 11 | | 1 | 00/4C8E : E8 | inx + 2890 | 1 SMBDEMO.S 1106 | Code | 11 | | 1 | 00/4C8F : C8 | iny + 2891 | 1 SMBDEMO.S 1107 | Code | 00 | | 2 | 00/4C90 : C2 30 | rep $30 + 2892 | 1 SMBDEMO.S 1108 | Directive | 00 | | 0 | 00/4C92 | mx %00 + 2893 | 1 SMBDEMO.S 1109 | Empty | 00 | | 0 | 00/4C92 | + 2894 | 1 SMBDEMO.S 1110 | Code | 00 | | 1 | 00/4C92 : 98 | tya + 2895 | 1 SMBDEMO.S 1111 | Code | 00 | 2 | 3 | 00/4C93 : 8D 7A 0C | sta SMB_staging+{32+4}+1 ; save byte count + 2896 | 1 SMBDEMO.S 1112 | Empty | 00 | | 0 | 00/4C96 | + 2897 | 1 SMBDEMO.S 1113 | Code | 00 | | 1 | 00/4C96 : 18 | clc + 2898 | 1 SMBDEMO.S 1114 | Code | 00 | | 3 | 00/4C97 : 69 27 00 | adc #{32+4}+3 + 2899 | 1 SMBDEMO.S 1115 | Code | 00 | | 1 | 00/4C9A : 48 | pha ; 'length' parameter for _SMB_Send + 2900 | 1 SMBDEMO.S 1116 | Code | 00 | | 1 | 00/4C9B : 3A | dec + 2901 | 1 SMBDEMO.S 1117 | Code | 00 | | 1 | 00/4C9C : 3A | dec + 2902 | 1 SMBDEMO.S 1118 | Code | 00 | | 1 | 00/4C9D : 3A | dec + 2903 | 1 SMBDEMO.S 1119 | Code | 00 | | 1 | 00/4C9E : 3A | dec + 2904 | 1 SMBDEMO.S 1120 | Code | 00 | | 1 | 00/4C9F : EB | xba + 2905 | 1 SMBDEMO.S 1121 | Code | 00 | 2 | 3 | 00/4CA0 : 8D 57 0C | sta SMB_staging+{1}+1 ; save length for naked-TCP dgram + 2906 | 1 SMBDEMO.S 1122 | Empty | 00 | | 0 | 00/4CA3 | + 2907 | 1 SMBDEMO.S 1123 | Code | 00 | 2 | 3 | 00/4CA3 : 20 A8 4C | jsr _SMB_Send + 2908 | 1 SMBDEMO.S 1124 | Comment | 00 | | 0 | 00/4CA6 | * TODO next: wait till send is complete + 2909 | 1 SMBDEMO.S 1125 | Comment | 00 | | 0 | 00/4CA6 | * TODO next: receive Negotiate Protocol Response and interpret it + 2910 | 1 SMBDEMO.S 1126 | Code | 00 | | 1 | 00/4CA6 : 18 | clc + 2911 | 1 SMBDEMO.S 1127 | Code | 00 | | 1 | 00/4CA7 : 60 | rts + 2912 | 1 SMBDEMO.S 1128 | Empty | 00 | | 0 | 00/4CA8 | + 2913 | 1 SMBDEMO.S 1129 | Comment | 00 | | 0 | 00/4CA8 | * + 2914 | 1 SMBDEMO.S 1130 | Comment | 00 | | 0 | 00/4CA8 | * SMB internal subroutines + 2915 | 1 SMBDEMO.S 1131 | Comment | 00 | | 0 | 00/4CA8 | * + 2916 | 1 SMBDEMO.S 1132 | Empty | 00 | | 0 | 00/4CA8 | + 2917 | 1 SMBDEMO.S 1133 | Comment | 00 | | 0 | 00/4CA8 | * _SMB_Send - Send the SMB datagram staging area out to Marinetti + 2918 | 1 SMBDEMO.S 1134 | Comment | 00 | | 0 | 00/4CA8 | * Arguments: + 2919 | 1 SMBDEMO.S 1135 | Comment | 00 | | 0 | 00/4CA8 | * length (word, pushed on stack first) + 2920 | 1 SMBDEMO.S 1136 | Code | 00 | | 1 | 00/4CA8 : FA | _SMB_Send plx ; save return address + 2921 | 1 SMBDEMO.S 1137 | Macro | 00 | | 0 | 00/4CA9 | PullWord {12} + 2922 | 1 SMBDEMO.S 1137 | Code | 00 | | 1 | 00/4CA9 : 68 | PLA + 2924 | 1 SMBDEMO.S 1137 | Code | 00 | | 2 | 00/4CAA : 85 0C | STA {12} + 2928 | 1 SMBDEMO.S 1138 | Code | 00 | | 1 | 00/4CAC : DA | phx ; restore return address + 2929 | 1 SMBDEMO.S 1139 | Code | 00 | | 3 | 00/4CAD : A9 00 00 | lda #0 + 2930 | 1 SMBDEMO.S 1140 | Code | 00 | | 2 | 00/4CB0 : 85 0E | sta {14} + 2931 | 1 SMBDEMO.S 1141 | Macro | 00 | | 0 | 00/4CB2 | PushWord #0000 + 2933 | 1 SMBDEMO.S 1141 | Code | 00 | | 3 | 00/4CB2 : F4 00 00 | PEA #0000 + 2936 | 1 SMBDEMO.S 1142 | Code | 00 | | 3 | 00/4CB5 : A0 00 00 | ldy #SMB_sess_ipid-SMB_sess_begin + 2937 | 1 SMBDEMO.S 1143 | Code | 00 | | 2 | 00/4CB8 : B7 08 | lda [{8}],y + 2938 | 1 SMBDEMO.S 1144 | Code | 00 | | 1 | 00/4CBA : 48 | pha ; IPID for Marinetti + 2939 | 1 SMBDEMO.S 1145 | Macro | 00 | | 0 | 00/4CBB | PushLong #SMB_staging + 2943 | 1 SMBDEMO.S 1145 | Code | 00 | 1 >>16 | 3 | 00/4CBB : F4 00 00 | PEA #^#SMB_staging + 2950 | 1 SMBDEMO.S 1145 | Code | 00 | 2 | 3 | 00/4CBE : F4 55 0C | PEA #SMB_staging + 2953 | 1 SMBDEMO.S 1146 | Macro | 00 | | 0 | 00/4CC1 | PushLong {12} ; length + 2961 | 1 SMBDEMO.S 1146 | Code | 00 | | 2 | 00/4CC1 : A5 0E | LDA {12}+2 + 2962 | 1 SMBDEMO.S 1146 | Code | 00 | | 1 | 00/4CC3 : 48 | PHA + 2970 | 1 SMBDEMO.S 1146 | Code | 00 | | 2 | 00/4CC4 : A5 0C | LDA {12} + 2971 | 1 SMBDEMO.S 1146 | Code | 00 | | 1 | 00/4CC6 : 48 | PHA + 2973 | 1 SMBDEMO.S 1147 | Macro | 00 | | 0 | 00/4CC7 | PushWord #0000 + 2975 | 1 SMBDEMO.S 1147 | Code | 00 | | 3 | 00/4CC7 : F4 00 00 | PEA #0000 + 2978 | 1 SMBDEMO.S 1148 | Macro | 00 | | 0 | 00/4CCA | PushWord #0000 + 2980 | 1 SMBDEMO.S 1148 | Code | 00 | | 3 | 00/4CCA : F4 00 00 | PEA #0000 + 2983 | 1 SMBDEMO.S 1149 | Macro | 00 | | 0 | 00/4CCD | _TCPIPWriteTCP + 2984 | 1 SMBDEMO.S 1149 | Code | 00 | | 3 | 00/4CCD : A2 36 2D | LDX #$2D00+$36 + 2985 | 1 SMBDEMO.S 1149 | Code | 00 | | 4 | 00/4CD0 : 22 00 00 E1 | JSL $E10000 + 2986 | 1 SMBDEMO.S 1150 | Code | 00 | | 1 | 00/4CD4 : 68 | pla + 2987 | 1 SMBDEMO.S 1151 | Code | 00 | | 1 | 00/4CD5 : 60 | rts + 2988 | 1 SMBDEMO.S 1152 | Empty | 00 | | 0 | 00/4CD6 | + 2989 | 1 SMBDEMO.S 1153 | Comment | 00 | | 0 | 00/4CD6 | * _InitSMBHeader - Zero-out old SMB datagram data and start with some fresh header values + 2990 | 1 SMBDEMO.S 1154 | Comment | 00 | | 0 | 00/4CD6 | * Arguments: + 2991 | 1 SMBDEMO.S 1155 | Comment | 00 | | 0 | 00/4CD6 | * Command (word, pushed on stack first) + 2992 | 1 SMBDEMO.S 1156 | Comment | 00 | | 0 | 00/4CD6 | * Flags1 (word, pushed on stack second) + 2993 | 1 SMBDEMO.S 1157 | Comment | 00 | | 0 | 00/4CD6 | * Flags2 (word, pushed on stack third) + 2994 | 1 SMBDEMO.S 1158 | Comment | 00 | | 0 | 00/4CD6 | * Session Handle (already stored in DP SMB_sessid) + 2995 | 1 SMBDEMO.S 1159 | Comment | 00 | | 0 | 00/4CD6 | * Things I return on stack: + 2996 | 1 SMBDEMO.S 1160 | Comment | 00 | | 0 | 00/4CD6 | * Carry flag set if error + 2997 | 1 SMBDEMO.S 1161 | Code | 00 | | 3 | 00/4CD6 : A2 00 00 | _InitSMBHeader ldx #00 + 2998 | 1 SMBDEMO.S 1162 | Code | 00 | | 3 | 00/4CD9 : A9 00 00 | lda #00 + 2999 | 1 SMBDEMO.S 1163 | Code | 00 | 2 | 3 | 00/4CDC : 9D 55 0C | zero_loop sta SMB_staging,x ; loop to zero-out any old data from SMB header staging place + 3000 | 1 SMBDEMO.S 1164 | Code | 00 | | 1 | 00/4CDF : E8 | inx + 3001 | 1 SMBDEMO.S 1165 | Code | 00 | | 1 | 00/4CE0 : E8 | inx + 3002 | 1 SMBDEMO.S 1166 | Code | 00 | | 3 | 00/4CE1 : E0 00 40 | cpx #{16384} + 3003 | 1 SMBDEMO.S 1167 | Code | 00 | | 2 | 00/4CE4 : 90 F6 | blt zero_loop + 3004 | 1 SMBDEMO.S 1168 | Empty | 00 | | 0 | 00/4CE6 | + 3005 | 1 SMBDEMO.S 1169 | Code | 00 | | 3 | 00/4CE6 : A9 FF 53 | lda #{$53ff} + 3006 | 1 SMBDEMO.S 1170 | Code | 00 | 2 | 3 | 00/4CE9 : 8D 59 0C | sta SMB_staging+{0+4} + 3007 | 1 SMBDEMO.S 1171 | Code | 00 | | 3 | 00/4CEC : A9 4D 42 | lda #{$424d} + 3008 | 1 SMBDEMO.S 1172 | Code | 00 | 2 | 3 | 00/4CEF : 8D 5B 0C | sta SMB_staging+{0+4}+2 ; $FF + 'SMB' at start of header + 3009 | 1 SMBDEMO.S 1173 | Empty | 00 | | 0 | 00/4CF2 | + 3010 | 1 SMBDEMO.S 1174 | Code | 00 | | 3 | 00/4CF2 : A0 02 00 | ldy #SMB_sess_tid-SMB_sess_begin + 3011 | 1 SMBDEMO.S 1175 | Code | 00 | | 2 | 00/4CF5 : B7 08 | lda [{8}],y + 3012 | 1 SMBDEMO.S 1176 | Code | 00 | 2 | 3 | 00/4CF7 : 8D 71 0C | sta SMB_staging+{24+4} ; set session TID + 3013 | 1 SMBDEMO.S 1177 | Empty | 00 | | 0 | 00/4CFA | + 3014 | 1 SMBDEMO.S 1178 | Code | 00 | | 3 | 00/4CFA : A0 04 00 | ldy #SMB_sess_pid-SMB_sess_begin + 3015 | 1 SMBDEMO.S 1179 | Code | 00 | | 2 | 00/4CFD : B7 08 | lda [{8}],y + 3016 | 1 SMBDEMO.S 1180 | Code | 00 | 2 | 3 | 00/4CFF : 8D 73 0C | sta SMB_staging+{26+4} ; set session PID + 3017 | 1 SMBDEMO.S 1181 | Empty | 00 | | 0 | 00/4D02 | + 3018 | 1 SMBDEMO.S 1182 | Code | 00 | | 3 | 00/4D02 : A0 06 00 | ldy #SMB_sess_uid-SMB_sess_begin + 3019 | 1 SMBDEMO.S 1183 | Code | 00 | | 2 | 00/4D05 : B7 08 | lda [{8}],y + 3020 | 1 SMBDEMO.S 1184 | Code | 00 | 2 | 3 | 00/4D07 : 8D 75 0C | sta SMB_staging+{28+4} ; set session UID + 3021 | 1 SMBDEMO.S 1185 | Empty | 00 | | 0 | 00/4D0A | + 3022 | 1 SMBDEMO.S 1186 | Code | 00 | | 3 | 00/4D0A : A0 08 00 | ldy #SMB_sess_mid-SMB_sess_begin + 3023 | 1 SMBDEMO.S 1187 | Code | 00 | | 2 | 00/4D0D : B7 08 | lda [{8}],y + 3024 | 1 SMBDEMO.S 1188 | Code | 00 | 2 | 3 | 00/4D0F : 8D 77 0C | sta SMB_staging+{30+4} ; set session MID + 3025 | 1 SMBDEMO.S 1189 | Empty | 00 | | 0 | 00/4D12 | + 3026 | 1 SMBDEMO.S 1190 | Code | 00 | | 1 | 00/4D12 : FA | plx ; save return address + 3027 | 1 SMBDEMO.S 1191 | Code | 00 | | 1 | 00/4D13 : 68 | pla ; flags2 (word) + 3028 | 1 SMBDEMO.S 1192 | Code | 00 | 2 | 3 | 00/4D14 : 8D 63 0C | sta SMB_staging+{10+4} ; set Flags2 + 3029 | 1 SMBDEMO.S 1193 | Empty | 00 | | 0 | 00/4D17 | + 3030 | 1 SMBDEMO.S 1194 | Code | 00 | | 1 | 00/4D17 : 68 | pla ; flags1 (word, but written as byte) + 3031 | 1 SMBDEMO.S 1195 | Code | 00 | 2 | 3 | 00/4D18 : 0D 62 0C | ora SMB_staging+{9+4} + 3032 | 1 SMBDEMO.S 1196 | Code | 00 | 2 | 3 | 00/4D1B : 8D 62 0C | sta SMB_staging+{9+4} ; write one-byte value where it goes + 3033 | 1 SMBDEMO.S 1197 | Empty | 00 | | 0 | 00/4D1E | + 3034 | 1 SMBDEMO.S 1198 | Code | 00 | | 1 | 00/4D1E : 68 | pla ; command (word, but written as byte) + 3035 | 1 SMBDEMO.S 1199 | Code | 00 | 2 | 3 | 00/4D1F : 0D 5D 0C | ora SMB_staging+{4+4} + 3036 | 1 SMBDEMO.S 1200 | Code | 00 | 2 | 3 | 00/4D22 : 8D 5D 0C | sta SMB_staging+{4+4} ; write one-byte value where it goes + 3037 | 1 SMBDEMO.S 1201 | Empty | 00 | | 0 | 00/4D25 | + 3038 | 1 SMBDEMO.S 1202 | Code | 00 | | 1 | 00/4D25 : DA | phx + 3039 | 1 SMBDEMO.S 1203 | Code | 00 | | 1 | 00/4D26 : 60 | rts + 3040 | 1 SMBDEMO.S 1204 | Empty | 00 | | 0 | 00/4D27 | +------+---------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------