programming guide | reference guide | tutorials | examples
Create, Deploy, Scale.
High-Performance Integrated Stack for Advanced Web Applications
A complete development, deployment, and hosting solution optimized for mission-critical applications. Integrates advanced systems, performs at scale, extends and enhances existing tools, unifies the client and the server. Foundation technology. The asset business is built on.
FGL was purposely designed to provide everything necessary to create, deploy, and scale advanced web applications in a single optimized platform.
  • Powerful extensible language with roots originating in the xBase world
  • High-performance IOCP-based web/application server optimized for dynamic content generation
  • Hybrid distributed database engine supporting relational, object, key-value, and transactional data at scale
  • Advanced developer tools for creation, debugging, testing, optimization, and deployment
  • Client-side, in-browser, and server-side integration
  • Advanced support for MVC and MVVM application models
  • Secure, Blazingly Fast, and HIPAA & CJIS compliant

Create Powerful Web Applications with FGL

Click images for a closer look...

Client-side FGL is written in pure HTML, CSS, and JavaScript, and provides:

  • In-Browser Windowing UI
  • Advanced Window Manager
  • Pub/Sub Window & Element Communications
  • Real-Time UI Element Updating
  • Advanced UI Components
  • Enhanced JavaScript Functions
  • Seamless Server Integration
  • And so much more...

Industry Snapshot: FGL in Law Enforcement

Every day, thousands of law enforcement professionals rely on the power, performance, and reliability of FGL applications and the FGL stack.

End-to-End Integrated Development Environment

FGL Dev/Server-side is written in C, C++, ASSEMBLER, and FGL itself.
"Seamless Integrated Platform for Advanced Web Application Development"
"End-to-end Integration: Laptop, Desktop, Mobile, Tablet, Server, Cloud"
"Blazingly Fast, Highly Scalable, Secure, HIPAA and CJIS Compliant"

FGL Platform Map

FGL Server-Side Code Gallery

Functions with Optional and Default Parameters:

    FUNCTION myDateFormatter( dte, format="MMM dd, YYYY HH:MN ap" )
        return( dateFormat( dte ? dte : date(), format ) )
    END

    println( ">>> ", myDateFormatter() )
    println( ">>> ", myDateFormatter( , "YYYYMMDDHHMNSS" ) )
 
Serialize Complex Data Types:

    o = object()

    o.fish = { "cod", "walleye", "trout" }
    o.today = date( "MMMM dd, YYYY" )
    o.pi = 22 / 7

    fname = 'c:\temp\test1.dat'
    
    // serialize and write to disk
    fname.writeToDisk( pack( o ) )
    
    // read and de-serialize 
    o2 = fname.readFromDisk( ).unpack( )
    
    println( ">>> ", o2.fish[2], o2.today, o2.pi )
 
Object Creation and Interaction:

    // define a class
    CLASS cContact
      PUBLIC:
        local fname, mname, lname, suffix, prefix

        ACCESS name
            return( ::fname + " " + ::lname )
        END
        
        METHOD greeting( intro='Hello', msg )
            return( 
                intro + " " + ::name + 
                ( msg ? "\r\n" + msg : "" ) 
            )
        END
    END

    // create an instance of the class
    ocontact = new( "cContact" )
    
    // interact with class elements
    ocontact.fname = "Fred"
    ocontact.( "lname" ) = "Smith"

    println( ">>> ", ocontact.name )
    println( ">>> ", 
        ocontact.greeting( , "Nice to meet you" ) 
    )
 
Embed Server Instructions in a Web Page:

    <html>
      <body>
        <!-- write out content inline -->
        <h3>Today's date is <[ ! dateFormat( "MM-DD-YY" ) ]></h3>

        <!-- add a server block -->
        <[
            // this is a server-side block
            ! "Brought to you by: " + ouser.name
        ]>
      </body>
    </html>
 
Store & Retrieve Native Data in a Database:

    aa = aArray().add( {
        { "ST", "Staycation" },
        { "RT", "Road trip" },
        { "SK", "Skip" }
    }
    
    // store complex object in keyvalue db
    keyvalue.myTripOptions = aa
    
    aa = null
    
    // retrieve from keyvalue db
    aa = keyvalue.myTripOptions
    
    println( ">>> ", aa[ "RT" ] )
 
Chain Functions, including UDFs:

    FUNCTION myfunc( s )
        return( s.alltrim() )
    END

    greetings = " Hello World "

    println( ">>> ", 
        greetings.strextract( " ", 2 ).upper().myfunc(),
        " My Friend"
    )
 
Convert Objects To and From JSON:

    o = object( )

    o.fname = "Fred"
    o.lname = "Smith"
    o.addr = {
        { "Nashville, TN" },
        { "San Francisco, CA" }
    }

    // convert object to a json string
    str = objToJSON( o )

    // convert json string to object
    o = json( str )
    
    println( ">>> ", o.addr[1] )
 
Database Interaction:

    // instantiate data wrapper instance
    ouser = new( "cUser" )

    // get the desired record
    if ( ! ouser.getRecord( userid ) )
        return( ouser.errmsg )
    end
    
    // access a value from the db
    origTitle = ouser.title
    
    // change a value
    ouser.title = "New Title"
    
    // write the change to the database
    ouser.setRecord( userid )
    
    println( ">>> old title: ", origTitle,
    	" new title: ", ouser.title 
    )
 

FGL Client-Side Code Gallery
LEARN MORE AT: xwinlib.com

Create and Interact with In-Browser Windows:

    // create a client-side window within the current browser page 
    var w = dashboard.win "/userProfile?userid=<[ ! ouser.userid ]>", {
            dispMode : DISP_CENTERED,
            title : 'User Profile'
        }
    );

    // get dom document from the window
    var doc = w.getDocument();
    
    // interact with content within the window
    doc.domSet( "msg", "Welcome to your window" );
    doc.doInit();
 
Dynamically Update Web Element with Server Content:

    // one line asynchronous call to update content
    uiAjaxUpdate( domid, url, extra );

    // domid = dom element (object or id) to update
    // url   = web url with params to POST asynchronously
    // extra = JS string to execute when the POST returns
 
Communicate & Auto-Update Content Using Pub/Sub:

    // create two overlapping windows    
    var w1 = dashboard.win "/win1.htm", { 
        title: '1st window', 
        width: 640, 
        height: 450,
        theme: 'dark' 
    } );
    var w2 = dashboard.win "/win2.htm", { 
        title: '2nd window', 
        theme: 'light' 
    } );

    // register messages each window is interested in

    wmsg.register( w1, "profile_pic_change", "cbFuncW1" );
    wmsg.register( w2, "profile_pic_change", "cbFuncW2" );

    // send a message when profile img changes

    imgProfile.onchange = function( ) {
        wmsg.publish( "profile_pic_change", { 
            pic: this.src,
            userid : '<[ ! ouser.userid ]>'
        } );
    }
 
Advanced Web Forms:

    <[  // server side

        ui = new( "cTableUI" )
        ui.section( )
        ui.text( "NAME", "name", ouser.name )
        ui.text( "DOB", "dob", ouser.dob )
        ui.end( ), ui.subsection( )
        ui.select( "COUNTRY OF RESIDENCE", "country", ouser.country )
        ui.end( )

        aCountries = { 
            { "US", "United States" }, 
            { "CA", "Canada" }
            // ...
        }

        if ( session.var( "q" ) == "update" )
            objUpdateFromSession( session, ouser )
            ouser.setRecord( ouser.userid )
        end
    ]>
    <!-- client-side -->
    <html><body>
    <form name='inpt' method='post' action='/thisform.htm'>
    <input type='hidden' name='q' value='update'>

    <!-- render form -->
    <[ ! ui.value ]>

    <button onclick="inpt.submit()">submit</button>
    
    <script>
    
    function uiInit( ) {
        uiDatePicker( "dob", { noTime:1 } );
        uiList( "country", { 
            data:<[ ! aCountries.toJSON() ]> 
        } );
    }
    domReady( "uiInit()" );
  
    </script>
    </form>
    </body></html>
 
Add High-speed Fragment Searching to Any Table:

   <input type='text' 
       onKeyUp="searchFilterFunc(this.value,'tblHistory')"
       placeholder='enter any combination of words or phrases'
   >
   
   <table id='tblHistory'>...</table>
 
Copyright © 2020-2026 by RadwebTech, LLC., All Rights Reserved



12 ms