Voting

Category

real language

Bookmarking

Del.icio.us Digg Diigo DZone Earthlink Google Kick.ie
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

Support Us

Language XBLite

(A WIN32 version of the xbasic compiler.)

Date:10/06/06
Author:Guy Lonne
URL:n/a
Comments:1
Info:http://perso.wanadoo.fr/xblite/
Score: (2.69 in 78 votes)
'
' ####################
' #####  PROLOG  #####
' ####################
' 
' Bottles - would sing all the verses of the song "99 bottles of beer"
'           if only it could!
' Guy LONNE, using XBLite
' 
' Written in XBLite, a WIN32 version of the xbasic compiler,
' which can be found at:
' - http://perso.wanadoo.fr/xblite/
' - http://xblite.xbasic.org/
' Send comments/bug reports to xblite@googlegroups.com
' 
' The following source code is auto-generated by XBLite GDE
' and is released without restrictions.
' 
PROGRAM "Bottles"
VERSION "0.01"
' 
' ###############################
' #####  declare functions  #####
' ###############################
' 
' XBLite DLL headers
' 
  IMPORT "xst"    ' XBLite Standard Library
' 
' Win32API DLL headers
' 
' ---Note: import gdi32 BEFORE user32
  IMPORT "gdi32"    ' Graphic Device Interface
  IMPORT "kernel32" ' operating system
  IMPORT "user32"   ' Windows management
' 
' #################################
' #####  Function prototypes  #####
' #################################
' 
' These are standard functions that belong to all XBLite GUI programs
DECLARE FUNCTION Entry ()
DECLARE FUNCTION InitGui ()
DECLARE FUNCTION RegisterWinClass (className$, addrCallback, icon$, menu$)
DECLARE FUNCTION CreateWindows ()
DECLARE FUNCTION NewWindow (className$, title$, style, x, y, w, h, _
                            exStyle)
DECLARE FUNCTION NewChild (className$, text$, style, x, y, w, h, parent, _
                           id, exStyle)
DECLARE FUNCTION MessageLoop ()
DECLARE FUNCTION CleanUp ()

' The next function is the callback function for the main
' window. This is where messages are sent when a user
' interacts with the controls in the window
DECLARE FUNCTION mainWnd_callback (hWnd, msg, wParam, lParam)
' 
' 
' #################################################
' #####  declare and define global constants  #####
' #################################################
' 
' Global Constants which represent control ID's for the "edit"
' control used for the song's display
' (prefix "$$" declares implicitly a global constant)
$$textBox_Id = 2421    ' multi-line text edit
' 
' 
' ######################
' #####  Entry ()  #####
' ######################
' 
' Application start-up entry
' (name imposed: the compiler knows only "Entry ()")
' 
FUNCTION Entry ()

  STATIC entry

  IF entry THEN RETURN ' enter once
  entry = $$TRUE       ' enter occured

  InitGui ()           ' initialize win32 controls and libraries
  CreateWindows ()     ' create windows and other child controls
  MessageLoop ()       ' the main message loop
  CleanUp ()           ' unregister the window class

END FUNCTION


' start GUI
FUNCTION InitGui ()
  SHARED hInst    ' global variable: current instance handle

  hInst = GetModuleHandleA (0) ' get current instance handle
  IFZ hInst THEN QUIT (0)      ' error: abend!

END FUNCTION


' register the window class
FUNCTION RegisterWinClass (className$, addrCallback, icon$, _
menu$)
  ' 
  ' Returns:
  ' - an error flag: $$TRUE = error, $$FALSE = OK!

  SHARED hInst
  WNDCLASS wc

  wc.style = $$CS_HREDRAW | $$CS_VREDRAW | $$CS_OWNDC
  wc.lpfnWndProc = addrCallback
  wc.cbClsExtra = 0
  wc.cbWndExtra = 0
  wc.hInstance = hInst
  wc.hIcon = LoadIconA (hInst, &icon$)
  wc.hCursor = LoadCursorA (0, $$IDC_ARROW)
  wc.hbrBackground = $$COLOR_BTNFACE + 1
  wc.lpszMenuName = &menu$
  wc.lpszClassName = &className$

  IFZ RegisterClassA (&wc) THEN RETURN $$TRUE ' error

END FUNCTION


' create a window
FUNCTION NewWindow (className$, title$, style, x, y, w, h, exStyle)
  ' 
  ' Arguments:
  ' - className$: window's class
  ' - text$     : title
  ' - style     : style
  ' - x         : Left
  ' - y         : Top
  ' - w         : Width
  ' - h         : Height
  ' - exStyle   : extended style
  ' 
  ' Returns:
  ' - The window's handle if OK!, 0 = error

  SHARED hInst    ' current instance handle

  RETURN CreateWindowExA (exStyle, &className$, &title$, style, x, y, _
                          w, h, 0, 0, hInst, 0)

END FUNCTION


' create a child window (i.e. a control)
FUNCTION NewChild (className$, text$, style, x, y, w, h, parent, id, _
                   exStyle)
  ' 
  ' Arguments:
  ' - className$: window's class
  ' - text$     : title
  ' - style     : style
  ' - x         : Left
  ' - y         : Top
  ' - w         : Width
  ' - h         : Height
  ' - exStyle   : extended style
  ' 
  ' Returns:
  ' - The child window's handle if OK!, 0 = error

  SHARED hInst    ' current instance handle

  style = style | $$WS_CHILD | $$WS_VISIBLE
  RETURN CreateWindowExA (exStyle, &className$, &text$, style, x, y, w, _
                          h, parent, id, hInst, 0)

END FUNCTION

' main message loop
FUNCTION MessageLoop ()
  ' 
  ' Returns:
  ' - an error flag: $$TRUE = error, $$FALSE = OK!

  MSG msg

  DO    ' the message loop
    ret = GetMessageA (&msg, NULL, 0, 0)    ' retrieve next message
    '
    SELECT CASE ret
      CASE  0 : RETURN $$FALSE    ' WM_QUIT message
      CASE -1 : RETURN $$TRUE     ' error
      CASE ELSE
        ' deal with window messages
        hwnd = GetActiveWindow ()
        IF (!IsWindow (hwnd)) || (!IsDialogMessageA (hwnd, &msg)) THEN   
          ' send only non-dialog messages
          TranslateMessage (&msg)    ' translate virtual-key messages 
          DispatchMessageA (&msg)    ' send message to callback function
        END IF
    END SELECT
  LOOP    ' forever

END FUNCTION


' callback function for window mainWnd
FUNCTION mainWnd_callback (hWnd, msg, wParam, lParam)
  ' 
  ' Message handler: all messages pass thru this function.
  ' (called by Windows' function DispatchMessage)
  ' 
  ' Returns:
  ' - the error code of the default window procedure, 0 = OK!

  SELECT CASE msg
    CASE $$WM_CLOSE   : DestroyWindow (hWnd)
    CASE $$WM_DESTROY : PostQuitMessage (0)
    CASE ELSE
      RETURN DefWindowProcA (hWnd, msg, wParam, lParam)
  END SELECT
  RETURN 0    'OK!
END FUNCTION

' This function generates the main window and displays it
FUNCTION CreateWindows ()
  '
  ' Returns:
  ' - an error flag: $$TRUE = error, $$FALSE = OK!

  ' **************************************************************
  ' ***************** Begin Window Generation ********************
  ' **************************************************************
  ' register the window class for window: mainWnd
  ' #mainWnd_class$: global variable that holds the window class
  ' (prefix "#" declares implicitly a global variable)
  #mainWnd_class$ = "mainWndClass"
  addrCallback = &mainWnd_callback ()
  icon$ = ""
  menu$ = ""
  IF RegisterWinClass (@#mainWnd_class$, addrCallback, @icon$, _
                       @menu$) THEN RETURN $$TRUE ' error

  ' create window
  title$ = "Song \"99 Bottles of Beer\""
  style = $$WS_OVERLAPPEDWINDOW
  x = 309
  y = 47
  w = 508
  h = 433
  exStyle = 0
  ' #mainWnd_handle: global variable that holds the window handle
  #mainWnd_handle = NewWindow (@#mainWnd_class$, @title$, style, x, _
                               y, w, h, exStyle)
  IFZ #mainWnd_handle THEN RETURN $$TRUE

  nl$ = CHR$ (13) + CHR$ (10)

  t$ = ""
  FOR b = 99 TO 3 STEP -1
    '
    t$ = t$ + STRING$ (b) + " bottles of beer on the wall,"
    t$ = t$ + STR$ (b) + " bottles of beer." + nl$
    t$ = t$ + "Take one down and pass it around,"
    b_1 = b - 1
    t$ = t$ + STR$ (b_1) + " bottles of beer on the wall." + nl$ + nl$
  NEXT b

  t$ = t$ + "2 bottles of beer on the wall, 2 bottles of beer." + nl$
  t$ = t$ + "Take one down and pass it around, "
  t$ = t$ + "1 bottle of beer on the wall." + nl$ + nl$

  t$ = t$ + "1 bottle of beer on the wall, 1 bottle of beer." + nl$
  t$ = t$ + "Take one down and pass it around, "
  t$ = t$ + "no more bottles of beer on the wall." + nl$ + nl$

  t$ = t$ + "No more bottles of beer on the wall, "
  t$ = t$ + "no more bottles of beer." + nl$
  t$ = t$ + "Go to the store and buy some more, "
  t$ = t$ + "99 bottles of beer on the wall."

  ' *************** Begin Controls Configuration **************
  ' Multiline Edit Control with Vertical Scrollbar
  style = $$ES_MULTILINE | $$ES_AUTOVSCROLL | $$WS_VSCROLL | $$ES_LEFT | _
          $$WS_TABSTOP
  #txtSong_handle = NewChild ($$EDIT, t$, style, 16, 24, 483, 365, _
                              #mainWnd_handle, $$textBox_Id, 0)
  ' **************** End Controls Configuration ***************

  ' **************************************************************
  ' ****************** End Window Generation *********************
  ' **************************************************************

  ' auto-center main window
  ' (standard function from Xst.dll)
  XstCenterWindow (#mainWnd_handle)

  ' display main window
  ShowWindow (#mainWnd_handle, $$SW_SHOWNORMAL)

  RETURN $$FALSE    'OK!

END FUNCTION

FUNCTION CleanUp ()

  ' #mainWnd_class$: global variable: window class
  SHARED hInst     ' global variable: current instance handle

  ' unregister the main window
  UnregisterClassA (&#mainWnd_class$, hInst)

END FUNCTION
' 
' 
' #########################
' #####  END PROGRAM  #####
' #########################
' 
END PROGRAM

Download Source | Write Comment

Alternative Versions

VersionAuthorDateCommentsRate
a console versionGuy Lonne11/11/061

Comments

>>  barrym said on 09/19/10 05:41:43

barrym Dang, dude! If this is an example of XBLite, I can't even imagine how massive
an XBRegular or XBDark version would be!! ;)

Download Source | Write Comment

Add Comment

Please provide a value for the fields Name, Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.

Please don't post large portions of code here! Use the form to submit new examples or updates instead!

Name:

eMail:

URL:

Security Code:
  
Comment: