[Top] [Prev] [Next] [Bottom]


[Contents] [Index]

Example

This example is a self-contained simple program that illustrates many of the features of the Prefab module. Run it from the top-level shell prompt, not within a window system, since it establishes its own connection to the display and writes directly on the display, not in a private window.

implement HelloPrefab;
include "sys.m";
include "draw.m";
include "prefab.m";
sys: Sys;
draw: Draw;
prefab: Prefab;

# import prefab elements
    Display, Font, Rect, Point, Image, Screen: import draw;
    Style, Element, Compound, Environ: import prefab;

HelloPrefab : module {
    init: fn(ctxt: ref Draw->Context, argv: list of 
string);
};

init(ctxt: ref Draw->Context, argv: list of string) {
    sys = load Sys Sys->PATH;
    draw = load Draw Draw->PATH;
    prefab = load Prefab Prefab->PATH;
    
    display := Display.allocate(nil);
    disp := display.image;
    white := display.color(Draw->White);
    yellow := display.color(Draw->Yellow);
    black := display.color(Draw->Black);
    grey := display.rgb(160,160,160);
    ones := display.ones;
	screen := Screen.allocate(disp, white, 1);
    textfont := Font.open(display, "/fonts/lucidasans/
unicode.13.font");
    titlefont := Font.open(display, "/fonts/lucidasans/
italiclatin1.10.font");
	textstyle := ref Style(
            titlefont,      # title font
            textfont,       # text font
            grey,           # element color
            black,          # edge color
            yellow,         # title color	
            black,          # text color
            white);         # highlight color
    env := ref Environ(screen, textstyle);
    
	msg: string;
 	if ((tl argv) != nil) {
 	    msg = "Hello, " + (hd(tl argv)) + "!";
	} else {
		msg = "Hello, World!";
	}
 	    
    icon := display.open("/icons/lucent.bit");
    dy := (icon.r.dy()-textfont.height)/2;
    wintitle := Element.text(env, "Inferno Prefab Example", 
((0,0),(0,0)), Prefab->ETitle);
    ie := Element.icon(env, icon.r, icon, ones);
	se:= Element.separator(env, ((0,0), (10,0)), 
display.zeros, display.zeros);
    te := Element.text(env, msg, ((0,dy),(0,dy)), Prefab-
>EText);
    le := Element.elist(env, ie, Prefab->EHorizontal);
    le.append(se);
    le.append(te);
    le.append(se);
    le.adjust(Prefab->Adjpack, Prefab->Adjleft);
    
    c := Compound.box(env, (20,10), wintitle, le);
    c.draw();
    sys->sleep(15000);      
}

See Also

Limbo Draw Module in Chapter 11



[Top] [Prev] [Next] [Bottom]

infernosupport@lucent.com
Copyright © 1997, Lucent Technologies, Inc.. All rights reserved.