style. A block of code may have a transaction scoped to it, in which case database changes will be committed when it completes. An error raised within such a block will undo these changes. These defaults may be overridden by the programmer. Simple programs run without a Graphical User Interface, but there is syntax to create one programmatically; or programmers can use the provided tools to build one. Examples Hello World The following ABL code creates a window with the text "Hello, World!" and a button labelled "OK". DEFINE VARIABLE w AS HANDLE NO-UNDO. CREATE WINDOW w ASSIGN WIDTH = 50 HEIGHT = 5 MESSAGE-AREA = FALSE STATUS-AREA = FALSE. CURRENT-WINDOW = w. DEFINE BUTTON btnOK LABEL "OK" SIZE 12 BY 1.2. FORM "Hello World!" VIEW-AS TEXT AT COL 20 ROW 2 btnOK AT COL 20 ROW 4 WITH FRAME f SIZE 50 BY 5 NO-BOX THREE-D. VIEW FRAME f. ENABLE btnOK WITH FRAME f. WAIT-FOR "CHOOSE" OF btnOK. DELETE OBJECT w. A message-box can be used to achieve the same effect: MESSAGE "Hello World!" VIEW-AS ALERT-BOX INFO BUTTONS OK. Also, you can use ERROR and WARNING instead of INFO to change the message icons. The simplest "Hello, World" program, though, is this: DISPLAY "Hello ". SQL SELECT equivalent The SQL statement: SELECT * FROM customer; (along with your chosen language connection and display procedures) can be expressed in Progress / ABL as: FOR EACH customer NO-LOCK: DISPLAY customer. END. SQL UPDATE equivalent The SQL statement: UPDATE customer SET salesman = 'Fred' WHERE custno = 14; (again, along with your chosen language connection and display procedures) can be expressed in Progress / ABL as: FOR EACH customer WHERE customer.custno = 14 EXCLUSIVE-LOCK: ASSIGN customer.salesman = 'Fred'. END. .. (Some assumptions have been made about indexing, locking and transaction scoping in order to keep this example simple.) The language is record based other than set of records based. In SQL operations work on a set of records, in the ABL, the operation is applied to a record at a time - much like using a cursor in SQL. Application areas The language is used in a wide variety of application areas, some examples: Loan Origination at US Banks Rental Car Reservation Systems Wholesale Distribution Warehouse Systems Transportation Systems Commercial Service Force Dispatching Security Card Systems Gaming Systems (think Las Vegas, not video) Retail Point-of-Sale Systems (notably, that of Micro Center) Notes