[comp.sources.amiga] v90i090: Qt - what time is it toy, Part01/01

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (03/04/90)

Submitted-by: mjl@alison.at (Martin J. Laubach)
Posting-number: Volume 90, Issue 090
Archive-name: util/qt

[ uuencoded binary enclosed.  ...tad ]

       This is one of my favorite toys -- though it's only about 400
     bytes, it's a working "can anybody tell me what time it is?"
     tool. Perfect for anybody's startup-sequence.  

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  Makefile qt.asm qt.doc qt.uu
# Wrapped by tadguy@xanth on Sat Mar  3 16:04:11 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(187 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
XALL	= qt
XOBJ	= qt.o
XLFLAGS  = sc sd nd verbose
XINCLUDE = inc:include.i
X
X
X$(ALL):	$(OBJ)
X	blink $(OBJ) $(LFLAGS) lib lib:amiga.lib
X
Xqt.o:	qt.asm
X	casm -a qt.asm -o qt.o -c v -i $(INCLUDE)
END_OF_FILE
if test 187 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'qt.asm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'qt.asm'\"
else
echo shar: Extracting \"'qt.asm'\" \(3761 characters\)
sed "s/^X//" >'qt.asm' <<'END_OF_FILE'
X; Qt -- What time is it?
X;
X; Original version (c) 1989 by Martin Laubach
X; Heavy modifications (c) Jim Butterfield Jan 31, 1990
X; Beautified by mjl
X;
X; :ts=12
X
X	include "exec/types.i"
X	include "libraries/dos.i"
X
X	optimon
X
X;-----------------------------------------------------------------
Xcall	macro
X	xref    _LVO\1
X	jsr     _LVO\1(a6)
X	endm
X
Xvector	macro
X	dc.b    \1-Hr12
X	endm
X
X;-----------------------------------------------------------------
X; Local variables
X
XLocal_SIZE:	equ     ds_SIZEOF	; I need a local DateStamp
X
XToday:	equ     -Local_SIZE
X
X;-----------------------------------------------------------------
X	section Qt,code
X
XMain:	link    a4,#-Local_SIZE
X
X	move.l  4,a6
X
X	lea     DosName(pc),a1
X	moveq   #33,d0
X	call    OpenLibrary
X	move.l  d0,a6
X
X	call    Output
X	move.l  d0,a5
X
X	lea     Today(a4),a0
X	move.l  a0,d1
X	call    DateStamp
X
X	move.l  Today+ds_Minute(a4),d6
X	moveq   #27,d7
X	add.l   d7,d6   
X
X	divu    #60,d6
X	move.w  d6,d7		; hours (quotient)
X
X	moveq   #12,d4
X	divu    d4,d7		; 
X
X	clr.w   d7
X	swap    d7			; hours (0-11)
X
X	clr.w   d6
X	swap    d6			; mins (remainder)
X
X	moveq   #It.vec-Hr.vecs,d0
X	bsr.s   PutStr
X
X	divu    #5,d6		; clock divisions
X	swap    d6			; 'almost' adjustment
X	moveq   #Ny.vecs-Hr.vecs,d0
X	add.w   d6,d0
X	bsr.s   PutStr
X
X	swap    d6			; clock divisions
X	moveq   #Ps.vec-Hr.vecs,d5
X	subq.w  #5,d6		; adjust to hour
X	beq.s   Exact
X	bpl.s   GotToP
X
X	moveq   #To.vec-Hr.vecs,d5
X	neg.w   d6
X
XGotToP:	moveq   #Ft.vecs-Hr.vecs,d0
X	add.w   d6,d0
X	bsr.s   PutStr
X
X	move.l  d5,d0
X	bsr.s   PutStr
X
XExact:	moveq   #Hr.vecs-Hr.vecs,d0
X	add.w   d7,d0
X	bsr.s   PutStr
X
X	moveq   #OC.vec-Hr.vecs,d0
X	tst.w   d6
X	bne.s   NoOclk
X	bsr.s   PutStr
X
XNoOclk:	lea     NewLine.CHR(pc),a3
X	bsr.s   Prt1
X
X
X	move.l  a6,a1
X	move.l  4,a6
X	call    CloseLibrary
X
X	unlk    a4
X	rts
X
X;-----------------------------------------------------------------
X; Print item from table (Hr.vecs)
X;   D0 = String number
X; -->
X;   Nil
X
XPutStr:	lea     Hr.vecs(pc),a0
X	moveq   #0,d2
X	moveq   #0,d3
X
X	move.b  0(a0,d0.w),d2		; Get buffer offset
X	move.b  1(a0,d0.w),d3		; Get next item offset
X	sub.w   d2,d3		; Length of string
X
X	beq.s   Exit		; No string
X
X	lea     Hr12(pc),a3		; Begin of string table
X	add.l   a3,d2		; Begin of string
X
X;-----------------------------------------------------------------
X; Print something + space
X;   D2 = Pointer to something
X;   D3 = Length of something
X; -->
X;   Nil
X
XPrtItem:	bsr.s   Put1
X
X	lea     Space.CHR(pc),a3
X
XPrt1:	move.l  a3,d2
X	moveq   #1,d3
X
XPut1:	move.l  a5,d1   		; handle
XGotstr:	call    Write
X
XExit:	moveq   #0,d0
X	rts
X
X
X;-----------------------------------------------------------------
X; String vector table
X
XHr.vecs:	vector Hr12
X	vector Hr01
X	vector Hr02
X	vector Hr03
X	vector Hr04
X	vector Hr05
X	vector Hr06
X	vector Hr07
X	vector Hr08
X	vector Hr09
X	vector Hr10
XFt.vecs:	vector Hr11
X	vector Mn05
X	vector Mn10
X	vector Mn15
X	vector Mn20
X	vector Mn25
X	vector Mn30
XNy.vecs:	vector nearly
X	vector almost
X	vector justpast
X	vector justpast
X	vector after
XIt.vec:	vector Itis
XPs.vec:	vector Past
XTo.vec:	vector UpTo
XOC.vec:	vector OClock
X	vector Space.CHR
X
X;-----------------------------------------------------------------
X; Strings
X
XHr12:	dc.b 'twelve'
XHr01:	dc.b 'one'
XHr02:	dc.b 'two'
XHr03:	dc.b 'three'
XHr04:	dc.b 'four'
XHr05:	dc.b 'five'
XHr06:	dc.b 'six'
XHr07:	dc.b 'seven'
XHr08:	dc.b 'eight'
XHr09:	dc.b 'nine'
XHr10:	dc.b 'ten'
XHr11:	dc.b 'eleven'
XMn05:	dc.b 'five'
XMn10:	dc.b 'ten'
XMn15:	dc.b 'a quarter'
XMn20:	dc.b 'twenty'
XMn25:	dc.b 'twenty-five'
XMn30:	dc.b 'half'
Xnearly:	dc.b 'nearly' 
Xalmost:	dc.b 'almost'
Xjustpast:	dc.b 'just after'
Xafter:	dc.b 'after'
XItis:	dc.b 'It''s'
XPast:	dc.b 'past'
XUpTo:	dc.b 'to'
XOClock:	dc.b 'o''clock'
XSpace.CHR:	dc.b ' '
XNewLine.CHR: dc.b 10
XDosName:	dc.b 'dos.library',0
X
X	end
X
END_OF_FILE
if test 3761 -ne `wc -c <'qt.asm'`; then
    echo shar: \"'qt.asm'\" unpacked with wrong size!
fi
# end of 'qt.asm'
fi
if test -f 'qt.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'qt.doc'\"
else
echo shar: Extracting \"'qt.doc'\" \(5132 characters\)
sed "s/^X//" >'qt.doc' <<'END_OF_FILE'
X
X
X     Page 1                 Qt's Documentation                  Page 1
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X                                    Qt
X                   (c) Copyright 1989 by Martin J. Laubach
X                    (c) Copyright 1990 by Jim Butterfield
X                            All rights reserved
X
X
X
X
X
X
X
X
X  1. Introduction      
X
X       This is one of my favorite toys -- though it's only about 400
X     bytes, it's a working "can anybody tell me what time it is?"
X     tool. Perfect for anybody's startup-sequence.  
X
X  2. Internals      
X
X  2.1. Background    
X
X       Please don't yell at me because you don't like the look of the
X     source -- I know I do some not-so-nice things (like putting data
X     in the code hunk).  It was my explicit aim to shorten the
X     program as much as possible, so I might not always have used the
X     most elegant solution. However, this version is much more
X     elegant than my first one -- kudos to Jim Butterfield.  
X
X  2.2. History    
X
X       It all began when I saw a similar tool on a PC (shame on me).
X     I really loved it. So I tried to implement it in C -- the first
X     version had about 4K. I really didn't like that since the PC
X     version had only 512 bytes. So I began rewriting it in
X     assembler, and after some code bumming, I ended up with 408
X     bytes. I then posted it to alt.sources.amiga, and, though I
X     thought my code pretty dense, I got mail from Jim Butterfield,
X     telling me he succeeded in shortening the code -- with, at the
X
X
X     Internals                                              History
X
X
X     Page 2                 Qt's Documentation                  Page 2
X
X
X     same time, making it pure, more readable, and not
X     self-modifying. He really had an interesting idea of how to
X     store and access the string table (see the code), an idea I
X     would never had thought about.  
X
X  2.3. Challenge    
X
X       We are now down at a whopping 392 bytes. See if you can do
X     better! 
X
X  3. What      
X
X       In this archive, you should find the following files: 
X
X             qt.doc .... What you are reading right now.
X             qt.asm .... The source for rm.
X             makefile .. Guess what.
X             qt ........ The executable
X
X  4. Where      
X
X       If you have any comments, ideas what could or should be
X     improved, bug reports or just like to chat a bit, please feel
X     free to contact me at one of the following addresses... I just
X     *love* receiving mail! 
X
X       Usenet:  mjl@alison.at 
X                ..!uunet!mcsun!tuvie!alison!mjl 
X
X         or 
X
X       FidoNet: "Martin Laubach" at 2:310/3.14 
X
X
X       Looking forward to reading from you, 
X
X             mjl 
X
X
X       Jim Butterfield, who did not a small part of this, can also be
X     reached on Usenet: 
X
X             jb@cbmtor.uucp 
X             ..!uunet!cbmtor!jb.  
X
X
X
X  5. License      
X
X       This material is (c) Copyright 1989 by Martin J. Laubach and (c)
X     Copyright 1990 by Jim Butterfield -- All rights reserved.  
X
X       It may be distributed freely as long as the following
X     restrictions are met: 
X
X
X     License
X
X
X     Page 3                 Qt's Documentation                  Page 3
X
X
X
X       The distributor may charge a fee to recover distribution
X     costs. The fee for diskette distribution should not be more than
X     the cost to obtain the same diskette from Fred Fish.  
X
X       The distributor agrees to cease distributing the programs and
X     data involved if requested to do so by the author.  
X
X       You may copy and distribute verbatim copies of the program's
X     executable code and documentation as you receive it, in any
X     medium, provided that you conspicuously and appropriately
X     publish only the original, unmodified program, with all
X     copyright notices and disclaimers of warranty intact and
X     including all the accompanying documentation, example files and
X     anything else that came with the original.  
X
X       The author will not be liable for any damage arising from the
X     failure of this program to perform as described, or any
X     destruction of other programs or data residing on a system
X     attempting to run the program.  While I know of no damaging
X     errors, the user of this program uses it at his or her own
X     risk.  
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X     License
X
X
X     Page 4                 Qt's Documentation                  Page 4
X
X
X  6. Road Map    
X
X
X
X        1. Introduction     ....................................    1
X        2. Internals     .......................................    1
X           2.1. Background   ...................................    1
X           2.2. History   ......................................    1
X           2.3. Challenge   ....................................    2
X        3. What     ............................................    2
X        4. Where     ...........................................    2
X        5. License     .........................................    2
X        6. Road Map    .........................................    4
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X     Road Map
X
END_OF_FILE
if test 5132 -ne `wc -c <'qt.doc'`; then
    echo shar: \"'qt.doc'\" unpacked with wrong size!
fi
# end of 'qt.doc'
fi
if test -f 'qt.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'qt.uu'\"
else
echo shar: Extracting \"'qt.uu'\" \(580 characters\)
sed "s/^X//" >'qt.uu' <<'END_OF_FILE'
Xbegin 664 qt
XM```#\P`````````!``````````````!9```#Z0```%E.5/_T+'@`!$/Z`4YP.
XM(4ZN_=@L0$ZN_\0J0$'L__0B"$ZN_T`L+/_X?AO<AXS\`#P^!G@,CL1"1TA'-
XM0D9(1G`784:,_``%2$9P$M!&83I(1GH86T9G$&H$>AE$1G`+T$9A)B`%82)P%
XM`-!'81QP&DI&9@)A%$?Z`.%A+B).+'@`!$ZN_F).7$YU0?H`+'0`=@`4,```R
XM%C```99"9Q9'^@`TU(MA"$?Z`+`D"W8!(@U.KO_0<`!.=0`&"0P1%1D<(28J$
XM+3,W.D-)5%A>9&1N<W=[?81T=V5L=F5O;F5T=V]T:')E969O=7)F:79E<VEX(
XM<V5V96YE:6=H=&YI;F5T96YE;&5V96YF:79E=&5N82!Q=6%R=&5R='=E;G1Y#
XM='=E;G1Y+69I=F5H86QF;F5A<FQY86QM;W-T:G5S="!A9G1E<F%F=&5R270GF
X@<W!A<W1T;V\G8VQO8VL@"F1O<RYL:6)R87)Y`````_)A9
X``
Xend
Xsize 392
END_OF_FILE
if test 580 -ne `wc -c <'qt.uu'`; then
    echo shar: \"'qt.uu'\" unpacked with wrong size!
fi
# end of 'qt.uu'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.