hyperbug@apple.UUCP (Keith Rollin) (10/31/87)
WINDOID Issue #3 The Publication for the Informed HyperCard User Editor: David Leffler Contents: INTRODUCTION EDITOR'S CHOICE HYPERCARD USER TIPS UNIVERSAL IMPORT BUTTON WHOOPS! THE FORM In this third issue of WINDOID, we will continue to cover importing text into HyperCard. Gary Bond, one of Apples outstanding HyperCard test team members, wrote a universal import button that takes into consideration nearly everything. You can now create a button that imports MacWrite, Microsoft Word, many database files, and even HyperCard stacks! We think you are going to enjoy this. Phil Wyman, another excellent Apple HyperCard tester, has provided us with more of his highly acclaimed power-user tips and has taken a stab at explaining some of the more interesting aspects of HyperCard properties. In the two previous issues, there were some mistakes. I would like to apologize for any inconvenience or frustration they might have caused and rectify them. The errata will appear on page seven under WHOOPS. I generally get all the text stuffed into the WINDOID newsletter moments before the Thursday meeting, and sometimes I miss something. Many of the excellent scripters that avidly read WINDOID have noticed my lapses and have provided me with needed repairs. For their kind assistance, I offer my thanks. WINDOID provides an opportunity for its readers to contribute to the ongoing growth and excellence of HyperCard. With your assistance we can continue to bring to HyperCard added depth and functionality. In the back of every issue will be a form for you to keep by your Macintosh. This form will allow you the unique opportunity to participate directly in the continued development of HyperCard. We will read all the forms returned and address questions that are being asked by HyperCard users. We will ask the team and provide you with an answer and publish the answers in this newsletter. In this way we can gather information and provide for your needs in future versions of HyperCard. WINDOID is trying to make a difference in the way that you work with HyperCard. We need your input. What sort of stacks are you using, what kinds of stacks are you creating, and what are some of the joys and frustrations you are experiencing. We really want to know! If you have a bug, suggestion, comment, or just want to know the best way to do something in HyperCard, you can fill out the form and send it to: AHUG c/o David Leffler Apple Computer, Inc. MS/27-AQ 20525 Mariani Ave. Cupertino, CA 95014 Or copy the format and Apple-Link it to: HYPERBUG$ EDITOR'S CHOICE by David Leffler At the last Apple HyperCard User Group meeting , Danny Goodman, author of The Complete HyperCard Handbook, presented to an appreciative audience his incredible business productivity stack Focal Point. It will be released soon by Activision. We were all amazed at the incredible graphics and awesome features he has scripted into it. Danny, as you might know, is not a programmer and has always been frustrated by his inability to turn his ideas into software. HyperCard has empowered him to not only turn his ideas into reality, but to allow him the opportunity to share his ideas with the world. Thank you Danny! Amanda Goodenough, author of the Inigo and My Favorite Camel series of wonderful adventures, was also on hand. Her obvious love of stories and great presentation style captivated the audience. Amanda continues to enhance and produce more of these non-textual stories and has graciously allowed us to place them in an Amandas Stacks folder on the AHUG StackWare server. My Favorite Camel is a favorite of mine, and I think everyone should see it and share it with someone they love. There are two other stacks on the StackWare server that also deserve serious attention. The AIDS stack is a perfect representation of how HyperCard can be used in an incredibly invocative eye and heart grabbing style. This stack is not only visually and emotionally gripping, but is an excellent example of how to use HyperCard as a powerful vehicle to move you through diverse information. You should get this stack. Finally, Tree Frog Studio software presents CheapSequencer. Tree Frog has given us a music sequencer that must be seen and heard to be believed. These innovative stackware developers are interested in entertaining us with great graphics and functional stackware tools. Its stacks and people like these that really show the power and versatility of HyperCard. POWERUSERS TIPS by Phil Wyman 1. If you get tired of pulling the Tools Windoid off of the menubar when you need it, try Option-Tab, which will tear it off for you! Also, if the Tools Windoid is in a paint tool, hitting Tab will tear off the Patterns Windoid. 2. If you have a line in your script that is longer than the editor window, you can place an Option-Return at a space in the line to break it into two smaller lines. The two lines will execute in the same way as the original line. (Do not place the Option-Return into the middle of a quoted string. Also, if you use the Option-Return in a comment, remember that every line of a comment must start with a double hyphen!) 3. For those programmers out there who are used to for next loops, there is a next repeat command in HyperTalk which works in a repeat loop a lot like a next command in a for next loop. The next repeat command does not execute anything that follows it in the repeat loop, but rather starts executing at the beginning of the repeat loop. Also, if you wish to exit the repeat loop altogether, without executing anymore of the lines in the repeat loop, then use exit repeat. Note: If you want to exit the entire message handler from anywhere in the handler, use exit <handlername> (i.e., exit mouseup). If you wish to leave the handler but wish the current message to be sent on up the hierarchical path from where it is now, then use pass <handlername>. 4. When concatenating two strings, you can add a space between the two strings by using two ampersands && instead of just one &. 5. A shorthand for button in HyperTalk is btn. A shorthand for background is bkgnd. 6. You can copy buttons, fields, backgrounds or cards between stacks. This is a very powerful feature of HyperCard. 7. For those of you with the regular size Mac Plus or Mac SE screens, try this for a thrill: Set loc of cardWindow to 10,50 You will see what people on large screens see all the time, a window title bar which states the pathname of the window you are viewing. (To reset your cardWindow, Set loc of cardWindow to 0,0.) 8. If you are in any tool other than the Browse tool, you can return to the Browse tool by Command-Tab. 9. When you are in the Button tool, you can Command-Drag to create a new button. Option-Drag on a button and you will drag a copy of the button. 10. A first attempt at a small treatise on the use of the,of, and () in HyperTalk: In general, either the, of, or parentheses () are required to signal HyperTalk that a function or property is to be activated. PROPERTIES: With button, card, background, stack, and window properties, the is optional, but you need of. Also, properties never have parentheses. You can say: put hilite of button 1 put the hilite of button 1 Since there is no of to activate it, you cannot say: put the hilite button 1 If you are using a global or painting property, you need the, since there is no of to activate the property. For instance, you can say: put the lockScreen put the textAlign However, you cannot put the property by saying: put lockScreen because HyperCard will think you are using lockScreen as a variable, not a property. FUNCTIONS: Either the, of, or parentheses () are required with a function. However, you cannot mix the with parentheses in a system function. For instance, you cannot say: put the charToNum(a) You are allowed to say: put the chartonum of a put chartonum(a) put the chartonum of (a) If a system function has more than one argument, it will always require parentheses. For user-defined functions, you must always use parentheses, even if there are no argumentsi.e., userFunction(). If a function does not use of or (), then the is required! For example, date doesnt work without the, since there is not an of or () to activate the function. You can say: put the date But you cannot say: put date because HyperTalk will assume that date is a variable. This concept of insisting on a the to activate the function allows for future expansion of more system functions, since system functions will not be able to collide with variables that users already have in their scripts. The UNIVERSAL IMPORT BUTTON by Gary Bond Rev. 2.2 Last issue we dealt with importing text. While those approaches are reliable, they are also very slow and dont account for a number of problems that might occur along the way. Consistent with our goal to provide you with the best, this issue contains a script for a universal import button which does both kinds of import (text and data). To use it, type it into any button script. In addition to importing text files it also imports Macwrite and Word documents and even Hypercard stacks! This version of the import button fixes bugs both in Hypercard and in previous button versions. on mouseUp global cardcount,startcard,memory,header get userlevel put it into item 1 of memory set userlevel to 5 set lockmessages to true set lockscreen to true put short id of this card into startcard answer Import text file as: with Data or Text or Cancel if it is Cancel then Cleanexit if it is Text then answer Include header information in fields? with Yes or No put it into header Importext else Importdata end if go next card Cleanexit Compact end mouseup on importext global cardcount,startcard,memory,header put 0 into cardcount repeat ask Name or pathname of text file to import: with item 2 of memory if short name of this stack is in it then if , is not in memory then put , after memory put it into item 2 of memory answer Cant import current stack! with Ok next repeat end if if it is empty then Cleanexit else exit repeat end if end repeat put it into filename if , is not in memory then put , after memory put it into item 2 of memory set cursor to 4 open file filename repeat read from file filename for 16384 if it is empty and cardcount is 0 then answer Could not find file: & filename with Ok close file filename Cleanexit end if if it is empty then exit repeat put return after it domenu New card add 1 to cardcount domenu New field set name of card field (number of card fields) to Import set style of card field Import to scrolling drag from the loc of card field Import to 0,62 drag from 190,100 to 512,342 if header is Yes then put Characters: && number of chars in it & return & return before it put Lines: && number of lines in it & return before it put File: && filename & return before it put Import card: && cardcount & return before it end if put it into card field Import end repeat close file filename if header is Yes then repeat until the short id of this card is startcard put of && cardcount after line 1 of card field Import go previous card end repeat else go card id startcard end if end importext on importdata global filename,cardcount,startcard,memory,header put empty into delimiters put empty into filename put 0 into cardcount put 0 into limit put 0 into fieldcount repeat until delimiters is not empty put 0 into nofields answer Use Tab and Return as delimiters? with Yes or Other or Cancel if it is Cancel then mouseup if it is Yes then put 9,13 into delimiters if it is Other then repeat until ((item 1 of it > 0 and item 1 of it < 256) and (item 2 of it > 0 and item 2 of it < 256)) or it is empty ask Enter two comma separated Ascii delimiters: with empty put it into delimiters end repeat end if end repeat if item 1 of delimiters is item 2 of delimiters then put 1 into nofields answer Include header information in fields? with Yes or No put it into header repeat ask Name or pathname of text file to import: with item 2 of memory if short name of this stack is in it then if , is not in memory then put , after memory put it into item 2 of memory answer Cant import current stack! with Ok next repeat end if if it is empty then if cardcount > 0 then close file filename CleanExit end if Importdata else exit repeat end if end repeat put it into filename if , is not in memory then put , after memory put it into item 2 of memory set cursor to 4 open file filename repeat read from file filename until (numtochar of item 2 of delimiters) if it is empty and cardcount is 0 then answer Could not find file: & filename with Ok close file filename Cleanexit end if if it is empty then exit repeat if chartonum(last character of it) is not item 2 of delimiters then put item 2 of delimiters into temp if temp is 9 then put Tab into temp if temp is 13 then put Return into temp answer Cant find record delimiter: && temp with Ok close file filename cleanexit end if put empty into last character of it if (numtochar of item 1 of delimiters) is not in it and nofields is 0 then put item 1 of delimiters into temp if temp is 9 then put Tab into temp if temp is 13 then put Return into temp answer Cant find field delimiter: && temp with Help or Ok if it is help then answer Use double record delimiters for records... with Continue answer with no field delimiters. Example: 13,13 with Ok end if close file filename Cleanexit end if if (numtochar of item 1 of delimiters) is not , and nofields is 0 then repeat until (numtochar of item 1 of delimiters) is not in it put , into character offset((numtochar of item 1 of delimiters),it) of it end repeat end if if cardcount is 0 then domenu New background else domenu New card end if add 1 to cardcount if nofields is 0 then put the number of items in it into limit else put nofields into limit end if repeat with count = 1 to limit if cardcount is 1 then add 1 to fieldcount if fieldcount < 125 then domenu New field else answer No more fields can be created! with Ok Cleanexit Compact end if end if put Field & count into fieldname set name of bkgnd field (number of bkgnd fields) to fieldname set style of bkgnd field fieldname to scrolling If nofields is 0 and header is Yes then put Field && count && of && the number of items in it & return into bkgnd field fieldname put Record && cardcount && of file: && filename & return & return after bkgnd field fieldname end if if nofields is 0 then put item count of it & return after bkgnd field fieldname else put it & return after bkgnd field fieldname end if end repeat choose browse tool end repeat close file filename go card id startcard end importdata on Cleanexit var global memory if param(1) is compact then domenu Compact stack end if choose browse tool set userlevel to item 1 of memory set lockscreen to false set lockmessages to false exit to hypercard end Cleanexit We hope that this script will aid in your productivity with HyperCard. Please let us know how you like it. WHOOPS by David Leffler An errata from the first two issues of WINDOID. ISSUE #1: In the first issue Gary Bond showed us how to find out which line of a scrolling field the user has clicked on. Apple employee Brian McGhie found a small flaw and wrote me the following letter: The question was asked, How can I find out which line of a field a user has clicked in? The response was a method that would work in static fields, and then further developed into a method for scrolling fields. The function Clickline as given for scrolling windows only works if the scrolling field is (in pixels) an integer multiple of the textheight. A corrected version of Clickline appears below. Function Clickline return (trunc(((scroll of the target) + (item two of the clickloc) - (item two of the rect of the target)) div the textheight of the target) + one) End Clickline The idea is to calculate the number of pixels from the top of the field to the position that you clicked on. So you take the number of pixels that have scrolled offscreen, and add in the vertical position of the mouseclick minus the vertical position of the top of the field. This sum is the total number of pixels from the logical top of the window not the visual top. Divide by the height of the font to get the number of lines. Since this number is not always an integer, truncate it. The result is a zero based count of lines. Add one and return the correct line number that was clicked in. ISSUE #2: Robin Shank provided us with a How to Program FunctionKeys in HyperTalk script. We left out a word, and the script will not work without it. The script should read: On functionkey whatkey if whatkey is 6 then type x with commandkey Cut whatever is selected domenu background enter the background type v with commandkey Paste it domenu background leave the background else pass functionkey end if end functionkey We hope you have enjoyed reading WINDOID and have found it to be interesting and informative. We care enough to take the time to give you the most up-to-date information about HyperCard, and we would like to make a request for a little of your time. There is a form that follows this editorial; please fill it out if you will. We are very interested in hearing from you. What sort of stacks are you using, what kind of stacks are you creating, and what are your joys and frustrations in using HyperCard. You have the unique opportunity to communicate directly with Bill, Dan, and the entire HyperCard development team. We really want to know what you would like to see in HyperCard and are more than willing to give you what you want. What we need to make this happen is your input. Let us know what you think. We can address it in WINDOID or perhaps the next revision of HyperCard. You can make a difference in the world by communicating with us. Dont pass up the opportunity! The form: Please use the following form to make a difference in the world: Date: Name: Address: Phone #: Versions of: a. HyperCard: b. Associated software: c. System Software: 1. System 2. Finder 3. ImageWriter file 4. LaserWriter file 5. Any others Type of Macintosh: Peripherals: Description of problem, suggestions or comments: Fill this out and send it to: AHUG C/O David Leffler Apple Computer Inc. MS 27AQ 20525 Mariani Ave., Cupertino, CA 95014 Or copy the format and AppleLink it to: HYPERBUG$ We thank you for your participation and know that you will be pleased to see your ideas, comments, and suggestions appear in future issues of WINDOID, the publication for the informed HyperCard user. -- Apple's HyperCard Grievance Center "Give us your bugs, your comments, your gentle criticisms..." UUCP: {pyramid!sun,voder,nsc,ucbvax!mtxinu,dual,decwrl,amdahl}!apple!hyperbug
kraut@ut-ngp.UUCP (10/31/87)
thanks in advance. ---Werner PS: it would also be a good idea to mail it to the INFO-MAC moderator and the SIMTEL-20 archives maintainer. probably also the BITNET file server sites, and .... well, that's all I can think off at the moment. -- kraut@ngp.utexas.edu
akk2@ur-tut.UUCP (Atul Kacker) (11/01/87)
In article <6675@ut-ngp.UUCP> kraut@ut-ngp.UUCP (Werner Uhrig) writes: > > >PS: it would also be a good idea to mail it to the INFO-MAC moderator and > the SIMTEL-20 archives maintainer. probably also the BITNET file > server sites, and .... well, that's all I can think off at the moment. > And move it to the hypercard newsgroup where it belongs.... -- Atul Kacker Internet: akk2@tut.cc.rochester.edu UUCP : {rutgers,topaz}!rochester!tut!akk2
hyperbug@apple.UUCP (11/02/87)
Patience, Dear Reader. Many of you pointed out to me that there was a serious lack of double-quotes in my last posting. Well, due to a stupidity error, and the lack of an 8th bit, they all got stripped out somewhere along the way. Here is Windoid #3 again with most of the quotes in place (I say most because of another bug somewhere. Windoid is first laid out in PageMaker, and then converted to text for uploading. When I used Word 3.01 to convert the curly quotes we normally use into the straight quotes that are more palatable to UNIX, it reported that it found 135 left quotes, but only 104 right quotes. After looking through the text, I noticed that any quote that was unfortunate enough to be at the end of a line was deleted! I replaced them in all the appropriate places that I found, but may have missed a few). -- Keith WINDOID Issue #3 The Publication for the Informed HyperCard User Editor: David Leffler Contents: INTRODUCTION EDITOR'S CHOICE HYPERCARD USER TIPS UNIVERSAL IMPORT BUTTON WHOOPS! THE FORM In this third issue of WINDOID, we will continue to cover importing text into HyperCard. Gary Bond, one of Apples outstanding HyperCard test team members, wrote a universal import button that takes into consideration nearly everything. You can now create a button that imports MacWrite, Microsoft Word, many database files, and even HyperCard stacks! We think you are going to enjoy this. Phil Wyman, another excellent Apple HyperCard tester, has provided us with more of his highly acclaimed power-user tips and has taken a stab at explaining some of the more interesting aspects of HyperCard properties. In the two previous issues, there were some mistakes. I would like to apologize for any inconvenience or frustration they might have caused and rectify them. The errata will appear on page seven under WHOOPS. I generally get all the text stuffed into the WINDOID newsletter moments before the Thursday meeting, and sometimes I miss something. Many of the excellent scripters that avidly read WINDOID have noticed my lapses and have provided me with needed repairs. For their kind assistance, I offer my thanks. WINDOID provides an opportunity for its readers to contribute to the ongoing growth and excellence of HyperCard. With your assistance we can continue to bring to HyperCard added depth and functionality. In the back of every issue will be a form for you to keep by your Macintosh. This form will allow you the unique opportunity to participate directly in the continued development of HyperCard. We will read all the forms returned and address questions that are being asked by HyperCard users. We will ask the team and provide you with an answer and publish the answers in this newsletter. In this way we can gather information and provide for your needs in future versions of HyperCard. WINDOID is trying to make a difference in the way that you work with HyperCard. We need your input. What sort of stacks are you using, what kinds of stacks are you creating, and what are some of the joys and frustrations you are experiencing. We really want to know! If you have a bug, suggestion, comment, or just want to know the best way to do something in HyperCard, you can fill out the form and send it to: AHUG c/o David Leffler Apple Computer, Inc. MS/27-AQ 20525 Mariani Ave. Cupertino, CA 95014 Or copy the format and Apple-Link it to: HYPERBUG$ EDITOR'S CHOICE by David Leffler At the last Apple HyperCard User Group meeting , Danny Goodman, author of The Complete HyperCard Handbook, presented to an appreciative audience his incredible business productivity stack Focal Point. It will be released soon by Activision. We were all amazed at the incredible graphics and awesome features he has scripted into it. Danny, as you might know, is not a programmer and has always been frustrated by his inability to turn his ideas into software. HyperCard has empowered him to not only turn his ideas into reality, but to allow him the opportunity to share his ideas with the world. Thank you Danny! Amanda Goodenough, author of the Inigo and My Favorite Camel series of wonderful adventures, was also on hand. Her obvious love of stories and great presentation style captivated the audience. Amanda continues to enhance and produce more of these non-textual stories and has graciously allowed us to place them in an Amandas Stacks folder on the AHUG StackWare server. My Favorite Camel is a favorite of mine, and I think everyone should see it and share it with someone they love. There are two other stacks on the StackWare server that also deserve serious attention. The AIDS stack is a perfect representation of how HyperCard can be used in an incredibly invocative eye and heart grabbing style. This stack is not only visually and emotionally gripping, but is an excellent example of how to use HyperCard as a powerful vehicle to move you through diverse information. You should get this stack. Finally, Tree Frog Studio software presents CheapSequencer. Tree Frog has given us a music sequencer that must be seen and heard to be believed. These innovative stackware developers are interested in entertaining us with great graphics and functional stackware tools. Its stacks and people like these that really show the power and versatility of HyperCard. POWERUSERS TIPS by Phil Wyman 1. If you get tired of pulling the Tools Windoid off of the menubar when you need it, try Option-Tab, which will tear it off for you! Also, if the Tools Windoid is in a paint tool, hitting Tab will tear off the Patterns Windoid. 2. If you have a line in your script that is longer than the editor window, you can place an Option-Return at a space in the line to break it into two smaller lines. The two lines will execute in the same way as the original line. (Do not place the Option-Return into the middle of a quoted string. Also, if you use the Option-Return in a comment, remember that every line of a comment must start with a double hyphen!) 3. For those programmers out there who are used to "for next" loops, there is a "next repeat" command in HyperTalk which works in a repeat loop a lot like a "next" command in a "for next" loop. The "next repeat" command does not execute anything that follows it in the repeat loop, but rather starts executing at the beginning of the repeat loop. Also, if you wish to exit the repeat loop altogether, without executing anymore of the lines in the repeat loop, then use "exit repeat". Note: If you want to exit the entire message handler from anywhere in the handler, use "exit <handlername>" (i.e., "exit mouseup"). If you wish to leave the handler but wish the current message to be sent on up the hierarchical path from where it is now, then use "pass <handlername>". 4. When concatenating two strings, you can add a space between the two strings by using two ampersands "&&" instead of just one "&". 5. A shorthand for "button" in HyperTalk is "btn". A shorthand for "background" is "bkgnd". 6. You can copy buttons, fields, backgrounds or cards between stacks. This is a very powerful feature of HyperCard. 7. For those of you with the regular size Mac Plus or Mac SE screens, try this for a thrill: Set loc of cardWindow to 10,50 You will see what people on large screens see all the time, a window title bar which states the pathname of the window you are viewing. (To reset your cardWindow, "Set loc of cardWindow to 0,0".) 8. If you are in any tool other than the Browse tool, you can return to the Browse tool by Command-Tab. 9. When you are in the Button tool, you can Command-Drag to create a new button. Option-Drag on a button and you will drag a copy of the button. 10. A first attempt at a small treatise on the use of "the","of", and "()" in HyperTalk: In general, either "the", "of", or parentheses () are required to signal HyperTalk that a function or property is to be activated. PROPERTIES: With button, card, background, stack, and window properties, "the" is optional, but you need "of". Also, properties never have parentheses. You can say: put hilite of button 1 put the hilite of button 1 Since there is no "of" to activate it, you cannot say: put the hilite button 1 If you are using a global or painting property, you need "the", since there is no "of" to activate the property. For instance, you can say: put the lockScreen put the textAlign However, you cannot put the property by saying: put lockScreen because HyperCard will think you are using lockScreen as a variable, not a property. FUNCTIONS: Either "the", "of", or parentheses () are required with a function. However, you cannot mix "the" with parentheses in a system function. For instance, you cannot say: put the charToNum("a") You are allowed to say: put the chartonum of "a put chartonum("a") put the chartonum of ("a") If a system function has more than one argument, it will always require parentheses. For user-defined functions, you must always use parentheses, even if there are no argumentsi.e., userFunction(). If a function does not use "of" or "()", then "the" is required! For example, "date" doesnt work without "the", since there is not an "of" or "()" to activate the function. You can say: put the date But you cannot say: put date because HyperTalk will assume that "date" is a variable. This concept of insisting on a "the" to activate the function allows for future expansion of more system functions, since system functions will not be able to collide with variables that users already have in their scripts. The UNIVERSAL IMPORT BUTTON by Gary Bond Rev. 2.2 Last issue we dealt with importing text. While those approaches are reliable, they are also very slow and dont account for a number of problems that might occur along the way. Consistent with our goal to provide you with the best, this issue contains a script for a universal import button which does both kinds of import (text and data). To use it, type it into any button script. In addition to importing text files it also imports Macwrite and Word documents and even Hypercard stacks! This version of the import button fixes bugs both in Hypercard and in previous button versions. on mouseUp global cardcount,startcard,memory,header get userlevel put it into item 1 of memory set userlevel to 5 set lockmessages to true set lockscreen to true put short id of this card into startcard answer "Import text file as:" with "Data" or "Text" or "Cancel" if it is "Cancel" then Cleanexit if it is "Text" then answer "Include header information in fields?" with "Yes" or "No" put it into header Importext else Importdata end if go next card Cleanexit "Compact" end mouseup on importext global cardcount,startcard,memory,header put 0 into cardcount repeat ask "Name or pathname of text file to import:" with item 2 of memory if short name of this stack is in it then if "," is not in memory then put "," after memory put it into item 2 of memory answer "Cant import current stack!" with "Ok next repeat end if if it is empty then Cleanexit else exit repeat end if end repeat put it into filename if "," is not in memory then put "," after memory put it into item 2 of memory set cursor to 4 open file filename repeat read from file filename for 16384 if it is empty and cardcount is 0 then answer "Could not find file: " & filename with "Ok" close file filename Cleanexit end if if it is empty then exit repeat put return after it domenu "New card" add 1 to cardcount domenu "New field" set name of card field (number of card fields) to "Import" set style of card field "Import" to scrolling drag from the loc of card field "Import" to 0,62 drag from 190,100 to 512,342 if header is "Yes" then put "Characters:" && number of chars in it & return & return before it put "Lines:" && number of lines in it & return before it put "File:" && filename & return before it put "Import card:" && cardcount & return before it end if put it into card field "Import end repeat close file filename if header is "Yes" then repeat until the short id of this card is startcard put " of" && cardcount after line 1 of card field "Import" go previous card end repeat else go card id startcard end if end importext on importdata global filename,cardcount,startcard,memory,header put empty into delimiters put empty into filename put 0 into cardcount put 0 into limit put 0 into fieldcount repeat until delimiters is not empty put 0 into nofields answer "Use Tab and Return as delimiters?" with "Yes" or "Other" or "Cancel" if it is "Cancel" then mouseup if it is "Yes" then put "9,13" into delimiters if it is "Other" then repeat until ((item 1 of it > 0 and item 1 of it < 256) and (item 2 of it > 0 and item 2 of it < 256)) or it is empty ask "Enter two comma separated Ascii delimiters:" with empty put it into delimiters end repeat end if end repeat if item 1 of delimiters is item 2 of delimiters then put 1 into nofields answer "Include header information in fields?" with "Yes" or "No" put it into header repeat ask "Name or pathname of text file to import:" with item 2 of memory if short name of this stack is in it then if "," is not in memory then put "," after memory put it into item 2 of memory answer "Cant import current stack!" with "Ok" next repeat end if if it is empty then if cardcount > 0 then close file filename CleanExit end if Importdata else exit repeat end if end repeat put it into filename if "," is not in memory then put "," after memory put it into item 2 of memory set cursor to 4 open file filename repeat read from file filename until (numtochar of item 2 of delimiters) if it is empty and cardcount is 0 then answer "Could not find file: " & filename with "Ok" close file filename Cleanexit end if if it is empty then exit repeat if chartonum(last character of it) is not item 2 of delimiters then put item 2 of delimiters into temp if temp is 9 then put "Tab" into temp if temp is 13 then put "Return" into temp answer "Cant find record delimiter: " && temp with "Ok close file filename cleanexit end if put empty into last character of it if (numtochar of item 1 of delimiters) is not in it and nofields is 0 then put item 1 of delimiters into temp if temp is 9 then put "Tab" into temp if temp is 13 then put "Return" into temp answer "Cant find field delimiter: " && temp with "Help" or "Ok" if it is "help" then answer "Use double record delimiters for records..." with "Continue" answer "with no field delimiters. Example: 13,13" with "Ok" end if close file filename Cleanexit end if if (numtochar of item 1 of delimiters) is not "," and nofields is 0 then repeat until (numtochar of item 1 of delimiters) is not in it put "," into character offset((numtochar of item 1 of delimiters),it) of it end repeat end if if cardcount is 0 then domenu "New background" else domenu "New card" end if add 1 to cardcount if nofields is 0 then put the number of items in it into limit else put nofields into limit end if repeat with count = 1 to limit if cardcount is 1 then add 1 to fieldcount if fieldcount < 125 then domenu "New field" else answer "No more fields can be created!" with "Ok" Cleanexit "Compact" end if end if put "Field" & count into fieldname set name of bkgnd field (number of bkgnd fields) to fieldname set style of bkgnd field fieldname to scrolling If nofields is 0 and header is "Yes" then put "Field" && count && "of" && the number of items in it & return into bkgnd field fieldname put "Record" && cardcount && "of file:" && filename & return & return after bkgnd field fieldname end if if nofields is 0 then put item count of it & return after bkgnd field fieldname else put it & return after bkgnd field fieldname end if end repeat choose browse tool end repeat close file filename go card id startcard end importdata on Cleanexit var global memory if param(1) is "compact" then domenu "Compact stack end if choose browse tool set userlevel to item 1 of memory set lockscreen to false set lockmessages to false exit to hypercard end Cleanexit We hope that this script will aid in your productivity with HyperCard. Please let us know how you like it. WHOOPS by David Leffler An errata from the first two issues of WINDOID. ISSUE #1: In the first issue Gary Bond showed us how to find out which line of a scrolling field the user has clicked on. Apple employee Brian McGhie found a small flaw and wrote me the following letter: The question was asked, "How can I find out which line of a field a user has clicked in?" The response was a method that would work in static fields, and then further developed into a method for scrolling fields. The function Clickline as given for scrolling windows only works if the scrolling field is (in pixels) an integer multiple of the textheight. A corrected version of Clickline appears below. Function Clickline return (trunc(((scroll of the target) + (item two of the clickloc) - (item two of the rect of the target)) div the textheight of the target) + one) End Clickline The idea is to calculate the number of pixels from the top of the field to the position that you clicked on. So you take the number of pixels that have scrolled offscreen, and add in the vertical position of the mouseclick minus the vertical position of the top of the field. This sum is the total number of pixels from the logical top of the window not the visual top. Divide by the height of the font to get the number of lines. Since this number is not always an integer, truncate it. The result is a zero based count of lines. Add one and return the correct line number that was clicked in. ISSUE #2: Robin Shank provided us with a "How to Program FunctionKeys" in HyperTalk script. We left out a word, and the script will not work without it. The script should read: On functionkey whatkey if whatkey is 6 then type "x" with commandkey Cut whatever is selected domenu "background" enter the background type "v" with commandkey Paste it domenu "background" leave the background else pass functionkey end if end functionkey We hope you have enjoyed reading WINDOID and have found it to be interesting and informative. We care enough to take the time to give you the most up-to-date information about HyperCard, and we would like to make a request for a little of your time. There is a form that follows this editorial; please fill it out if you will. We are very interested in hearing from you. What sort of stacks are you using, what kind of stacks are you creating, and what are your joys and frustrations in using HyperCard. You have the unique opportunity to communicate directly with Bill, Dan, and the entire HyperCard development team. We really want to know what you would like to see in HyperCard and are more than willing to give you what you want. What we need to make this happen is your input. Let us know what you think. We can address it in WINDOID or perhaps the next revision of HyperCard. You can make a difference in the world by communicating with us. Dont pass up the opportunity! The form: Please use the following form to make a difference in the world: Date: Name: Address: Phone #: Versions of: a. HyperCard: b. Associated software: c. System Software: 1. System 2. Finder 3. ImageWriter file 4. LaserWriter file 5. Any others Type of Macintosh: Peripherals: Description of problem, suggestions or comments: Fill this out and send it to: AHUG C/O David Leffler Apple Computer Inc. MS 27AQ 20525 Mariani Ave., Cupertino, CA 95014 Or copy the format and AppleLink it to: HYPERBUG$ We thank you for your participation and know that you will be pleased to see your ideas, comments, and suggestions appear in future issues of WINDOID, the publication for the informed HyperCard user. -- Apple's HyperCard Grievance Center "Give us your bugs, your comments, your gentle criticisms..." UUCP: {pyramid!sun,voder,nsc,ucbvax!mtxinu,dual,decwrl,amdahl}!apple!hyperbug