23. Program vo viacerých súboroch: INCLUDE a SET
Na čo to je
Rutiny, ktoré sa hodia do viacerých programov, nechceš zakaždým kopírovať. Dáš ich do vlastného súboru a program si ho vloží príkazom INCLUDE. Tak vzniká vlastná knižnica.
Druhá polovica kapitoly je o SET – pokyne, ktorým sa v starých programoch nastavuje prekladač.
INCLUDE: ako sa to píše
INCLUDE "D:MENO.ACT"Prekladač na tomto mieste prečíta celý súbor MENO.ACT, akoby bol jeho text napísaný priamo tu. Potom pokračuje ďalším riadkom.
D:je označenie disketovej jednotky na Atari. action26 ho preskočí – zaujíma ho len meno súboru. Píše sa preto, aby program preložil aj pôvodný Action!.- Súbor sa hľadá v priečinku, kde leží program, ktorý ho vkladá.
- Meno bez prípony dostane
.ACT. INCLUDEpatrí tam, kde by mohol stáť obsah súboru – rutiny knižnice teda vkladaj na začiatok, pred rutiny, ktoré ich volajú.
Celý program
Knižnica – súbor examples/shapes.act:
; A small library: routines that draw with characters.
; This file is not a program of its own. Other programs INCLUDE it.
PROC ShapeLine(BYTE width, CHAR c)
BYTE i
FOR i=1 TO width
DO
Put(c)
OD
PutE()
RETURN
PROC ShapeBox(BYTE width, height, CHAR c)
BYTE row
FOR row=1 TO height
DO
ShapeLine(width, c)
OD
RETURNProgram – súbor examples/include.act:
; A program in two files
INCLUDE "D:SHAPES.ACT" ; the routines of shapes.act are now known
PROC Main()
ShapeLine(12, '=)
ShapeBox(6, 2, '#)
ShapeLine(12, '=)
RETURNPreklad a spustenie
Prekladá sa len hlavný program. Knižnicu si nájde sám:
action26 include.act --simČo uvidíš
============
######
######
============Ako to funguje
Keď prekladač narazí na INCLUDE "D:SHAPES.ACT", otvorí shapes.act, preloží obe procedúry a vráti sa do include.act. Pre Main sú potom ShapeLine a ShapeBox známe, ako keby boli v tom istom súbore nad ňou.
Mená v knižnici začínajú rovnakým slovom (Shape…). Action! nemá oddelené priestory mien – všetky rutiny všetkých vložených súborov sú na jednej hromade. Spoločná predpona bráni tomu, aby sa meno z knižnice zrazilo s menom v programe.
Knižnica v inom priečinku
Keď knižnice držíš na jednom mieste pre viac programov, povedz prekladaču voľbou -I, kde má hľadať:
action26 include.act -I C:\Atari\lib --simVolieb -I môže byť viac. Program sa pritom nemení – v zdrojáku ostáva INCLUDE "D:SHAPES.ACT".
Do pamäte sa dostane len to, čo treba?
Nie celkom. Rutiny z knižnice jazyka (Print, Graphics …) action26 pribalí len tie, ktoré program volá. Rutiny z tvojho vloženého súboru sa preložia všetky, aj nepoužité. Veľkú knižnicu sa preto oplatí deliť do menších súborov.
SET: nastavenie prekladača
SET adresa=hodnotaPôvodný Action! bežal na Atari a jeho nastavenia boli bajty v pamäti. SET počas prekladu zapísal hodnotu na danú adresu a tým prekladač prestavil. action26 týmto zápisom rozumie.
Stretneš najmä túto dvojicu – hovorí, od ktorej adresy má byť program v pamäti:
Súbor examples/set.act:
; SET: this program is placed at address $5000 instead of $2000
SET $E=$5000
SET $491=$5000
PROC Main()
Print("This routine starts at address ")
PrintCE(Main)
RETURNaction26 set.act --simThis routine starts at address 2048020480 je desiatkovo $5000. Bez dvoch riadkov SET by program začínal na $2000 (8192).
Vo vlastných programoch SET nepotrebuješ. To isté spraví voľba prekladača --org $5000 alebo riadok ;@ORG $5000 na začiatku zdrojáka (kapitoly 32 a 33). Dobré je SET poznať, aby ťa v cudzom programe neprekvapil.
Časté chyby
| Čo sa stalo | Čo povie prekladač |
|---|---|
| vkladaný súbor neexistuje alebo je inde | error ACT203: INCLUDE file not found: D:SHAPES.ACT |
INCLUDE je až pod rutinou, ktorá knižnicu volá | error ACT008: undeclared name |
| ten istý súbor vložený dvakrát | error ACT006 – rutiny sú deklarované dvakrát |
| súbor vkladá sám seba, priamo alebo cez iný súbor | error ACT204 |
Vyskúšaj si
- Pridaj do
shapes.actprocedúruShapeTriangle(BYTE size, CHAR c)a zavolaj ju z programu. - Presuň
shapes.actdo podpriečinkaliba prelož program s voľbou-I lib. - Zmeň v
set.actadresu na$3000. Akú adresu program vypíše?
Zhrnutie
INCLUDE "D:MENO.ACT"vloží na dané miesto obsah iného súboru.- Súbor sa hľadá vedľa programu a v priečinkoch z voľby
-I. - Mená v knižnici začínaj spoločnou predponou.
SET adresa=hodnotanastavuje prekladač; najčastejšie určuje adresu programu. V nových programoch ho nahrádza--org.
Späť: 22. Bity · Ďalej: 24. Pamäť počítača