Dr.Godfried-Willem RAES
Kursus Experimentele Muziek
: Boekdeel 1: Algoritmische KompositieHogeschool Gent : Departement Muziek & Drama
< Terug naar inhoudstafel kursus> |
1602:
Kompakteren
Bij erg omvangrijke software-projekten kan het gebeuren dat we bij het opladen van de software in de programmeeromgeving merken dat we onvoldoende werkgeheugen overhouden. In plaats van dan maar wild te gaan schrappen in de in de bronkode vervatte aantekeningen, is het veel beter via een kleine utility, de kommentaren tijdelijk uit de bronkode te verwijderen.
Ook wanneer kode wordt geschreven voor een of ander dedicated system waarbij het de bedoeling is deze kode uiteindelijk in een EPROM onder te brengen, is het essentieel over een versie van de kode te beschikken waar geen de minste kommentaar meer in terug te vinden is.
Zoals we weten, dienen kommentaarregels in Basic te worden voorafgegaan door ofwel de kode REM ofwel eenvoudigweg een afkappingsteken ' . Op grond daarvan kan eenvoudig een programma worden geschreven dat de bron-file inleest en kopieert onder een andere naam zonder statements die beginnen met ' of REM.
Een filter-programma dus. Zo'n filter programma, kan op zijn beurt weer via een batch-file telkens opnieuw worden gebruikt.
Een voorbeeld van een programma dat ik schreef om van een gegeven bronbestand een listing te maken die rechtstreeks geschikt is om ingeladen te worden in een EPROM voor een multitrax dedicated komputerboard, ziet eruit alsvolgt:
' **********************************
' * MTUTIL.BAS *
' * utility - program for the *
' * MULTITRAX - MT-Board used *
' * for "A BOOK OF MOVES" V1.0 *
' **********************************
' updated 25.08.92, updated 30.01.93 : autoboot-code automatically added to code
' Utilities for:
' - removing comments and documentation from Multitrax-Basic
' Source-code program listings in order to obtain downloadable source code files for the MT-Board
' - removing apostrophed lines from the workfile used for experiment
' research and development, in order to obtain publishable documented source code listings
' - generating binary source-code files for Eprom's to be used on the MT-board
MENU1:
CLS
LOCATE 10, 10: PRINT " This program filters comments from ";
LOCATE 11, 10: PRINT " MULTITRAX-BASIC program files ";
LOCATE 12, 10: PRINT " ***********************************";
LOCATE 13, 10: INPUT " Basic-program LST file to filter ?", F$
LOCATE 14, 10: INPUT " File-name for downloadable output file ?", FO$
LOCATE 15, 10: INPUT " Do you want to create a *.DOC file also? (Y/N) ", K$
FD$ = ""
IF K$ = "Y" OR K$ = "y" THEN
LOCATE 15, 1PRINT SPACE$(60);:
LOCATE 15, 10: INPUT " File-name for output DOC file ?", FD$
END IF
' filter the input file for making a *.BAS source code file:
MKBASFIL:
Regelnummer = 0
OPEN F$ FOR INPUT AS #1 : OPEN FO$ FOR OUTPUT AS #2
WHILE NOT EOF(1)
LINE INPUT #1, IN$
' alleen regels die met een cijfer beginnen worden als geldige code gezien
' de geldige regels mogen geen leading blanks hebben! dus niet : IN$ = LTRIM$(IN$)
IF LEFT$(IN$, 1) >= "0" AND LEFT$(IN$, 1) <= "9" THEN
' elimineer ook spaties aan het eind van een regel:
IN$ = RTRIM$(IN$)
Regelnummer = Regelnummer + 1 : ' schrijf de gefilterde regel weg naar de nieuwe file:
PRINT #2, IN$
END IF
WEND
CLOSE #1 : CLOSE #2
LOCATE 16, 10: PRINT Regelnummer; " regels kode gefilterd.";
MKDOCFIL:
OPEN F$ FOR INPUT AS #1
OPEN FD$ FOR OUTPUT AS #2
WHILE NOT EOF(1)
LINE INPUT #1, IN$
IN$ = RTRIM$(IN$) ' alleen regels die niet met ' beginnen worden behouden:
IF LEFT$(IN$, 1) <> "'" THEN PRINT #2, IN$
WEND
CLOSE #1 : CLOSE #2
MKROMFIL:
LOCATE 17, 10: PRINT " Do you want an EPROM-code file as well ?";
INPUT "(Y/N) ?"; K$
IF K$ <> "Y" AND K$ <> "y" THEN CLS: END
MKMTROM: ' set memory segment to some safe area:
DEF SEG = &H8000 ' set start adress to 0 ' for appending eprom files, it should be set to another value
A = 0 : ' make the header:' the first byte is probably the rom-program number
FOR A = 0 TO &HFF : POKE A, &HFF: IF A = 0 THEN POKE A, &H1 : NEXT A
A = &H100
IF K$ <> "Y" AND K$ <> "y" THEN LOCATE 14, 5: INPUT "Basic-program to convert (filename) ? ", F$ ELSE F$ = FO$
OPEN F$ FOR INPUT AS 1
DO UNTIL EOF(1) :' every basic line should be preceded with 0D 0A codes
POKE A, &HD: A = A + 1
POKE A, &HA: A = A + 1
LINE INPUT #1, K$ :' remove blanks at the end of the statement
K$ = RTRIM$(K$) : ' put 1 single blank back:
K$ = K$ + CHR$(&H20)
L = LEN(K$)
FOR J = 1 TO L: POKE A, ASC(MID$(K$, J)): A = A + 1 : NEXT J
LOOP
CLOSE 1
POKE A, &H20: A = A + 1 :POKE A, &HD: A = A + 1 :POKE A, &HA: A = A + 1
' hier volgt USERMEM $200 statement in hex:
POKE A, &H55: A = A + 1:POKE A, &H53: A = A + 1:POKE A, &H45: A = A + 1:POKE A, &H52: A = A + 1: POKE A, &H4D: A = A + 1
POKE A, &H45: A = A + 1:POKE A, &H4D: A = A + 1: POKE A, &H20: A = A + 1: POKE A, &H24: A = A + 1:POKE A, &H32: A = A + 1
POKE A, &H30: A = A + 1 LPOKE A, &H30: A = A + 1 LPOKE A, &HD: A = A + 1 :POKE A, &HA: A = A + 1 :POKE A, &H20: A = A + 1
' hier volgt NOERR
POKE A, &H4E: A = A + 1:POKE A, &H4F: A = A + 1:POKE A, &H45: A = A + 1:POKE A, &H52: A = A + 1
POKE A, &H52: A = A + 1:POKE A, &H20: A = A + 1:POKE A, &HD: A = A + 1:POKE A, &HA: A = A + 1
' hier volgt END:POKE A, ASC("E"): A = A + 1
POKE A, ASC("N"): A = A + 1:POKE A, ASC("D"): A = A + 1:POKE A, &HD: A = A + 1:POKE A, &HA: A = A + 1
FOR J = A TO &H7FFF: ' MT-board uses 32k EPROMs (27C256)
POKE J, &HFF
NEXT J
LOCATE 19, 5: INPUT " Outputfilename ?", FO$
BSAVE FO$, 0, &H8000
DEF SEG
END
Filedate: 970928
Terug naar inhoudstafel kursus: < Index Kursus> |
Naar homepage dr.Godfried-Willem RAES |