[net.sources.mac] Display a file program

info-mac@uw-beaver (11/07/85)

From: kangaro!milo@Purdue.EDU

This is a binhex version of my file display program.
(This file must be converted with BinHex 4.0)

:"d4TFh"XBAN!39"36%4'58`J!*!(&G0TdJ#3"!%!N!-9)`!!&#-!N!1`,C!(4@j
N)'pQ)%CTE'8YN!F!&!""BQpeG#!L4'PcF'aKH5"K)%CTE'8L1bJY!%459P)!!%C
TE'8!!%p`C@i[6cY$E'pcC5p$1e&eDA3[83"&C'Pd!!"9EQ4[1bJY1d0eG$Y$Eh"
j1e"KFh4P1d0XC@&b1bJY1e0SEhFJ3faTF'*[BA*N!!"$E'PMDb")CA*P)(4[)&"
KGA0P)&"bD@jdEh9d!!"5C@aPBA0P)'e[GA0P)'*eG(4[EL"dEb"bCA0eE@8JF(*
TER4[GA3!4'PcF'aKH5"K)'CTE'8JF(*[Ch*KE3!!3fp`H3#3!b!!N!-`!*!(%!#
3!b!!!$mm!!'Tm!!!2c`!!UR`!!!2SJ#3!`'J0PQ2,ca%394"2c`!!+QJ*PpCMbm
,UD8S(cSmrIT)a85&)!A3K+-H+%MCa5(-!VBJ8b*-)!5J,Lm,UD01V3!U3Hd!+MJ
Srri[#+Ra@Bm[2%024%8r"+QJ)&qJ5D!G5'crqNKXrrj1ZJ5)8)m[,2rk2bcrrNk
k!!CFMdje6PErr%*Zrra#,2r)3Qcr"%KXrXC1ZJV8@)p1ZJlm3QFr22rr6VS0h&L
26VS1-Nkk$$T1ZJS#3UG1ZJ`#@)p1ZJl%6VS+aLP!rrC1ZJ3U2c`"8Mmm!I`r2!!
S2c`!"%KXrpT1ZJjFh[`!$$!XrpjC3$m!-#cri&P!2`!r2!!B2c`!"%KXrp*1ZJi
ih[`!$%+R3QF[22q3"%*R2c`!!8KX!!")E2rD5'cr&Nkk$F,Hr!!D+8$r%LmXra*
1ZJSq@)m[2!#3!`K)E2r+)'cqaN(S!"![#%kk$@lHr!!--#crd*!!E2r-18$r!Mm
m!!41ZJI19)mr2!!*6VS(e&52-#crcP9!2`!`,2r-8N!r!%kk#TTBMc!Xr`4R!!&
`+A`!N!-Jr[a)E2lF5'cqr$mXr`"1ZJLdh[`!#JbX!*!%r[aQ!!"f2bcr!%kk#04
8Md*Xr`3`,2r198!r!$!Xrma53$m!6VS+4PL2,bcrpMmmrr9#CdKXrmT1ZJ`Zh[`
!$%KX!""1ZJGX@)m[,2rf2ccrp8*R5'crbNkk$!lHr!!--#crcP9!2`!`,2r-8N!
r!%kk#ITBMf!!!04#E[rq-#lrrNM!X+cqr'`!!-)`,[rq3Hcqh0$!%"")J,"m!"p
[!!!F-#lrrN(XrYc3`"!35)!r!%kk"Za8Mf!!!)S`,[rq3Hcqh0$!%"")J,"m!!e
Q!!!b3Qlrr#mXrrBr22re3QG)E2r+6VS,JYlm!!``,2r198!r!$!Xrma53$m!6VS
*EPL2-#lrrN(XrYc3`"!35)#`I!!*CJ!!,Mmm!#"1ZJD#9)p5E[rm-#lrr-"m!!G
R!!!82c`!)%kk"QK8Me*ZrraJ!2rN8QlrrQ!!rc41ZJb%5'crYMmmrrp1ZJY3A)m
C32r'-#crYQ!!!!+`I!!"C`!!"Q!!!-C)E2m15'cr`%kk#Y"3McP!rl3`,2qdB!!
!!V"m!!&R!!!'B!!!(%KXrm"1ZJSJ@)m[!%kk!PKBMf!!!)*J!!!1X(`!!QF!!!C
J!!!B,bcr$NKXrlC1ZJX38)pJ!!"JB!!!$V"m!!4R!!!'B!!!(NKXrp*)E2r!,bc
r$Nkk#JVHr!!-B!!!1'!!!!k`I!!$C`!!"Q!!!#JJ,2m1,`"1ZJQJ*"r"3V##C`!
!$#mXr`j1ZJPq@)pJ!!!'B!!!!Q!!!2*J!!!1X(`!!fF!!!CJ!!!b-#cra-"m!3"
R!!!H)#crZ-#m!*!$rdL!2`"1ZJPd9)m[!%kk!CKBMf!!!,CJ!!!1X(`!"@F!!!C
J!!!+B!!!SQ!!!!k`I!!)C`!!"Q!!!&i`,2r%`(`!!@F!!#iJ,2qiX+cr%QB!!#*
#CbmXrqj1ZJH+A)p#CbmXrqT1ZJH8A)p1ZJKFB!!!(N*R,bcrlNkk"i"FMd*R,bc
rkNkk"ejFMdkk#$aJ!!!kB!!!$V"m!!CR!!!'B!!!+L!XrlL`V2m5CJ!!&LmXra*
1ZJI3@)m[,2m56VS(ePL2B!!!"Q!!!!)3,2r)5)#`I!!!C`$mT%jH6R91G8j@rrj
)E!!U2c`!!8kk"r"FMbP!rqC)E!!X,bcrjNkk#!a3MdKX!%B[,2rQ6VS)+&#25'`
!6$mm!3"1ZJI#A)mT32rU5'`!8LmXrqT1ZJIH8)p)E!"S2c`"!8kk"k*FMbP!rqj
)E!"Z,bcrlNkk"lj3MdKX!*ir2!%#6VS(JPb2+8$rmNKX!,`[,2rb6VS(RP#22A`
!!Irq$'i!"2rqEJ!!)%*R-#lrrZ@!3HcriY$!,a"1ZJFJA)p5E[rqB!$rfNkk"bK
1ANje6PEqS$!Z!!KJ!!!#X(`!!@F!!!CJ!!%`$'i!!3!+CJ!!mN*R6VS$@&522c`
!$%kk!ej8MdKXrmT1ZJKH@)m`,2r+d(`!4Mm!2bcrc%kk"KaBMdKX!141ZJ)m@)p
)E!$m6VS#-PL25'`"'Nkk!LKBMdKX!6*1ZJ)H@)p)E!&'6VS#&&L25'`"A%kk!JT
BMcmm!!41ZJ,U9)mr2!!*6VS#m&522ccrr8*R6VS&ePL25'`"E%kk!H"BMdKX!DC
1ZJ(@@)p)E!(F6VS"c&L25'`#%Nkk!F*BMdKX!Nj1ZJ'i@)p)E!+%6VS"VPL25'`
#YNkk!D4BMdkk!I3`,2r198!r!$!Xrma53$m!6VS&B&L2B!!!,NKZr`!r,J!+,bc
rjNkk"2MHr!!+5'lr!%kk"@TBMcP!rl)[,2m56VS%JPL2B!!"5'!!!!k`I!%!C`!
!"Q!!!4B`,J!+B!!!!V"m!!&R!!!'B!!!S$em!'6qr$em!$cqrMmm!!4)E!,X5'l
qSNkk"&VHr!!+5'lqXN+R5'lqSMmm!!&#TdKX![*)E[lm6VS'FYlm!"S3,[kbC`!
!8$!Xr`4R!!!32bcr!%kk!b*8Md*Xr`4)E2m!2blqZ%KZrVa1ZJ+Fh[`!#Ja!!!"
Q!!!H,bcrpMmmrr9#CdKXrmT1ZJCfh[`!$$Pm!!(r"'!!!'"J!!!1X(`!!QF!!!C
J!!!J-#cr"'F!!"!r,2m!6VS#`&523Qcr"'!!!$CJ!!!1X(`!!fF!!!CJ!!!Q-#c
r"'F!!"!r,2m!6VS#PP523Qcr""Pm!!(rb'!!!!CJ!!!#B!!!+'!!!!k`I!%"C`!
!"Q!!!"J`,J!+8d!r!%kk"R48Mf!!!!CJ!!!#3QG1ZJ9H9)p1ANje6PB!!%*R-#c
r!Lm!,bi!#%kk!5jBMb3I`8+3!%*)`)(m!!)r!%kk!mCBMbmZ!!K1ZJ$X@)mJE2m
5-#J!5P4!2`!JE2m5-#J!-N4!2`"1ZJ1H@)p1ANje6PErpLmm!*!$#%KZrrC)E2r
+6VS'#0lm!!a#E[rq$'i!$2rqE!!!*%KZrrC1ZJ9`@)p#Ccmm!!C)E[rf6VS'JP#
28QlrrQ!!rpB[2!#3!`K)E[rf5'crbNkk"F,Hr!!-3QlrrJaZ!!RrrQ`!!#4)E[r
f6VS&+PL22c`!"N*R5'lrpNkk"Ma3Me*ZrrjJ!2r@6Pj1G8j@!!!`,J!)2`#SKdj
H6R919J!!-#i!#$m!U)T1ANje6PB!!"!Z!!P)J$m!U)01ANje6PB!!#mZ!!K1ZJ&
)@)mJ,J!),`#SK#mZ!!K1ZJ''@)p1ANje6PB!!#mZ!!K1ZJ%N@)p9Mb!Z!!J[!+L
-,bi!#%kk!@"BMc!I6Pj1G8j@!!!JEJ!),bJ!%Nkk!2KBMb!Z!!JJ3$!Z!!aR"+3
!B!+J!#"Z!!J[+!!56VS"+&L2)'i!#$!S!""1ANje6PB!!#!Z!!JJ3$!Z!!aR"+3
#B!+J!NjH6R919J!!)#i!##"!-#i!$'F%T!&J!U)"6Pj1G8j@rl!YEJ!)rm)pEJ!
-rmC#,[r+3Llrbd+Zrma#CdKZrl"1Z[pUA)mJEJ!1-+lrb$!Zrm"1ANje6PErX$e
Z!!Mrb#eZ!!lrd#"Z!!SY82r83Qlrh%*R5'lrX%kkrh"FMb"Z!!SJV[rB-#lr`%j
H6R919[q`2@i!#2r)3QG)E[q`6VVrC&b26Pj1G8j@!!#Tc%jH6R919[rm)#i!#'G
#3QlrrM!ZrriJEJ!)d-!G82rm-#lrrL"Z!!M3`"#Zrre5E[rq(@lrr2rp%#lrr%L
!X(`!!'E1-#lrrP0!)'i!#"#!6Pj1G8j@rr`J,J!)Cd`JEJ!)%"$!I!$r28$rr%*
Zrri`,[rqX'lrr'`N-#lrrL"Z!!M3`"!S!!%d,[rq)'i!#0$#%)!`,[rq8QlrrQ$
5-#lrr#"Z!!M3`%)36Pj1G8j@!!!J,J!),`#SENjH6R919J!!)#i!##m!U(01ANj
e6PB!!&Q2U0JJ(djH6R919[rm,`X[#Mm(*Qi!##4Z!!`q,J!3,8[rr$!(8dG+3'F
1%"S@`%L!X(`!!'F#B1SJ,[rm2KmNAbCI6Pj1G8j@!!!J,J!),`!`,J!-2`!J,J!
1,`#T4LmZ!!j1Z[mF@)p1ANje6PB!!#!Z!!J[!$!Z!!`r!+Nk6Pj1G8j@!!!J,J!
),`!`,J!-2`#T18jH6R919J!!-#i!#$m!-#i!#Mm!U*01ANje6PB!!$!Z!!Jr!$!
Z!!Sr!+L86Pj1G8j@!!![#bCZ!!J3%dL!X(`!!'B%&V`!!5m,6VVq8&L2)!Y5J#"
!%"")J,"m!!&Q##!,8S!J3%)39BmJ#bm!UEB`(bCI6Pj1G8j@!!!J,J!),`#T)Nj
H6R919J!!)#i!##m!U501ANje6PB!!#mZ!!LTHdjH6R919J!!)#i!##m!-#i!$$m
!U691ANje6PB!!+Nh6Pj1G8j@!!#T-%jH6R919J!!,bi!#NkkrF*BMeQ2-#i!#$m
!)#i!#Lm!U6%[,J!+6VVpq&L2)"p1ANje6PB!!#mZ!!a1Z[f8@)mJ,J!),`!J,J!
-,`#T-bmZ!!a1Z[h-@)p1ANje6PB!!#mZ!!JJEJ!-,a#T68jH6R919J!!)#i!##m
!U4p1ANje6PB!!&Q2U53J(djH6R919J!!@8mJEJ!),a#T25!I6Pj1G8j@!!"CMa!
Z!!P)J$m!U6iJ(djH6R919J!!-#i!#$m!U6K1ANje6PB!!#mZ!!JJEJ!-,a![,J!
3U591ANje6PB!!#"Z!!J[%#mZ!!`[,J!32bi!&#mZ!"B[,J!D,bi!(Mmm!!+TkL"
Z!"j"k!!+,`K1Z[d-@)p1ANje6PB!!&92)'i!##m3,bi!$+NX-"p1ANje6PB!!#!
Z!!J[!$!Z!!`r!$!Z!!ir!#!Z!"![!+M[6Pj1G8j@!!!J,J!),`#SYdjH6R919J!
!)#i!##m!U+01ANje6PB!!&@2-#i!#$m!)#i!#Lm!UA!3(dL!6Pj1G8j@!!!`,J!
+iBMKL$!Z!!LJ-NjH6R919J!!)#i!##m!)#i!$#m!UE01ANje6PB!!&@2-#i!#$m
!UF)`(dL!6Pj1G8j@!!!JEJ!))Qi!$#!Z!"#J,MP!rIT1ANje6PB!!+N51A`!!Il
D6Pj1G8j@!!![,J!36VVlb&L2@BmJ,J!),`!J,J!-,`!J,J!3,`!3,J!9(`!`,J!
@2`!J,J!B,`!3,J!G(`!J,J!H,`#T%bmZ!""1Z[[D@)mJ(djH6R919J!!)#i!##m
!-#i!$$m!-#i!$Mm!-#i!%$m!-#i!%Mm!U+G1ANje6PB!!#!Z!!J[!$!Z!!`r!$!
Z!!ir!+LT6Pj1G8j@!!#S8%jH6R919J!!UE41ANje6PB!!+Mq6Pj1G3#3!`B!#!!
"6R8!!!-B4'PcF'aKH5"K)'CTE'8!!#f3"d9ZC#"[CL"'D@aP,C!(!"3!3@*[GA3
J)N4TFh"XBANJB5"'D@aP)MXS,3"%8PC5!!"'D@aP!!"2F'9Z,dml3fa[Ff8[3cY
4G@Pd,e%!4@4TG!!!9@jNEcXS,6Y$GA3l3fp`H6Y3BA0dC6Y$E'9KFMXS,6Y6D'p
h)%0XDA"LEf&bC!!!3faTBfXJ5'9bC5"dEb"3BA9cC5"3FQPZG'peG!!!8Q9XC@&
cC5"YEh9cC5"LGA4dEfiJG'mJFQ9cG@eP)("bD@jdEh9d!%4TFh"XBANJB5"QD@a
P)("bEfGbB@d!!%0[F(PbD@GSG#!a16Je)'*j)%GbC@FJ3fpbFfpZ!%YKEQGKFQp
[)%Y[EQ0PF(4c,#"*EQ-Z!$%j-63a)&0eE@ePFR-J4(*TGQ8!8fpeG'JJ3Q9ZC#`
J58iJ0$Bf-cF!!#Jb-6NT)$)h0bde-c!f!!"'C@9X)'CbC@8JG'mJCfPfC5"dD'P
c)("bEfGbB@dJBAGKH5"dEb"KE'`JH@peFL"QFQPPEQ4c,J!!5A3JFfK[G@aN)%j
29#"LC5"cEfaN)'C[FL"`FQpQDA3Z)#"#C5"cGA*P)(4[)(4bH5"[GA)!3fpYF(9
dCA)J3Q&cC@3J3fpYEA9ZD@0KG'P[ER-J8hPcG'9Y)#*8D'8J3fpZEQ9MG'P[EL)
!4R*PC5"NC@e[)'aTEQ8J+$)a15NJ-MFh,68i-M8JBACKD@aKBQaP)$)d)'K[GA*
c)'&d)$-`-#"[FJ!!-6)`-#"LBA9N,L!J3Q8JFh9bC5"dEb"XEfpV)'&d)(4SC5!
L6@&M9'9MD#)JFh"PBfPKE!!!D@jdCA*PFh3JCh*[GA!JCQpb)'PZCQpbE@&dD@p
Z)'pQ)'PZG'9bCA0d)(4[)%eKB`"`FQpRFQ&YE@9bFb"KEQ3JG'KP)#*YB@0TER4
[FfJL)&0*4b"QEh)JCf9ZCA*KE#"TEQC[,J"849K8!*!%+T!%)&0&9%9@48j868&
65b"16e3J58e36%9048j84841!*!&(%4'58`!N!-"5801)`#3"B"'8N9'!*!&J!#
3"`G"8&"-!*!&!3$rN!5!!!!"V[rrrBS!!!'ZrrrpJ!!!!Iq3")!!!!'!!!!"Rrr
r!B!!!!'(rrrKJ!!!!B(rrrQ!!!!"KrrriB!!!!'Irrq"J!!!!BIrrq'!!!!"JIr
rqB!!!!'(rrrKJ!!!!Crrri'!!!!"KrrriB!!!!'"rrrjJ!!!!Iq3"!#3((rrrrj
rrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrj
rrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrJ#3"J%
!N!-9)`!!&#-!N!1`!!#5KJ!q!*!$(!#Z!!9$6d4&!!)!-N4"9%%!N!0@3Nj%6!#
3!f*%4NP-!*!$ENC548B!N!0k5801)`#3!iB!![rr!!!2bJ#3"3(rr`#3!b3!N!E
rr`#3#[rr!!!2e!#3"B!!!#3!%[!!!*+Q!!$rrb3!%a!!!**q!)$rrb3!%a3!!*+
L!)$rrb3!%am!!*+H!3e#T`:

info-mac@uw-beaver (11/07/85)

From: kangaro!milo@Purdue.EDU

This is a little program I whipped up in Megamax C that will display any
Mac file of type TEXT.  It is very handy for looking at text files you have
downloaded from a BBS without having to load a text editor.  The program
loads in about 4 seconds and supports standard Mac desk accessorys...etc.

Let me know if you have any problems with the program...the source follows...

Greg Corson
UUCP: {ihnp4 | ucbvax}!pur-ee!kangaro!milo
ARPA: pur-ee!kangaro!milo@Purdue.ARPA
EDU: kangaro!milo@ee.Purdue.EDU
Or call my BBS at (219) 277-5825

/* This sample program allows a user to open a file and print it's contents
** to a window on the Mac screen.  To give the compiled program an Icon
** copy the resources from Display.rsrc (use Rmover or Resource Editor) and
** paste them into the compiled file.  Then use SetFile to change the creator
** name of the compiled file to DFIL and set the bundle bit.  When you 
** return to the finder the program icon should have an icon.
** By Greg Corson
** 19141 Summers Drive
** South Bend, IN 46637
** (219) 272-2136
** UUCP: {ihnp4 | ucbvax}!pur-ee!kangaro!milo
** ARPA: pur-ee!kangaro!milo@Purdue.ARPA
** EDU: kangaro!milo@ee.Purdue.EDU
** Or call my BBS at (219) 277-5825
*/

#include <qd.h>  
#include <win.h>
#include <menu.h>
#include <event.h>
#include <pack.h>
#include <font.h>

#define LASTMENU 4
#define APPLEMENU 1
#define FILEMENU 256
#define EDITMENU 257
#define STOPMENU 258
#define NULL 0L
#define FALSE 0
#define TRUE 1
#define eoferr (-39)

rgnhandle    updateregn;
menuhandle   mymenus[LASTMENU+1];
rect         screenrect, dragrect, prect;
boolean      doneflag, temp;
eventrecord  myevent;
int          code, refnum;
windowrecord wrecord;
windowptr    mywindow, whichwindow;
grafptr      temport;
int          themenu, theitem;
int          fileopen,wide,fd1;
long         count;
char         tempbuf[32];

main()
{
   #include <qdvars.h>	/* quickdraw globals */
   int i,j;

/* Initialize variables */

   j = 0;
   doneflag = FALSE;
   fileopen = FALSE;
   
/* Initialize quickdraw, fonts, events, windows, menus, dialogs and cursor */
   
   initgraf(&theport);
   initfonts();
   flushevents(everyevent, 0);
   initwindows();
   initmenus();
   teinit();
   initdialogs(NULL);
   initcursor();

/* Create an empty region pointer for use by scrollrect later */

   updateregn=newrgn();

/* Setup the menu bar */

   setupmenus();
   
/* Setup the drag rectangle so part of the window will always be visible */

   setrect(&screenrect, 4, 40, 508, 338);
   setrect(&dragrect, 4, 24, screenrect.a.right-4, screenrect.a.bottom-4);
   
/* Create the window and set the current port to the window port */
   
   mywindow = newwindow(&wrecord, &screenrect, "Display a file", TRUE, 0,
			 (long)-1, FALSE, (long)0);
   setport(mywindow);

/* get the rectangle for the current window and put it in prect */

   blockmove(&theport->portrect, &prect, (long)sizeof prect);
   wide = prect.a.right  - prect.a.left;
   
/* Now that the window and menus are drawn set the window font to monaco 9 */
   
   textfont(monaco);
   textsize(9);
   moveto(prect.a.left+1,prect.a.bottom-2);

/* Main loop to process events */
   
   do {

/**** If a file is open copy a line to the output window */

      if(fileopen)
         {
	 count=32;
	 fsread(fd1, &count, tempbuf);
	 if(count == 0)
	    {
	    fsclose(fd1);
	    fileopen=FALSE;
	    moveto(prect.a.left+1,prect.a.bottom-2);
	    scrollrect(&prect,0,-11,updateregn);
	    drawstring("-------End of File-------");
	    scrollrect(&prect,0,-11,updateregn);
	    moveto(prect.a.left+1,prect.a.bottom-2);
	    }
	 else
	    {
	    for(i = 0; i < count; i++)
	       {
	       if(tempbuf[i] > 31)
	          drawchar(tempbuf[i]);
	       else
	          {
/**************** Scroll window if we get a carriage return */
                  if(tempbuf[i] == '\r')
		     {
		     j = 0;
		     scrollrect(&prect,0,-11,updateregn);
		     moveto(prect.a.left+1,prect.a.bottom-2);
		     }
/**************** Expand tabs by outputting spaces */
                  if(tempbuf[i] == '\011')
		     {
		     drawchar(' ');
		     j++;
		     for(;j & 07;j++)
		        drawchar(' ');
		     }
		  }
	       }
	    }
	 }

/**** Get the next event */

      systemtask();
      temp = getnextevent(everyevent, &myevent);
      switch (myevent.what)
         {
	 case mousedown:  /* mouse down, call findwindow to figure out where */
	    code = findwindow(&myevent.where, &whichwindow);
	    switch (code)
	       {
	       case inmenubar:	/* in meun bar, execute the menu command */ 
	          docommand(menuselect(&myevent.where));
		  break;
               case insyswindow:	/* in desk accessory, call desk manager */
	          systemclick(&myevent, whichwindow); 
		  break;
	       case indrag:	/* in drag, call dragwindow to move it */
	          dragwindow(whichwindow, &myevent.where, &dragrect);
	          break;
	       case incontent:	/* in content area, make application window the frontmost */
	       if (whichwindow != frontwindow())
	          selectwindow(whichwindow);
	       break;
	       }
	    break;
	 case keydown:	/* If keydown event, check for menu command key */
	    if(myevent.modifiers & cmdkey)
	       docommand(menukey((char)(myevent.message & 0377)));
	    break;
	 case autokey:
	    break;
	 case activateevt:	/* Application window becomming active, do nothing */
	    if((myevent.modifiers & 1)&&(((windowptr)myevent.message) == mywindow))
	       {
	       disableitem(mymenus[3],0);
	       enableitem(mymenus[2],0);
	       drawmenubar();
	       }
	    else
	       {
	       enableitem(mymenus[3],0);
	       disableitem(mymenus[2],0);
	       drawmenubar();
	       }
	    break;
	 case updateevt:	/* Update event, update the window frame */
	    if(((windowptr)myevent.message) == mywindow)
	       {
	       beginupdate(mywindow);
	       endupdate(mywindow);
	       }
	    break;
	}
    } while (doneflag == 0);
}

/*---------------------------------------------------------------------------*/
/* setupmenus()---This subroutine sets up the menu bar and reads in the desk
** accessory menu
*/

setupmenus()
{
   int i;

/* Apple menu, \024 is the apple character, adresmenu call loads all type DRVR resources */
   mymenus[1] = newmenu(APPLEMENU, "\024");
   appendmenu(mymenus[1], "About \"Display a File\";(-");
   addresmenu(mymenus[1], "DRVR");
/* File menu with open, close and quit selections */
   mymenus[2] = newmenu(FILEMENU, "File");
   appendmenu(mymenus[2], "Open/O;Close/C;Quit/Q");
/* Edit menu with cut, copy and paste */
   mymenus[3] = newmenu(EDITMENU, "Edit");
   appendmenu(mymenus[3], "Undo;(-;Cut;Copy;Paste;Clear;(-;Show Clipboard");
/* Stop scroll menu */
   mymenus[4] = newmenu(STOPMENU,"Click Here to Pause Printout");
   appendmenu(mymenus[4], "Release mouse button to resume printout");
   for (i=1; i<=LASTMENU; i++)
      insertmenu(mymenus[i], 0);
/* Draw the completed menu bar */
   drawmenubar();
}
/*---------------------------------------------------------------------------*/
/* docommand(themenu, theitem)---this subroutine processes commands from the
** menu bar.  Themenu is the menu ID, theitem is the item number in the menu
*/

docommand(themenu, theitem)
int themenu, theitem;
{
   char name[256];
   point  openp;
   sfreply rep;
   sftypelist typelist;
   int i;

/* Switch to decide what menu the cursor is in */
   
   switch (themenu)
      {
      case APPLEMENU:	/* Mouse down in apple menu */
/******* Item one is the "about Display a file" box */
         if(theitem == 1)
	    {
	    textfont(systemfont);
	    textsize(12);
	    eraserect(&prect);
	    moveto(prect.a.left,prect.a.top+70);
	    center("Display a file program");
	    center("Copyright 1985 by Greg Corson");
	    center("Kangaroo Koncepts, Inc.");
	    center("19141 Summers Drive");
	    center("South Bend, IN 46637");
	    center("(219) 277-5306");
	    textfont(monaco);
            textsize(9); 
	    move(0,-3);
	    center("Feel free to give this program away to all your friends.");
	    center("It should NOT be sold for profit.  Be sure to try our");
	    center("Computer Based Communications System \"The Connection\"");
	    center("Free demo line (219) 277-5825 available 24 hours at 300 or");
	    center("1200 baud.  Be sure to look at the \"MacTech\" special");
	    center("interest group for information of interest to Mac");
	    center("programmers and the \"macintosh\" SIG for general info.");
	    pretty();
	    moveto(prect.a.left+1,prect.a.bottom-2);
	    }
/******* The rest of the items are desk accessorys */
         else
	    {
	    getitem(mymenus[1], theitem, name);
            refnum = opendeskacc(name);
	    setport(mywindow);
	    }
	 break;
      case FILEMENU:	/* Mouse down in file menu */
         switch(theitem)
	    {
	    case 1:		/* Open file */
	       openp.a.v = 100;
	       openp.a.h = 60;
	       strncpy(&typelist[0],"TEXT",4);
	       sfgetfile(&openp.a,"",NULL,1, typelist, NULL, &rep);
	       if(rep.good)
	          {
		  if(fileopen)
	             {
		     fsclose(fd1);
		     fileopen = FALSE;
		     }
		  if(fsopen(rep.fname,rep.vrefnum,&fd1) == noerr)
		     {
		     scrollrect(&prect,0,-11,updateregn);
		     fileopen=TRUE;
		     }
		  }
	       break;
	    case 2:		/* Close file */
	       if(fileopen)
	          {
		  fsclose(fd1);
		  fileopen = FALSE;
		  }
	       break;
	    case 3:		/* Quit */
	       if(fileopen)
	          {
		  fsclose(fd1);
		  fileopen = FALSE;
		  }
	       doneflag = 1;
	       break;
	    }
	 break;
      case EDITMENU:	/* Process system edit events */
         systemedit(theitem-1);
	 break;
   }
   hilitemenu(0);
}
/* Center a string in the window */
center(str)
char   *str;
{
   move(((wide-stringwidth(str))/2), 0);
   drawstring(str);
   move(-(mywindow->pnloc.a.h),(mywindow->txsize)+2);
}
/* draw a pretty design */
pretty()
{
   int j;
   rect tmprec;
   
   blockmove(&prect, &tmprec, (long)sizeof prect);
   for(j=0;j < 12;j++)
      {
      frameoval(&tmprec);
      insetrect(&tmprec,6,0);
      }
   blockmove(&prect, &tmprec, (long)sizeof prect);
   for(j=0;j < 9;j++)
      {
      frameoval(&tmprec);
      insetrect(&tmprec,0,6);
      }
}