氨北北北北北北北北北北北北北北北北北北北北北北北北北北北� 鞍北卑揶揶卑揶揶北北稗揶薇卑揶揶揶卑揶揶揶卑揶揶揶北稗揶薇北 鞍北稗薨稗薇稗薇北北卑揶北北稗薨稗薇稗薨稗薇稗薨稗薨揶鞍揶北 鞍卑揶北鞍北稗薇北北卑揶北北稗薇稗薇稗薇稗薇稗薇稗薨揶薇北北 鞍卑揶北北北稗薇北北卑揶北北稗揶揶北稗揶揶北稗揶揶北稗揶北北 鞍卑揶北北北稗薇卑薇卑揶北北稗薨氨北稗薨稗薇稗薨稗薇北稗揶北 鞍卑稗薇鞭薇稗薇稗薇卑揶北北稗薇北北稗薇稗薇稗薇稗薨揶鞍揶北 鞍北鞍揶揶卑揶揶揶薇稗揶薇卑揶揶北卑揶揶揶卑揶揶揶北稗揶薇北 鞍北卑鞍氨卑鞍鞍鞍北鞍鞍北卑鞍氨北卑鞍鞍氨卑鞍鞍氨北鞍鞍北北 鞍氨北北北北北北北北北北北北北北北北北北北北北北北北北北北� 鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍 Volume 2, Number 13 28 June 1992 (c) Daniel Do噀kal, All Rights Reserved The BBS Clipper magazine, published SEMIWEEKLY, every FRIDAY Some of the material used comes from scanning CLIPPER echoes which are carried in various BBS throughout the World. These Echoes are very often the source of the most often asked Questions and Answers about Clipper. Other material, which is fully signed or abbreviated is the copyright of the appropriate persons. The publisher is not responsible for other authors submissions.... Published material is not necessarily the opinion of the publisher. Redaction: Publisher...................................Daniel Docekal Chief editor ...............................Daniel Docekal Language editor .................................Dave Wall Table of Contents 1. ARTICLES ............................................................... 1 Hitch Hikers Guide To The Net (10) ..................................... 1 Magic of SET DELETED ................................................... 4 How do we.... (2) ...................................................... 5 How to detect available file handles? .................................. 10 Starters corner (4) .................................................... 12 How to read DOS serial number? ......................................... 16 2. SOFTWARE ............................................................... 17 What is what (4) ....................................................... 17 3. Q&A .................................................................... 20 What's address of Pinnacle Publishing? ................................. 20 Q&A:What to do in Windows for open more than 10 files? ................. 20 Q&A:How to send mail to Internet from FidoNet? ......................... 20 4. ANOMALIES .............................................................. 22 ANOMALIES reports and commets .......................................... 22 //STDERR another undocumented switch! .................................. 22 5. CLIPPER NET ............................................................ 23 Index of described files in Clipper BBS Magazine ....................... 23 6. CLIPBBS ................................................................ 25 CLIPBBS 2-13 Table of Contents (...) 28 Jun 1992 CLIPBBS distribution ................................................... 25 CLIPBBS, how to write an article!!! .................................... 27 - - - - - CLIPBBS 2-13 Page 1 28 Jun 1992 =============================================================================== ARTICLES =============================================================================== Hitch Hikers Guide To The Net Episode 10 (Xaphod, Rod, Gillian, and Marvin are still on their way to find out more about Life, the Net, and Everything. From off in the distance they hear a hollow roar punctuated by gunfire. Before they have a chance to grasp the situation, a huge battle tank screeches to a halt in front of them. It is a fearsome device with great nasty teeth painted on it. The cannon looks as if it could punch a hole through a small planet. A hatch opens and a rightly uniformed man steps out, crushing a passing cat under his boot.) Cat : (splat) Rod : Wh . . . who are you? Roarin' George: I'm General Roarin' George Pahton. I heard there was some Singularans around here. Thought I'd do some American style joggering. Xaphod : Oh yeah, they went that a way. Arnold Lint: Why does everyone pick on the Singularans? They only seek meaningful personal relationships with people they find special. Roarin' George: Right, that's it, we're gonna have some order around here. No more of these damn cliches. From here on out, the following rules will apply: Anyone who uses the phrases 'special', 'personal relationship', or 'meaningful relationship' WILL be fined twenty dollars for the first offense. Subsequent offenders will have their genitalia removed with a sharp rock. Anyone who corrects the spelling of another, WILL be fined 100 dollars. I won't stand for any namby-pamby intellectuals checking spelling when there's so much to do. Anyone caught agreeing with anything an oppositely gendered personnel says in an obvious attempt to make points, WILL have both kneecaps shattered with a ball-pean hammer. Likewise, anyone saying things which are right out of soap operas with the intentions mentioned above WILL also have his (or her) kneecaps shattered with a ball-pean hammer. Remember, this is the NET, it's tough out there. Keep your emotions to yourself, do you want a bunch of commies to read that gooey crap? Why they'll think we're wimps, then they'll invade. They've started infiltrating already - ever been to one of the dating service places? They're all commies, draining away our precious bodily fluids. Now, get back to work| (With that, he climbs back into the tank and drives off, casually blowing a 4 foot hole in a nearby wall. Just then, the 12" CRT on Xaphod's shoulder springs to life. On it is a man in a white suit with a bible in one hand and a microphone in the other. He speaks: "Friends. Why are we here today? We are here to hear the words - (Amen) - to hear the holy words from the Holy Box - (Amen). Oh blessed be the Holy Box, and it's disciples: Prophet Ronko, Prophet K-Dul, and the Prophet Popeel - (Amen Amen Amen). Yes, they lead is to immaculate spending. We here at the Church of the Divine Vision believe in Johnny and Merv and Mike. TV is the reflection of life, and life is a reflection of reality, therefore TV IS CLIPBBS 2-13 Page 2 28 Jun 1992 REALITY. Yes, Mrs Olson may be a Nazi, but if you buy Foljers, you can bake just like her. And Robert Yung may have multiple personalities and a penchant for farm animals, but if you drink his coffee, you can remain calm in the midst of a nuclear explosion . . . ") Rod : Shut that OFF. Xaphod : Bloody religious fanatics. Arnold Lint: What an odd religion, worshiping a TV, seems hard to believe. Martin: Not really, just another awful attempt to deal with this miserable Net. It's all a cop out. You can't understand something so you pretend that there is something else in control. It's all rubbish. Gillian : Quiet. Of course there's a supreme being. Martin : If you say so, but if God didn't already exist, he would have to be invented. Rod : It's hopeless talking to him. [***************************************************************************** "The Hitch Hikers Guide To The Net" indicates that the members of the Church of the Divine Vision are basically agnostics. They prefer to believe what they see on the tube to what some half starved people wrote about over 2000 years ago. They can't meet God, but if the TV gives them trouble, they can always replace it. Their belief led to the writing of the Video Testament, which is the gospel for all believers in the Holy Box. Although it seems unlikely, the Church of the Divine Vision was supposed to have formed some amazing concepts as to how the Net exists. *****************************************************************************] Gillian : Let's go. Martin : Do we have to? (They all ignore Martin and press on. Two days later they arrive at their destination. In front of them is a rather bug-eyed looking lizard.) Xaphod : Hey man, are you the one with the dope on Life, the Net, and Everything. Lizard : Yes, I am Teddy the Wonder Lizard. I know all there is to know about Life, the Net, and Everything. Rod : Well, tell us| Gillian : Please do| Teddy : You won't like it. Martin : (sarcastically) Now that's a real surprise. Teddy : Are you sure you want to know? Arnold Lint: Yes, what is it, got to more than forty-bloody-two. Teddy : Yes, that was the answer we told the Net. We figured that the real answer was so awful, they'd rather get something vague and argue about it forever. Xaphod : Well, out with it. Teddy : It's all here, in the Video Testament| (He hands Xaphod an old looking book, pops about a dozen valiums, and then switches on a nearby TV set. He is watching 'Real People'.) Xaphod : Well, that should finish him off. Arnold Lint: The drugs? CLIPBBS 2-13 Page 3 28 Jun 1992 Rod : No, 'Real People', lowers the IQ so much that the brain just packs it in and you die. Gillian : Find the answer already| Xaphod : Okay, now lets see . . . ******************** End Of Part 10 ******************** What is the answer to Life, the Net, and Everything? Why are we here? Are we here? And why is it that vampires never attack Jewish neighborhoods? For the answers to some of these questions . . . Tune in next time . . . same Net-time . . . same Net-channel. ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 4 28 Jun 1992 Magic of SET DELETED? 1) SET DELETED ON USE DATABASE // 20s+ to open 2) SET DELETED OFF USE DATABASE // 0.39s to open Tests have been performed on 16Mhz AT. SET DELETED ON behaves like SET FILTER TO. My theory is that when opening file, CLipper is trying to find first record in database and is ending up processing a whole file !! What is going to happen with 40,000 records ! :-) My routine to save invoices took 30s+ and more as file grew with deleted records. I have just used magic statement SET DELETED OFF and saving took only 4s. Was fighting with this little bugger for days and was blaming everything on VMM but SET DELETED ON was the culprit. Good to know that there is a catch with SET DELETED ON ! ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 5 28 Jun 1992 Ronald Offerman How do we ... How do we do it and what do we use Working environment ... 'Late(st) news'___________________________________________________________ Now is the time to... get Clipper for Windows, fast! After having installed Windows 3.1 and seeing it zip by on my system I think it's time for Nantucket to release a Windows version of Clipper fast. The Windows environment now looks fast enough to use it for both a serious programming environment and fast Windows database applications. Please remember that I'm also into Database Publishing and the use of OLE and DDE is very interesting when doing this. Of course the question remains if this Aspen project (the 'official' codename for the Windows version) is allowed to be finished now CA has taken over. 'REAL Latest news'________________________________________________________ Have just received CA Statement of direction. Aspen is going to be the end goal for Clipper and dbFast. Beta release dates were stated for Clipper 5.2 and Aspen. Final delivery dates however were nowhere to be found. If you read it you'll find something peculiar. Clipper 5.2 WON'T be the fully object oriented Clipper. This will be versie 5.X. If however beta tests for 5.2 and Aspen will be ready before the end of this year but no 5.X this means Aspen will be released before 5.X. Aspen looks and sounds GREAT!! But can they deliver, w'll have to wait and see. 'Seeing is believing' 'Working environment'_____________________________________________________ I promised, so lets begin. I use two approaches in what you might call the 'programming enviroment'. I. Based in each 'root' directory for a project is a controlling Norton Commander menu (NC.MNU) containing options to start the editor, compile, start the program with or without the debugger II. Working in 'plain' DOS I use Brief's state restore and the dBrief application dictionary to edit the source; in addition each 'root' directory contains 3 batch files: MK.BAT ; make application using PLL's (there is a MKP.BAT MaKePlain to make the final version without using PLL's) DB.BAT ; debug application GO.BAT ; run application without the debugger This provides me with 2 letter commands for all 'environment functions' The Norton Menu actually calls the same batch files but also contains options to backup, print, copy the source. Currently I occasionly try using Windows 3.1 as a multitasking enviroment. Each part of the proces is in a separate window and using a virtual desktop (provided by the PD BigDesk) is works fine. Advantage is you can kill a runaway application without rebooting the complete system and you can monitor output while it is being generated. In the past I tried using DesqView but I like to have several complete (eg. 80x25) windows on DOS. This proved to be quit impossible. Even with the A3 screen in 50x132 mode I can't fit 2 complete DOS windows on screen. CLIPBBS 2-13 Page 6 28 Jun 1992 MK.BAT this batch file calls either Dmake or Rmake with the appropriate make file with parameters like DEBUG or USEPLL. There is ONE make file to make both the final and debug versions with the option of using a PLL. DB.BAT Only difference between these two is that DB.BAT loads CLD. GO.BAT I never have a problem passing parameters because the are either automaticly read from a default ASCII parameter file or a single parameter is passed being the name of a different parameter file to be used. I think in most cases it's better to provide a file for the parameters most important reason being bypassing the DOS commandline limit. Do not however confuse the parameter file with something like a configuration file containing all kinds of values used in the program. I always store 'configuration' values in a multidimensional array which is written to disk from within the program and can't be edited with ASCII editors. Next time I'll let you have a closer look at the Make files and directory structures used for the projects. 'SIDELINE'________________________________________________________ S Telemate is a superb Telecomm program using multithreading S I so you can have the modem dialing while you view a log file I D at the same time copy interesting things to an other file D E while you reconfigure part of the program while you jump to E L a dos window for a simple command to view a compressed file. L I You actualy can have a Backscroll, Edit, View and Dos window I N active at the same time even when the modem is dialling or N E maybe more important, when you are downloading. It's GREAT!! E 'Programming'_____________________________________________________________ Ok, this is a new subsection I hope will appear in each article. It will discuss programming problems and solutions I found; when needed I will also show the development path it took to get to the current solution I'm using. Remember I think of anything I have to program as a problem to solve. Menuing in Clipper ------------------ Development path (in SEMI PSEUDO code so errorprone!! and sometimes shorthand or 5.01-like code for '87) (Started in Clipper '87) @ 1,1 prompt "Search" Message "Search for a record" @ 2,1 prompt "Add" Message "Add a record" @ 3,1 prompt "Delete" Message "Delete a record" @ 4,1 prompt "Quit" Message "Quit program" menu to x do case ... endcase __Disadvantage: Fixed menu; insert, move and delete options is difficult and clumsy CLIPBBS 2-13 Page 7 28 Jun 1992 Refinement: x = 1 y = 1 @ x,y prompt "Search" Message "Search for a record" x=x+1 @ x,y prompt "Add" Message "Add a record" x=x+1 @ x,y prompt "Delete" Message "Delete a record" x=x+1 @ x,y prompt "Quit" Message "Quit program" menu to x do case case x == 1 .... case x == 2 .... endcase __Advantage: easy move of menu options __Disadvantage: do case has to be update with each modification Refinement: DisplayMnu( Main, 1, 2, 4 ) // param: Menu_ID, start x, start y, increment menu to x ExecMnu( Main, x ) // param: Menu_ID, menu option function DisplayMnu( menu_id, x, y, z ) do case case menu_id == main @ x,y prompt "Search" Message "Search for a record" x := x + z @ x,y prompt "Add" Message "Add a record" x := x + z @ x,y prompt "Delete" Message "Delete a record" x := x + z @ x,y prompt "Quit" Message "Quit program" case menu_id == search ... endcase return (.t.) function ExecMnu( menu_id, option ) do case case ( menu_id == main ) .and. ( option == 1 ) // Search ... case ( menu_id == main ) .and. ( option == 2 ) // Add ... ... case ( menu_id == search ) .and. ( option == 1 ) // ... ... endcase return (.t.) __Advantage: got rid of do case in main program; menu configuration is easy __Disadvantage: do case (ExecMnu) has to be update with each CLIPBBS 2-13 Page 8 28 Jun 1992 modification Refinement: Public aArr1, aArr2, aArr3 MnuConfig( main ) nChoice := aChoice( aArr1, aArr2 ) DO &aArr3[]nChoice] function MnuConfig( menu_id ) // in super shorthand '87 code do case case ( menu_id == main ) aArr1 := { "Search", "Add", "Delete", "Quit"} aArr2 := { .t., .t., .f. .t.} aArr3 ;= { "FncSrch", "FncAdd", "FncDel", "FncExit"} case ( menu_id == search ) ... endcase return ( aArr ) __Advantage: enabling/disabling options through parallel array and security can easily be added because w're using aChoice __ Disadvantage?: using macro compiler (Clipper 5.01) Refinement: aArr := MnuConfig( main ) nChoice := aChoice( aArr[ OPTIONS ] ) ExecMnu( main, aArr[ CODEBLOCKS, nChoice ] ) MnuConfig returns a multidimensional array assignment example: aArr[1] := { "Search", .t., { || FncSrch } } __Advantage: uses multidimensional arrays uses codeblocks instead of macro compiler strings so parameter passing to functions is easy Disadvantage: ? Refinement: ExecMnu() uses constants defined in .ch and a codeblock array Advantage: no macro compiler needed Current: using omenu (it's free and "easy" to modify) and execmnu with predefined constants; menu defined external in datafile Advantage: no recompile needed when reconfiguring with existing functions I hope my menuing adventures are to your advantage; I'd like to repeat that the above code is SUPER SEMI PSUEDO!! Hope this item will be shorter too in the next article! 'By the way...'___________________________________________________________ Something About Norton Guides 'Peter (Norton) when will we get an update for the guides that like Tom Rettig's Help uses XMS/EMS, pastes a template/example into the source, has categories? Don't tell us Dos is dead and w'll have to move to Windows to get advanced (programmers) help.' I.D. Use Desqview/Windows multitasking to copy/paste NG text into source! It's a temporary be workable solution using Win 3.1 CLIPBBS 2-13 Page 9 28 Jun 1992 -------------------------------------------------------------------------- NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET 'C-style complex Case' Although you might think that the Clipper Do Case statement can only execute ONE of the cases, this isn't entirely TRUE. The keyword is TRUE. Case expects a statement the either is True or False, SO Do Case Case AnyFunc() ... Case OtherFunc() ... Case x == y ... end The function AnyFunc() will be first executed. This function should either return TRUE in which case the Do Case will end or return FALSE in which case OtherFunc() will be executed that should either return TRUE or FALSE and so on. The functions AnyFunc() and OtherFunc() can actually execute something and depending on the result end the Do Case or have it continuing execution. This provides you with a Semi C-style 'case' in which you have to actualy 'break' form the case to end it. Using Do Case this way has enormous potential. Try it and think about ways to have Do Case work for you! Credits to whom credits are due The idea came from Matt Whelan at a Clipper Seminar. He used it in a different way, but he did initiate the idea. NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET -------------------------------------------------------------------------- 'Next Nugget' Dos Nugget? 'Novell-style' path ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 10 28 Jun 1992 How to detect available file handles? originally by Jim Lynch What's a problem? One, how to get knowledge of REALLY available FILE HANDLES for your CLIPPER program. How to do it? I prefer this solution. You could FREAD() the config.sys, but end up fooled by systems (such as mine) that have a minimum FILES= in config.sys, and the rest loaded high in AUTOEXEC. Or on a network, you could have a big FILES= in config.sys, but be limited by NetWare SHELL.CFG...... Heres my function to report available handles. Comes in handy when you're developing, you can run it from the debugger and see how many handles you have left. *---------------------------------------------------------------------* * * * Function: Handles_() * * * * Purpose: To determine the number of available file handles. * * * * Syntax: Handles_() * * * * Returns: A numeric integer equal to the number of AVAILABLE * * file handles. * * * * Usage: Useful for a startup routine to determine if there is * * enough file handles to run the application. * * * * Example: if Handles_() < 15 * * ? "Sorry, Not enough FILE HANDLES" * * quit * * endif * * * * Remember that DOS uses the first 5 handles for itself. * * On a system booted with a FILES=20 in CONFIG.SYS, * * Handles_() will return 15 assuming the application * * has not opened any files. * * * * Note: A temporary file F???????.$$$ is created and repeatedly * * opened to get the number of available handles. * * * * NUL was *not* used, because on Novell Netware, NUL is * * a local file, and therefore does not use up a * * SHELL.CFG handle when it is opened. * *---------------------------------------------------------------------* function Handles_ private x,y,z,h,random,tempfile do while .t. random = lpad0_(right(strtran(str(seconds()),".",""),7),7) tempfile = "F"+m->random+"$$$" if ! file(m->tempfile) exit endif CLIPBBS 2-13 Page 11 28 Jun 1992 enddo z = fcreate(m->tempfile) if m->z < 0 return 0 endif h = 1 && counter of handles opened x = m->z && save highest handle we opened do while .t. y = fopen(m->tempfile) if ferror() != 0 exit endif x = m->y && save the highest handle we opened h = m->h+1 && increment the count of opened handles enddo && close all the handles we opened, && starting with the highest, working && down to the lowest if m->h = 1 fclose(m->x) else for y = m->x to m->z step -1 fclose(m->y) next endif erase (m->tempfile) return m->h ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 12 28 Jun 1992 Starters corner (4) by Paul Ket Last time we left with a brand new way of storing the data in the files. We created the Thirdtry.dbf. It consisted of three files. Two containing the real data, one is used as a reference to look-up words. In this episode we look at the meganisms behind our program. Now the real fun starts! Last time i've made a nasty mistake: i've forgotten to include a full description of THIRDTRY.DBF. Sorry about that. Complains can be send to the editor :-> . It is contained in the addendum of this episode. I also promised to take a closer look at the files. That can wait till an other time. Now is the time for the creative part of programming! What do we want? ---------------- First we have to ask ourselves what we actually want our program to do. Think about this at "grass-root" level. We want the program to start and present us the contents of de files. On the screen to be precise. Besides that we want to browse and to look up things. At the end we also want to make a hardcopy of the recipe. After that we sign off and go off to the kitchen. What does the intended user want? ---------------------------------- What we want is important. But not as important as the wishes of the user. Remember episode 1, in which we stated that this project was also intended to pay in our debt to Mum. She agreed on buying a computer with the demand for a good program for her recipes(A). In jargon: a novice user. Somebody who doesn't want to learn about fields and records. Doesn't want to spent the leisuretime at the keyboard. So: simplicity, clarity and easy to use are major demands. These demands are important because by our design with all those files we've created a great opportunity for making things complex. Let's not do that! Basics ------ To have something to show to anyone else, it's nice to start with the design of the screen. We've waited with that to make a good design for our datafiles, but now the time has come to do so (B)! Designing the screen -------------------- We start desinging with a few questions. First: what has to be present on the screen? Three categories of information can be present: (1) Data The real data: - the name of the recipe - the ingredients CLIPBBS 2-13 Page 13 28 Jun 1992 - the presription how to prepare it. (2) Extra info Things commonly seen, handy, but no complaints if you leave them out: - time - date - filepath - number of the recipe - number of ingredients 谀蘒NTERMEZZO哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪� 矨ltering the database structure � �------------------------------- � 矨t this point in the process i get the strong urge to add extra � 砳nformation, extending the amound of information to store. Think of:� � - the last time the recepe was made � � - date of data-entry � � - names of visitors who have eaten it � � - names of family who don't like it � � - record-size � � � 砏hy not? Go ahead! � 砈ome parts can be stored in THIRDTRY.DBF, others in LOOKUP (c). � 滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪馁 (3) Directives. A user has a right to know where s/he is and what to do. So we have to tell where we are and where we can go to. These three types of information deserve a special place on the screen. In the pre-windows-era this was called window-ing. Each type of information has his own place on the screen. Now you talk about "view-ports". It means the same without refering to that product of Microsoft. Here's one of my favorite screen designs. It is 24 rows by 80 colums (D). You might have to adjust your pinter. But it shows beautifully on your screen! >---------- screen starts here --------------< 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪� Date: 10 jan 1992 Recepe: 1 Time: 12:12 Total: 1123 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪� Breek de eieren in een beslagkom. Fried eggs Extra Roer ze goed door. Doe de boter in de pan, smelt ze. Doe de geroerde eieren slices bread 3 in de pan. Zet het vuur zo laag eggs 5 mogelijk. Doe een deksel op de pan! mature cheddar 50 grames Laat het langzaam sudderen. Na 3 butter little minuten de kaas op het ei doen. garlic little Kruiden naar smaak. Deksel weer op red pepper 1 de pan doen. Als de kaas grotendeels pepper little gesmolten is is het ei goed. Opdienen op de sneetjes brood. CLIPBBS 2-13 Page 14 28 Jun 1992 哪哪哪�< Display >哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪 F1= Help F5= Look-Up 哪哪哪�< Esc = Exit >哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪 >---------- screen ends here --------------< You can see three zones in this screen. At the top the Extra information. Two lines. Left and right filled out. As you can see i present there the number of this recepe and the total amount of recepe's i've got. In the middle the main information. Note the absence of captions like "Name", "Ingredients" etc. I think those are redundant. At the bottom the user-guide. It clearly shows only three options and gives us information about where we are (Display). Techniques ---------- There is some programming necessary for getting this screen. I don't intent to give full listings but here's how i would do this. For a start: i have a MAIN procedure/function which contains the main program. In this function there's a loop. DO WHILE .not. PresentScreen() GetUserKey() ProcessKey() ENDDO The biggest part of the screen is organised in PresentScreen(). Not all. The horizontal lines are not disturbed at all. So, i write them only once: at the start of the program. The time, presented in line 2, has to be updated -more ore less- continously. So, i make a small function TimeUpd() which i call in all three functions in the loop. The keys available to the user are dependent on the place of the user in the program. So, i present this information after i've processed the last keystroke, in the function ProcessKey(). This leaves us with the thask to present the contents of THIRDTRY.DBF, the date, recepe number and the total number of recepes. Below you find a (buggy) source-listing of PresentScreen(). It depends on some unstated assumptions but it is only intended to give an idea of how this can be done(E). >------------------ part of PresentScreen() ----------------< USE THIRDTRY.DBF ALIAS Third USE INGRDNT.DBF ALIAS Ing @ 1,60 SAY "Recepe:" + STR(nRecepe),6) @ 2,60 SAY "Total: " + STR(LASTREC(),6) Select Third LOCATE FOR Third->Re_num=nRecepe IF found() @ 4,0 SAY third->Name cDesc := third->Desc CLIPBBS 2-13 Page 15 28 Jun 1992 Select Ing LOCATE FOR ing->re_num = rRecepe DO WHILE found() @ A,B SAY LookUp(ing->ing_num) ENDDO ENDIF >------------------ End of PresentScreen() -----------------< - - - - - Notes: (A) complaints are received about the sexist approach. Author likes to state that no harm is or was intended. Wherever wanted he can be replaced by she or the other way around. (B) Handbooks and people who have studied programming will get sick at this time. Ok, it's wrong. But it works! Let's call it prototyping. (C) What the result will be will be discussed in a forthcoming episode. (D) Because i think you'll look at it with a Word-Perfect-alike. i haven't made it 25 * 80. A normal screen is of course 25 * 80 but in WordPerfect you "only" get 24 * 80. (E) If somebody knows an equal simplistic but better way for doing the same job: please let me know! ---------------------- ADDENDUM ------------------------------------ Name: Lookup.dbf (3) =========================== NAME TYPE LENGTH 1 Ing_num N 3,0 2 Ing_nam C 30 --------------------------- TOTAL 33 Name: Ingrdnt.dbf (3) ====================== NAME TYPE LENGTH 1 Re_num N 4,0 2 Ing_num N 3,0 3 Amount C 10,0 ---------------------- TOTAL 17 Name: THIRDTRY.DBF (3) ===================== NAME TYPE LENGTH 1 Re_num N 4,0 2 Name C 40 3 Desc M 10 -------------------------- TOTAL 54 ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 16 28 Jun 1992 How to read DOS serial number? originally by Eric J. Givler Here's how to read the DOS serial number. This function assumes you have the NanForum library (for the intterupt code) and you have some data conversion functions, ie. Dec2Hex(). This function (and about 200 others) are in my POTLUCK.LIB #include "ftint86.ch" PROCEDURE MAIN() LOCAL midlabel := space(29), regs[12], r_ax, label_fat // these calls are Nantucket Forum ToolKit. Regs[AX] := 17421 Regs[BX] := 0 Regs[CX] := 2150 Regs[DS_STRING] := Register( DX ) + midlabel FT_INT86( 33, Regs ) r_ax := Regs[AX] do case case r_ax = 1 .or. r_ax = 2 .or. r_ax = 5 // an error occurred label_fat := .f. // probably wrong dos? otherwise label_fat := .T. endcase midlabel := regs[DS_STRING] // info is in here. if label_Fat ? 'Volume: ' + substr(midlabel, 7, 11) ? 'FAT: ' + substr(midlabel, 17, 8) ? 'Serial: ' + VolSerial(substr(midlabel,3,4)) endif RETURN FUNCTION VOLSERIAL( FOUR_BYTES ) LOCAL nval := bin2l( four_bytes ) LOCAL n1, n2, c1, c2 n1 := nVal % 65536 n2 := (nVal - n1) / (2^16) c1 := Dec2Hex(n1) // Returns HEX of a word value (IDL 2.0) c2 := Dec2Hex(n2) // Returns HEX of a word value (IDL 2.0) RETURN (c2 + "-" + c1) ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 17 28 Jun 1992 =============================================================================== SOFTWARE =============================================================================== What is what (4) STAGE Sysstem development tool. Helps build screens and reports using template language. Supports arrays and virtual pages using 255 page objetcs. STEVE STRALEY'S TOOLKIT Steven Straley's Toolkit contains a lot of routines and tools for program development. Allows changing of says, gets, reads, pictures, colours without recompiling. Windowing, menus, array functions, backup and restore, database generation, DBT packing, word processing, report writer, source code debugger, 560 page manual, free reader for Tom Rettigs Help. SUBNTX() Fast and unique set of functiuons for thos who want much more speed and flexibility from indexes. Creates a subset of an index based upon your conditions or wildcards. Eliminates time delays caused by skipping unwanted records in an index. Ideal for reporting. Never use SET FILTER AGAIN. SUPER.LIB Professional for Clipper database Warehouse, �198 (c) Functional Software Inc. Complete drop-in procedures, compatible with Summer 87 and 5.0, all major clipper libraries, european data formats supported. 100% source code, commented, readable and included at no extra charge. Organized, cross-referenced manual with examples for all function plus a NG database for fast reference. Over 100K of sample programs, 30days phone support, unlimited BBS support, Compuserver. No royalties. Included: - report writter - query/filter builder - form letters - mailing lables - data driven data entry - lookup tables - help system - frequency analysis - duplicate checking - selective global field replacement - expression building - record tagging - calendar, calculator and TODO list utilities CLIPBBS 2-13 Page 18 28 Jun 1992 - user definable pull down menus - selective copying and appending - text file browsing - directory tree - popup boxes and menus - production analysis (data sensitive) - interactive DBF and index building T-BASE Work with pictures in databases in grand style. Scanned photographs, documents and pictures generated by drawing packages adn other soruces such as vide frame grabbers can be displayed alongside and active text screen at any [position scalled and resized. Saves in popular PCX format. TELEPATHY Complete powerful serial communications library, easy to use and highly efficient. all the usual transfer protocols, high baud rate operation plus a notification mechanism for background comms. THE LIBRARY (PLANET) Over 360 functuions covering 20 areas including arrays, date, disk, DOS, file, financial, graph, graphics, keyboard, memory, mouse, network, printer, screen, SQL API, statistical, time and trigonometric. Includes a complimentary copy of Gupta SQLBASE single user engine. Documentation only on disk. TIME TRAK Multiple users and resource scheduling program with 100% Clipper source supplied. Includes simultaneous view of multiple calendars, recurring and rescheduling appointments, 4display formats (daily, weekly, monthly, 6month) things to do pad, alarm clock, password protection. 140 page manual. UI2 Powerful development environment which includes an editor for designing screens and reports as well as template drive applications generators, templates can generate Clipper, dbIII, dbIV, Fox, QS, dbXL and C programs. UI2 TOUCH&GO Designed to generate complete systems using a few keystrokes and the supplied templates. The build in screen editor allows build own input and output screens. Multi user, interactive query system, scrolling input screens, easy customisation using template directives and integration with your own source code. VALKYRIE Reverse engineer an EXE file back into its various PRG files. CLIPBBS 2-13 Page 19 28 Jun 1992 Works with S87. Lots of user configurable source code formatting options plus symbol and cross referencing. Comments cannot be reocevered, there is a password protection feature. WARPLINK Very fast DOS compatible dynamic overlay linker for use wiuth any language that produces .OBJ files. Detailed map info and online error handler provide debugging help. Incremental linking and enhanced memory management. Includes ability to create COM files. WIPEOUT Screen wipping routines, available as SHAREWARE (hope will stay some time). Serie of very nice and good working functions for clearing/displaying screens in many ways. Quite useful for producing demos. WORDWRAPPER Alternative to using memo fields and .DBT files. Avoids file bloat by storing data to a .DBF file. Allows word wrapping, copy, zoom in.out, window size and position., Clipper source supplied. ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 20 28 Jun 1992 =============================================================================== Q&A =============================================================================== QUESTION: What's address of Pinnacle Publishing? ANSWER: Pinnacle Publishing, Inc. 28621 Pacific Hwy. So. P.O. Box 8099 Federal Way, WA 98003 (206) 941-2300 (800) 231-1293 Fax: (206) 946-1491 ------------------------------------------------------------------------------- QUESTION: What to do in Windows for open more than 10 files? ANSWER: If you must run in the enhance mode, you must tell Windows to allow more than 10 files to be opened per window (10 is the default). The way you do that is in the SYSTEM.INI file under the 386en section add the following statement: pervmfile=xx where xx is the number of files you need to open. Make it reasonable, don't go overboard with it or you will slow down the system. Hope it helps... ------------------------------------------------------------------------------- QUESTION: How to send mail to Internet from FidoNet? To send from fidonet to internet you must use a gateway. one such gateway is fidonet address 1:114/15. To use this gateway. send mail to user "uucp" at 1:114/15 from any fidonet system. In the first line of the text, you put the internet style address followed by 2 returns. for example to my internet address "larry@panix.com" To: larry@panix.com to go from internet to fidonet you shoud send the message to user "uucp" first.lasttname.lastname.@fnet.nf107.n10.z1.fidonet.org where f107 is the net 107, n2603 is node 2603, and z1 is zone 1. (note this is the address of "MORE") using the fidonet to internet gateway you can also send mail to CLIPBBS 2-13 Page 21 28 Jun 1992 other systems like compuserve and america on line nnnn,nnnn@compuserve.com screenname@aol.com ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 22 28 Jun 1992 =============================================================================== ANOMALIES =============================================================================== ANOMALIES and their comments This part of Clipper BBS Magazine is dedicated to all discovered anomalies and comments about them in Clipper products. Because Nantucket is still unable to give own bug and anomalies reports (as actually did in past with Summer 87 version) is very handy to have results of many investigations done on many user places. I'm also doing my own investigatings, because i'm always very good when someting has hidden problems. Everything what i buy will first show all problems and then all normal things. This amazing part of my live is sometime making me crazy, but for testing of programs it's great . Daniel ------------------------------------------------------------------------------- //STDERR another undocumented switch! application.exe //INFO //STDERR >>file.ext That simple line will take a care of: 1) redirecting Clipper normally hardscreen coded output of //INFO to stderr device 2) redirect stderr device to file Result? Copy of wanted information from //INFO into your FILE! ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 23 28 Jun 1992 =============================================================================== CLIPPER NET =============================================================================== Following is COMPLETE list of all published file descriptions in Clipper BBS magazine in previous numbers. Purpose of this index list is to allow anybody find needed file descriptions in growing number of described files. Short description after name will give first possible close image about file. Number enclosed in "[]" will mean number of Clipper BBS magazine. 谀哪哪哪哪哪哪履哪穆哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪履哪哪目 矲ileName 砈rc 矰escription 砏here � 媚哪哪哪哪哪哪拍哪呐哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪拍哪哪拇 矨CCESS.ARJ 矯ln 砈ource of speed testing program 砙1-06]� 矨CH2TB.ARJ 矯ln 矯onvert ACHOICE to TBROWSE 砙1-05]� 矨CHOO2.ARJ 矯ln 砇eplacement of ACHOICE with GET possibilites 砙1-06]� 矨DHOC302.ARJ 矯ln 砈ummer 87 inteligent report program 砙1-04]� 矨SCPOS.ARJ 矯ln 硆eplacement of ASC(substr(cString,nPosition,1)) 砙1-11]� 矪ARNTX.ARJ 矯ln 矰isplaying bar indication during indexing 砙1-13]� 矪LOCK.ARJ 矯ln 砊etris game written in Cliper (-->Clipper !!) 砙1-19]� 矪UTTON.ARJ 矯ln 矦GET in form of BUTTON 砙1-14]� 矯ALC14.ARJ 矯ln 砅oPup Calculator 砙1-08]� 矯IVMIL.ARJ 矯ln 砋pgrade of Civil->Military time conversion 砙1-19]� 矯L5103.ARJ 矯ln 砇eport of 5.01 anomaly number 3 砙1-04]� 矯L5REP6.ARJ 矯ln �5.01 replacement of REPORT command 砙1-04]� 矯LIP110.ARJ 矯ln 矯lipper Documentor program 砙1-05]� 矯LIPFPCX.ARJ 矯ln 矲ast .PCX displayer for CLipper 砙1-15]� 矯LIPLINK.ARJ 矯bs 矯omplete text of R.Donnay about linkers 砙1-04]� 矯LIPPLUS.ZIP 矯ln 砄bject extension for CLIPPER 5.0 砙1-14]� 矯LIPSQL.ARJ 矯ln 矰emo of complete SQL library for CLipper 砙1-05]� 矯LIPWARN.AJ 矯ln 砈emaphore for convert WARNING: into ERRORLEVEL 砙1-11]� 矯LPFON.ARJ 矯ln 砈et of fonts for EXPAND.LIB from author 砙1-03]� 矯OMET.ARJ 矯ln 矰emo version of communication library 砙1-19]� 矯OND.ARJ 矯ln 矪uilder of conditional indexes like SUBNTX 砙1-03]� 矯WDEMO.ARJ 矯ln 矯lassworks lib written in CLASS(Y) 砙1-13]� 矰BSCN2.ARJ 矯ln 砈creen designer generator 砙1-05]� 矰IAL.CLN 矯ln 矰ialer with using of FOPEN() 砙1-07]� 矰OC111.ARJ 矯ln 矰ocumentor, newer version 砙1-08]� 矰TF102.ARJ 矯ln �.DBT files replacement, fully functional 砙1-14]� 矱NDADD.ARJ 矯ln 硆eplacement of incrementing last char of string 砙1-11]� 矴ETKEY.ARJ 矯ln 矷nput oriented library, wordprocessing 砙1-12]� 矴ETPP.ARJ 矯ln 矼odified GETSYS.PRG well documented 砙1-19]� 矴SR151.ARJ 矯ln 矴lobal Search and replace for programmers 砙1-07]� 矵GLASS.ZIP 矯ln 矵our glass for indication of index progression 砙1-04]� 矵ILITO.ARJ 矯ln 矵ighlighting of keywords on screen 砙1-19]� 矵OTKEY.ARJ 矯ln 矼akin unique hot key letter for every arrat el. 砙1-14]� 矷NDXSL.ARJ 矯ln 砋ser Fields selection builder for index generate砙1-03]� 矷OBASYS9.ARJ 矯ln 矰emo of S87 library and calling Clipper from C 砙1-03]� 矷S.ARJ 矯ln 砈everal c sources of ISxxxx functions 砙1-11]� 矹G2.ARJ 矯ln 矹umping between GET statements in READ 砙1-08]� 矺F_LOKUP.ARJ 矯ln 砈et of program for database relations 砙1-07]� 矻UTLIB.ARJ 矯ln 矨nother Clipper library 砙1-08]� 矼K30.ARJ 矯ln 矼ouse library demo version 砙1-03]� 矼OVEGETS.ARJ 矯ln 矴ETSYS change for moving between gets via VALID 砙1-03]� CLIPBBS 2-13 Page 24 28 Jun 1992 矼SWIN.ARJ 矯ln 矰etection of Windows mode when running Clipper 砙1-14]� 砃FDESC2.ARJ 矯ln 砃anForum library description list 砙1-06]� 砃FLIB2.ARJ 矯ln 砃anForum library main file 砙1-06]� 砃FSRC2.ARJ 矯ln 砃anForum library Source files 砙1-06]� 砃OTATION.ARJ 矯ln 矯omplete text of article about hungarian notat. 砙1-04]� 砃TXBAR.ARJ 矯ln 矪ar of indexing via system interrupts 砙1-19]� 砄CLIP.ARJ 矯ln 砄bject extension, real (not #define/command) 砙1-12]� 砄OPSCL5.ARJ 矯ln 矨nother version of pseudo objects 砙1-07]� 砅ACKUP.ARJ 矯ln 矨SM source of PACK/UNPACK replacement SCRSAVE.. 砙1-04]� 砅ARTIDX3.ARJ 矯ln 砅artial indexing 砙1-12]� 砅AT1.ARJ 矯ln 矯IX NanForum Libraryy PATCH 砙1-07]� 砅AT2-2.ARJ 矯ln 矲ix for FLOPTST.ASM in Nanforum Library 砙1-13]� 砅AT2-3.ARJ 矯ln 砊BWHILE improvement for Nanforum libray 砙1-14]� 砅AT2-4.ARJ 矯ln 矲T_PEGS() patch for NFLIB 砙1-15]� 砅AT2-5.ARJ 矯ln 矲T_TEMPFIL() patch for NFLIB 砙1-16]� 砅OPUPCAL.ARJ 矯ln 砅opup calender 砙1-05]� 砅OSTPRNT.ARJ 矯ln 砅ostscript printing from inside of Clipper 砙1-14]� 砅OWER10.ARJ 矯ln 矲rench library 砙1-07]� 砅RINTSUP.AJR 矯ln 矻ow level BIOS routines for printing 砙1-11]� 砆S20F.ARJ 矯ln 砈creen designer, demo, looks very good 砙1-11]� 砇EADPW.ARJ 矯ln 矴ETSYS change for password invisible reader 砙1-03]� 砈CANCODE.ARJ 矯ln 矰atabase with scan codes 砙1-07]� 砈CRSAVE.ARJ 矯ln 砈creen AntiBurning utility (inactivity snake) 砙1-05]� 砈EGUE.ARJ 矯ln 砃ovell library - demo 砙1-15]� 砈HADO.ARJ 矯ln 矯reating shadow on screen 砙1-14]� 砈HELP50A.ARJ 矯ln 砈uperHelp for Clipper 砙1-07]� 砈HOWANSI.ARJ 矯ln 矰isplaying a ANSI from inside CLIPPER no ANSI.SY砙1-15]� 砈NAP497.ARJ 矯ln 矪eta version of SNAP, partially compatible to 5 砙1-12]� 砈NAP50.ARJ 矯ln 砫BASE/CLIPPER documentor supporting 5.01 little 砙1-15]� 砈OUND.ARJ 矯ln 矼ultiple TONE() used as one SOUND function 砙1-06]� 砈TATUS.ARJ 矯ln 砊imer interrupt hooked status indicator 砙1-12]� 砈UPER160.ARJ 矯ln 砈UPER.LIB for Summer87 砙1-13]� 砈YMBOL.ARJ 矯ln 矰umper of symbol tables of Summer87 .EXE 砙1-03]� 砊BUNIQUE.ARJ 矯ln 矪rowsing unique without unique index 砙1-12]� 砊BWHL4.ARJ 矯ln 砏HILE browsing using TBROWSE, well commented 砙1-06]� 砊ICKER.ARJ 矯ln 砇eal Time Clock, interrupt driven on screen 砙1-12]� 砎OICE200.ARJ 矯ln 砎OICE synthetizing library for Clipper 砙1-13]� 砎SIX711.ARJ 矯ln 砎ernon Six Clipper utilities and library 砙1-05]� 砎SIX800.ARJ 矯ln 砎ernon's library, lot of functions 砙1-12]� 砏IPEV11.EXE 矯ln 砎ERY good screen manipulation library 砙1-11]� 砕IP2BAR.ARJ 矯ln 砅rinting BAR (USPS) code on EPSON printer 砙1-15]� 滥哪哪哪哪哪哪聊哪牧哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪聊哪哪馁 Src can be: Cln File is accesible on ClipperNet Cbs File is accesible in HQ BBS of CLipper BBS Magazine ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 25 28 Jun 1992 =============================================================================== CLIPBBS =============================================================================== CLIPBBS Distribution CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about another related problems and xBASE languages). This magazine is for free and articles aren't honored. Nobody can make a profit from the distribution of this magazine. CLIPBBS can be freely downloaded and uploaded to any BBS or any other public system without changes of original contents or number of files in original archive (kind of archive can be changed, but we are sup- porting ARJ archive because is best and smallest). If you are interested in CLIPBBS and would like to become a DISTRIBUTION site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet or just call to 31-10-4157141 (BBS, working 18:00->08:00, top is V32b) or voice to 31-10-4843870 in both cases asking for DANIEL (Docekal). Distribution sites: Clipper BBS Home system � 哪哪哪哪哪哪哪哪哪哪哪哪馁 NETCONSULT BBS, SYSOP Daniel Docekal, phone 31-10-4157141 Daily 18:00 till 08:00 (GMT+1), sat+sun whole day Modem speed 1200, 2400, 9600, 12000, 14400 (V32b) 2:285/608@fidonet.org United Kingdom � 哪哪哪哪哪哪哪哪馁 Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477 Daily whole day, modem speed HST Italy � 哪哪哪哪� Lady Bright BBS, SYSOP Gianni Bragante, Phone: +39-15-8353153 20:00-08:00 monday to friday, from saturday 13:00 to 08:00 monday 24h/24h holydays, 300-9600 baud v21,v22,v32,v42bis 2:334/307@fidonet.org United States of America � 哪哪哪哪哪哪哪哪哪哪哪哪哪� The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078 Daily whole day, modem speed HST The New Way BBS, SYSOP Tom Held, phone, 1-602-459-2412 Daily 24hours, 1:309/1@Fidonet.org, 8:902/6@RBBS-Net Canada � 哪哪哪哪哪� SYSOP Gordon Kennet, phone 1-604-599-4451 Daily 24houts, 2400bps V42b, 1:153/931@fidonet.org CLIPBBS 2-13 Page 26 28 Jun 1992 WORLDWIDE � 哪哪哪哪哪哪� Clipper File Distrubution Network (ClipperNet, area CL-DOC) Various systems around whole world ------------------------------------------------------------------------------- CLIPBBS 2-13 Page 27 28 Jun 1992 How to write articles in CLIPBBS? Submission of articles to CLIPBBS is really easy: Maximum of 78 characters per line, as long or as short as you like ASCII text. Choose from the list of extension which most describes your text, or just name it .ART as ARTicle and send it to publisher or to any distribution site via modem to BBS or with mailer as file attach. Article will come automatically appear in the next free issue. Extensions are: Articles (anything) .ART Software .SOF News .NEW Question and Answers .Q&A ANOMALIES and their comments .ANO Letters to editors .LET Advertisement .ADV Wanted .WAN Comments .CMS DUMP from conferences .DMP Clipper Net .CLN That's all at the moment, there will probably be changes later, as the magazine evolves. If you have any ideas for a new section of CLIPBBS, please tell us, or just write an article about it. Daniel, publisher -------------------------------------------------------------------------------