|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 10624 (0x2980) Types: TextFile Names: »GRAFIKB.TXT«
└─⟦0d02879d3⟧ Bits:30004605 COMPAS Pascal version 3.03 └─ ⟦this⟧ »GRAFIKB.TXT«
Et par generelle bemærkninger: GRAFIKB hentes ind som extension. GRAFIKB skal på et senere tidspunkt lægges i ROM, (den fylder temmelig kraftig). Ved GRAFIKB i ROM hentes en mindre extension ind, der simpelthen kalder rutinerne i ROMMEN. Disse kald kan også ske fra andre programmeringssprog, samt på et senere tidspunkt via GSX. Rutinerne i GRAFIKB inkluderer rutinerne fra RC PICCOLINE, men er ikke begrænset til disse. Programmer save't under GRAFIKA skal hentes ind i COMAL-80 med GRAFIKA indlæst, og dernæst list'es de ned på disketten. COMAL-80 startes nu op med GRAFIKB, enter'es ind, og save's på disketten. Husk NEW hvis der er flere programmer der skal overspilles. Programmer skrevet både med og uden GRAFIK, som må distribueres frit modtages meget gerne hos BOGIKA (Jan eller Holger), og hos Butler brugergruppen. Det må gerne fremgå klart om programmerne må: 1: distribueres frit. 2: distribueres til konsulenterne. 3: ikke distribueres. Denne GRAFIKB udsendes til alle konsulenter, men må IKKE uddeles videre. Hastighedsforskelle i grafikprogrammer mellem forskellige fabrikater af maskiner vil vi gerne høre om. Kommentarer, fejl, rettelser osv angående nedenstående 'manual', kontakt BOGIKA v/ Jan eller Holger. Grafikordrer i GRAFIKB. Som en cursor på en almindelig skærm, findes der i grafik også en cursor, blot er denne pixelcursor ikke synlig. Ved opstart i grafik er positionen sat til punktet med værdien (0,0). Flere af grafikordrerne påvirker (flytter) denne pixelcursor. Ligeledes vil nogle af ESC-sekvenserne der findes i Butleren påvirke pixelcursoren. Eks 'ESC :', 'ESC +', 'ESC -'. 1. Grafikordrerne der er fælles med RC. *----------------------------* CIRCLE radius, buestart, bue radius: positivt numerisk udtryk. buestart, bue: numerisk udtryk angivet i radianer. -oOo- Omregning fra grader til radianer: 1: GRAD*4*ATN(1)/180 >> PI=4*ATN(1) << 2: GRAD*PI()/180 Eksempel: 0010 CLEAR 0020 FOR GRAD:=0 TO 360 DO 0030 RADIAN:=GRAD*PI()/180 //eller GRAD*4*ATN(1)/180 0040 PLOT COS(RADIAN)*100+110, SIN(RADIAN)*50+60 0050 NEXT GRAD -oOo- Kommandoen bruges til at tegne elipser eller dele af elipser, alt efter størelsen af bue. Denne størelse vil normalt ligge mellem -2 pi og 2 pi. Start af elipsen vil finde sted fra det punkt, der er angivet af buestart. Punktet udtrykkes i radianer. Pixelcursoren vil antage værdien i slutpunktet. Eksempel: 0010 GRAFIK 0020 MOVETO 100,100 0030 CIRCLE 40,0,2*PI Denne programstump vil tegne en hel elipse, startende i vinkel 0, drejende mod uret rundt til 0 igen. 0030 CIRCLE 40,PI,-PI Vil tegne en elipse, startende i 180 grader (1 PI), drejende med uret rundt til 0 igen. (En halv cirkel). *----------------------* CLEAR Virker som normalt. *----------------------* CLOSE GRAPHICS Virker ikke, da den ikke er nødvendig. Butleren er altid i grafik- og tekst-mode, samtidigt. *----------------------* OPEN GRAPHICS 'Erstattes' af ordren GRAFIK. *----------------------* GPARM (udtryk) udtryk: kan antage værdien fra 0 til 5 Returnerer information om parametrene der er sat. Eksempler: GPARM(0) angiver aktuel x-koordinat GPARM(1) angiver aktuel y-koordinat GPARM(2) angiver aktuel vindues nedre x-grænse GPARM(3) angiver aktuel vindues øvre x-grænse GPARM(4) angiver aktuel vindues nedre y-grænse GPARM(5) angiver aktuel vindues øvre y-grænse GPARM(101)-GPARM(145) fra RC kendes ikke da de på RC indeholder værdien af parametre fra GSX. *----------------------* DRAW x-koordinat,y-koordinat x-koordinat, y-koordinat: numeriske udtryk Tegner en ret linie fra pixelcursoren i (x,y), til punktet (x+xkoordinat, y+ykoordinat). Pixelcursoren vil antage værdien (x+xkoordinat, y+ykoordinat) Eksempel: 0010 MOVETO 10,10 0020 DRAW 100,50 Vil tegne en ret linie fra (10,10) til (110,60). *------------------------* MOVE xkoordinat, ykoordinat xkoordinat, ykoordinat: numeriske udtryk Flytter pixelcursoren fra (x,y) til (x+xkoordinat, y+ykoordinat). Eksempel: 0010 MOVETO 10,10 0020 MOVE 50,60 Vil flytte pixelcursoren fra (10,10) til (60,70). *--------------------------* DRAWTO xkoordinat,ykoordinat xkoordinat,ykoordinat: numeriske udtryk Vil tegne en ret linie fra pixelcursoren i (x,y) til (xkoordinat,ykoordinat). Samtidig vil pixelcursoren antage værdien af (xkoordinat,ykoordinat). Eksempel: 0010 MOVETO 10,10 0020 DRAWTO 100,100 Vil tegne en ret linie fra (10,10) til (100,100). *--------------------------* MOVETO xkoordinat,ykoordinat xkoordinat, ykoordinat: numeriske udtryk Vil flytte pixelcursoren fra (x,y) til (xkoordinat,ykoordinat). Eksempel: 0010 GRAFIK 0020 MOVETO 10,10 Flytter pixelcursoren fra (0,0) som er sat i ordren GRAFIK, til punktet (10,10). *--------------------------* PENCOLOR udtryk udtryk: kan antage værdierne -1,0,1 Vil sætte hvilken 'farve' der skal tegnes med. 0 sætter 'farven' lig med baggrundsfarven. (Vil reelt slukke de berørte punkter, hvis de er sat). 1 sætter 'farven' lig med forgrundsfarven. -1 vil invertere punkterne, (hvis punktet der skal sættes er sat, vil det blive slukket, og hvis det ikke er sat, vil det blive tændt. -1 findes ikke på RC-maskiner. Eksempel: 0010 GRAFIK 0020 .. skærmen fyldes op af et eller andet. 0030 PENCOLOR -1 0040 FOR Y:=0 TO 239 0050 MOVETO 0,Y 0060 DRAWTO 639,Y 0070 NEXT Y Programstumpen 30-70 vil invertere hele skærmen. Køres stumpen igen vil skærmen inverteres endnu engang, og komme tilbage til sit oprindelige udseende. *--------------------------------------* TEXT str$ Str$: en tekststreng Vil starte med at skrive teksten fra pixelcursoren og fremad. Teksten vil blive skrevet i proportional mode. Ordren vil svare til ESC-sekvensen 'ESC :' med pixelcursoren koordinater som parametrene. Endvidere svarer det til at 'ESC P', proportionalskrift er sat. Ellers ville startpunktet ikke altid svare 100% overens med pixelcursorens. En nøjere beskrivelse af forskellen i pixeladressering med eller uden proportionalskrift kan findes i Butler manualen. Pixelcursorens koordinater vil ikke blive ændret. Ordren vil ikke give 100% samme resultat på en RC, på grund af proportional/ ikke proportionalskrift, samt et forskelligt karaktersæt. Eksempel: 0010 MOVETO 100,100 0020 TEXT "ABC" vil svare til 0010 PRINT ""27"P", 0020 PRINT ""27":",""0"",""100"",""0"",""100"","ABC" 0030 PRINT ""27"p", *-----------------------------* WINDOW startx, slutx, starty, sluty startx, slutx, starty, sluty: numeriske udtryk, kan være de største tal der kan dannes i den 7 cifrede comal-version. Skærmen vil blive logisk opløst i antallet af punkter angivet i parametrene men vil fysisk blive tegnet i skærmens opløsning på 640,240. Skærmen vil blive opfattet som værende lige så bred som høj, samt pixelafstanden værende ens på begge leder. Det vil sige hvis man åbner skærmen med WINDOW 0,639,0,239 vil en circle ordre producere en elipse. Hvis skærmen bliver åbnet med WINDOW 0,1000,0,1000 vil en circle ordre tegne en cirkel, alt efter skærmens indstilling. Eksempel: 0010 WINDOW 0,639,0,239 Vil give en 'normal' skærm hvor hvert punkt vil stemme overens fysisk som logisk. (Pas på CIRCLE og CIRKEL ordrene). 0010 WINDOW -1000,1000,500,1000 Vil åbne skærmen med x-aksen fra -1000 til 1000, og y-aksen fra 500 til 1000. Koordinaterne angivet med grafikordrerne vil blive omregnet til et forhold hvor x-aksens -1000 vil svare til fysisk 0, 1000 til fysisk 639 osv. 0010 GRAFIK 0020 MOVETO 0, 0 0030 DRAWTO 639, 0 0040 WINDOW -1000, 1000, -1000, 1000 0050 FOR T:=1 TO 500 DO 0060 NEXT T 0070 PENCOLOR 0 0080 MOVETO -1000, -1000 0090 DRAWTO 1000, -1000 Programmet ovenfor vil først producere en linie i en opløsning, dernæst slette samme linie men i en anden opløsning. *-----------------------------------* Ordrer som findes i GRAFIKB, udover GSX-ordrene på RC. *----------------------------------* PLOT x,y x,y: numerisk udtryk Vil sætte punktet x,y til at være tændt. Eksempel: 0010 PLOT 10,10 Vil sætte punktet med koordinaterne 10,10 til at være tændt. Ordren vil ikke påvirke værdien af pixelcursoren. Vil ikke være påvirket af værdien af pencolor. *-----------------------------------* UNPLOT x,y x,y: numeriske udtryk Vil sætte punktet x,y til at være slukket. Eksempel: 0010 UNPLOT 10,10 Vil slukke punktet med koordinatsættet 10,10 til at være slukket. Vil ikke påvirke værdien af pixelcursoren. Vil ikke være påvirket af værdien af pencolor. *-----------------------------------* PENCOLOR -1 Er nævnt ovenfor. *-----------------------------------* SETMASK udtr Udtr: kan være et heltal mellem 0 og 255 Sætter linierne svarende til bitmønsteret i udtr. Eksempel: SETMASK 17 Vil tegne linierne med mønsteret 00010001. Det vil sige at kun hvert 4. punkt i en linie vil blive tændt. *-------------------------------------* CIRKEL x,y,r x,y,r: numeriske udtryk Vil tegne en cirkel med centrum i punktet (x,y) og med radius r. Pixelcursoren vil antage værdien af punktet (x,y). Eksempel: CIRKEL 100,100,40 Vil tegne en cirkel med centrum i 100,100 og med radius 40. *-------------------------------------* TEXT str$ Er forklaret ovenfor. *-------------------------------------* GRAFIK Vil erstatte ordresættet: CLEAR WINDOW 0,639,0,239 PENCOLOR 1 SETMASK 255 MOVETO 0,0 *------------------------------------* Endvidere findes konstanten PI() i GRAFIKB. Kan skrives som PI men vil under list af programmet laves om til PI(). *--------------------------------------* Første gang en grafikordre kaldes vil ordren GRAFIK blive udført. Det vil bla.a. medføre at skærmen slettes. Har GRAFIK først en gang været udført vil det ikke ske igen før man selv kalder den. *--------------------------------------* Alle ordrer kan som variable acceptere heltal og reelle tal, men vil hvis det er et reelt tal afrunde det til et heltal. En undtagelse er der fra reglen; nemlig PENCOLOR, her skal værdien være et heltal men værdien må gerne ligge i en reel variabel. (Ordren afrunder ikke selv). *-------------------------------------* «eof»