Doug, I tried this back channel and got a bounce... Anyway, in response to a later note you wrote...one month. Don't know if you can do that, with what I am proposing, but working full time at my real job I did my port between March and Aug. > I'd be happy with Quick > Basic if was updated to run in today's environments. Anyone have any > experience with True Basic Silver or Gold? I am writing backchannel. I'll make a last plug for Delphi. I know it is Pascal, but I find that once you get the idea that: for x= 1 to 10 whatever(x) next x looks like for x=1 to 10 begin whatever[x]; end; and that a function gives a result and a procedure is like a FB FN that does not have a result... I find that I can translate from FB to Delphi, on my laptop, in the car, and carry on a relatively alert conversation with my wife. My main app is 16,000 lines, and compiles in about 15 seconds on a 600mhz iMac running Virtual PC. I cut and paste a fn at a time. Code size is very similar. Dimming in FB^3 is very much the same. Delphi is OOP, but building windows (forms) is just drag and drop. A button is a component (a huge record) with all manner of properties. You name it, choose a font for it, highlight it, and react to its other properties...mouse hovering, mouse clicking, etc. Double click it and start writing code to react to it. Debugger runs right in the editor. These guys were making lightening like single pass compilers years before VB was ever thought of. Don't get me wrong, there is a great deal to learn, but I think much of that is Win and the file system. Here is a piece of code that gets user input in a typical database: (Don't worry too much about the TStudentDBWnd... it just relates to the form (window) 99% of the time this is generated as you build the form. I rarely pay any attention to it.) Procedure TStudentDBWnd.GetStudentInfo(Sender:TObject); var studentID:integer; begin StudentID:=gStudentIndex[gStudentId]; gFirstName[StudentID]:=FirstName.text; gLastName[StudentID]:=LastName.text; gAddress[StudentID]:=Address.text; gTown[StudentID]:=Town.text; gState[StudentID]:=State.text; gZip[StudentID]:=Zip.Text; gPhone[StudentID]:=Phone.text; gIDNumber[StudentID]:=StudentIDT.text; gBirthDate[StudentID]:=DOB.text; gParentName[StudentID]:=Parents.text; if RadioButton1.checked=true then gGender[StudentID]:=_Male else gGender[StudentID]:=_Female; end; and the same one in FB LOCAL DIM studentID LOCAL FN RetrieveStudentData'Receive data from Window Closing studentID=gStudentIndex%(gStudentID) gFirstName$(StudentID)=EDIT$(_myFirstName) gLastNAME$(StudentID)=EDIT$(_myLastName) gAddress$(StudentID)=EDIT$(_myAddress) gTown$(StudentID)=EDIT$(_myCity) gState$(StudentID)=EDIT$(_myState) gZip$(StudentID)=FEDIT$(_myZip) gParentName$(StudentID)= EDIT(_myParentName) gPhone$(StudentID)=EDIT$(_myPhone) gIDNumber$(StudentID)=EDIT$(_myIDNumber) gBirthDate$(StudentID)=EDIT $(_myDOB) IF FN pGgetGroup(_MBtn)=_MBtn THEN gGender%(StudentID)=_Male ELSE gGender%(StudentID)=_Female END FN In the Delphi code: FirstName.text shows the text property of the edit field FirstName you have properties like .enabled .visable .MaxLength .readonly .taborder I am no expert, but can help get you started. -- Best Wishes, George mailto: gbeckman@... http://www.pggp.com