*************************************************************** * * * Menu.asm -menu stuff * * * * * * * * * * * *************************************************************** case on mcopy menu.mac copy fret.equ MenuEvents start lda MyEvent+$10 ;;MenuItem ldx #codeTableEnd-codeTable-4 next cmp codeTable,x ;; are we handling this code? beq dispatch dex dex dex dex bpl next bra NoGood dispatch jsr (codeTable+2,x) ; call the handler NoGood anop pea $0000 ;;false; lda MyEvent+$12 pha _HiliteMenu rtl codeTable anop dc i2'kAbout,DoShowAbout' ; dc i2'kNewItem,DoNewItem' dc i2'kOpenItem,DoOpenItem' dc i2'kSaveItem,DoSaveItem' dc i2'kCloseItem,DoCloseItem' dc i2'kPageSetupItem,DoPageSetup' dc i2'kPrintItem,DoPrint' dc i2'kQuitItem,DoQuitItem' dc i2'kAItem,DoEachKey' dc i2'kBbItem,DoEachKey' dc i2'kBItem,DoEachKey' dc i2'kCItem,DoEachKey' dc i2'kDbItem,DoEachKey' dc i2'kDItem,DoEachKey' dc i2'kEbItem,DoEachKey' dc i2'kEItem,DoEachKey' dc i2'kFItem,DoEachKey' dc i2'kGbItem,DoEachKey' dc i2'kGItem,DoEachKey' dc i2'kAbItem,DoEachKey' dc i2'kMajor,DoMajorItem' dc i2'kMinor,DoMinorItem' dc i2'k5th,Do5thItem' dc i2'kAug,DoAugItem' dc i2'kDim,DoDimItem' dc i2'kSus2,DoSus2' dc i2'kSus4,DoSus4' dc i2'kb5th,Dob5th' dc i2'kb6th,Dob6th' dc i2'k6th,Do6th' dc i2'k7th,Do7th' dc i2'kMaj7,DoM7th' dc i2'kBalineseS,DoEachScale' dc i2'kChineseS,DoEachScale' dc i2'kDomPentatonicS,DoEachScale' dc i2'kEgyptianS,DoEachScale' dc i2'kJapaneseS,DoEachScale' dc i2'kMinPentatonicS,DoEachScale' dc i2'kPentatonicS,DoEachScale' dc i2'kScottishFS,DoEachScale' dc i2'kBluesS,DoEachScale' dc i2'kJavaneseS,DoEachScale' dc i2'kAeolianS,DoEachScale' dc i2'kArabicS,DoEachScale' dc i2'kBohemianS,DoEachScale' dc i2'kDorianS,DoEachScale' dc i2'kHarmonicMS,DoEachScale' dc i2'kHinduS,DoEachScale' dc i2'kHongroiseS,DoEachScale' dc i2'kHungarianS,DoEachScale' dc i2'kHungarianFS,DoEachScale' dc i2'kIonianS,DoEachScale' dc i2'kLocrianS,DoEachScale' dc i2'kLydianS,DoEachScale' dc i2'kMixolydianS,DoEachScale' dc i2'kPhrygianS,DoEachScale' dc i2'kSpanishFS,DoEachScale' codeTableEnd anop MenuEvents end DoNewItem start jsl Update rts DoNewItem end DoOpenItem start jsl DoOpen ; tax ; beq Bad ; jsl UnLoadBuffer ; jsl MoveCapo ; jsl Update Bad rts DoOpenItem end DoQuitItem start inc Quit DoCloseItem entry ; jsl DoClose rts DoQuitItem end DoSaveItem start ; jsl LoadBuffer jsl DoSave rts DoSaveItem end DoShowAbout start lda MyEvent+$0E ;;check modifiers and #$1000 ;;check for ctl key beq normal * easter egg * pha ;;space for result lda #$0000 pha ;;flags - ptr, cstring pha ;;null substr ptr pha pea easter|-16 ;;the cstring pea easter _AlertWindow pla ;;discard the result rts normal pha ;;space for result pea $0004 ;;resource pea $0000 ;;NULL pea $0000 ;; pea $0000 ;; pea kAbout ;;lowbyte _AlertWindow pla rts easter dc c'54~You seem to have stumbled upon an easter egg.' dc c'~How quaint!' dc i1'0' DoShowAbout end DoMajorItem start ~CheckMItem #FALSE,Type lda notes ora #(Db+E) ;;add needed notes and #($ffff-C-Eb-F) ;;get rid of bad ones sta notes ~EnableMItem #kb5th ~CheckMItem #FALSE,#kb5th ~EnableMItem #kb6th ~CheckMItem #FALSE,#kb6th pea TRUE lda #kMajor sta Type pha _CheckMItem jsl Update rts DoMajorItem end DoMinorItem start ~CheckMItem #FALSE,Type lda notes ora #(C+E) and #($ffff-Db-Eb-F) sta notes ~EnableMItem #kb5th ~CheckMItem #FALSE,#kb5th ~EnableMItem #kb6th ~CheckMItem #FALSE,#kb6th pea TRUE lda #kMinor sta Type pha _CheckMItem jsl Update rts DoMinorItem end Do5thItem start ~CheckMItem #FALSE,Type lda notes ora #E and #($ffff-C-Db-Eb-F) sta notes ~EnableMItem #kb5th ~CheckMItem #FALSE,#kb5th ~EnableMItem #kb6th ~CheckMItem #FALSE,#kb6th pea TRUE lda #k5th sta Type pha _CheckMItem jsl Update rts Do5thItem end DoAugItem start ~CheckMItem #FALSE,Type lda notes ora #(Db+F) and #($ffff-C-Eb-E) sta notes ~CheckMItem #FALSE,#kb5th ~DisableMItem #kb5th ~CheckMItem #FALSE,#kb6th ~DisableMItem #kb6th pea TRUE lda #kAug sta Type pha _CheckMItem jsl Update rts DoAugItem end DoDimItem start ~CheckMItem #FALSE,Type lda notes ora #(C+Eb) and #($ffff-Db-E-F) sta notes ~CheckMItem #FALSE,#kb5th ~DisableMItem #kb5th ~CheckMItem #FALSE,#kb6th ~DisableMItem #kb6th pea TRUE lda #kDim sta Type pha _CheckMItem jsl Update rts DoDimItem end * inputs: * A->menuitem DoEachKey start pha ;;save it pea FALSE ;;false lda key clc adc #kAItem ;;get rid of the old checkmark pha _CheckMItem pla ;;restore tay sec sbc #kAItem sta key tya pea $0001 ;;true pha _CheckMItem jsl Update rts DoEachKey end DoSus2 START pha lda notes and #B beq AddIt lda notes eor #B sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #B sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts DoSus2 END DoSus4 START pha ;;save menuid lda notes and #D beq AddIt lda notes eor #D sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #D sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts DoSus4 END Dob5th START pha ;;save menuid lda notes and #Eb beq AddIt lda notes eor #Eb ora #E ;;undo it's effects sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #Eb eor #E sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts Dob5th END Dob6th START pha ;;save menuid lda notes and #F beq AddIt lda notes eor #F sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #F sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts Dob6th END Do6th START pha ;;save menuid lda notes and #Gb beq AddIt lda notes eor #Gb sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #Gb sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts Do6th END Do7th START pha ;;save menuid lda notes and #G beq AddIt lda notes eor #G sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #G sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts Do7th END DoM7th START pha ;;save menuid lda notes and #Ab beq AddIt lda notes eor #Ab sta notes pla ;;restore menuid pea FALSE pha ;;menuid _CheckMItem bra QuitNow AddIt lda notes ora #Ab sta notes pla ;;restore menuid pea TRUE pha ;;menuid _CheckMItem QuitNow jsl Update rts DoM7th END **************************************************************** * * * * Inputs: A -> Menu # * * Outputs: * **************************************************************** DoEachScale start pha ;my menu number ~CheckMItem #FALSE,Scale pla ;my menu number pha ;save it sta Scale pea TRUE pha _CheckMItem pla sec sbc #ScalesBase asl a ; x2 tax lda ScaleTable,X sta notes jsl Update rts ;;These are the notes for the scales in the key of A ScaleTable anop dc i2'An+Bb+C+E+F' ;Balinese Pentatonic dc i2'An+Bb+D+E+F' ;Chinese Pentatonic dc i2'An+B+Db+E+G' ;Dominant Pentatonic dc i2'An+B+D+E+G' ;Egyptian Penatatonic dc i2'An+B+D+E+F' ;Japanese Pentatonic dc i2'An+C+D+E+G' ;MinorPentatonic dc i2'An+B+Db+E+Gb' ;Pentatonic dc i2'An+B+D+E+Gb' ;Scottish Folk Pentatonic dc i2'An+C+D+Eb+E+G' ;Blues dc i2'An+B+Db+Eb+F+G' ;Javanese dc i2'An+B+C+D+E+F+G' ;Aeolian dc i2'An+B+Db+D+Eb+F+G' ;Arabic dc i2'An+B+C+Eb+E+F+G' ;Bohemian dc i2'An+B+C+D+E+Gb+G' ;Dorian dc i2'An+B+C+D+E+F+Ab' ;Harmonic Minor dc i2'An+B+Db+D+E+F+G' ;Hindu dc i2'An+C+Db+Eb+E+Gb+G' ;Hongroise dc i2'An+B+C+Eb+E+F+Ab' ;Hungarian dc i2'An+Bb+Db+D+E+F+Ab' ;Hungarian Folk dc i2'An+B+Db+D+E+Gb+Ab' ;Ionian dc i2'An+Bb+C+D+Eb+F+G' ;Locrian dc i2'An+B+Db+Eb+E+Gb+Ab' ;Lydian dc i2'An+B+Db+D+E+Gb+G' ;Mixolydian dc i2'An+Bb+C+D+E+F+G' ;Phrygian dc i2'An+Bb+Db+D+E+F+G' ;Spanish Folk DoEachScale end DoPageSetup start using DFDat pha ;;space ph4 #MyPrRecPtr _PrStlDialog pla rts DoPageSetUp end DoPrint start using DFDat prAbort equ $80 pha ;;space ph4 #MyPrRecPtr _PrValidate pla pha ;;space ph4 #MyPrRecPtr _PrJobDialog pla bne *+3 rts ;;don't print _WaitCursor pha ;;space pha ph4 #MyPrRecPtr ph4 #0 _PrOpenDoc pla sta PortGraf plx stx PortGraf+2 bcc ok1 pea prAbort _PrSetError bra exit ok1 anop phx ;;grafportptr pha ph4 #0 _PrOpenPage bcc ok2 pea prAbort _PrSetError bra exit ok2 anop jsl DrawWindow ;;Draw it ph4 PortGraf _PrClosePage ph4 PortGraf _PrCloseDoc ph4 #MyPrRecPtr ph4 #0 ph4 #0 _PrPicFile exit anop _InitCursor rts DoPrint end