; Graphics demo using FREELIB

Ideal

Public      main
Extrn       startup:near

Macro       lcall p,a,b,c,d,e,f,g,h ;; library call

            ifnb <a>
              push a                ;; if args, push first arg
              lcall p,b,c,d,e,f,g,h ;; and recurse . . .
            else
              extrn p:near          ;; declare procedure
              call p                ;; call procedure
            endif

EndM

Macro       lnk offs                ;; Loop if No Key

            mov ah,1
            int 16h
            jz offs
            xor ah,ah
            int 16h
EndM

Model Tiny
Codeseg
P186
Org 100h

Start:      jmp startup

;****************** Data Section

Str1        db 'This is a string . . .',0

WidthX      dw 320                  ;Variables
Height      dw 200
Colors      dw 256
Circ        dw 30

;****************** 'main' procedure

Proc        main

            lcall initgraph 0       ;Init lo-res mode
            lcall srand             ;Seed random numbers
            call loop1              ;Do the loops
            mov [Height],400        ;Set med-res values
            mov [Circ],60
            lcall initgraph 2       ;Init med-res mode
            call loop1              ;Do the loops
            mov [WidthX],640        ;Set hi-res values
            mov [Height],480
            mov [Colors],16
            mov [Circ],72
            lcall initgraph 1       ;Init hi-res mode
            call loop1              ;Do the loops
            lcall closegraph        ;Close graphics
            ret                     ;Return

;****************** Main Loops

loop1:      call do_rand            ;Pixels
            lcall putpix ax,bx
            lnk loop1
            lcall cls

loop2:      call do_rand            ;Lines
            lcall line ax,bx,cx,dx
            lnk loop2
            lcall cls

loop3:      call do_rand            ;Rectangles
            lcall rect ax,bx,cx,dx
            lnk loop3
            lcall cls

loop4:      call do_rand            ;Filled Rectangles
            lcall frect ax,bx,cx,dx
            lnk loop4
            lcall cls

loop5:      call do_rand            ;Circles
            lcall circle ax,bx,si
            lnk loop5
            lcall cls

loop6:      call do_rand            ;Ellipses
            lcall ellipse ax,bx,si,di
            lnk loop6
            lcall cls

loop7:      call do_rand            ;Filled Circles
            lcall fcircle ax,bx,si
            lnk loop7
            lcall cls

loop8:      call do_rand            ;Filled Ellipses
            lcall fellipse ax,bx,si,di
            lnk loop8
            lcall cls

loop9:      call do_rand            ;Triangles
            push ax bx cx dx
            call do_rand
            lcall triangle ax,bx
            lnk loop9
            lcall cls

loop10:     call do_rand            ;Strings
            sub ax,88
            lcall outstr ax,bx,offset(Str1)
            lnk loop10
            lcall cls
            ret

;****************** Get Random Numbers

do_rand:    lcall rand [Colors]     ;Set random color and get
            lcall setgcolor ax      ;random numbers in AX, BX,
            lcall rand [Circ]       ;CX, DX, SI, and DI.
            mov di,ax
            lcall rand [Circ]
            mov si,ax
            lcall rand [Height]
            mov dx,ax
            lcall rand [Height]
            mov bx,ax
            lcall rand [WidthX]
            mov cx,ax
            lcall rand [WidthX]
            ret

EndP        main

End Start
