Post Reply 
Social Buttons
 
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hello Ed -2!
01-09-2019, 01:05 AM
Post: #21
RE: Hello Ed -2!
Is there a faster why to do that in C ..
maybe somone alredy create HDC include for C win gui programming
of course without extra large include (header file) ?
Find all posts by this user
Quote this message in a reply
01-09-2019, 03:23 AM
Post: #22
RE: Hello Ed -2!
Ed
Just to let you know your example return error
" unreferenced TextOutA@'20 "
what kind of error is that ????
Find all posts by this user
Quote this message in a reply
01-09-2019, 04:07 AM
Post: #23
RE: Hello Ed -2!
Also ..this example also complain about TextOut@20'

Code:
// How to print text in Win32 C/C++
// Auther: -LeetGamer-

#include <Windows.h>
int iLoopCounter;
HINSTANCE hInstance;

// Function I made to get the size of the text
int GetTextSize (LPSTR a0)
{
    for (iLoopCounter = 0; ;iLoopCounter++)
    {
        if (a0 [iLoopCounter] == '\0')
            return iLoopCounter;
    }
}

LPSTR TextArray [] = {
    "Hello World"
};

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CLOSE:
        DestroyWindow (hwnd);
        break;

        case WM_DESTROY:
        PostQuitMessage (0);
        break;
        
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint (hwnd, &ps);
            TextOutA (hdc,
                     // Location of the text
                     10,
                     10,
                     // Text to print
                     TextArray [0],
                     // Size of the text, my function gets this for us
                     GetTextSize (TextArray [0]));
            EndPaint (hwnd, &ps);
        }
        break;
    }
    return DefWindowProc (hwnd, msg, wParam, lParam);
}

int WINAPI WinMain (HINSTANCE hInstanace, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX WindowClass;
    WindowClass.cbClsExtra = 0;
    WindowClass.cbWndExtra = 0;
    WindowClass.cbSize = sizeof (WNDCLASSEX);
    WindowClass.lpszClassName = "1";
    WindowClass.lpszMenuName = NULL;
    WindowClass.lpfnWndProc = WndProc;
    WindowClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    WindowClass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    WindowClass.hCursor = LoadCursor (NULL, IDC_ARROW);
    WindowClass.style = 0;
    WindowClass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    RegisterClassEx (&WindowClass);

    HWND hwnd = CreateWindowEx (WS_EX_CLIENTEDGE,
                                "1",
                                "Printing Text in Win32 C/C++",
                                WS_OVERLAPPEDWINDOW,
                                315, 115,
                                640, 480,
                                NULL,
                                NULL,
                                hInstance,
                                NULL);

    ShowWindow (hwnd, SW_SHOWNORMAL);

    MSG msg;

    while (GetMessage (&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
        if (VK_ESCAPE == msg.wParam)
            break;
    }
    return 0;
}

is that normal ?
Find all posts by this user
Quote this message in a reply
01-09-2019, 08:16 AM
Post: #24
RE: Hello Ed -2!
Ed
If is not problem
Do you can try this examples in Falcon C++ ide
Find all posts by this user
Quote this message in a reply
01-09-2019, 10:05 PM
Post: #25
RE: Hello Ed -2!
(01-09-2019 03:23 AM)Aurel Wrote:  Ed
Just to let you know your example return error
" unreferenced TextOutA@'20 "
what kind of error is that ????

It compiles fine here with MingW:

gcc -mwindows winau.c

Creates "a.exe".

The error you are getting is a linker error. TextOut is a unicode/ansi function, and depending on how you have unicode set, it tries to link with either TextOutW (for wide char) or TextOutA (for ansi).

No idea why your linker can't find it.

I also tried Borland C, and it worked fine with that too.

Did your original version compile?
Find all posts by this user
Quote this message in a reply
03-22-2019, 04:41 AM
Post: #26
RE: Hello Ed -2!
Ed
I also found one of yours on NARKIVE site:
Code:
DECLARE SUB LoadProg
DECLARE SUB SaveProg
DECLARE SUB ClearProg
DECLARE SUB ClearVars
DECLARE SUB DoCmd
DECLARE SUB Expect(s as string)
DECLARE SUB GetCh
DECLARE SUB GetSym
DECLARE SUB GoToLine
DECLARE SUB GoToStmt
DECLARE SUB GosubStmt
DECLARE SUB IdStmt
DECLARE SUB IFstmt
DECLARE SUB InitGetSym(LineNum as INTEGER)
DECLARE SUB InputStmt
DECLARE SUB ListStmt
DECLARE SUB SkipToEOL
DECLARE SUB PrintStmt
DECLARE SUB ReadIdent
DECLARE SUB ReadInt
DECLARE SUB ReadStr
DECLARE SUB ReturnStmt
DECLARE SUB ValidLineNum

DECLARE FUNCTION Accept(s as string) as INTEGER
DECLARE FUNCTION AddExpr() as INTEGER
DECLARE FUNCTION Expression() as INTEGER
DECLARE FUNCTION Factor() as INTEGER
DECLARE FUNCTION GetVarIndex() as INTEGER
DECLARE FUNCTION IsAlpha(c as STRING) as INTEGER
DECLARE FUNCTION IsDigit(c as STRING) as INTEGER
DECLARE FUNCTION IsRelOp(c as STRING) as INTEGER
DECLARE FUNCTION Term() as INTEGER

CONST FALSE = 0
CONST TRUE = NOT FALSE ' This is -1, which is what (a = a) evaluates to.

CONST MaxLine = 300

DIM shared LookCh as STRING ' The parser lookahead character. This was 'ch'
' in the original, but FreeBASIC's assembler
' (the backend of the compiler) does not allow a
' FreeBASIC variable name to match the assembly-
' language name of a processor register.

DIM shared Pgm(0 to MaxLine) as STRING ' Code space
DIM shared TheLin as STRING ' Working copy of the current line
DIM shared Tok as STRING ' Current token

DIM shared Vars(1 to 26) as INTEGER ' Variable space
DIM SHARED Stack(15) as INTEGER ' Gosub pushes its line number here.
DIM SHARED ISP as INTEGER ' The interpreter's stackpointer; not
' 'SP' because the assembler would barf.

DIM shared CurLine as INTEGER ' The interpreter program counter
DIM shared Num as INTEGER ' A number from the current line
DIM shared TextPtr as INTEGER ' Lexical scanner pointer
DIM shared ErrNum as INTEGER ' Error flag; will later be error code.
DIM SHARED TraceFlg as INTEGER ' Controls runtime display of line numbers
DIM SHARED StepFlg as INTEGER ' Controls single-step mode.

SCREEN 12 ' 80x30 color console mode. Other modes
' are available, but this is closest to
' QB's default screen.
DO
ErrNum = FALSE
LINE INPUT "> ", Pgm(0) ' Having the input buffer in the Pgm array
IF Pgm(0) <> "" THEN ' simplifies immediate mode.
InitGetSym(0)
IF IsDigit(LEFT(Tok, 1)) THEN
ValidLineNum
Pgm(Num) = MID(Pgm(0), TextPtr, len(Pgm(0)) - TextPtr + 1)
ELSE
CurLine= 0
DoCmd
END IF
END IF
LOOP

SUB DoCmd

Again: ' Begin parser loop; comefrom various places in DoCmd

IF ErrNum THEN EXIT SUB
WHILE Tok = ""
IF CurLine = 0 OR CurLine >= MaxLine THEN EXIT SUB
InitGetSym(CurLine + 1)
WEND
IF TraceFlg AND (CurLine > 0) THEN PRINT "#"; CurLine
IF StepFlg THEN SLEEP
IF Accept("end") THEN EXIT SUB
IF Accept("stop") THEN EXIT SUB
IF Accept("new") THEN
ClearProg
ClearVars
EXIT SUB
END IF
IF Accept("old") THEN
LoadProg
GOTO Again
END IF
IF Accept("save") THEN
SaveProg
GOTO Again
END IF
IF Accept("bye") THEN END
IF Accept("list") THEN ListStmt: GOTO Again
IF Accept("run") THEN
ClearVars
InitGetSym(1)
GOTO Again
END IF
IF Accept("goto") THEN GoToStmt: GOTO Again
IF Accept("gosub") THEN GosubStmt: GOTO Again
IF Accept("return") THEN ReturnStmt: GOTO Again
IF Accept("if") THEN Ifstmt: GOTO Again
IF Accept("input") THEN InputStmt: GOTO Again
IF Accept("print") THEN PrintStmt: GOTO Again
IF Accept("rem") THEN SkipToEOL: GOTO Again
IF Accept("'") THEN SkipToEOL: GOTO Again
IF Accept("ston") THEN StepFlg= TRUE: GOTO Again
IF Accept("stoff") THEN StepFlg= FALSE: GOTO Again
IF Accept("tron") THEN TraceFlg= TRUE: GOTO Again
IF Accept("troff") THEN TraceFlg= FALSE: GOTO Again
IF Accept("cls") THEN CLS: GOTO Again
IF IsAlpha(LEFT(Tok, 1)) THEN IdStmt: GOTO Again
PRINT "Unknown token "; Tok; " in line "; CurLine ' No keyword recognized.
END SUB

' Standard PRINT syntax: expressions may be separated by commas or semicolons.
' A trailing comma or semicolon suppresses the automatic newline.
' Non-negative numbers are printed with a leading space.
' Bug: an expression that begins with a comma, i.e. 'print , x' will throw
' an error. To work around this, use an explicit empty string: 'print "", x".

SUB PrintStmt
DIM PrintNL as INTEGER
PrintNL = TRUE
DO WHILE Tok <> ""
PrintNL = TRUE
IF LEFT(Tok, 1) = CHR(34) THEN
PRINT MID(Tok, 2);
GetSym
ELSE
PRINT Expression;
END IF
IF Accept(",") THEN
PRINT , "";
PrintNL= FALSE
ELSEIF Accept(";") THEN
PrintNL= FALSE
END IF
LOOP
IF PrintNL THEN PRINT
END SUB

' "input" [string ","] var
' N.B.: No automatic "?"
' Comma instead of semicolon after prompt
' No way to suppress newline after input
SUB InputStmt
DIM var as INTEGER
IF LEFT(Tok, 1) = CHR(34) THEN
PRINT MID(Tok, 2);
GetSym
Expect(",")
ELSE
PRINT "? ";
END IF
var = GetVarIndex()
input Vars(var)
END SUB

SUB IdStmt ' Assignment statement
DIM var as INTEGER
var = GetVarIndex()
Expect("=")
Vars(var) = Expression
END SUB

SUB ListStmt
DIM i as INTEGER
FOR i = 1 to 300
IF Pgm(i) <> "" THEN PRINT i; " "; Pgm(i)
NEXT
PRINT
END SUB

SUB GoToStmt
IF IsDigit(LEFT(Tok, 1)) THEN
GoToLine
ELSE
PRINT "Line number must follow goto"
ErrNum= TRUE
END IF
END SUB

SUB GosubStmt
IF IsDigit(LEFT(Tok, 1)) THEN
ISP += 1
IF ISP > UBOUND(Stack) THEN
PRINT "Too many gosubs before return."
ErrNum= TRUE
EXIT SUB
END IF
Stack(ISP)= CurLine
GoToLine
ELSE
PRINT "Line number must follow gosub"
ErrNum= TRUE
END IF
END SUB

SUB ReturnStmt
IF ISP = 0 THEN
PRINT "return without gosub"
ErrNum= TRUE
EXIT SUB
END IF
CurLine= Stack(ISP)
ISP -= 1
END SUB

SUB IFstmt
DIM BitBucket as INTEGER
IF Expression = 0 THEN
SkipToEOL
EXIT SUB
END IF
BitBucket = Accept("then")
IF IsDigit(LEFT(Tok, 1)) THEN GoToLine
END SUB

SUB GoToLine
ValidLineNum
InitGetSym(Num)
END SUB

SUB ValidLineNum
IF Num < 1 OR Num > 300 THEN
PRINT "Line number out of range in line "; CurLine
ErrNum = TRUE
END IF
END SUB

SUB LoadProg
DIM FileSpec as STRING
DIM I as INTEGER
ClearProg
INPUT "Program file"; FileSpec
IF INSTR(FileSpec, ",") = 0 THEN FileSpec += ".bas"
OPEN FileSpec FOR INPUT as 1
I= Err
IF I THEN
PRINT "*** ERROR: ";
SELECT CASE I
CASE 2
PRINT "File not found."
CASE 3
PRINT "File I/O failure."
CASE 4
PRINT "Out of memory."
CASE 8
PRINT "You don't have permission to read that file."
CASE ELSE
PRINT "Unanticipated error, FreeBASIC error code: "; I
END SELECT
EXIT SUB
END IF
FOR CurLine= 0 to MaxLine
LINE INPUT #1, Pgm(CurLine)
IF EOF(1) THEN EXIT FOR
NEXT
CLOSE
CurLine= 0
END SUB

SUB SaveProg
DIM FileSpec as STRING
INPUT "Save as"; FileSpec
IF INSTR(FileSpec, ",") = 0 THEN FileSpec += ".bas"
OPEN FileSPec FOR OUTPUT as 1
IF Err = 8 THEN
PRINT "*** ERROR: You don't have permission to write to that file."
EXIT SUB
END IF
FOR CurLine= 0 to MaxLine
IF LEN(Pgm(CurLine)) THEN PRINT #1, Pgm(CurLine)
IF INSTR(Pgm(CurLine), " end") THEN EXIT FOR
NEXT
CLOSE
CurLine= 0
END SUB

SUB ClearProg
FOR CurLine = 0 to MaxLine
Pgm(CurLine) = ""
NEXT
END SUB

SUB ClearVars
DIM i as INTEGER
FOR i = 1 to 26
Vars(i) = 0
NEXT
END SUB

FUNCTION IsAlpha(c as STRING) as INTEGER
IsAlpha= c = "_" OR C >= "a" AND c <= "z"
END FUNCTION

FUNCTION IsDigit(c as STRING) as INTEGER
IsDigit= INSTR("0123456789", c) <> 0
END FUNCTION

FUNCTION IsRelOp(c as STRING) as INTEGER
IsRelOp= INSTR("<>=", c) <> 0
END FUNCTION

FUNCTION Expression() as INTEGER
DIM n
n = AddExpr
DO WHILE IsRelOp(Tok)
SELECT CASE Tok
CASE "="
GetSym
n = (n = AddExpr)
CASE "<"
GetSym
n = (n < AddExpr)
CASE ">"
GetSym
n = (n > AddExpr)
CASE "<>"
GetSym
n = (n <> AddExpr)
CASE "<="
GetSym
n = n <= AddExpr
CASE ">="
GetSym
n = n >= AddExpr
END SELECT
LOOP
Expression = n
END FUNCTION

FUNCTION AddExpr() as INTEGER
DIM n
n = Term
DO WHILE INSTR("+-", Tok)
IF Tok = "+" THEN
GetSym
n += Term
END IF
IF Tok = "-" THEN
GetSym
n -= Term
END IF
LOOP
AddExpr = n
END FUNCTION

FUNCTION Term() as INTEGER
DIM n
n= Factor
DO WHILE INSTR("*/", Tok)
IF Tok = "*" THEN GetSym: n = n * Factor
IF Tok = "/" THEN GetSym: n = n / Factor
LOOP
Term= n
END FUNCTION

FUNCTION Factor() as INTEGER
IF Accept("-") THEN
Factor = -Factor
EXIT FUNCTION
END IF
IF Accept("(") THEN
Factor= Expression
Expect(")")
EXIT FUNCTION
END IF
IF IsDigit(LEFT(Tok, 1)) THEN
Factor= Num
GetSym
EXIT FUNCTION
END IF
IF IsAlpha(LEFT(Tok, 1)) THEN
Factor = Vars(GetVarIndex())
EXIT FUNCTION
END IF
PRINT "Unexpected sym "; Tok; " in Factor"
ErrNum = TRUE
END FUNCTION

FUNCTION GetVarIndex() as INTEGER
IF NOT IsAlpha(LEFT(Tok, 1)) THEN
PRINT "Expected variable, found "; Tok
ErrNum = TRUE
EXIT FUNCTION
END IF
GetVarIndex = ASC(LEFT(Tok, 1)) - ASC("a")
GetSym
END FUNCTION

SUB Expect(s as string)
IF NOT Accept(s) THEN
ErrNum = TRUE
PRINT "expected "; s; " but found "; Tok
END IF
END SUB

FUNCTION Accept(s as string) as INTEGER
DIM t as INTEGER
t= (Tok = s)
Accept= t
IF t and (Tok <> "rem") THEN GetSym ' Without this IF, rem doesn't work.
END FUNCTION

SUB InitGetSym(LineNum as INTEGER)
CurLine = LineNum
TextPtr = 1
TheLin = Pgm(CurLine)
LookCh = " "
GetSym
END SUB

SUB SkipToEOL
WHILE LookCh <> ""
GetCh
WEND
GetSym
END SUB

SUB GetSym
Tok = ""
WHILE LookCh <= " " ' Find next nonblank character.
IF LookCh = "" THEN EXIT SUB ' End of line?
GetCh
WEND
Tok = LookCh
IF INSTR(",;=+-*/()", LookCh) THEN
GetCh
EXIT SUB
END IF
IF LookCh = "<" THEN
GetCh
IF LookCh = "=" OR LookCh = ">" THEN
Tok += LookCh
GetCh
END IF
EXIT SUB
END IF
IF LookCh = ">" THEN
GetCh
IF LookCh = "=" THEN
Tok += LookCh
GetCh
END IF
EXIT SUB
END IF
IF LookCh = CHR(34) THEN
ReadStr
ELSEIF IsAlpha(LookCh) THEN
ReadIdent
ELSEIF IsDigit(LookCh) THEN
ReadInt
ELSE
PRINT ">What-> "; LookCh; " in"
PRINT ">"; CurLine; " "; Pgm(CurLine)
ErrNum = TRUE ' Later versions will have error codes like GWBasic
END IF
END SUB

SUB ReadStr
Tok= CHR(34)
GetCh
WHILE LookCh <> CHR(34)
IF LookCh = "" THEN
PRINT "String not terminated"
ErrNum = TRUE
EXIT SUB
END IF
Tok += LookCh
GetCh
WEND
GetCh
END SUB

SUB ReadInt
Tok = ""
WHILE IsDigit(LookCh)
Tok = Tok + LookCh
GetCh
WEND
Num = VAL(Tok)
END SUB

SUB ReadIdent ' This permits multiletter identifiers, even
Tok = "" ' though all variable names are single letters.
WHILE IsAlpha(LookCh) ' This will be handy once I install a symbol table.
Tok = Tok + LookCh
GetCh
WEND
END SUB

SUB GetCh
IF TextPtr <= len(TheLin) THEN
LookCh = MID(thelin, TextPtr, 1)
TextPtr += 1
ELSE
LookCh= ""
END IF
END SUB

END ' Tinybasic.bas
Find all posts by this user
Quote this message in a reply
03-22-2019, 10:33 PM
Post: #27
RE: Hello Ed -2!
(03-22-2019 04:41 AM)Aurel Wrote:  Ed
I also found one of yours on NARKIVE site:
...

Interesting that they left the header comments out. Here is the missing part of the original posting on comp.lang.basic.misc:

Code:
From: "Stephen J. Rush" <sjrush@comcast.net>
Subject: Ed Davis Tiny BASIC, improved (long)
Date: Sat, 24 Feb 2007 23:28:51 -0500
Newsgroups: comp.lang.basic.misc

When I saw this tiny interpreter last week, I couldn't resist fiddling
with it.  Here it is in FreeBASIC, with some extensions and fixes:
------------------------------------------------------------------------
'            Tiny Basic interpreter
'  Original QB version was posted to comp.lang.basic.misc
'     by ed_davis2@yahoo.com, 2/19/2007
'  FreeBASIC translation & enhancements by Steve Rush, 2/24/2007
'  To download the compiler this is written for, see www.freebasic.net
'  FreeBASIC is compatible with QB and has versions for 32-bit Windows,
'   Linux and DOS.
'    Added 'old' and 'save' commands.
'    Added 'end' statememt to mark end of program for save.  During
'      execution, 'end' has the same effect as 'stop'.
'    Added 'gosub' and 'return'.
'    Added 'ston' and 'stoff' to set / clear single-step mode
'    Added 'tron' and 'troff' to set / clear trace mode
'    Added 'cls'
'    Fixed a bug in Accept() that required comment text to be quoted.
'    Fixed a bug in InputStmt that treated any prompt string as an illegal token.
'    Fixed interpretation of comma and semicolon in print statements.
'    Several character tests of form:
'      IF LookCh >= "a" AND LookCh <= "z" THEN...
'     have been converted to calls to new functions IsAlpha(), IsDigit()
'     and IsRelOp().
'    Some GOTOs have been eliminated by use of ELSE, ELSE IF and SELECT CASE.
'    Converted FreeBASIC keywords to uppercase to distinguish them from
'     the same words used as Tinybasic keywords.
'    Converted variable names to Modula-style MixedCase; I like them that way

' Commands and statements (must be lowercase):
' bye
' list
' new
' old (load program; prompts for filespec)
' run
' save (prompts for filespec)

' cls
' end
' gosub
' goto
' if <expression> then <statement> | <line_number>
' input [<string> ","] <variable>
' print
' rem (may be abbreviated ' as in QB)
' return
' stop
' tron (trace on; prints line # before executing each line)
' troff (trace off)
' assignment:  <variable> = <expression>

' The filename in save and old may be entered without an extension; ".bas" will
'   be added.  Any other extension will be used as entered.

' 26 32-bit integer variables, a-z; no arrays.
' In FreeBASIC, an integer is 32 bits wide unless declared BYTE, SHORT or
'   LONGINT (64 bits).  Each size is also available unsigned, but I haven't
'   used any of those here.

' Everything except quoted strings must be lowercase.

' N.B.:  This is a really tiny BASIC, so:
'    No editor! The only way to edit a line is to re-enter all of it.
'    No boolean operations at all!  That means you can't say
'       if a > 0 and a < 9 then...
'    No bitwise operations.
'    No FOR, WHILE or UNTIL.  Spaghetti, anyone?  You don't _have_ to write
'       spaghetti code; you can simulate the block-structure constructs with
'       simple IF and GOTO, but the temptation is there.  The structure of the
'       interpreter uses  a lot of GOTOs in the parser loop, and converting that
'       to use SELECT CASE would require more rewriting than I have time for.
'    No ELSE or ELSEIF
'    No functions at all, except for the automatic conversion between strings
'       and integers in input and print statements.
'    No string variables; the only string operation is print.

' CAUTION: Line numbers are not stored with the lines.  If you edit a program,
'           make sure that any goto and gosub targets are still valid.  To insert
'           a blank line in a program, use an empty rem.  If I write another
'           version, I may fix this by going to the Microsoft-style linked list of
'           lines instead of keeping the program in a string array.
'           Any code or comments following an 'end' statement will be lost when
'           the program is saved, so end should be the last statement.  To break
'           execution in the middle of a program, use 'stop'.
'
' Line number range is limited to 1 .. 300, an arbitrary limit set by constant
'   MaxLine.  You can increase this until you run out of memory.

' A statement without a line number is immediately executed.

' Except for "old" and "save", all I/O is to the console; there is no LPRINT,
' no data file handling and no DATA statement.
Find all posts by this user
Quote this message in a reply
03-23-2019, 04:52 PM
Post: #28
RE: Hello Ed -2!
well yes i see now...
hmm i don't think that i see that program on freebasic forum
Find all posts by this user
Quote this message in a reply
04-10-2019, 07:23 AM
Post: #29
RE: Hello Ed -2!
Hey Ed..

What's new about your programming?
Is there a chance to try something new from your
workshop?
Find all posts by this user
Quote this message in a reply
04-10-2019, 10:19 PM
Post: #30
RE: Hello Ed -2!
(04-10-2019 07:23 AM)Aurel Wrote:  What's new about your programming?
Is there a chance to try something new from your
workshop?

Not a whole lot going on. Work has been very busy, and family/life issues are keeping me busy.

I start on a bunch of projects, but only get them about 70% finished before I move on to the next one. Not a good habit.

How about you? Anything going one? Do you have a family? If so, do they keep you busy?

I noticed from the Retro forum that you still hate QB64 :-)
Find all posts by this user
Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: