|||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GEnieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP A2Pro! ~ """"""""""""""""""""""""""" ~ HyperLogo Ships ~ New A2U Course ~ ~ Tour of 8/16 Central ~ ProDev Inc. Joins A2Pro ~ ~ ORCA/Modula-2 Ships ~ 3D Logo Seminar Transcript ~ ~ Making Custom Icons ~ Animating Cursors ~ Stack Usage ~ ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ GEnieLamp A2Pro ~ A T/TalkNET OnLine Publication ~ Vol.1, Issue 10 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Editor.......................................................Nate Trost Publisher.................................................John Peters Copy-Editor............................................Bruce Maples \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// ~ GEnieLamp IBM ~ GEnieLamp ST ~ GEnieLamp [PR] ~ GEnieLamp TX2 ~ ~ GEnieLamp A2 ~ GEnieLamp A2Pro ~ GEnieLamp Macintosh ~ LiveWire Online ~ ~ 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? <<< """"""""""""""""""""""""""""""""""""""""""""""""""""""" ~ December 1, 1993 ~ FROM MY DESKTOP ......... [FRM] HEY MISTER POSTMAN ...... [HEY] Notes From The Editor. Is That A Letter For Me? A2PRO ROUNDTABLE STAFF .. [DIR] TOUR OF 8/16 CENTRAL .... [TOU] Directory of A2Pro Staff. Great Programmers Magazine. LIBRARY BIT BONANZA ..... [LIB] UTILITIES FROM DOWN UNDER [UDU] HOT Files You Can Download. Three Great Utilities. DEVELOPERS CORNER ....... [DEV] 3D LOGO SEMINAR RTC [3DL] News From Online Developers. Lists, Movies and Logo Magic. CAMPUS GREEN ............ [CAM] LOG OFF ................. [LOG] New A2U Course Starts. 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 for 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, are allowed without charge. GEnie's non-prime time connect rate is $3.00. To sign up for GEnie service, call (with modem) 1-800-638-8369. Upon connection type HHH. Wait for the U= prompt. Type: XTX99014,DIGIPUB and hit RETURN. The system will then prompt you for your information. Need more information? Call GEnie's customer service line (voice) at 1-800-638-9636. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" //////////////////////////////////////// GEnie_QWIK_QUOTE //// / "If it's a LARGER computer you want, / / why not just buy a BIGGER case?" / //////////////////////////////////////////////// J.KLAGES //// [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From My Desktop """"""""""""""""""""" o TOP OF THE PAGE o NOTES FROM THE PUBLISHER >>> TOP OF THE PAGE <<< """"""""""""""""""""""" ~ Welcome to the December GEnieLamp A2Pro! ~ There's a lot of neat and exciting stuff going on in A2Pro, and you can learn all about it in this issue! The amount of things going on made putting this issue together a challenge, but it was well worth it. Below I'll briefly cover some of the highlights that are described in detail later on in the issue. A2 University has returned with a great new course on using the IIgs List Manager tool. This course, taught by Softdisk Publishing programmer Bryan Pietrzak, shouldn't be missed by anyone with an interest in IIgs desktop programming. Read the Campus Green column for more information. The 3D Logo seminars have been completed and we have another transcript from those seminars in this issue. 3D Logo is proving to be a powerful new language that makes learning programming concepts even easier and more fun than ever before. The Byte Works is actively supporting 3D Logo and its companion product, HyperLogo, in A2Pro. The Byte Works has also started shipping the new ORCA/Modula 2 compiler, a new language that adds to the suite of ORCA programming products. Procyon's new 2.0 version of the GNO/ME UNIX style multitasking environment is also generating a lot of excitement in A2Pro. Procyon has been busy giving support in A2Pro both in the bulletin board and the library. New versions of several GNO utilities are now available in the A2Pro library, and direct GNO kernel updates are available for registered users right in A2Pro! Be sure and check out Industry Connection in thisissue for more information from The Byte Works, Procyon, and the other companies that support Apple II programmers here in A2Pro. All this and much, much more this month! Enjoy the issue! Nate Trost GEnieLamp A2Pro [EOA] [DIR]////////////////////////////// A2PRO ROUNDTABLE STAFF / ///////////////////////////////// By Nate Trost [A2PRO.GELAMP] ______________________________________________ APPLE II PROGRAMMERS & DEVELOPERS ROUNDTABLE _____ ______ ______________________________________________ /_____|/______\ /__/|__| ___|__| Head Sysop: Matt Deatherage (M.DEATHERAGE) /__/_|__| /_____/ Assistants: Greg Da Costa (A2PRO.GREG) /________|/__/ __ __ __ Todd P. Whitesel (A2PRO.TODDPW) /__/ |__|__/______ /_//_// / Jim Maricondo (A2PRO.DYAJIM) /__/ |__|________// / \/_/ Nate Trost (A2PRO.GELAMP) [EOA] [HEY]////////////////////////////// HEY MISTER POSTMAN / ///////////////////////////////// Is That A Letter For Me? """""""""""""""""""""""" By Nate C. Trost [A2PRO.GELAMP] o BULLETIN BOARD HOT SPOTS o A2PRO ODDS & ENDS o WHAT'S NEW? o PROGRAMMER'S TIPS o HOT TOPICS o MESSAGE SPOTLIGHT >>>BULLETIN BOARD HOT SPOTS <<< """"""""""""""""""""""""""""""" [*] CAT9, TOP7, MSG{1}.................Applesoft BASIC help please! [*] CAT11, TOP8, MSG{9}........Programming Algorithms and Structures [*] CAT15, TOP4, MSG{66}................................QuickDraw II [*] CAT15, TOP8, MSG{84}..............................Sound Tool Set [*] CAT16, TOP8, MSG{1}.......................Writing ResLin Editors [*] CAT16, TOP13, MSG{25}..............Program Development Discussion [*] CAT19, TOP7, MSG{1}..........................Calling Conventions [*] CAT30, TOP2, MSG{1}....................................GNO Shell [*] CAT31, TOP9, MSG{89}...............GSLib - A Library of Routines >>>BULLETIN BOARD NEW TOPICS <<< """""""""""""""""""""""""""""""" [*] CAT16, TOP8.................................Writing ResLin Editors [*] CAT19, TOP7....................................Calling Conventions [*] CAT35, TOP1....................................About ProDev Online [*] CAT35, TOP2.....................Using the DDT Debugging Card Q & A [*] CAT35, TOP3........................DDT 8 & DDT 16 Bundled Software [*] CAT35, TOP4...........................................DDT Hardware [*] CAT35, TOP5.............................Modifying the DDT Software [*] CAT35, TOP6..........................Debugging Tips and Techniques [*] CAT35, TOP7............................Other Ideas and Discussions >>> A2PRO ODDS & ENDS <<< """"""""""""""""""""""""" TIM BUCHHEIM JOINS STAFF The December GEnieLamp A2Pro will be available """""""""""""""""""""""" in just a few days, so be sure to grab the November issue off the A2Pro Main Menu if you haven't done so already! It's full of all kinds of great information...that doesn't taste like chicken! In other GEnieLamp A2Pro news, I've hired a new staff writer to help me with the regular chores involved with putting each issue together. Starting with the January GEnieLamp A2Pro Tim Buchheim will be handling the RTC and Library sections of the Lamp. I'm glad to have the help and am looking forward to working with Tim, welcome aboard! Nate GEnieLamp A2Pro Lamplighter (A2PRO.GELAMP [65-Nate-16, CAT1, TOP15, MSG:78/M530) PROGRAMMER WANTED Hi All!!!! Can you believe it's been over 6 MONTHS """"""""""""""""" since I've been through this way?? I'm posting here because my company is looking for a _good_ 6502 programmer (thats plain old 6502...not 816! hehe) and I knew immediately where to come looking. Other assembly languages are a plus, and there will probably be much more than just 6502 to do. IBM PC based C, embedded systems, travel, lots of excitement (just like the army)...and lots of hard work. (I will let you use a GS for the 6502 though!). The position is full time, and would require relocation to Reno, NV..but we have several offices all over the country...maybe we could work something out. Give me a call during the daytime if you are interested and we'll talk dawgs, dawghters, cawfee, you know, just tawk. Shawn Quick Imagineering Systems, Inc. (702) 856-3900 (S.QUICK1, CAT13, TOP8, MSG:58/M530) >>> WHAT'S NEW? <<< """"""""""""""""""" EXPRESS TECHNICAL UTILITIES I should have done it earlier, but I've """"""""""""""""""""""""""" just uploaded some technical stuff for the Express print spooler from Seven Hills Software Corp. Included is a utility for viewing spool files, with the option of displaying all the ImageWriter II code descriptions (comes as as application, and a utility that adds a 'View' button to the normal Express edit dialog), and some IPC and data area technical notes. The spool viewer should come in handy for budding printer driver authors, as it formats it into seperate _PrDevWrite records, and in the case of it being an ImageWriter, also displays the what the codes are doing. Regards, Richard (btw: Forgot to mention that you need at least some Express spool files for any of this to be useful, and it would be preferrable to actually have Express) (RICHARD.B [Richard], CAT10, TOP26, MSG:38/M530) DEVELOP JOURNAL NOW IN A2PRO LIBRARY! > SyndiComm, who manages the """"""""""""""""""""""""""""""""""""" > Macintosh, Apple II, and > PowerPC RoundTables on GEnie, has signed a licensing agreement with > Apple Computer to provide these publications. You must read and agree > to a licensing agreement before you can download these files. Yes, folks, that means we'll get the Apple II content of _develop_ in the A2Pro libraries as soon as I can find some free moments to get it packed and write descriptions for it. There are five articles and several Q&A columns, though I'm not sure I can find all of them in text file format. Four of the articles have source code, and two of those are in MPW IIgs format. More news as they become available. :) --Matt (M.DEATHERAGE [A2Pro Leader], CAT1, TOP17, MSG:124/M530) >>> PROGRAMMER'S TIPS <<< """"""""""""""""""""""""" NEWHANDLE TIP Just thought I'd share a tip with people. The following """"""""""""" will fail: theHandle := NewHandle(0,gMemoryID,attrLocked,NIL); whereas this is just fine: theHandle := NewHandle(0,gMemoryID,0,NIL); Why? Because you can't have an empty, locked handle. That's why :) If you are creating an empty handle that will later be filled and need it to be locked, you'll just have to lock it later. (SOFTDISK.INC [Bryan Zak], CAT15, TOP2, MSG:96/M530) DEVICE UNIT NUMBERS I didn't see a topic for SmartPort, so I will ask """"""""""""""""""" this question here. Is there a TechNote or file around here that would show how to create a relationship between the Smartport Unit Number and the ProDOS unit number? What I am trying to do is ID the device type at a given slot,drive. Is the Smartport the way to go? If not, is there a preferred method for doing this type of thing? (KITCHEN.SINK [Eric], CAT7, TOP6, MSG:53/M530) <<<<< You can turn the ProDOS unit_number into a SmartPort identification """"" by following the steps in ProDOS 8 Technical Note #21, "Identifying ProDOS Devices." This Note tells you _everything_ that's reliable about identifying ProDOS devices, and has held off lots of questions since we first wrote it five years ago. --Matt (wow, has it been that long?) (M.DEATHERAGE [A2Pro Leader], CAT7, TOP6, MSG:54/M530) FINDING MEMORY USAGE Here's a question for anyone who might know: """""""""""""""""""" Suppose I know a user ID and I want to find out how much memory that particular ID is currently using in the system. Please note that the user ID is not "mine", but the ID of a system extension such as an NDA, CDA, INIT, Finder Extention, etc. What tool calls can be made to determine this information. It looks to me like I would need to know where there is a "list" of all handles in the system, then I can check their user-ID's and size, adding up the sizes when the user ID matched (masking off the aux ID's, if any). Anyway, this sounds like alot of work. Is this what needs to be done? If so, _where_ is the list of handles kept? How would I know if it is a _valid_ handle? Thanks in advance, Bill {W.TUDOR} (W.TUDOR, CAT15, TOP2, MSG90/M530) <<<<< If you downloaded GSLib there is a routine in there to do this """"" (MMIDInfo). You pass it a user ID and a mask (in case you want only memory associated with a certain auxiliary ID or something like that). It then returns a long indicating the total number of bytes associated with that ID. In any case, I did this by walking the handle chain and examining each handle. To do this, get a handle (I call FindHandle on the location of the subroutine) and walk the handle back to the head of the handle list. (The handle list is a double-linked list with NIL pointers at the head and tail for previous and next respectively). Once at the head, you can then just walk the entire handle chain. Pretty straight-forward actually. btw: you might want to know the structure of the data a handle points to: olocation EQU 0 ; offsets for handles oattributes EQU 4 ouserID EQU 6 olength EQU 8 olast EQU 12 onext EQU 16 (SOFTDISK.INC [Bryan Zak], CAT15, TOP2, MSG91/M530) 80 TO 40 COLUMNS What is the applesoft syntax to change from the 80 """""""""""""""" column screen to the 40 column screen. ( i.e. the equivalent of esc 4 ) (J.BAUER4 [oldman], CAT9, TOP7, MSG:98/M530) >>>>> In Applesoft, to change from 40 columns to 80 columns use: """"" PRINT CHR$(4);"PR#3" To change back to the 40 column mode, use: PRINT CHR$(21) : PRINT CHR$(12) Printing CHR$(21) switches to 80 column mode and the CHR$(12) clears the screen. It's best to use them together but not necessary. (R.NIELSON1 [Russ!], CAT9, TOP7, MSG:99/M530) DEAPS HEAPS TREES This seems as good a place as anywhere to ask this """"""""""""""""" question. :) I've been assigned a programming project for school in which we're required to use a data structure called a "deap". This is a tree in which every left child is the minimum value of the left subtree, and every right child is the maximum value of the right subtree. Has anybody heard of this? Has anybody got any sample source code for it? I'd like to see some sample source, or at least get a decent algorithm for programming this structure. I've been trying various routines, but they haven't been working as well as I'd like. In particular, I need routines to delete the minimum and maximum entries in a deap, and to insert a new value into the deap. (E.SHEPHERD [Sheppy], CAT11, TOP8, MSG:9/M530) >>>>> What you are describing as a "deap" is in reality a binary-tree. """"" First we need a data structure that describes each "Leaf" in the tree... typedef struct { void *Left; /* Left branch in the tree */ void *Right; /* Right branch in the tree */ unsigned int Val; /* Sort value */ } TreeNode; TreeNode Nodes[100]; /* Create as many leaves as there are entries */ unsigned int NodeCount = 0; /* No leaves are allocated */ Now we need a routine that creates a NEW leaf... Note : that an ending leaf is one that has NO left and right branches. /********************************** Create a new binary tree node **********************************/ void MakeNode (unsigned int Val) { TreeNode *NewNode; NewNode = &Nodes[NodeCount]; /* Get pointer to the new node */ NewNode->Left = 0; /* No children nodes */ NewNode->Right = 0; NewNode->Val = Val; /* Sort value */ NodeCount++; /* Index to the next free memory */ } /********************************** Insert a new node into my binary tree Note : This will also do a sort **********************************/ void InsertNode(unsigned int Val,objtype *Entry) { ActorNode * NewNode; if (NodeCount) { /* Only if there are entries! */ NewNode = Nodes; /* Go to the first entry */ for (;;) { if (NewNode->Val <= Val) { /* Which way should I go? */ if (NewNode->Right) { /* Is there a branch here? */ NewNode = NewNode->Right; /* Go there! */ } else { NewNode->Right = &Nodes[NodeCount]; /* Create a branch to the right */ break; } } else { if (NewNode->Left) { /* Is there a branch here? */ NewNode = NewNode->Left; /* Follow the branch */ } else { NewNode->Left = &Nodes[NodeCount]; break; } } } } MakeNode(Val,Entry); /* Create a NEW node and exit */ } /********************************** Now, let's replay the data SORTED! **********************************/ void PlayNodes(TreeNode *NewNode) { unsigned int Val; /* Pointer to active object */ if (NewNode->Left) { /* Is there a farther object? */ PlayNodes(NewNode->Left); /* Draw it */ } Val = NewNode->Val; /* Get the pointer to the current object */ DoStuff(Val); /* Do the action */ if (NewNode->Right) { /* Is there a closer object? */ PlayNodes(NewNode->Right); } /* Exit! */ } Wasn't that easy!!! Bill Heineman (BURGERBILL, CAT11, TOP8, MSG:10/M530) <<<<< I have never heard of such a beast named "deap". Are you sure it """"" is not a "heap" instead ? (Not to be confused with the name of the memory that can be dynamically allocated with malloc() or NEW, as it is often called in the C and Pascal languages). A "heap" is a data structure used mostly for a sort algorithm appropriatly named "heapsort" and another data structure : the "priority queue"; this last one is a queue when the first out is not necessarily the first in, but the one with the highest priority, whatever that means for the problem at hand. Usually, heaps and priority queues are interchangeable, although the first is the means of implementing the second. A heap is a binary tree which must satisfy these 3 rules : 1) The tree must be balanced, that is the difference in height of all leaves must be at most 1 (the height of a tree is the length from the root to the lowest level). In other words, all the leaves of the tree must be on two adjacent levels. 2) It must be also complete. That means that all the levels of the tree must be filled, except maybe the lowest. That implies that nodes are inserted into a level of the tree from left to right until that level is full, in which case a new level is started. 3) The root of each subtree has a value which is larger than the values of all of its children. That means that the root of the tree has the largest value. However, the siblings of each node do not have to be ordered. Here is an example of an heap : J /------------------/ \------------------\ I F /------/ \------\ /------/ \------\ G H B E /--/ \--\ /--/ A D C While a classic binary tree is best represented with a linked data structure, a heap is usually stored in an array. In fact, from the first 2 rules above, a node at position N in the array has its 2 children at nodes 2N and 2N+1 if the array starts at index 1 (if it starts at index 0, like in C, the children will be at indices 2N+1 and 2N+2). Thus the node at index 1 has its children at indices 2 and 3, the node at index 2 will have its children at indices 4 and 5, and so forth. This representation is very efficient for a priority queue or for the heapsort, for which the only operations are "insert" and "delete"; however, it would be fairly inefficient if it was used for a general data structure. Furthermore, the usage of an array requires that the maximum number of nodes is known in advance. The above tree is thus represented as this in an array : J I F G H B E A D C node values 1 2 3 4 5 6 7 8 9 10 array indices A new node is inserted in the tree by adding it at the end and then reordering the tree to satisfy the heap rules defined above (this is called reheaping); this is done from the bottom of the tree to the top (ie from the right to the left of the array). For the deletion, we always remove the largest node which is the first (ie the root of the tree); here, the reheaping is done from left to right after copying the rightmost node into the first and decreasing the size of the array. Here is a sample implementation in Pascal (N is the current size of the array and H is the heap; for this example, each cell contains a single integer) : procedure init_heap; begin N := 0; H[0] := maxint; end; procedure insert ( i : integer ); var j, k : integer; begin N := N + 1; H[N] := i; k := N; j := H[k]; while ( H[k div 2] <= j ) do begin H[k] := H[k div 2]; k := k div 2; end; H[k] := j; end; The algorithm works as follows : the new node is added at the end of the array; then if the new child is greater than its parent, they are swapped; that fixes the heap rule violation. This may again violates the rule, so this process is repeated until the array satisfies the rule. Note that the heap starts with a pseudo-element 0 which is used to break out of the loop without requiring to check the value of K. function remove : integer; label 1; var i, j, k : integer; begin remove := H[1]; H[1] := H[N]; N := N - 1; k := 1; i := H[k]; while ( k <= N div 2 ) do begin j := k * 2; if ( j < N ) then if ( H[j] < H[j+1] ) then j := j + 1; if ( i >= H[j] ) then goto 1; H[k] := H[j]; k := j; end; 1 : H[k] := i; end; This functions moves down the heap, swapping node at position K with the larger of its 2 children if necessary, and stopping when reaching the bottom of the heap or when node K is larger than its 2 children (this second condition required the use of the GOTO statement, since ORCA/Pascal does not support breaking out of a loop :-) I also had to use 2 ifs to check for the largest child in case node K has only one child, because in ORCA/Pascal the AND does not short-circuit the second comparison. (P.MANET1 [Philippe], CAT11, TOP8, MSG:15/M530) NO MONSTERS ALLOWED? Hee hee, I just had a little flashback this evening """""""""""""""""""" and tried something I had forgotten about...and it still works with Basic.System 1.5. At the prompt: NO MONSTERS ALLOWED Think I originally saw that mentioned in the old Big Tip Book. Nate (still amused for some strange reason :-) (A2PRO.GELAMP [65-Nate-16, CAT7, TOP4, MSG:24/M530) >>>>> The reason it works is that NOMON is a perfectly valid """"" command under DOS 3.3, and to make porting programs easier, B.S supports it. It just ignores it though, including the parameters (as you found out). MON, on the other hand, was changed to MTR in the newer versions and puts you into the Monitor (lizard). But it, too, was a do-nothing in the earlier versions. (QUALITY, CAT7, TOP4, MSG:25/M530) ANIMATING CURSORS Okay, question of the day: what is the proper method """"""""""""""""" of doing an animated cursor? Is it ok to call SetCursor from within a hearbeat task? (SOFTDISK.INC [Bryan Zak], CAT15, TOP4, MSG:75/M530) >>>>> Well, technically, yes, but it's kind of bad form. In a heartbeat """"" task, since it's based on an interrupt, your cursor continues to spin even if you crash or enter an infinite loop, as long as you don't lock out interrupts. This is not the kind of user feedback one would hope for. :) The best thing to do in any periodic task is regularly check for commandperiod and animate the cursor at the same time. --Matt (M.DEATHERAGE [A2Pro Leader], CAT15, TOP4, MSG:76/M530) <<<<< I don't remember right off, but I believe Cool Cursor uses the """"" scheduler to change the cursor. When it's time to change, the heartbeat fires off, and that schedules the cursor change. Then when the system is free to do stuff, the scheduler fires off and the cursor changes. (JWANKERL [Joe], CAT15, TOP4, MSG:77/M530) PASCAL'S TRIANGLE IN BASIC I'm looking for help with an algorithim (in """""""""""""""""""""""""" Applesoft BASIC) to produce Pascal's Triangle. Pascal's Triangle is a mathematical problem that has the number 1 at the top and along both sides. The center numbers are the answer from adding the two numbers above. Shown below is an example with 7 rows: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 I figure that you have to use a couple of arrays and add the values in one array to produce the next array, then move the new array into the old array and repeat the procedure for the next row, etc., but I'm just not sure how to code it. Any help would be appreciated. (L.ELSEMAN1 [LARRY], CAT11, TOP8, MSG:16/M530) <<<<< Well, you don't have to use arrays, but before I explain how, """"" here's the little background I know just in case. Pascal's Triangle is a representation of powers of (a + b). If X is the power (a + b) is being raised to, then for different values of X you get: X=0: 1 X=1: 1a^1 + 1b^1 X=2: 1a^2 + 2a^1b^1 + b^2 X=3: 1a^3 + 3a^2b + 3ab^2 + 1b^3 which starts to reveal the pattern of the Triangle: 0: 1 1: 1 1 2: 1 2 1 3: 1 3 3 1 Look at level three (X=3). Notice that the power that 'a' possesses in each group goes from 3 on the left down to 0 on the right. The opposite effect appears for 'b' (0 to 3). Now, a little trick my Theory of Computing professor showed me: if you begin with a one on the left, multiply that value by the exponent of 'a' and divide by one more than the the exponent of 'b', you get the number that goes with the next group on that level. For example, in level three: begin with 1 multiply by 3 and divide by 0+1 to get 3 multiply by 2 and divide by 1+1 to get 3 multiply by 1 and divide by 2+1 to get 1 which yields level three's sequence, 1 3 3 1, or a^3 + 3a^2b + 3ab^2 + b^3. This works for any level in the Triangle, so if the level you are looking for is in the variable TriExponent, the following will print the correct sequence of numbers in that level: Mult = 1 for i = TriExponent to 1 step - 1 print Mult; " "; Mult = Mult * i / (TriExponent - i + 1) next i (K.FLYNN [ Chris ], CAT11, TOP8, MSG:18/M530) GETDEVICENAME I'm not sure of the correct way to handle the """"""""""""" GetDeviceName call. This is what I was considering doing: GetDeviceName anop pha pha _PrGetPrinterDvrName _PrDevPrChanged plb clc lda #$0000 rtl Is this correct? (H.WILKINSON2 [Heath], CAT16, TOP3, MSG:17/M530) >>>>> The Print Manager calls this driver routine when the printer """"" driver has changed. If you have a network string that identifies your driver, you pass it to _PrDevPrChanged. Otherwise, you don't have to do anything as far as I can tell. I'd prefer doing nothing to passing something that's not a network NBP entity. By the way, as part of our license with Apple, we now have the rights to upload my sample printer driver Picter and the article from _develop_ #4 about how to write a printer driver. I hope I can get this uploaded by week's end. --Matt (M.DEATHERAGE [A2Pro Leader], CAT16, TOP3, MSG:18/M530) COMPILING IN GNO I have a few questions about writing programs and """""""""""""""" compiling from within GNO. The first is how to set the language type when invoking the editor (right now I'm using the ORCA editor). I can change the SYSTAB file for the editor as described in the ORCA C manual (first field to 7 for C), but will I have to do this before using the editor when I want to use Pascal instead (assuming I buy Pascal as well)? What if I'm using vi or EMACs instead? How would I set the language so the COMPILE command will work? My second question is what is the command to compile the source, invoke the linker, and produce an execucable file? If I use COMPILE, it stops before the linker. Is there another command I should use or a flag that should be set? I am also having problems with the man command. If I enter "man yankit" my system hangs for a long time (I usually reboot). I can't find a man page for yankit in any of the directories. Also, compile doesn't have a man page as well, but "man compile" just reports this. I have a rom 1 GS with 4 meg and am using GNO 2.0.3. Now that I've had some time to read the Orca manual, I'm stumped. How do I use "edit" (Orca editor) from GNO so that it saves C type files that I can later compile? Right now I have to do everything from the Orca shell and then start GNO up. Michael (M.POTTER4 [AppleNET], CAT30, TOP1, MSG:23-24/M530) <<<<< > How would I set the language so the COMPILE command will work? """"" Use: chtyp -l lang filename See the manual page on chtyp for valid langauge types. You have to create the file first and then set the type; I agree that this is annoying, but it will be resolved sooner or later. >If I use COMPILE, it stops before the linker. use 'CMPL'. Also, make sure your gshrc file contains: set keepname='\$' (this keeps you from having to type 'cmpl foo.c keep=foo'. This is documented in the ORCA manuals). >I can't find a man page for yankit in any of the directories. Also, >compile doesn't have a man page as well, but "man compile" just reports >this. I'll check into the 'man yankit' problem; yankit _should_ have a manpage. I expect to do a bug-busting session this weekend, and I'll let you know how it goes. Jawaid (PROCYON.INC, CAT30, TOP1, MSG:25/M530) VULCAN INFO WANTED Info needed on "original" (not "Gold") Vulcan IDE """""""""""""""""" interface registers I recently obtained an old (appears to be 1989 vintage) Applied Engineering Vulcan IDE interface card (original 40Mb drive has frozen spindle) As I have an old 20Mb IDE (from an old MessyDos machine) I figure I may as well try to write some new ROM code (maybe even a GS/OS driver?) so I can use this available hardware. My problems are: 1) I don't have any of the AE utilities (I presume these allowed the user to do low level formating, partitioning, etc) 2) I don't have any docs whatsoever (AE docs that is!) 3) Without the above two items, it's real hard to finger out the registers! If someone _knows_ where the various registers are, bitmapping of them, etc (all the _good_ stuff :) I'd appreciate hearing from them. If someone has an old dead or dying Vulcan with docs, software, etc I'd like to get ahold of the docs & utilities (and I can give the hardware a better home than the closet or landfill) I can disassemble the utilities to figure out the registers. Please don't send me to AE, they won't talk to me, and I won't talk to them (have been at war with them for years... no details are needed) I _HATE_ trying to disassemble rom code that is "paged" so that it has several cross-calling images in the $C800-$CFFE space. (set rom bank, call code, that code changes the bank and "falls thru" to the new bank...ACK!!) (H.HISLOP [Harold], CAT13, TOP11, MSG:39/M530) >>>>> First, you need the documentation on the IDE 16 bit interface. """"" This will clarify HOW to talk to the hard disk drive via the task file. This information can be had at most IBM clone dealers who sell bare hard drives (I use a Connor 2024 manual at leaves little to the imagination). Next, you look at the ROM of the Vulcan to see how it sends the task file information to the drive (The task file DOESN'T CHANGE from the Connor manual) you just need to find out how the AE card talks to drive. If memory serves me (NOT!) there is a register you write that tells the vulcan controller to pull up a certain task file register much like how the IIgs Sound GLU has an address register and a data register. Hope this helps out. Bill Heineman (BURGERBILL, CAT13, TOP11, MSG:40/M530) CHANGING BATTERY RAM SETTINGS In the Toolbox references, it is stated """"""""""""""""""""""""""""" that any Battery-RAM changes made by the Miscellaneous ToolSet calls will take effect AFTER the system is powered down and rebooted. My question is this...Is there any way to change the B-RAM settings, and have the changes take effect IMMEDIATELY (just as if the user went into the Control Panel CDA and made the changes himself)? Any suggestions on how to do this? Thanks in advance. :) (SNAKEBYTES [Greg B.], CAT15, TOP3, MSG16/M530) <<<<< Yup...JSL TOBRAMSETUP, as documented in Firmware Reference. Be """"" sure to have the carry arranged correctly so you don't wind up switching slot settings! (The problem is that, for example, changing the Battery RAM byte for the border color doesn't change the border color register. TOBRAMSETUP reads the battery RAM and sets up all the system parameters as it specifies.) --Matt (M.DEATHERAGE [A2Pro Leader], CAT15, TOP3, MSG17/M530) >>>>> Here's the code that Apple used in CDEVTester: """"" UpdateSysBRam () { asm /* Update RAM copy of parameter-RAM */ { phd /* save direct page register word on stack */ phb /* save data bank register byte on stack */ pea #0x0 /* push two bytes of 0 on the stack */ plb /* set data bank register byte to 0 */ plb /* clean up extraneous byte from stack */ php /* save processor status register byte on stack */ sep #0x30 /* set processor status to shortm+shortx */ sec /* set carry so ToBRAMSetup won't alter slot setup */ jsl 0xE10094 /* call ToBRAMSetup */ plp /* restore processor status mode byte from stack */ plb /* restore data bank register byte from stack */ pld /* restore direct page register word from stack */ } } (SOFTDISK.INC [Bryan Zak], CAT15, TOP3, MSG18/M530) WINDOW ORDER ON THE DESKTOP A question on window planes.... :) """"""""""""""""""""""""""" Is there any LEGAL way of finding the order of windows stacked up (planed) on the desktop? If I'm not mistaken, the GetFirstWindow and GetNextWindow calls return the order of windows in window list, NOT the order (planes) of windows on the desktop. If this is the case, is there any other way to find a particular window's plane? As part of a utility, I'm trying to "step" through the list of windows, plane- by-plane, as they appear to the user on the desktop. Once I locate a window in a particular plane, I want to find its grafPortPtr and manipulate it from there. Any suggestions on how this could be made to work? Thanks in advance. :) (SNAKEBYTES [Greg B.], CAT15, TOP14, MSG77/M530) >>>>> Well, believe it or not, the window list is _always_ sorted in """"" front plane to back plane order. Otherwise the Window Manager would have to maintain some other sort of list to figure out the planar ordering. Simply calling FrontWindow(), and then GetNextWindow(windowPtr) repeatedly will walk the list in front to back order. Simple, eh? :-) (MURPH [jim@apple], CAT15, TOP14, MSG78/M530) <<<<< Don't forget to call GetSysWFlag when doing this: you probably """"" don't want to manipulate System windows (ie, desk accessories) (SOFTDISK.INC [Bryan Zak], CAT15, TOP14, MSG79/M530) >>>>> The window list contains all the windows in the order you'd see """"" them. The only exception is that it contains invisible windows where they'd be if they were made visible, so GetNextWindow and FrontWindow sometimes don't return the same thing. If you check for visibility before operating on the window record, you should be OK with the calls you already know about. --Matt (Live programming help six nights a week! We must be insane!) (M.DEATHERAGE [A2Pro Leader], CAT15, TOP14, MSG80/M530) OBJECTS & ORCA/PASCAL I have begun to play with objects. Though it is """"""""""""""""""""" not documented in the ORCA/Pascal, I was trying to see if it supported polymorphism and late binding. At first, I thought it didn't, but this is probably because I am too used to the implementation of this concept in C++ and Turbo Pascal through the so called 'virtual' methods. However it does, and it probably works because objects are really pointers in ORCA/Pascal. After looking at the generated code, I could see that the compiler was assigning the pointers to the right methods from each subclass to an instance of the root class, as in this pseudo-code : p : the_root_class; s : a_sub_class; p := s; In this example, P's methods are really the S's overriden ones, which is what polymorphism is all about :-) However, I have encoutered a problem while trying this. That is, the compiler signals an error when an overriding method defines new parameters, although this possibility is clearly shown in the manual (page 250). Here is a complete example : ORCA/Pascal 2.0 Copyright 1987,1988,1991,1993, Byte Works, Inc. 1 program overbug; 2 3 type 4 5 point = object 6 x1, y1 : integer; 7 procedure init ( x, y : integer ); 8 end; 9 10 rect = object ( point ) 11 x2, y2 : integer; 12 procedure init ( xx1, yy1, xx2, yy2 : integer ); override; **** ^ forward declared; repitition of parameter list not allowed 13 end; 14 15 procedure point.init; 16 begin 17 x1 := x; y1 := y; 18 end; 19 20 procedure rect.init; 21 begin 22 x1 := xx1; y1 := yy1; x2 := xx2; y2 := yy2; **** ^ identifier not declared **** ^ '(' expected **** ^ error in factor **** ^ ')' expected **** ^ identifier not declared **** ^ '(' expected **** ^ error in factor **** ^ ')' expected **** ^ identifier not declared **** ^ further errors supressed 23 end; 24 25 begin 26 end. Is it me ? Or is this a real bug in the compiler ? (P.MANET1 [Philippe], CAT36, TOP10, MSG75/M530) >>>>> Neither. :) It's a bug in the manual. As with all other places """"" in ORCA/Pascal where you redefine a procedure, function, or now, method, you do not replicate the parameter list. ORCA/Pascal follows Jensen & Wirth, the ISO standard, and the ANSI standard on this matter, and requires that you leave off the parameter list on all but the first declaration of a procedure or function. Mike Westerfield (BYTEWORKS, CAT36, TOP10, MSG76/M530) <<<<< > requires that you leave off the parameter list on all but the """"" > first declaration Mike, It'd be nice if the compiler would allow this anyway (unless $ISO+ was specified) because it really makes maintaining units easier. In any case, a work-around is: PROCEDURE Something{a: INTEGER; b: LONGINT}; FUNCTION Somethang{: BOOLEAN}; Doesn't look quite right, and I often do a double-take when browsing the code, but it does make it easy to remember the parameter lists when maintaining code written three years ago :) (SOFTDISK.INC [Bryan Zak], CAT36, TOP10, MSG77/M530) >>> HOT TOPICS <<< """""""""""""""""" STACK USAGE IN PROGRAMS I know that the stack is used, but why can't a """"""""""""""""""""""" call to the memory manager be made to ask for the memory that a procedure of function requires. I'm not sure but I believe turbo-pascal does something like that. I compile my programs on TP and dont run out of memory like I do on the GS. I now set my stack size to 32K to avoid the problem. Ken "KAZ" Kazinski (K.KAZINSKI, CAT19, TOP7, MSG15/M530) <<<<< For a lot of reasons, first, I wouldn't want the overhead (both """"" in terms of speed and code size) of two (at least) Memory Manager calls for each subroutine (one to allocate and one to release memory). Second, how is the compiler supposed to know ahead of time how much stack space is going to be required? What about recursion? Third, it's actually a very inefficient use of the Memory Manager and stack in many ways because of the allocations going on. I'm not sure, but I don't think that PCs have the same kind of stack limitations we have on the GS. That's probably why your Turbo Pascal programs run fine. BTW: just what are you doing that you require 32K stacks? In four years of Pascal programming on the GS I think I've only used a 16K stack once! Perhaps by changing your program around slightly you could be more efficient?!? (SOFTDISK.INC [Bryan Zak], CAT19, TOP7, MSG16/M530) >>>>> Back in the early days, when all of the people interested in """"" writing GS compilers were looking at issues like stacks and memory models, the issue of the stack size did come up. I really though the stack size limit of 64K on the GS, with a practical limit of more like 32K, was way too severe. We looked at two different alternatives: one was having the compilers support a "large stack" memory model allocated from main memory that didn't use direct page addressing at all, and the other was having the compilers automatically handle large structures by allocating memory from main memory and keeping a pointer on the stack, at least as an option. I favored the later. The folks from MegaMax insisted that the stack size just wasn't a problem in practice, and that a very small amount of thought would eliminate stack overflow problems in virtually any program. Well, the folks from MegaMax prevailed, at least in part because all of the other solutions were hard and we were in a hurry to get tools out to application developers. We also realized that allocating large structures from main memory could be added later without effecting existing compilers or libraries. Looking back on the decision, I'm happy to say I was wrong. Over the years, it's been proven over and over that the folks from MegaMax were completely correct. Note 1: If you don't know _how_ to reduce your use of stack space, say so. It's not hard. It does depend a little on the language you're using, though, so you might ask in one of the product categories, rather than a general programming area. Note 2: MegaMax did APW C. Mike Westerfield (BYTEWORKS, CAT19, TOP7, MSG17/M530) <<<<< >I really though the stack size limit of 64K on the GS, with a """"" >practical limit of more like 32K, was way too severe. No kidding! Although since MultiFinder was still a toy, and the only other multitasking OS in general public use at the time was Unix, I suppose the engineers didn't consider it important to add a single little register (and a bit of comparator glue) that would map bank 0 to any bank of your choice. Here are some tips that work for C and Pascal: 1) Never pass Strings as function/procedure parameters in Pascal. Only pass _pointers_ (i.e., use VAR foo:string) 2) Don't keep large strings or structures in local variable space. Things like GSString255's are common transgressors of this rule; it's really easy to malloc() or new() the string space, or in C to make the varible 'static' (and thus in global memory space). Note that large structures and strings aren't accessed any faster as local variables, but that they _do_ affect other variable accesses negatively (because the compilers have to generate special code to "reach across" the 256-byte direct page. 3) Follow your program's flow of execution, and add up the stack usage. Then use the #pragma stacksize directive to minimize it. That way you'll be guaranteeing best compatibility with things like The Manager, Switch-It!, and GNO/ME. 4) On an aside, Finder Extensions do _not_ need any stack! They share the Finder's, which is 4K. If you wrote an extension with pre-2.0 ORCA languages, recompile them immediately with the 2.0 versions and make sure no stack segment is included in the OMF output. Jawaid (Someone who's sensitive to Bank 0 usage!) (PROCYON.INC, CAT19, TOP7, MSG19/M530) >>> MESSAGE SPOTLIGHT <<< """"""""""""""""""""""""" After looking over all the topics, this was the best fitting place for this (as far as I could tell...) A method of creating 640 mode rIcons (or icon source) suitable for use with _ShowBootInfo, CDevs, Controls, etc. Requires: AWGS Paint module (or your favorite paint program) HCGS (either version) A Scrapbook type NDA Genesys (if generating source) Almost any resource manipulator (if source isn't needed) Procedure: 1) Launch the paint program and draw what you want for the icon. Remeber that you have easy access to any fancy fonts, dingbat fonts, etc that you have installed. (Use them, this is one of the reasons for using a paint program at this stage :) If you're using AWGS, careful use of the Group menu item can make "drop back and punt" operations much easier, radical use can make future editing a real bear. When you're happy with your work, save it to disk. Now select your drawing using the Lasso tool. C)opy it to the clipboard AND paste it into yout scrapbook (2 or 3 pastes in the scrapbook can be a good idea as HCGS sometimes C)uts instead of C)opying) Quit the paint program. 2) Launch HCGS and go to the Icon Editor stack. Clear all paint, and paste your picture in. Move it around as needed, in general follow normal icon editing practices for this stack. When you're happy with the results, paste the final button into a temp stack. Quit Hypercard. 3) At this point, your icon exists as an rIcon resource in the temp HC stack. If you don't want source for it, then simply copy the icon (using something like ResLin) to the program that will use it. (Don't forget to set the rID and other attributes as may be required) 4) If you do want/need source then launch Genesys and open your temp HC stack. Export the desired icon to a temp file (I keep all my icons made in this manner in a single stack so I need to export the desired one in this manner) Close the stack file. Open a New file, and import your temp resource file (don't forget, rIcon is rType $8001) Now you can generate source using whichever SCG you prefer. If the results need minor tweaking, just launch HCGS and edit the icon pixel by pixel. If you need to make wholesale changes to it, then go back to step 1, but you have something to work from :) I know this seems like a round about method, but the results can be well worth the effort, and some really nice effects can be created with a minimum of effort by non-artsy types (like myself! :) (H.HISLOP [Harold], CAT10, TOP22, MSG:10/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. //////////////////////////// GEnie_QWIK_QUOTE /// / "OK. May take a few days to get through the / / procrastination queue though." / /////////////////////////////// A2PRO.TODDPW //// [EOA] [3DL]////////////////////////////////////// 3D LOGO SEMINAR #2 RTC TRANSCRIPT / ///////////////////////////////////////// Lists, Movies and Logo Magic """""""""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] THE BYTE WORKS HAS BEEN HOSTING LIVE SEMINARS in the A2Pro RTC. These """"""""""""""""""""""""""""""""""""""""""""" seminars are for owners of 3D Logo, an amazing new language product from The Byte Works, Inc. 3D Logo, which runs on the Apple IIgs, provides a stand-alone desktop implementation of Logo. In addition to being a full version of Logo, 3D Logo supports movie creation, true 3D graphics, and much more. This is the transcript from the second seminar, held October 14th, 1993 in A2Pro. How is HyperLogo coming? Great! I was working on it today, and it's sliding into HyperStudio like a pig through a gate. I expect to finish next week if I don't hit any snags. I have some stuff prepared for tonight, but I'd like to wait until 15-20 after to start on it. Meanwhile, I'll answer any questions you have. We just got "Spring" today. Same here, but I printed it out just before signing on. Any questions left over from last week, or from your own exploring? I have one. Is it possible to make the spring a different shape in cross section? Sure. In fact, there are two others I played with in the file: :hex and :sq. I can see how to do most of it, but how do you alter Toptri? In DrawSpring, change the :tri to whatever shape you want to use. TopTri is a kludge specifically for the triangle cross section. I wanted a "solid" look, with no hidden lines showing, so I only drew the front of the object. TopTri is the kludge that draws the back of the object, too, but only for the top triangle. For most uses of extrude, you would just draw the whole cross section. How can you do rings in Chemistry? You can't, without getting sort of fancy. I would say the best way would be to create special "ring" procedures that will take atoms for input and draw them at the proper spots. What the demo shows is a very simple model. It doesn't even handle double bonds. That's easier to add, but still not there yet. And you only have 3 atoms. OK, let's get started. I wanted to start with a couple of refresher questions, then build up to the point where we can take the Extrude procedure apart. The first thing on the agenda is a quiz. What would these statements do: Print First :lst Make "lst ButFirst :lst It would print what's first on the list then take that item off. Right. Now, are you both familiar with the While, Not and EmptyP commands? No. Help me with emptyp OK, let's step through them. While is a conditional loop, just like the while loops in many high-level languages. It has the form WHILE condition [stuff] The condition is evaluated. If it is true, the commands between the brackets (stuff) are executed, and the process repeats. If condition is false, Logo moves on to the next statement. EmptyP checks to see if a list is empty. If so, it returns true. Not reverses the truth of the operand. So, Not EmptyP is true if the list is Not empty. With me so far? When the list in "while" is not a list, what error message do you get? Got it, but I thought emptyp was Employee Type Andy, I'd have to check to be 100% sure, but it probably would be "WHILE doesn't like as input." Now let's put these to use. These commands are used for the basic processing loop for all lists. It's sort of the for loop of list processing languages. I want you to write a line that will process a list one element at a time, printing them one by one. When you have your answer, go ahead and show us. While not emptyp :lst [print first :lst make "lst butfirst :lst] Andy/David get the gold star. :) WTG Guys! :) Are you with us, Jimbo? Shall we move on, or look at this again? Got it, just hadn't pressed enter yet. <[BYTEWORKS> :) OK, one more fact, and we're ready to tear into the sample program. Logo's Run command is really a sleeper. It's this command that sets the list processing languages apart from the other, and invariably lead to them being interpreted. The Run command executes whatever is inside of an input list as if it were a statement -- which it is. The cool thing is that the Run command can work on data OR code -- in fact, Logo doesn't really distinguish between the two. So, Run [fd 20 rt 60] does the same thing as fd 20 rt 60 That's 60% of the secret to Extrude. Do you both have a listing of the Spring program handy? Yes. No. OK, let's take it from the top, then. Here's the variable :tri that is actually drawn to create the horizontal lines of the spring: Make "tri [[fd 40 rt 120] [fd 40 rt 120] [pu fd 40 rt 120 pd]] Now, looking at that, and thinking about the Run command and our For loop, can you see how Draw could draw a shape from this? Yep Yes :tri is really the shape to extrude. You can use _any_ shape. Now, why not just draw it and be done with it? Because we also need to draw some posts to connect the shapes. And that's where begin able to break the shape up into individually executable segments comes in. The loop that does most of the drawing is Ex_Draw, which does this: While Not EmptyP :shape [Run First :shape Ex_Post :dist Make "shape ButFirst :shape] Ex_Post is a subroutine that makes a turn in the direction we are extruding, and draws a line the length of one extrusion. That, in a nutshell, is how Extrude works. You can pass it any shape as a list of drawing commands. It puts posts between the spots where you break your drawing commands into lists. See? Cool Yes From here, the Spring movie is just an exercise in Physics. All you do is apply Newton's laws to drop the spring and make it rebound. That's a lot of stuff. Let's open get your questions answered, now. Fire when ready! I'm not literate enough to have any! ]:) :) Have to do too much interpretation of the abbreviations. But I've got the concepts. Which ones are you having trouble with, Jimbo? RLR for instance. Thanks for putting the short names in the index however! RLR is short for RollRight. The turtle stays pointed in the same direction, but turns clockwise. It seems clear now. We'll have to try it with different shapes. There's another thing you can try, too. Instead of just trying different shapes, try a different process using the same idea. There are two very handy things to do with a set of points to make a solid object. Extrude is one. The other is Rotate, which creates a surface of rotation. It would use about the same inputs, but instead of :dist for distance, you would use :angle for the amount to rotate. To imagine how this would work, think of a half circle and rotate it 360 degrees. Drawing lines, you will end up with something that looks like the latitude/longitude lines on a globe. See how that would work? yes yes OK, then, this is the challenge! For the first level of accomplishment, and it's a really big level, create a procedure called Rotate that will do what we just talked about. For an extra challenge, create a movie of a smoothly rotating coordinate grid using your procedure! If you take the challenge, be sure and upload the results into the library. Okay, but we have a disagreement about nomenclature. The lines are not really latitudes, but longitude lines (great circles) from different poles. The line you would give as input would be a great circle. The line that is created by the procedure as it rotates your points would be lines of latitude. Agreed? yes Cool. This is a great procedure for anything that can be created by rotation, them which is quite a lot: glasses, pop cans, vases, table legs, balls, etc. You see them used a lot in rendering programs. That's all I hoped to cover tonight. An questions? Comments? Want hints about the program? :) Question on procedure! How do we upload a file to a library? And which library? And do we address it to you? No, go ahead and put it in the public A2Pro library. Uploading works pretty much like downloading. The only big difference is that you need to set the software library first with the command by that name. Once you set the library, choose the command to upload a file, and you're prompted through it. I don't remember which library I've been using by number, but it's the when you set the one for "other languages," and GEnie will print the library when you set the library. If you have any trouble at all, ask in A2Pro. Also, be sure and attach a keyword of 3D Logo -- that way we can all find it! Mike, is there any way to disable the text icon that Logo adds to the desktop? Which icon? Every time I click on a text file, I get Logo. Did I install it wrong? :) You'll have to edit the resource fork of Logo to get rid of that, or convince Apple to implement priority levels. Logo tells the Finder that it can handle a text file, but that it should NOT be a prime choice. I'll check that out on our system and see if we have the same problem. All I've got is resedit. How tough will it be? Rez/Derez You might check the library, too. There may be some programs that will modify the Finder resources directly. With a resource editor, it might be a little tough. That's what I thought. Luckily I still use old fashioned icons so I just keep deleting the desktop If you don't want Logo to create a desktop file at all, you just have to pull out the entire resource. That wouldn't be to tough. What's next week's topic? Next week is movies. I'm not sure what I'm going to use for an example, though. Any suggestions? Are you planning anything about property lists? No. Oh well. Well, we can always _talk_ about them! :) Bring some questions along, especially for the last lesson, which will be deliberately short. I've got a mostly finished Monopoly game in SimpleScript I'm planning to convert I'll get my questions together. Cool. I'll be interested to see it. What happened to Bill.Lynn tonight? Did we get over his head? I'm not sure. I think he's following things OK. Other commitments or a memory like mine, I guess. :) I hear that. Well, thanks a lot Mike. I need to spend some more time with Logo. Guess we'd better be going. See you next week! OK. We'll see you next week, Jimbo. See you then. By Andy/David. See you then. [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 30 PROCYON, INC. 31 SOFTDISK PUBLISHING 32 MORGAN DAVIS GROUP (MDG) 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. New this month! ProDev, Inc. joins the companies supporting their products here in A2Pro! Be sure to stop by Category 35 to see what's going on! >>> NEWS FROM PRODEV, INC. <<< """""""""""""""""""""""""""""" From: ProDev, Inc. To: All Apple II programmers: ************************************************************ _ _ ___ | \ | \ | |_/evelopment & |_/ebugging |ool ************************************************************ ---- Product Description ---- The ProDev DDT is a program debugger on a peripheral card. The DDT contains the debugging software in ROM, has its own RAM and contains hardware for watching the address bus, generating interrupts and program timing. ---- The Hardware Edge ---- The ProDev DDT has the normal features you find on most debuggers; Tracing, break points, register and memory displays. What makes the DDT different is the addition of hardware. The combination of software and hardware makes it possible to provide features that ordinary software debuggers can not. For example: o The DDT does not require any memory space. This is especially important when trying to debug programs on the Apple //e. Many times your program is too large to allow room for a conventional debugger. You can even trace programs that run in text RAM memory. o The ability to do a "Break on Address" that watches every address in real-time and interrupts the running program when the specified address appears. This allows you to find those nasty bugs that cause part of your program to be mysteriously overwritten. It also works as a real time breakpoint for ROM code. o Pressing a button to interrupt a program. Now you can see where your program went when it got lost. o Counting the number of clock cycles required to run your program between two addresses you specify. ---- Other Goodies ---- Connect a terminal or printer to your computer and view your programs output and the DDT output at the same time. The DDT talks to the terminal via the Apple IIGS serial port or a super serial card. As you trace your program the memory location that each instruction uses is calculated and displayed. ---- Main Screen ---- The following is an example of the main screen display of the DDT8: (formatted for full 80-column display--Ed). ---------------------------- top of screen ---------------------------------- | M = STK REA WRI LNG BNK PG2 80S CXR :PC=800 | mne mne mne rom 2 off off on | :DR | KEY BRK TYP SAV TXT MIX HGR 80C ALT A=00 X=00 Y=00 S=E0 M=09 L=0 P=--1---Z-| 93 out C02 on on off off off off 00/800:4C FF FB JMP FBFF {00FBFF |---memory-------breakpoints----stack- |00/0024:00 @ | H |01E2:01 :TR |00/0000:4C L | I00/FBFF.0001 |01E1:E2 ** BREAK ** |00/0000:4C L | |01E0:9A A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L | |01DF:79 00/FBFF:B0 EF BCS FBF0 {-11} |00/0000:4C L | |01DE:00 T: |00/0000:4C L | |01DD:FC A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L | |01DC:53 00/FC01:A8 TAY |00/0000:4C L | |01DB:00 T: |00/0000:4C L | |01DA:FC A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L | |01D9:53 00/FC02:10 EC BPL FBF0 {-14} |00/0000:4C L | |01D8:EA T: |00/0000:4C L |npt----range---|01D7:00 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|--eff-adrs---| 00/0000.0000 |01D6:FE 00/FBF0:A4 24 LDY 24 {000024 |00/07CE:B5 5 | 00/0000.0000 |01D5:F7 T: |00/07CF:A0 | 00/0000.0000 |01D4:43 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/07D0:A0 <| 00/0000.0000 |01D3:30 00/FBF2:91 28 STA (28),Y {0007D0 |00/07D1:A0 | 00/0000.0000 |01D2:7D T: |00/07D2:A0 | 00/0000.0000 |01D1:F5 ----------------------------bottom of screen--------------------------------- The left window displays the instructions as they are traced. The top right window shows the state of various switches. The "memory" window allows you to select 12 different memory locations to monitor. The "breakpoints" window displays the 10 most recently encountered break points plus the one hardware break. Next is the "stack" window which shows you the stack contents. The "eff adrs" window displays the effective address of the next instruction to be traced. The "range" window allows you to enter address ranges where "No" access or "Program only" access is permitted or a "Trace" range where real time execution of subroutines will occur. ---- Ordering Information ---- The retail price for either the DDT8 for the Apple //e or the DDT16 for the Apple IIGS is $99 + $6 for 2nd day air shipping in the 48 states. Canadian orders shipped via UPS ground. Visa & MasterCard accepted. For security and speed please place all credit card orders by voice phone only. If you have any questions or comments please contact me at one of the following addresses: PRODEV Genie PRODEV America Online ProDev, Inc. US Snail PO Box 162 LaSalle, MI 48145-0162 (313) 848-4012 Voice Sincerely, Chuck Kelly President (PRODEV [Chuck], CAT35, TOP1, MSG2/M530) <<<<< The DDT16 sounds incredible! I have a few questions before I """"" call up and order it. 1) I own and use an Apple //c and an Apple //gs. Obviously the DDT8 nor the DDT16 will work on my //c because there is no place to plug in a card. I don't own a //e so that leaves that option out. The question that I have is this: Will the DDT16 running on my //gs debug and trace 8-bit software? I now develop 8-bit software on my //gs for use on Apple II's. Please let me know if the DDT16 is limited to 16-bit software debugging only. 2) Will there be a problem with using my ZipGS 10Mhz accelerator card? I know that you said to set the slot that the accelerator is in to SLOW, but I just wanted to ask to confirm this. 3) I use Merlin 8/16+. Does the DDT16 support Merlin? Or is the debugging software/hardware not compiler sensitive? 4) What days and hours can I call and place my order? Thank you for your time in answering my questions. (R.NIELSON1 [Russ!], CAT35, TOP1, MSG4/M530) >>>>> Great questions Russ. Hear are some equally great answers, I """"" hope. Yes, the DDT16 will debug 8-bit code on the IIGS. I do it all the time. Of course if the code won't run on a IIGS, for example it used aux RAM banks of a RamWorks card, then you would not be able to fully debug it on a IIGS. No problem with the ZipGS as long as the slot of the DDT16 is set to slow or the entire Zip is set to slow. You can also use the DDT16 with the Zip enabled if you want to use breakpoints only and you can live with the breakpoints stopping your program several instructions after where they are placed. As far as languages are concerned the debugger doesn't care. It just treats everything as machine code. No source level debugging is done. The source code for the DDT16 is written in Merlin 16+. If you want to make modifications to the source then being a Merlin user makes it easier. Our office hours are very crazy. Your best bet for talking to a real person is to call Tues. or Thurs. between 3pm and 8pm EST or Friday all day. You can also order via Email. Be sure to include you complete credit card number (Visa or MasterCard) with expiration date and the name that appears on the card. Let me know if you have any more questions. Chuck P.S. If you order by email please direct your mail to PRODEV. Never post your credit card number in here. But you already knew that didn't you. (PRODEV [Chuck], CAT35, TOP1, MSG6/M530) >>> NEWS FROM PROCYON INC. <<< """""""""""""""""""""""""""""" REXIT() AND GNO/ME 2.0 Evidently I forgot to include rexit() in the """""""""""""""""""""" library. Actually, it's rexit(exitcode) (not just 3). The code is pretty small, so I'll post it here in just a bit. Note that it only works with ORCA/C 2.0 or greater. For the absolute best results, this code should be written in assembly to avoid all the overhead of starting up the ORCA/C stdio and malloc() packages (which is fairly formidable). Maybe Mike W. will have a suggestion on working around that while still using C? Here's the rexit() code (you can include it in your program). rexit(int x_code) { SYSTEMQUITFLAGS(0x4000); SYSTEMQUITPATH(NULL); exit(x_code); } Jawaid (PROCYON.INC, CAT30, TOP2, MSG158-159/M530) GNO UPDATES AVAILABLE IN A2PRO If you're a registered GNO owner send me """""""""""""""""""""""""""""" email and you'll be given access to the new library just for registered GNO owners! Kernel updates, and other juicy tidbits will appear in this library from time to time. In fact, the GNO 2.0.2 update is there now in Library #41. So get that email flowing! Jawaid (PROCYON.INC, CAT30, TOP5, MSG34/M530) >>> NEWS FROM SOFTDISK PUBLISHING <<< """"""""""""""""""""""""""""""""""""" PUBLISHING RIGHTS AND SOFTDISK I have a few specific questions about """""""""""""""""""""""""""""" programs published by Softdisk: 1. Do you work like a paper magazine, buying "first North American printing rights," or does Softdisk purchase all rights to a program? 2. If there is an opportunity to publish a program commercially at some point in the future, either individiually or in a collection, how is this handled? In other words, if Softdisk is buying more than the first rights, who decides when and how a program is released later, and is the author compensated in any way? 3. Can the same program be submitted multiple times on different platforms? Specifically, can I submit the same program both as a GS and a Mac program, and assuming it is accepted for both publications, get paid twice? Mike Westerfield (BYTEWORKS, CAT31, TOP2, MSG38/M530) >>>>> Generally we purchase all rights to the program. Although, the """"" submitter does retain the right to create new and original programs using the technology. And, as there always is, there have been exceptions. > If there is an opportunity to publish a program commercially The standard contract gives us all future rights, but there have been special cases. This is really new territory for us since we are just now moving into the standalone market. We even hired a temp to do the research on old contracts to see what we could and couldn't sell as a standalone without having to contact the original author. > Can the same program be submitted multiple times on different > platforms? Yes, and you can be paid twice, but the amounts may not necessarily be the same since different platforms have different budgets, needs, etc. Also, the contract gives us the right to port submissions to other platforms, but some submitters have asked for "first right of refusal" clauses for this kind of thing. In reality, every submission and submitter is handled a little differently from every other submission and submitter. Lee pretty much takes these things on a case by case basis. (SOFTDISK.INC [Bryan Zak], CAT31, TOP2, MSG39/M530) GSLIB DISCUSSION Well, GSHK sure did a great job compressing GSLib! """""""""""""""" Only a 15 minute d/l! Another 15 minutes for the docs! But I'm going to have to find someone who has a Mac to read them...having them in MicroSoft Word format isn't bad, I can always use ShadowWrite to extract the ASCII and leave out the garbage, but I'll have to use a Mac to unpack it...GSHK can't handle the .SIT archive...did you try to archive a folder by any chance? I don't think GSHK can unarchive stuff in folders in .SIT archives. :( In any case a single item, "documentation", shows up dimmed so I'll have to borrow someone's Mac...maybe I can use one at school... BTW, can I just copy lines out of the MPW IIgs Pascal interface file and put them in my ORCA/Pascal programs? What's the difference between MPW and ORCA/Pascal when it comes to the interface? (T.BUCHHEIM [ Tim pi ], CAT31, TOP9, MSG86/M530) >>>>> Yeah, I accidently archived the documentation as a single folder, """"" I'll be sure not to do that in the future. I didn't use GSHK for the documentation because for some reason it wouldn't compress my "documentation" folder: it kept reporting fileNotFound errors. Odd. It's been a while since I've used the Byte Works Pascal interfaces, but some of the things to look for: Str255 vs pString, Ref vs UNIV LONGINT. Those are the two biggest changes you may need to make. (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG87/M530) <<<<< By the way everyone, there IS a GSHK unpackable version of """"" the GSLib documentation in the library, it's file #3629. The documentation is still in Microsoft Word (Mac) format though. (A2PRO.GELAMP [65-Nate-16], CAT31, TOP9, MSG102/M530) >>>>> In your announcement, you mention many 'C's but not ORCA/C. When """"" I changed from APW to ORCA I had to recompile my own libraries because the parameter passing methods of APWC and ORCA/C are incompatible. Is this covered in the docs? (M.KLAPP [Michael], CAT31, TOP9, MSG89/M530) <<<<< There are two sets of C headers in the GSLib package: "GSLib.h" """"" and "GSLibKR.h". The former is an ASNI C style header, complete with prototypes. The latter is the ole K&R style headers. The former is for use with ORCA C, the latter with APW and MPW IIGS C. BTW: you shouldn't have had to recompile your libraries. By using the "pascal" directive before a function declaration all three C compilers assume the same method of parameter passing. The one difference is error codes. ORCA use the ToolError() function (which uses the ~TOOLERROR library global) and APW/MPW IIGS uses a global int: _toolErr. When using ORCA, all you need to do is link in GSLib. If using an Apple compiler (APW C, MPW IIGS C or MPW IIGS Pascal) you need to link in two libraries: GSLibAppleGlue and GSLib. GSLibAppleGlue MUST link in before GSLib - - it contains different glue code that stores errors in _toolErr. (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG90/M530) >>>>> Does GSLib have routines that calculate to/from the relPitch """"" field in sampled sound resources? (A2PRO.GELAMP [65-Nate-16], CAT31, TOP9, MSG100/M530) <<<<< Yep, there are FreqToPitch and PitchToFreq routines. """"" The PitchToFreq uses the same code that the Sound control panel uses and is pretty quick at what it does. The FreqToPitch uses SANE as I seem to recall (it's been a while since I wrote these) and thus you need SANE active to use it. Parameters are what you would expect: freqOffset = PitchToFreq(relPitch); (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG101/M530) MORE GSLIB COMING SOON Ok, almost 30 people have download GSLib so far. """""""""""""""""""""" Any questions? problems? suggestions? Not this week (we're mastering), but the week after I'll upload a new revision of GSLib (a few bug fixes and about 15 new routines), a new revision of the documentation (that can be processed by GSHK and contains another 40 pages or so of docs, mostly on the Memory Manger portion); and.... Sample code!!!! The first batch of sample code will be for an NDA, a single window application and a multi-window application. All of these sources are in MPW IIGS Pascal. This means it'll be very easy to read and understand the source, but few people will be able to actually use it. Unfortunately, I just don't have the time to port the sample source to ORCA/Pascal (at least not until ORCA/Pascal adopts the Apple interfaces). Any volunteers? (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG98/M530) >>> NEWS FROM MORGAN DAVIS GROUP <<< """""""""""""""""""""""""""""""""""" DEBUGGING CUSTOM COMMUNICATIONS CODE I've recently gotten Modemworks, """""""""""""""""""""""""""""""""""" in an effort to download stock information from Dow Jones. There are two sections on Dow Jones that I'm interested in -- the Historical Data Section (where stock prices are listed for about a year prior to today's date), and the Current Quotes section (where the daily prices quotes are given.) After a little effort I've gotten my basic program to succesfully log-on, go to the Historical section and download any and all data I want. I figured it was no big deal to just change a couple of lines to go to the Daily Current quotes section to get the daily data. -- Wrong. Even though I'm using very similar lines of the program, I get an "Out of Data" message -- "Break in 690" For Historical data I use: 440 & WAIT FOR "VOL(100/S)" 450 & CLEAR: FOR Y = 1 TO 12: & READ Q$(Y): NEXT Y This works fine -- no problems. For the Daily data I'm using: 680 & WAIT FOR "VOL(100'S)" 690 & CLEAR: FOR Y = 1 TO H2: & READ Q$(Y): NEXT Y This keeps giving me the "Out of Data" message, with a Break in 690 What could be causing this ?? (Yes, I know the "VOL(100/S)" is different than the "VOL(100'S)" -- that heading is different on Dow Jones. In both instances I have two files open, and in both instances I've used an & IN# 0 to accept input only from the modem. One works and the other doesn't ?? Any help would be appreciated. Thanks. Stan Sztaba (S.SZTABA, CAT32, TOP4, MSG20/M530) >>>>> Morgan will probably be along soon, but this message normally """"" applies to READ statements, which get their values from DATA statements. If you have ten DATA values and try to issue eleven READ commands, this is the error you'll get. It leads me to believe that either ModemWorks doesn't see it as a real &READ command and that Applesoft is looking for DATA statements, or that ModemWorks returns the same error if it doesn't find as much data as you're trying to read. Just guesses, though. --Matt (Live programming help six nights a week! We must be insane!) (M.DEATHERAGE [A2Pro Leader], CAT32, TOP4, MSG21/M530) <<<<< I think Matt is right. Although AmperWorks' &READ statement is """"" has nothing to do with DATA items, if you accidentally left out the & you would definitely get that error. Check that line again and verify that you have &READ and not just READ. (For those who don't know, &READ is AmperWorks' super-powerful "input anything" routine with fixed input formatting, word wrap and other features). (MORGAN-DAVIS, CAT32, TOP4, MSG23/M530) >>> NEWS FROM GS+ MAGAZINE <<< """""""""""""""""""""""""""""" MISCLIB DISCUSSION In using the MiscLibrary list manager calls, I am """""""""""""""""" confused by the AddMemRec statement that a "valid handle" must be used. What constitutes a valid handle? Is a handle within global variables considered valid? How about a handle that is within a record allocated by New( )? Do I need to make a NewHandle( 0, .....); call on either of these examples? Both? Again, my memory manager ignorance is confusing me... Arrrrgh. Rick (R.ADAMS48, CAT33, TOP7, MSG15/M530) >>>>> OK, what you need to to is call """"" NewHandle(0,MMStartUp(),attrNoPurge,NIL) to get an empty handle. This will be your list of memRecs. When you're through just call DisposeHandle on it and everything will go away (unless you have handles to names references in your memRecs, in which case you'll need to dispose of those too - an easy way to do this is to allocate everything with an auxiliary memory ID and then call DisposeAll). Let me know if this isn't clear or if you need more help. :-) (JWANKERL [Joe], CAT33, TOP7, MSG16/M530) >>> NEWS FROM THE BYTE WORKS <<< """""""""""""""""""""""""""""""" HYPERLOGO GS SHIPS! Scripting HyperStudio for the Apple IIGS just took """"""""""""""""""" a giant leap forward! HyperLogo for HyperStudio GS is now shipping. If you've been waiting for this new product, wait no more! Add 3D pictures and movies to your stacks. Use Logo's powerful artificial intellegence features to control your stacks. With HyperLogo and Talking Tools, you can even create stacks that read what you type! It's all here for the low introductory price of $50 plus shipping, or get HyperLogo and 3D Logo, our stand-alone version for just $85. These programs will cost $95 after the introductory special expires, so don't wait! If you ordered HyperLogo when 3D Logo started to ship, your wait is over. All backorders have been shipped, and all should arrive by 22 November. If you would like more information, just ask... or send me your mailing address by e-mail and I'll drop a complete information package in the mail that describes all of our Logo products for the Apple IIGS. Mike Westerfield (BYTEWORKS, CAT36, TOP32, MSG79/M530) ORCA/MODULA-2 SHIPS! ORCA/Modula-2 """""""""""""""""""" 5 disks Manual: 361 pages, index, table of contents ORCA/Modula-2 is here! This is the language Niklaus Wirth, the creator of Pascal, designed to replace Pascal. Unlike Pascal, Modula-2 was designed for the rough-and-tumble world of systems programming. It has the structure and safety of Pascal, but it also has the flexibility of C, plus a few features you can't get in any other Apple IIGS language! Modula-2 is also surprisingly easy to learn. Mike Westerfield, creator of ORCA/Pascal, ORCA/C, APW, and ORCA/M says, "I wasn't sure I wanted to learn a new language, either. With Modula-2, though, I started writing programs the first night, and I felt comfortable with the language after just a few hours." What's the secret? Quite simply, Modula-2 is a lot like Pascal. The overall structure and many of the reserved words are the same, so anyone who knows Pascal can learn Modula-2 very quickly. It's also very easy to translate Pascal programs to Modula-2. But Modula-2 does more than Pascal. Modules are an integral part of Modula-2, unlike Pascal's units, which were added later. Modula-2 gives you more cross checking between modules -- and therefore fewer programming errors -- than any other Apple IIGS language. Modula-2 also lets you get down to the bit and byte level. Unlike Pascal, Modula-2 is not designed to hide the implementation of the machine itself. You can write systems programs that deal with bits and bytes with Modula-2, just like with C. And Modula-2 even supports concurrent programming. On a single processor computer like the Apple IIGS, this means you can write multi-tasking programs without resorting to special operating systems or assembly language. If you want your program to work on two things at once, just run a concurrent procedure, and it will! Of course, ORCA/Modula-2 comes with all of the advantages of an ORCA language. It works with all of the other ORCA languages, so you can use libraries written in ORCA/C, ORCA/Pascal or ORCA/M. ORCA/Modula-2 runs in the standard ORCA development environment, too, and installs in the same folder as your current ORCA languages. And of course, you can use it with tools from other companies that support the ORCA languages, too. So why buy now? If you purchase ORCA/Modula-2 during the introductory period, you can buy it for just half of the list price of $150 -- you save $75! And if you buy ORCA/Modula-2 from this online offer before December 15th, you save us the trouble of sending you a mailing to announce the product, so we'll even give you free shipping in the U.S., or $5 off of shipping anywhere in the world. It's a great way to get the language Niklaus Wirth designed to replace Pascal and compete with C, and support the Apple IIGS! (BYTEWORKS, CAT36, TOP13, MSG2/M530) ONLINE ORCA/MODULA-2 SEMINARS? Interested in online seminars or courses """""""""""""""""""""""""""""" about Modula-2? Tell me what you want to see, even if someone else has already posted the same thing. If enough people are interested (10-15 is best), We'll get a seminar or course together. Mike Westerfield (BYTEWORKS, CAT36, TOP13, MSG3/M530) NEW BYTE WORKS PRODUCT IDEA Inquiring minds want to know. :) I'd like """"""""""""""""""""""""""" to find out if there would be any interest in disks of source code and data bases for use with the ORCA languages. In general, what I have in mind is public domain or inexpensive source code and data base files. Each would be provided on a disk, on an as-is basis. I would check to make sure the code compiled under the current version of the ORCA software, but this would not be expected to be commercial quality code. Some code, in fact, might just be useful subroutines, like b-trees. Disks would be full, and low cost -- probably about $10 each. If you would be interested in source code published this way, please post a message. If you like, tell me what sort of stuff you'd like to see available. If you have source code you would like to see distributed this way, post here to let me know. I would pay royalties if you like, but I don't see this as a major revenue earner, and frankly, royalties might not be worth a stamp when you consider that it might need to be prorated, and the cost would be very low. So why would I do this? 1. I'd like to see sample code for a variety of tasts more readily available to Apple IIGS programmers, especially those who don't have access to an online service. 2. I'd like to make some money. :) It ain't much, but every little bit counts. Mike Westerfield (BYTEWORKS, CAT36, TOP3, MSG54/M530) ORCA/C 2.0.1 BUG FIX If you are using varargs in C, check out library """""""""""""""""""" file 3608. It's a fix to the varargs problem in ORCA/C 2.0.1. Thanks to Doug Gwyn for tracking it down! Mike Westerfield (BYTEWORKS, CAT36, TOP11, MSG67/M530) ORCA LINKER PROBLEMS I'm having problems with the ORCA/Linker being """""""""""""""""""" rather un-cooperative. Whenever I try to compile/link this ONE program (via CMPL), the Compiler works fine, but the Linker errors out at the end of the link process: >Pass 1: ...................................... >Pass 2: .................................... > >Error at 00000028 past ~MOVESTRING PC = 00001152 : Unresolved reference Label: ~MOVE >.. >1 error found during link >8 was the highest error level (Note: there is no "MoveString" or "Move" function/procedure in the source) This is a simple, little Pascal program (one load segment) that will be implemented as a Finder Extension. Other than the $RTL directive to make it work, this program contains NOTHING unusual. Not only have I gone through the source code several times looking for potential problems, I've tried re-installing ORCA, and shift-booting to eliminate any possible system problems, all to no avail. My system consists of ORCA/Shell 2.0.2, ORCA/Pascal 1.4.1, and ORCA/Linker 2.0.1, running under System 6.0.1 on a ROM 03 IIgs. Any suggestions on this? Thanks in advance. :) (SNAKEBYTES [Greg B.], CAT36, TOP17, MSG62/M530) >>>>> What is the order of your libraries folder? It should be """"" alphabetical. (SOFTDISK.INC [Bryan Zak], CAT36, TOP17, MSG63/M530) <<<<< Yup. That did it. :) """"" Somewhere along the line the Pascal and Rez language files got switched around, along with my hard drive getting VERY messed up. Good ol' Copy II Plus and Salvation/Deliverance saved the day...AGAIN. Now if I could just figure how to put back all the hair I pulled out. ;) (SNAKEBYTES [Greg B.], CAT36, TOP17, MSG64/M530) USING LIBRARIES I want my program to use the library I have set up. Do """"""""""""""" I have to put the lib file in the library dir, and the .int file in the Pasdef dir? I read in the manual that the pascal compiler will look in the same file as the source, but I can't seem to get this to work. Any thoughts would be helpful... Ken "KAZ" Kazinski (K.KAZINSKI, CAT36, TOP20, MSG21/M530) <<<<< Kaz, there are a number of things you must do, and others you can """"" do, to use your library. The LIB file should be put into the library folder. That's not the only way to make it work, but it's the best. In general, you should organize the library folder so your library file comes first, and all of ours are in alphabetical order. The .int file can go in 13:ORCAPascalDefs or in the local directory. You can even put it somewhere else, but that requires a directive in all of your source. If you are using a pre-2.0 version of the compiler, you'll need to put the .int file in 13:ORCAPascalDefs if you don't want to use a directive in all of your source. If you're having trouble, you might want to get back with details about the actual problem. Mike Westerfield (BYTEWORKS, CAT36, TOP20, MSG22/M530) PRIZM DEBUGGING I need some with ORCA/Pascal/Prizm (v2.0.2). How can I """"""""""""""" get the compiler to display the variable itself, of a procedure, and not its location in the variables window. Also, I want to follow the values that are assigned to an array. I tried to enter each element of the array individually, in the variables window, but I'm alerted that "No variable by that name exists in the subroutine". I've searched through the manual, but to no avail (For me anyways). William (W.RASCHER, CAT36, TOP19, MSG66/M530) >>>>> In any case where you see a location, you're looking at a """"" pointer. As long as the pointer points to something the debugger can display, you can see the value by dereferencing the pointer, as in ptr^. You should be able to see the value of any array element by typing it with constant subscripts, as in a[4,5]. Mike Westerfield (BYTEWORKS, CAT36, TOP19, MSG67/M530) [EOA] [TOU]/////////////////////////////// TOUR OF 8/16 CENTRAL / ////////////////////////////////// The Great Programmers Magazine """""""""""""""""""""""""""""" Chris Budewig [K.FLYNN] I'll Have a DLT On Rye, Please! Included with each issue are two """"""""""""""""""""""""""""""" general-purpose navigation programs called DLT 8 and DLT 16. DLT stands for Display Launcher Thingamajigs, which are text and graphics viewer programs that allow you to page through articles and source code listings, view diagrams, and launch programs & demos. The DLT's included with the first issue were not finished versions, but were completed in later issues and other features were added as time went on. Minimum requirements for these programs are a IIGS for DLT 16, or a 128K //e or better for DLT 8. >> 8/16-Central - July, 1990 - File #3391 (ESC.9007.BXY) << """""""""""""""""""""""""""""""""""""""""""""""""""""""""""" A full directory of all files on each issue of 8/16 and 8/16-Central can be found in file #3382 (ESC.INDEX.BXY). A condensed directory of the contents of this issue is included below. The code letters in parentheses next to each item mean: S : Source code -- what you need to create a program X : Executable program -- you can run this directly! D : Documentation -- tells how the program works and what to do with it A : Article -- explains a subject and probably the source code that demonstrates it /ES.CENTRAL.9007/ ..READ.ME Intro and Welcome ..General/ ....VaporWare Murphy Sewall's industry snapshot and rumor mill ..Classic.Apples/ ....README.8 Description of 8-bit contents! ....MDBASIC.REVIEW SUPPOSED to be a review of MDBASIC (it's empty) ....BBASIC/ (X) Demo of Blankenship BASIC ....SUPER.SELECTOR/ (XD) Neat P8 program selector! ....LASER.BATTLE/ (XD) Lores arcade game in Applesoft (& some assembly) ....SPEECH.RECOG/ (SXA) Hardware project to give ears to your ][ ..IIgs.Stuff/ ....IN.THIS.FOLDER Description of 16-bit contents! ....Copy.cmd/ (XD) Zak's Copy command (v1.0d2.03) ....CDAs/ (XD) ASCII.TABLE - Does this really need explanation? SFSHOWINVISIBLE - Enables/disables the display of invisible files in Standard File dialogs ....Articles/ ......SouthPaw/ (SXA) How to patch tool vectors to change the cursor Also compares the APW and MPW assemblers ......S.Lepisto.JUL/ (SXA) Illusions of Motion 3 ....CoDD/ (SXD) Console Driver Demo - How to access .Console ..IF.GUIDE.DEMO/ (XD) Demo of Shem the Penman's Guide to writing Interactive Fiction! ..DLT8.Source/ (S) How the 8-bit Display/Launcher Thingamajig works! ..Extras/ ....BANKSWITCH/ (S) How to access extra banks of memory on ZRam cards ....ZBASIC/ ......MT.DESK.NO.MOUS(S) ProTools Text Desktop - A desktop done with mousetext! ......DRAW.POLY.SAM (S) How to draw polygons with an arbitrary # of sides ....IIgs/ (S) RezWind - demonstrates how to bypass a bug that USED to exist in the system software ..MT.DESK.DEMO (X) The executable version of the ProTools Text Desktop Check out the article on speech recognition! David Gauger explains how to extend the hardware of your Apple ][ to listen to your voice and accept verbal commands! Also in this issue is Stephen Lepisto's concluding article in his series on animation. In it he explains how to animate objects who's appearance changes as they move. Included with this issue is something that personally helped me understand the console driver. Bryan Pietrzak's Console Driver Demo (CoDD) will show you just how simple it can be to transfer information between your program and the user. And a little comic relief: Two MS-DOS programmers were trying to fix a broken tail light on their car. One stood behind it while the driver activated the turn signal. "Does it work?", asked the driver. "Yes", answered his helper, "No, yes, no, yes, no..." (from Guy Kawasaki's book, "The Macintosh Way" (and also in this issue)) >> 8/16-Central - August, 1990 - File #3392 (ESC.9008.BXY) << """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" /ES.CENTRAL.9008/ ..READ.ME Intro and Welcome ..GENERAL/ ....PUBLISHER.S.PEN Editor's editorial :) ....VAPORWARE Murphy Sewall's industry snapshot ..CLASSIC.APPLES/ ....READ.ME8 Description of 8-bit contents! ....GENERIC/ (SA) Generic SYS file startup code (Merlin assembly) ....ZBASIC.ZEALOT/ (SA) Using LOCAL variables in ZBASIC! Also, how to set the length of a file on disk from ZBASIC ....UNIFORTH/ (XD) Public-domain implementation of Forth ..IIGS/ ....README.16 Description of 16-bit contents! ....ARTICLES/ ......MULTIBANK/ (SA) Apply monitor commands to multiple memory banks ......KBD.LIGHTS/ (SXA) Extended keyboards - how to recognise extended keys in your programs and make the lights (Caps, Shift & Scroll lock) work. ......EXT.CONTROLS/ (SA) The ins and outs of using controls created with _NewControl2 ....NIFTY.LIST.3.0/ (XD) Dave Lyon's VERY useful programmer's CDA A few files are missing from this issue and I thought I should point them out (before they get pointed out to me [grin]). DACDevInit.txt and DebugTips are listed in the README.16 file but aren't actually on the disk. Also, the configure program for Doni Grande's extended keyboard article KBD.LIGHTS was missing, and though it was promised for the next issue, I checked and it wasn't there either. Anyone interested in using Forth? UniForth is a complete public-domain implementation and will let you experience the truly bizarre mental activity that goes with programming in Forth. NiftyList is a MUST have IIGS programmer's utility packaged as a CDA. It will let you examine the insides of your machine in at least fifteen different ways, let you trace through executable code, set a few different kinds of breakpoints and even execute toolbox calls interactively! There are more features, but I can't go into them here or this'd be a VERY long Tour. Just do it. If you decide not to get NiftyList (why?), one of the articles this month (MULTIBANK) shows you how to make your monitor commands apply to multiple banks of memory. So now you can search your entire memory space instead of just one bank at a time. [EOA] [LIB]////////////////////////////// LIBRARY BIT BONANZA / ///////////////////////////////// HOT Files You Can Download """""""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] >>> Misc Files <<< """""""""""""""""" File #3618: STDARG.BXY (GS) Uploaded on 11/1/93 by BYTEWORKS About 2K (d/l time approx. 20 seconds @ 2400 baud) Here's a fix for the vararg problem in ORCA/C 2.0.1. The problem is caused by tighter error checking for casts, but that broke the old stdarg.h. Doug Gwyn provided this alternative, along with a varargs.h that may be useful when proting non-ANSI C code. File #3615: APPIICAT2.8.BXY (ALL) Uploaded on 11/1/93 by S.BEHRENS About 45K (d/l time approx. 4 minutes @ 2400 baud) This is a catalog of development tools available for the Apple // series, both 8-bit and 16-bit, old and new. New version 2.8. File #3605: 3DLOGOMOVIE.BXY (GS) Uploaded on 10/26/93 by D.PIERCE8 About 1K (d/l time approx. 10 seconds @ 2400 baud) This is the source to create a movie of a sphere changing in several ways to demonstrate 3D Logo for the seminar. >>> RTC Transcripts <<< """"""""""""""""""""""" File #3617: SEMINAR.3.BXY (GS) Uploaded on 11/1/93 by BYTEWORKS About 7K (d/l time approx. 45 seconds @ 2400 baud) This is the transcript from the third 3D Logo seminar, held on October 21, 1993. Shrink-It version. File #3616: SEMINAR.3.TXT (GS) Uploaded on 11/1/93 by BYTEWORKS About 14K (d/l time approx. 1 minute 30 seconds @ 2400 baud) This is the transcript from the third 3D Logo seminar, held on October 21, 1993. ASCII text (no compression). >>> Source Code <<< """"""""""""""""""" File #3622: W6.SRC.V2.3.BXY (ALL) Uploaded on 11/1/93 by KEN.GAGNE About 105K (d/l time approx. 11 minutes @ 2400 baud) Source code for Warp Six BBS public domain version 2.3. Requires Merlin 16 or Merlin 16+ to assemble. Includes XModem send/receive, YModem send, and IIgs modem port driver written in assembly language that can keep up with XModem 4K uploads at 19200 bps with LAPM and hardware handshaking and supports up to 38400 bps. File #3609: HPSTATE.SRC.BXY (GS) Uploaded on 10/28/93 by FADDEN About 3K (d/l time approx. 20 seconds @ 2400 baud) This is a short Orca/M assembly file that shows you how to use IPC messages to turn HardPressed on and off. Two routines, InactHP and ReactHP, can be used to inactivate and later reactivate HardPressed from within your programs. >>> A2/A2Pro Special Files <<< """""""""""""""""""""""""""""" File #3624: A2NDX9311DB.BXY (ALL) Uploaded on 11/3/93 by A2.BILL About 16K (d/l time approx. 1 minute 30 seconds @ 2400 baud) An index of A2 RT categories and topics as of November 1, 1993, in AppleWorks database (ADB) form. File #3623: A2NDX9311TX.BXY (ALL) Uploaded on 11/3/93 by A2.BILL About 15K (d/l time approx. 1 minute 30 seconds @ 2400 baud) An index of A2 RT categories and topics as of November 1, 1993, in plain text (ASCII) form. File #3612: OCT30LIBS.BXY (ALL) Uploaded on 10/31/93 by A2PRO.TODDPW About 78K (d/l time approx. 8 minutes @ 2400 baud) This is an AppleWorks 3.0 database of the A2Pro libraries, converted by the GECONV program and sorted by library number (and by file number within each library). This listing was taken on October 30th. >>> Programming Info/Documentation <<< """""""""""""""""""""""""""""""""""""" File #3629: GSLIB.DOCS.SIT R1B (GS) Uploaded on 11/10/93 by A2PRO.GELAMP About 176K (d/l time approx. 15 minutes @ 2400 baud) This is a reupload of the Release 1 GSLib docs. The original upload, file 3593, unarchives fine on the Macintosh but cannot be unpacked by GSHK. This archive can be unpacked by GSHK 1.1, but it MUST be unpacked to a HFS volume. If you have a Mac you should download 3593 instead of this file. Documentation files are in Microsoft Word format, reading with a generic text editor is possible, but it gets a little messy. File #3601: ANSITXTSPEC.BXY (ALL) Uploaded on 10/24/93 by A2PRO.HELP About 10K (d/l time approx. 1 minute @ 2400 baud) This is a collection of two text files designed to show how the IBM ANSI driver can be used, and thus how a term program supporting the ANSI standard should act. It includes information on all of the colors, as well as inverse, underline, bold, underline, and invisible. Enjoy! >>> GNO/ME Utilities <<< """""""""""""""""""""""" File #3637: EDIT.BXY (GS) Uploaded on 11/14/93 by PROCYON.INC About 10K (d/l time approx. 1 minute @ 2400 baud) This is a replacement for the built-in 'edit' command in GNO 2.0. This command accepts multiple filenames; to use it, add the following to your gshrc file: alias edit /bin/edit File #3636: WYSETERMCAP.TXT (GS) Uploaded on 11/14/93 by PROCYON.INC About 2K (d/l time approx. 20 seconds @ 2400 baud) This is termcap entries for Wyse terminals. This will allow GNO programs that support termcap to run properly with a Wyse terminal connected to the IIgs. It will not, however, allow the IIgs to emulate a Wyse terminal. File #3635: CRON2.0.BXY (GS) Uploaded on 11/14/93 by PROCYON.INC About 25K (d/l time approx. 2 minutes 30 seconds @ 2400 baud) cron lets you schedule processes to run at any time or times. This can be used to do such things as fire up late-night GEnie sessions, wake you up in the morning, or delete the contents of a temporary directory. File #3613: GETTTY2.0.3.BXY (GS) Uploaded on 10/31/93 by PROCYON.INC About 33K (d/l time approx. 3 minutes @ 2400 baud) This is a new getty with a serious crashing bug fixed, and a new feature that allows controlling the input line carrier detect is assumed to be on. If you've been experiencing wierd crashes with the multiuser system get this file! >>> A2 University Courses <<< """"""""""""""""""""""""""""" File #3643: LIST.LSSN1.BXY (GS) Uploaded on 11/18/93 by A2PRO.GREG About 44K (d/l time approx. 4 minutes @ 2400 baud) This is the introduction and lesson 1 for the 'List Manager Tricks and Secrets Course' taught by Bryan Pietrzak. File #3642: LIST.LSSN2.BXY (GS) Uploaded on 11/18/93 by A2PRO.GREG About 20K (d/l time approx. 2 minutes @ 2400 baud) This is lesson 2 for the 'List Manager Tricks and Secrets Course'. File #3644: LIST.LSSN3.BXY (GS) Uploaded on 11/18/93 by A2PRO.GREG About 55K (d/l time approx. 5 minutes @ 2400 baud) This is lesson 3 for the 'List Manager Tricks and Secrets Course'. It is the final lesson of the course. >>> develop Programming Journal <<< """"""""""""""""""""""""""""""""""" File #3651: DEVELOP.5.6.BXY (ALL) Uploaded on 11/20/93 by M.DEATHERAGE About 100K (d/l time approx. 10 minutes @ 2400 baud) This archive contains the Apple II content from issues #5 and #6 of _develop_, the Apple Technical Journal. Issue #5 contains 'Scanning from ProDOS,' an article on how to use the Apple Scanner from ProDOS 8 by Matt Gulick, complete with MPW IIgs sample source code. Both issues also contain Apple II Q&A. The source code was archived from an HFS disk due to file name restrictions. File #3650: DEVELOP.4.BXY (ALL) Uploaded on 11/20/93 by M.DEATHERAGE About 89K (d/l time approx. 9 minutes @ 2400 baud) This archive contains the Apple II content of issue #4 of _develop_, the Apple Technical Journal. Issue #4 contains 'Driving to Print: An Apple IIgs Printer Driver' by Matt Deatherage, which explains how to write an Apple IIgs printer driver and comes with 'Picter,' source code in APW or ORCA/M 1.x format for a fully-functional printer driver which saves QuickDraw PICT files to disk. Issue #4 also contains Apple II Q&A. File #3649: DEVELOP.3.BXY (ALL) Uploaded on 11/20/93 by M.DEATHERAGE About 37K (d/l time approx. 4 minutes @ 2400 baud) This archive contains the Apple II content of issue #3 of _develop_, the Apple Technical Journal. Issue #3 contains Accessing CD-ROM Audio Data by Eric Mueller (with source code in Merlin format) and Apple II Q&A. File #3648: DEVELOP.2.BXY (ALL) Uploaded on 11/20/93 by M.DEATHERAGE About 19K (d/l time approx. 2 minutes @ 2400 baud) This archive contains the two Apple II articles (no source code) from issue #2 of _develop_, the Apple Technical Journal. Issue #2 contains 'Demystifying the GS/OS Cache' by Matt Deatherage, and Apple II Q&A. File #3647: DEVELOP.1.BXY (ALL) Uploaded on 11/20/93 by M.DEATHERAGE About 100K (d/l time approx. 10 minutes @ 2400 baud) This file contains the Apple II content from issue #1 of _develop_, the Apple Technical Journal. Issue #1 contains the Apple II Development Dynamo (8-bit MPW IIgs cross-development aids) by Eric Soldan, complete MPW IIgs source code to Dynamo, and Apple II Q&A. >>> Utilities <<< """"""""""""""""" File #3652: COPYFORK.BXY 1.3 (GS) Uploaded on 11/20/93 by RICHARD.B About 8K (d/l time approx. 1 minute @ 2400 baud) New version with diagnostic switch and a bug fix, copies either or both forks of a file from the command box or linker. File #3646: EXPRESSUTIL.BXY (GS) Uploaded on 11/20/93 by RICHARD.B About 60K (d/l time approx. 6 minutes @ 2400 baud) An Express print spooler spool file viewer, and the Express tech note (in Word and ASCII formats). Requires the Express print spooler from Seven Hill Software Corp. File #3620: RESUTILS.BXY (GS) Uploaded on 11/1/93 by M.KLAPP About 30K (d/l time approx. 3 minutes @ 2400 baud) Three ORCA utilities: HEXDUMP dumps either the data or resource fork, RESCHECK reports the number of occurences and total size of a specific resource type, RESCLEAN compacts a resource fork under 6.0. This is a reupload of an earlier upload. A newline was added after the copyright messages to improve readability. File #3600: RJBMERLINS.BXY (GS) Uploaded on 10/23/93 by RICHARD.B About 57K (d/l time approx. 5 minutes @ 2400 baud) This file contains all my Merlin EXEs, conversion utilities, and icons. The dates vary from 1986 through to 1993, but thought it about time they were all uploaded in one file. File #3599: SETOPENMSG.BXY (GS) Uploaded on 10/23/93 by RICHARD.B About 4K (d/l time approx. 30 seconds @ 2400 baud) Allows you to set the Message Center (sic) message type $0001 to any number of pathnames (from a LNK file or OA-O) in Merlin-16+. If your application supports the Message Center, you can now force it to load any number of files when it starts up, instead of manually opening them each time you want to do a quick test. >>> A2Pro BB Message Archives <<< """"""""""""""""""""""""""""""""" File #3653: APPLESOFT1.BXY (ALL) Uploaded on 11/21/93 by A2PRO.GELAMP About 50K (d/l time approx. 5 minutes @ 2400 baud) This file contains archived messages from the A2Pro Bulletin Board Cat 9 Topic 7 'Applesoft BASIC help please!' File #3654: GNO.SHELL.BXY (GS) Uploaded on 11/21/93 by A2PRO.GELAMP About 56K (d/l time approx. 5 minutes 30 seconds @ 2400 baud) This file contains archived messages from the A2Pro Bulletin Board Cat 30 Topic 2 'The GNO Shell' File #3655: LUNAR.ALL.BXY (GS) Uploaded on 11/21/93 by A2PRO.GELAMP About 52K (d/l time approx. 5 minutes @ 2400 baud) This file contains archived messages from the A2Pro Bulletin Board All of the messages from the former Lunar Productions category are contained in this archive. [EOA] [UDU]/////////////////////////////////////// UTILITIES FROM DOWN UNDER / ////////////////////////////////////////// Three Great IIgs Programming Utilities """""""""""""""""""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] Utilities can be a programmers best friend. Having the right utility can save hours of valuable time and energy and save precious sanity. Australian programmer Richard Bennett has created three fantastic freeware programming utilities for the Apple IIgs: ResLin, Pixie andIPCSpy. Below we'll take a look at what these utilities do and why they make great additions to your library. >>> ResLin <<< """""""""""""" (A2Pro Library File 3553) ResLin is a general purpose resource utility. With ResLin you can load the resources present in a file's resource fork and edit/view them. When you load a file, all of its different resources are displayed in a list. You can edit rText, rPString, rCString, rVersion and rComment resources. ResLin can also view other resource types such as rIcons. In addition to providing editing and viewing capabilities for specific resource types, ResLin also lets you manipulate any resource in several different ways. You can edit the name, type, ID and attributes of any resource in the resource fork. ResLin offers several other handy features, such as the ability to copy resources between files, import resources from the data fork of a file, delete a file's resource fork, remove duplicate resources in a resource fork, and compact a resource fork. Although ResLin cannot edit all resource types, it is expandible. ResLin supports external editor modules which allow you to edit resource types not supported by the main ResLin program. Programming information for external modules is included with the ResLin program. ResLin is an extremely useful utility which no IIgs programmer should be without. >>> Pixie <<< """"""""""""" (A2Pro Library File 3567) Pixie is a powerful CDA with unique features that make it an invaluable debugging aid. Pixie has numerous features for viewing the contents of memory. Pixie is not limited to simply viewing memory; it can also display handle information, find memory ownership, view structures in memory, and more. With Pixie you can view structures like GrafPorts and window records, as well as other toolbox data structures. Pixie has variables that keep track of information such as current GrafPort locations, interrupt handlers, handle and ID lists, and other frequently-used routines and locations. Pixie even supports searching memory for specific data and allows memory editing in the fashion of a disk block editor. Printing is also supported. Like ResLin, Pixie can be expanded with external modules. Although Pixie is a complicated tool, the effort required to learn its use pays off in the time saved while tracking down difficult bugs. >>> IPCSpy <<< """""""""""""" (A2Pro Library File 3566) Apple IIgs System Software 6.0 added a powerful new programming tool to the Tool Locator, Inter Process Communication (IPC). IPC gives programmers a standard means for sending messages between routines and programs. Many programs, INITs, desk accessories, and portions of the system software send and receive IPC messages. With the large number of IPC messages being sent around the system, a utility for monitoring IPC traffic becomes essential for debugging and informational purposes. IPCSpy is such a utility. IPCSpy is a CDA that allows you to take snapshots of IPC activity and save them. Not only does IPCSpy capture the raw data, but it will format the parameters according to IPC message templates making messages much easier to decipher. If you use IPC or are curious about how everything communicates, IPCSpy is a great utility to have. [EOA] [CAM]////////////////////////// CAMPUS GREEN / ///////////////////////////// A2 University News """""""""""""""""" By Nate Trost [A2PRO.GELAMP] A great new course has started at A2 University! Programmer Bryan Pietrzak of Softdisk Publishing has started an exciting new three-part A2U course on the Apple IIgs List Manager. If you've ever wanted to know everything there is to know about the List Manager, be sure and download the lessons! LESSON 1: #3643 LESSON 2: #3642 LESSON 3: #3644 >>> COURSE OUTLINE <<< """""""""""""""""""""" 11/14/93, Introduction: - Introduction - Course Outline - How I Plan to Teach This Course - Where to Find List Manager Documentation - Glossary of List Manager Terms 11/21/93, Lesson 1: The Basics - Introduction - Coding a Static List Control - Handling Events in a List Control - Accessing a List's Member Records - Finding Out Which Members Are Selected - Select All and Select None - Sorting - Conclusion 11/28/93, Lesson 2: Custom Lists - Introduction - Coding a Custom Static List Control - Custom List Drawing - Custom List Sorting - Conclusion 12/5/93, Lesson 3: Dynamic Lists - Introduction - Keeping House For Dynamic Lists - Adding and Deleting Member Records - Changing a Member - Course Conclusion That's it folks, less than 7,000 words of text and less than 2,000 lines of source and you'll be an expert on the List Manager! [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 GEnieLamp is also distributed on CrossNet, Internet, America Online, Delphi and many public and commercial BBS systems worldwide. o To reach GEnieLamp on Internet send mail to genielamp@genie.geis.com OR jpeters@sosi.com o Our Internet anonymous FTP address is: sosi.com. All current versions of GEnieLamp are available in the ~/pub/GEnieLamp directory. Due to the added expense involved, we ask that when you get GEnieLamp via the anonymous ftp for GEnieLamp, that it _not_ be ftp'd during the hours of 9AM and 5PM Eastern Standard Time. We appreciate your cooperation in this matter. o Current issues of all versions of GEnieLamp as well as back issues of GEnieLamp IBM 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 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 us "live" talk to us every Wednesday night in the Digi*Pub Real-Time Conference, 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] EDITOR """ o David C. Leithauser [D.LEITHAUSER] HyperRead Editor o Brad Biondo [B.BIONDO] IBM Staff Writer o Tippy Martinez [TIPPY.ONE] IBM Staff Writer o David Holmes [D.HOLMES14] IBM Staff Writer o Don Lokke [D.LOKKE] Cartoonist MACINTOSH o Richard Vega [GELAMP.MAC] 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] ST EDITOR """""""" o Mel Motogawa [M.MOTOGAWA] ST Staff Writer o Sheldon Winick [S.WINICK] 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 o Sandy Wolf [S.WOLF4] 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 Tara Dillinger [TARA] Co-Editor o Phil Shapiro [P.SHAPIRO1] A2 Staff Writer o Mel Fowler [MELSOFT] A2 Staff Writer o Darrel Raines [D.RAINES] A2 Staff Writer o Gina E. Saikin [A2.GENA] A2 Staff Writer o Steve Weyhrich [S.WEYHRICH] 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 Bruce Maples [B.MAPLES] Copy Editor o Mike White [MWHITE] (oo) / DigiPub SysOp o Susie Oviatt [SUSIE] ASCII Artist \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// 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 does 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 1993 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: XTX99014,DIGIPUB and hit the [return] key. The system will then ask you for your information. Call (voice) 1-800-638-9636 for more information. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// [EOF]