| 1 | <HTML><HEAD><TITLE>Using python to create Macintosh applications, part zero</TITLE></HEAD>
|
|---|
| 2 | <BODY>
|
|---|
| 3 | <H1>Using python to create Macintosh applications, part zero</H1>
|
|---|
| 4 | <HR>
|
|---|
| 5 |
|
|---|
| 6 | This document will show you how to create a simple mac-style
|
|---|
| 7 | application using Python. We will glance at how to use file dialogs and
|
|---|
| 8 | messages. <p>
|
|---|
| 9 |
|
|---|
| 10 | Our example program <a href="example0/checktext.py">checktext.py</a> asks
|
|---|
| 11 | the user for a text file and checks what style end-of-lines the file has.
|
|---|
| 12 | This may need a little explanation: ASCII text files are almost identical
|
|---|
| 13 | on different machines, with one exception:
|
|---|
| 14 | <ul>
|
|---|
| 15 | <li> Unix systems terminate lines with the "linefeed" character, <code>0x0a</code>,
|
|---|
| 16 | <li> Macintoshes terminate lines with the "carriage return" character,
|
|---|
| 17 | <code>0x0d</code> and
|
|---|
| 18 | <li> MSDOS and Windows terminate lines with first a carriage return and then a linefeed.
|
|---|
| 19 | </ul>
|
|---|
| 20 |
|
|---|
| 21 | Let us have a look at the program. The first interesting statement in the main
|
|---|
| 22 | program is the call to <code>macfs.PromptGetFile</code>. This is one of the routines
|
|---|
| 23 | that allow you to ask the user to specify a file. You pass it one required
|
|---|
| 24 | argument, the prompt string. There are up to four optional MacOS <em>file type</em> arguments
|
|---|
| 25 | you can pass, as 4-byte strings. Specifying no file
|
|---|
| 26 | type will allow the user to select any file, specifying one or more types restricts
|
|---|
| 27 | the user to files of this type. File types are explained in most books on the Mac. <p>
|
|---|
| 28 |
|
|---|
| 29 | <code>PromptGetFile</code> returns two values: an <em>FSSpec</em> object and a
|
|---|
| 30 | success indicator. The FSSpec object is the "official" MacOS way of specifying a
|
|---|
| 31 | file, more on it later. The success indicator tells you whether the user clicked OK
|
|---|
| 32 | or Cancel. In the event of Cancel we simply exit back to the finder. <p>
|
|---|
| 33 |
|
|---|
| 34 | <code>PromptGetFile</code> has a number of friends that do similar things:
|
|---|
| 35 | <ul>
|
|---|
| 36 | <li> <code>StandardGetFile</code> is identical to <code>PromptGetFile</code> but
|
|---|
| 37 | without the prompt. It has up to four optional filetype arguments.
|
|---|
| 38 | <li> <code>StandardPutFile</code> asks the user for an output file. It will
|
|---|
| 39 | warn the user when she tries to overwrite an existing file. The routine has one
|
|---|
| 40 | mandatory argument: a prompt string. Pass the empty string if you do not want a prompt.
|
|---|
| 41 | <li> <code>GetDirectory</code> asks the user for a folder (or directory, in unix terms).
|
|---|
| 42 | It has one optional argument: a prompt string.
|
|---|
| 43 | </ul>
|
|---|
| 44 | All routines return an FSSpec and a success indicator. <p>
|
|---|
| 45 |
|
|---|
| 46 | There are many things you can do with FSSpec objects (see the
|
|---|
| 47 | <a href="http://www.python.org/doc/lib/macfs.html">macfs</a> section in the
|
|---|
| 48 | <a href="http://www.python.org/doc/lib/Top.html">Python Library Reference</a>
|
|---|
| 49 | for details), but passing them to <code>open</code> is not
|
|---|
| 50 | one of them. For this, we first have to convert the FSSpec object to a pathname, with
|
|---|
| 51 | the <code>as_pathname</code> method. This returns a standard MacOS-style pathname with
|
|---|
| 52 | colon-separated components. This can then be passed to <code>open</code>. Note that
|
|---|
| 53 | we call open with mode parameter <code>'rb'</code>: we want to read the file in binary
|
|---|
| 54 | mode. Python, like C and C++, uses unix-style line endings internally and opening a
|
|---|
| 55 | file in text mode (<code>'r'</code>) would result in conversion of carriage-returns to
|
|---|
| 56 | linefeeds upon reading. This is something that Mac and DOS programmers are usually aware
|
|---|
| 57 | of but that never ceases to amaze unix buffs. <p>
|
|---|
| 58 |
|
|---|
| 59 | After we open the file we attempt to read all data into memory. If this fails we use
|
|---|
| 60 | <code>EasyDialogs.Message</code> to display a message in a standard dialog box and exit.
|
|---|
| 61 | The EasyDialogs module has a few more useful simple dialog routines, more on that in
|
|---|
| 62 | <a href="example1.html">example 1</a>. <p>
|
|---|
| 63 |
|
|---|
| 64 | The rest of the code is pretty straightforward: we check that the file actually contains
|
|---|
| 65 | data, count the number of linefeeds and returns and display a message with our guess of the
|
|---|
| 66 | end-of-line convention used in the file. <p>
|
|---|
| 67 |
|
|---|
| 68 | The <a href="example0">example0</a> folder has three text files in Mac, Unix and DOS style
|
|---|
| 69 | for you to try the program on. After that, you can continue with <a href="example1.html">example 1</a>
|
|---|
| 70 | or go back to the <a href="index.html">index</a> to find another interesting topic. <p>
|
|---|
| 71 |
|
|---|
| 72 | <HR>
|
|---|
| 73 | <A HREF="http://www.cwi.nl/~jack">Jack Jansen</A>,
|
|---|
| 74 | <A HREF="mailto:jack@cwi.nl">jack@cwi.nl</A>, 18-July-1996.
|
|---|
| 75 | </BODY></HTML>
|
|---|