blob: 4d785404067a335bd1ba0696ad78bf61d423172e [file] [log] [blame]
Jack Jansen024a3871996-07-18 16:07:05 +00001<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
6This document will show you how to create a simple mac-style
7application using Python. We will glance at how to use file dialogs and
8messages. <p>
9
10Our example program <a href="example0/checktext.py">checktext.py</a> asks
11the user for a text file and checks what style end-of-lines the file has.
12This may need a little explanation: ASCII text files are almost identical
13on 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
Jack Jansen3412c5d1997-08-27 14:08:22 +000018<li> MSDOS and Windows terminate lines with first a carriage return and then a linefeed.
Jack Jansen024a3871996-07-18 16:07:05 +000019</ul>
20
21Let us have a look at the program. The first interesting statement in the main
22program is the call to <code>macfs.PromptGetFile</code>. This is one of the routines
23that allow you to ask the user to specify a file. You pass it one required
24argument, the prompt string. There are up to four optional MacOS <em>file type</em> arguments
25you can pass, as 4-byte strings. Specifying no file
26type will allow the user to select any file, specifying one or more types restricts
27the 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
30success indicator. The FSSpec object is the "official" MacOS way of specifying a
31file, more on it later. The success indicator tells you whether the user clicked OK
32or 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
37without the prompt. It has up to four optional filetype arguments.
38<li> <code>StandardPutFile</code> asks the user for an output file. It will
39warn the user when she tries to overwrite an existing file. The routine has one
40mandatory 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).
42It has one optional argument: a prompt string.
43</ul>
44All routines return an FSSpec and a success indicator. <p>
45
46There 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>
49for details), but passing them to <code>open</code> is not
50one of them. For this, we first have to convert the FSSpec object to a pathname, with
51the <code>as_pathname</code> method. This returns a standard MacOS-style pathname with
52colon-separated components. This can then be passed to <code>open</code>. Note that
53we call open with mode parameter <code>'rb'</code>: we want to read the file in binary
54mode. Python, like C and C++, uses unix-style line endings internally and opening a
55file in text mode (<code>'r'</code>) would result in conversion of carriage-returns to
56linefeeds upon reading. This is something that Mac and DOS programmers are usually aware
57of but that never ceases to amaze unix buffs. <p>
58
59After 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.
61The EasyDialogs module has a few more useful simple dialog routines, more on that in
62<a href="example1.html">example 1</a>. <p>
63
64The rest of the code is pretty straightforward: we check that the file actually contains
65data, count the number of linefeeds and returns and display a message with our guess of the
66end-of-line convention used in the file. <p>
67
68The <a href="example0">example0</a> folder has three text files in Mac, Unix and DOS style
69for you to try the program on. After that, you can continue with <a href="example1.html">example 1</a>
70or 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>