# Generalized Automation Language

Two forms of GAL are available. The first is General Automation Language for device automation and the second is Generalized Automation Language (GAL) which a very high level programming language for MVS based systems such as OS/390 and z/OS.

## General Automation Language

Developed by iLED to provide a common language for standardising automation and control of devices in the residential (Home Automation) and commercial control environments. The language provides a standardised method of communicating to/from controlled/controlling devices. At each device, GAL is converted into the machine specific protocol and medium. An example is the control of a DVD player. The GAL command will be <MyHouse MyArea MyRoom MyDevice MyCommand> FredsHouse GroundFloor Lounge DVDplayer ON. The GAL device will then convert this to the discrete IR command to switch on the DVD Player.

## Generalized Automation Language

Developed by Expans Systems to provide features and constructs that enable the programmer to intercept systems events and schedule responses, as implemented via their product AutoMan. Somewhat akin to BASIC, GAL enables systems programmers and operators to define logic to apply to systems messages as they flow through a multi-system (sysplex) environment. GAL also enables the programmer to define events that have occurred in the past, by intercepting Action Message Retention Facility (AMRF) messages. The language has built-in constructs to obtain the age of a retained message and make decisions about its fate depending on age. GAL can be used to write new systems commands, by intercepting and interpreting anything that is entered into an Operator Console. GAL uses keywords such as names of days of the week, names of month etc. to automatically schedule events in the system. Like REXX, GAL is both an interpretive language and a compiled language. GAL statements can be entered to the interpreter on the fly, or entire automation scenarios can be predefined, such as the logic to define unattended operations of a system, and can be compiled offline, using the compiler program GALCOMP.
GAL implements comparison by IF statements, setting of variables, by the LET statement and subroutine calls. GAL allows the programmer to break into REXX, and Assembler where it is needed. The very high level nature of GAL is exemplified by the EMAIL statement, which enables the programmer to send an email alert when an event is detected that requires human intervention. Assuming that this message event requires an alert to be sent to a default recipient:
    MSG=XID999S VAR &MSGTXT LEN 100 LET &MSGTXT = $$MSGTXT EMAIL SUBJECT '&MSGTXT' 'This is a problem that needs urgent attention'
GAL uses text capture and replacement facilities. In this simple example, the text of the system message is captured into a variable and the text in that variable is then used as the subject of the email. The message in the body of the email is the text in quotes following the subject.
GAL allows for cross systems(IBM XCF) queries to be issued by simple IF statements, without regard for the underlying internal processes required to perform the cross systems communications. It is simply a matter of identifying one or more systems that are to be tested.
For instance to check if a job is currently running in a partner system:
    IF SYS=sysn JOB(jobname) ACTIVE DO . . . END