Skip to main content

Open Apple Vol 5 No 10 NOV 1989

  • PublicationApple Periodicals
  • Date1989-11-01
  • Pages8
  • SourceOpen_Apple-Vol_5_No_10-NOV_1989.pdf
← Magazines Open Apple Vol 5 No 10 NOV 1989
/ 8
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
-Central 1 A journal and exchange of Apple If discoveries formerly Open-Apple i; November 1989 Vol. 5, No. 10 ISSN 0885-4017 newstand price: $2.50 photocopy charge per page: $0.15 Quick and dirty database We're getting data-base hungry here. We use commercial database programs for many chores, but we have applications where we need to be able to manipulate a large amount of data with a large number of fields under program control. In most cases, the size of the database a commercial product will handle is not the problem; the limitation we run into is the "programmability’ of the database. We're interested in finding something that has the following characteristics: + The size of the data file should not be limited by memory. + The data files should be reasonably compact. * The data files should be in a standard text format. + The full ASCII character set must be supported. + Access for daily use should be acceptably fast. + The commands and the data format should be extensible. + It must be able to be script-driven. The stumbling block has been the ‘script driven’ item; we'd like to find something like Ashton-Tate's dBASE program running under Pro- DOS or GS/OS on an Apple 1]. Many other things will be needed, of course; sort routines, data import/export and report generation, and possibly relational capabilities. But the initial challenge is to took at this list and see how much of it can be prototyped up ‘quick and dirty’ so we can test our model before we commit to any Jarge-scale devel- opment. The prototyping sounds like a job for Applesoft. Applesoft has a few limitations that affect this list. Access speed may become a problem for a large file if we do anything labor inten- sive such as searching all fields of all records, or trying to sort the entire database. With even a simple program running, though, the lim- itations can be examined. Let's do it right now. One problem we'll quickly encounter is that Applesoft's ‘INPUT’ statement is a little sensitive about colons and commas. We pub- lished an ‘input anything’ routine in September 1985, with some bug corrections in the October 1985 issue. This time, to keep the test pro- gram small and simple, we're going to modify the data so that the ‘input anything" routine isn't needed. By beginning each data item with a quotation mark, Applesoft's INPUT will accept all printable ASCII characters In the item up to the carriage return (the character normally used to indicate the end of the item) or a second quote mark, whichever is encountered first. We can live with this limitation for our testing purposes. The experiment begins with data culled from an AppleWorks data base file of audio recordings. Each database record consists of two fields: the recording's artist and title. The data was printed to a text file and a quote mark was added to the first of each line. Two records of the data look like this: "Bush, Rate "Lionheart "Bush, Rate “Whole Story, The Those of you who are interested in programming using text files may be familiar with the two types of organization BASIC.SYSTEM uses for those files: sequential and random access. In sequential text files, each data item is stored immediately following the preceding item. if we Indicate a carriage return character with a '-", then our two records stored sequentially look like this: "Bush, Rate-'Lionbeart-'Bush,. Kate'Whole Story, The Using the random access method, on the other hand, each record is given a fixed length. The fields for the record are stored sequential- ly, and any unused space remaining in the record is padded with something. If we use a ‘A’ for padding, for example, then our two records stored in a random access file with a record length of 30 would took like this: "Bush, Kate-'Lionheart-\MMA"Bush, Rate-"Whole Story, The- (our second record is exactly thirty characters in length). The advantage of a random access text file is that to locate record number ‘n’, you only have to multiply the record number by the record length (assuming we call the first record in the file record ‘0'). BASIC.SYSTEM does this for you automatically when you specify a record number while reading from or writing to a random access file. On the other hand, by keeping the data in a sequential text file, space is saved over the use of a random access text file; every record in the random access file must be at least as long as the longest record in the file. Records that are shorter than this fixed maximum length will waste storage space. For the 125 records in the test data used, the average record length was 29.832 bytes, The longest record was 61 bytes, and the smallest was 8 bytes. A sequential text file with the data was.3729 bytes; an equivalent random access file would be over twice as long at 7625 bytes. Our initial quest is to find a way to do basic operations (read a record, add a record, delete a record) on a disk-based data file with a compromise between acceptable performance and manage- able file size. The conventional wisdom for accessing data In the middle of a sequential text file accepts that you read and discard the preceding data. Programs such as AppleWorks manage their sequential data by loading it all into memory at once; the advantage to this method is that data in RAM can be accessed faster than data on a disk so the "read and discard" operation is quick. But this also limits the size of your database to the size of available RAM. To remain disk-based, we need a sequential text file that allows us to locate the start of any [a Lest Files ~~ yeu TH 15 A \ FINAL DRAFT CF 5.74 A2-Central record in the file without having to read the intervening data. The answer is to create a second text file which will be‘an index file to our data. We can read the sequential text file one time and create a table.of pointers that tell us at what byte offset each new record in the datarfile begins. We write this data into a random access text file that can be accessed quickly. This is a simple example of a technique called ISAM; the abbreviation stands for ‘indexed sequential access method’. By index- ing the sequential text file, accessing a specific record is performed by getting the index value for the record of interest from a ‘table’, jumping to the indexed point in the data file, and reading the record's data, Since a table of numbers pointing to positions within a file is often more uniformly sized data (varying only a few bytes in length) than information such as names or book titles, there isn't much of a penalty for using a random access file to hold the table. The limit for a ProDOS file is 16 megabytes, so a record length of 9 (8 bytes for the maximum pointer value of "16,777,215" expressed as an ASCII string, plus a carriage return) will suffice for the index file. BASIC.SYSTEM's Ie file commands include the ability to move to a specific byte in a file. Working from this file model, we begin the exercise by defining a few standard variables: 1100 REM --- set up standard values --- 1110 D§ = CARS (4); REM obligatory Coatrol-D 1120 NPTELDS = 2: DIM FS(NPIELDS) ; REM tvo fields/record 1130 DBS = "COLIST*: RIM data file 1140 IDXF$ = "CDLIST.1"; REM index file NFIELDS holds the number of fields in each record; two for our test data. F$(n) will be used to hold the data for field number n. DF$ and IDXF$ are our data and index file pathnames, respectively. Next, we want to open our workfiles and collect any additional information needed regarding them. One piece of necessary informa- tion is the end-of-file (EOF) value for the data file; when a record is added, this will become the index to the new record. There's no easy way to extract this value purely by using BASIC, so we manipulate BASIC.SYSTEM’s MLI interface to pass us the EOF after we open the datafile and PEEK the value from the BASIC.SYSTEM global page: 1160 REM --- open each file and get EOP and record count --- 1170 PRINT D§; "OPEN ";DE$ 1180 PORE 48839, PEBX (48848): REM move file ref number to parm list 1190 RESTORE : FOR I = 768 TO 778: READ SV: PORE 1, BV: NEXT I 1200 DATA 169, 209, 32, 112, 190, 141, 10, 3,24, 96,0 1210 CALL 768: IF PEER (778) < > 0 THEN STOP 1220 BOF = PEEK (48840) + PHEK (48841) * 256 + PEEK (48842) * 65536 These lines create and run a small assembly language routine that gets the EOF for us. Another necessary value to know is the number of accessible records in the datafile. This program is designed to maintain that value in record number 0 of the index file, and reads it into the vari- able RC at the start of the program for future reference: 1230 PRIN? DS; "OPEN ";IDKF$:", LO” 1235 IF EOF = 0 THEN RC = 0: GOTO 1280; REM no records if “null” file 1240 PRINT CARS (4); "READ "; IDKF$;",RO" 1250 INPUT "";RC 1260 PRINT DS To be functional, the data base needs to perform a few simple commands. The minimum operations we determined to be necessary for experimentation were adding new data, removing obsolete data, and reading any record from the file. There are many Obviously useful enhancements that could be added: sorting the data, searching the data, printing reports, editing existing data, and so on; but reading, adding, and removing records in the database file are the basic build- ing blocks, Our command interpreter will allow the user to ‘display’, ‘add’, and "remove" records, In addition, we add the capability of ‘packing” the data records (purging any records marked as 'removed), and ‘quit- ing’ the program. The format selected is simple; each command is represented by a single character ('D', A’, °K’, 'P’, or "Q’) followed by a record number for the display and remove commands. For example "D100" would display record number 100, ‘A’ would add a new Vol. 5, No. 10 record, and 'K100* would remove record 100; 1280 RAY --- bargain basenent comand interpreter --- 1290 INPUT "Command?>"; CHD$ 1300 IF LEN {CHD$) = 0 THEN 1390 1310 C$ = LEFTS (CHD$,1) 1320 TF LEN (CMDS) > 1 TERN R= VAL ( RIGETS (CHD, LEN (CMDS) - 1)) 1330 IP C$ = "A" OR C$ = "a" THEN GOSUB 1790; GOTO 1290: REM add new record 1335 TF'RC = 0 THEN GOTO 1370: ROM display, renove, pack invalid 1340 TF C$ = "D" OR C$ = "4" THEN GOSUE 1540: GOTO 1290: REM display 1350 IF C§ = "R" OR C$ = "x" THEN GOSUB 1540: GOTO 1290: REM remove record 1360 IF C§ = "P" OR C$ = “p" THEN GOSUB 1920: GOTO 1160; REM pack 1370 IF C$ = "Q" OR C$ = "q" THEN GOTO 1480: REM quit 1380 PRINT In case a command is not recognized, a reminder is printed to the screen: 1390 PRIM? SPC( 5);"Valid comands are:" 1400 PRINT SPC( 10);"A - add new record" 1405 IF RC = 0 THEN GOTO 1440: REM display, remove, pack invalid 1410 PRINT SPC( 10);"Dn - dieplay record fn" 1420 PRINT SPC( 10);"Rn - remove record #n" 1430 PRINT SPC( 10);"P - pack database" 1440 PRIVT SPC( 10);"Q - quit program” ‘1450 PRINT 1460 GOTO 1290: REM loop back for next CHDS This command interface isn't very ‘user friendly’; for now we'll use the excuse that this is only a test. Designing a user interface is one of the more tedious parts of writing a program, and deserves more care than we're willing to commit to our experiment at this stage. "A'dding a record requires a subroutine to accept data for the new record, write the data to the data file, add the pointer to the data to the index file, and update the record count. New data is entered from the keyboard in a loop that uses INPUT to read keyboard data Into each field variable F$(n): 1790 REM --- handle adding record --- 1800 PRINT SPC( 5) "Adding new record..." 1810 FOR F = 1 10 NPIELDS 1820; PRINT SPC( i0);"Field ":F;": "; 1830: IMPOT "";FS$(F) 1840: NEXT F 1850 PRINT When the data entry is complete, a subroutine to write the data is called. When it returns, the new record is acknowledged and ‘A'dd returns to the command processor: 1860 PRINT SPC( 5);"Please wait; writing new record...” 1870 GOSTB 2180 1880 PRINT SPC{ 10);"Record ";RC;" added." 1890 PRINT 1900 RETURN The new data will be appended to the end of the file. BASIC.SYS- TEM does have an APPEND command, but the EOF must be known to the program for the index values. Since EOF is always available in the program, the BASIC.SYSTEM "R'ecord and ‘B'yte parameters are used with READ and WRITE to move BASIC.SYSTEM's position-in-file pointer. "RO" (the first record in the file) is specified to give BASIC.SYSTEM a definite reference point, but the real offset is determined by using EOF as the ‘B’yte offset in line 2190. Adding the new record requires us to increase the EOF value by the length of the fields added in the loop of lines 2210 through 2240 (the math is handled in line 2230), Then the record count RC is increased by | and the pointer to the start of the new record is written to Its place (record RC) in the index file in line 2260, and the new record count is written to record 0 (lines 2280 and 2290). 2180 REM --- write (append) new record --- 2190 PRINT D$;"WRITE ";DPS;",RO,B"; BOP 2200 PIR = EOP! REM we'll update BOF as we go 2210 FOR F = 1 10 NPIELDS 2220 : PRINT CERS (34); FS (EF): REM precede with quote 2230 :EOF = EOF + LEN (FS(F)) + 2: REM update file length 2260 : NEXT F November 1989 2250 RC = RC + 1: REM new record count 2260 PRINT D$;"WRITE "; IDXF$;",R";RC 2270 PRINT PIR: REM write record's index 2280 PRINT D§; "WRITE "; IDXF$;",RO" 2290 PRINT RC: REM write new record count 2300 PRINT DS 2310 RETURN "D'isplay and "R’emove are both dependent upon a record num- ber passed in variable R. A single routine is called to check for a valid record number (line 1550); if the record number is correct then the “D'isplay operation (lines 1600 through 1660) is performed in either case to show the contents of the record requested: 1540 REM --- handle display (and renove) --- 1550 IF R> 0 aNDR< = RC THEN GOTO 1600 1560 PRINT 1570 PRINT SPC( 5); "Sorry; record number ";R;" is invalid.” 1580 PRINT $PC( §);"The current range is 1 to " 1590 GOR 1700: REM skip display 1600 GOSUB 2080: REM get record data 1610 PRINT 1620 PRINT SPC( 5); "Record 4";R;": 1630 FOR F = 1 10 NPIELDS 1640: PRINT $PC( 10); 7$(F) 1650; NEXT F 1660 PRINT The display subroutine reads the index pointer for the indicated record (lines 2090 and 2100), uses the pointer in conjunction with "READ" to position itself at the start of the record in the data file (line 2110): 2080 REM --- read record R --- 2090 PRINT D$;"READ "; IDXP$;",R";R: REM from record R of index 2100 INPUT "";PIR: REM get pointer to record R of data 2110 PRINT DS;"READ ",DFS;",RO,B";POR: REM point to record 2120 FOR F = 1 TO WPTELDS 2130 ; INPUE S{P): REM read data 2140 : NEXT F 2150 PRINT DS 2160 RETURN Line 1670 confirms only ‘D'isplay was requested. If not, lines 1680 through 1690 confirm that the displayed record should be marked as ‘removed’ and perform the exorcism by calling other subroutines: 1670 IF C$ = "D" OR C$ = “d" THEN COTO 1710 1680 PRINT SPC{ 5): INPUT "REMOVE THIS RECORD? (1/N): "y 1690 IF RFT} (a$,1) = "Y" OR IEPTS (AS,1) = "y" THEN GOSUB 1730 1200 PRINT 1710 RETURN The ‘R'emove subroutine displays some status information as it calls the routine to actually remove the record: 1730 REM --- handle remove --- 1240 PRINT SPC( 5);"Removing record; please wait..." 1750 GOSUB 2330 1760 PRINT SPC( 10);"Record marked as removed." 1770 RETORN ‘Deletion’ from any place other than the end of the sequential file is tricky. Our ‘remove’ command avoids the issue by removing the pointer to the record from the list of "active’ pointers in the index file, and the data is left intact in the sequential file until we do some spe- cific house cleaning at a later time. Unlike a random-access file, the record length within our sequential data file is not constant, and there's no guarantee that a new record written in the position of a record previously removed is going to be the same size. If the new record is smaller there is no problem; just a little "dead space" amounting to the difference of the deleted record's length in comparison to the record that replaces it. If the new record is longer, then a major catastrophe occurs: the new record will over- flow the gap left by deletion of the old record and will write over the beginning of the record which follows the deleted record in the file, destroying it. Avoiding this wholesale destruction of data is the reason for adding A2-Central 5.75 new records to the end of the data file, and this causes another dilem- ma: as records are deleted, the amount of ‘dead space’ in the file grows. This is a drawback of the sequential organization of the data file. Still, random access files have a tougher problem if the length of a new record should happen to exceed the record length specified when the random access file was created. In the case of random access file, either the offending record has to be cut off to fit in the available space, or the contents of the file must be copied to a new file with a sufficiently larger record length (and corresponding increase in disk space used). This program removes the reference to the record by moving the record's index pointer to the end of the index file and decreasing the number of ‘active’ records by one, which puts the pointer ‘out of reach’ of the commands using the ‘RC' value. Once the pointer is removed from the table of available records, the ‘removed" record (which still exists in the data file) is not accessible to the program. If the data to be deleted (and therefore its index pointer) is at the end of the file, the program skips to the routine to adjust the record count: 2330 REM --- delete record R (from index) --~ 2340 PRINT D§; "READ "; IDXP§;",R";R 2350 INPOT "";SPTR; REM save pointer 2360 IF R= RC THEN GOT 2450: REM special case for last record If the record is not the last record in the file, then its index pointer is saved, all the rest of the pointers are moved to ‘compress’ the index file: and the saved pointer is written to the last record of the index file: 2370 FRI=RMR-1 2360 ; PRINT D$;"READ ";IDXP$;",R";1 + 1 2390: INPUT "";PER 2400 ; PRINT D$;"WRITE ";IDXP$;",R";T 2410 : PRINT PIR 2420 : KEXT I 2430 PRINT D$;"WRITE ";IDXPS;",R";RC 2440 PRINT SPTR: REM save “deleted” pointer Then the record count value is reduced by one and saved; 2450 RC = RC - 1: REM mark as deleted 2460 PRINT D$;"WRITE ";ZDXPS:”,R";0 2470 PRINT RC; REM update “valid” record count 2480 PRINT DS 2490 RETURN Note that 'A'dding a new record will cause the pointer for the last record ‘removed’ to be overwritten and lost. If you prefer, the pointer (and even the data record it points to) could be copied to new files so that a database of "removed" records is maintained. Even in the event that the pointers are lost, a "recovery" program can be written to scan the data file to see if records exist other than those the index files indicates; if so, the recovery program can reconstruct the index point- er entry for a "hidden" record. We leave this as an exercise for the reader, "P'acking the active records purges the ‘dead space’ and the associated data from the files. The first thing the program does is con- firm that the user really wants to do this: 1920 REM --- handle pack conmand --- 1930 PRINT 1940 PRINT SPC( 5); "PACKING WILL PURGE ALL 'REMOVED' RECORDS!" 1950 PRINT gPC( 5): INBUE "Is this what you want? (Y/N): "JAS 1960 IP LOFTS (AS,1) = "¥" OR LEPT$ (A$,1) = "y" THEN GOSUB 2000 1970 PRINT 1980 RETURN The ‘Pack subroutine maintains a safety factor by creating new workfiles and copying the ‘active’ data from the current files into the new files. It then tries to rename the original files with names ending in *.OLD’. If something goes wrong during the packing but before the renaming operation, the original data will either be available under the original filenames. If the 'P'acking operation completes but the new files don't seem to work, they can be deleted and the ‘“.OLD' files renamed to recover the original data. If the "P'acking operation is suc- cessful, the ".OLD' files need to be deleted or renamed so they don't 5.76 A2-Central interfere with the next ‘P’acking information: 2000 REM --- pack prompting --- 2010 PRINT 2020 2030 2040 PRINT SPC{ 5}; "Please wait; packing data and index files..." Gost 2510 PRINT SPC( 10); "Packing done. Rename '.OLD' files before” 2050 PRINT SPC( 10);"the next packing operation." 2060 RETURN To transfer the data, two new files (one for the index pointers, one for the.data) ending in ".NEW" are opened: 2510 purge/pack data/index files --- 252) PRINT D§; "OPEN ";DP$;". NEW" 2530 PRINT D$; "OPEN "; IDXP$;".NEW, 19” Then an ‘update end-of-file’ variable UEOF is assigned to hold the length of the new sequential data file (‘0° when newly opened, of course). The index pointer for each active record is read, and the update file's index pointer (UPTR) is set equal to UEOF, the current EOF for the update file. Each record's data is transferred to the new file, UPTR is written to the new index file to mark ‘the record's posi- tion, and UEOF is adjusted by the lengths of the record's fields. 2540 :UROF = 0: REM we'll update this as we go 2550 FOR R= 110 RC 2560 : GOSOB 2080: REM read record R 2570 :UPTR = UEOP: REN pointer for update file 2580 : PRINT D$;"WRITE ";DF$;".NEW" 2590 ; FOR F = 1 10 NETELDS: REM write to new file 2600 PRINT CHRS (34) F$(P) 2610 ::UBOP = UEOF + LEN (FS(F)) + 2: REM update update EOF 2620 :: NEXT P 2630 + PRIWT D$; "WRITE ";IDXPS;".NEW, R";R 2640 : PRINT UPTR: REM index for record in new file 2650 : NEXT R Now the record count is written to the new file; 2660 PRINT DS; "WRITE "; TDXPS;" NEW, R";RO 2670 PRINT RC: REM write record count Finally, the original files are closed. The original files are renamed to mark them as the ".OLD" versions, and the ".NEW’ files are renamed to match the original file names to become the working files. When the subroutine returns to the command processor loop (line 1360), a GOTO 1160 passes control to the initialization point of the program. 2680 PRINT D$;"CLOSE": FEK so we can do renanes 2690 PRINT DS; "RENAME ";DFS;",";DE$;" OLD" 2700 PRINT D$;"REMAME ";DP$;" NEW, ";DP$ 2710 PRINT DS;"RENIME *;LOKrS;", “TONES” CLD" 2720 BRUNT DS; "RENAME "; IDXP$;" NB, ”; IDKES 7730 REM (we'll re-open the files ven ve return) 2740 RETURN The only remainil say goodbye, and end: 1480 REM --- handle quit --~ 1490 PRINT D$;"CLOSE” 1500 PRINT 1510 PRINT "See you later." 1520. PRINT D§; "BYE" Finally, we have the obligatory disclaimer: 1000 REM === BASIC database = 1010 RBM by Dennis Doas 1020 ROM published in the November 1989 issue of A2-Central 1080 REM this program is plaved in the public domain The program is very (no pun intended) basic. Error-checking is min- imal, and recovery is near nonexistent. It's intended as a skeleton from which to build more detailed and possibly even specialized pro- grams. The data format can be extended by using data fields to refer to records in other files (see ‘Making AppleWorks relational’, June 1987). Commands can be added simply by adding them to the com- mand processor along with the necessary program code. Access speed tests were run with a larger database of 3430 command is "Quit. All it does is close all files, Vol. 5, No. 10 records with 10 fields per record, and compared with access to the same data in a random access file. The average record length was about 99.6 bytes (the maximum was 120, the minimum 66). One hundred record numbers were generated at random, and a test pro- gram timed how long it took to position to the start of each of those 100 records on average. It averaged about 90 milliseconds for the random access file; about 170 milliseconds for the indexed file if the record indices were stored in memory, and about 210 milliseconds if they were read from the index file on disk (the disk used was a Chi- nook CT-30 hard drive interfaced with an Apple If SCSI card), Whether cutting the access speed in half is worth the savings in disk space is something that has to be decided for each set of real data. If you think the design choice of the command line routine is total- ly undesirable, ponder this for the future: as written, the program can be directly driven with a BASIC.SYSTEM EXEC file. And there is noth- ing to prevent the principles from being applied to a program for another environment, in another language. It wasn’t designed as a IIgs Desktop program, but there's nothing to impede that style of impie- mentation. ISAM has some disadvantages; the most apparent is that packing the database is a time-consuming operation, If changes to the records already in the database are infrequent, though, the need to pack the database is infrequent. We anticipate that in our applications the packing won't be necessary any more often than we need to back up the database, and the method of packing outlined in this article actu- ally combines both operations. By using an index file, we can even split our database into multiple files; for example, to fit on smaller disk volumes if a hard disk isn't available. Once the index value for a record is found, it can be com- pared to the known maximum filesize for a volume; if it exceeds that maximum, we calculate which file we need and ask the user to insert the proper disk if necessary. This also gives us a way to deal with Pro- DOS's 16 megabyte file size limit if our data requirements ever exceed il by modifying the index file to hold numbers larger than 16 megabytes. -DJD AppleFest San Francisco High points of San Francisco's September Applefest included the crowds that continue to pack Brooks Hall and the Civic Auditori- um (over 19,000 people attended the show); sneak previews of some upcoming GS/OS desk accessories during the keynote speeches given by Jean-Louis Gassee and Bernard Gifford; and the first meeting of the Apple II Developers Association. Low points included Gassee pub- lically blaming the hardware speed limitations of the Apple IIgs on the Western Design Center; the absence from the exhibit floor of the world's largest Apple SI software company, Claris; and a general lack Of breathtaking new products. The new desk accessories include one that enlarges the GS/OS graphics screen two, four, or eight times for visually impared users; one that allows entry of keystrokes using only a mouse or a special headset and puff switch, for disabled users; and one that allows a VCR to be used to show short segments of video material on com- mand, much like a laserdisk. Claris says its marketing dollars are better spent on direct mail. This is a sensible thing for a small company to say, but it’s non- sense coming from Claris. The company making most of the software sales in the Apple Il third-party community has an obligation to sup- port the Apple Il. Period. Gassee's outburst followed a question from the floor about the lack of a faster IIgs. Clearly he is tired of Apple taking the biame for this. When he pushed the blame off on the Western Design Center, however, that company's president, Bill Mensch, said the problem was that Apple had refused to work with him since the Iigs was intro- duced. [t's impossible to fiqure out who's right here, but it's easy to see the deadlock between the two companies isn't doing the Apple II any good, Apple will either have to learn to work with Mensch or learn how to build its own faster 65816 microprocessor clone if we're ever going to see a faster ligs.-TW November 1989 Ask (or tell) Uncle DOS Corrections and amplifications Laraine Toms, Claris Product Manager for DataFtow Computer Services in Australia, wrote to correct our statement that the AppleWorks 3.0 ‘no disk’ upgrade will be available in Aus- talia (‘AppleWorks 3.0 upgrades’, September 1989). Dataflow supports the AppleWorks 3.0 upgrade in Australia and is responsible for sending details to those Australian customers that sent checks to Claris USA along with the A2-Central coupon as their checks are retumed, but the ‘no disk’ offer will not be valid there.-DJD Apple Il association The last couple of issues of A2-Central and The Sourceror's Apprentice have mentioned the formation of an Apple II Developer's Associa- tion. 1 have seen little more in either publication other than acknowledgement of its formation. | am interested in joining such an organization. | would appreciate information on how to directly contact the organization, membership require- ments, cost, and specifics about the organiza- tion’s objectives and benefits. Jerry L. Lewis Loveland, Colo. At the moment, there is no fonnal organiza- tion, no membership requirements, no dues. If you'd like to be on the group's mailing list, send your name, address, and phone number to Apple il Developers Association, c/o Stone Edge Technologies, PO Box 3200, Maple Glen, PA 19002. The goals for the organization are: « To encourage Apple Computer to promote the Appie i! * To promote the Apple il via the Associa- tion itself + To represent the needs and concerns of Apple 1! developers The organization is intended for people making a living using the Apple I1.-TW Problems Solved The great battery debate for the IIgs is over. The “new’ figs machines have a clock battery in a snap-out holder. Vern L. Mastel Bismarck, N.D. 1 was pleased to note that with System 5.0 most IIgs Desktop programs now handle the higher ASCII part of the character set automati- cally. This being part of the new system, with AppleWorks GS you need merely hold down the Option key while typing a letter and you get a different character—and it will handle accents correctly as well! For example, in Geneva to type Mossbauer you get the 6" by typing ‘Option-u’ (nothing appears) then typing ‘o’ Similar methods gener- ate the other accents. This depends upon the font chosen, of course. There is one problem: It causes the spelling checker some difficulties! This is a vast improvement among the other improvements. On a sadder note, it appears that Call- AP.P.L.E. has shifted to a quarterly - according to my correspondence with them. This is an unfortunate step as it is one of the few worth- while Apple Il magazines available. It is even more unfortunate that this occurred without any notification. I can only suppose it Is due to a lack of advertising revenue. | think this is a major loss to the Apple II world. Stephen Harker Oakleigh, Vic. The Ilgs System Software ‘Option’ key han- dling of the alternate ASCII characters (ASCII values 128-255) is selectable from the Control Panel NDA; the Alphabet CDEV has translation options of ‘Standard* (the option key transia- tion) or ‘None’. if other programs that depend on option key sequences dont seem to recog- nize ‘option <keystroke>" with System Software 5.0, try the ‘None’ seiting. TechAlliance’s change of Call-A.P.P.L.E. to a quarterly follows a similar change in format for their Macintosh publication (formerly there was the monthly Mac Horizons, now there's Mac Tech Quarterly). Based on the first issue of the quarterly Call-A.P.P.L.E. that we've seen, the information content is stili there, but the quarterly format lets them print large arti- cles without having to break them into pieces.-DJD. Installation problems Today | received the two A2-Central disks with the packed GS/OS System Software 5.0 files and proceeded to install it on my hard disk, which has the last version on it. When try- ing to install "Update System Files’, I received an error of ‘File Not Found’. My final solution was to delete the Epson driver, and then copy the files not found into the Fonts folder. The four fonts necessary to keep the Installer going were: 1) Helvetica.10, 2) Helvetica. 12, 5) Times.10, and 4) Venice. 14. Apparently the Installer expects to find these files on the /System.Disk, and won't proceed without them. Dennis Fay Levering, Mich. AppleWorks time display Will some kind person write an AppleWorks 3.0 patch to display time, date, and day of week at the menus and applications like soooo many PC programs do? Ralph Oshiro Manhattan Beach, Calif. John Link's SuperPatch 6.1 includes two clock patches; one specifically for the llgs, and one for any ProDOS-compatible clock card. SuperPatch is now published by Q-Labs, Quali- ty Computers, 15102 Charlevoix, Grosse Pointe, Mich. 48230, 313-331-0700, 1-800- 443.6697, it's $39.95.-DJD A2-Central 5.77 More BASIC conversions The BASIC Book by Hany Helms is published by McGraw-Hill Book Company, 1221 Avenue of the Americas, New York, N.Y. 10020 (ISBN 0-07- 027959-4). It is a convenient guide to BASIC as used by Apple, Atari, Texas Instruments, Com- modore PET, IBM, and Radio Shack personal computers. The commands and syntax for each version of BASIC are covered, including examples in many cases, Commands, statements and func- tions are listed alphabetically, from ABS to XOR. There is also a handy cross-reference chart for determining in which versions of BASIC each command, statement or function appears. Joseph Kline Lubbock, Texas When I received the October issue of A2- Central, | saw a couple of letters that I feit | should respond to. Page 5.66, "BASIC Conversions’: { have been converting Applesoft to GW-BASIC for about three years and have found that for the most part Applesoft syntax will work in GW-BASIC as long as you dontt use graphics commands and convert the screen controi statements (HTAB, VTAB, etc.) to their appropriate GW-BASIC equivalents. The screen control and POKE state- ments having to do with screen control and key- board I/O have equivalents or can be simulated in GW-BASIC. The POKE 36,N can be converted to LOCATE ,N+1 and the PEEK(-16384) can be simulated with the following GW-BASIC code: 10 AS=TNKEY$: IF LEW(A$)=0 THEN 10 20 AFASC (AS) A book that Spence Earnshaw and others who are converting programs from Applesoft to other versions of BASIC might find helpful is The BASIC Handbook written by David A. Lien. This book covers several versions of BASIC for many popular computers, and even gives the commands for other BASICs if different. It does- nt offer a PEEKs and POKEs conversion, but if you know what they do you should be able to find an alternative method of accomplishing the same function on another machine. Page 5.67, ‘BASIC editing’: Gerald L. Hoffman and your other readers might also be interested in a program available on GEnie and America Online called BPU. This wonderful program should be in every BASIC programmer's library. 1 have been using this program since 1985 and would never attempt to write a BASIC program without it. This program is a pre-processor for BASIC that allows the programmer to use labels instead of line numbers and will even convert line numbers to labels, It lets the programmer pass variables to library routines as well. It is also available ‘in CP/M and MS-DOS versions for people that also require those formats. Page 5.71, "Evangelism beyond Apple’: My condolences to John Logan and anyone else who wishes to convert to IBM. i've used Apples and IBM's for the last eight years and there's no way i'd spend my hard earned money on an IBM or compatible. Pound for pound, to me the Apple is much more powerful and a better bar- gain than any of the IBM's or compatibles. In eight years of sixteen hours a day use by my children (ages 2-8) as well as my wife and myself, I've spent $20 on maintenance for my Apple Il Plus; in three years of use $0 on my IIgs. On the other hand, of the over 100 IBM's and compatibles where | work we have spent several thousand in just over the last two years 5.78 A2-Central on machines that are used by adult profession- als only. Not to mention lost time and produc- tivily for training to use each piece of software, and still have users that feel insecure with oper- ating the equipment. Of the users that do catch on quick and are more comfortable with the equipment, the ones that own Apples (and even Macs) far outnumber the IBM and compatible owners, most of whom only use one or two pieces of software! And there is also the num- ber of publications for the ‘average user’ of the Apple Il compared with none for the MS-DOS based machines (I don't count the game maga- zines and newspapers). And even if you want to include the technical magazines, Dr. Dobb's Journal is the only one for MS-DOS in my opin- ion, Richard Cain Biloxi, Miss. Joyful mouse 1 have an Apple IIc and an Apple Mouse which | frequently use with UlfraMacros for my business. | would like to add a joystick for games that my children (and their dad} are crav- Ing to own. Is there a device, similar to an A-B switch for printers, which would allow us to go from mouse to joystick without actually discon- necting any wires? Albert M. Pagani Toms River, N.J. We haven't tried it, but we'd suspect an A-B switch box that used the 9-pin DB-9 style con- nectors (with all 9 lines switched) would work. The older Macintoshs and many MS-DOS machines use 9-pin connectors, so companies that cany accessories for these systems may have the appropriate switch box. If would prob- ably be wise to only switch the power lines with the computer power off, though; the mouse uses some connections that the joy- stick doesn't. If you would like to make your joystick act like a mouse, CH Products (1225 Stone Drive, San Marcos, CA 92069, 619-744-8546} sells a device called the Mirage which will do the tick; it retails for $54,95.-DJD Perlin Megaboard (again) I have the Megaboard by Perlin Electronics. All has worked well for two years, however Per- lin does not seem to be in business anymore, at least not in the US. Does anyone know where they are? ‘The program that came with my card does not work properly with my Iigs. ! was told by Perlin that they had a new program that did work; however, they never sent it. Can any one of your readers help? Thomas J. Scott Mattapan, Maine TOPS over AppleShare {do some computer consulting work in my spare lime. for local small businesses and pri- vate individuals. Although most of that work revolves around Macintosh and MS-DOS com- puters, a significant amount involves Apple IIs. Since most of my clients use only a few com- puters, I usually recommend TOPS and AppleTalk when a network system is required. In my opinion it runs rings around Apple's AppleShare in terms of performance and cost, and it does not require a dedicated Macintosh server, My problem, however, is that TOPS does not support the Apple Il. | want to be able to con- nect an Apple llgs or Apple I! with a Workstation card or similar device into an AppleTalk net- work and not only have peripherals (LaserWrit- ers, networked ImageWriters) but also be able to use Macintosh and MS-DOS hard drives for remote storage, transference and translation of files, etc. I called the TOPS Division of Sun Microsys- tems and was told essentially that it was a hare- brained idea and there was no money in it so TOPS would probably never do it. He seemed to be unaware that an Apple il would run any soft- ware other than games. I then called Apple Corporation directly and was told no such product was anticipated. If | wanted to use an Apple Il | had to buy a Macin- tosh and use AppleShare. Now I like Macintosh- es and | would like to get one eventually, not to replace my Apple II Plus, fle, or ligs, but to com- plement them. But my clients operate on shoe- string budgets, which is why (alas!) too much of my work is done gratis, and a dedicated machine is unacceptable. Do you know of any products out there which do this? Or how do | get access to the appropri- ate TOPS protocols so | can write it myself {UGHH)? Maybe there is a patch to AppleShare which removes the requirement for a Macintosh server. I would be happy even if its operation is not as seamless as TOPS between the Macin- toshes and MS-DOS machines, Timothy B. Tobin Carson, Calif. POP, don't CALL Can you tell me why this simple program bombs into the monitor?: wWi=t 20 PRINT I: GOSTR 30 30 1 = 141; CALL -3286: GOTO 20 Tm using your suggested CALL -3288 (‘Dig- ging into DOS’, Open-Apple, January 1985) to clear the return stack. Spence Earnshaw Richmond, B.C. CALL -3288 clears information from ONERR GOTO from the stack, but that's not the same as the retum address information that a GOSUB places on the stack, Applesoft has a command specifically to remove a retum address from the stack: POP. If you replace CALL -3288 with POP in your program, it will run until a floating point overflow error, Reset, Control-C, or other interruption.-DJD Opening files ’m confused, and do not know where to turn. It says in the ProDOS 8 Technical Refer- ence Manual chapter 2.1.3 (page 14 of my copy) that you can have a maximum of eight files open at a time. I have tried to do that with some huge text files and it seems that there can be many open files but you can not read or write to them. I've tried many variations of what seems to be the logical approach i.e, OPEN file, READ file, OPEN file2, READ file2, OPEN file3, WRITE file3, etc It seems that the most files I can have open is one at a time. Vol. 5, No. 10 How would you go about this? Is there a solution? 1 already looked in Open-Apple... mean A2-Central, and cant find any clues. Please Help! John Rohan Albany, Calif. ‘Open’ in this context means the file has a memory buffer and a reference number assigned to it; these won't be deallocated until you close the file. The purpose of opening the file is to make Information about the file avail- able in memory (in the file's buffer) so that it won't have to be reconstructed each time you access the file. If you need to write a large amount of data to a file in several sequential operations, for example, you don't have to update a pointer to indicate where each new segment is to be written; ProDOS will track the position-in-file pointer for you as you add each segment. Each of eight fites can be open under Pro- DOS 8, but ProDOS can only operate on one file at a time: it must be told which file is cur- rently being referred to and what operation (read, write, and so on) is to be performed. From machine language, this information is passed to the ProDOS machine language inter- face as part of the parameters for the opera- tion. From BASIC, you use the pathname for the file along with the READ or WRITE com- mand to teil ProDOS which file (and operation} you're interested in. A simple example would be a program to copy all strings in FILE] to FILE2: 10 DS = CARS (4): ONERR GOTO 90 20 PRIWE D§; "OPEN FILEL" 30 PRINT DS; "OPEN PILE2" 40 PRINT DS; "READ FILRI" 50 INPOT "AS: REM string read from FILE 60 PRINT DS; "WRITE FILE" 70 PRIN? AS: REM string written to FILE2 80 GOTO 40: REM continue until error 90 PORE 216,0: CALL - 3288: REM clear ONERR 100 PRINT D§; "CLOSE": REM shut down Both FILE! and FILE2 are continually open in the loop from lines 40 to 80 so that ProDOS can track the current position in each file. When a file is first opened, the pointer points at the beginning of the file; each time data is read from the file, the position is updated to one byte past the end of the data just read. When a file is written to, the position is updat- ed to one byte past the data written. So the Joop reads a string from FILE and leaves FILE!'s position-in-file pointing at the start of the next string (or the end of the file), then writes the string to FILE2 and leaves FILE2s pointer pointing at the end of FILE2, When a read is attempted at the end of FILE!, an ‘OUT OF DATA’ error occurs and the program ends. Hf the files do not remain open in the loop, the position information is lost. If FILE2 is closed, the BASIC.SYSTEM ‘APPEND’ command can be used to move the position in-file pointer to the end of the file before continuing to add data. But FILE! is a bigger problem; closing FILEI before all the data is read leaves the dilemma of knowing where the next access should resume. The program above leaves the position tracking to ProDOS; a program that closed FILE} in the loop and wanted to resume copying strings where it left off will have to track the 'position-in-file’ itself. -DJD November 1989 Database date data | think I have a solution for Keith J. Scala's date problem in the October 1989 issue. Keith was having trouble entering and sorting chrono- logical dates in a data base of space launches. My recommendation is to. enter data in YYYYMMDD format using numbers only. For example, instead of using Sep 29 89 as the date, use 19890929 or 1989 09 29. With this method AppleWorks will not truncate 1989 or 1889 into 89. Of course it is somewhat hard to read, but so was the conventional format when we were in first grade. Furthermore one could always enter a conventional format in another category and write a macro to do the work. Sometimes it's best to look beyond the tradi- tional way of expressing something. Lee Dronick San Diego, Calif. GS/OS version numbers 1 recently purchased GS/OS 5.0 from my dealer yet. when I boot my hard disk with the space bar or escape keys pressed, Im told | have GS/OS v3.0. Why is that? Jon Knebel Naperville, Ill. The °5.0" actually refers to the ligs System Software version. Each of the associated com- ponents such as GS/OS, the tooiset files, driv- er files, and so on will have its own version since it logically exists as a distinct ‘subsys- tem’. In the case of the version of GS/OS (and many of its modules) supplied with System Software 5.0, the version number is 3.0. The distinct version numbers aid in tracking the revision levels of each of the components of the ligs System Software. The figs System Software is currently supplied as this ‘set of modules’ when you upgrade your system soft- ware, but if a program needs to check a mod- ule to see if it is the proper version, if can do S0.-DJD GEnie access in Canada 1 wish that GEnie would create local access numbers for those of us in Canada. | under- stand that they are going to link up with iNet; that will let us access GEnie via Datapac. This is supposed to happen in the fall. If and when it does can you let us know so we can join every- one else on GEnie? Neil Butchard Winnipeg, Manitoba Its happened; General Electric Canada, Inc., announced the expanded service access Octo- ber 3, 1989. The cost to access GEnie via the iNet 2000 gateway for 166 Canadian cities is $4.95 (Canadian) per hour billed by the local telephone companies on behalf of Telcomm Canada; this is in addition to the basic GEnie connect rates charged by GE Canada.-DJD Odd type of files ProDOS allows certain characters in file names: upper case letters, numerals, and peri- ods, Lower case letters are converted to upper case. However, AppleWorks file names also have lower case letters and spaces, When | CAT an AppleWorks file in BASIC.SYSTEM with Copy Il Plus, etc., as expected the spaces are convert- ed to periods and lower case letters to upper. However, AppleWorks can then accept the ille- gal characters. How does AppleWorks find char- acters that ProDOS says don't exist in the file- name? By the way, | am very satisfied that you are Uncle DOS and not Aunt DOS. in today’s liberat- ed society, Aunt DOS would go by the name “Ms. DOS’, which really wouldn't suit you. Barry M. Austern Cincinatti, Ohio AppleWorks cheats. It uses the file's ‘aux- type’ field, otherwise unused for the ADB, AWP, and ASP filetypes, to hold a ‘mask’ to indicate the case of the filename's letters and whether a period or space should be used when the file- name is displayed on the screen. The auxtype field is 16 bits long, which is enough to assign one bit to each character of the filename (with one to spare). If the bit is ‘0°, then the charac- ter is displayed in it's ProDOS form; if the bit is “T’ the character is displayed as lower case if a letter, or as a space if the character is a period. You'll notice spaces are the only ‘non-ProDOS* characters accepted while specifying a file- name for AppleWorks use, Since AppleWorks does this translation, the filenames are dis- played normally by ProDOS utilities, which gen- erally don't use the auxtype field as Apple- Works does. In fact, Apple has reserved the use of the auxtype field for future designations of filetypes, and any use of this field must be cleared through Apple il Developer Technical support if you expect your files to work cleanly in possible future Apple I! software environ- ments, Apple il DTS now publishes Apple i File Type Notes for recognized and document- ed filetypes as part of the technical note releas- es. Hgs users may notice that lower case charac- ters are now accepted by the ProDOS FST sup- plied with System Software 5.0. Unlike Apple- Works, the ProDOS FST uses the ProDOS direc- torys version and min_version fields for each entry to store the ‘mask" for that entry. The case does not affect the ‘uniqueness’ of the names; for example, you cant create files named ‘My.file’ and “MY.FILE’ in the same directory without generating an error informing you of a duplicate filename. Having lower case available does allow you to use letter cases (as opposed to just periods) to emphasize portions of the name (‘LastBackup* rather than ‘LAST- BACKUP" or ‘LAST.BACKUP’). Again, most Pro- DOS 8 utilities won't recognize the case distinc- tion because they arent expecting to interpret the version and min_version information in that manner.-DJD Pascal compatibility In response to Shangful Nigam’s question about ORCA/Pascal and Apple Pascal compati- bility: while 1 have no experience with ORCA/Pascal, | have imported Apple Pascal pro- grams into TML Pascal and have run them with little or no modification. The original structure of Pascal, if followed by the designers of the application package, should assure that what is written in UCSD Pascal should run on other strains of Pascal. On UCSD Pascal: when I originally purchased Apple Pascal, | found a grand total of three books listed in Books in Print about Apple Pas- cal; not much to go on, While the manual that accompanies Apple Pascal is quite functional, it still didn't answer all of the questions that | had, and the questions that I directed towards my dealer (Apple's answers to problems) for the most part went unanswered, or if they did final- A2-Central 5.79 ly get answered, I had them figured out by then. While at a large library, 1 was looking through the programming language section and came across many volumes on UCSD Pascal but for the IBM. | checked out a few and lo and behold, the commands for the IBM were the same as for the Apple (about 30% of the commands were missing from the Apple version, but they are commands that one really doesn't need); there were commands that worked that Apple hadnt mentioned in their manual. The biggest point is that | leaned much from them. | guess that the message is: don't get hung up on keeping 100% within your “line”. There is an awful tot of infor- mation on computers and application programs out there; information that can and does cross party lines. Andy Conrad Torrington, Wyo. Assembly listing How can | invoke the list command from a machine language program without returning and getting an error that returns me to the mon- itor? Mare Kelberman Framingham, Maine All of the Apple lf monitor ROMs have the entry point INSTDSP ($F8D0} in common; this disassembles and displays one assembly lan- guage instruction. To use the routine, you put a pointer to the address you want to disassem- ble into $3A (low byte} and $3B (high byte), and JSR $F8D0. When you return, $2F will con- tain the length of the last instruction disassem- bled, minus one. We incorporated this into a routine to disassemble 20 lines of code; our miniassembler program looks like this (after we add some comments): 0300: a3 00 aa 400 point to $0300 0302; 85 3a STA A 0304: Ag 03 a 403 0306; 85 3B STA 38 0308; ag 14 WA #16 ;use 20 decimal . 030k: 8D 2403 «STA 0324 ;,.a8 our counter 0300: 20 D0 F8 JSR P8D0 display one instr. 0310: 6 2F INC 2F get instr. length 0312: a5 2 DA 2 031d: 18 cus jadd to pointer 0315: 65 3A 30 3A O37: 85 3A STA 3A 0319; 90 02 BOC 0310 0313: BE 3B 1K 3B O31D: E2403 DEC 0324 jone less line to do 0320; DO 2a ME 030D all dove if 0 0522: 18 id fast for BASIC 0323: 60 RIS go home 0324: 02 OB COP 03 0326: 00 17 ARK 17 The last two lines are ‘junk’ bytes which the ligs INSTDSP interprets as best it can. We use a memory location to hold the counter for the number of lines to disassemble because INSTDSP scrambles the contents of the A, X, and ¥ registers. This same routine can be CALLed from Applesoft; Just POKE the desired starting address into the routine. Or modify it to work the way you like. The CLC immediately before the RTS is there to insure the cary is clear before returning to Applesof; otherwise, Applesoft believes a program error has been encountered. (We used CALL 768 to generate the listing above.}-DJD 5.80 A2-Central Off the (Apple Desktop) Bus I think ! have found another ‘rotten’ Apple service policy. | have had an Apple ligs for over ‘one and one-half years with no problems until now. | was recently writing a report and my Apple began locking up on me. | soon discov- ered that the left Apple Desktop Bus Port on the Keyboard wasn't working properly. This side was connected to the back of my Apple. I switch the ADB cable to the right port which works fine. I took my keyboard to an Apple service repair shop, hoping that they would just replace the defective port for a few dollars. They told me that their policy is to trade in the keyboard for another at a cost of $99. | think this is outra- geous for something so simple to repair. They also said they don't know where to get ADB ports; if they did they would replace defective ports instead. Tam writing to you, hoping that you or one of your readers Knows where | could get an Apple Desktop Port for my keyboard and replace it myself. Since there are other companies that make keyboards for the Iigs, this port must be available to the public and not just Apple. Leo G. Schnitzier Theresa, Wisc. My llgs keyboard also started acting erratic, but it was the ADB connector on the right (which I use for the IIgs mouse). | opened up the keyboard and discovered that the Apple Desktop Bus connectors weren't physically con- nected to the supporting printed circuit board except by the ‘solder tails’. The solder used in pnt © Copyright 1989 by A2-Central ost gh reseved. AE programs publshed in A-Central are public demar and maybe coped cd det wou carpe. Appl ier oun and Sonica obers may cbt permission o rept ares for lime laine bby speotic wrtien request. Este by Dennis Doms ‘wath netp fromm: TomWeishaar SallyDwyer_ Dean Esmay Joyce Hammond Steve Kelly Jay Jennings Tom Vanderpool Jean Weishaar A2-Central ites Open-Apple ough January, 1989s een b> listed mortty co Jonary 1985 Word pros (n US. dots, ckmal iver ince ano acta charg} 28 fr 1 year. $54 2 yeas $78 for yeas. Al tackissues ae curoiy avalable fr $2 each; bound, dered ek fos of ou Fret four volumes ae $1495 each, Voumos end whe January ‘ve an indo for he pri volume included wi the Febru ssue “The fl ot of eacn issue 0! A2-Ceminal 'savababl on 3.5 disks, aon veth @ selection ofthe best now pubic domain and shareware les and pro- grams, for $84 a year (newsierer and disk combined). Sige disks ave $10. Fieaso send a fe: A2-Central P.O. Box 11250 Overland Park, Kansas 66207 U.S.A. AZ-Central's sok in an urproraced format lor your corwenions>. You are encouraged to make backup arcWal copes cr easy-toead eriarged ‘soples for yout own use without charge. You may also copy A2-Central lr <sybusion wo cthers, The dtrbuton fee & 15 cents pec page per copy 6s- ‘nbd. WARRANTY AND LIMITATION OF LIABILITY. | wartant that most of the Inkormaton i A2-Ceptral is uselul and corect,ettough drivel and ms- takos ore included tom tire to tne, usualy unntentonaly. Unsaistod subsarbe's may cancel they subscription at any tne and receive 2 ful ‘efund of their last subscrigton payment. The urflled parion of any paid subserpion wil be relurded evan to saisied subsorbers upon request MY LIABILITY FOR ERRORS AND OMISSIONS IS LIMITED TO THS PUBLICATION'S PURCHASE PRICE. In no case stl Lor my contibvios. be lable lor any incgertal or consequential damages, not for ANY dam ages in excass ofthe lees pal by a subseriner ISSN 0885-4017 Eri at AACENTRAL siagaesc2 Printed in the U.S.A. Wan Saassesor electronics isnt designed to be a structural material; if you flex the connector very much, it's likely it will come loose. Since there will be some pressure from trying to make sure the DIN plug is seated firmly in the socket, multiple Insertion/removal cycles may cause breakage eventually. in my case, the solder had pulled loose from the connector ‘pads’ on the printed cir- cuit board, if the connection was bumped, con- tact was broken and the llgs started getting bad data from the mouse, Rather than trading it in, | opted to solder jumpers from the ADB connector to the proper contacts on the print- ed circuit board. If the connector itself is not damaged and you elect to give up any trade-in value for your keyboard, you might risk trying such a repair. If the connector itself is bad, you may find an item from ORA Electronics, 9410 Owens- mouth Avenue, PO Box 4029, Chatsworth, Calif, 91313, (818) 772-2700 to be a suitable replacement. Their order number is FDX820 (PCB mount-female right angle 8 pin mini DIN connector), and the connectors cost $1.60 each in lots of less than 12. We haven't actual- ly ordered any to compare with the one on the Apple keyboard to see if they are identical; other electronics parts suppliers may stock a similar item.-DJD Crashing success After several months of arduous toil, faithful- ly serving our country’s needs and fulfilling the Navy's mission, we have been rewarded with a glorious week of R&R in Bunbury, Western Aus- tralia. However, after an exhaustive and thor- ough search of this clean, friendly town of 25,000 inhabitants, it is patently obvious that | have no one here to talk with. Why? No Apple dealers. No Apple software. (And, in case any- one cares, no Mac's, either!) Now for my main contribution of late,, which might be of interest to some. The following is an excerpt from a letter | am sending to Apple Computer, inc.: ‘I purchased my first Apple, a lle, in July of 1987. In January of 1988, | sold the Ile (wish that | had kept it. now) and purchased a Iigs with the following equipment and configuration: “Applied Engineering RAMKeeper ‘Applied Engineering GS-RAM Plus with one meg “Apple. Memory Expansion Board with one meg “MDIdeas Conserver containing two Apple 3.5 drives “Apple 5,25 drive “Apple RGB color monitor “The system is physically set up with the Conserver on top of the CPU, and the monitor sitting above the Conserver. The single 5.25 drive is daisy-chained and sits behind the rest of the equipment. ‘Now, why should all of this be important to you? ‘lamin the U.S. Navy, serving aboard the U.S.S, Buchanan. For the past four months, we have been bobbing around the- Indian Ocean, North Arabian Sea, and the Persian Gulf, carry- ing out the Navy's mission. My system has become an indispensable aid in my work cen- ter. | use it constantly, and have two 3.5 disks containing various AppleWorks files pertinent to my work center in the two drives, (AppleWorks boots up from an 800K ROM disk supplied by the RAMKeeper.) “A week ago, we were exposed to a mild Vol. 5, No. 10 storm (you probably guessed, but keep on read- ing), and my entire system with the exception of the keyboard-hit the deck! It is irrelevant as to who failed to secure the restraining system; it happened. On one particularly violent roll, everything slid off the 36 inch counter top. I was informed the next morning. “With my heart resting below the waterline, | gave the system a quick visual inspection. First damage report revealed: l- An inch and one-half rip in the front cover panel, upper right corner, side, of the 5.25 drive. “2- Rubber mounting feet of 3.5 drives and RGB monitor knocked off. *3- Height adjustment strip of RGB monitor knocked off with a 5 inch split on the left end (lower position). *4- RGB monitor video plug loose on monitor. *5- Internal visual inspection of the CPU case revealed no apparent damage. “6- Although the RAMKeeper battery cable had become disconnected, { was informed that the transformer cable had not. “My present rating is interior Communications Electrician, and | am a former Electronics Tech- nician with over 25 years total experience. So, after a thorough visual inspection, but still with hesitation, | reconnected everything and pow- ered up. When the monitor screen remained blank, my spirits joined it! However, | was not about ready to give up totally. | powered down the system, and went back to the monitor video plug, disconnected it again, tightened up the mounting studs and reconnected the plug. Ready for the second attempt. ‘Since you are reading this, it must be obvi- ous that everything works!!! ‘While | do not recommend anyone attempt to duplicate this ‘test’ with a ‘messy-DOS' sys- tem, or even the ‘other* one Apple produces, | feel that my experience gives a loud and clear Statement as to the ruggedness and quality of Apple Il products. Besides an overwhelming feeling of relief after seeing AppleWorks up and ready to go on the second power-up came thankfulness for all of your engineers and quali- ty control personnel. “However, unless this ship capsizes, there won't be a repeat of this test on my equipment!" Needless to say, | was very lucky. But a lot of that ‘luck’ can be attributed to our computer and its manufacturer. The only damage sus- tained is purely cosmetic. Even though | agree with the editorial com- ments, and others, that Apple seems to bé ignoring us in favor of ‘Baby Brother® (A+/inCider editorial for June), | feel that we should also spread the word and keep encour- aging those ‘on the inside’ at Apple that we appreciate what they are doing. Also, maybe, just maybe, after my experience, the ‘Premium’ price we are paying for (and compiaining about) Apples may be justified. I have over 25 years experience in the elec- tronics and electronic equipment field. Acci- dents happen. But this is the first time that I have witnessed one of those accidents wherein the equipment (including ruggedized military equipment) sustained only minor cosmetic dam- age, and all parts of the system functioned nor- mally. Try dropping your 18° portable TV three feet and see what happens} (Better yet, throw an IBM clone on the floor and see what it does!) W. D. Watterson San Francisco, Calif.
mp.ls