|||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GEnieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP A2Pro! ~ """"""""""""""""""""""""""" ~ No OJ Coverage! ~ ~ Things (filed) Under Assembly ~ ~ Typecasters of the Last Crusade ~ Extended Characters ~ ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ GEnieLamp A2Pro ~ A T/TalkNET OnLine Publication ~ Vol.4, Issue 21 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Editor.......................................................Nate Trost Publisher.................................................John Peters Copy-Editor............................................Bruce Maples \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// ~ GEnieLamp IBM ~ GEnieLamp ST ~ GEnieLamp [PR] ~ GEnieLamp Windows ~ ~ GEnieLamp A2Pro ~ GEnieLamp Macintosh ~ GEnieLamp TX2 ~ ~ GEnieLamp A2 ~ LiveWire (ASCII) ~ GEnieLamp MacPRO ~ ~ Solid Windows ~ Config.sys ~ A2-Central ~ ~ Member Of The Digital Publishing Association ~ GE Mail: GENIELAMP Internet: genielamp@genie.geis.com FTP: sosi.com ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ >>> WHAT'S HAPPENING IN THE APPLE A2Pro ROUNDTABLE? <<< """"""""""""""""""""""""""""""""""""""""""""""""""""""" ~ November 1, 1994 ~ FROM MY DESKTOP ......... [FRM] HEY MISTER POSTMAN ...... [HEY] Notes From The Editor. Is That A Letter For Me? A2PRO ROUNDTABLE STAFF .. [DIR] DEVELOPERS CORNER ....... [DEV] Directory of A2Pro Staff. News From Online Developers. LIBRARY BIT BONANZA ..... [LIB] LOG OFF ................. [PUB] HOT Files You Can Download. GEnieLamp Information. [IDX]""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" READING GEnieLamp GEnieLamp has incorporated a unique indexing """"""""""""""""" system to help make reading the magazine easier. To utilize this system, load GEnieLamp into any ASCII word processor or text editor. In the index you will find the following example: HUMOR ONLINE ............ [HUM] [*]GEnie Fun & Games. To read this article, set your find or search command to [HUM]. If you want to scan all of the articles, search for [EOA]. [EOF] will take you to the last page, whereas [IDX] will bring you back to the index. MESSAGE INFO To make it easy for you to respond to messages re-printed """""""""""" here in GEnieLamp, you will find all the information you need immediately following the message. For example: (SMITH, CAT6, TOP1, MSG:58/M530) _____________| _____|__ _|O__ |____ |_____________ |Name of sender CATegory TOPic Msg. Page number| In this example, to respond to Smith's message, log on to page 475 enter the bulletin board and set CAT 6. Enter your REPly in TOPic 1. A message number that is surrounded by brackets indicates that this message is a "target" message and is referring to a "chain" of two or more messages that are following the same topic. For example: {58}. ABOUT GEnie GEnie's monthly fee is $8.95 which gives you up to four hours """"""""""" of non-prime time access to most GEnie services, such as software downloads, bulletin boards, GE Mail, an Internet gateway, multi-player games and chat lines. GEnie's non-prime time connect rate is $3.00 an hour. To sign up for GEnie, just follow these simple steps. 1. Set your communications software to half duplex (local echo) 8 bits, no parity and 1 stop bit, at 300, 1200 or 2400 baud. 2. Call (with modem) 1-800-638-8369. Upon connection type HHH. 3. Wait for the U#= prompt. Type: JOINGENIE and hit RETURN. When you get the prompt asking for the signup/offer code, type: DSD524 and hit RETURN. 4. Have a major credit card ready, as the system will prompt you for your information. If you need more information, call GEnie's Customer Service department at 1-800-638-9636. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From My Desktop """"""""""""""""""""" o TOP OF THE PAGE >>> TOP OF THE PAGE <<< """"""""""""""""""""""" ISSUE? IT'S AROUND HERE SOMEWHERE... My apologies for another late """"""""""""""""""""""""""""""""""""" issue, life has been somewhat hectic here at the GEnieLamp A2Pro office! The last two milestones on my programming project just happened to correspond with the first of the month, making life....a bit crazy. :-) What with that and saving the universe from total destruction, well, I came in a bit late this month, sorry! :-) Well, we've got some interesting stuff in the bulletin board, although A2Pro has been quiet as of late. Despite that, however, I'm rather surprised at the constant variety of topics which make their way into the BB, the mix is rather intriguing. Enjoy the issue! :-) Nate Trost GEnieLamp A2Pro [EOA] [DIR]////////////////////////////// A2PRO ROUNDTABLE STAFF / ///////////////////////////////// By Nate Trost [A2PRO.GELAMP] ______________________________________________ APPLE II PROGRAMMERS & DEVELOPERS ROUNDTABLE _____ ______ ______________________________________________ /_____|/______\ /__/|__| ___|__| Head Sysop: Hangtime (HANGTIME) /__/_|__| /_____/ Your Sysops: Greg Da Costa (A2PRO.GREG) /________|/__/ __ __ __ Todd P. Whitesel (A2PRO.TODDPW) /__/ |__|__/______ /_//_// / Nathaniel Sloan (A2PRO.HELP) /__/ |__|________// / \/_/ Nate Trost (A2PRO.GELAMP) [*][*][*] [EOA] [HEY]////////////////////////////// HEY MISTER POSTMAN / ///////////////////////////////// Is That A Letter For Me? """""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] o BULLETIN BOARD HOT SPOTS o WHAT'S NEW o PROGRAMMER'S TIPS >>> BULLETIN BOARD HOT SPOTS <<< """""""""""""""""""""""""""""""" [*] CAT3, TOP5, MSG{69}..........Using assembly from other languages [*] CAT3, TOP19, MSG{75}...................General Assembly Questions [*] CAT9, TOP7, MSG{149}................Applesoft BASIC help please! [*] CAT13, TOP11, MSG{64}......................Request for Information [*] CAT36, TOP9, MSG{77}................ORCA/M 16-bit Macro Assembler [*] CAT36, TOP20, MSG{39}....................................Utilities >>> WHAT'S NEW <<< """""""""""""""""" NEW 9600 GENIE ACCESS RATES GEnie Announces Reduced Rates for 9600 """"""""""""""""""""""""""" bps Access Fire up that high-speed modem and head for your favorite GEnie Software Library! Effective October 3, 1994, you'll be able to access GEnie Services at 9600 bps for as little as $5.00 per hour. This is a limited beta test, and will be opened to all users on October 10, 1994. As a result of an arrangement with Sprint, GEnie will be offering 9600 bps access from almost 300 SprintNet locations. Best of all, this high-speed access will not be subject to high-priced surcharges. The normal $2.00 per hour SprintNet surcharge will apply...even at 9600 bps! This open beta test is expected to run through the end of the year. To find the number of the SprintNet access number nearest you, simply type PHONES at any GEnie menu prompt (or use the "Move To Keyword" option in GEnie for Windows and type PHONES). Remember, this rate applies only to 9600 bps access via SprintNet. So be sure to choose the access number showing "9600" in the "Baud Rate" column AND "SprintNet" in the "Network" column. From the "Fine Print" department, please note that the $2.00 per hour surcharge for SprintNet access is applicable even during your initial four hours of monthly usage. So, whether you're into downloading software, reading bulletin boards, or accessing databases, it's about to become cheaper to do it faster! Join the beta test today, and get a headstart on the savings! (JUST.DAVE, CAT1, TOP17, MSG:188/M530) >>> PROGRAMMER'S TIPS <<< """"""""""""""""""""""""" HOP, SKIP, JUMP... I'm writing an assy request procedure that uses a """""""""""""""""" jump table to "jsl" to other procedures (mostly written in Pascal). I have some sample source that shows me how to jsr using the jump table: jsr (codeTable+2,x) call the handler but I don't know how to jsl. Do I use the same code, but change the format of the jump table, different code & different jump table, etc. current jump table sample dc i2'finderSaysHello,HandleHello' dc i2'finderSaysGoodbye,HandleGoodbye' etc. new jump table (for jsl) ???? (R.ADAMS48 [Rick], CAT3, TOP5, MSG:69/M530) <<<<< It is somewhat more difficult to do what you want. First, you """"" need to change your table. Format your table to look like: dc i2'finderSaysHello',i4'HandleHello-1' dc i2'finderSaysGoodbye',i4'HandleGoodbye-1' The -1 is necessary because you won't be doing an actual JSL, but will push the pointer onto the stack and do an RTL. Since a JSL only puts 3 bytes on the stack, you need to kind of finesse this. Basically, you need to do the following.. loop LDA CmdTable,X get word to check BEQ NotFound CMP reqCode BNE NextCmd LDA CmdTable+4,X SHORT M SEP #$20 set 8 bit acc. PHA LONG M REP #$20 set 16 bit acc. LDA CmdTable+2,X PHA routine address now on stack RTL NextCmd TXA CLC ADC #6 TAX BRA loop NotFound ... continue code here. If you call this with a JSL, then it would act similar to the (JSR nnn,x) except for it's a JSL.. (A.WELLS5 [Andy], CAT3, TOP5, MSG:70/M530) >>>>> Thanks! That's jsut what I need; and to think, I've seen that """"" before--if only I could remember all these little tricks. Now to thicken the plot... in addition to the need to rtl via a jump table, the procedure that contains a jump table has 10 bytes pushed to it on the stack, and the procedure that jsl'd to this request procedure is expecting a word value returned to it... do I pull the ten bytes off and set the word value _before_ rtl-ing with the jump table? I would prefer another way as I don't know the true return value until the requested procedure is complete. :-( Rick (R.ADAMS48 [Rick], CAT3, TOP5, MSG:72/M530) <<<<< Hmmm... a perfect place to use stack relative indexing if there """"" ever was one! :) [assuming native mode, 16 bit registers] lda 1,s will grab the word from the top of the stack (effectivly this is the same as PLA, PHA but faster, much faster :) lda 3,s will grab the second word, etc. This is also nice for shuffling long return addresses on the stack, such as when a called procedure is expecting input on the stack, and the caller is expecting the procedure to handle removing that input space. (sound like something that's about to bite your tail? :) Example: Main code pushes one word of result space and four words of input data, then JSL's to a function. The function uses the 4 words that were passed, sets the result value, strips the stack of the passed input, relocates the return address and returns to the caller. (Gee, reminicent of what a tool function has to do :) Upon entry to the called function, the stack looks like this: D - RsltH B - Data4H RsltL - C 9 - Data3H Data4L - A 7 - Data2H Data3L - 8 5 - Data1H Data2L - 6 3 - rtlH Data1L - 4 1 - rtlL rtlm - 2 So... to access Data1, the function would LDA $044,s, to access Data4, the function would LDA $0A,s, etc. When ready to exit, the function would most likely look something like this: ldx RtnCode ;any error flag / code function may return lda LocalResult ;grab functions final result sta $0C,s ;stuff into callers result space lda $02,s ;grab mid & hi byte of rtl adr sta $0A,s ;overwrite Data4 lda $01,s ;grab low & mid byte of rtl adr sta $09,s ;overwrite hi byte of Data3 tsc ;get stack pointer clc ;prep for addition adc #$07 ;return the data passing space tcs ;set the fixed stack pointer txa ;rtn code -> acc cmp #$0001 ;condition the carry flag (set on errors) rtl ;back to mama! As soon as this code is executed, one finds themselves back at wherever the fuction was called from, with the result in the top word on the stack, and the carry clear if the result is valid, or set if there was an error (and the error code is in the acc) Have Phun! :) Oh... yeah, almost forgot... There are some caveats with the process of pushing a long return address and executing an RTL to effectivly simulate a JSL,x function. Bank crossings have to be handled properly! You should code your table as follows: (Merlin syntax, ^Label indicates the hi word of the adr) dw ^Function1 dw Function1-1 dw ^Function2 dw Function2-1 etc... Note how this leave the bank part of the address alone, but automatically "fixes" the low word for stacking and then RTL'ing. Do NOT code the table as: adrl Function1-1 This _could_ result in an invalid bank byte when loaded into memory. (consider what would happen if the code for function1 just happened to fall at address $0000 of a given bank... that address-1 would be in the previous bank, which would NOT do what you wanted done. There's a tech note concerning this, but I can't remember which one it is right now... -Harold (H.HISLOP [CryptKeeper], CAT3, TOP5, MSG:74/M530) >>>>> > (consider what would happen if the code for function1 just """"" > happened to fall at address $0000 of a given bank... There's a simple way around this without resorting to: DC I'Function1|-16',I'Function1-1' .. .. .. Simply place a NOP prior to the first function.. Functions START NOP Function1 ENTRY function 1s code.. Andy... Delivered by CoPilot 2.5 and Spectrun 2.0 b23 (A.WELLS5 [Andy], CAT3, TOP5, MSG:75/M530) FUTURE A2U COURSES I was wondering if there have been any plans or """""""""""""""""" discussions about organizing an A2U course covering the new data base and spreadsheet features of AppleWorks 4.x (5.x). I hope I'm not alone in wishing there were such a course. It seems like it would be a natural. Has anyone else expressed an interest in such a thing? Roger (R.MALTZ, CAT22, TOP8, MSG:27/M530) <<<<< There probably won't be an A2U course that covers the new features """"" of Appleworks 4.x to 5.0. If there is another course based upon Appleworks, it will deal with UltraMacros/AW.Inits/Timeout Applications programming. This is a possibility for a future course. As of this time, the next planned course will be one on Scripting with Spectrum 2.0 which will take place soon after version 2.0 is available. (A2PRO.GREG [A2U Guy], CAT22, TOP8, MSG:29/M530) APPLESOFT TO SYS I'm a recent subscriber to your magazine and disk. And """""""""""""""" I have a question. Somewhere I heard a rumor of methods for turning Applesoft programs into system files. ie. if I have an Applesoft program , then there is a way to fix it so that it will behave like a system file: it will not return to the basic prompt ] but instead return to the IIGS system. Since I still use a few Applesoft programs, and the way they finish is annoying, such a utility (and or/or description of how to do this) would be handy. It may, of course, somehow involve tying the Applesoft program in with Basic.system, but that's fine with me. Have you heard of such a thing? If you have, can you tell me where to look for it? Thanks, Thomas Donaldson (T.DONALDSON2 [Thomas], CAT33, TOP4, MSG:57/M530) <<<<< There's a program that will convert _small_ BASIC programs to SYS """"" files, and it's in the A2 libraries. Type m645;3 to get there. (This is the A2Pro RT.) I believe it's called AUTOMAKER.BXY. You'll also find it on the September 1994 issue of A2-Central. (Sorry, Diz!) Doug Cuff, A2-Central (EDITOR.A2 [Doug Cuff], CAT33, TOP4, MSG:60/M530) TWEAKING FINDER MENUS I have been requested by my "significant other" to """"""""""""""""""""" move the shutdown menu option in the Finder over to the File menu, where she thinks any Q selections should be (after all, all her applications have it there :). Before I go too far down the path I would like to ask: a.) Is this easily done? (i.e. has someone done this already) b.) Would I be causing any problems in Finder? c.) Where in Finder do I find the menu items. (I have a block editor and I have Foundation, the commercial version with the docs) d.) Is there an init or FinderExtra that would do this already? (no sense in reinventing the wheel if I don't need to :) Any comments or hints are appreciated. Soon I will be beginning the journey into desktop programming myself and I am hoping to learn from this experience. Thanx. Eric Heim (E.HEIM3 [eric], CAT1, TOP21, MSG:114/M530) <<<<< This is easily done with Foundation.. """"" Launch Foundation, and open the Finder.. Edit the following C Strings. ID 3: Before the . at the end, add: >>\DN65534 >>Shut Down\N605*Qq ID #8 Remove: >>-\DN65534 >>Shut Down\N605*Qq Make sure the . at the end is left alone.. (A.WELLS5 [Andy], CAT1, TOP21, MSG:118/M530) 65816 PERFECTION Wow, I finally had opportunity to use the PER """""""""""""""" instruction. :-) per @return-1 ldx sanumx2 lda sadefproc,x dec pha rts @return Nate (A2PRO.GELAMP [65-Nate-16], CAT3, TOP19, MSG:99/M530) <<<<< I use PER for pushing pointers onto the stack all the time: """"" pea windPtr|-16 per windPtr _CloseWindow The PER, being relative, doesn't require relocating like PEAs do, so it saves a couple bytes and speeds up relocation slightly. :) (POWERPC.PRO [Sheppy], CAT3, TOP19, MSG:100/M530) [*][*][*] While on GEnie, do you spend most of your time downloading files? If so, you may be missing out some excellent information in the Bulletin Board area. The messages listed above only scratch the surface of what's available and waiting for you in the bulletin board area. If you are serious about your Apple II, the GEnieLamp staff strongly urge you to give the bulletin board area a try. There are literally thousands of messages posted from people like you from all over the world. [EOA] [DEV]////////////////////////////// DEVELOPER'S CORNER / ///////////////////////////////// News From The A2Pro Online Developers """"""""""""""""""""""""""""""""""""" By Nate C. Trost [A2PRO.GELAMP] >>> ONLINE SUPPORT IN A2PRO <<< """"""""""""""""""""""""""""""" CAT TOP COMPANY === === ======= 29 INDEPENDENT DEVELOPERS ONLINE 2 DYA/DigiSoft Innovations Online 8 Simplexity Software Online 14 Quality Computers Q-LABS Online 20 DreamWorld Software Online 26 METAL/FV Software Online 32 Kitchen Sink Software Online 38 EdIt-16 (Bill Tudor) 30 PROCYON, INC. 31 SOFTDISK PUBLISHING 33 GS+ MAGAZINE 34 JEM SOFTWARE 35 PRODEV, INC. 36 THE BYTE WORKS Each month this column feature highlights and news from various developers who provide support via A2Pro. >>> NEWS FROM THE BYTE WORKS <<< """""""""""""""""""""""""""""""" PET 'PEA'VES I noticed in some other cat/top, people started talking """""""""""" about Orca/M vs Merlin 16+. I recently moved over to Orca, although I have used both enviornments for many years. In any case, some of the differences (such as requiring the 'a' in 'asl a') are a bit of an inconvienience for me, but no real big deal. There is one difference that keeps coming up whenever I steal a subroutine or some library source code from my vast Merlin source files.... its the "pea" command. Now, I'm not talking about the fact that Merlin treats "pea #5" and "pea 5" as equivelent and in Orca, "pea #5" is not allowed. That's no big deal. In fact, my "reference" is the Eyes and Richty book, which clearly says that the assembler syntax for "pea" is that of absolute addresssing, which of course means "pea 5". The part that bites me all the time is that in Merlin, I would use "pea #^label" all the time (the ^ in Merlin is like the > in Orca/M), which would push the upper 16-bits of the label's address (the high-order word), much like you would use when doing something with immediate addressing. The reason I bring this up is two-fold. First, many of my subroutines return things in registers, thus many times my registers (A,X and Y) are full just before making a tool call, which many times requires me to push address data on the stack. In merlin, I would do this: pea >label pea label phx pha phy _toolCall Note that without the pea long, I could not generate such efficient code (i.e., I would have to save one of my registers then use that). That's why I'd like to see a "pea >label" added to Orca/M. All you have to do is use the High 16-bits of the 32-bit address (did I say 32? :-), well, 24, as the operand. The second reason I bring this up is because Orca/M does allow me to use the syntax "pea >label", only it generates the exact same code as "pea label", which caused me hours of gried one day, which I guess is why I am finnally writing. :-) I think that either the syntax "pea >label" should NOT be allowed -OR- it should push the high 16-bits of the address, and I would rather see the latter so that we could all generate some super-tight and efficient code in some cases. What do ya think? Note: Please don't consider this issue as the same type of issue as "asl a" vs "asl" and "pea 5" vs "pea #5". This one's more than just syntax... you can't push the upper 16 bits of an addresss with Orca without using the A, X, or Y registers. BTW, since I am reletively new to Orca/M, at least new in writing large programs in Orca/M, I may be missing something here... just let'me know! (W.TUDOR, CAT36, TOP9, MSG:77/M530) <<<<< PushLong #myRoutineHere """"" Where myRoutineHere is the 'label' in your code above, will generate: PEA myRoutineHere|-16 PEA myRoutineHere The | is the bit-shift operator; |-16 signifies a 16 bit shift left. In other words, either of the above syntatical conventions will do what you want. (A2PRO.HELP [ Sloanie ], CAT36, TOP9, MSG:78/M530) ROUTINE DAZE I'm having a heck of a time with a particular problem... """""""""""" I'm wanting to use a library of procedures and functions with one of my Pascal programs. The problem is that a particular function call returns its result (a word) on the stack instead of in the accumulator. ORCA/Pascal is subsequently not pulling that word off of the stack. I've tried using the $ToolParms directive both in the interface file as well as the program itself, but no luck... How do I go about letting my calling procedure know that this particular function has its result on the stack? Rick (R.ADAMS48 [Rick], CAT36, TOP10, MSG:251/M530) <<<<< You can't tell Pascal to remove the word from the stack. You'll """"" have to use assembly language glue code, or better yet, redo the library to use a standard calling convention. Mike Westerfield (BYTEWORKS, CAT36, TOP10, MSG:252/M530) TYPECASTING OF THE UNDEAD I don't know if these are new or not, but I'll """"""""""""""""""""""""" keep reporting 'em until I'm told otherwise. (Mike, this is where that "known" bug list would be helpful, saving both of us time.) 1) Token merging in macros doesn't seems to work twice in succession. e.g. this works: #define BEGIN_EXCLUSIVE(sem) swait (__memSem ## sem) but this doesn't: #define BEGIN_EXCLUSIVE(sem) swait (__mem ## sem ## Sem) The latter produces "swait (__memList Sem)", if sem = List. 2) Adding to a pointer that has been type cast reports an "l-value required" error. e.g. ((Byte*) destAddr)++; --((Byte*) destAddr); ((Byte*) srcAddr) += count; All of the above failed for me with the latest version of the compiler (v2.0.4b1), but I know this compiled with an earlier version (pre-2.0). 3) This isn't a bug as such, but the change in C 2.0+ to use only partial pathnames for the name of the source file in the debug code has its disadvantages too. It does make it easier to pass debug code to another person whose directory structure is different, and takes less space, but it also means that you have to have to compile and execute your program from a directory at or "above" all the source code files. For example, I've been working on several libraries, which are located in a different directory from the test program. I want to compile each part separately in its respective directory, but when I do this, I can only view the source for either the test program or the library, but not both. A #pragma debug option to control which whether full pathnames are generated or not would be a fair solution, I believe. (M.HACKETT [Michael], CAT36, TOP11, MSG:342/M530) <<<<< > ((Byte*) destAddr)++; """"" > --((Byte*) destAddr); > ((Byte*) srcAddr) += count; As of C 2.0, rValues cannot be typecast. ANSI C says that rValues can't be typecast. All of these functions can be rewritten so that only lValues are typecast. Might take more text on the line, but when compiled, shouldn't take any more code.. Andy... Delivered by CoPilot 2.5 and Spectrun 2.0 b23 (A.WELLS5 [Andy], CAT36, TOP11, MSG:343/M530) >>>>> Pardon me, but I believe you folks have your Lvalues and Rvalues """"" on backwards... Lvalue op= Rvalue Lvalues go on the left. Their primary distinction is that they can be stored into. Rvalues on the right are only read from in that context, so they can be constants and cast results (after you cast it, it may not be feasible to store into the thing any more). For instance, if you have a static char and you try to do static char c; (long)c = 12345678; This is clearly bogus. ANSI declares that it is always illegal to store into the result of a cast (actually they say that a cast expression is never an Lvalue, but that works out to mostly the same thing). Altering the type of a pointer ON MOST IMPLEMENTATIONS leaves something that it is still feasible to store into, however it is technically not legal according to ANSI. Many compilers (especially the BSD 'cc' compiler) allow operations on type-changed pointers as if they were still Lvalues, and it is a popular extension to ANSI mode compilers because so much dusty deck code uses it. (At work we had to enable it for some big customer before they would agree to order a lot of compilers.) Todd Whitesel (A2PRO.TODDPW [growf?], CAT36, TOP11, MSG:345/M530) <<<<< OK, gotcha. Despite the confusion about lvalues and rvalues, it """"" seems what I have to do is rewrite these lines to read something like: destAddr = (void*) (((Byte*) destAddr) + 1); Right? (I know the (void*) is not necessary, but I like to be explicit.) Wait a minute... In order to track this down, I split a line into the two following lines, and only the latter gave me an error: *((Byte *) destAddr) = *currValuePtr; ((Byte *) destAddr)++; Hmm, I guess I'd better go check on that again, but how does the first line differ from the second, in terms of this restriction on lvalues? (M.HACKETT [Michael], CAT36, TOP11, MSG:348/M530) >>>>> The (void *) in the first line is in fact necessary, although the """"" compiler will usually let you off with a warning. Assigning two pointers of incompatible type is an error in ANSI. The main practical reason for this is that if you assign a char* to an int* on many machines you might not get a legal int* and if you try to dereference it your program gets killed by the O/S. So ANSI makes it illegal as a portability measure. (This incidentally is one of the many reasons why ANSI blesses judicious use of void* casts.) *((Byte *) destAddr) = *currValuePtr; is perfectly legal because you are dereferencing the cast of destAddr. The cast itself is not an Lvalue, but it can be fed to the '*' operator and the result of that _is_ an Lvalue. ((Byte *) destAddr)++; is illegal because you are incrementing the casted pointer (which is not an Lvalue). Todd Whitesel (A2PRO.TODDPW [growf?], CAT36, TOP11, MSG:349/M530) ORCA EDITOR VS. EASY ACCESS Apologies if this isn't the proper place for """"""""""""""""""""""""""" these questions: 1) I'm patiently waiting for my ORCA/M upgrade from 2.0 to 2.0.?, but in the meanwhile I thought I'd do some familiarization with the copy of 2.0 I bought from a former user. When I launch the editor, it works fine unless I click the mouse ANYWHERE. Editor then crashes into GSBug... Is this something fixed in later revs, or a product of my setup? ROM 01 IIgs, 4MB GSRAM, System 6.0.1, no additional extensions, RAMFast 3.01 rev. D and 40MB Quantum HD, ZipGS 8/16. 2) I know there's a microEMACS available which runs under the ORCA shell; is there a vi clone as well? --Greg (G.DUNN [Greg], CAT36, TOP18, MSG:36/M530) <<<<< I assume you're talking about the text editor. If so, this is a """"" known, intermitant bug. There is probably something in your system folder that effects the editor, but I don't know what it is. The bug itself _appears_ to be in the editor, though. Re: Vi clone. There probably is one, but I'm not aware of it. I seem to remember one long, long ago, but I don't remember any details. Does anyone else recall a vi clone for the GS? Mike Westerfield (BYTEWORKS, CAT36, TOP18, MSG:37/M530) >>>>> The GNO folks have a port of Stevie somewhere. One of these days """"" I'm going to try it out. Todd Whitesel (A2PRO.TODDPW [growf?], CAT36, TOP18, MSG:38/M530) <<<<< Stevie looks and functions exactly like vi, which is precisely why """"" I don't use it. :) Sheppy [Team PPCPro] (POWERPC.PRO [Sheppy], CAT36, TOP18, MSG:39/M530) >>>>> Thanks, Mike. Yes, sorry -- I am referring to the std. ORCA """"" screen editor shipped with ORCA/M 2.00. After thinking about it a bit, I started pulling the few expendable standard Apple inits out, and to my surprise I found out: 1) Easy Access was installed [I don't need it] and 2) when I removed it, the problem went away. I put all of them back except for EA, and it works fine; so my NDAs, GSBug, and the ZIP init are blameless. I have no clue why EA should do this on my system, but it's an easy solution! For reference: it didn't matter whether the editor had a file loaded or a blank new window; first mouse click anywhere killed it. I did not run any other ORCA utils before invoking the editor. GSBug wouldn't let me back into the editor; bad checksum error. Had to re-boot the IIgs when it crashed. If you need specifics about the crash address, trace, etc., let me know (via Email if you want to avoid boring the lurkers :) and I'll be glad to beat on it; I've had a lot of Mac and ][+ debugging experience. Todd, Sheppy> Saw it somewhere, but assumed it needed GNO to run. True? --Greg (G.DUNN [Greg], CAT36, TOP18, MSG:40/M530) EXTENDED CHARACTERS AND THE ORCA EDITOR One of the things I never """"""""""""""""""""""""""""""""""""""" supported in any of my programming editors (or compilers, for that matter) was the extended Apple character set. That's about to change, but I'd like to get some feedback. Why bother? Well, two reasons. First, it's something that's needed to write programs that contain strings in many of the European languages. Second, I had to do it to support a customer. So here's the programs/issues I'm aware of. If I miss any, let me know. If I'm on-target, let me know. If you really don't care, let me know. :) PRIZM: It's easy enough to add support for the extended character set here. There is one minor problem: the compilers use $80, $81 and $82 in column 1 as debug characters to mark breakpoints, etc. I'll need a conversion program to handle this, swithing these characters to other, unneeded characters. I'll use standard keyboard mapping. Text Editor: This one may not fly. The fact that the option key is already used for macros, and is also needed for typing international characters. There's also the problem that the characters can't be displayed. Does anyone know of a way to handle this? What should the editor do if it doesn't handle the extended character set, and you try to edit a file that does? Compilers: All of the compilers will have to be updated, of course. The idea is to allow any character in a string or comment. In addition, I expect to allow extended characters with an obvious alphabetic equivalent, like the u with two dots over it, in identifiers. TO those of you who speak languages that use these characters: Should characters like u with two dots be treated as distinct characters? (That's sure the easiest thing for me!) For example, is run a different identifier from rn? Mike Westerfield (BYTEWORKS, CAT36, TOP19, MSG:70/M530) <<<<< I've been craving extended characters in strings for years--now """"" I'll be able to finally display typographical quotes and all the other doohickeys. (BTW, does the Windows standard font map match Apple's font map for the extended characters? In other words, will an Apple typographical-quote be the same as a Windows typographical-quote? I'm guessing does because they have the TrueType standard in place.) For your editors: you may not explicitly need a conversion utility to remap the debug characters. You could have the editor check the date on the file before it's read in. If it's older than the date of the extended character-aware editor, then invoke your code to remap the characters. Are your editors the only ones that create debug characters? For the text editor, foreign character sets could be displayed if the control panel setting is set to the appropriate country. u is different from u because the programmer would've typed the latter if he meant it. Michael (M.LUTYNSKI [Michael A3D], CAT36, TOP19, MSG:72/M530) >>>>> An editor should call StringToText if it doesn't support """"" extended character sets. This should convert all text to something that's readable.. Andy... (A.WELLS5 [Andy], CAT36, TOP19, MSG:73/M530) <<<<< The extended character sets used by Apple and Windows are quite """"" different. If I remember right, the main difference is that Windows focuses on having all the various accent+letter combinations, whereas Apple gave a fair bit of room to nifty symbols (copyright, TM, greek letters, etc.). Todd Whitesel (A2PRO.TODDPW [growf?], CAT36, TOP19, MSG:74/M530) >>>>> Andy: StringToText is fine for _displaying_ characters, but as """"" far as I know, there's no way to _edit_ them--making it useless for the purpose I need. The only acceptable solution I know of is to actually have the characters available in the displayed character set. Thanks for the thoughts on the editors, folks. I'll keep these in mind. Mike Westerfield (BYTEWORKS, CAT36, TOP19, MSG:75/M530) <<<<< Display option characters as inversed characters? """"" (POWERPC.PRO [Sheppy], CAT36, TOP19, MSG:76/M530) >>>>> You could use a SHR character generator. I've got one that's so """"" amazingly fast it's sick :-) The Second Sight will be able to easily handle this sort of thing, too (it supports user-definable text fonts). Whether the editor is amenable to modification for this is another story. :) > Does anyone know of a way to handle this? What should the editor > do if it doesn't handle the extended character set, and you try to > edit a file that does? This is in general a tough issue. Just make sure you use the same character set as, say, Teach, and we can just pull up the files with Teach when we run across them, regardless of the state of the text editor. Jawaid (PROCYON.INC, CAT36, TOP19, MSG:77/M530) <<<<< Actually, I'd thought of using a SHR character set and faking the """"" text screen. It's the only solution I came up with that really fit all of the needs, but I am afraid there may be a big time hit. Maybe I'll give it a try, though. Mike Westerfield (BYTEWORKS, CAT36, TOP19, MSG:78/M530) >>>>> Let me show you some examples here. The first is a routine from """"" TelCom II that draws a character on the SHR screen (an 'A' in this case): Char41 anop ; C81C lda #$0000 sta SCREEN+1120,x lda #$3C3C sta SCREEN+480,x sta SCREEN+960,x sta SCREEN+800,x sta SCREEN+320,x sta SCREEN+160,x lda #$F00F sta SCREEN+0,x lda #$FC3F sta SCREEN+640,x plb rts Now compare to code which puts a character on the text screen: StorChar START phy short a pha jsr CalcBankCH pla sta [BASL],y long a ply rts END CalcBankCH PRIVATE lda #0 ;TM 5/18/91 xba ;---------- lda CH cmp RightMar bcc Calc2 beq Calc2 lda RightMar Calc2 lsr a tay ; column number lda #0 ; c = 1 if main mem, 0 if auxmem rol a eor #%00000001 ; not quite as fast as before, but hey... sta BASL+2 rts In the big picture, the amount of time it takes to draw an SHR character is about the same it takes to draw a character to the text screen, assuming random X & Y coordinates! Scrolling is more time-consuming, of course - but with the SHR character generator shown above you can redraw the entire screen very quickly. I'll even sell it to you real cheap, if you're interested. :-) Jawaid (PROCYON.INC, CAT36, TOP19, MSG:80/M530) [EOA] [LIB]////////////////////////////// LIBRARY BIT BONANZA / ///////////////////////////////// HOT Files You Can Download """""""""""""""""""""""""" By Tim Buchheim [T.BUCHHEIM] >>> Complete A2 University Courses <<< """""""""""""""""""""""""""""""""""""""" File # 4369 A2U.ASM.GS.BXY (GS) Uploaded on 10/21/94 by A2PRO.GREG About 219K (d/l time approx. 16 minutes @ 2400 baud) This archive includes the entire A2U course on beginning IIgs Assembly Language programming along with the course messages. File # 4363 A2U.DATAC.BXY (ALL) Uploaded on 10/18/94 by A2PRO.GREG About 736K (d/l time approx. 55 minutes @ 2400 baud) This archive includes all the lessons, text and discussions from the A2U course on 'Hacking and Data Compression'. This is a very large file and will need over a megabyte and a half of free space to unpack. File # 4361 A2U.PASCAL.BXY (GS) Uploaded on 10/18/94 by A2PRO.GREG About 274K (d/l time approx. 20 minutes @ 2400 baud) This archive includes all the lessons and text from the A2U course on Pascal programming for the Apple IIgs. File # 4360 A2U.BWRDN.BXY (ALL) Uploaded on 10/18/94 by A2PRO.GREG About 30K (d/l time approx. 3 minutes @ 2400 baud) This archive includes all the lessons and text from the A2U course on the use of Block Warden from Prosel and ProSel-16. File # 4358 A2U.ASM.8.BXY (ALL) Uploaded on 10/17/94 by GREG.D About 193K (d/l time approx. 15 minutes @ 2400 baud) This archive includes all of the lessons along with the archived bulletin board messages for the A2U course on 8-bit assembly language programming. File # 4357 A2U.CC.BXY (ALL) Uploaded on 10/17/94 by GREG.D About 209K (d/l time approx. 14 minutes @ 2400 baud) This file includes all of the lessons along with the archived messages for the A2U course in 'C' programming. >>> Clay's Music Tool <<< """"""""""""""""""""""""""" File # 4354 CLAYS.MTOOL.BXY V1.42 (GS) Uploaded on 10/16/94 by C.JUNIEL About 40K (d/l time approx. 4 minutes @ 2400 baud) Clays MTool version 1.42 plays SynthLAB and Music Composer music files. It also plays HyperStudio and rSound files. It no longer plays Music Studio and Sound Smith files. There is sample source code included. File # 4355 MUSIC.NBA.BXY V2.71 (GS) Uploaded on 10/16/94 by C.JUNIEL About 17K (d/l time approx. 2 minutes @ 2400 baud) Version 2.71 of the New Button Action which allows one to use Clays MTool within HyperStudio to play music files. >>> Miscellaneous <<< """"""""""""""""""""""" File # 4370 USEFULTBLS.BXY (ALL) Uploaded on 10/21/94 by J.DAVIS179 About 66K (d/l time approx. 6 minutes @ 2400 baud) Some useful tables in AppleWorks 3.0 & TextFile Formats. Packed with ShrinkIt 3.4 Documentation is included in the file. Charts/Tables by J.Davis179@genie.geis.com File # 4351 AUTOMAKER.BXY (ALL) Uploaded on 10/14/94 by P.GREEN About 21K (d/l time approx. 2 minutes @ 2400 baud) Make a Basic file into a SYStem file. A single SYS file is a neat and clean way of presenting an application, and here is the means of doing it with almost any BASIC Program. The program was written by Dave Ward of the British ][GS Club and was originally intended for use with MicroDot Basic programs, but will work with many standard Basic programs. Released with the knowledge & permission of Kitchen Sink Software Inc. Packed with ShrinkIt v3.4. [*][*][*] [EOA] [LOG]////////////////////////////// LOG OFF / ///////////////////////////////// GEnieLamp Information """"""""""""""""""""" o COMMENTS: Contacting GEnieLamp o GEnieLamp STAFF: Who Are We? GEnieLamp Information GEnieLamp is published on the 1st of every month """"""""""""""""""""" on GEnie page 515. You can also find GEnieLamp on the main menus in the following computing RoundTables. RoundTable Keyword GEnie Page RoundTable Keyword GEnie Page """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" DigiPub DIGIPUB 1395 Atari ST ST 475 Macintosh MAC 605 IBM PC IBMPC 615 Apple II A2 645 Apple II Dev. A2PRO 530 Macintosh Dev. MACPRO 480 Geoworks GEOWORKS 1050 BBS BBS 610 CE Software CESOFTWARE 1005 Mini/Mainframe MAINFRAME 1145 Programming PROGRAMMING 1445 Data Comm. DATACOMM 1450 Windows WINDOWS 1335 GEnieLamp is also distributed on CrossNet and many public and commercial BBS systems worldwide. o To reach GEnieLamp on Internet send mail to genielamp@genie.geis.com o Current issues of all versions of GEnieLamp are File Requestable (FREQable) via FidoNet (Zones 1 through 6) from 1:128/51 and via OURNet (Zone 65) from 65:8130/3. SysOps should use the following "magic names" to request the current issue of the indicated GEnieLamp platform (FREQ FILES for names of back issues of GEnieLamp IBM): Platform Magic Name To Use """""""" """"""""""""""""" GEnieLamp IBM .................. GLIBM GEnieLamp ST ................... GLST GEnieLamp A2Pro ................ GLA2PRO GEnieLamp Macintosh ............ GLMAC GEnieLamp TX2 .................. GLTX2 GEnieLamp A2 ................... GLA2 GEnieLamp Windows .............. GLWIN o Back issues of GEnieLamp are available in the DigiPub RoundTable Library #2 on page 1395 (M1395;3). o GEnieLamp pays for articles submitted and published with online GEnie credit time. Upload submissions in ASCII format to library #42 in the DigiPub RoundTable on page 1395 (M1395;3) or Email it to GENIELAMP. On Internet send it to: genielamp@genie.geis.com o We welcome and respond to all E-Mail. To leave comments, suggestions or just to say hi, you can contact us in the DigiPub RoundTable (M1395) or send GE Mail to John Peters at [GENIELAMP] on page 200. o If you would like to meet the GEnieLamp staff "live" we meet every Wednesday night in the Digi*Pub Real-Time Conference at 9:00 EDT (M1395;2). o The Digital Publishing RoundTable is for people who are interested in pursuing publication of their work electronically on GEnie or via disk-based media. For those looking for online publications, the DigiPub Software Libraries offer online magazines, newsletters, short-stories, poetry and other various text oriented articles for downloading to your computer. Also available are writers' tools and 'Hyper-utilties' for text presentation on most computer systems. In the DigiPub Bulletin Board you can converse with people in the digital publishing industry, meet editors from some of the top electronic publications and get hints and tips on how to go about publishing your own digital book. The DigiPub RoundTable is the official online service for the Digital Publishing Association. To get there type DIGIPUB or M1395 at any GEnie prompt. >>> GEnieLamp STAFF <<< """"""""""""""""""""""" GEnieLamp o John Peters [GENIELAMP] Publisher/Editor """"""""" IBM o Bob Connors [DR.BOB] IBM EDITOR """ o Nancy Thomas [N.NOWINSON] MultiMedia Editor/Writer o Brad Biondo [B.BIONDO] IBM Staff Writer o Tika Carr [T.CARR4] IBM Staff Writer o Dave Nienow [D.NIENOW] IBM Staff Writer o Don Lokke [D.LOKKE] Cartoonist o Sandy Wolf [S.WOLF4] Contributing Columnist WINDOWS o Tippy Martinez [WIN.LAMP] WINDOWS EDITOR """"""" o John Osarczuk [J.OSARCZUK] Asst Editor/Columnist o Rick Ruhl [RICKER] Windows Sysop/Columnist o Brad Biondo [B.BIONDO] Windows Staff Writer o Rick Pitonyak [R.PITONYAK] Windows Staff Writer o Ed Williams [E.WILLIAMS24] Windows Staff Writer o Dave Nienow [D.NIENOW] Windows Staff Writer MACINTOSH o Richard Vega [GELAMP.MAC] MACINTOSH EDITOR """"""""" o Tom Trinko [T.TRINKO] Mac Staff Writer o Bret Fledderjohn [FLEDDERJOHN] Mac Staff Writer o Ricky J. Vega [GELAMP.MAC] Mac Staff Writer ATARI ST o John Gniewkowski [GENIELAMP.ST] ATARI ST EDITOR """""""" o Mel Motogawa [M.MOTOGAWA] ST Staff Writer o Sheldon Winick [S.WINICK] ST Staff Writer o Terry Quinn [TQUINN] ST Staff Writer o Richard Brown [R.BROWN30] ST Staff Writer o Al Fasoldt [A.FASOLDT] ST Staff Writer o Fred Koch [F.KOCH] ST Staff Writer ATARI ST/TX2 o Cliff Allen [C.ALLEN17] EDITOR/TX2 """""""""""" ATARI [PR] o Bruce Faulkner [R.FAULKNER4] EDITOR/GEnieLamp [PR] """""""""" APPLE II o Doug Cuff [EDITOR.A2] EDITOR """""""" o Phil Shapiro [P.SHAPIRO1] A2 Staff Writer o Darrel Raines [D.RAINES] A2 Staff Writer o Gina E. Saikin [A2.GENA] A2 Staff Writer o Charlie Hartley [C.HARTLEY3] A2 Staff Writer A2Pro o Nate C. Trost [A2PRO.GELAMP] EDITOR """"" o Tim Buchheim [T.BUCHHEIM] Co-Editor ETC. o Jim Lubin [J.LUBIN] Add Aladdin Scripts """" o Scott Garrigus [S.GARRIGUS] Search-ME! o Mike White [MWHITE] (oo) / DigiPub SysOp o Susie Oviatt [SUSIE] ASCII Artist o Al Fasoldt [A.FASOLDT] Contributing Columnist o Phil Shapiro [P.SHAPIRO1] Contributing Columnist o Sandy Wolf [S.WOLF4] Contributing Columnist \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// Bulletin board messages are reprinted verbatim, and are included in this publication with permission from GEnie and the source RoundTable. GEnie, GEnieLamp Online Magazines, and T/TalkNet Online Publishing do not guarantee the accuracy or suitability of any information included herein. Opinions expressed are those of the individual, and do not represent opinions of GEnie, GEnielamp Online Magazines, or T/TalkNet Online Publishing. Material published in this edition may be reprinted under the follow- ing terms only. Reprint permission granted, unless otherwise noted, to registered computer user groups and not for profit publications. All articles must remain unedited and include the issue number and author at the top of each article reprinted. Opinions present herein are those of the individual authors and do not necessarily reflect those of the publisher or staff of GEnieLamp. We reserve the right to edit all letters and copy. Please include the following at the end or the beginning of all reprints: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// (c) Copyright 1994 T/TalkNET Online Publishing and GEnie. To join GEnie, set your modem to 2400 baud (or less) and half duplex (local echo). Have the modem dial 1-800-638-8369. When you get a CONNECT message, type HHH. At the U#= prompt, type: JOINGENIE and hit the [return] key. When you get the prompt asking for the signup code, type DSD524 and hit RETURN. The system will then prompt you for your sign-up information. Call (voice) 1-800-638-9636 for more information. ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ [EOF]