-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy path+Edit.s
More file actions
15382 lines (14869 loc) · 300 KB
/
Copy path+Edit.s
File metadata and controls
15382 lines (14869 loc) · 300 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
; ______________________________________________________________________________
; ..............................................................................
; ...................................................................2222222....
; ................................................................22222222220...
; ...................................................222........222222.....222..
; ..............................................2202222222222..22000............
; ..................................22000.....20222222222200000200002...........
; .................................2002202...2222200222.220000000200000000022...
; ....................220002......22222200..2200002.......2200000...20000000000.
; ....................22222202....2220000022200000..........200002........200000
; .....200000.........2222200000222200220000000002..........200002........20000.
; .....00222202........2220022000000002200002000002........2000002000020000000..
; ....2222200000.......220002200000002.2000000000000222222000000..2000000002....
; ....220000200002......20000..200002..220000200000000000000002.......22........
; ...2220002.2200002....220002...22.....200002..0000000000002...................
; ...220000..222000002...20000..........200000......2222........................
; ...000000000000000000..200000..........00002..................................
; ..220000000022020000002.200002.........22.......______________________________
; ..0000002........2000000220022.................|
; .200000............2002........................| Editor
; .200002........................................| Modif
; 220002.........................................|______________________________
; ______________________________________________________________________________
;
OPT C-
Include "+Debug.s"
IFEQ Debug=2
Include "+AMOS_Includes.s"
Include "+Version.s"
ENDC
;_____________________________________________________________________________
; Branchements internes à l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EDebut dc.l Ed_Cold-EDebut
dc.l Ed_Title-EDebut
dc.l Ed_End-EDebut
dc.l Ed_Loop-EDebut
dc.l Ed_ErrRun-EDebut
dc.l Ed_CloseEditor-EDebut
dc.l Ed_KillEditor-EDebut
dc.l Ed_ZapFonction-EDebut
dc.l Ed_ZapIn-EDebut
dc.l Ed_RunDirect-EDebut
dc.l Tokenise-EDebut
dc.l Detok-EDebut
dc.l Mon_Detok-EDebut
dc.l TInst-EDebut
dc.l 0
; ______________________________________________________________________________
Ed_AutoMarksNb equ 4
;______________________________________________________________________________
;
Ed_SlHDeltaG equ -2
Ed_SlHDeltaD equ 1
Ed_SlHDeltaH equ 2
Ed_SlHSy equ 2
Ed_SlVDeltaG equ 6
Ed_SlVDeltaH equ 11
Ed_SlVSx equ 4
Ed_SlVDeltaB equ -1
Ed_SlHDy equ 2
Ed_SlVDx equ 4
Ed_ZBoutons equ 1000
Ed_XScrollG equ 20
Ed_XScrollD equ 10
Ed_YScrollH equ 4
Ed_YScrollB equ 4
Ed_YTop equ 0
Ed_TitreSy equ 16
Edt_EtatSy equ 11
Edt_BasSy equ 5
Edt_BtSx equ 24
; Images dans la banque
; ~~~~~~~~~~~~~~~~~~~~~
Ed_Pics equ 1
Ed_BtPics equ Ed_Pics+4
Ed_BoutonsPics equ Ed_BtPics+2*3
Ed_MemoryPics equ Ed_BoutonsPics+2*12
Es_Pics equ Ed_MemoryPics+3
Es_BoutonsPics equ Es_Pics+3
Ed_LogoSx equ 32*5
Ed_MemorySy equ 2
Ed_MemoryY1 equ Ed_YTop+3
Ed_MemoryY2 equ Ed_YTop+10
; Gros boutons
; ~~~~~~~~~~~~
Ed_BoutonsSx equ 32
Ed_BoutonsSy equ 16
Ed_TitleSx equ Ed_BoutonsSx*5
Ed_BoutonsX equ Ed_BoutonsSx+Ed_TitleSx
Ed_BoutonsY equ Ed_YTop
Ed_BoutonsZones equ 128
; Boutons Escape
; ~~~~~~~~~~~~~~
Es_BoutonsSx equ 32
Es_BoutonsSy equ 16
Es_BoutonsZones equ 1
Es_TitleSx equ Es_BoutonsSx*4
Es_TitleSy equ 16
Es_BoutonsX equ Es_BoutonsSx+Es_TitleSx
Es_BoutonsY equ 0
Es_MiniSy equ Es_TitleSy+8
; Nombre maximum de programme hidden dans le menu
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EdM_HiddenMax equ 12
; Numero du bouton ESCAPE
; ~~~~~~~~~~~~~~~~~~~~~~~
Bt_Insert equ 10
; Messages
; ~~~~~~~~
Ed_Mes equ 0 Debut des messages editeur
Ed_DiaImages equ 66 Debut des images dialogue dans la banque
; IfEQ ROnly
;______________________________________________________________________________
;
; Initialisation de l'editeur
;______________________________________________________________________________
;
Ed_Cold
clr.b Ed_Ok(a5) Pas en etat de marche!
bsr Ed_Available
cmp.l #50*1024,d1 Au moins 50k de CHIP
bcs.s .Mem
cmp.l #110*1024,d0 Au moins 110k de memoire en tout!
bcs.s .Mem
; Warm ou Cold?
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tst.b Ed_Warm(a5)
bne.s .UnKill
; Chargement vraiment à froid
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bsr Ed_LoadAllConfig Charge les fichiers
bne.s .Err
bsr Ed_Computee Des fenetres vides
bne.s .Err
bsr Ed_OpenEditor Ouvre l'editeur
bne.s .Err
move.b #1,Ed_Warm(a5) Flag change!
move.w #-1,EsFlag(a5) Force appear
clr.w Direct(a5) Pas mode direct
moveq #0,d0 Pas d'erreur
rts
; Chargement apres un KILL EDITOR
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.UnKill bsr Ed_LoadAllConfig Recharge les configs
bne.s .Err
moveq #0,d0
rts
; Une erreur
; ~~~~~~~~~~
.Mem moveq #1,d0
.Err move.l d0,-(sp)
bsr Ed_CloseEditor
bsr Ed_FreeAllConfig
move.l (sp)+,d0
rts
; Apparition du titre de l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_Title
bsr Ed_Appear
bsr Ed_WarmStart Un Warmstart?
moveq #"A",d0
bsr Ed_SamPlay Bonjour!
bsr Ed_About Titre
bsr Ed_Loca Curseur
rts
; Fenetres d'origines déja computées?
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_Computee
move.l Prg_List(a5),d0
move.l Edt_List(a5),a4
move.w #2,Ed_WMax(a5) Par default, au moins
.Loop move.l d0,a6
tst.b Prg_Edited(a6)
bne.s .Deja
moveq #-1,d0 Visible
moveq #-1,d1 Pas de structure PRG
bsr Edt_OpWindow Va ouvrir >>> fenetre courante
bne.s .Err
move.l a6,Edt_Prg(a4)
addq.b #1,Prg_Edited(a6)
.Deja move.l Prg_Next(a6),d0
bne.s .Loop
moveq #0,d0
rts
.Err moveq #1,d0 Out of memory!
rts
; Effacement de tous les fichiers de config
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_FreeAllConfig
bsr Ed_SamEnd Les sons
bsr EdMa_End Les macros
bsr EdC_Free Les configs
bsr Ed_ResourceFree La resource
rts
; Chargement de tous les fichiers de config
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_LoadAllConfig
; Charge la configuration de l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
moveq #7,d0
JJsr L_Sys_GetMessage
JJsrR L_Sys_AddPath,a1
bsr EdC_Load
bne.s .Err
; Charge la banque de resource
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
moveq #45,d0
bsr Ed_GetSysteme
JJsrR L_Sys_AddPath,a1
bsr Ed_ResourceLoad
bne.s .Err
; Charge les macros par defaut
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
moveq #46,d0
bsr Ed_GetSysteme
JJsrR L_Sys_AddPath,a1
bsr EdMa_Load
bne.s .Err
; Charge les sons par defaut
; ~~~~~~~~~~~~~~~~~~~~~~~~~~
bsr Ed_SamChanged
moveq #0,d0
.Err rts
;______________________________________________________________________________
;
; Fin
;______________________________________________________________________________
;
Ed_System
JJmp L_TheEnd
Ed_End tst.b Ed_Ok(a5) Systeme installe?
beq.s .Skip
bsr Edt_DelWindows Enleve les fenetres
.Skip lea Ed_Prg2ReLoad(a5),a0 Programme a recharger
bsr Ed_MemFree
bsr Ed_CloseEditor Ferme l'editeur
bsr Ed_FreeAllConfig Delete les configs
rts
;______________________________________________________________________________
;
; CLOSE/OPEN EDITOR
;______________________________________________________________________________
;
Ed_OpenEditor
movem.l d1-d7/a0-a6,-(sp)
tst.b Ed_Opened(a5)
bne.s .Ok
bsr Ed_OpenIt Premier essai
beq.s .Ok
bsr Ed_CloseIt Out of mem, on efface
bsr EdM_Program Menus du programme
move.l Edt_Current(a5),a4
move.l Edt_Prg(a4),a6
JJsr L_Prg_SetBanks Change les banques
JJsr L_MemMaximum Nettoie au maximum!
bsr Ed_OpenIt Deuxieme essai!
beq.s .Ok
bsr Ed_CloseIt
bsr EdM_Program
move.l Edt_Current(a5),a4
move.l Edt_Prg(a4),a6
JJsr L_Prg_SetBanks Change les banques
JJsr L_MemDelBanks Ligne: effacer les banques?
beq Ed_System NON: on sort!
JJsr L_Bnk.EffAll Efface toutes les banques
JJsr L_Bnk.Change Changement de banques
bsr Ed_OpenIt
beq.s .Ok
bsr Ed_CloseIt
moveq #1,d0 Out of mem
bra.s .Out
.Ok move.b #1,Ed_Opened(a5) Flag!
moveq #0,d0 C'est bon!
.Out movem.l (sp)+,d1-d7/a0-a6
rts
; Routine d'ouverture de l'editeur...
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_OpenIt
bsr Ed_SetBanks
bsr EdM_Editor
; Verification de la taille des fenetres / Config
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tst.b EdC_Modified(a5)
beq .ModX
clr.b EdC_Modified(a5)
move.l Edt_Current(a5),d0 Des fenetres?
beq .ModX
; Verification de la taille en Y
move.l d0,a4 Fenetre courante
moveq #-1,d0 Sans toucher les autres
bsr Edt_WMaxSize
cmp.w Edt_WindTy(a4),d0 Pareil?
beq.s .Mod5
moveq #0,d0 Reduit les autres
bsr Edt_WSchrinkAll
moveq #-1,d0
bsr Edt_WMaxSize Taille maxi acceptable
move.w d0,Edt_WindTy(a4)
bgt .Mod5 Ok!
.Mod2 move.w #1,Edt_WindTy(a4) Taille mini!
moveq #Ed_TitreSy,d1 Compte la taille necessaire!
move.l Edt_List(a5),d0 Toute la liste
.Mod3 move.l d0,a0
tst.b Edt_Hidden(a0) Deja cachee
bne.s .Mod4
add.w #Edt_EtatSy+Edt_BasSy,d1
move.w Edt_WindTy(a0),d0
lsl.w #3,d0
add.w d0,d1
.Mod4 move.l Edt_Next(a0),d0
bne.s .Mod3
move.w d1,Ed_Sy(a5) Change la config!!!!
; Verification de la position du curseur en X
.Mod5 move.w Ed_Sx(a5),d1 Derniere limite curseur
lsr.w #3,d1
subq.w #3,d1
move.l Edt_List(a5),d0 Toute la liste
.Mod6 move.l d0,a0
tst.b Edt_Hidden(a0) Deja cachee
bne.s .Mod7
move.w Edt_XCu(a0),d0
cmp.w d1,d0
bcs.s .Mod7
move.w d1,Edt_XCu(a0)
sub.w d1,d0
add.w d0,Edt_XPos(a0)
.Mod7 move.l Edt_Next(a0),d0
bne.s .Mod6
.ModX
bsr EdC_SetPalette Update de la palette
moveq #EcFonc,d0 Ouverture de l'ecran de fonctions
move.w Ed_Sx(a5),d1
ext.l d1
moveq #Es_TitleSy,d2
moveq #0,d3
move.l Ed_Resource(a5),a0
add.l 2(a0),a0
moveq #0,d4
JJsrR L_Dia_RScOpen,a1
bne .Error
bset #BitHide,EcFlags(a0)
move.w Ed_Wx(a5),EcAWX(a0)
moveq #20,d1
SyCall ResZone
bne .Error
moveq #EcEdit,d0 Ouverture de l'ecran principal
move.w Ed_Sx(a5),d1
ext.l d1
move.w Ed_Sy(a5),d2
addq.w #7,d2
and.w #$FFF8,d2
move.w d2,d3
sub.w #16,d3
sub.w #Ed_YTop,d3
lsr.w #3,d3
move.w d3,Ed_Ty(a5)
ext.l d2
moveq #1,d3
moveq #0,d4 Interlaced?
move.b Ed_Inter(a5),d4
move.l Ed_Resource(a5),a0
add.l 2(a0),a0
JJsrR L_Dia_RScOpen,a1
bne.s .Error
bset #BitHide,EcFlags(a0)
move.w Ed_Wx(a5),EcAWX(a0)
move.w Ed_Wy(a5),EcAWY(a0)
moveq #10,d0
bsr Et_Print
move.w Ed_Ty(a5),d0 Buffer d'edition
mulu #256,d0
SyCall MemFast
move.l a0,Ed_BufE(a5)
beq .Error
moveq #0,d0 Nombre maximum de programmes
move.w Ed_Ty(a5),d0
subq.w #6,d0
divu #3,d0
move.w d0,Ed_WMax(a5)
jsr Tok_Init Les tables de tokenisation
bne.s .Error
bsr Ed_InitDialogues Les dialogues
bne.s .Error
bsr EdM_Init Cree les menus
bne.s .Error
bsr Prg_CreateUndos Les buffers UNDOS de programmes
; Pas d'erreur
clr.b EdC_Modified(a5) Config adaptee...
moveq #0,d0 Pas d'erreur!
rts
; Out of memory
.Error moveq #1,d0 Out of memory
rts
; Fermeture generale de l'editeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_KillEditor
bsr Ed_CloseEditor Plus rien
bsr Ed_FreeAllConfig Plus aucune configuration
clr.b Ed_Ok(a5) Plus en etat de marche...
rts
; Fermeture de l'éditeur
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_CloseEditor
tst.b Ed_Opened(a5)
beq.s .Skip
clr.b Ed_Opened(a5)
movem.l d0-d7/a0-a6,-(sp)
bsr Ed_CloseIt
movem.l (sp)+,d0-d7/a0-a6
.Skip rts
; Routine de fermeture..
; ~~~~~~~~~~~~~~~~~~~~~~
Ed_CloseIt
bsr Ed_SetBanks Banques de l'editeur
bsr Prg_FreeUndos Plus de buffer UNDOS
bsr Esc_KMemEnd Plus de touches de mode direct
bsr Ed_AllAverFin Plus d'avertissement
bsr Ed_BlocFree Plus de bloc
bsr EdM_End Plus de menus
bsr Ed_EndDialogues Plus de dialogues
bsr Edt_DelAllZones Plus de zones de fenetres
EcCalD Del,EcEdit Plus d'ecrans
EcCalD Del,EcFonc
jsr Tok_Del Plus de tokenisation
move.l Ed_BufE(a5),d0 Plus de buffer d'edition
beq.s .Skip
clr.l Ed_BufE(a5)
move.l d0,a1
move.w Ed_Ty(a5),d0
mulu #256,d0
SyCall MemFree
.Skip rts
; Retourne la memoire libre dans la machine
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_Available
movem.l a0/a1/a6,-(sp)
move.l $4.w,a6
move.l #Public|Fast,d1
jsr _LVOAvailMem(a6)
move.l d0,d2
move.l #Public|Chip,d1
jsr _LVOAvailMem(a6)
move.l d0,d1
add.l d2,d0
movem.l (sp)+,a0/a1/a6
rts
;______________________________________________________________________________
;
; WARM START Charge le fichier / Prepare l'editeur
;______________________________________________________________________________
;
Ed_WarmStart
; Fichier "Last Cession" present?
moveq #47,d0
bsr Ed_GetSysteme
JJsrR L_Sys_AddPath,a1
JJsr L_RExist
beq .Out
; Message
move.w #159,d0
bsr Ed_AverMess
; Efface la premiere fenetre systeme
move.l Edt_List(a5),d0
beq.s .No1
move.l d0,a4
bsr Edt_DelWindow
.No1
; PHASE 1: re-creation des listes
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.l #1005,d2 Ouvre le fichier
bsr Ed_Open
beq .Err1
; Verifie l'entete
move.l Buffer(a5),a3
move.l a3,d2
moveq #8,d3
bsr Ed_Read
bne .Err0
cmp.l #Ed_QuitHead,(a3)
bne .Err0
; Charge dans un buffer
move.l 4(a3),d0 Taille necessaire
JJsr L_ResTempBuffer
beq .Err0
move.l a0,d2
move.l 4(a3),d3
bsr Ed_Read
bne .Err0
bsr Ed_Close
; Trouve les structures
move.l TempBuffer(a5),a6 A6= Structures programmes
move.l a6,a4 A4= Structures edition
moveq #-8,d0
.GLoop lea 8(a4,d0.l),a4
move.l 4(a4),d0
tst.l (a4)+
bne.s .GLoop
; Recree la liste PRG
lea Prg_List(a5),a2
move.l a6,a3
.PCree move.l #Prg_Long,d0 Reserve la memoire
SyCall MemFastClear
beq .Err
move.l a0,Prg_Next(a2) Branche dans la liste
move.l a0,a2
move.l a0,8(a3) Stocke l'adresse
moveq #Prg_Long/2-1,d0
lea 12(a3),a1
.PCop move.w (a1)+,(a0)+ Copie les datas
dbra d0,.PCop
move.l Prg_StTTexte(a2),Prg_StBas(a2)
clr.l Prg_StTTexte(a2)
clr.l Prg_Dialogs(a2) Erase donnees importantes!
clr.l Prg_Banks(a2)
clr.l Prg_Undo(a2)
clr.l Prg_AdEProc(a2)
clr.l Prg_ZapData(a2)
clr.l Prg_RunData(a2)
clr.l Prg_Previous(a2)
move.l 4(a3),d0 Encore un?
lea 12(a3,d0.l),a3
tst.l (a3)
bne.s .PCree
; Recree la liste EDT
lea Edt_List(a5),a2
move.l a4,a3
.ECree move.l #Edt_Long,d0 Reserve la memoire
SyCall MemFastClear
beq .Err
move.l a0,Edt_Next(a2) Branche dans la liste
move.l a0,a2
move.l a0,8(a3) Change le pointeur
moveq #Edt_Long/2-1,d0
lea 12(a3),a1
.ECop move.w (a1)+,(a0)+ Copie les datas
dbra d0,.ECop
move.l 4(a3),d0 Encore un?
lea 12(a3,d0.l),a3
tst.l (a3)
bne.s .ECree
; Relinke les fenetres
move.l Edt_List(a5),a3
.LLoop lea Edt_Prg(a3),a0 Structure programme
move.l a6,a1 Explorer les programmes
bsr .Linke
lea Edt_LinkPrev(a3),a0 Link previous
move.l a4,a1
bsr .Linke
lea Edt_LinkNext(a3),a0 Link next
move.l a4,a1
bsr .Linke
lea Edt_LinkScroll(a3),a0 Link de scroll
move.l a4,a1
bsr .Linke
tst.w Edt_Order(a3) Programme courant?
beq.s .Pac
move.l a3,Edt_Current(a5)
.Pac move.l Edt_Next(a3),d0
move.l d0,a3
bne.s .LLoop
; On peut effacer le buffer!
moveq #0,d0
JJsr L_ResTempBuffer
; PHASE 2 : recharge tous les programmes
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.l Prg_List(a5),a6
.CLoop lea Prg_NamePrg(a6),a0 Recopie le nom
move.l Name1(a5),a1
bsr EdCocop
move.l Prg_StBas(a6),d0 Change la taille du buffer
JJsr L_Prg_ChgTTexte
beq .Err
moveq #1,d0 Charge sans adapter
JJsr L_Prg_Load
bne .Err
tst.b Prg_NoNamed(a6) Enleve le nom si necessaire
beq.s .Name
clr.b Prg_NamePrg(a6)
clr.b Prg_NoNamed(a6)
move.b #1,Prg_Change(a6) Force une sauvegarde si close...
move.l a6,-(sp)
move.l Name1(a5),d1 Efface, si possible
move.l DosBase(a5),a6 Sans verification...
jsr _LVODeleteFile(a6)
move.l (sp)+,a6
.Name move.l Prg_Next(a6),d0
move.l d0,a6
bne.s .CLoop
; TERMINE: efface le fichier, puis raffiche les fenetres
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bsr .DelFichier
bsr Prg_CreateUndos
bsr EdM_BranchAMOS
bsr Ed_DrawWindows
.Out rts
; Destruction du fichier d'informations
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.DelFichier
bsr Ed_Close
moveq #47,d0
bsr Ed_GetSysteme
JJsrR L_Sys_AddPath,a1
move.l Name1(a5),d1
move.l DosBase(a5),a6
jsr _LVODeleteFile(a6)
tst.l d0
beq.s .DelPa
rts
.DelPa moveq #EdD_WarmDel,d0
bsr Ed_Dialogue
cmp.w #1,d0
beq.s .DelFichier
; Efface tout, puis FATAL!
bsr .Err
bra Ed_System
; Change les pointeurs de fenetre
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.Linke move.l (a0),d0
beq.s .PoX
.PoL cmp.l (a1),d0
beq.s .PoF
move.l 4(a1),d1
lea 12(a1,d1.w),a1
tst.l (a1)
bne.s .PoL
.PoF move.l 8(a1),(a0)
.PoX rts
; Erreur pendant le rechargement: efface tout!
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.Err
; Les programmes
move.l Prg_List(a5),d6
bra.s .EPrg1
.EPrg0 move.l d6,a6
move.l Prg_Next(a6),d6 Stocke le suivant
moveq #0,d0 Buffer eventuellement reserve
JJsr L_Prg_ChgTTexte
move.l Prg_Banks(a6),Cur_Banks(a5)
JJsr L_Bnk.EffAll Banques eventuellement reservees
move.l a6,a1 Libere la memoire
move.l #Prg_Long,d0
SyCall SyFree
.EPrg1 tst.l d6 Encore un?
bne.s .EPrg0
clr.l Prg_List(a5)
; Les fenetres
move.l Edt_List(a5),d4
bra.s .EEdt1
.EEdt0 move.l d4,a4
move.l Edt_Next(a4),d4 Stocke le suivant
move.l a4,a1 Libere la memoire
move.l #Edt_Long,d0
SyCall SyFree
.EEdt1 tst.l d4 Encore un?
bne.s .EEdt0
clr.l Edt_List(a5)
; Va effacer le fichier
.Err1 bsr .DelFichier
; Ferme le fichier courant
.Err0 bsr Ed_Close Ferme le fichier
moveq #0,d0 Efface le buffer
JJsr L_ResTempBuffer
; ROuvre la premiere fenetre
clr.l Edt_Current(a5)
moveq #-1,d0 Visible
move.l PI_DefSize(a5),d1 Taille
sub.l a4,a4 Pas de fenetre courante
bsr Edt_OpWindow
bsr EdM_BranchAMOS
bsr Ed_DrawWindows
; Boite de dialogue
moveq #EdD_WarmErr,d0
bsr Ed_Dialogue
rts
;______________________________________________________________________________
;
; Dessin du titre
;______________________________________________________________________________
;
Ed_DrawTop
movem.l a2/d2-d7,-(sp)
;
; Reserve les zones
; ~~~~~~~~~~~~~~~~~
move.l #Ed_BoutonsZones+15,d1
SyCall ResZone
move.w Ed_Sx(a5),d7
; Unpack le logo AMOS
; ~~~~~~~~~~~~~~~~~~~
moveq #Ed_Pics,d0
moveq #Ed_BoutonsSx,d1
moveq #Ed_YTop,d2
bsr Ed_Unpack
sub.w #Ed_TitleSx,d7
;
; Cree les 12 boutons
; ~~~~~~~~~~~~~~~~~~~
lea Ed_Boutons(a5),a2
move.w #Ed_BoutonsX,d2
moveq #Ed_BoutonsY,d3
moveq #Ed_BoutonsPics,d4
move.w #Ed_BoutonsZones,d5
moveq #1,d6
.Loop move.w d6,Bt_Number(a2)
cmp.w #1,d6
bne.s .Pa1
clr.w Bt_X(a2) Bouton DIRECT
bra.s .PaB
.Pa1 cmp.w #2,d6
bne.s .Pa2
move.w Ed_Sx(a5),Bt_X(a2) Bouton WB
sub.w #Ed_BoutonsSx,Bt_X(a2)
bra.s .PaB
.Pa2 move.w d2,Bt_X(a2)
add.w #Ed_BoutonsSx,d2
.PaB move.w d3,Bt_Y(a2)
move.w d4,Bt_Image(a2)
move.w d5,Bt_Zone(a2)
lea Bt_RoutIn(pc),a0
move.l a0,Bt_Routines(a2)
move.b #6,Bt_RDraw(a2)
clr.b Bt_RPos(a2)
clr.b Bt_RChange(a2)
clr.b Bt_Flags(a2)
clr.w Bt_Pos(a2)
cmp.w #Bt_Insert,d6 Bouton INSERT?
bne.s .PaI
bset #Bt_FlagOnOf,Bt_Flags(a2)
tst.b Ed_Insert(a5)
bne.s .PaI
move.w #1,Bt_Pos(a2)
.PaI move.b #Ed_BoutonsSx,Bt_Sx(a2)
move.b #Ed_BoutonsSy,Bt_Sy(a2)
addq.w #2,d4
addq.w #1,d5
move.l a2,a0
moveq #1,d0
JJsrR L_Bt_Init,a1
sub.w #Ed_BoutonsSx,d7
lea Bt_Long(a2),a2
addq.w #1,d6
cmp.w #12,d6
bls .Loop
clr.w (a2)
; Dessine les sliders de memoire
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.w d2,d1
moveq #Ed_YTop,d2
move.w d7,d3
lea Ed_Unpack(pc),a2
bsr Ed_MemoryDraw
bsr Ed_MemoryAff
; Fini!
; ~~~~~
movem.l (sp)+,a2/d2-d7
rts
; Dessine les sliders de memoire
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; D1= X
; D2= Y
; D3= Largeur
; A2= Adresse UNPACK
Ed_MemoryDraw
move.w d3,d0
sub.w #Ed_BoutonsSx+7,d0
move.w d0,Ed_MemorySx(a5)
moveq #Ed_MemoryPics,d0 La gauche
jsr (a2)
add.w #Ed_BoutonsSx,d1
move.w d1,Ed_MemoryX(a5)
divu #Ed_BoutonsSx,d3
subq.w #2+1,d3
.Loop moveq #Ed_MemoryPics+1,d0
jsr (a2)
add.w #Ed_BoutonsSx,d1
dbra d3,.Loop
moveq #Ed_MemoryPics+2,d0
jmp (a2)
; Dessine le contenu des sliders de memoire.
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ed_MemoryAff
move.l a6,-(sp)
move.l $4.w,a6
; Dessin du slider de CHIP MEM
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.l #Chip|Public,d1
jsr _LVOAvailMem(a6)
move.l d0,-(sp)
move.l MemChipTotal(a5),d4
move.l d4,d3
sub.l d0,d3
move.w Ed_MemoryX(a5),d1
move.w #Ed_MemoryY1,d2
bsr .Memory
; Dessin du slider de FAST MEM
move.l #Public|Fast,d1
jsr _LVOAvailMem(a6)
add.l d0,(sp)
move.l MemFastTotal(a5),d4
move.l d4,d3
sub.l d0,d3
move.w Ed_MemoryX(a5),d1
move.w #Ed_MemoryY2,d2
bsr .Memory
; Stocke le resultat memoire globale
move.l (sp)+,Ed_MemCurrent(a5)
move.l (sp)+,a6
rts
; Routine de dessin
; ~~~~~~~~~~~~~~~~~
.Memory
; Une place dans le buffer
; ~~~~~~~~~~~~~~~~~~~~~~~~
move.l Buffer(a5),a2
move.l a2,a0
moveq #Sl_Long-1,d0
.Loop clr.b (a0)+
dbra d0,.Loop
; Longueur du slider
lsr.l #8,d4
lsr.l #8,d3
move.w d4,Sl_Global(a2)
move.w d3,Sl_Window(a2)
; Position
move.w d1,Sl_X(a2)
move.w d2,Sl_Y(a2)
move.w Ed_MemorySx(a5),Sl_Sx(a2)
move.w #Ed_MemorySy,Sl_Sy(a2)
; Couleurs
moveq #23,d0
bsr Ed_GetSysteme
lea Sl_Inactive(a2),a1
moveq #16-1,d0
.Co moveq #0,d1
move.b (a0)+,d1
move.w d1,(a1)+
dbra d0,.Co
; Appelle le dessin
move.l a2,a0
JJsrR L_Sl_Init,a1
rts
;______________________________________________________________________________
;
; Boucle principale de l'éditeur
;______________________________________________________________________________
;
Ed_Loop
move.l BasSp(a5),sp
EcCalD Active,EcEdit
; Flag: editeur en etat de marche!
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move.b #1,Ed_Ok(a5)
move.w #1,T_AMOState(a5) Editeur present!
; Efface une fenetre en rab
; __________________________
;
move.l Ed_WindowToDel(a5),d0
beq.s .PaDel
move.l d0,a4
clr.l Ed_WindowToDel(a5)
tst.b Edt_Hidden(a4)
bne.s .Visi
bsr Ed_CloseWindow
bra Ed_Loop
.Visi bsr Edt_DelWindow
bsr EdM_BranchAMOS
bra Ed_Loop
.PaDel
;
; Eventuellement, efface tous les avertissements
; ______________________________________________
;
bsr Ed_AllAverFin
;
; Recharge un programme apres PRG COMMAND
; _______________________________________
;
move.l Ed_Prg2ReLoad(a5),d0
bne Ed_PrgReLoad
move.l Edt_Current(a5),a4
move.l Edt_Prg(a4),a6
move.b Prg_MathFlags(a6),MathFlags(a5)
;
; Securites
; __________________________
;
clr.b Ed_FUndo(a5) Undo
clr.b Ed_RunnedHidden(a5)
;
; Gestion des multi windows
; ___________________________
;
moveq #0,d0
move.l a4,a0
or.b Ed_SCallFlags(a5),d0
bsr Ed_Splitted
clr.b Ed_SCallFlags(a5)
;
; Gestion des scrollings lies
; _____________________________
;
bsr Ed_LinkeScroll
;
; Gestion du curseur avec un bloc
; _______________________________
;
bsr Ed_BlocAff
;
; Gestion de la fenetre d'informations pour toutes les fenetres
; _____________________________________________________________
;
; Exploration de la liste
move.l Edt_List(a5),d0
.Liip move.l d0,a4
tst.b Edt_Hidden(a4)
bne.s .Naxt
move.l Edt_Prg(a4),a6
; Affichage general
; ~~~~~~~~~~~~~~~~
move.b Ed_EtatAff(a5),d0
or.b d0,Edt_EtatAff(a4)
; Efface le message d'alerte?
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
tst.w Edt_EtMess(a4)
beq.s .PaMess
subq.w #1,Edt_EtMess(a4)
bne.s .PaMess
move.b #EtA_BAll,Edt_EtatAff(a4)
.PaMess
; Va reafficher la fenetre
; ~~~~~~~~~~~~~~~~~~~~~~~~
bsr Ed_EtPrintD0
; Affiche le slider
; ~~~~~~~~~~~~~~~~~
tst.b Edt_ASlY(a4)
beq.s .PaSlY
subq.b #1,Edt_ASlY(a4)