home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Softdisk G-S 97
/
SGDS 97.2mg
/
SDGS.97
/
SDC97
/
C
/
MACRO.EDITOR
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Applesoft BASIC Source Code
|
1989-09-20
|
4.2 KB
|
211 lines
|
[FC] Applesoft BASIC Program (0x0801)
10 :
20 REM =======================
30 REM MACRO.EDITOR
40 REM BY BILL TUDOR
50 REM BI.MACROS EDITOR
60 REM V1.5 05-SEP-88
70 REM =======================
80 :
90 IF PEEK(104) = 64 AND PEEK(103) = 1 THEN 110
100 POKE 104,64: POKE 103,1: POKE 16384,0: PRINT CHR$(4);"RUN MACRO.EDITOR"
110 DIM M%(30),MA(30),DA%(30,36),T%(40)
120 A1 = 2109:A2 = 2049:A3 = 2140
130 :
140 REM ==================
150 REM DISPLAY SCREEN:
160 REM ==================
170 :
180 PRINT CHR$(21): HOME
190 PRINT " ---------------------------------"
200 PRINT " MACRO.EDITOR V1.5"
210 PRINT " BY BILL TUDOR"
220 PRINT " ---------------------------------": PRINT
230 :
240 REM ==================
250 REM GET MACRO FILE:
260 REM ==================
270 :
280 PRINT "LOADING CURRENT MACROS..";
290 PF$ = "": ONERR GOTO 5000
300 PRINT CHR$(4);"BLOAD";PF$;"MACRO.MAGIC,A$0800,B$18D,L$494"
305 IF PEEK(A2 -1) < >15 THEN PRINT : PRINT CHR$(7);"WRONG VERSION OF <MACRO.MAGIC>!": GET Q$: GOTO 1060
310 :
320 REM ==================
330 REM PROCESS FILE:
340 REM ==================
350 :
360 M%(0) = PEEK(A1): REM -NUMBER OF MACROS
370 FOR I = 1 TO M%(0)
380 M%(I) = PEEK(A1 +I): REM -MACRO KEYS
390 NEXT
400 FOR I = 0 TO 29
410 MA(I +1) = A3 +I *36: REM -MACRO ADDRESS
420 NEXT
430 FOR I = 1 TO M%(0)
440 DA%(I,0) = PEEK(MA(I)): REM -DATA LENGTHS
450 FOR J = 1 TO DA%(I,0)
460 DA%(I,J) = PEEK(MA(I) +J)
470 NEXT J
480 NEXT I
490 :
500 REM ==================
510 REM MAIN MENU:
520 REM ==================
530 :
540 VTAB 4: PRINT : CALL -958
550 PRINT " A(DD) A MACRO"
560 PRINT " D(ELETE) A MACRO"
570 PRINT " Q(UIT) MACRO EDITOR"
580 PRINT
590 PRINT " OPTION:< >"
600 PRINT " ---------------------------------"
610 PRINT " CURRENT MACRO KEYS:": PRINT
620 FOR I = 1 TO M%(0)
630 IF M%(I) <160 THEN PRINT SPC( 4);: INVERSE : PRINT CHR$(M%(I) +64);: NORMAL : PRINT SPC( 5);: GOTO 650
640 PRINT SPC( 4); CHR$(M%(I)); SPC( 5);
650 NEXT
660 PRINT : PRINT " ---------------------------------"
670 VTAB 9: HTAB 21: GET K$
680 IF K$ = CHR$(27) THEN K$ = "Q"
690 IF K$ = "A" OR K$ = "a" THEN 1080
700 IF K$ = "D" OR K$ = "d" THEN 1670
710 IF K$ < >"Q" AND K$ < >"q" THEN PRINT CHR$(7);: GOTO 670
720 :
730 REM ==================
740 REM QUIT:
750 REM ==================
760 :
770 PRINT K$;: VTAB 23: PRINT
780 PRINT "SAVE CURRENT MACROS(Y/N)?";
790 GET K$
800 IF K$ = "N" OR K$ = "n" THEN 1060
810 IF K$ = CHR$(27) THEN 540
820 IF K$ < >"Y" AND K$ < >"y" THEN PRINT CHR$(7);: GOTO 790
830 :
840 REM ==================
850 REM SAVE CURRENT MACRO SET:
860 REM ==================
870 :
880 VTAB 4: PRINT : CALL -958: PRINT : PRINT "SAVING CURRENT MACROS.."
890 POKE A1,M%(0): REM -NUMBER OF MACROS
900 FOR I = 1 TO M%(0)
910 POKE A1 +I,M%(I): REM -MACRO KEYS
920 NEXT
930 FOR I = 1 TO M%(0)
940 POKE MA(I),DA%(I,0): REM -DATA LENGTHS
950 FOR J = 1 TO DA%(I,0)
960 POKE MA(I) +J,DA%(I,J)
970 NEXT J
980 NEXT I
990 :
1000 REM ==================
1010 REM SAVE NEW FILE:
1020 REM ==================
1030 :
1040 PRINT CHR$(4);"UNLOCK";PF$;"MACRO.MAGIC"
1050 PRINT CHR$(4);"BSAVE";PF$;"MACRO.MAGIC,A$0800,B$18D,L$494"
1060 HOME
1070 PRINT CHR$(4);"BYE"
1080 :
1090 REM ==================
1100 REM ADD A MACRO:
1110 REM ==================
1120 :
1130 IF M%(0) = 30 THEN PRINT CHR$(7);: GOTO 540
1140 PRINT K$;: VTAB 22: PRINT
1150 PRINT "SELECT MACRO KEY:";
1160 GET K$: IF K$ = "" THEN K$ = CHR$(0)
1161 K = ASC(K$)
1170 IF K = 27 THEN 540
1180 X = 0:K = K +128
1190 IF K >224 AND K <251 THEN K = K -32
1200 FOR I = 1 TO M%(0)
1210 IF M%(I) = K THEN X = I
1220 NEXT
1230 IF X = 0 THEN 1300
1240 IF ASC(K$) <32 THEN INVERSE : PRINT CHR$( ASC(K$) +64): NORMAL : GOTO 1260
1250 PRINT K$
1260 PRINT "REPLACE OLD MACRO(Y/N)?";
1270 GET Q$: IF Q$ = CHR$(27) THEN Q$ = "N"
1280 IF Q$ = "N" OR Q$ = "n" THEN 540
1290 IF Q$ < >"Y" AND Q$ < >"y" THEN PRINT CHR$(7);: GOTO 1270
1300 VTAB 22: HTAB 1: CALL -958
1310 PRINT "ADDING MACRO:";
1320 IF ASC(K$) <32 THEN INVERSE : PRINT CHR$( ASC(K$) +64): NORMAL : GOTO 1340
1330 PRINT K$
1340 PRINT "USE <CNTRL-@> TO END/ESC TO ABORT."
1350 IF ASC(K$) <32 THEN INVERSE : PRINT CHR$( ASC(K$) +64);: NORMAL : GOTO 1370
1360 PRINT K$;
1370 PRINT ":<"; SPC( 35);">";
1380 :
1390 REM ==================
1400 REM GET NEW MACRO:
1410 REM ==================
1420 :
1430 L = 0
1440 VTAB 24: HTAB 4 +L: GET Q$
1450 IF Q$ = CHR$(27) THEN 540
1460 IF Q$ = "" THEN 1520
1470 L = L +1:T%(L) = ASC(Q$) +128
1480 IF L = 35 THEN 1520
1490 IF Q$ > = " " THEN PRINT Q$;: GOTO 1440
1500 INVERSE : PRINT CHR$( ASC(Q$) +64);: NORMAL
1510 GOTO 1440
1520 HTAB 1: CALL -958: IF L = 0 THEN 540
1530 PRINT "ADDING MACRO..";
1540 T%(0) = L
1550 IF X = 0 THEN 1610
1560 M%(X) = K
1570 FOR I = 0 TO L
1580 DA%(X,I) = T%(I)
1590 NEXT
1600 GOTO 540
1610 M%(0) = M%(0) +1
1620 M%(M%(0)) = K
1630 FOR I = 0 TO L
1640 DA%(M%(0),I) = T%(I)
1650 NEXT
1660 GOTO 540
1670 :
1680 REM ==================
1690 REM DELETE A MACRO:
1700 REM ==================
1710 :
1720 IF M%(0) = 1 THEN PRINT CHR$(7);: GOTO 540
1730 PRINT K$;: VTAB 22: PRINT
1740 PRINT "SELECT MACRO KEY:";
1750 GET K$
1760 K = ASC(K$)
1770 IF K = 27 THEN 540
1780 X = 0:K = K +128
1790 IF K >224 AND K <251 THEN K = K -32
1800 FOR I = 1 TO M%(0)
1810 IF M%(I) = K THEN X = I
1820 NEXT
1830 IF X = 0 THEN PRINT CHR$(7);: GOTO 1750
1840 IF ASC(K$) <32 THEN INVERSE : PRINT CHR$( ASC(K$) +64): NORMAL : GOTO 1860
1850 PRINT K$
1860 PRINT "DELETING MACRO..";
1870 M%(0) = M%(0) -1
1880 IF X >M%(0) THEN 540
1890 FOR I = X TO M%(0)
1900 M%(I) = M%(I +1)
1910 NEXT
1920 FOR I = X TO M%(0)
1930 FOR J = 0 TO 35
1940 DA%(I,J) = DA%(I +1,J)
1950 NEXT J
1960 NEXT I
1970 GOTO 540
5000 :
5010 REM ==================
5020 REM ERROR HANDLER:
5030 REM ==================
5040 :
5050 EC = PEEK(222): IF EC < >6 THEN POKE 216,0: RESUME
5060 VTAB 20: PRINT
5070 PRINT "CANNOT FIND <MACRO.CMD> FILE."; CHR$(7)
5080 INPUT "ENTER PREFIX:";PF$
5090 IF RIGHT$(PF$,1) < >"/" THEN PF$ = PF$ +"/"
5100 VTAB 20: CALL -958
5110 RESUME