[alt.sources.amiga] OS friendly assembly source examples

mykes@amiga0.SF-Bay.ORG (Mike Schwartz) (04/30/91)

The following UUENCODED .lzh file contains source
and object to a couple of assembly language programs
I wrote in about a half an hour.  

The first program is a skeleton Intuition application, 
which opens a screen and a window (with a menustrip).  
The program prints a string in the window and prints
information about the Intuition Events received.  I
must admit that I normally don't comment each line
of code, as I do in the example here, but my style
still shows how readable the code would be without
so many comments.  I typically comment each routine
at the top of the routine and heavily comment only
the routines which give me trouble...

The second program is the ol' printf("Hello, world\n")
program done in assembly.  I didn't comment the program
at all (who comments such a program :) and did not try
to squeeze it down as small as possible.  I've never
seen a 'C' compiler even come close to 20 or 30 times
this executable size :)

I hope that people who want to explore the use of
assembler language find my examples helpful.

--
****************************************************
* I want games that look like Shadow of the Beast  *
* but play like Leisure Suit Larry.                *
****************************************************

#################### Cut Here #######################
begin 777 asm.lzh
M&[0M;&@Q+8(   "T    -B2>%B  !6AE;&QO+:O&8N/?\,> ,;( >-!>GC NX
MZWH']F&S82(4ZGQ_%I^]QK .S_U3X9:LI__=5_K[JWVRP6>?GPT6^_RBR!(YX
M#M'5=9.L&?/?:],NR%EH<(-PPG-*&N?<<B("\P!9G,A-<A+0'< :UBEE0%@LX
MX0T&\C?%=QG0'S'2V["0'X% /U-#:Q,4'68M;&@Q+0$"  !H P  SB2>%B  X
M!VAE;&QO+G/R)=MEL76=3X_C _>&!W_^O?"Y]?U<]O_M,'\^Z]6NZ:+6V^8#X
M/K[&)&B7N5)4RI6LX<EU/9 L_9M_O)1W_?]+YYX !JL:[UL^'$KI>3=8(66DX
M@W=\)!O39&\3>0HTAR,2")F7"3ZXG6;1I!PF#"BM!6F)*ED[5P0\9P]^>M,8X
M\1CNSG1%OR,\$PQG5[7/Z"_WF$"HL(1) F-2&/17ZPX:MYWF37DSPRD$T12"X
M8!7O=)$4PSD__^5$7H@O^T!IC$Q,-N@N%4#@FT3 I)#']_]*0(L%EZ^$I]Y_X
M"=W)@,01Q".L8Z4*A8 %P\[PU+1)DIA\[@@\!8354J%>Q[ZYY>YS+$+!*>;@X
M'/J_01?DF79+M_H  :W\2F:>"/SUT:&#UO!\D.Z%Z#CM?G6\[4>WOPEGOO[.X
M?J-#:]N4>73()W?BZ_!Q\<,SV+2!DGA>\XLOAX.H"_\&RT#JK@X/R>N#?OO=X
M;_::N+V[P[CT)S(FS;MRB[SRQ7J"X!JDWD!E@?EZ;1^.!)3,3XY&W55*A73'X
M=;MBC"W(PKMYO8IH+W6GMY2BH35*+))LOGML0.C%\T>5\7(DIBV.J6:90BJ!X
MF:CV-V@J&N!6&A1D%"'A')2(J0'ZULS' 44OY?T3_56H@E!\,XTNP$ZIFI+"X
M?\2!?HBNQYI<Y!7)$@R@G\I+=A.@LIY-;1?=*!JM+6QH,2T%!0  ( @  *\DX
MGA8@  1T97-T_[+&8N/?\,> ,;( >-!2+&!=UO0/VH;(.EH(XX,PJE=G7?V5X
M=F;OA)L)$6\W_U'Q_/N_ +K.A3TW[CE26[#=9"@X?J&_EAT?':)?)Y:,<Y5#X
M=X9?:[ G(Q<[T3<[O_5]_*1_12L)-?"@ \ BGA3@(82Z5>;Y0Y 98O'33F.SX
M^=$CY(Y0_$])VU-!#VK1]-E\28KP!<'4&9XTJ@! -TM(C2(/"6]-*' '@;)(X
M$IW/\OD8'O6V@U0DA#O:4I2=H JCYR=\I2>0(>]M__&U I#S?:8]B0A['<L/X
M6L(JNZN#S%QC  2II^]A5@\\$4V'^H_?$@1$E_H':0"/+-?HA>#*0<1=\,8 X
MJ^K<DY!"*CA&^1A8<\;F5,FM'HVRNLPSVJ\[C:(C\BU.4D.9'F;NGJ+;"A#YX
MDU/)QY=<ES6)0AH 9Y\.:!_W#:%=WO([PX<-PKW$KO[%/P."NT<L ;^V!DQXX
MES[QX8A )W@O<8J?"Q9)(O*_>-S=2K\W<0O240B(2B$84"'MU"%P5B'*&A#*X
M <Q#EQK-&YK+5"^OV/]55P/&' />.#E=.I!X1_ EIS#5C;PY)5X7JS0%]R 7X
MZHN%W>O30XX4B/1O*^S^]H2=*GU1NQZ "]641#%1708X5"0G-/.W8HE?8.BGX
MD_X!OK6[J=UY)3AQIJHW6Q%QSKHD(7_=3!NUMJLEZA-,)WP5KO_/B<66_/M9X
M1T[*Q4[=@I)Y>XKDV:X>,$XZC:'*D;F%!.[&!)-._^+WL8\!<ZV.<K5(^0 "X
MJKZB5V+ONUS U"B$OHV,2K0-J-HJP\5#A#/W,+!>[)%_"48Z1?2^"@'+#1GAX
MTC.)2,YRPI/4'\83[S6!U!XYQ="ZUE!EBM9R!*X3_*>.U]J\YJXV;VSVHC7CX
M/13!$ SY6":O2[(/NAS$_YQ$JWR2QMR SB#@S%#C"#UR<W,YV_$5?2<DZ^%EX
M3OZ6".0-O VUPG-\[F;PH@?^4[G*UG\'!OBSSPR%P(:6OC\0O&8UXOE9(;1%X
ML+=?AH&F3-OB.+>U.D:"JUT7;PG?H] \X^R>@6H/$5BU;"Q;R\?E(YJ+X/K*X
M_)9WW#<*3Y<R.RS2N/J=-*_"^!.?X$XL<$^3@F)(#O1>F(ARVO]VW2T,RFD)X
MIFF\O38/9NE^LKEP'^^ NRO'0'\ROT8H]F3:<J.RN PMCP"LOWX6^GNJI/3QX
M,'.DM9LB>YJLR85_H:7W!WFR)]/'>=A\3V3?JV#?;?ZPV<'!^?9QX<(^76G1X
M%6JGVK%%YK9QJJ.-0*\M*V(:\  WN@*2GG:\1 HD5G$^>MT.*<4 WO_[U>U"X
M'@>[ O02;7*U88!P/O==?49"+%\H[ (N#"A;X(/6@@]^B#S 8E\@@];"!^,(X
MG23>H@P7T;?YTQSF4R>:+8KGT0@KT+X=.S?TM]#X1=X1&J0C"WO7Y^&V]J\AX
M14?B!Z <'UI8\9I\#,Y9Q=^<"S0?I#<+\U$3W7"G:Z<U>^>@>YQ!H ;& '5QX
MA1(,8.2&,#I*@![?9P0ZH$^W1Q>2V-_^&9R#]YI0#/=9+<I0#3- ,)T \F@'X
MGJ =#_F?: >=H!UE3_(34SM7[6IN@&=Z ;<Q>29Z^8:?O)0UQ#@#JF1'T9O=X
M.693=S5IAKI=&;W1G+X= >C>=;]G"TQ\6SVYQG@'QA^Y7@&:O .D\ ^0/Z+GX
M /LG:O&>Q-O ;7V^9[ODV[YCV_T/P?D6JC/P&4?G;5!M4N#@'Q$M;&@Q+>8$X
M  #:$   2B">%B  "71E<W0M<'<N:4S@[7Q ^_[_]B7_UA &  X-Y;W+_&RVX
M5^%K=8=MO-Q8U./_XX-ZSR>6J_=WZ_.FO9TD?X]LR6!1TJ%/#XI\T:G"SA<"X
M+8;Z1AQA+>LW?I#.OG,3C,]1MG9031^&$$-7\Q @VD9S^?<IR)E\D/+;<#1,X
MDE5FUJR_7P!?[VO6FJ<;NITA$-FCVU]SJEJ)DQ9ROKZG5[W1.HQ(%BC'3E,^X
M#H*!,\%)'^A!)/;3[8"SG^%8X.WV?)^MK7;BP1B?*+)+,K?GT0C.@F!'="?RX
M_N1G^D<*2#\/PON1"CDJ:H((2*INK)!Y]-1Q%_A%BA&%0*BA'LK,D&P'Z2+EX
MQ($<4_Y(_P!@;(NM#&47_@6!H%3\+V._D8Z%E4O?]E>W\6PSGMC5MHVIE#&RX
M[Z<F+A_=K+O,^F*>UA 4WXG/7:O&-31T-#(>[9Y<JH/?(IXA7H >85:BB%2EX
M,"NI>('G86.%7O]E!KMT'\>>*VL;B'9%]"7L]BY:_;Z,5SZ#>"R#67I?1C27X
MTZ+/3[_ZYME>H'P8^Q%U]8585A8_U:QQ0!VWVD__</":_@A/,<S)#L; YNS4X
M)XB)B8YG\TJ;!AF^B7Z>&4Q\LTU*\D_U\Y/--Y=_X+,C)FOBHRB&<97*8RXIX
MC71Z%U$=H:80+(:#C$:=\#,3%AT 4E@HQ4T%VR/>8&%C7AS51EB%<HTI^IR!X
M=D25H>36=AQ'H) DC>O!"=EV9+2X9#0'1^N2.FP_@1\\D.++ K%W1)=^*PYZX
MT*)H*9P(43:5F YF$[!XL-S A,B&X'<!0 ;1.C%IV["=9FN3.L<3ZG%71334X
MOS=4R(&R&#%>'?<@)*[K(C%=."(;,FV  D%3CB!L>#'50T.IQD,PQSY=0&Q)X
M%!Y]6O\3*2F6U^.+"QN>SCN&M*OZJF$!^C/6I_U?RQU:&)Y@/Z,%9RO\]0J?X
M4_3LZF1U )2J%WDN=A';R"HNOZL[_X=1T@U02^L( QBIVOV,E<[OZ;NPD4G$X
M,?1N2W7(E*K+TZIOA-76R@6H*TCZUBEHH&-$"U4C&SFVIJ6UF^L_GZ#Z[=,)X
MXD[=:2')W90J3BM+9;:FZFH[R0_2N?C^R:UD0$.UQYJ_G:=_07W]*!),+779X
MN%CLG"@V-:X?:/>3]IN"WE,6!2>&W19^EZ=K.X=?-X_NAKX\:8QM?E:8\/'OX
MS'*O[VK>5#/'A4]53.6 C'#VECU$G(_7WOJ1P-QXK:!B5G7?C%.2$XIKLIIZX
M[91#\)SO41Z*^.:55*-R=$8S5NX+>C*=\1@9=<O^EC;6H><#EE(Z;]2=#J3-X
M_+XAW3HL5+3PF?;,[=U#:*X*:++ZZ2/MP_Y*J+9-?YL+80;9M9_1&$_<T>=SX
MW <\8RM\DI?'Y(:]6_6#]2G$99ORN+R<=+-L/O#."38ATQ3?SS?R?[V%<YD]X
M:@*^0&C+KUG**3)J2$L@BUJI ,EI2/)>(J4_VZO15%E*8.E/-@FE/]D>8I3;X
M%*>1:BW>?WZIV@?:V%*XZUC0A1#-+@\TN>D32Y>TN(92X#!=>EQ6Z7+15+CVX
MES+4N=MBG4N6:7,-+E[%-U+GDGR-XAR=;U+>,=R*RP!$#K('[D#_R!MV0,)_X
MG9 Q)(&IX) XI _#('VUV60.N0.R0.]BET@8A/IIB!J*P'V;VRX@VSW$\-L.X
M4^W_*;<7;#/N^DC] 07'PH^0'=0M;&@Q+40!   R @  3"">%B  !W1E<W0NX
M<'<]H^Y^P/X_[Q_7]?#$P__K +?;K@^^[-=[Q>)P]Q5C +95_<"T=7M=OQ<WX
MP=ZHJ:KG]^PK0;1W&&(K&4&/H,.=!E0R"6[@?&QP'<0)E@#"O'G<_R%%OYF;X
M]>YDJ$L=+,5&0K)22*\VU$[XA&\BH!Y$ +E CFJ9D]>?FL_%6UT'CLN.",?BX
M1S X>F3XVO"@ 3A3.+$/DY!>16:MB;4W>%<PCZ8 +2LKEHT&9QE\"Q0O@P((X
MVGO@  /9^B+H8EU]I>U)JXN_6$FGI;]#UP^G7(H;\!O3]!L@E]'381".?]7ZX
M"+TX57@!1#"H$I'T^0H<P=Y0X!QQCRX+]<SGVB[?**9A% .FBC'!HQ1Q+-C7X
M%P<[Z\VQ(<)M6R)'LUUR"83P*? 2P->#E.6?/X!TJA32.\!Y^#1N.LEY6P[/X
M'9;-R$](*3)KF#B0(!SM+6QH,2TA&   5$4  ,TDGA8@  9T97-T+G.B[MMEX
ML76=_[_'\8 !^_UA\W^75_]??[;ZYC 7TKW_5NY2 Z=IXZEY\+%=_[.^W7!MX
MA77T(_G1M_S05JB#W L/9JX+LV%<?2'%;@ V)02+\$PS3SL80%QT\N#$Y?7"X
M@<Q.8\EZ4D=-;#1"XQ5+3_)IK+:7\VP6\UPB^H5"Q%;53IR -&M2*@NRTV#(X
M?5\T/A1PF2);B"(=681\@#030E>FTO_VO>]T1ZH@\*(?[GL\5]/G_!:0,[-$X
M\\D0[/$8[&>/CW@B^'9P$=O1 9?Q!T>\<=<0'HV3O:4[PXRM03+8=6P-/['2X
M@"W-7^\ZQ9"\=W->J03HEN:79%_? >J9],#S]*OE <^E83*,Y:L9!Z3/^1\LX
M:F8"F\6O^QE DN]=Q ;GO+Q@.2YIU_X7,2ZIZL1SQ^\^O<T=LD[%"*E5U:6-X
MV]2MF;X(0$3H?71=@S-1JRZ83NR3)PHV-^+=<CJ97[%2[0$ZXZ*V6B/.Q[)GX
MS(<DXNXQD[9I;<@U);1L\9]+\QC/>C/9R[Y#XP$@HA$/C*IE>RP3#P0QWFM#X
MZ)%4Z49AF?=]+9F[ W!S=-RRC3F8[6,5X/38TD%M6Q!"%WQV- [6J'^5Z["QX
M(I:F5WVBS9E&K8D'6S5WJ E%F1KR(,VDJEM5"4]CS"B5ZAEQ&*G@7@,3?MRQX
M4L(^ R6*/'6 ECS2J26$!714,\VZ'*]/X_XL>$M6*BR:$X5LOJJR;8G,G.VZX
M S!VX#9_=;)'48)/ :87((9I!KI4B8S>Y;RT40JNTF!$E:H2]U\J/<BA9%_FX
M;P3$\@J.%@.@[L: '&  TX3D%&23Z)N9H-P_<%96S@H/46CS&#)<C.BMSHK?X
M$]M3_4\()6%<-45!A6+IDDG^Y>F@E4LO#Y(DOYZ*8A]X"\]XX8ASBL.5$#;:X
M%/XM/!(4"R$D#+FHO1DV3=NU&3V/P#]DT E16Y6Q&DGW5_,2=UX<N?(&\9!@X
M#Y(Y>?L<BHFW&@BX!;W/:3AL\..T TP,X*[3)+#VDAN4T0G:V]?3YE*IO8LGX
M^!1$. ']<![';.8M.[^-;5$/R^OJ%^FGPJ 'KA'C .NLV>*6/Q,[+<F4N"H=X
M6.)N7Z'%4G*?"54-9D_PR7&DHQ6:; )C,G*G-;H,CK0^J0-Y=V2*#<W5+5_=X
M_#Z#(?C*J_U(6UW+E %L_Z+"[/R?_ZR8I0P/:*/ 85"/0)*XM.T!V/@SF[B\X
MBU8Y1<"*T 4=(% 7 L=0N7P#H0>N_E#%22M7]R&.1A "LJ(%R,>B#G88Z.:-X
M?@>\)SVAYFZW)\)#3;L3D[A!CT4IL@A4FT"\ /=(]Y>1-MY^SH[9T#)=Y_N$X
MCJ%8CM-%7"->F;YK*:!;_<"WX,"5<&XQ]HBPP5]QC;40"*%H1=53HB/CWWO4X
M1PS<K1FBYG<M\GY7C;8$20(1W6J]H9Q6G\?6%IEA(^%N\6VW[59PDN1/PDXMX
MO\MC_DE[-'K_$K3X$O:Y\G:GFH,*@#GX3U[@(#'S862/VN?FDY0\$YD4J)&VX
MXXB#[6"HF.'F]I+2Q3%Y,SRV<<T8YV(4DXBK+85.1"YXJ^V<9]90MW555MX1X
M+WO[0QV..2#Z.+ M3@;[UM#"U4R0/L@/99-S1 WDD#^N>T'H;-_KH+9=1]<TX
M;R"P;U(GX%=Z@][G &<KTM)D().H[P8STG"+%%\-"]@>MH(![%M0#D1\.S?IX
M>=(B^6\B<,:46^D?^\%@G.-?M1;EX4VSAN%1CI48=-W8[YT*3"^YFF&1 IZ(X
M%CR".[1_ PVXZR$,I_SR/K4O6NPH)UK&*J-\(;38*<<0U)/"(>'!>/$';<:[X
MP-E0DE+F.XO*RYOHD<S]XW6S_X^F.[6=UJ9]W*-G@?-N)/#MXMX(]U78J8-VX
MFXQVIZ;FFD':76-2#;KO-^*KT6E@RM0VZW!;HG=-ER)S)H&J0>/E%7"K'>#9X
M!)RB_E7O.!<;_G7_*4D!(7Y= -&S?)5_/^:W<@KN#P\#$^>/Y091?XB#N4BVX
MU\5GE7X#FMQJ6(E:S,3'^5\N\Q<:OV(6T=*=,(%L_G7?O+"/-FW*#<'>67H5X
M_31/IWQXM<'$_X&6J++J,V<0R4V%#Z#M5^_3*(<<7G_D;T_Y^!(7[:[<N;)UX
MYFGR+<&47N9EJ!+SX'GC=0HV:T,(H/).IXE$>Z#TBLJ"CUJT[AW^$$?M@^=PX
M7OF'M>L'0*;6Y/T=XU>/9/P)92O'EC'8'<=#U7'O*:-'J8G 4&YU(">;#!ZUX
MS?#<]W:Q(+0.T=0DC]3TEDW? 4O_M3+E.>KT5 I4P^))\021Q^7D'PRYYN&)X
M53&TA\G+(//S?-[_E2]7UPVGU\Z@V)EWU;@.5[]LDLZU+B4DPK[41860=4POX
M!QI_&QL8>27YX*TZ:&"OXZMX\3=GWQ<HRH\$/%[[*06)#GP/3]XR'')KZ60>X
MR2H_/F_O?/+N_II5:2<4 ^<%T"=$8"\SZ27\GT4$G-4!!E&O-#XN4P]\QS;:X
MCIJN(4"R$;!XOQMZ-V&6^0%R2UT/_+9Z_K94ZB<&[6[3)%[TE&4;G)\_V6C+X
MMMK1=<]4"*?38&E6A^N1[TC;#.V&;#_Q^MT?G]OWB\A_T>EW(VH1K%^>OSU!X
M.PZ-(!@T/O#[K+G^*#%R(?Y.YA#RYMO4O8Z% !L1?:#,R%TR6Q]W=^>7I;3JX
M1<VW3#PQ<\IN:>HJBBC[F6D&Z L_?]2GTK)W#DH^J(.WRN_+]B?$O$"\O,Z,X
M#B9#UY5N8M$%=2_$X,* ?;5BN>:@9\-ONS]Z.3:CYXPY^?RHAWVHD34I_ZYTX
MV-M4-%J_<>Z2J;L+Z83Z-MLJ2/?V'FD@<C_PJN;U1^E\G@>^#8H!"Q X-PTBX
M)KA?RDB^Y[Y9VJL$O?(3\/K&G*'WTNEWT!7QQA?0JN5J^,E@Y"P..<,FG3FVX
MGV_G@N+^6;XS-4>14:RR]M7B=>$R[SF[?]69X>ZOX;%@VINSU&5)9(HZ"] BX
MC:L!+<S1+:E%K8O(8;J&)13CH44R?P9/@K)[B3/ZI7X.<?\#GCK5'[(=7PGGX
M6>B5IT13F@ON8;@"_V3B5 O--5WAB?+!8S\\[]#K2VWG0WP07Q8;0:I]G[Y3X
M<9T\:_3-KPVRGPEVV&?EP+_$. \Z6S1!P-]NP_#LONV)ED7\H[7_3*M YT#:X
M->PH#>/Y-\YV1L(VISY(E,1)#@7'RN^<(==3EQ[J&4F2/FZL\_4E-] )WWKXX
M\T"?GADR6?FDX": CD#6BO;UYZ#B=U'M\.;^X]O7++6@&8>RZ$FNGM'(+:@OX
MW]AZ/I[FJ'*P7L4>'RHM7TTI>>AZN1GMF+.:.D\,H;7'(=G9F27>8IVAY]#/X
M5C-\&8UI9D>,KW\R9GE=8&@FKK<U YF]"9N-]1YWJVJ>*"QQRY:Y^XTBUDCHX
MYLM]\R^;*PS8:[<1--9Y]J8V5IAT$XC$2)8BX 0/ LHI>QXY/(EO]YA[GN7=X
MY3^:50)AYK1>V?.TS.=5IJ59S/D+'*5VD7[F"%]RLMTM[DL>/I[VZZI.QJKZX
M?+L>>#+1%2.QI8J3M?2QMC,:H52!-CR5?BPM,V2$+?WDV[G4GF>FT'Y-<H@LX
M^/^(?H1\PORI8\-9V$9!=*N@DS'AB4OS!=]B2RZY"M1O<*;NT+R;G%#9UZI3X
MH9$C,2/!)%%$C>0X^/FDY[J321WBE%3,%R[DR&9Y>]V&*%OJ/NPYB5P$O*.?X
M%5]8L'\8W0WS92.+]';,U<J_^9CASG05M_)]PE:%]%-WDT.EJ0OBHD +?1=NX
MAW4$;FH\2HIN:J?:]O<U&**Z80?K4ZI)!'65MJJN@WVO8OGC4T=-D^EG,4(@X
M&][>V/TR5N>(^2217S;U%W.\)X\FE"75/A@ VGW-B\!66;/H>:M7"NW QN<:X
MUX^T^Z^_NWV=6ESY+LI7EDP_=YVTF@,B]]=5:\E_@1/[%=-$YC4Z7"C^N?I2X
M#W$<M]*&?+&$=#)S@1F]*>&?T._/0RCX"9]\C?M<^VI.?/,=^RJWU?_]@%XEX
MK\OQ*=)YTPR($$\*#YGKLW1@OGB]//+FT/@:Z^2P;5E79CLSN-4 N#U+ 7,8X
M^,[:3<;!0U/4Z@RLZ!Y:\,]*?I[+N'PH;2G2;OJE]I#9^+TZI@6#F#JXV)X-X
M^SE@;^B@1Q:KG>-,,>?'A.T@"T5CL<(RAEA7V-;HI_8IZ6B@:589M>4'NA"SX
M9M(T]2GOE2DT-?VZLFLI:8E$>I:XI7TD4JF*5)92ITKP4JCT3 ZF^:/O4W:\X
MJ;GOX'+5LN,V&IJU<J(VE-7>:FG]@!RI4ET3_!<92M&%=BK8E$DPINQ9.QBCX
M8%L,JA?$NRYC=<OJ%P>%2ZG\T* VV?,N><0/>')FMT<FX$5.Y,Z#2GUOY&LHX
M<OXV@CW<16O5 UK@I4,M][YR\<K8ZUI9]W;4QY6=.'XK9.]=^/"EKXMM=71$X
M 4:V[=LQ-&0T&'QE=%?L.G]T[444RN*9D6P"SB$R@M;F:J&*S&V^595P.'0#X
MMMI H.ZUW&E/^G"B?AGC==&))C/?HY]/-. R!<*HU1"5PQ@&,=%VQ(G?J3S5X
M=L7ITF<_E5+0*1-JQ6 J;2[_59UU-Z8%03!#6'+Y#6'G%*\F-#LW6FS=,_TDX
MBSTY3..KXZ2<": >E/"K?^0O3GYK+U9L]</Y[2JI)OCH;0F1?UXPQKN92&H7X
M:'VXT]]0H 6W(PW]C7&RO8N/BZG0S5,N0^'%J;>97-!(_I91,6OY^+=?G[J*X
MW4M:JD.1V4.7[ [>E(A#L3/>;4(VCO C6V(IM+)F\WF+SX'&,KA;!V'LH:BNX
M<!$_R_?Q,W;>&4:;NVV-IWRO]JP8F>YE1SFKC/#@]P Z3=YL%X?X;725'B*$X
M<,X[UP=*OJ-\5R0V,1J#.2[OH.!EWWG%T",&3X-U4L&"IUK4@L6U\,?H%)UBX
M3F*ISQM%XG1C''%8"V*6)^[3VW9(B1"6MO$O\H^=3%J\K5'[VHJ04MH7E:XFX
MQ]E9O7D(C%C/5%7Y?/_$6[LM!U92_;@IC)7>[<#R0&#BLW4GI[@2W9%9I^,8X
MR(Y&W>FC-C31?>\A?D[!UG\BZV>0DO=+0O7$,OQ!)\D'4IFK"%O8S80J8VBHX
M"YP+,\/8@L+&%^,&=ATP9I%O=4F;DXM)%F"IIF2'Z"! W@A#2-9)_YD:HUU$X
M;%[?7$:R.4 1K0:-(V+&I"2,.LR5?XH>98S5.&LS=-E&:Y2JEE5H:'C$%'P4X
MUT-K^Y>[H KFXU+<6J_<^?&H.4_IIY'.OSW\=?]NL"NG0Z39/41;"O 98F*.X
MWV[_=GPM?FNI(C5/LI%);TO5P?:)4'W\"9N8B GT(.KYVD++6P!:\=&)[;6KX
M] ;T=FPOI#>B I@A4BO:V*5N&4HVT12GA3VMJKS""[_V(K[%F(ZI%W6E0G+2X
M>ELQ%S?"B%R746W(XQE9?:AF@D'LJOUX(_97/T=O%QW]EW]%6]FUMZ&_ENI:X
MK?D0Q4.^= _.RZ'TNM0A)Y4%G*6O@>^P*CYYC3"M9/-PG%!JC8',&6$/,3@JX
MJ45RU=-GU/P_D[7+6"_.%RV(M1<NJHN:P87O+-_6#K+\RU  2I>8,3<=G9_RX
MGH-B8J@[,3=,'-+I$P]O;KVC[K'C-*LO;=0K+F U:S*0W RA$)V6#U>H-&9%X
M8F<!U22[HB4<G_H?0:>;OUV*$RA)MDX]I_F\+UY6]^;3!W(]^EXSFU*F*\J X
M-4OOCH1JQXW1I8Q:F?#\ZWZNE$1B4I-72IP(=7D^-[LT495;98(L]73=5C5@X
M6.T64A.^>1A7:I)G(JS4E2U($#YBZJ1 4+TS9>2UWS8X^+?E=Y[1$O0E!;ONX
MB\E.\17%@E65_+Q1%7]1-E4 "GJ@N?"S\=X[J"26P^K'CY,A]0):-UA"]U$!X
M$65/DS)P49E)DQP/E%)Y2MY>+H"28CK'<N*3\CMQS(9SOY,P?B&G<Y5T?N:VX
MP6RAWD_;]WCLL['DV0W'\>>["KFG12,B95=;>Q;8ZAI#DID^ 1RD5D?A$BXQX
M^$]M(F/@J3GIF Z/@_[Y]2SZ=A@XL1D]YQ2E@<ROQ%;(U^/?.JK#W[L&0^=MX
M2Q(T(:1BFPALS*I?MG>]E<4U8NPY:=4WG>Z=E#J(T\VQXU0/X6Z].,NKK>YWX
MS1G'PMP3[S.Q4B*.A-&']]\^</>=$+UC.ZQ<^2KOU ARS NF[I>7*B ETBUCX
M'71/:>.R17YXZ#ZW;S@-VRZQX,<UX#!&O;BQW9#'AA9MS+RXER,Z42FG\L7SX
ME#*+=Z&W&F?3H2?Y*O O9_2%? Q$H4D"+_";/14EB1&V:2TO,A7O21B\:RPYX
MOZ2^M%D;SWW6%)%\7>W65YV%Y_MG-*,_-65B,8,XXO%6C5G-T;K4?R5RZPO@X
M'>*IW#G"4H=J6#3;^#A^UVO!:;$)MHV4 EU25%L6BR]8<T&SSOZ,A3I3Z'W3X
M'R'O:-:Z9D"Y$3G.2&R!/\)%:/*;K6N=N[]Y5D]6$RFK4^WN1K!/GLB#5BR8X
MJ[S)]C[9AO8,:]\^O"DK,;K'+T7UC$"FCBG51-%5\0V,L5]U78I?>32@C90_X
M-#NN(.W/P>?K2ZS6F_Y5Z!UTY_KR#*N3L0*XC%WDI1JDTDFW'29_I^<M3S?CX
M(#ZKW]3V2_"7.\%5E%E33[?GI$CC[GD>^:U ",=DI"<V)QS_S(UXRA1UMMU[X
M2H]_P:9N??J2AD-GQAF@/?+SH_)4%/]U@.:,8*O=[)N[HH22'Z>5V'_8$>V5X
M(D?#C[G[\0FX3&&S1P",K;)6J8WY_?9PS];W^?VT6W]\G<<8+WV %66C@;%XX
MOX*U9AUWQ659I?'N)SQ[Z<0W.;LX?H0%O381O](:^GZ',X:_N:XY^8(JVE!HX
M90EZF__[VZ;HYAIPCG[T\[NN1S^,RW\'!.[X)X#A. [/W7W*_4;)+S2E[[P0X
M67935X412?K(-%?R% ]<6WFB8E^*7<O93=$B3ZZ;WLU-;@2O,"*P)[K:9?M6X
M1*ZX^['78"L[%95L3R>-%SSR5&^FF6[A:9=MF%K-LLUS,TO7[U[<8IM+@F \X
ML!UKCJ%C87WHYX2_GWHX9^[L%N2*RB%O;K4<1W@DOADR?K.]OOK13KDX<V:OX
MQS!\U'7_RMN=5]41Z*>)#89JRC"02B?[CI/+)TQUQVFQ84_\S\R9RX.0667QX
M/T?-%"R'&4! _>_-?NC:DN,90EAX+,!\&MEL-#=GH]MC=R$:-_R,WU\$2VZZX
M;%TE;G(:3B&V%X:A>PRF'L-G;4([7.;EW>BW0G8$#S_Q)ZX"!?0 XW#&KO%YX
M@3\VV2_.=Q#-T6M7%)NYA.\R][X<3*H#;&[0&<7MN1KU">?VARU*3:8"CGW3X
M?0O=!]Y*65T'6U^24=_GK6*@3[H>Z,OW9G)/E%;3[LW1H!Z1VL+YU=K1O,QOX
M[#O4JLB0DB1-B$TD+OY]81+CW,$Q=DR^(6GP:)TA5>E'OBTVA8B">KW(L,Y;X
M?$.ELU:,GX3/^++3N8%F/^F!).]='Y/$G7NRGQ8<S 7_FEH8NW/?SUE(9U_.X
M5->6SY&V.M1X\TR-$(?(1Y/:X&_B'(FN(>>!\TMD1#9N/EY!).+D-5K>^C=-X
M#2G3(4-B^]')&+UXM.63/Z6,A#=?.XU&-/X8GMH7Y&N$Z%_L9N[6OV3DGNP[X
M2 I7@8CW6B-\! N'Y*B?H#LQP?-7$9;W].A_/*DF::O[]/+3CEOW%VHIX#/WX
M*O0.]U.P;OB6W^$ 3/R6(?.N].+0)P2FW^&"[?1#'2*)&K>3/]CPNTS^YKNGX
MHTCX5-^;4_AFEB@9FF13U$87SYYCHE4MZ0G;^R/3D33%9 #Z)Y1SN=O#[9G*X
M."S5#OTQQ<7E66KB$#MJI3B\IP"P01BW_R%9./D9HV0#F'$%G>6KBAL^6]=9X
MQ:G4>RB:KI0D(^L/^B_4^D$'Y2)6%L"YU/_+#_/G\MF[;7CS>PO_@)0'+<)3X
M#PEX4LHC9L>)35K>"!(:]QW Z*W+7Z\_E6S$%!P*%ZI-$\29K)DOVFF84P'@X
M3O*2'54:DM\C'--HC=,@K]Q-_G!\\!UA8GYN#<O(91@UTNL+$LWPX.4K6Q*<X
MS0XM)/TRA<1NXMBQ[]Y2AKF[RM.2M:6R<VU#].RP<E%)0MSA<X69I5EZ/.=SX
M;$;><RLQ63MXYZ8V4-I$=R(^)NO#.7A^<8>+:.)'"[>J\\I57GN,1OP0"RE&X
MLEE5B/W//"9_;)+^[%=H*KN&FAKGU.6WP4^(Y1(/W;4/\.@"-JUM]>02=Y*=X
MY=\:.=_M7D3V+IG*7/2:<I#^R=_01+9U8R!LCF?_M(%D7X^K*_&?T2F""[,\X
+V"H7^P[L.<>H@ #*X
 X
end

cs326ag@ux1.cso.uiuc.edu (Loren J. Rittle) (05/01/91)

In article <mykes.2042@amiga0.SF-Bay.ORG>
Mike (compilers suck :-) Schwartz (mykes@amiga0.SF-Bay.ORG) writes:
>The second program is the ol' printf("Hello, world\n")
>program done in assembly.  I didn't comment the program
>at all (who comments such a program :) and did not try
>to squeeze it down as small as possible.  I've never
>seen a 'C' compiler even come close to 20 or 30 times
>this executable size :)

Well, you are now:

Use `lc -. -v -cus hello.c >nil:' [-O does't help ;-]
    `blink from hello.o nd quiet'
with SAS/C v5.0a (with 2.0 includes) to get an executable that is
124 bytes long...  ...which is smaller than Mike's hand coded 180. :-)
This may suprise a guy like Mike. :-)
And, boy is the source more readable... :-)
[Mike this was meant in good fun - ljr ;-]

All joking aside, I hope everyone enjoys the `good', as in system
friendly, asm code Mike posted.  But don't use Mike's `size' statements
as a good reason to code in asm instead of C!  Thanks Mike!

Sincerely,
Loren

----- cut here (hello.c) -----
// Hello world in non-portable C
// [non-portable because we call AmigaOS functions directly instead of
//  using the ANSI library and we use those snazzy C++ style comments. ;-]
//
// Programmed by Loren J. Rittle in more than 1 minute (but that is all it
// would take next time :-).
//
// compiles and links into a 124 byte executable (62 byte codesize)
// in .733 seconds (yes, Mike, I changed the time; that's all it took).
//

#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>

void hello (void)
{
  struct ExecBase *SysBase = *((struct ExecBase **) (4));
  struct DosLibrary *DOSBase;

  DOSBase = (struct DosLibrary *) OpenLibrary ("dos.library", 0);
  if (DOSBase)
    {
      Write (Output (), "Hello, world\n", 13);
      CloseLibrary ((struct Libaray *)DOSBase);
    }
}
----- cut line (end of hello.c) -----
-- 
``NewTek stated that the Toaster  *would*  *not*  be made to directly support
  the Mac, at this point Sculley stormed out of the booth...'' --- A scene at
  the recent MacExpo.  Gee, you wouldn't think that an Apple Exec would be so
  worried about one little Amiga device... Loren J. Rittle  l-rittle@uiuc.edu

mykes@amiga0.SF-Bay.ORG (Mike Schwartz) (05/03/91)

In article <1991Apr30.213936.22878@ux1.cso.uiuc.edu> cs326ag@ux1.cso.uiuc.edu (Loren J. Rittle) writes:
>In article <mykes.2042@amiga0.SF-Bay.ORG>
>Mike (compilers suck :-) Schwartz (mykes@amiga0.SF-Bay.ORG) writes:
>>The second program is the ol' printf("Hello, world\n")
>>program done in assembly.  I didn't comment the program
>>at all (who comments such a program :) and did not try
>>to squeeze it down as small as possible.  I've never
>>seen a 'C' compiler even come close to 20 or 30 times
>>this executable size :)
>
>Well, you are now:
>
>Use `lc -. -v -cus hello.c >nil:' [-O does't help ;-]
>    `blink from hello.o nd quiet'
>with SAS/C v5.0a (with 2.0 includes) to get an executable that is
>124 bytes long...  ...which is smaller than Mike's hand coded 180. :-)
>This may suprise a guy like Mike. :-)
>And, boy is the source more readable... :-)
>[Mike this was meant in good fun - ljr ;-]
>
>All joking aside, I hope everyone enjoys the `good', as in system
>friendly, asm code Mike posted.  But don't use Mike's `size' statements
>as a good reason to code in asm instead of C!  Thanks Mike!
>
>Sincerely,
>Loren
>

The size argument is based upon using printf() and not Write().  The
program Loren posted is a good example of how to make a small 'C' program!

Please note that I made zero attempts at optimizing for size or speed while
Loren made every attempt.  Also note that my post was not meant as a challenge,
but just as an illustration of how you get smaller code WITHOUT trying.  It was
the most minimal program example, which K&R defines as:

main() {
	printf("Hello, world\n");
}

Of course, no offense taken.
--
****************************************************
* I want games that look like Shadow of the Beast  *
* but play like Leisure Suit Larry.                *
****************************************************

mwm@pa.dec.com (Mike (My Watch Has Windows) Meyer) (05/07/91)

In article <mykes.2098@amiga0.SF-Bay.ORG> mykes@amiga0.SF-Bay.ORG (Mike Schwartz) writes:

   The size argument is based upon using printf() and not Write().  The
   program Loren posted is a good example of how to make a small 'C' program!

To be fair, you should use printf() in your asm program, as well. But
that's not the point.

   Please note that I made zero attempts at optimizing for size or speed while
   Loren made every attempt.

Actually, Loren didn't make very much of an attempt to optimize his
code. What he did was learn how to run a C program without benefit of
the standard C startup routines. This isn't optimization, it's
education.

SAS C's startup code does a lot of things for you - deals with WB and
CLI startups correctly, provides an ANSI environment, and other such
things that make your program more correct and robust. You can also
get backgrounded startups, resident code, guru trapping and stack size
guarantees through that code. I've looked into producing stripped-down
vesions of this code, and it just isn't worth it.  By choosing the
correct link library, the "deadwood" code usually winds up at less
than 1% of the application. For most programs, it's not worth doing
away with. For a few programs, it is. And those are few and far enough
between that most people haven't learned how to do so.

The bottom line is that you didn't show how to get small code without
trying; you showed how to get small code without using any of the C
support code. That's no harder in C than in assembler, just not the
usual mode.

	<mike
--
The sun is shining slowly.				Mike Meyer
The birds are flying so low.				mwm@pa.dec.com
Honey, you're my one and only.				decwrl!mwm
So pay me what you owe me.