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)+'`
!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);
}
}