home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume16 / xabacus / part03 < prev    next >
Internet Message Format  |  1992-02-05  |  57KB

  1. Path: uunet!zaphod.mps.ohio-state.edu!mips!msi!dcmartin
  2. From: lfernand@ee.ryerson.ca (luis fernandes)
  3. Newsgroups: comp.sources.x
  4. Subject: v16i044: X abacus, Part03/04
  5. Message-ID: <1992Feb5.145945.20984@msi.com>
  6. Date: 5 Feb 92 14:59:45 GMT
  7. References: <csx-16i042-xabacus@uunet.UU.NET>
  8. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  9. Organization: Molecular Simulations, Inc.
  10. Lines: 1810
  11. Approved: dcmartin@msi.com
  12. Originator: dcmartin@fascet
  13.  
  14. Submitted-by: lfernand@ee.ryerson.ca (luis fernandes)
  15. Posting-number: Volume 16, Issue 44
  16. Archive-name: xabacus/part03
  17.  
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  21. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  22. # If this archive is complete, you will see the following message at the end:
  23. #        "End of archive 3 (of 4)."
  24. # Contents:  Lesson1.cmd Makefile XAbacus.ad Xinit.c demo.h icon.bm
  25. #   main.c resource.h xabacus.man
  26. # Wrapped by dcmartin@snoopy on Mon Jan 13 16:06:31 1992
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'Lesson1.cmd' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'Lesson1.cmd'\"
  30. else
  31. echo shar: Extracting \"'Lesson1.cmd'\" \(3689 characters\)
  32. sed "s/^X//" >'Lesson1.cmd' <<'END_OF_FILE'
  33. X41
  34. X-4 6 4
  35. XLesson 1: Counting from 1 to 20
  36. XThe beads will move at each step with an 
  37. Xappropriate explanation in this window.
  38. XPress Space-bar to Begin
  39. X4 6 4
  40. XLesson 1: Counting
  41. X1
  42. X
  43. XPress Space-bar to Continue
  44. X5 6 4
  45. XLesson 1: Counting
  46. X2
  47. X
  48. XPress Space-bar to Continue
  49. X6 6 4
  50. XLesson 1: Counting
  51. X3
  52. X
  53. XPress Space-bar to Continue
  54. X7 6 4
  55. XLesson 1: Counting
  56. X4
  57. X
  58. XPress Space-bar to Continue
  59. X8 6 4
  60. XLesson 1: Counting
  61. X5 
  62. X(We're not done yet...)
  63. XPress Space-bar to Continue
  64. X-8 6 4
  65. XLesson 1: Counting
  66. XIt gets a bit tricky here. A carry to the upperdeck, and a 
  67. Xreset of the lower deck will complete counting 5.
  68. XPress Space-bar to Continue
  69. X1 6 4
  70. XLesson 1: Counting
  71. X5 (pending operation)
  72. XCarry-over to Upper-deck...
  73. XPress Space-bar to Continue
  74. X3 6 4
  75. XLesson 1: Counting
  76. X5
  77. X...and Reset Lower-deck...
  78. XPress Space-bar
  79. X-3 6 4
  80. XLesson 1: Counting
  81. XThis is 5. In reality, the 5th bead is never moved, the 
  82. Xcarry-reset operation is performed in one motion.
  83. XPress Space-bar to Continue
  84. X4 6 4
  85. XLesson 1: Counting
  86. X6
  87. X
  88. XPress Space-bar to Continue
  89. X5 6 4
  90. XLesson 1: Counting
  91. X7
  92. X
  93. XPress Space-bar to Continue
  94. X6 6 4
  95. XLesson 1: Counting
  96. X8
  97. X
  98. XPress Space-bar to Continue
  99. X7 6 4
  100. XLesson 1: Counting
  101. X9
  102. X
  103. XPress Space-bar to Continue
  104. X8 6 4
  105. XLesson 1: Counting
  106. X10 
  107. X(pending operation)
  108. XPress Space-bar to Continue
  109. X0 6 4
  110. XLesson 1: Counting
  111. X10 (pending operation)
  112. XCarry-over to Upper-deck...
  113. XPress Space-bar to Continue
  114. X3 6 4
  115. XLesson 1: Counting
  116. X10 (pending operation)
  117. X...Reset Lower-deck...
  118. XPress Space-bar to Continue
  119. X4 5 4
  120. XLesson 1: Counting
  121. X10 
  122. XCarry-over to Previous Column
  123. XPress Space-bar
  124. X2 6 4
  125. XLesson 1: Counting
  126. X10
  127. XReset Upper-deck...
  128. XPress Space-bar to Continue
  129. X-4 5 4
  130. XLesson 1: Counting
  131. XCounting 10 was similar to counting 5, with the 
  132. Xaddition of the extra carry to the Previous Column
  133. XPress Space-bar to Continue
  134. X4 6 4
  135. XLesson 1: Counting
  136. X11
  137. X
  138. XPress Space-bar to Continue
  139. X5 6 4
  140. XLesson 1: Counting
  141. X12
  142. X
  143. XPress Space-bar to Continue
  144. X6 6 4
  145. XLesson 1: Counting
  146. X13
  147. X
  148. XPress Space-bar to Continue
  149. X7 6 4
  150. XLesson 1: Counting
  151. X14
  152. X
  153. XPress Space-bar to Continue
  154. X3 6 4
  155. XLesson 1: Counting
  156. X15 (pending operation)
  157. XReset Bottom-deck...
  158. XPress Space-bar to Continue
  159. X1 6 4
  160. XLesson 1: Counting
  161. X15
  162. X...Carry-over to Upper-deck.
  163. XPress Space-bar to Continue
  164. X4 6 4
  165. XLesson 1: Counting
  166. X16
  167. X
  168. XPress Space-bar to Continue
  169. X5 6 4
  170. XLesson 1: Counting
  171. X17
  172. X
  173. XPress Space-bar to Continue
  174. X6 6 4
  175. XLesson 1: Counting
  176. X18
  177. X
  178. XPress Space-bar to Continue
  179. X7 6 4
  180. XLesson 1: Counting
  181. X19
  182. X
  183. XPress Space-bar to Continue
  184. X8 6 4
  185. XLesson 1: Counting
  186. X20 (pending operation)
  187. X
  188. XPress Space-bar to Continue
  189. X0 6 4
  190. XLesson 1: Counting
  191. X20 (pending operation)
  192. XCarry-over to the Upper-deck...
  193. XPress Space-bar to Continue
  194. X3 6 4
  195. XLesson 1: Counting
  196. X20 (pending operation)
  197. X...Reset Lower-deck...
  198. XPress Space-bar to Continue
  199. X5 5 4
  200. XLesson 1: Counting
  201. X20 (pending operation)
  202. X...Carry-over To The Previous Column.
  203. XPress Space-bar to Continue
  204. X2 6 4
  205. XLesson 1: Counting
  206. X20
  207. X...And Reset Upper-deck...
  208. XPress Space-bar to Continue
  209. X3 5 4
  210. XLesson 1: End
  211. XAnd now, some conclusions...
  212. X
  213. XPress Space-bar to Continue
  214. X-7 6 4
  215. XConclusion:
  216. XEach of the 2 beads on the upper-deck has a value of 5.
  217. XEach of the 5 beads on the lower-deck has a value of 1.
  218. XPress Space-bar to Continue
  219. X-7 6 4
  220. XConclusion: (continued)
  221. XCounting 5 beads on the lower deck requires a carry of 
  222. X1 bead to the upper-deck.
  223. XPress Space-bar to Continue
  224. X-7 6 4
  225. XConclusion: (continued)
  226. XCounting 2 beads on the upper deck requires a carry of 
  227. X1 bead on the lower-deck of the previous column.
  228. XPress Space-bar
  229. X-7 6 4
  230. XConclusion: (continued)
  231. XThe 1's column is at the middle of the abacus. Every
  232. Xcolumn to the left is an order of magnitude greater.
  233. XPress Space-bar
  234. X-7 6 4
  235. XConclusion: (End)
  236. XColumns to the right of the 1's column are used 
  237. Xfor calculations involving decimals.
  238. XPress Space-bar
  239. END_OF_FILE
  240. if test 3689 -ne `wc -c <'Lesson1.cmd'`; then
  241.     echo shar: \"'Lesson1.cmd'\" unpacked with wrong size!
  242. fi
  243. # end of 'Lesson1.cmd'
  244. fi
  245. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  246.   echo shar: Will not clobber existing file \"'Makefile'\"
  247. else
  248. echo shar: Extracting \"'Makefile'\" \(9485 characters\)
  249. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  250. X# Makefile generated by imake - do not edit!
  251. X# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $
  252. X#
  253. X# The cpp used on this machine replaces all newlines and multiple tabs and
  254. X# spaces in a macro expansion with a single space.  Imake tries to compensate
  255. X# for this, but is not always successful.
  256. X#
  257. X
  258. X###########################################################################
  259. X# Makefile generated from "Imake.tmpl" and </tmp/IIf.a22422>
  260. X# $XConsortium: Imake.tmpl,v 1.77 89/12/18 17:01:37 jim Exp $
  261. X#
  262. X# Platform-specific parameters may be set in the appropriate .cf
  263. X# configuration files.  Site-wide parameters may be set in the file
  264. X# site.def.  Full rebuilds are recommended if any parameters are changed.
  265. X#
  266. X# If your C preprocessor doesn't define any unique symbols, you'll need
  267. X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  268. X# "make Makefile", "make Makefiles", or "make World").
  269. X#
  270. X# If you absolutely can't get imake to work, you'll need to set the
  271. X# variables at the top of each Makefile as well as the dependencies at the
  272. X# bottom (makedepend will do this automatically).
  273. X#
  274. X
  275. X###########################################################################
  276. X# platform-specific configuration parameters - edit sun.cf to change
  277. X
  278. X# platform:  $XConsortium: sun.cf,v 1.38 89/12/23 16:10:10 jim Exp $
  279. X# operating system:  SunOS 4.1
  280. X
  281. X###########################################################################
  282. X# site-specific configuration parameters - edit site.def to change
  283. X
  284. X# site:  $XConsortium: site.def,v 1.21 89/12/06 11:46:50 jim Exp $
  285. X
  286. X            SHELL = /bin/sh
  287. X
  288. X              TOP = .
  289. X      CURRENT_DIR = .
  290. X
  291. X               AR = ar cq
  292. X  BOOTSTRAPCFLAGS =
  293. X               CC = cc
  294. X
  295. X         COMPRESS = compress
  296. X              CPP = /lib/cpp $(STD_CPP_DEFINES)
  297. X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
  298. X          INSTALL = install
  299. X               LD = ld
  300. X             LINT = lint
  301. X      LINTLIBFLAG = -C
  302. X         LINTOPTS = -axz
  303. X               LN = ln -s
  304. X             MAKE = make
  305. X               MV = mv
  306. X               CP = cp
  307. X           RANLIB = ranlib
  308. X  RANLIBINSTFLAGS =
  309. X               RM = rm -f
  310. X     STD_INCLUDES =
  311. X  STD_CPP_DEFINES =
  312. X      STD_DEFINES =
  313. X EXTRA_LOAD_FLAGS =
  314. X  EXTRA_LIBRARIES =
  315. X             TAGS = ctags
  316. X
  317. X    SHAREDCODEDEF = -DSHAREDCODE
  318. X         SHLIBDEF = -DSUNSHLIB
  319. X
  320. X    PROTO_DEFINES =
  321. X
  322. X     INSTPGMFLAGS =
  323. X
  324. X     INSTBINFLAGS = -m 0755
  325. X     INSTUIDFLAGS = -m 4755
  326. X     INSTLIBFLAGS = -m 0664
  327. X     INSTINCFLAGS = -m 0444
  328. X     INSTMANFLAGS = -m 0444
  329. X     INSTDATFLAGS = -m 0444
  330. X    INSTKMEMFLAGS = -m 4755
  331. X
  332. X          DESTDIR =
  333. X
  334. X     TOP_INCLUDES = -I$(INCROOT)
  335. X
  336. X      CDEBUGFLAGS = -O
  337. X        CCOPTIONS =
  338. X      COMPATFLAGS =
  339. X
  340. X      ALLINCLUDES = $(STD_INCLUDES) $(TOP_INCLUDES) $(INCLUDES) $(EXTRA_INCLUDES)
  341. X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(DEFINES) $(COMPATFLAGS)
  342. X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
  343. X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
  344. X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
  345. X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS)
  346. X   LDCOMBINEFLAGS = -X -r
  347. X
  348. X        MACROFILE = sun.cf
  349. X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
  350. X
  351. X    IMAKE_DEFINES =
  352. X
  353. X         IRULESRC = $(CONFIGDIR)
  354. X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
  355. X
  356. X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
  357. X            $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
  358. X            $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
  359. X
  360. X###########################################################################
  361. X# X Window System Build Parameters
  362. X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
  363. X
  364. X###########################################################################
  365. X# X Window System make variables; this need to be coordinated with rules
  366. X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
  367. X
  368. X          PATHSEP = /
  369. X        USRLIBDIR = $(DESTDIR)/usr/lib
  370. X           BINDIR = $(DESTDIR)/usr/bin/X11
  371. X          INCROOT = $(DESTDIR)/usr/include
  372. X     BUILDINCROOT = $(TOP)
  373. X      BUILDINCDIR = $(BUILDINCROOT)/X11
  374. X      BUILDINCTOP = ..
  375. X           INCDIR = $(INCROOT)/X11
  376. X           ADMDIR = $(DESTDIR)/usr/adm
  377. X           LIBDIR = $(USRLIBDIR)/X11
  378. X        CONFIGDIR = $(LIBDIR)/config
  379. X       LINTLIBDIR = $(USRLIBDIR)/lint
  380. X
  381. X          FONTDIR = $(LIBDIR)/fonts
  382. X         XINITDIR = $(LIBDIR)/xinit
  383. X           XDMDIR = $(LIBDIR)/xdm
  384. X           AWMDIR = $(LIBDIR)/awm
  385. X           TWMDIR = $(LIBDIR)/twm
  386. X           GWMDIR = $(LIBDIR)/gwm
  387. X          MANPATH = $(DESTDIR)/usr/man
  388. X    MANSOURCEPATH = $(MANPATH)/man
  389. X           MANDIR = $(MANSOURCEPATH)n
  390. X        LIBMANDIR = $(MANSOURCEPATH)3
  391. X      XAPPLOADDIR = $(LIBDIR)/app-defaults
  392. X
  393. X        SOXLIBREV = 4.2
  394. X          SOXTREV = 4.0
  395. X         SOXAWREV = 4.0
  396. X        SOOLDXREV = 4.0
  397. X         SOXMUREV = 4.0
  398. X        SOXEXTREV = 4.0
  399. X
  400. X       FONTCFLAGS = -t
  401. X
  402. X     INSTAPPFLAGS = $(INSTDATFLAGS)
  403. X
  404. X            IMAKE = imake
  405. X           DEPEND = makedepend
  406. X              RGB = rgb
  407. X            FONTC = bdftosnf
  408. X        MKFONTDIR = mkfontdir
  409. X        MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier.sh
  410. X
  411. X        CONFIGSRC = $(TOP)/config
  412. X        CLIENTSRC = $(TOP)/clients
  413. X          DEMOSRC = $(TOP)/demos
  414. X           LIBSRC = $(TOP)/lib
  415. X          FONTSRC = $(TOP)/fonts
  416. X       INCLUDESRC = $(TOP)/X11
  417. X        SERVERSRC = $(TOP)/server
  418. X          UTILSRC = $(TOP)/util
  419. X        SCRIPTSRC = $(UTILSRC)/scripts
  420. X       EXAMPLESRC = $(TOP)/examples
  421. X       CONTRIBSRC = $(TOP)/../contrib
  422. X           DOCSRC = $(TOP)/doc
  423. X           RGBSRC = $(TOP)/rgb
  424. X        DEPENDSRC = $(UTILSRC)/makedepend
  425. X         IMAKESRC = $(CONFIGSRC)
  426. X         XAUTHSRC = $(LIBSRC)/Xau
  427. X          XLIBSRC = $(LIBSRC)/X
  428. X           XMUSRC = $(LIBSRC)/Xmu
  429. X       TOOLKITSRC = $(LIBSRC)/Xt
  430. X       AWIDGETSRC = $(LIBSRC)/Xaw
  431. X       OLDXLIBSRC = $(LIBSRC)/oldX
  432. X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
  433. X      BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  434. X     MKFONTDIRSRC = $(FONTSRC)/mkfontdir
  435. X     EXTENSIONSRC = $(TOP)/extensions
  436. X
  437. X  DEPEXTENSIONLIB = $(USRLIBDIR)/libXext.a
  438. X     EXTENSIONLIB =  -lXext
  439. X
  440. X          DEPXLIB = $(DEPEXTENSIONLIB)
  441. X             XLIB = $(EXTENSIONLIB) -lX11
  442. X
  443. X      DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
  444. X         XAUTHLIB =  -lXau
  445. X
  446. X        DEPXMULIB =
  447. X           XMULIB = -lXmu
  448. X
  449. X       DEPOLDXLIB =
  450. X          OLDXLIB = -loldX
  451. X
  452. X      DEPXTOOLLIB =
  453. X         XTOOLLIB = -lXt
  454. X
  455. X        DEPXAWLIB =
  456. X           XAWLIB = -lXaw
  457. X
  458. X LINTEXTENSIONLIB = $(USRLIBDIR)/llib-lXext.ln
  459. X         LINTXLIB = $(USRLIBDIR)/llib-lX11.ln
  460. X          LINTXMU = $(USRLIBDIR)/llib-lXmu.ln
  461. X        LINTXTOOL = $(USRLIBDIR)/llib-lXt.ln
  462. X          LINTXAW = $(USRLIBDIR)/llib-lXaw.ln
  463. X
  464. X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
  465. X
  466. X         DEPLIBS1 = $(DEPLIBS)
  467. X         DEPLIBS2 = $(DEPLIBS)
  468. X         DEPLIBS3 = $(DEPLIBS)
  469. X
  470. X###########################################################################
  471. X# Imake rules for building libraries, programs, scripts, and data files
  472. X# rules:  $XConsortium: Imake.rules,v 1.67 89/12/18 17:14:15 jim Exp $
  473. X
  474. X###########################################################################
  475. X# start of Imakefile
  476. X
  477. X#
  478. X# run makedepend for dependancies
  479. X# -g enable dbx debugging info;
  480. XCDEBUGFLAGS = -g
  481. X
  482. X#-DDEBUG will '#define DEBUG' statements (trace)
  483. X#CDEBUGFLAGS = -DDEBUG
  484. X
  485. X#Optimize
  486. X#CDEBUGFLAGS = -O
  487. X
  488. X# -lm enables the math lib (needed if you #include <math.h>)
  489. X#EXTRA_LOAD_FLAGS = -lm
  490. X
  491. XSRCS= main.c Xinit.c aba.c demo.c
  492. XOBJS= main.o Xinit.o aba.o demo.o
  493. X
  494. XLOCAL_LIBRARIES = $(XLIB) $(XTOOLLIB)
  495. X
  496. X PROGRAM = xabacus
  497. X
  498. Xall:: xabacus
  499. X
  500. Xxabacus: $(OBJS) $(DEPLIBS)
  501. X    $(RM) $@
  502. X    $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
  503. X
  504. Xinstall:: xabacus
  505. X    $(INSTALL) -c $(INSTPGMFLAGS)   xabacus $(BINDIR)
  506. X
  507. Xinstall.man:: xabacus.man
  508. X    $(INSTALL) -c $(INSTMANFLAGS) xabacus.man $(MANDIR)/xabacus.n
  509. X
  510. Xdepend::
  511. X    $(DEPEND) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
  512. X
  513. Xlint:
  514. X    $(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS)
  515. Xlint1:
  516. X    $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
  517. X
  518. Xclean::
  519. X    $(RM) $(PROGRAM)
  520. X
  521. X# Distribution: Make the shar-files ~no bigger than 64K
  522. Xshar: main.c Xinit.c aba.c demo.c Imakefile Makefile README xabacus.man XAbacus.ad icon.bm Lesson1.cmd Lesson2.cmd Lesson3.cmd xabacus.man XAbacus.ad
  523. X    shar -s 64000 README *.[ch] xabacus.man I* Makefile icon.bm *.cmd XAbacus.ad
  524. X# Distribution: split the PS file into 2 files & shar them assuming the source
  525. X# can be contained in shar1 & shar2
  526. Xpsshar: abacus.ps
  527. X    split -2500 abacus.ps abacus.ps
  528. X    shar -h shar3 abacus.psaa
  529. X    shar -h shar4 abacus.psab
  530. X
  531. X# join 2 PS files to create Abacus.ps
  532. Xps:
  533. X    cat abacus.psaa abacus.psab >Abacus.ps
  534. X    rm -f abacus.ps??
  535. X
  536. X###########################################################################
  537. X# common rules for all Makefiles - do not edit
  538. X
  539. Xemptyrule::
  540. X
  541. Xclean::
  542. X    $(RM_CMD) \#*
  543. X
  544. XMakefile::
  545. X    -@if [ -f Makefile ]; then \
  546. X    echo "    $(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
  547. X    $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  548. X    else exit 0; fi
  549. X    $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
  550. X
  551. Xtags::
  552. X    $(TAGS) -w *.[ch]
  553. X    $(TAGS) -xw *.[ch] > TAGS
  554. X
  555. X###########################################################################
  556. X# empty rules for directories that do not have SUBDIRS - do not edit
  557. X
  558. Xinstall::
  559. X    @echo "install in $(CURRENT_DIR) done"
  560. X
  561. Xinstall.man::
  562. X    @echo "install.man in $(CURRENT_DIR) done"
  563. X
  564. XMakefiles::
  565. X
  566. Xincludes::
  567. X
  568. X###########################################################################
  569. X# dependencies generated by makedepend
  570. X
  571. END_OF_FILE
  572. if test 9485 -ne `wc -c <'Makefile'`; then
  573.     echo shar: \"'Makefile'\" unpacked with wrong size!
  574. fi
  575. # end of 'Makefile'
  576. fi
  577. if test -f 'XAbacus.ad' -a "${1}" != "-c" ; then 
  578.   echo shar: Will not clobber existing file \"'XAbacus.ad'\"
  579. else
  580. echo shar: Extracting \"'XAbacus.ad'\" \(275 characters\)
  581. sed "s/^X//" >'XAbacus.ad' <<'END_OF_FILE'
  582. X!Example resources for xabacus (default, as specified)
  583. X!Installation of this file in /usr/lib/X11/app-defaults/ is UNECESSARY
  584. X!
  585. XXAbacus.beadwidth:  30
  586. XXAbacus.beadheight: 20
  587. XXAbacus.framewidth: 10
  588. XXAbacus.ncols: 13
  589. XXAbacus.demofont: -*-times-*-r-*-*-*-180-*
  590. XXAbacus.demo: ./
  591. END_OF_FILE
  592. if test 275 -ne `wc -c <'XAbacus.ad'`; then
  593.     echo shar: \"'XAbacus.ad'\" unpacked with wrong size!
  594. fi
  595. # end of 'XAbacus.ad'
  596. fi
  597. if test -f 'Xinit.c' -a "${1}" != "-c" ; then 
  598.   echo shar: Will not clobber existing file \"'Xinit.c'\"
  599. else
  600. echo shar: Extracting \"'Xinit.c'\" \(8800 characters\)
  601. sed "s/^X//" >'Xinit.c' <<'END_OF_FILE'
  602. X#include <stdio.h>
  603. X#include <X11/cursorfont.h>
  604. X
  605. X#include "icon.bm"
  606. X
  607. X#include "main.h"
  608. X
  609. XPixel getcolor();
  610. XPixel bgcolor, bdcolor;    /* background & border*/
  611. X
  612. X/*--------------------------------------------------------------------
  613. X * makeWindows, connects to X-server, creates the application windows, 
  614. X *            allocates GC's & sets WM hints, creates cursors & maps windows
  615. X *
  616. X *            passed: argc, argv straight from the commandline
  617. X *            returns: nothing
  618. X *            dep: win struct, a bunch of globals; see maindefs.h
  619. X */
  620. XmakeWindows(argc, argv, display_name)
  621. Xint argc; 
  622. Xchar **argv;
  623. Xchar *display_name;
  624. X{
  625. Xunsigned int border_width=1;
  626. Xchar *window_name=APPNAME;
  627. Xchar *icon_name=APPNAME;
  628. X/*char *display_name=NULL;*/
  629. XPixmap icon_pixmap;
  630. Xint i;
  631. X
  632. X#ifdef DEBUG
  633. X    fprintf(stderr,"DEBUG: makeWIndows()\n");
  634. X#endif
  635. X
  636. X    /* connect to X server */
  637. X    if ( (display=XOpenDisplay(display_name)) == NULL ) {
  638. X        fprintf(stderr,"%s: cannot connect to X server %s\n", argv[0], 
  639. XXDisplayName(display_name));
  640. X        exit( -1 );
  641. X    }
  642. X
  643. X    /* get screen size from display structure macro */
  644. X    screen = DefaultScreen(display);
  645. X
  646. X    bgcolor=getcolor(colors[BACKGROUND]);
  647. X    bdcolor=getcolor(BDWINCOLOR);
  648. X
  649. X    /* create opaque window;inherit attributes from root*/
  650. X       base= XCreateSimpleWindow(display, RootWindow(display, screen),
  651. Xposx, posy, width, height, border_width, bdcolor, bgcolor);
  652. X
  653. X    if(demo){
  654. X        demobase=XCreateSimpleWindow(display, RootWindow(display, screen),
  655. Xposx, posy, demowidth, demoheight, border_width, bdcolor, bgcolor);
  656. X
  657. X    load_font(&font_info);
  658. X    }
  659. X
  660. X    /* create separate GC for drawing */
  661. X    for(i=0; i<MAXCOLORS; i++) makeGCs(&gc[i], colors[i]);
  662. X
  663. X    /* do special settings*/
  664. X    XSetLineAttributes(display, gc[FRAME], framewidth, LineSolid, CapButt, 
  665. XJoinMiter);    /* extra thick lines for the frame*/
  666. X
  667. X    if(demo) XSetFont(display, gc[FRAME], font_info->fid);
  668. X    XSetFillStyle(display,gc[BEADS],FillSolid);
  669. X    XSetFunction(display,gc[BEADS],GXxor);    /* so we don't disturb BG while
  670. X                                                animating beads*/
  671. X
  672. X    /* Create bitmap for icon */
  673. X    icon_pixmap= XCreateBitmapFromData(display, base, icon_bits, icon_width,
  674. Xicon_height);
  675. X
  676. X    if(demo){
  677. X        /* Set resize hints */
  678. X        size_hints.flags= PPosition | PMinSize | PMaxSize;
  679. X        size_hints.width= demowidth;             
  680. X        size_hints.height= demoheight;
  681. X        size_hints.min_width=size_hints.max_width=demowidth;    
  682. X        size_hints.min_height=size_hints.max_height=demoheight;
  683. X        size_hints.x= posx+10;                     size_hints.y= posy+10;
  684. X
  685. X        /* set Properties for window manager (always before mapping) */
  686. X        XSetStandardProperties(display, demobase, DEMOWINAME, DEMOWINAME, 
  687. X            icon_pixmap, argv, argc, &size_hints);
  688. X
  689. X        /* Select event types wanted */
  690. X        XSelectInput(display, demobase, ExposureMask | KeyPressMask | 
  691. X            ButtonPressMask | ButtonReleaseMask);
  692. X    }
  693. X
  694. X       /* Set resize hints re-using size_hints struct for the base-window*/
  695. X    size_hints.flags= PPosition | PSize | PMinSize|PMaxSize;
  696. X       size_hints.width=size_hints.min_width=width;             
  697. X    size_hints.height= height;
  698. X    /* the abacus can be made as wide as the screen or MAXCOLS (whichever is
  699. X     * smaller)*/
  700. X    size_hints.max_width=DisplayWidth(display, screen);
  701. X    /* height is fixed at run-time */
  702. X    size_hints.min_height=size_hints.max_height=height;
  703. X       size_hints.x= posx;                     size_hints.y= posy;
  704. X
  705. X    /* set Properties for window manager (always before mapping) */
  706. X    XSetStandardProperties(display, base, window_name, icon_name, 
  707. Xicon_pixmap, argv, argc, &size_hints);
  708. X
  709. X    /* Select event types wanted */
  710. X    XSelectInput(display, base, ExposureMask | KeyPressMask | ButtonPressMask | 
  711. XStructureNotifyMask | PointerMotionHintMask | ButtonMotionMask | 
  712. XButtonReleaseMask);
  713. X
  714. X    /* create & map unique cursor to this window*/
  715. X    Hand=XCreateFontCursor(display, XC_hand2);
  716. X    XDefineCursor(display, base, Hand);
  717. X
  718. X    if (demo) XDefineCursor(display, demobase, Hand);
  719. X
  720. X    XMapWindow(display, base);
  721. X    if (demo) XMapWindow(display, demobase);
  722. X
  723. X}/*make Windows*/
  724. X/*-----------------------------------------------------------------
  725. X * makeGCs, creates a default GC then sets the color, line &
  726. X *      font attributes; font must have been loaded before this is called
  727. X *
  728. X *      passed: pointer to GC to be set,
  729. X *              colorname to set("red","green"...)
  730. X *      returns: nothing
  731. X *          dep: XGC values, win, display, getcolor()
  732. X */
  733. XmakeGCs(gc, colorname)
  734. XGC *gc;
  735. Xchar *colorname;
  736. X{
  737. Xunsigned long valuemask = 0; /* use defaults*/
  738. XXGCValues values;
  739. X
  740. X    *gc = XCreateGC(display, base, valuemask, &values); /* ...create gc*/
  741. X
  742. X    /* ...set color & other GC attributes*/
  743. X    XSetForeground(display, *gc, getcolor(colorname));
  744. X    XSetBackground(display, *gc, getcolor(colors[BACKGROUND]));
  745. X    XSetLineAttributes(display, *gc, 0, LineSolid, CapButt, JoinMiter);
  746. X
  747. X}/* makeGCs*/
  748. X
  749. X/*-------------------------------------------------------------------
  750. X * closeDisplay, de-allocates GC's, fonts & pixmaps, breaks connection with
  751. X *          X server & de-allocates all data, exits application
  752. X *
  753. X *          passed: nothing
  754. X *          returns:doesn't return
  755. X *          dep: globals in maindefs.h
  756. X */
  757. X/* ARGSUSED*/
  758. XcloseDisplay()
  759. X{
  760. Xint i;
  761. X    for(i=0; i<MAXCOLORS; i++) XFreeGC(display, gc[i]);
  762. X
  763. X    if (demo) XUnloadFont(display, font_info->fid);
  764. X
  765. X    XFreeCursor(display, Hand);
  766. X
  767. X    XCloseDisplay(display);
  768. X
  769. X    exit(0);
  770. X}
  771. X
  772. X/*------------------------------------------------------------------------
  773. X * getcolor, allocates requested color in the default colormap & returns
  774. X *          a RGB pixel-value for use in allocating a GC.
  775. X *          Automatically detects a monochrome display, & assumes
  776. X *          black-on-white thus returning black instead of requested colors
  777. X *          & white when requested.
  778. X *
  779. X *          passed: colorname to allocate
  780. X *          returns: RGB pixel-value encoided in an unsigned long (I'm
  781. X *                  breaking Rule#1 of Xlib programming by accessing
  782. X *                  the individual  structure elements rather than
  783. X *                  using correct types (Pixel is defined for Xt only))
  784. X *              dep: nothing
  785. X */
  786. Xunsigned long getcolor(colorname)
  787. Xchar *colorname;
  788. X{
  789. Xint depth;              /* of the screen*/
  790. XColormap cmap;          /* for allocating colors*/
  791. XXColor generic;         /* hold pixel-values while making different GC's*/
  792. Xint i;
  793. X
  794. X    depth=DisplayPlanes(display, screen);   /* is it mono or color*/
  795. X    cmap=DefaultColormap(display, screen);
  796. X
  797. X    /* mono screen; ignore colorname; default: black on white */
  798. X    if(depth==1){
  799. X        if(!strcmp(colorname,"white"))      /* user wants white*/
  800. X            return(WhitePixel(display, screen));
  801. X        else
  802. X            return(BlackPixel(display, screen));
  803. X    }
  804. X    else{
  805. X
  806. X        /* parse the color & get pixel values to set color... */
  807. X        if(!XParseColor(display, cmap, colorname, &generic)){
  808. X            fprintf(stdout,"%s: Bad colorname:%s \n", APPNAME, colorname);
  809. X            return(BlackPixel(display, screen));    /* send back default*/
  810. X        }
  811. X
  812. X        /* allocate color in colormap if space is available*/
  813. X        if(!XAllocColor(display, cmap, &generic)){
  814. X            fprintf(stdout,"Could not allocate %s, colormap full or \
  815. Xwrite-immune\n",colorname);
  816. X             return(BlackPixel(display, screen));
  817. X        }
  818. X
  819. X        /* color is good*/
  820. X        return(generic.pixel);
  821. X    }
  822. X}/* get color*/
  823. X
  824. Xload_font(font_info)
  825. XXFontStruct **font_info;
  826. X{
  827. X    /*char *fontname = "-*-times-*-r-*-*-*-180-*";*/
  828. X    char *altfontname = "8x13";
  829. X
  830. X    /* Access font */
  831. X    if ((*font_info=XLoadQueryFont(display,demofont)) == NULL) {
  832. X        (void) fprintf( stderr, "Cannot open %s font\n",demofont);
  833. X        (void) fprintf( stderr, "Attempting %s font as alternate\n",
  834. X                        altfontname);
  835. X
  836. X        if((*font_info=XLoadQueryFont(display,altfontname)) == NULL) {
  837. X            (void) fprintf( stderr, "Cannot open %s alternate font\n",
  838. X                        altfontname);
  839. X            (void) fprintf( stderr, "use the -demofont option to specify a \
  840. Xfont to use\n");
  841. X            exit( -1 );
  842. X        }
  843. X    }
  844. X}
  845. X
  846. X/*-----------------------------------------------------------------
  847. X * report_button, reports which of the 3 mouse button was pressed
  848. X *          This implementation is *technically* incorrect,
  849. X *  I looked-up the type of data the button-event was (unsigned int);
  850. X *  I don't know how else to do it.
  851. X *  To maintain portability integrity the user must never directly
  852. X *  access the data-types! (I just broke this rule)
  853. X *      -LF
  854. X *
  855. X *          passed: the xevent item with the value of button pressed
  856. X *          returns: 1- if left-button pressed
  857. X *                   2- if middle button
  858. X *                   3- if right button
  859. X */
  860. Xint report_button(butn)
  861. Xunsigned int butn;
  862. X{
  863. X
  864. X    switch(butn){
  865. X        case Button1:
  866. X            return(1);
  867. X
  868. X        case Button2:
  869. X            return(2);
  870. X
  871. X        case Button3:
  872. X            return(3);
  873. X    }/* switch*/
  874. X
  875. X}/* report button*/
  876. X
  877. END_OF_FILE
  878. if test 8800 -ne `wc -c <'Xinit.c'`; then
  879.     echo shar: \"'Xinit.c'\" unpacked with wrong size!
  880. fi
  881. # end of 'Xinit.c'
  882. fi
  883. if test -f 'demo.h' -a "${1}" != "-c" ; then 
  884.   echo shar: Will not clobber existing file \"'demo.h'\"
  885. else
  886. echo shar: Extracting \"'demo.h'\" \(120 characters\)
  887. sed "s/^X//" >'demo.h' <<'END_OF_FILE'
  888. Xextern drawIntro();
  889. Xextern lesson1();
  890. Xextern lesson2();
  891. Xextern lesson3();
  892. Xextern drawQuery();
  893. Xextern drawDemoWindow();
  894. X
  895. END_OF_FILE
  896. if test 120 -ne `wc -c <'demo.h'`; then
  897.     echo shar: \"'demo.h'\" unpacked with wrong size!
  898. fi
  899. # end of 'demo.h'
  900. fi
  901. if test -f 'icon.bm' -a "${1}" != "-c" ; then 
  902.   echo shar: Will not clobber existing file \"'icon.bm'\"
  903. else
  904. echo shar: Extracting \"'icon.bm'\" \(5763 characters\)
  905. sed "s/^X//" >'icon.bm' <<'END_OF_FILE'
  906. X#define icon_width 100
  907. X#define icon_height 70
  908. Xstatic char icon_bits[] = {
  909. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  910. X   0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  911. X   0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  912. X   0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  913. X   0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  914. X   0xff, 0xff, 0xff, 0xff, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  915. X   0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07, 0x07,
  916. X   0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f,
  917. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf,
  918. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf,
  919. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf,
  920. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0x9f,
  921. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f,
  922. X   0x1f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87,
  923. X   0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  924. X   0x82, 0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  925. X   0x07, 0x87, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
  926. X   0x8f, 0x8f, 0x8f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  927. X   0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  928. X   0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  929. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f,
  930. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0x1f, 0x07, 0x07, 0x07,
  931. X   0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x0f, 0x1f, 0x02, 0x02,
  932. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x02,
  933. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f,
  934. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f,
  935. X   0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82,
  936. X   0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  937. X   0x82, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  938. X   0x02, 0x82, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  939. X   0x02, 0x02, 0x82, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  940. X   0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  941. X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  942. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
  943. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x1f, 0x02, 0x02, 0x02,
  944. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x02, 0x02,
  945. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x02,
  946. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f,
  947. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f,
  948. X   0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82,
  949. X   0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  950. X   0x82, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  951. X   0x02, 0x82, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  952. X   0x02, 0x02, 0x82, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  953. X   0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  954. X   0x07, 0x07, 0x07, 0x07, 0x87, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
  955. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  956. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf,
  957. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf,
  958. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0x9f, 0x8f,
  959. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0x1f,
  960. X   0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x0f,
  961. X   0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82,
  962. X   0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  963. X   0x87, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
  964. X   0x8f, 0x8f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  965. X   0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  966. X   0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  967. X   0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
  968. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07,
  969. X   0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x0f, 0x1f, 0x02, 0x02, 0x02,
  970. X   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x0f, 0x1f, 0x07, 0x07,
  971. X   0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87, 0x0f, 0x9f, 0x8f,
  972. X   0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x0f, 0xdf,
  973. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f, 0x0f,
  974. X   0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x9f,
  975. X   0x0f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
  976. X   0x9f, 0x0f, 0x9f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
  977. X   0x8f, 0x8f, 0x0f, 0x1f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  978. X   0x07, 0x07, 0x87, 0x0f, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  979. X   0x02, 0x02, 0x02, 0x82, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  980. X   0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  981. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
  982. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff,
  983. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff,
  984. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f};
  985. END_OF_FILE
  986. if test 5763 -ne `wc -c <'icon.bm'`; then
  987.     echo shar: \"'icon.bm'\" unpacked with wrong size!
  988. fi
  989. # end of 'icon.bm'
  990. fi
  991. if test -f 'main.c' -a "${1}" != "-c" ; then 
  992.   echo shar: Will not clobber existing file \"'main.c'\"
  993. else
  994. echo shar: Extracting \"'main.c'\" \(12962 characters\)
  995. sed "s/^X//" >'main.c' <<'END_OF_FILE'
  996. X/* xabacus begun on: Mon Jun 24 14:45:32 EDT 1991
  997. X * by Luis Fernandes 
  998. X *
  999. X * Mon Sep  9 15:36:57 EDT 1991
  1000. X * re-doing demo-implementaion from hard-code to script-driven
  1001. X * trashed SCCS & restarted: base version has all up to -display & q,Q,^c
  1002. X * modifying -demo option to be folowed by a path to where the scripts are
  1003. X *
  1004. X * Mon Oct  7 16:38:39 EDT 1991
  1005. X * added ability to override font used in demo from command-line
  1006. X *
  1007. X * Mon Nov 11 14:39:17 EST 1991
  1008. X * deleted un-used functions in demo.c & added checking for MAXLESSON
  1009. X * Lesson-1 script modifed to show proper method when carrying
  1010. X */
  1011. X
  1012. X/*
  1013. XCopyright (c) 1991, Luis Fernandes.
  1014. X
  1015. XPermission to use, copy, hack, and distribute this software and its
  1016. Xdocumentation for any purpose and without fee is hereby granted,
  1017. Xprovided that the above copyright notice appear in all copies and that
  1018. Xboth that copyright notice and this permission notice appear in
  1019. Xsupporting documentation.
  1020. X
  1021. XThis software is presented as is without any implied or written warranty.
  1022. X*/
  1023. X
  1024. Xstatic char SccsId[]="@(#)main.c    1.4    11/20/91";
  1025. X
  1026. X#include <stdio.h>
  1027. X#include <string.h>
  1028. X#include <X11/StringDefs.h>
  1029. X#include <X11/Intrinsic.h>
  1030. X
  1031. X#include "patchlevel.h"
  1032. X#include "maindefs.h"
  1033. X#include "demo.h"
  1034. X
  1035. X/* If more "lessons" are added, modify MAXLESSON accordingly. xabacus is
  1036. X * set-up to wrap-around to the beginning after the last lesson.
  1037. X */
  1038. X#define MAXLESSON    3
  1039. X
  1040. Xextern int democount, br;
  1041. Xextern char displaytext[4][64];
  1042. X
  1043. Xtypedef unsigned int Column;        /* int's MUST be more than 9 bits wide*/
  1044. XColumn column[MAXCOLS];
  1045. X
  1046. XDisplay *display;
  1047. Xint screen;
  1048. XWindow root, child, base, demobase;
  1049. XWidget topLevel;
  1050. Xunsigned int mask;
  1051. XXSizeHints size_hints;
  1052. XXFontStruct *font_info;
  1053. Xunsigned int width=INITWIDTH, demowidth=DEMOINITWIDTH,
  1054. X            height=INITHEIGHT, demoheight=DEMOINITHEIGHT;
  1055. Xunsigned int posx=INITPOSX,
  1056. X             posy=INITPOSY;   /* position of main window */
  1057. X
  1058. XGC gc[MAXCOLORS];
  1059. XCursor Hand;
  1060. XKeySym key;
  1061. Xchar keytext[KEYBUFFERSIZE];
  1062. X
  1063. X#include "resource.h"
  1064. X
  1065. Xint beadwidth; int beadheight; int framewidth; int ncols;
  1066. XBoolean demo;
  1067. XBoolean script;
  1068. X
  1069. Xint midframey=MIDFRAME;    
  1070. Xint colgap=COLGAP;    int rowgap=ROWGAP;
  1071. X
  1072. Xchar display_name[COLORSTRLEN<<1];
  1073. Xchar colors[MAXCOLORS][COLORSTRLEN];
  1074. Xchar demopath[128];
  1075. Xchar demofont[128];
  1076. XFILE *fp;
  1077. Xint demorow, democol, demolines, lessonlen;
  1078. X
  1079. XWidget      TopLevel;    /* used only to access the resource manger*/
  1080. X
  1081. Xusage(appname)
  1082. Xchar *appname;
  1083. X{
  1084. X    fprintf (stderr, "%s Release %s\n",appname, RELEASENUM);
  1085. X    fprintf (stderr, "Usage: %s [ options ... ]\nWhere options are:\n",appname);
  1086. X    fprintf (stderr,"   -display\t name \tdisplay name\n");
  1087. X    fprintf (stderr,"      -demo\t path \tpath to script files\n");
  1088. X    fprintf (stderr,"    -script\t \t(prints row,col to stdout when beads are \
  1089. Xmoved)\n");
  1090. X    fprintf (stderr,"     -ncols\t n \tnumber of columns\n");
  1091. X    fprintf (stderr," -beadwidth\t w \twidth of the beads (in pixels)\n");
  1092. X    fprintf (stderr,"-beadheight\t h \theight of the beads (in pixels)\n");
  1093. X    fprintf (stderr,"-framewidth\t w \twidth of the frame (in pixels)\n\n");
  1094. X    fprintf (stderr,"-framecolor\t color \tcolor-name for the frame\n");
  1095. X    fprintf (stderr,"        -bg\t color \tcolor-name for the background \n");
  1096. X    fprintf (stderr," -beadcolor\t color \tcolor-name for the beads\n");
  1097. X    fprintf (stderr," -railcolor\t color \tcolor-name for the rails\n\n");
  1098. X    fprintf (stderr,"      -help\t print this list\n\n");
  1099. X
  1100. X    exit (1);
  1101. X}
  1102. X
  1103. Xmain(argc, argv)
  1104. Xint argc;
  1105. Xchar **argv;
  1106. X{
  1107. XXEvent report;
  1108. X
  1109. X    TopLevel = XtInitialize (NULL, "XAbacus", options, XtNumber (options),
  1110. X                 &argc, argv);
  1111. X
  1112. X    if (argc != 1) usage (argv[0]);
  1113. X
  1114. X    XtGetApplicationResources (TopLevel, (caddr_t) &app_resources,
  1115. X                resources, XtNumber(resources),
  1116. X                (ArgList) NULL, (Cardinal) 0);
  1117. X
  1118. X    transferResources();
  1119. X    makeWindows(argc, argv, display_name);
  1120. X    initAbacus();
  1121. X
  1122. X    if(demo) 
  1123. X        doDemo();
  1124. X    else do {                /* the main event loop*/
  1125. X        XNextEvent(display, &report);
  1126. X    } while (TakeEvents(report));
  1127. X
  1128. X}/* main*/
  1129. X
  1130. X/* This function exists for the simple reason that, when the 
  1131. X * code was originally written there were no resources and things would 
  1132. X * certainly get out of hand if I sed'ed all my source replacing all 
  1133. X * occurences of one var with that of another. 
  1134. X * Besides, typing in 'beadwidth' is a lot easier than typing in 
  1135. X * 'app_resources.beadwidth'. (Yes, I'm aware of cpp )
  1136. X *
  1137. X * Also, this is a good place for checking & overriding user-supplied options.
  1138. X */
  1139. XtransferResources()
  1140. X{
  1141. Xint i;
  1142. X
  1143. X    if(app_resources.demo[0]!=' ') demo=True;
  1144. X
  1145. X    sprintf(demopath,"%s",app_resources.demo);
  1146. X
  1147. X    if(app_resources.script==True){
  1148. X        script=True;
  1149. X        (void)fprintf(stderr,"Scripting Enabled, output to stdout...\n");
  1150. X    }
  1151. X
  1152. X    if(demo){    /* use standardized values*/
  1153. X        strcpy(demofont, app_resources.demofont);
  1154. X        beadwidth=BEADWIDTH;
  1155. X        beadheight=BEADHEIGHT;
  1156. X        framewidth=FRAMEWIDTH;
  1157. X        /* if anything, ncols MUST be overriden to the same number as when the
  1158. X        demo (using -script) was created) */
  1159. X        ncols=NCOLS;
  1160. X        midframey=MIDFRAME;
  1161. X        height=INITHEIGHT;
  1162. X        width=INITWIDTH;
  1163. X    }
  1164. X    else{        /* acknowledge options */
  1165. X        beadwidth=app_resources.beadwidth;
  1166. X        beadheight=app_resources.beadheight;
  1167. X        framewidth=app_resources.framewidth;
  1168. X        ncols=app_resources.ncols;
  1169. X        midframey=(framewidth+(NTOPROWS*beadheight)+((NTOPROWS+1)*ROWGAP));
  1170. X        height=((3*framewidth)+(NROWS*beadheight)+((NROWS+1)*ROWGAP));
  1171. X        width=((2*framewidth)+(ncols*beadwidth)+((ncols+1)*COLGAP));
  1172. X    }
  1173. X
  1174. X    if(app_resources.display[0]==' ' )
  1175. X        *display_name=NULL;
  1176. X    else
  1177. X        strcpy(display_name, app_resources.display);
  1178. X
  1179. X    for(i=0; i<MAXCOLORS; i++) 
  1180. X        strcpy(colors[i],app_resources.colors[i]);
  1181. X
  1182. X}/*transferResources*/
  1183. X
  1184. X
  1185. X/*-----------------------------------------------------------------
  1186. X * TakeEvents, the main event loop
  1187. X *
  1188. X *            passed: XEvent variable returned from XNextEvent
  1189. X *            returns: 1 for every other valid event
  1190. X *                     Never returns when the user quits; automatically 
  1191. X *                    vectored to quit routine
  1192. X */
  1193. X
  1194. Xint 
  1195. XTakeEvents(report)
  1196. XXEvent report;
  1197. X{
  1198. Xint cx=0, cy=0;          /*pointer-position in window when button pressed*/
  1199. Xint window_size=OK;     /* OK, or SMALL */
  1200. Xint root_x, root_y;        /* coodrs of click relative to root*/
  1201. Xint keyretval, i;
  1202. Xstatic int oldwidth;
  1203. X#ifdef DEBUG
  1204. X    (void)fprintf(stderr," DEBUG TakeEvents:\n");
  1205. X#endif
  1206. X        switch  (report.type) {
  1207. X
  1208. X        case Expose:
  1209. X             /* get rid of unecessary  Expose events in queue*/
  1210. X             while (XCheckTypedEvent(display, Expose, &report));
  1211. X
  1212. X            if (window_size == SMALL)
  1213. X                fprintf(stderr,"Window is too small");     
  1214. X                else /*refresh all windows */
  1215. X                    drawAbacus();
  1216. X
  1217. X            break;
  1218. X
  1219. X        case ConfigureNotify:
  1220. X            /* when the window is resized, the abacus should be resized
  1221. X             * accordingly;  window has been resized, change width */
  1222. X            oldwidth=width;
  1223. X               width = report.xconfigure.width;
  1224. X            cx=ncols;    /* temp */
  1225. X            /* calc number of new cols to be added */
  1226. X            ncols=((int)width-oldwidth)/(colgap+beadwidth);
  1227. X
  1228. X            /* take new value only if it's valid*/
  1229. X            /*ncols=(ncols<=0)?cx:(width-oldwidth)/(colgap+beadwidth);*/
  1230. X            if(ncols==0) ncols=cx;
  1231. X            else ncols+=cx;
  1232. X
  1233. X            /* for bogus/none/retarded WM's*/
  1234. X            if ((width<size_hints.min_width) || (height<size_hints.min_height))
  1235. X                window_size = SMALL;
  1236. X            else{
  1237. X                window_size = OK;
  1238. X            }/* else*/
  1239. X            break;
  1240. X
  1241. X        case ButtonPress:
  1242. X
  1243. X            /* get current coords of pointer*/
  1244. X            XQueryPointer(display, base, &root, &child, &root_x, &root_y, &cx, &cy, &mask);
  1245. X
  1246. X            /* row,col returned in cx,cy*/
  1247. X            i=translateXY2RowCol(&cx,&cy);
  1248. X
  1249. X            if(i){        /*valid row,col...*/
  1250. X                if(RowOccupied(cy,column[cx])){    /*& it's occupied...*/
  1251. X#ifdef DEBUG
  1252. X    (void)fprintf(stderr," DEBUG:(bead present) col=%4d row=%4d\n", cx, cy);
  1253. X#endif
  1254. X
  1255. X                    if(script) (void)fprintf(stdout,"%d %d\n",cy,cx);
  1256. X
  1257. X                    animateBead((unsigned)cy,(unsigned)cx);
  1258. X                }
  1259. X            }
  1260. X            else{
  1261. X#ifdef DEBUG
  1262. X    (void)fprintf(stderr," DEBUG: INVALID\n");
  1263. X#endif
  1264. X            /*XBell(display);*/
  1265. X
  1266. X            }
  1267. X
  1268. X            break;
  1269. X
  1270. X        case KeyPress:
  1271. X            keyretval=XLookupString(&report, keytext, KEYBUFFERSIZE, &key, 0);
  1272. X
  1273. X            if(keyretval==1){    /* user pressed 1 key...*/
  1274. X                if(keytext[0]=='q'||keytext[0]=='Q'||keytext[0]=='\03')
  1275. X                    closeDisplay();
  1276. X            }
  1277. X
  1278. X            keyretval=0;
  1279. X            break;
  1280. X
  1281. X        default:
  1282. X            /* all events selected by StructureNotifyMask
  1283. X             * are thrown away here
  1284. X             */
  1285. X            break;
  1286. X        }/*switch*/
  1287. X
  1288. X
  1289. X    return(1);
  1290. X
  1291. X}/*TakeEvents*/    
  1292. X
  1293. X/* ------------------------------------------------------------
  1294. X * translateXY2RowCol, converts x,y coord returned by XQueryPointer to
  1295. X * a row,col coord. The top deck has 3 rows (1 is empty), the bottom
  1296. X * deck has 6 rows (1 is empty). Row # 3 is invalid because the middle-frame
  1297. X * occupies this position. Coordinates for the bottom deck are adjusted
  1298. X * for this anomaly, i.e. row #4 on the screen, is actually index #3
  1299. X * into the Column array.
  1300. X *
  1301. X *        passed: (pointers to) absolute x,y coordinates representing 
  1302. X *                the click-location
  1303. X *        returns: row (0-9),col (0-NCOLS) index in the same variables passed
  1304. X *                 True if click was at any location BUT mid-frame
  1305. X *                 False if click was at mid-frame location
  1306. X */
  1307. Xint 
  1308. XtranslateXY2RowCol(cx,cy)
  1309. Xint *cx, *cy;
  1310. X{
  1311. X
  1312. X#ifdef DEBUG
  1313. X    (void)fprintf(stderr," DEBUG :%d, %d\n", *cx, *cy);
  1314. X#endif
  1315. X
  1316. X    *cx=(*cx-framewidth)/(colgap+beadwidth);
  1317. X
  1318. X    if(*cy<midframey){
  1319. X        *cy=(*cy-framewidth)/(rowgap+beadheight);
  1320. X    }
  1321. X    else{    /* account for the middle-frame (+1 bead height (Jun 29 14:50))*/
  1322. X        *cy=(*cy-(2*framewidth-beadheight))/(rowgap+beadheight);
  1323. X    }
  1324. X
  1325. X    if(*cy==3) return(0);    /* technically, the mid-frame occupies position 3 
  1326. X                             * & click is invalid*/
  1327. X    else if(*cy>2){    /* if pos (row) is greater than 3 ...*/
  1328. X        (*cy)--;        /* ...adjust by 1 row*/
  1329. X        return(1);
  1330. X    }
  1331. X    else 
  1332. X        return(1);
  1333. X
  1334. X}/* translateXY2RowCol*/
  1335. X
  1336. X
  1337. X
  1338. Xint 
  1339. XdoDemo()
  1340. X{
  1341. XXEvent report;
  1342. Xint keyretval;
  1343. X/* when rv=doLesson return's FALSE(lesson is finished)  queryrunning=1*/
  1344. Xstatic int demorunning, queryrunning;
  1345. Xstatic int lessoncount;
  1346. X
  1347. X#ifdef DEBUG
  1348. X    (void)fprintf(stderr," DEBUG: doDemo()\n");
  1349. X#endif
  1350. X
  1351. X    do{
  1352. X        XNextEvent(display, &report);
  1353. X
  1354. X        switch  (report.type) {
  1355. X
  1356. X        case Expose:
  1357. X            /* discard unecessary  Expose events in queue*/
  1358. X            while (XCheckTypedEvent(display, Expose, &report));
  1359. X
  1360. X            drawAbacus();
  1361. X
  1362. X            if(demorunning)
  1363. X                drawDemoWindow();
  1364. X            else if(queryrunning) 
  1365. X                drawQuery();
  1366. X            else if(!demorunning) 
  1367. X                drawIntro();
  1368. X
  1369. X            break;
  1370. X
  1371. X        case ButtonPress:
  1372. X            demorunning=1;
  1373. X            queryrunning=0;
  1374. X            lessoncount=0;    /* begin demo with lesson 1 (count=0)*/
  1375. X
  1376. X            initAbacus();
  1377. X            drawAbacus();
  1378. X            startLesson(lessoncount);
  1379. X            doLesson(lessoncount);    
  1380. X            break;
  1381. X
  1382. X        case KeyPress:
  1383. X            keyretval=XLookupString(&report, keytext, KEYBUFFERSIZE, &key, 0);
  1384. X
  1385. X            if(keyretval==1){   /* user pressed a key...*/
  1386. X                if(keytext[0]=='r'){
  1387. X                    initAbacus();
  1388. X                    drawAbacus();
  1389. X                    startLesson(lessoncount);/* keep the same lesson */
  1390. X                    doLesson(lessoncount);
  1391. X                    demorunning=1;
  1392. X                    queryrunning=0;
  1393. X                }
  1394. X                else if(keytext[0]=='c'){
  1395. X                    initAbacus();
  1396. X                    drawAbacus();
  1397. X
  1398. X                    lessoncount++;    /* go on to next lesson */
  1399. X                    if(lessoncount>=MAXLESSON) 
  1400. X                        lessoncount=0;     /* wrap-around to beginning*/
  1401. X
  1402. X                    startLesson(lessoncount);    
  1403. X
  1404. X                    doLesson(lessoncount);
  1405. X                    demorunning=1;
  1406. X                    queryrunning=0;
  1407. X                }
  1408. X                else if(keytext[0]==' '){
  1409. X                    if(!demorunning) break;    /* ignore space if waiting*/
  1410. X
  1411. X                    if( !(doLesson(lessoncount)) ){
  1412. X                        queryrunning=1;    
  1413. X                        demorunning=0;    
  1414. X                    }
  1415. X                }
  1416. X                else if(keytext[0]=='q') 
  1417. X                    closeDisplay();
  1418. X            }
  1419. X
  1420. X            keyretval=0;
  1421. X            break;
  1422. X
  1423. X        default:
  1424. X            /* throw away all other events here */
  1425. X            break;
  1426. X
  1427. X        }/* switch*/
  1428. X
  1429. X    }while(1);
  1430. X}
  1431. X
  1432. XstartLesson(lc)
  1433. X{
  1434. Xstatic char fname[128];
  1435. Xint i;
  1436. X#if 0
  1437. X    if(lc>=MAXLESSON) lc=0;        /* wrap-around to beginning*/
  1438. X#endif
  1439. X
  1440. X    sprintf(fname,"%s/Lesson%d.cmd",demopath,lc+1);
  1441. X
  1442. X    if((fp=fopen(fname,"r"))==NULL){
  1443. X        (void)fprintf(stderr,
  1444. X            "%s: Error Could not open script-file:%s\n",APPNAME,fname);
  1445. X        exit(1);
  1446. X    }
  1447. X
  1448. X    (void)fscanf(fp,"%d", &lessonlen);
  1449. X
  1450. X    /*load first instance*/
  1451. X    (void)fscanf(fp,"%d %d %d\n",&demorow,&democol,&demolines);
  1452. X
  1453. X    for(i=0; i<demolines; i++){
  1454. X        fgets(displaytext[i], 64, fp);
  1455. X        displaytext[i][strlen(displaytext[i])-1]='\0';    
  1456. X    }
  1457. X
  1458. X}
  1459. X
  1460. Xint
  1461. XdoLesson(lc)
  1462. X{
  1463. Xint i;
  1464. X
  1465. X    /* A negative value in demorow signifies that only the text is to be
  1466. X     * displayed.
  1467. X     */
  1468. X    if(lessonlen && demorow>=0) 
  1469. X        animateBead((unsigned)demorow, (unsigned)democol);
  1470. X    
  1471. X    drawDemoWindow();
  1472. X
  1473. X    /*load first instance*/
  1474. X    (void)fscanf(fp,"%d %d %d\n",&demorow,&democol,&demolines);
  1475. X
  1476. X    for(i=0; i<demolines; i++){
  1477. X        (void)fgets(displaytext[i], 64, fp);
  1478. X        displaytext[i][strlen(displaytext[i])-1]='\0';    
  1479. X    }
  1480. X
  1481. X    if(--lessonlen>=0) 
  1482. X        return(1);    /* lines left*/
  1483. X    else {
  1484. X        fclose(fp);
  1485. X
  1486. X        strcpy(displaytext[0],"Here Endth The Lesson");
  1487. X        strcpy(displaytext[1]," ");
  1488. X        strcpy(displaytext[2]," "); strcpy(displaytext[3]," ");
  1489. X        XClearWindow(display,demobase);
  1490. X        drawDemoWindow();
  1491. X        sleep(1);
  1492. X        drawQuery();
  1493. X
  1494. X        return(0);    /* lesson over*/
  1495. X    }
  1496. X}
  1497. END_OF_FILE
  1498. if test 12962 -ne `wc -c <'main.c'`; then
  1499.     echo shar: \"'main.c'\" unpacked with wrong size!
  1500. fi
  1501. # end of 'main.c'
  1502. fi
  1503. if test -f 'resource.h' -a "${1}" != "-c" ; then 
  1504.   echo shar: Will not clobber existing file \"'resource.h'\"
  1505. else
  1506. echo shar: Extracting \"'resource.h'\" \(2283 characters\)
  1507. sed "s/^X//" >'resource.h' <<'END_OF_FILE'
  1508. X/* resource.h: 
  1509. X * definitions for the resource & command-line parser for xabaxus.
  1510. X * Make sure main.h is also modified to reflect changes to resources made in
  1511. X * this file.
  1512. X */
  1513. X
  1514. Xstruct _resources {
  1515. X    String display;
  1516. X    int beadwidth; 
  1517. X    int beadheight;
  1518. X    int framewidth; 
  1519. X    int ncols; 
  1520. X    String colors[4];
  1521. X    String demo;
  1522. X    String demofont;
  1523. X    Boolean script;
  1524. X} app_resources;
  1525. X
  1526. X#define offset(field)   XtOffset (struct _resources *, field)
  1527. X
  1528. Xstatic XtResource resources[] = {
  1529. X    { "display","Display", XtRString, sizeof(String),
  1530. X    offset(display), XtRString, "                 "},
  1531. X    { "beadwidth","Beadwidth",XtRInt, sizeof (int),
  1532. X    offset(beadwidth),XtRString, "30"},
  1533. X    { "beadheight","Beadheight",XtRInt, sizeof (int),
  1534. X    offset(beadheight),XtRString, "20"},
  1535. X    { "framewidth","Framewidth",XtRInt, sizeof (int),
  1536. X    offset(framewidth),XtRString, "10"},
  1537. X    { "ncols","Ncols",XtRInt, sizeof (int),
  1538. X    offset(ncols),XtRString, "13"},
  1539. X    { "framecolor","Framecolor", XtRString, sizeof(String),
  1540. X    offset(colors[0]), XtRString, "brown"},
  1541. X    { "bg","Bg", XtRString, sizeof(String),
  1542. X    offset(colors[1]), XtRString, "white"},
  1543. X    { "beadcolor","Beadcolor", XtRString, sizeof(String),
  1544. X    offset(colors[2]), XtRString, "green4"},
  1545. X    { "railcolor","Railcolor", XtRString, sizeof(String),
  1546. X    offset(colors[3]), XtRString, "black"},
  1547. X    { "demo","Demo",XtRString, sizeof(String),
  1548. X    offset(demo), XtRString, "                                  " },
  1549. X    { "demofont","Demofont",XtRString, sizeof(String),
  1550. X    offset(demofont), XtRString, "-*-times-*-r-*-*-*-180-*-*-*-*" },
  1551. X    { "script","Script",XtRBoolean, sizeof(Boolean),
  1552. X    offset(script), XtRString, "False" },
  1553. X
  1554. X};
  1555. X
  1556. Xstatic XrmOptionDescRec options[] = {
  1557. X    { "-display","display",XrmoptionSepArg,    NULL},
  1558. X    { "-beadwidth","beadwidth",XrmoptionSepArg,    NULL},
  1559. X    { "-beadheight","beadheight",XrmoptionSepArg,    NULL},
  1560. X    { "-framewidth","framewidth",XrmoptionSepArg,    NULL},
  1561. X    { "-ncols","ncols",XrmoptionSepArg,    NULL},
  1562. X    { "-framecolor","framecolor",XrmoptionSepArg,    NULL},
  1563. X    { "-bg","bg",XrmoptionSepArg,    NULL},
  1564. X    { "-beadcolor","beadcolor",XrmoptionSepArg,    NULL},
  1565. X    { "-railcolor","railcolor",XrmoptionSepArg,    NULL},
  1566. X    { "-demo","demo",XrmoptionSepArg, NULL},
  1567. X    { "-demofont","demofont", XrmoptionSepArg, NULL},
  1568. X    { "-fn","demofont", XrmoptionSepArg, NULL},
  1569. X    { "-script","script",XrmoptionNoArg, (caddr_t)"TRUE"},
  1570. X};
  1571. X
  1572. END_OF_FILE
  1573. if test 2283 -ne `wc -c <'resource.h'`; then
  1574.     echo shar: \"'resource.h'\" unpacked with wrong size!
  1575. fi
  1576. # end of 'resource.h'
  1577. fi
  1578. if test -f 'xabacus.man' -a "${1}" != "-c" ; then 
  1579.   echo shar: Will not clobber existing file \"'xabacus.man'\"
  1580. else
  1581. echo shar: Extracting \"'xabacus.man'\" \(7566 characters\)
  1582. sed "s/^X//" >'xabacus.man' <<'END_OF_FILE'
  1583. X.\" @(#)xabacus.n 1.00 91/11/13; Copyright (c) 1991 Luis Fernandes
  1584. X.TH XABACUS 1 "13 Nov 1991" "X11R4"
  1585. X.SH NAME
  1586. Xxabacus \- abacus calculator for X
  1587. X
  1588. X.SH SYNOPSIS
  1589. X.B xabacus 
  1590. X[-display \fIdisplayname\fP ] [ -demo \fIpathtoscriptfiles\fP -demofont |
  1591. X-fn \fIXfontstring\fP ] [ -script ] [ -beadwidth \fIwidth\fP -beadheight 
  1592. X\fIheight\fP -framewidth \fIwidth\fP -framecolor \fIcolorname\fP -bg 
  1593. X\fIcolorname\fP -beadcolor \fIcolorname\fP -railcolor \fIcolorname\fP ] 
  1594. X
  1595. X.SH DESCRIPTION
  1596. XThis is an implementation of the classic Chinese abacus. 
  1597. X
  1598. XThe device has two decks.
  1599. XEach deck, separated by a beam, normally has 13 rods on which are mounted beads.
  1600. XEach rod on the top deck contains 2 beads, and each rod on the bottom deck contains 5 beads.
  1601. XEach bead on the upper deck has a value of five, while each bead on the lower deck has value of one.
  1602. XBeads are considered counted, when moved \fItowards\fP the beam separating the decks.
  1603. X
  1604. XThe device has two decks ("new & improved" models have auxilliary decks stacked above the principal decks that enable multiplication, division and square-root (honest!) computations to be performed with equal ease as addition and subtraction).
  1605. X
  1606. X.SH OPTIONS
  1607. X.TP 8
  1608. X-demo \fI path to script files \fP    
  1609. XUse this option to interactively learn to use the abacus.
  1610. XLesson 1 teaches counting, lesson 2 teachs addition & lesson 3 teachs subtraction.
  1611. XThe application will ignore command-line options regarding size (beadwidth, beadheight, framewidth); all other options are acknowledged.
  1612. X
  1613. XThe script for lesson-1 is called Lesson1.cmd, lesson-2 is contained in
  1614. XLesson2.cmd and so on.
  1615. X
  1616. XThe script-files should be installed in /usr/lib/X11/xabacus.
  1617. X
  1618. XFor example:
  1619. X.nf
  1620. X    \fIxabacus -demo ./\fP
  1621. X.fi
  1622. Xwill instruct \fIxabacus\fP to look for the script-files in the current directory.
  1623. X
  1624. XSimilarily, the \fIXAbacus.demo\fP resource may also be used to specify the demo-path:
  1625. X.nf
  1626. X    \fIXAbacus.demo: ./\fP
  1627. X.fi
  1628. X
  1629. XUsing this method, the \fI-demo\fP option need not be specified on the command-line.
  1630. X
  1631. XIf the script-files have been installed, then run the demo as:
  1632. X.nf
  1633. X    \fIxabacus -demo /usr/lib/X11/xabacus\fP
  1634. X.fi
  1635. X
  1636. X
  1637. XRefer to the section titled: OPERATION, for details about the demo-mode.
  1638. X
  1639. X.TP 8
  1640. X-demofont | -fn \fIXfontstring\fP
  1641. XSpecify an alternate font for the explanatory text that appears in the
  1642. Xsecondary window, during the demo. The default font is 18 point Times-Roman (-*-times-*-r-*-*-*-180-*). The alternate font is 8x13. 
  1643. X
  1644. X.TP 8
  1645. X-script
  1646. X
  1647. XUsing this option, the application will log (to \fIstdout\fP ) a set of row/column coordinates according to the beads the user clicks. 
  1648. X
  1649. XThis data may be logged to a file as follows:
  1650. X.nf
  1651. X    \fIxabacus -script >script.log\fP
  1652. X.fi
  1653. X
  1654. XThe script may then be edited and then used to generate new demos.
  1655. X
  1656. X.TP 8
  1657. X-beadwidth \fI width \fP
  1658. XThe width of a bead, in pixels. The default is 30.
  1659. XFor the sake of authenticity, the bead-width should be about 2/3 greater than the bead-height. If the bead-width is equal to the bead-height then the beads will (vaguely, even then, one has to squint) resemble circles (the screen's aspect ratio is not accounted for).
  1660. X
  1661. X.TP 8
  1662. X-beadheight \fI height \fP
  1663. XThe height of a bead, in pixels. The default is 20.
  1664. X
  1665. X.TP 8
  1666. X-framewidth \fI width \fP
  1667. XIn pixels, the width of the frame around, and separating the two decks. 
  1668. XThe default is 10.
  1669. X
  1670. X.TP 8
  1671. X-ncols \fI columns \fP
  1672. XAn integer representing the number of columns the abacus is to have, up to
  1673. Xa maximum of 100. The default is 13.
  1674. X
  1675. X.TP 8
  1676. X-framecolor \fI colorname \fP
  1677. XA valid color-name for the frame of the abacus. Default is "brown".
  1678. X
  1679. X.TP 8
  1680. X-bg \fI colorname \fP
  1681. XA valid color-name for the background. Default is "white".
  1682. XSpecifying a color other than the default will result in the beads having an unpredictable color. 
  1683. X(This happens because the bead-image is XOR'd with the background when animating it.)
  1684. X
  1685. X.TP 8
  1686. X-bead-color \fI colorname \fP
  1687. XA valid color-name for the color of the beads. Default is "green4".
  1688. X
  1689. X.TP 8
  1690. X-railcolor \fI colorname \fP
  1691. XA valid color-name for the color of the rails. Default is "green4".
  1692. X
  1693. X.TP 8
  1694. X-help
  1695. XPrints a summary of the command-line options.
  1696. X
  1697. X.SH OPERATION
  1698. X\fINormal Operation:\fP
  1699. XThe beads may be moved by clicking on them with the mouse-pointer; the beads will shift themselves to vacate the row and column that was clicked.
  1700. XThe abacus will beep when the mouse is clicked on an invalid location (like the middle-frame).
  1701. X
  1702. XThe abacus may be resized to accomodate more (or less, but no less than the
  1703. Xminimum as specified with \fI-ncols\fP) columns; it resizes in width only.
  1704. XColumns are added only if the amount resized can accomodate a complete column. 
  1705. XA maximum of 100 columns is possible, i.e. operations with numbers with up to
  1706. X100 digits is possible.
  1707. X
  1708. XPressing 'q', 'Q' or '^C' will quit.
  1709. X
  1710. X\fIDemo Mode:\fP
  1711. XIn this mode, the abacus is controlled by the program.
  1712. XWhen started with the demo option, a second window is presented that should be placed directly below the abacus-window. Descriptive text, and user prompts are displayed in this window.
  1713. X
  1714. XPressing 'q' during the demo will quit it. Clicking the left mouse-button with
  1715. Xthe pointer in the window will restart the demo (beginning with lesson-1).
  1716. X
  1717. X.SH RESOURCES
  1718. X.nf
  1719. XThe application class name is XAbacus.
  1720. XEvery command-line option has its equivalent X-resource as follows:
  1721. X
  1722. XXAbacus
  1723. X    .beadwidth
  1724. X    .beadheight
  1725. X    .framewidth
  1726. X    .ncols
  1727. X    .framecolor
  1728. X    .bg
  1729. X    .beadcolor
  1730. X    .railcolor
  1731. X    .demo
  1732. X    .demofont
  1733. X.if
  1734. X
  1735. X.SH SEE ALSO
  1736. X\fIThe Abacus: The Art of Calculation Using Beads\fP, details all the known techniques for performing additions & subtractions.
  1737. X
  1738. Xxcalc(1), xfontsel(1), xrdb(1), X(1)
  1739. X
  1740. X.SH SCRIPT-FILE FORMAT
  1741. X.nf
  1742. XThe format of the lesson script-file (Lesson\fIn\fP.cmd) is as follows:
  1743. X<number of moves in the script>
  1744. X<row> <col> <number-of-text-lines-that-follow>
  1745. Xtext-line1
  1746. X    :
  1747. X    :
  1748. Xtext-line4
  1749. X<row> <col> <number-of-text-lines>
  1750. Xtext-line1
  1751. X    :
  1752. X    :
  1753. Xtext-line4
  1754. X    :
  1755. X    :
  1756. X.fi
  1757. X
  1758. XThe text is displayed in the secondary window that appears during the demo.
  1759. X\fI<number-of-text-lines-that-follow>\fP cannot exceed 4 text-lines.
  1760. XEach row/col/text batch represents 1 "move".
  1761. XA row beginning with a negative number signifies that the move be ignored &
  1762. Xthat just the descriptove text be displayed. This is useful for explanatory
  1763. Xpauses in the lesson.
  1764. XRefer to any of Lesson1.cmd, Lesson2.cmd or Lesson3.cmd.
  1765. X
  1766. X.SH FEATURES
  1767. XA cosmetic bug occurs, when certain user-defined frame-widths are specified and a top-deck bead is moved down.
  1768. X
  1769. XColumns are added only if the amount resized can accomodate a complete column.
  1770. X
  1771. XWhen the application is resized, an incremental amount that does not accomodate a full column, it loses track of the correct number of columns. 
  1772. X
  1773. X.SH ACKNOWLEDGEMENTS
  1774. XAgustine Lee, instructor at the Ryerson Electrical Engineering  Department provided a real, live abacus in addition to invaluable documentation on its use and
  1775. Xcomments on improving it.
  1776. X
  1777. XNick Colonello, for alpha-testing the application and providing constructive 
  1778. Xcriticism.
  1779. X
  1780. XEva Dudova, for beta-testing the application.
  1781. X
  1782. XAnd to those, before me, who have written X-applications, from whose code I have learned the art of X.
  1783. X
  1784. X.SH COPYRIGHT
  1785. XCopyright 1991, Luis Fernandes.
  1786. X
  1787. XPermission to use, copy, hack, and distribute this software and its
  1788. Xdocumentation for any purpose and without fee is hereby granted,
  1789. Xprovided that the above copyright notice appear in all copies and that
  1790. Xboth that copyright notice and this permission notice appear in
  1791. Xsupporting documentation. 
  1792. X
  1793. XThis software is presented as is without any implied or written warranty.
  1794. X
  1795. X.SH AUTHOR
  1796. XLuis Fernandes    (lfernand@ryelect.uucp) 
  1797. END_OF_FILE
  1798. if test 7566 -ne `wc -c <'xabacus.man'`; then
  1799.     echo shar: \"'xabacus.man'\" unpacked with wrong size!
  1800. fi
  1801. # end of 'xabacus.man'
  1802. fi
  1803. echo shar: End of archive 3 \(of 4\).
  1804. cp /dev/null ark3isdone
  1805. MISSING=""
  1806. for I in 1 2 3 4 ; do
  1807.     if test ! -f ark${I}isdone ; then
  1808.     MISSING="${MISSING} ${I}"
  1809.     fi
  1810. done
  1811. if test "${MISSING}" = "" ; then
  1812.     echo You have unpacked all 4 archives.
  1813.     rm -f ark[1-9]isdone
  1814. else
  1815.     echo You still need to unpack the following archives:
  1816.     echo "        " ${MISSING}
  1817. fi
  1818. ##  End of shell archive.
  1819. exit 0
  1820. -- 
  1821. Molecular Simulations, Inc.             mail: dcmartin@msi.com
  1822. 796 N. Pastoria Avenue                  uucp: uunet!dcmartin
  1823. Sunnyvale, California 94086             at&t: 408/522-9236
  1824.