Compare commits
363 Commits
levee-edit
...
clang
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba2871aa34 | ||
|
|
edde805980 | ||
|
|
db74d0da32 | ||
|
|
1253330adc | ||
|
|
26e2d7dd5e | ||
|
|
9c3b2e0d9a | ||
|
|
51da6c0e6e | ||
|
|
dbe1779a29 | ||
|
|
c6f46414ed | ||
|
|
552f5ed4c2 | ||
|
|
2d61fa76c3 | ||
|
|
72d7321b45 | ||
|
|
82817c9308 | ||
|
|
c849b8f1f8 | ||
|
|
1febcc5f9f | ||
|
|
7b1d52abff | ||
|
|
2f2d84e6a0 | ||
|
|
6794c38ff4 | ||
|
|
840cd1db8b | ||
|
|
f6602a8a6d | ||
|
|
97dfd3ae89 | ||
|
|
e728e7f25d | ||
|
|
146bae8a98 | ||
|
|
724973121b | ||
|
|
cc59786ed6 | ||
|
|
4c51256273 | ||
|
|
27ddb2eef0 | ||
|
|
c213981071 | ||
|
|
75302a4eec | ||
|
|
2252835438 | ||
|
|
9e2d5993f6 | ||
|
|
a47779d9d6 | ||
|
|
bd9f0208d2 | ||
|
|
4fdec2101b | ||
|
|
9c50b5a97d | ||
|
|
37d1b00b7c | ||
|
|
716151b46f | ||
|
|
8458c9e3c4 | ||
|
|
4e2c809150 | ||
|
|
ef83392732 | ||
|
|
9d5c61e023 | ||
|
|
d5002ad0ac | ||
|
|
00c4bf1ea1 | ||
|
|
9f617eb6fe | ||
|
|
71faeb6c76 | ||
|
|
a0c256c1f0 | ||
|
|
9d8ad7ccf5 | ||
|
|
a5d7f4ea99 | ||
|
|
435d3c34cf | ||
|
|
0e39621fea | ||
|
|
7477abe7f3 | ||
|
|
7075769d7c | ||
|
|
f5452b74de | ||
|
|
f3dbdc7615 | ||
|
|
66e5cd88c0 | ||
|
|
0583055d00 | ||
|
|
aea2050c49 | ||
|
|
5fde14ecea | ||
|
|
ca67f33a30 | ||
|
|
20238b7208 | ||
|
|
1a7125b892 | ||
|
|
d048ee200e | ||
|
|
6ddcb56e2a | ||
|
|
148bb1cac6 | ||
|
|
b2bde490b4 | ||
|
|
e1d3583dcd | ||
|
|
21f8d60095 | ||
|
|
6457d878c0 | ||
|
|
e5c844eff2 | ||
|
|
4e90456341 | ||
|
|
bfc3125556 | ||
|
|
fa094d1744 | ||
|
|
b7a3d6f665 | ||
|
|
fb05f20fbe | ||
|
|
e050ac6ee6 | ||
|
|
8dd0fb4860 | ||
|
|
6028db705a | ||
|
|
6d501bfc7c | ||
|
|
09205046a4 | ||
|
|
ac9ef0eee9 | ||
|
|
e073fcbd64 | ||
|
|
0507073b60 | ||
|
|
76cb491c09 | ||
|
|
f3f28ceca5 | ||
|
|
e3c86f0ffa | ||
|
|
7503ce7856 | ||
|
|
1a1daf15a3 | ||
|
|
a40bcee878 | ||
|
|
e67e939fb9 | ||
|
|
9027547fa6 | ||
|
|
7c2aa43862 | ||
|
|
8988b8b013 | ||
|
|
d2940a8719 | ||
|
|
be1726a662 | ||
|
|
2fd36d9175 | ||
|
|
6f0a48330c | ||
|
|
4dd9308e25 | ||
|
|
98f3efcb70 | ||
|
|
2e716e099c | ||
|
|
03ed62db5d | ||
|
|
c46bd3c1e9 | ||
|
|
a673c028f8 | ||
|
|
7ddf7686a3 | ||
|
|
abcfb06b0b | ||
|
|
e00196ee21 | ||
|
|
5b04c6b168 | ||
|
|
7f69510488 | ||
|
|
058b6c4de0 | ||
|
|
1e4005cc4b | ||
|
|
66a7727085 | ||
|
|
2bfd3df2a6 | ||
|
|
162f0d34b5 | ||
|
|
3ee11917bb | ||
|
|
b259f58533 | ||
|
|
42fd2f99bd | ||
|
|
ff8e4c81d0 | ||
|
|
691fdfaa2f | ||
|
|
d8708af48a | ||
|
|
7d3e799c82 | ||
|
|
91cbbfbad0 | ||
|
|
f87ab8d4c4 | ||
|
|
37646559fd | ||
|
|
1a5f550fe1 | ||
|
|
666f22786f | ||
|
|
8d15906495 | ||
|
|
5bff2b428c | ||
|
|
94d38c939f | ||
|
|
f2c4d11b74 | ||
|
|
ce4fbe98b7 | ||
|
|
ec2a748448 | ||
|
|
ade0fff092 | ||
|
|
d4dbb43d44 | ||
|
|
f8bde663cf | ||
|
|
c08045dafe | ||
|
|
c1ff69edd2 | ||
|
|
7562e8e410 | ||
|
|
b134c1f84c | ||
|
|
0f920ee55a | ||
|
|
401d36eee7 | ||
|
|
8d820f763f | ||
|
|
2bb8bfabb3 | ||
|
|
e82e5f2ce1 | ||
|
|
e8572fdfd7 | ||
|
|
789505045c | ||
|
|
a78f66c220 | ||
|
|
8b5e30f416 | ||
|
|
1d32cd012a | ||
|
|
d2fb9b98a6 | ||
|
|
08edaaba8c | ||
|
|
b99fcc6c8c | ||
|
|
f7d93551cb | ||
|
|
793e6052bd | ||
|
|
61cc452f1b | ||
|
|
21c5beb7a6 | ||
|
|
20e1ad2cb2 | ||
|
|
9831ddd3a8 | ||
|
|
8f220cdf97 | ||
|
|
776dee30ea | ||
|
|
023f848428 | ||
|
|
0f7e688c2e | ||
|
|
3e439df5a2 | ||
|
|
e8e186905a | ||
|
|
d68b2f2dc1 | ||
|
|
644b6c2112 | ||
|
|
09112b6b7a | ||
|
|
84a38361a5 | ||
|
|
c4cc4bc397 | ||
|
|
4f7baefbf0 | ||
|
|
dc75784799 | ||
|
|
5cb608d7e1 | ||
|
|
fdb295ec25 | ||
|
|
3073e9af87 | ||
|
|
1d0b58ab60 | ||
|
|
5041402681 | ||
|
|
1faf08d3ab | ||
|
|
661929317c | ||
|
|
3a4cc2d440 | ||
|
|
80ab2d4721 | ||
|
|
a36504720c | ||
|
|
4ca4a58468 | ||
|
|
9c749994c1 | ||
|
|
976bf303cc | ||
|
|
bf92da35b8 | ||
|
|
f53ab56d1a | ||
|
|
51e09b4885 | ||
|
|
dbd2d74487 | ||
|
|
3db23e5d6a | ||
|
|
c6360fb676 | ||
|
|
51e46b333b | ||
|
|
3dda877dfb | ||
|
|
c9ed14824b | ||
|
|
218466583d | ||
|
|
7a8eff3fa3 | ||
|
|
261f70aef6 | ||
|
|
2b09c13056 | ||
|
|
3b1e8d40d7 | ||
|
|
0087168ba6 | ||
|
|
967ec35fd2 | ||
|
|
b906f7c2c5 | ||
|
|
0194d839ef | ||
|
|
b2806f3ad2 | ||
|
|
355ad339ef | ||
|
|
c631ae5d43 | ||
|
|
717ab59efd | ||
|
|
9c8ee0a1a4 | ||
|
|
2c41b4d9e1 | ||
|
|
3678ba6aee | ||
|
|
85300993b9 | ||
|
|
137963240e | ||
|
|
6facb3f56d | ||
|
|
bbaa00df52 | ||
|
|
f17fa5a116 | ||
|
|
ac83afdde8 | ||
|
|
496e7ac168 | ||
|
|
d7e7ae368d | ||
|
|
58359c0ff4 | ||
|
|
a73bd691b3 | ||
|
|
f055b45453 | ||
|
|
9f05f511a6 | ||
|
|
8ba13c2f71 | ||
|
|
fcad15f7e6 | ||
|
|
5de76c3cf1 | ||
|
|
a6396122f6 | ||
|
|
d1eb7c79c2 | ||
|
|
095e957995 | ||
|
|
8546991046 | ||
|
|
328bdf4bbf | ||
|
|
a302352054 | ||
|
|
94c02410e4 | ||
|
|
fc9d89eff2 | ||
|
|
23cafa1006 | ||
|
|
9f6a53122a | ||
|
|
a8c229ed36 | ||
|
|
592e2014fb | ||
|
|
635d8ff2f7 | ||
|
|
49de16b343 | ||
|
|
c19654daa9 | ||
|
|
585773955b | ||
|
|
5f2b01ddda | ||
|
|
d80a636a62 | ||
|
|
0aaf6c25f6 | ||
|
|
ae75f1cecc | ||
|
|
c44239cb64 | ||
|
|
4634b23849 | ||
|
|
2401afee53 | ||
|
|
09f3488389 | ||
|
|
b73411b3bd | ||
|
|
4bf3ca1292 | ||
|
|
6419a655f4 | ||
|
|
531a56ed51 | ||
|
|
aaaa3fd193 | ||
|
|
d6164dd82b | ||
|
|
00279386d7 | ||
|
|
b331d3e0aa | ||
|
|
c8939dc646 | ||
|
|
c2a86d50bb | ||
|
|
d29b887f18 | ||
|
|
f71ce9fc62 | ||
|
|
0a1960c864 | ||
|
|
e8cb02f3f7 | ||
|
|
0b8e8bd520 | ||
|
|
84247c1ba5 | ||
|
|
0c3fffb6f6 | ||
|
|
66cadb02a1 | ||
|
|
be7c8f804e | ||
|
|
af1147432a | ||
|
|
a9b2a816ba | ||
|
|
0329394f94 | ||
|
|
1bf595e11a | ||
|
|
455d7aeffe | ||
|
|
694c364cb4 | ||
|
|
75470f1ac5 | ||
|
|
804d646577 | ||
|
|
9623203f20 | ||
|
|
8d061f04e3 | ||
|
|
49550e87d8 | ||
|
|
6504a97fd1 | ||
|
|
b81bb822f3 | ||
|
|
236fc62bb3 | ||
|
|
3890f0a6aa | ||
|
|
24e057667e | ||
|
|
0cf79d71cf | ||
|
|
229b664f35 | ||
|
|
4c343f1525 | ||
|
|
219e2c3071 | ||
|
|
9d39282ae9 | ||
|
|
81a8a8379d | ||
|
|
ea7c1415d7 | ||
|
|
d1f1e614f0 | ||
|
|
d9b3b93176 | ||
|
|
880e6639ac | ||
|
|
f462811ae9 | ||
|
|
664cc16008 | ||
|
|
84445ee1f7 | ||
|
|
bca590d42b | ||
|
|
aedd0138b3 | ||
|
|
b028c7bb4b | ||
|
|
57b3ba3506 | ||
|
|
75778ddd4b | ||
|
|
76832ba217 | ||
|
|
48de8a19bb | ||
|
|
21ddf7fa5a | ||
|
|
1a5e0e40d9 | ||
|
|
428764c187 | ||
|
|
ce8371152f | ||
|
|
47988903ae | ||
|
|
31caa114fe | ||
|
|
ff81751188 | ||
|
|
b72cfc52f9 | ||
|
|
c4e86a1a12 | ||
|
|
5f4ecde705 | ||
|
|
f3ee6644b2 | ||
|
|
6b3455956a | ||
|
|
e08e51f1b9 | ||
|
|
a234dfc7dc | ||
|
|
f08aabff03 | ||
|
|
ea88242733 | ||
|
|
4e8398cbc9 | ||
|
|
33fbb51528 | ||
|
|
76df048700 | ||
|
|
d10b71a307 | ||
|
|
51f41b2cca | ||
|
|
fcf0f3dad2 | ||
|
|
e949850567 | ||
|
|
3afa8e5979 | ||
|
|
976d84d56d | ||
|
|
d5599ae63a | ||
|
|
0c22adf6bf | ||
|
|
7590783d92 | ||
|
|
6144631bc5 | ||
|
|
4ea521eabf | ||
|
|
352d23a073 | ||
|
|
c054a40805 | ||
|
|
23f426ded5 | ||
|
|
bf27d6d5c3 | ||
|
|
c40136c25d | ||
|
|
ea03a4bc98 | ||
|
|
581ab61262 | ||
|
|
f2fe94f32d | ||
|
|
ff4a186025 | ||
|
|
d95f161319 | ||
|
|
a20c02c11f | ||
|
|
e5e44bfb94 | ||
|
|
acd1b5da26 | ||
|
|
a4bdbd4662 | ||
|
|
301d069a1a | ||
|
|
9bbe938e48 | ||
|
|
d5c97a9b19 | ||
|
|
0005e7d7bf | ||
|
|
42665ba3b3 | ||
|
|
942bdda5ed | ||
|
|
5ce8a8cd33 | ||
|
|
b3442f28f3 | ||
|
|
29c75b3f71 | ||
|
|
9b9f6392dc | ||
|
|
f5bbefc222 | ||
|
|
7f5ad5d3f8 | ||
|
|
df8f8eaf71 | ||
|
|
f62f70c718 | ||
|
|
1916f8c9da | ||
|
|
d8269d1996 | ||
|
|
8e228dde62 | ||
|
|
bae12383a0 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -24,7 +24,6 @@
|
||||
*.dis
|
||||
*.0
|
||||
*.img
|
||||
sdcard.rd
|
||||
.profile
|
||||
|
||||
Makefile.user
|
||||
TODO
|
||||
|
||||
49
Makefile
49
Makefile
@@ -8,32 +8,6 @@
|
||||
# The `make' will compile everything, including a kernel, utilities
|
||||
# and a root filesystem image.
|
||||
|
||||
#
|
||||
# Supported boards
|
||||
#
|
||||
MAX32 = sys/pic32/max32/MAX32
|
||||
MAX32-ETH = sys/pic32/max32-eth/MAX32-ETH
|
||||
UBW32 = sys/pic32/ubw32/UBW32
|
||||
UBW32UART = sys/pic32/ubw32-uart/UBW32-UART
|
||||
UBW32UARTSDRAM = sys/pic32/ubw32-uart-sdram/UBW32-UART-SDRAM
|
||||
MAXIMITE = sys/pic32/maximite/MAXIMITE
|
||||
MAXCOLOR = sys/pic32/maximite-color/MAXCOLOR
|
||||
EXPLORER16 = sys/pic32/explorer16/EXPLORER16
|
||||
STARTERKIT = sys/pic32/starter-kit/STARTER-KIT
|
||||
DUINOMITE = sys/pic32/duinomite/DUINOMITE
|
||||
DUINOMITEUART = sys/pic32/duinomite-uart/DUINOMITE-UART
|
||||
DUINOMITEE = sys/pic32/duinomite-e/DUINOMITE-E
|
||||
DUINOMITEEUART = sys/pic32/duinomite-e-uart/DUINOMITE-E-UART
|
||||
BAREMETAL = sys/pic32/baremetal/BAREMETAL
|
||||
RETROONE = sys/pic32/retroone/RETROONE
|
||||
FUBARINO = sys/pic32/fubarino/FUBARINO
|
||||
FUBARINOBIG = sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC
|
||||
SDXL = sys/pic32/sdxl/SDXL
|
||||
MMBMX7 = sys/pic32/mmb-mx7/MMB-MX7
|
||||
|
||||
# Select target board
|
||||
TARGET ?= $(MAX32)
|
||||
|
||||
# Filesystem and swap sizes.
|
||||
FS_MBYTES = 100
|
||||
U_MBYTES = 100
|
||||
@@ -55,23 +29,19 @@ FSUTIL = tools/fsutil/fsutil
|
||||
|
||||
-include Makefile.user
|
||||
|
||||
TARGETDIR = $(shell dirname $(TARGET))
|
||||
TARGETNAME = $(shell basename $(TARGET))
|
||||
TOPSRC = $(shell pwd)
|
||||
CONFIG = $(TOPSRC)/tools/configsys/config
|
||||
|
||||
all: .profile
|
||||
all:
|
||||
$(MAKE) -C tools
|
||||
$(MAKE) -C src
|
||||
$(MAKE) -C lib
|
||||
$(MAKE) -C src install
|
||||
$(MAKE) -C install
|
||||
$(MAKE) kernel
|
||||
$(MAKE) fs
|
||||
|
||||
kernel: $(TARGETDIR)/Makefile
|
||||
$(MAKE) -C $(TARGETDIR)
|
||||
|
||||
$(TARGETDIR)/Makefile: $(CONFIG) $(TARGETDIR)/$(TARGETNAME)
|
||||
cd $(TARGETDIR) && ../../../tools/configsys/config $(TARGETNAME)
|
||||
kernel: $(CONFIG)
|
||||
$(MAKE) -C sys/pic32 all
|
||||
|
||||
fs: sdcard.img
|
||||
|
||||
@@ -80,7 +50,9 @@ sdcard.img: $(FSUTIL) rootfs.manifest userfs.manifest
|
||||
rm -f $@
|
||||
$(FSUTIL) --repartition=fs=$(FS_MBYTES)M:swap=$(SWAP_MBYTES)M:fs=$(U_MBYTES)M $@
|
||||
$(FSUTIL) --new --partition=1 --manifest=rootfs.manifest $@ .
|
||||
$(FSUTIL) --new --partition=3 --manifest=userfs.manifest $@ u
|
||||
# In case you need a separate /u partition,
|
||||
# uncomment the following line.
|
||||
# $(FSUTIL) --new --partition=3 --manifest=userfs.manifest $@ u
|
||||
|
||||
$(FSUTIL):
|
||||
cd tools/fsutil; $(MAKE)
|
||||
@@ -100,7 +72,7 @@ cleanall: clean
|
||||
rm -f share/re.help share/emg.keys share/misc/more.help
|
||||
rm -f etc/termcap etc/remote etc/phones
|
||||
rm -f tools/configsys/.depend
|
||||
rm -f var/log/aculog
|
||||
rm -f var/log/aculog sdcard.img
|
||||
rm -rf var/lock share/unixbench
|
||||
|
||||
installfs:
|
||||
@@ -118,6 +90,3 @@ installflash:
|
||||
# TODO: make it relative to Target
|
||||
installboot:
|
||||
sudo pic32prog sys/pic32/fubarino/bootloader.hex
|
||||
|
||||
.profile: etc/root/dot.profile
|
||||
cp etc/root/dot.profile .profile
|
||||
|
||||
58
README.md
58
README.md
@@ -15,55 +15,35 @@
|
||||
|
||||
## Supported hardware
|
||||
|
||||
* chipKIT Max32 board.
|
||||
* Sparkfun UBW32 board.
|
||||
* Fubarino SD board.
|
||||
* Olimex Duinomite, Duinomite-Mini, Duinomite-Mega and Duinomite-eMega boards.
|
||||
* Olimex Pinguino-Micro board with PIC32MX795F512H microcontroller.
|
||||
* Maximite and Colour Maximite computers.
|
||||
* Majenko SDXL board.
|
||||
* 4D Systems Picadillo-35T board.
|
||||
* MikroElektronika MultiMedia Board for PIC32MX7.
|
||||
* chipKIT Max32 board with SD card shield.
|
||||
* chipKIT WF32 board with 2.4" LCD TFT display shield.
|
||||
* Sparkfun UBW32 board with SD card slot.
|
||||
* Microchip Explorer 16 board, with PIC32 CAN-USB plug-in module and SD & MMC pictail.
|
||||
* Microchip PIC32 USB or Ethernet Starter Kit, with I/O Expansion board and SD & MMC pictail.
|
||||
* Olimex Duinomite, Duinomite-Mini and Duinomite-Mega boards.
|
||||
* Olimex Pinguino-Micro board with PIC32MX795F512H microcontroller.
|
||||
* eflightworks DIP board.
|
||||
|
||||
|
||||
## Build
|
||||
|
||||
To compile everything from sources, you'll need some packages installed, namely:
|
||||
Berkeley YACC, GNU bison and flex, ELF library and FUSE library.
|
||||
Berkeley YACC, GNU bison, flex, groff, ELF library and FUSE library.
|
||||
Under Ubuntu, for example, you can do it by command:
|
||||
|
||||
```shell
|
||||
$ sudo apt-get install bison byacc flex libelf-dev libfuse-dev
|
||||
$ sudo apt-get install bison byacc flex groff-base libelf-dev
|
||||
```
|
||||
|
||||
By default, the system is configured for the Max32 board.
|
||||
To select another target board, edit a top-level user-specific Makefile called "Makefile.user"
|
||||
and set a TARGET value:
|
||||
|
||||
You can change a desired filesystem size and swap area size, as required.
|
||||
Default is:
|
||||
```Makefile
|
||||
TARGET = $(UBW32) # for the UBW32 board with USB console
|
||||
TARGET = $(UBW32UART) # for the UBW32 board with UART console
|
||||
TARGET = $(UBW32UARTSDRAM) # for the UBW32 boars with UART console and 8MB SRAM ramdisk
|
||||
TARGET = $(MAXIMITE) # for the Maximite board
|
||||
TARGET = $(MAXCOLOR) # for the Colour Maximite board
|
||||
TARGET = $(EXPLORER16) # for the Explorer 16 board
|
||||
TARGET = $(STARTERKIT) # for the PIC32 USB or Ethernet Starter Kit
|
||||
TARGET = $(MAX32) # default
|
||||
TARGET = $(MAX32-ETH) # for the chipKIT MAX32 board with Arduino Ethernet shield
|
||||
TARGET = $(DUINOMITE) # for the Duinomite board with USB console
|
||||
TARGET = $(DUINOMITEUART) # for the Duinomite board with UART console
|
||||
TARGET = $(DUINOMITEE) # for the Duinomite E board with USB console
|
||||
TARGET = $(DUINOMITEEUART) # for the Duinomite E board with UART console
|
||||
TARGET = $(BAREMETAL) # Bare PIC32 chip on a breakout board
|
||||
TARGET = $(FUBARINO) # Fubarino SD board
|
||||
TARGET = $(FUBARINOBIG) # Fubarino SD board with 8MB SRAM RAMDISK
|
||||
TARGET = $(MMBMX7) # MMB MX7 board
|
||||
```
|
||||
|
||||
You can also change a desired filesystem size and swap area size,
|
||||
as required. Default is:
|
||||
```Makefile
|
||||
FS_KBYTES = 16384
|
||||
SWAP_KBYTES = 2048
|
||||
FS_MBYTES = 100
|
||||
SWAP_MBYTES = 2
|
||||
```
|
||||
To compile the kernel and build a filesystem image, run:
|
||||
|
||||
@@ -94,11 +74,11 @@ Kernel image should be written to PIC32 flash memory. The procedure depends
|
||||
on a board used.
|
||||
|
||||
#### Max32 board:
|
||||
Use a pic32prog utility (http://code.google.com/p/pic32prog/)
|
||||
and a USB cable to install a kernel:
|
||||
|
||||
```shell
|
||||
$ cd sys/pic32/ubw32
|
||||
$ AVRTOOLS=/Applications/Mpide.app/Contents/Resources/Java/hardware/tools/avr
|
||||
$AVRTOOLS/bin/avrdude -C$AVRTOOLS/etc/avrdude.conf -c stk500v2 -p pic32 \
|
||||
-P /dev/tty.usbserial-* -b 115200 -v -U flash:w:unix.hex:i
|
||||
$ pic32prog -d /dev/ttyUSB0 sys/pic32/max32/unix.hex
|
||||
```
|
||||
|
||||
Here you need to change AVRTOOLS path and tty name according to your system.
|
||||
|
||||
8
cross.mk
8
cross.mk
@@ -23,9 +23,13 @@ LDFLAGS =
|
||||
LIBS =
|
||||
|
||||
# Add system include path
|
||||
ifeq (,$(wildcard /usr/include/i386-linux-gnu))
|
||||
CFLAGS += -I/usr/include
|
||||
ifeq (/usr/include/x86_64-linux-gnu,$(wildcard /usr/include/x86_64-linux-gnu))
|
||||
CFLAGS += -I/usr/include/x86_64-linux-gnu
|
||||
else
|
||||
ifeq (/usr/include/i386-linux-gnu,$(wildcard /usr/include/i386-linux-gnu))
|
||||
CFLAGS += -I/usr/include/i386-linux-gnu
|
||||
else
|
||||
CFLAGS += -I/usr/include
|
||||
endif
|
||||
endif
|
||||
CFLAGS += -I$(TOPSRC)/include
|
||||
|
||||
1
etc/.gitignore
vendored
1
etc/.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
localtime
|
||||
phones
|
||||
remote
|
||||
termcap
|
||||
|
||||
34
etc/MAKEDEV
34
etc/MAKEDEV
@@ -4,46 +4,14 @@
|
||||
# All rights reserved. The Berkeley software License Agreement
|
||||
# specifies the terms and conditions for redistribution.
|
||||
#
|
||||
# @(#)MAKEDEV 4.27.6 (2.11BSD) 1999/2/19
|
||||
#
|
||||
# Device "make" file. Valid arguments:
|
||||
# std standard devices
|
||||
# local configuration specific devices
|
||||
# fd file descriptor driver
|
||||
# Tapes:
|
||||
# ht* unibus tu77 & te16
|
||||
# tm* unibus tm11 & te10 emulations (e.g. Emulex tc-11)
|
||||
# ts* unibus ts11
|
||||
# tu* tmscp (tk50/tu81)
|
||||
# Disks:
|
||||
# br* unibus Eaton br1538 or br1711
|
||||
# hk* unibus rk06 and rk07
|
||||
# ra* unibus uda50 w/ ra??
|
||||
# rk* unibus rk05
|
||||
# rl* unibus rl01/rl02
|
||||
# rx* unibus rx02
|
||||
# si* unibus cdc 9766 w/ si 9500
|
||||
# xp* unibus rm02/03/05, rp04/05/06, diva, eagle, cdc9766, fuji 160.
|
||||
# Terminal multiplexors:
|
||||
# dl* dl-11 units other than the console
|
||||
# dz* unibus dz11 and dz32
|
||||
# dh* unibus dh11 and emulations (e.g. Able dmax, Emulex cs-11)
|
||||
# dmf* unibus dmf32
|
||||
# dhu* unibus dhu11
|
||||
# dmz* unibus dmz32
|
||||
# dhv* qbus dhv11
|
||||
# sd* flash cards SecureDigital
|
||||
# Pseudo terminals:
|
||||
# pty* set of 16 master and slave pseudo terminals
|
||||
# Printers:
|
||||
# lp* unibus lp11 parallel interface
|
||||
# va* unibus varian parallel interface
|
||||
# vp* unibus versatec parallel interface
|
||||
# Call units:
|
||||
# Special purpose devices:
|
||||
# dr* unibus dr11
|
||||
# ram* memory disk
|
||||
# dn* dn11 dialer
|
||||
# ingreslock Ingres lock driver.
|
||||
|
||||
PATH=/etc:/sbin:/usr/sbin:/bin:/usr/bin
|
||||
umask 77
|
||||
|
||||
@@ -11,7 +11,6 @@ DESTDIR = /foobar
|
||||
OWN = root
|
||||
GRP = wheel
|
||||
|
||||
SUBDIR = root
|
||||
FILES = crontab fstab gettytab group motd passwd \
|
||||
rc rc.local shells syslog.conf ttys
|
||||
|
||||
@@ -19,8 +18,6 @@ all install depend lint tags:
|
||||
|
||||
clean:
|
||||
rm -f *~
|
||||
-for i in ${SUBDIR}; do \
|
||||
(cd $$i; make DESTDIR=${DESTDIR} $@); done
|
||||
|
||||
distribution:
|
||||
-@mkdir -p ${DESTDIR}/dev
|
||||
@@ -75,5 +72,3 @@ distribution:
|
||||
${DESTDIR}/usr/adm/savacct
|
||||
install -c -o uucp -g daemon -m 600 /dev/null \
|
||||
${DESTDIR}/usr/adm/aculog
|
||||
-for i in ${SUBDIR}; do \
|
||||
(cd $$i; make DESTDIR=${DESTDIR} distribution); done
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
/dev/rd0a / ufs rw,async 1 1
|
||||
#/dev/rd0c /u ufs rw,async 1 2
|
||||
/dev/sd0a / ufs rw,async 1 1
|
||||
#/dev/sd0c /u ufs rw,async 1 2
|
||||
|
||||
11
etc/passwd
11
etc/passwd
@@ -1,8 +1,7 @@
|
||||
root:5:0:1:The Man:/:/bin/sh
|
||||
daemon:*:1:1:The devil himself:/:/bin/sh
|
||||
root:5:0:1:The Man:/root:/bin/sh
|
||||
daemon:*:1:1:The devil himself:/root:/bin/sh
|
||||
sys:*:4:2:Operating System:/tmp:nologin
|
||||
operator:*:2:5:System &:/usr/guest/operator:/bin/csh
|
||||
bin:*:3:20:Binaries Commands and Source:/:/bin/csh
|
||||
operator:*:2:5:System &:/u/operator:/bin/sh
|
||||
bin:*:3:20:Binaries Commands and Source:/root:/bin/sh
|
||||
nobody:*:32767:31:Nobody:/nonexistent:/bin/sh
|
||||
uucp:*:66:1:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/sbin/uucico
|
||||
ingres:*:39:74:INGRES Owner:/usr/ingres:/bin/csh
|
||||
uucp:*:66:1:UNIX-to-UNIX Copy:/spool/uucppublic:/sbin/uucico
|
||||
|
||||
2
etc/rc
2
etc/rc
@@ -3,8 +3,6 @@ HOME=/; export HOME
|
||||
PATH=/bin:/sbin; export PATH
|
||||
exec >/dev/console 2>&1
|
||||
|
||||
/sbin/devupdate
|
||||
|
||||
if test "$1" != "autoboot"; then
|
||||
#
|
||||
# Switch from single-user to multi-user mode.
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
#
|
||||
# DESTDIR is defined here to be something which does *NOT* exist - it must be
|
||||
# specified on the command line when doing a "make DESTDIR=/mnt distribution".
|
||||
# This is aimed at avoiding overwriting the system disk's /etc files.
|
||||
|
||||
DESTDIR = /foobar
|
||||
OWN = root
|
||||
GRP = wheel
|
||||
|
||||
all install depend lint tags:
|
||||
|
||||
distribution:
|
||||
install -c -o ${OWN} -g ${GRP} -m 644 dot.cshrc ${DESTDIR}/.cshrc
|
||||
install -c -o ${OWN} -g ${GRP} -m 644 dot.login ${DESTDIR}/.login
|
||||
install -c -o ${OWN} -g ${GRP} -m 644 dot.profile ${DESTDIR}/.profile
|
||||
|
||||
clean:
|
||||
rm -f *~
|
||||
@@ -1,14 +0,0 @@
|
||||
set history=30
|
||||
set path=(/bin /sbin /etc /usr/sbin /usr/ucb /usr/bin /usr/new /usr/local)
|
||||
if ($?prompt) then
|
||||
set prompt="\!% "
|
||||
endif
|
||||
|
||||
set filec
|
||||
set mail=( 0 /usr/spool/mail/$USER )
|
||||
set cdpath=( ~ /usr/spool/mqueue)
|
||||
set prompt="\!% root--> "
|
||||
alias mail /usr/ucb/Mail
|
||||
alias pwd 'echo $cwd'
|
||||
alias h history
|
||||
alias q5 'tail -5 /usr/spool/mqueue/syslog'
|
||||
@@ -1,14 +0,0 @@
|
||||
unset noglob
|
||||
set path=(/bin /etc /sbin /usr/sbin /usr/ucb /usr/bin /usr/local /usr/new)
|
||||
umask 26
|
||||
stty dec erase ^H kill ^U eof ^D
|
||||
set prompt="[\!] root--> "
|
||||
|
||||
if ( "$TERM" == dialup || "$TERM" == network) then
|
||||
setenv TERM vt100
|
||||
echo -n "Terminal ($TERM)? "
|
||||
set argv = "$<"
|
||||
if ( "$argv" != '' ) setenv TERM "$argv"
|
||||
endif
|
||||
|
||||
biff y
|
||||
@@ -1,8 +0,0 @@
|
||||
echo 'erase, kill ^U, intr ^C'
|
||||
stty dec
|
||||
stty erase
|
||||
PATH=/bin:/sbin:/usr/sbin:/etc:/usr/ucb:/usr/bin:/usr/new
|
||||
export PATH
|
||||
HOME=/
|
||||
export HOME
|
||||
export TERM
|
||||
11
etc/shadow
11
etc/shadow
@@ -1,8 +1,7 @@
|
||||
root:ro46DZg1ViGBs:0:1:The Man:/:/bin/sh
|
||||
daemon:*:1:1:The devil himself:/:/bin/sh
|
||||
root:ro46DZg1ViGBs:0:1:The Man:/root:/bin/sh
|
||||
daemon:*:1:1:The devil himself:/root:/bin/sh
|
||||
sys:*:4:2:Operating System:/tmp:nologin
|
||||
operator:*:2:5:System &:/usr/guest/operator:/bin/csh
|
||||
bin:*:3:20:Binaries Commands and Source:/:/bin/csh
|
||||
operator:*:2:5:System &:/u/operator:/bin/sh
|
||||
bin:*:3:20:Binaries Commands and Source:/root:/bin/sh
|
||||
nobody:*:32767:31:Nobody:/nonexistent:/bin/sh
|
||||
uucp:*:66:1:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/sbin/uucico
|
||||
ingres:*:39:74:INGRES Owner:/usr/ingres:/bin/csh
|
||||
uucp:*:66:1:UNIX-to-UNIX Copy:/spool/uucppublic:/sbin/uucico
|
||||
|
||||
1
include/.gitignore
vendored
Normal file
1
include/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
readline
|
||||
@@ -1,5 +1,3 @@
|
||||
/* assert.h 4.2 85/01/21 */
|
||||
|
||||
# ifndef NDEBUG
|
||||
# define _assert(ex) {if (!(ex)){fprintf(stderr,"Assertion failed: file \"%s\", line %d\n", __FILE__, __LINE__);exit(1);}}
|
||||
# define assert(ex) _assert(ex)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* ctype.h 4.2 85/09/04 */
|
||||
|
||||
#define _U 01
|
||||
#define _L 02
|
||||
#define _N 04
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include <term.h>
|
||||
|
||||
#define bool int
|
||||
#define reg register
|
||||
|
||||
#define TRUE (1)
|
||||
#define FALSE (0)
|
||||
@@ -33,7 +32,6 @@ typedef struct sgttyb SGTTY;
|
||||
/*
|
||||
* Capabilities from termcap
|
||||
*/
|
||||
|
||||
extern bool AM, BS, CA, DA, DB, EO, HC, HZ, IN, MI, MS, NC, NS, OS, UL,
|
||||
XB, XN, XT, XS, XX;
|
||||
extern char *AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *CS, *DC, *DL,
|
||||
@@ -86,17 +84,17 @@ extern WINDOW *stdscr, *curscr;
|
||||
int __void__;
|
||||
#define VOID(x) (__void__ = (int) (x))
|
||||
#else
|
||||
#define VOID(x) (x)
|
||||
#define VOID(x) ((void)(x))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* psuedo functions for standard screen
|
||||
*/
|
||||
#define addch(ch) VOID(waddch(stdscr, ch))
|
||||
#define getch() VOID(wgetch(stdscr))
|
||||
#define getch() wgetch(stdscr)
|
||||
#define addstr(str) VOID(waddstr(stdscr, str))
|
||||
#define getstr(str) VOID(wgetstr(stdscr, str))
|
||||
#define move(y, x) VOID(wmove(stdscr, y, x))
|
||||
#define move(y, x) wmove(stdscr, y, x)
|
||||
#define clear() VOID(wclear(stdscr))
|
||||
#define erase() VOID(werase(stdscr))
|
||||
#define clrtobot() VOID(wclrtobot(stdscr))
|
||||
@@ -113,7 +111,7 @@ int __void__;
|
||||
/*
|
||||
* mv functions
|
||||
*/
|
||||
#define mvwaddch(win,y,x,ch) VOID(wmove(win,y,x)==ERR?ERR:waddch(win,ch))
|
||||
#define mvwaddch(win,y,x,ch) (wmove(win,y,x) == ERR ? ERR : waddch(win,ch))
|
||||
#define mvwgetch(win,y,x) VOID(wmove(win,y,x)==ERR?ERR:wgetch(win))
|
||||
#define mvwaddstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:waddstr(win,str))
|
||||
#define mvwgetstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
|
||||
@@ -131,7 +129,6 @@ int __void__;
|
||||
/*
|
||||
* psuedo functions
|
||||
*/
|
||||
|
||||
#define clearok(win,bf) (win->_clear = bf)
|
||||
#define leaveok(win,bf) (win->_leave = bf)
|
||||
#define scrollok(win,bf) (win->_scroll = bf)
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1980 Regents of the University of California.
|
||||
* All rights reserved. The Berkeley software License Agreement
|
||||
* specifies the terms and conditions for redistribution.
|
||||
*
|
||||
* @(#)dbm.h 5.1 (Berkeley) 3/27/86
|
||||
*/
|
||||
|
||||
#ifndef NULL
|
||||
/*
|
||||
* this is lunacy, we no longer use it (and never should have
|
||||
* unconditionally defined it), but, this whole file is for
|
||||
* backwards compatability - someone may rely on this.
|
||||
*/
|
||||
#define NULL ((char *) 0)
|
||||
#endif
|
||||
|
||||
#include <ndbm.h>
|
||||
|
||||
datum fetch();
|
||||
datum firstkey();
|
||||
datum nextkey();
|
||||
#if 0
|
||||
datum makdatum();
|
||||
datum firsthash();
|
||||
long calchash();
|
||||
long hashinc();
|
||||
#endif
|
||||
@@ -47,9 +47,6 @@
|
||||
* if type is "rq", then use concatenation of fs_file and "quotas" to locate
|
||||
* quota file.
|
||||
*/
|
||||
#define _PATH_FSTAB "/etc/fstab"
|
||||
#define FSTAB "/etc/fstab" /* deprecated */
|
||||
|
||||
#define FSTAB_RW "rw" /* read/write device */
|
||||
#define FSTAB_RQ "rq" /* read/write with quotas */
|
||||
#define FSTAB_RO "ro" /* read-only device */
|
||||
|
||||
@@ -13,3 +13,5 @@ struct group *getgrgid(gid_t gid);
|
||||
void setgrent(void);
|
||||
void endgrent(void);
|
||||
int setgroups(size_t size, const gid_t *list);
|
||||
int getgrouplist(char *uname, gid_t agroup, gid_t *groups, int *grpcnt);
|
||||
int initgroups(char *uname, int agroup);
|
||||
|
||||
2
include/inttypes.h
Normal file
2
include/inttypes.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
@@ -36,36 +36,6 @@
|
||||
#ifndef _LIMITS_H_
|
||||
#define _LIMITS_H_
|
||||
|
||||
/*
|
||||
* We don't need this crud at the moment so save on abuse of the C
|
||||
* preprocessor by not doing the defines.
|
||||
|
||||
#define _POSIX_ARG_MAX 4096
|
||||
#define _POSIX_CHILD_MAX 6
|
||||
#define _POSIX_LINK_MAX 8
|
||||
#define _POSIX_MAX_CANON 255
|
||||
#define _POSIX_MAX_INPUT 255
|
||||
#define _POSIX_NAME_MAX 14
|
||||
#define _POSIX_NGROUPS_MAX 0
|
||||
#define _POSIX_OPEN_MAX 16
|
||||
#define _POSIX_PATH_MAX 255
|
||||
#define _POSIX_PIPE_BUF 512
|
||||
#define _POSIX_SSIZE_MAX 32767
|
||||
#define _POSIX_STREAM_MAX 8
|
||||
#define _POSIX_TZNAME_MAX 3
|
||||
|
||||
#define _POSIX2_BC_BASE_MAX 99
|
||||
#define _POSIX2_BC_DIM_MAX 2048
|
||||
#define _POSIX2_BC_SCALE_MAX 99
|
||||
#define _POSIX2_BC_STRING_MAX 1000
|
||||
#define _POSIX2_EQUIV_CLASS_MAX 2
|
||||
#define _POSIX2_EXPR_NEST_MAX 32
|
||||
#define _POSIX2_LINE_MAX 2048
|
||||
#define _POSIX2_RE_DUP_MAX 255
|
||||
|
||||
*/
|
||||
|
||||
#include <machine/limits.h>
|
||||
/* #include <sys/syslimits.h> */
|
||||
|
||||
#endif /* !_LIMITS_H_ */
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
* specifies the terms and conditions for redistribution.
|
||||
*/
|
||||
|
||||
extern double fabs(), floor(), ceil(), fmod(), ldexp();
|
||||
extern double sqrt(), hypot(), atof();
|
||||
extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2();
|
||||
extern double exp(), log(), log10(), pow();
|
||||
extern double sinh(), cosh(), tanh();
|
||||
extern double gamma();
|
||||
extern double j0(), j1(), jn(), y0(), y1(), yn();
|
||||
double fabs(double), floor(double), ceil(double);
|
||||
double sqrt(double), hypot(double, double);
|
||||
double sin(double), cos(double), tan(double);
|
||||
double asin(double), acos(double), atan(double), atan2(double, double);
|
||||
double exp(double), log(double), log10(double), pow(double, double);
|
||||
double sinh(double), cosh(double), tanh(double);
|
||||
double j0(double), j1(double), jn(int, double);
|
||||
double y0(double), y1(double), yn(int, double);
|
||||
|
||||
#define HUGE 1.701411733192644270e38
|
||||
#define LOGHUGE 39
|
||||
#define HUGE_VAL 3.40282347e+38 /* TBD??? use infinity? */
|
||||
|
||||
int isnanf(float x);
|
||||
int isnan(double x);
|
||||
@@ -31,3 +31,21 @@ float ldexpf(float x, int exp);
|
||||
double ldexp(double x, int exp);
|
||||
|
||||
double fmod(double x, double y);
|
||||
|
||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
|
||||
|
||||
#define M_E 2.7182818284590452354 /* e */
|
||||
#define M_LOG2E 1.4426950408889634074 /* log 2e */
|
||||
#define M_LOG10E 0.43429448190325182765 /* log 10e */
|
||||
#define M_LN2 0.69314718055994530942 /* log e2 */
|
||||
#define M_LN10 2.30258509299404568402 /* log e10 */
|
||||
#define M_PI 3.14159265358979323846 /* pi */
|
||||
#define M_PI_2 1.57079632679489661923 /* pi/2 */
|
||||
#define M_PI_4 0.78539816339744830962 /* pi/4 */
|
||||
#define M_1_PI 0.31830988618379067154 /* 1/pi */
|
||||
#define M_2_PI 0.63661977236758134308 /* 2/pi */
|
||||
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
|
||||
#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
|
||||
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
|
||||
|
||||
#endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */
|
||||
|
||||
@@ -10,11 +10,7 @@
|
||||
* Hashed key data base library.
|
||||
*/
|
||||
#define PBLKSIZ 1024
|
||||
#ifdef pdp11
|
||||
#define DBLKSIZ 512
|
||||
#else
|
||||
#define DBLKSIZ 4096
|
||||
#endif
|
||||
#define DBLKSIZ 1024
|
||||
|
||||
typedef struct {
|
||||
int dbm_dirf; /* open directory file */
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
*/
|
||||
struct nlist {
|
||||
char *n_name; /* In memory address of symbol name,
|
||||
or string table offset (file) */
|
||||
* or string table offset (file) */
|
||||
u_short n_len; /* Length of name in bytes */
|
||||
u_short n_type; /* Type of symbol - see below */
|
||||
u_int n_value; /* Symbol value */
|
||||
|
||||
@@ -24,18 +24,25 @@
|
||||
#define _PATH_CORE "/core"
|
||||
#define _PATH_DEV "/dev/"
|
||||
#define _PATH_CONSOLE "/dev/console"
|
||||
#define _PATH_LOG "/dev/log"
|
||||
#define _PATH_DEVNULL "/dev/null"
|
||||
#define _PATH_TTY "/dev/tty"
|
||||
#define _PATH_MEM "/dev/mem"
|
||||
#define _PATH_SWAP "/dev/swap"
|
||||
#define _PATH_FSTAB "/etc/fstab"
|
||||
#define _PATH_LOCALTIME "/etc/localtime"
|
||||
#define _PATH_MOTD "/etc/motd"
|
||||
#define _PATH_NOLOGIN "/etc/nologin"
|
||||
#define _PATH_PASSWD "/etc/passwd"
|
||||
#define _PATH_PTMP "/etc/ptmp"
|
||||
#define _PATH_SHADOW "/etc/shadow"
|
||||
#define _PATH_TERMCAP "/etc/termcap"
|
||||
#define _PATH_USRLIB "/lib/"
|
||||
#define _PATH_CTIMED "/libexec/ctimed"
|
||||
#define _PATH_LOCALLIB "/local/lib/"
|
||||
#define _PATH_SBIN "/sbin/"
|
||||
#define _PATH_USRSBIN "/sbin/"
|
||||
#define _PATH_MKPASSWD "/sbin/mkpasswd"
|
||||
#define _PATH_SENDMAIL "/sbin/sendmail"
|
||||
#define _PATH_SHARE "/share/"
|
||||
#define _PATH_ZONEINFO "/share/zoneinfo" /* Time zone object file directory */
|
||||
|
||||
229
include/pcc.h
229
include/pcc.h
@@ -1,229 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1983 Regents of the University of California.
|
||||
* All rights reserved. The Berkeley software License Agreement
|
||||
* specifies the terms and conditions for redistribution.
|
||||
*
|
||||
* @(#)pcc.h 5.1 (Berkeley) 5/30/85
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains definitions for all the constants and structures
|
||||
* needed to use the intermediate code files generated and read by
|
||||
* the Portable C Compiler and related compilers.
|
||||
*
|
||||
* Rules for changing this code:
|
||||
* 1) All op values must be integer constants -- this permits us to run
|
||||
* a 'sed' script on this file to create %term declarations for yacc.
|
||||
* 2) Because the PCC uses fancy ASG and UNARY macros, assignment
|
||||
* operators must have values 1 greater than corresponding normal
|
||||
* operators, and unary operators must have values 2 greater ditto.
|
||||
* 3) Ops used only by f1 must have values >= 150 (PCCF_FORTOPS).
|
||||
* 4) Other language-dependent ops must have values >= 200.
|
||||
*/
|
||||
|
||||
# ifndef PCC_TOKENS
|
||||
|
||||
# define PCC_TOKENS 0
|
||||
|
||||
# define PCC_ERROR 1 /* an error node */
|
||||
# define PCC_FREE 2 /* an unused node */
|
||||
|
||||
/*
|
||||
* Constants.
|
||||
*/
|
||||
# define PCC_STRING 3 /* a string constant */
|
||||
# define PCC_ICON 4 /* an integer constant */
|
||||
# define PCC_FCON 5 /* a floating point constant */
|
||||
# define PCC_DCON 6 /* a double precision f.p. constant */
|
||||
|
||||
/*
|
||||
* Leaf types.
|
||||
*/
|
||||
# define PCC_NAME 7 /* an identifier */
|
||||
# define PCC_REG 8 /* a register */
|
||||
# define PCC_OREG 9 /* register and offset */
|
||||
# define PCC_CCODES 10 /* condition codes */
|
||||
# define PCC_FLD 11 /* a bit field */
|
||||
|
||||
/*
|
||||
* Arithmetic operators.
|
||||
*/
|
||||
# define PCC_PLUS 12 /* + */
|
||||
# define PCC_PLUSEQ 13 /* += */
|
||||
# define PCC_UPLUS 14 /* unary + (for completeness) */
|
||||
# define PCC_MINUS 15 /* - */
|
||||
# define PCC_MINUSEQ 16 /* -= */
|
||||
# define PCC_UMINUS 17 /* unary - */
|
||||
# define PCC_MUL 18 /* * */
|
||||
# define PCC_MULEQ 19 /* *= */
|
||||
/* Reserve a slot for 'unary *', which is PCC jargon for PCC_DEREF (yech) */
|
||||
# define PCC_DIV 21 /* / */
|
||||
# define PCC_DIVEQ 22 /* /= */
|
||||
# define PCC_MOD 23 /* % */
|
||||
# define PCC_MODEQ 24 /* %= */
|
||||
# define PCC_INCR 25 /* ++ */
|
||||
# define PCC_DECR 26 /* -- */
|
||||
# define PCC_ASSIGN 27 /* = (these last 3 are stretching it) */
|
||||
|
||||
/*
|
||||
* Bit operators.
|
||||
*/
|
||||
# define PCC_AND 28 /* & */
|
||||
# define PCC_ANDEQ 29 /* &= */
|
||||
/* Reserve a slot for 'unary &', jargon for PCC_ADDROF */
|
||||
# define PCC_OR 31 /* | */
|
||||
# define PCC_OREQ 32 /* |= */
|
||||
# define PCC_ER 33 /* ^ */
|
||||
# define PCC_EREQ 34 /* ^= */
|
||||
# define PCC_LS 35 /* << */
|
||||
# define PCC_LSEQ 36 /* <<= */
|
||||
# define PCC_RS 37 /* >> */
|
||||
# define PCC_RSEQ 38 /* >>= */
|
||||
# define PCC_COMPL 39 /* ~ */
|
||||
|
||||
/*
|
||||
* Booleans.
|
||||
*/
|
||||
# define PCC_EQ 40 /* == */
|
||||
# define PCC_NE 41 /* != */
|
||||
# define PCC_LE 42 /* <= */
|
||||
# define PCC_LT 43 /* < */
|
||||
# define PCC_GE 44 /* >= */
|
||||
# define PCC_GT 45 /* > */
|
||||
# define PCC_ULE 46 /* unsigned <= */
|
||||
# define PCC_ULT 47 /* unsigned < */
|
||||
# define PCC_UGE 48 /* unsigned >= */
|
||||
# define PCC_UGT 49 /* unsigned > */
|
||||
# define PCC_QUEST 50 /* ? (for conditional expressions) */
|
||||
# define PCC_COLON 51 /* : (for conditional expressions) */
|
||||
# define PCC_ANDAND 52 /* && */
|
||||
# define PCC_OROR 53 /* || */
|
||||
# define PCC_NOT 54 /* ! */
|
||||
|
||||
/*
|
||||
* Function calls.
|
||||
*/
|
||||
# define PCC_CALL 55 /* call by value */
|
||||
/* no ASG */
|
||||
# define PCC_UCALL 57 /* call with no arguments */
|
||||
# define PCC_FORTCALL 58 /* call by reference? */
|
||||
/* no ASG */
|
||||
# define PCC_UFORTCALL 60 /* ??? */
|
||||
# ifdef INLINE
|
||||
# define PCC_INLINE 61 /* inline function */
|
||||
/* no ASG */
|
||||
# define PCC_UINLINE 63 /* inline with no arguments */
|
||||
# endif INLINE
|
||||
|
||||
/*
|
||||
* Referencing and dereferencing.
|
||||
*/
|
||||
# define PCC_DEREF 20 /* * */
|
||||
# define PCC_ADDROF 30 /* & */
|
||||
|
||||
/*
|
||||
* Special structure operators.
|
||||
*/
|
||||
# define PCC_DOT 64 /* . */
|
||||
# define PCC_STREF 65 /* -> */
|
||||
# define PCC_STASG 66 /* structure assignment */
|
||||
# define PCC_STARG 67 /* an argument of type structure */
|
||||
# define PCC_STCALL 68 /* a function of type structure */
|
||||
/* no ASG */
|
||||
# define PCC_USTCALL 70 /* unary structure function */
|
||||
|
||||
/*
|
||||
* Conversions.
|
||||
*/
|
||||
# define PCC_SCONV 71 /* scalar conversion */
|
||||
# define PCC_PCONV 72 /* pointer conversion */
|
||||
# define PCC_PMCONV 73 /* pointer multiply conversion */
|
||||
# define PCC_PVCONV 74 /* pointer divide conversion */
|
||||
# define PCC_CAST 75 /* redundant? */
|
||||
|
||||
/*
|
||||
* Bracket types.
|
||||
*/
|
||||
# define PCC_LB 76 /* [ */
|
||||
# define PCC_RB 77 /* ] */
|
||||
|
||||
/*
|
||||
* Comma nodes.
|
||||
*/
|
||||
# define PCC_COMOP 78 /* , (in expressions) */
|
||||
# define PCC_CM 79 /* , (in argument lists) */
|
||||
|
||||
/*
|
||||
* Miscellaneous.
|
||||
*/
|
||||
# define PCC_FORCE 80 /* result of last expression goes in r0 */
|
||||
# define PCC_GOTO 81 /* unconditional goto */
|
||||
# define PCC_CBRANCH 82 /* goto label if !test */
|
||||
# define PCC_RETURN 83 /* return from function */
|
||||
# define PCC_INIT 84 /* initialized data */
|
||||
# define PCC_TYPE 85 /* a type */
|
||||
# define PCC_CLASS 86 /* a storage class */
|
||||
|
||||
# define PCC_MAXOP 86 /* highest numbered PCC op */
|
||||
|
||||
/*
|
||||
* Special codes for interfacing to /lib/f1.
|
||||
*/
|
||||
# define PCCF_FORTOPS 150
|
||||
# define PCCF_FTEXT 150 /* pass literal assembler text */
|
||||
# define PCCF_FEXPR 151 /* a statement */
|
||||
# define PCCF_FSWITCH 152 /* not implemented */
|
||||
# define PCCF_FLBRAC 153 /* beginning of subroutine */
|
||||
# define PCCF_FRBRAC 154 /* end of subroutine */
|
||||
# define PCCF_FEOF 155 /* end of file */
|
||||
# define PCCF_FARIF 156 /* not implemented */
|
||||
# define PCCF_FLABEL 157 /* an f77 label */
|
||||
|
||||
# endif PCC_TOKENS
|
||||
|
||||
|
||||
/*
|
||||
* Types, as encoded in intermediate file cookies.
|
||||
*/
|
||||
# define PCCT_UNDEF 0
|
||||
# define PCCT_FARG 1 /* function argument */
|
||||
# define PCCT_CHAR 2
|
||||
# define PCCT_SHORT 3
|
||||
# define PCCT_INT 4
|
||||
# define PCCT_LONG 5
|
||||
# define PCCT_FLOAT 6
|
||||
# define PCCT_DOUBLE 7
|
||||
# define PCCT_STRTY 8
|
||||
# define PCCT_UNIONTY 9
|
||||
# define PCCT_ENUMTY 10
|
||||
# define PCCT_MOETY 11 /* member of enum */
|
||||
# define PCCT_UCHAR 12
|
||||
# define PCCT_USHORT 13
|
||||
# define PCCT_UNSIGNED 14
|
||||
# define PCCT_ULONG 15
|
||||
|
||||
/*
|
||||
* Type modifiers.
|
||||
*/
|
||||
# define PCCTM_PTR 020
|
||||
# define PCCTM_FTN 040
|
||||
# define PCCTM_ARY 060
|
||||
# define PCCTM_BASETYPE 017
|
||||
# define PCCTM_TYPESHIFT 2
|
||||
|
||||
|
||||
/*
|
||||
* Useful macros. 'PCCOM' macros apply to ops.
|
||||
*/
|
||||
# define PCCOM_ASG 1+
|
||||
# define PCCOM_UNARY 2+
|
||||
# define PCCOM_NOASG (-1)+
|
||||
# define PCCOM_NOUNARY (-2)+
|
||||
|
||||
# define PCCM_TRIPLE(op, var, type) \
|
||||
((op) | ((var) << 8) | (long) (type) << 16)
|
||||
# define PCCM_TEXT(s) \
|
||||
PCCM_TRIPLE(PCCF_FTEXT, (strlen(s) + 3) / 4, 0)
|
||||
# define PCCM_ADDTYPE(t, m) \
|
||||
((((t) &~ PCCTM_BASETYPE) << PCCTM_TYPESHIFT) | \
|
||||
(m) | ((t) & PCCTM_BASETYPE))
|
||||
@@ -34,7 +34,7 @@ struct psout {
|
||||
time_t o_cstime; /* u_cstime */
|
||||
short o_pgrp; /* p_pgrp */
|
||||
int o_sigs; /* sum of SIGINT & SIGQUIT,
|
||||
if == 2 proc is ignoring both.*/
|
||||
* if == 2 proc is ignoring both.*/
|
||||
char o_comm[MAXCOMLEN+1]; /* u_comm */
|
||||
char o_args[64]; /* best guess at args to process */
|
||||
};
|
||||
|
||||
@@ -15,11 +15,6 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#define _PATH_PASSWD "/etc/passwd"
|
||||
#define _PATH_SHADOW "/etc/shadow"
|
||||
#define _PATH_MKPASSWD "/sbin/mkpasswd"
|
||||
#define _PATH_PTMP "/etc/ptmp"
|
||||
|
||||
#define _PW_KEYBYNAME '0'
|
||||
#define _PW_KEYBYUID '1'
|
||||
|
||||
|
||||
7
include/regex.h
Normal file
7
include/regex.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#ifndef _REGEX_H
|
||||
#define _REGEX_H
|
||||
|
||||
char *re_comp(const char *regex);
|
||||
int re_exec(const char *string);
|
||||
|
||||
#endif
|
||||
@@ -5,6 +5,7 @@
|
||||
* not the System V one.
|
||||
*/
|
||||
#define NSUBEXP 10
|
||||
|
||||
typedef struct regexp {
|
||||
char *startp[NSUBEXP];
|
||||
char *endp[NSUBEXP];
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1980 Regents of the University of California.
|
||||
* All rights reserved. The Berkeley software License Agreement
|
||||
* specifies the terms and conditions for redistribution.
|
||||
*
|
||||
* @(#)stab.h 5.1 (Berkeley) 5/30/85
|
||||
*/
|
||||
|
||||
/* IF YOU ADD DEFINITIONS, ADD THEM TO nm.c as well */
|
||||
/*
|
||||
* This file gives definitions supplementing <a.out.h>
|
||||
* for permanent symbol table entries.
|
||||
* These must have one of the N_STAB bits on,
|
||||
* and are subject to relocation according to the masks in <a.out.h>.
|
||||
*/
|
||||
/*
|
||||
* for symbolic debugger, sdb(1):
|
||||
*/
|
||||
#define N_GSYM 0x20 /* global symbol: name,,0,type,0 */
|
||||
#define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */
|
||||
#define N_FUN 0x24 /* procedure: name,,0,linenumber,address */
|
||||
#define N_STSYM 0x26 /* static symbol: name,,0,type,address */
|
||||
#define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,address */
|
||||
#define N_RSYM 0x40 /* register sym: name,,0,type,register */
|
||||
#define N_SLINE 0x44 /* src line: 0,,0,linenumber,address */
|
||||
#define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */
|
||||
#define N_SO 0x64 /* source file name: name,,0,0,address */
|
||||
#define N_LSYM 0x80 /* local sym: name,,0,type,offset */
|
||||
#define N_SOL 0x84 /* #included file name: name,,0,0,address */
|
||||
#define N_PSYM 0xa0 /* parameter: name,,0,type,offset */
|
||||
#define N_ENTRY 0xa4 /* alternate entry: name,linenumber,address */
|
||||
#define N_LBRAC 0xc0 /* left bracket: 0,,0,nesting level,address */
|
||||
#define N_RBRAC 0xe0 /* right bracket: 0,,0,nesting level,address */
|
||||
#define N_BCOMM 0xe2 /* begin common: name,, */
|
||||
#define N_ECOMM 0xe4 /* end common: name,, */
|
||||
#define N_ECOML 0xe8 /* end common (local name): ,,address */
|
||||
#define N_LENG 0xfe /* second stab entry with length information */
|
||||
|
||||
/*
|
||||
* for the berkeley pascal compiler, pc(1):
|
||||
*/
|
||||
#define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */
|
||||
37
include/stdbool.h
Normal file
37
include/stdbool.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2000 Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __bool_true_false_are_defined
|
||||
#define __bool_true_false_are_defined 1
|
||||
|
||||
#ifndef __cplusplus
|
||||
|
||||
#define false 0
|
||||
#define true 1
|
||||
|
||||
#define bool _Bool
|
||||
|
||||
#endif /* !__cplusplus */
|
||||
#endif /* __bool_true_false_are_defined */
|
||||
@@ -1,8 +1,22 @@
|
||||
#ifndef _STDDEF_H_
|
||||
#define _STDDEF_H_
|
||||
|
||||
typedef int ptrdiff_t;
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
/* Offset of member MEMBER in a struct of type TYPE. */
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ > 3
|
||||
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
|
||||
#else
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
|
||||
#endif
|
||||
|
||||
#endif /* _STDDEF_H_ */
|
||||
|
||||
@@ -5,11 +5,26 @@
|
||||
typedef signed char int8_t;
|
||||
typedef short int int16_t;
|
||||
typedef int int32_t;
|
||||
typedef long long int64_t;
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned short int uint16_t;
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
|
||||
#define INT8_C(x) x
|
||||
#define UINT8_C(x) x##U
|
||||
|
||||
#define INT16_C(x) x
|
||||
#define UINT16_C(x) x##U
|
||||
|
||||
#define INT32_C(x) x
|
||||
#define UINT32_C(x) x##U
|
||||
|
||||
#define INT64_C(x) x##LL
|
||||
#define UINT64_C(x) x##ULL
|
||||
|
||||
#define INTMAX_C(x) x##LL
|
||||
#define UINTMAX_C(x) x##ULL
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
*/
|
||||
#ifndef FILE
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define BUFSIZ 1024
|
||||
extern struct _iobuf {
|
||||
int _cnt;
|
||||
@@ -40,6 +38,11 @@ extern struct _iobuf {
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
#define FILE struct _iobuf
|
||||
#define EOF (-1)
|
||||
|
||||
@@ -62,17 +65,11 @@ extern struct _iobuf {
|
||||
_flsbuf((unsigned char)(x), p)))
|
||||
#endif /* not lint */
|
||||
|
||||
#define getchar() getc(stdin)
|
||||
#define putchar(x) putc(x,stdout)
|
||||
#define feof(p) (((p)->_flag&_IOEOF)!=0)
|
||||
#define ferror(p) (((p)->_flag&_IOERR)!=0)
|
||||
#define fileno(p) ((p)->_file)
|
||||
#define clearerr(p) ((p)->_flag &= ~(_IOERR|_IOEOF))
|
||||
|
||||
FILE *fopen (const char *, const char *);
|
||||
FILE *fdopen (int, const char *);
|
||||
FILE *freopen (const char *, const char *, FILE *);
|
||||
FILE *popen (const char *, const char *);
|
||||
int pclose(FILE *stream);
|
||||
FILE *tmpfile (void);
|
||||
int fclose (FILE *);
|
||||
long ftell (FILE *);
|
||||
@@ -80,6 +77,7 @@ int fflush (FILE *);
|
||||
int fgetc (FILE *);
|
||||
int ungetc (int, FILE *);
|
||||
int fputc (int, FILE *);
|
||||
int putchar (int);
|
||||
int fputs (const char *, FILE *);
|
||||
int puts (const char *);
|
||||
char *fgets (char *, int, FILE *);
|
||||
@@ -92,6 +90,7 @@ void setbuffer (FILE *, char *, size_t);
|
||||
void setlinebuf (FILE *);
|
||||
int setvbuf (FILE *, char *, int, size_t);
|
||||
int fseek (FILE *, long, int);
|
||||
int rename(const char *, const char *);
|
||||
void rewind (FILE *);
|
||||
int remove (const char *);
|
||||
int getw(FILE *stream);
|
||||
@@ -109,6 +108,13 @@ int fscanf (FILE *, const char *, ...);
|
||||
int scanf (const char *, ...);
|
||||
int sscanf (const char *, const char *, ...);
|
||||
|
||||
#define getchar() getc(stdin)
|
||||
#define putchar(x) putc(x,stdout)
|
||||
#define feof(p) (((p)->_flag&_IOEOF)!=0)
|
||||
#define ferror(p) (((p)->_flag&_IOERR)!=0)
|
||||
#define fileno(p) ((p)->_file)
|
||||
#define clearerr(p) ((p)->_flag &= ~(_IOERR|_IOEOF))
|
||||
|
||||
#ifndef _VA_LIST_
|
||||
# ifdef __GNUC__
|
||||
# define va_list __builtin_va_list /* For Gnu C */
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
#ifndef _STDLIB_H_
|
||||
#define _STDLIB_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
@@ -54,51 +52,54 @@
|
||||
|
||||
#define RAND_MAX 0x7fff
|
||||
|
||||
void abort (void);
|
||||
int abs (int);
|
||||
int atexit (void (*)(void));
|
||||
int atoi (const char *);
|
||||
long atol (const char *);
|
||||
void *calloc (size_t, size_t);
|
||||
void exit (int);
|
||||
void free (void *);
|
||||
char *getenv (const char *);
|
||||
long labs (long);
|
||||
void *malloc (size_t);
|
||||
char *mktemp (char *);
|
||||
int mkstemp (char *);
|
||||
void qsort (void *, size_t, size_t, int (*)(const void *, const void *));
|
||||
int rand (void);
|
||||
void *realloc (void*, size_t);
|
||||
void srand (unsigned);
|
||||
long strtol (const char *, char **, int);
|
||||
unsigned long strtoul (const char *, char **, int);
|
||||
int system (const char *);
|
||||
|
||||
int putenv (char *string);
|
||||
int setenv (const char *name, const char *value, int overwrite);
|
||||
int unsetenv (const char *name);
|
||||
char *_findenv (const char *name, int *offset);
|
||||
|
||||
void *alloca (size_t size);
|
||||
|
||||
int daemon (int, int);
|
||||
char *devname (dev_t dev, mode_t type);
|
||||
int getloadavg (unsigned loadavg[], int nelem);
|
||||
|
||||
extern char *suboptarg; /* getsubopt(3) external variable */
|
||||
int getsubopt (char **, char **, char **);
|
||||
|
||||
long random (void);
|
||||
char *setstate (char *);
|
||||
void srandom (unsigned);
|
||||
|
||||
#ifndef __SMALLER_C__
|
||||
double atof (const char *);
|
||||
double strtod (const char *, char **);
|
||||
char *ecvt (double, int, int *, int *);
|
||||
char *fcvt (double, int, int *, int *);
|
||||
char *gcvt (double, int, char *);
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
void abort(void);
|
||||
int abs(int);
|
||||
int atexit(void (*)(void));
|
||||
int atoi(const char *);
|
||||
long atol(const char *);
|
||||
void *calloc(size_t, size_t);
|
||||
void exit(int);
|
||||
void free(void *);
|
||||
char *getenv(const char *);
|
||||
long labs(long);
|
||||
void *malloc(size_t);
|
||||
char *mktemp(char *);
|
||||
int mkstemp(char *);
|
||||
void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
|
||||
int rand(void);
|
||||
void *realloc(void*, size_t);
|
||||
void srand(unsigned);
|
||||
long strtol(const char *, char **, int);
|
||||
unsigned long strtoul(const char *, char **, int);
|
||||
int system(const char *);
|
||||
|
||||
int putenv(char *string);
|
||||
int setenv(const char *name, const char *value, int overwrite);
|
||||
int unsetenv(const char *name);
|
||||
char *_findenv(const char *name, int *offset);
|
||||
|
||||
void *alloca(size_t size);
|
||||
|
||||
int daemon(int, int);
|
||||
char *devname(int dev, int type);
|
||||
int getloadavg(unsigned loadavg[], int nelem);
|
||||
|
||||
extern char *suboptarg; /* getsubopt(3) external variable */
|
||||
int getsubopt(char **, char **, char **);
|
||||
|
||||
long random(void);
|
||||
char *setstate(char *);
|
||||
void srandom(unsigned);
|
||||
|
||||
double atof(const char *);
|
||||
double strtod(const char *, char **);
|
||||
char *ecvt(double, int, int *, int *);
|
||||
char *fcvt(double, int, int *, int *);
|
||||
char *gcvt(double, int, char *);
|
||||
|
||||
#endif /* _STDLIB_H_ */
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
* All rights reserved. The Berkeley software License Agreement
|
||||
* specifies the terms and conditions for redistribution.
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
char *strcat (char *, const char *);
|
||||
char *strncat (char *, const char *, size_t);
|
||||
char *strcpy (char *, const char *);
|
||||
|
||||
@@ -30,11 +30,14 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
int bcmp(const void *, const void *, size_t);
|
||||
void bcopy(const void *, void *, size_t);
|
||||
void bzero(void *, unsigned long);
|
||||
void bzero(void *, unsigned int);
|
||||
int ffs(int);
|
||||
char *index(const char *, int);
|
||||
char *rindex(const char *, int);
|
||||
|
||||
@@ -6,6 +6,6 @@ extern int tgetnum(char *);
|
||||
extern int tgetflag(char *);
|
||||
extern char *tgetstr(char *, char **);
|
||||
extern char *tgoto(char *, int, int);
|
||||
extern int tputs(register char *, int, int (*)());
|
||||
extern int tputs(register char *, int, int (*)(int));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define E_TERMCAP "/etc/termcap"
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned int tcflag_t;
|
||||
@@ -145,5 +143,4 @@ extern int tcsetattr(int, int, struct termios *);
|
||||
#define TIOCSETAW _IOW(i, 92, struct termios)
|
||||
#define TIOCSETAF _IOW(i, 92, struct termios)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,7 +6,19 @@
|
||||
#ifndef _TIME_H
|
||||
#define _TIME_H
|
||||
|
||||
#include <sys/types.h> /* for time_t */
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T
|
||||
#define _TIME_T
|
||||
typedef long time_t;
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned size_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure returned by gmtime and localtime calls (see ctime(3)).
|
||||
@@ -25,9 +37,11 @@ struct tm {
|
||||
char *tm_zone;
|
||||
};
|
||||
|
||||
extern struct tm *gmtime(), *localtime();
|
||||
extern char *asctime(), *ctime();
|
||||
extern time_t time();
|
||||
struct tm *gmtime(const time_t *);
|
||||
struct tm *localtime(const time_t *);
|
||||
char *asctime(const struct tm *);
|
||||
char *ctime(const time_t *);
|
||||
time_t time(time_t *);
|
||||
|
||||
size_t strftime (char *s, size_t maxsize, const char *format,
|
||||
const struct tm *timeptr);
|
||||
|
||||
@@ -5,14 +5,13 @@
|
||||
/*
|
||||
** Information about time zone files.
|
||||
*/
|
||||
|
||||
/* Time zone object file directory */
|
||||
#define TZDIR "/usr/share/zoneinfo"
|
||||
#define TZDEFAULT "/etc/localtime"
|
||||
|
||||
/*
|
||||
** Each file begins with. . .
|
||||
*/
|
||||
|
||||
struct tzhead {
|
||||
char tzh_reserved[32]; /* reserved for future use */
|
||||
char tzh_timecnt[4]; /* coded number of transition times */
|
||||
@@ -96,5 +95,4 @@ struct tzhead {
|
||||
** Accurate only for the past couple of centuries;
|
||||
** that will probably do.
|
||||
*/
|
||||
|
||||
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
|
||||
|
||||
116
include/unistd.h
116
include/unistd.h
@@ -57,14 +57,16 @@
|
||||
#define X_OK 1 /* Test for execute permission. */
|
||||
#define F_OK 0 /* Test for existence. */
|
||||
|
||||
void _exit (int);
|
||||
void _exit(int);
|
||||
int access();
|
||||
unsigned int alarm();
|
||||
pid_t fork();
|
||||
pid_t setsid(void);
|
||||
gid_t getegid();
|
||||
uid_t geteuid();
|
||||
gid_t getgid();
|
||||
char *getlogin();
|
||||
int setlogin(const char *name);
|
||||
pid_t getpgrp();
|
||||
pid_t getpid();
|
||||
pid_t getppid();
|
||||
@@ -73,12 +75,12 @@ off_t lseek();
|
||||
ssize_t read();
|
||||
unsigned int sleep();
|
||||
char *ttyname();
|
||||
ssize_t write (int fd, const void *buf, size_t count);
|
||||
int truncate (const char *path, off_t length);
|
||||
int ftruncate (int fd, off_t length);
|
||||
ssize_t write(int fd, const void *buf, size_t count);
|
||||
int truncate(const char *path, off_t length);
|
||||
int ftruncate(int fd, off_t length);
|
||||
|
||||
void *brk (const void *addr);
|
||||
int _brk (const void *addr);
|
||||
void *brk(const void *addr);
|
||||
int _brk(const void *addr);
|
||||
char *crypt();
|
||||
void endusershell();
|
||||
long gethostid();
|
||||
@@ -88,60 +90,74 @@ char *getwd();
|
||||
void psignal();
|
||||
extern char *sys_siglist[];
|
||||
char *re_comp();
|
||||
void *sbrk (int incr);
|
||||
void *sbrk(int incr);
|
||||
int sethostid();
|
||||
void setusershell();
|
||||
void sync();
|
||||
void sync(void);
|
||||
unsigned int ualarm();
|
||||
void usleep();
|
||||
int pause (void);
|
||||
int pause(void);
|
||||
pid_t vfork();
|
||||
|
||||
int pipe (int pipefd[2]);
|
||||
int close (int fd);
|
||||
int dup (int oldfd);
|
||||
int dup2 (int oldfd, int newfd);
|
||||
int unlink (const char *pathname);
|
||||
int link (const char *oldpath, const char *newpath);
|
||||
ssize_t readlink (const char *path, char *buf, size_t bufsiz);
|
||||
int chown (const char *path, uid_t owner, gid_t group);
|
||||
int nice (int inc);
|
||||
int setuid (uid_t uid);
|
||||
int setgid (gid_t gid);
|
||||
int seteuid (uid_t euid);
|
||||
int setegid (gid_t egid);
|
||||
int setreuid (uid_t ruid, uid_t euid);
|
||||
int setregid (gid_t rgid, gid_t egid);
|
||||
int isatty (int fd);
|
||||
int chdir (const char *path);
|
||||
int fchdir (int fd);
|
||||
int chflags (const char *path, u_long flags);
|
||||
int fchflags (int fd, u_long flags);
|
||||
int getgroups (int size, gid_t list[]);
|
||||
int getdtablesize (void);
|
||||
int rmdir (const char *pathname);
|
||||
int pipe(int pipefd[2]);
|
||||
int close(int fd);
|
||||
int dup(int oldfd);
|
||||
int dup2(int oldfd, int newfd);
|
||||
int unlink(const char *pathname);
|
||||
int link(const char *oldpath, const char *newpath);
|
||||
ssize_t readlink(const char *path, char *buf, size_t bufsiz);
|
||||
int chown(const char *path, uid_t owner, gid_t group);
|
||||
int fchown(int fd, uid_t owner, gid_t group);
|
||||
int nice(int inc);
|
||||
int setuid(uid_t uid);
|
||||
int setgid(gid_t gid);
|
||||
int seteuid(uid_t euid);
|
||||
int setegid(gid_t egid);
|
||||
int setreuid(uid_t ruid, uid_t euid);
|
||||
int setregid(gid_t rgid, gid_t egid);
|
||||
int setpgrp(void);
|
||||
int isatty(int fd);
|
||||
int chdir(const char *path);
|
||||
int fchdir(int fd);
|
||||
int chflags(const char *path, u_long flags);
|
||||
int fchflags(int fd, u_long flags);
|
||||
int getgroups(int size, gid_t list[]);
|
||||
int getdtablesize(void);
|
||||
int rmdir(const char *pathname);
|
||||
|
||||
struct stat;
|
||||
int stat (const char *path, struct stat *buf);
|
||||
int fstat (int fd, struct stat *buf);
|
||||
int lstat (const char *path, struct stat *buf);
|
||||
int stat(const char *path, struct stat *buf);
|
||||
int fstat(int fd, struct stat *buf);
|
||||
int lstat(const char *path, struct stat *buf);
|
||||
|
||||
int execl (const char *path, const char *arg0, ... /* NULL */);
|
||||
int execle (const char *path, const char *arg0, ... /* NULL, char *envp[] */);
|
||||
int execlp (const char *file, const char *arg0, ... /* NULL */);
|
||||
int execl(const char *path, const char *arg0, ... /* NULL */);
|
||||
int execle(const char *path, const char *arg0, ... /* NULL, char *envp[] */);
|
||||
int execlp(const char *file, const char *arg0, ... /* NULL */);
|
||||
|
||||
int execv (const char *path, char *const argv[]);
|
||||
int execve (const char *path, char *const arg0[], char *const envp[]);
|
||||
int execvp (const char *file, char *const argv[]);
|
||||
int execv(const char *path, char *const argv[]);
|
||||
int execve(const char *path, char *const arg0[], char *const envp[]);
|
||||
int execvp(const char *file, char *const argv[]);
|
||||
|
||||
extern char **environ; /* Environment, from crt0. */
|
||||
extern const char *__progname; /* Program name, from crt0. */
|
||||
|
||||
int getopt (int argc, char * const argv[], const char *optstring);
|
||||
int getopt(int argc, char * const argv[], const char *optstring);
|
||||
|
||||
extern char *optarg; /* getopt(3) external variables */
|
||||
extern int opterr, optind, optopt;
|
||||
|
||||
int gethostname(char *name, int namelen);
|
||||
int sethostname(char *name, int namelen);
|
||||
|
||||
int chroot(const char *path);
|
||||
int fsync(int fd);
|
||||
int getpagesize(void);
|
||||
int symlink(const char *target, const char *linkpath);
|
||||
int vhangup(void);
|
||||
int mknod(const char *, mode_t, dev_t);
|
||||
int reboot(int howto);
|
||||
int ttyslot(void);
|
||||
|
||||
#ifndef _VA_LIST_
|
||||
# ifdef __GNUC__
|
||||
# define va_list __builtin_va_list /* For Gnu C */
|
||||
@@ -151,14 +167,14 @@ extern int opterr, optind, optopt;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
void err (int eval, const char *fmt, ...);
|
||||
void errx (int eval, const char *fmt, ...);
|
||||
void warn (const char *fmt, ...);
|
||||
void warnx (const char *fmt, ...);
|
||||
void verr (int eval, const char *fmt, va_list ap);
|
||||
void verrx (int eval, const char *fmt, va_list ap);
|
||||
void vwarn (const char *fmt, va_list ap);
|
||||
void vwarnx (const char *fmt, va_list ap);
|
||||
void err(int eval, const char *fmt, ...);
|
||||
void errx(int eval, const char *fmt, ...);
|
||||
void warn(const char *fmt, ...);
|
||||
void warnx(const char *fmt, ...);
|
||||
void verr(int eval, const char *fmt, va_list ap);
|
||||
void verrx(int eval, const char *fmt, va_list ap);
|
||||
void vwarn(const char *fmt, va_list ap);
|
||||
void vwarnx(const char *fmt, va_list ap);
|
||||
|
||||
#ifndef _VA_LIST_
|
||||
# undef va_list
|
||||
|
||||
@@ -25,3 +25,5 @@ struct utmp {
|
||||
char ut_host[UT_HOSTSIZE];
|
||||
long ut_time;
|
||||
};
|
||||
|
||||
void login(struct utmp *ut);
|
||||
|
||||
@@ -11,8 +11,7 @@
|
||||
* Define segment+offset and modified macros.
|
||||
* Place into the public domain.
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
|
||||
#define MAXSEGNO 16384 /* max number of segments in a space */
|
||||
@@ -24,12 +23,12 @@ struct vspace {
|
||||
int v_fd; /* file for swapping */
|
||||
off_t v_foffset; /* offset for computing file addresses */
|
||||
int v_maxsegno; /* number of segments in this space */
|
||||
};
|
||||
};
|
||||
|
||||
struct dlink { /* general double link structure */
|
||||
struct dlink *fwd; /* forward link */
|
||||
struct dlink *back; /* back link */
|
||||
};
|
||||
};
|
||||
|
||||
struct vseg { /* structure of a segment in memory */
|
||||
struct dlink s_link; /* for linking into lru list */
|
||||
@@ -37,12 +36,11 @@ struct vseg { /* structure of a segment in memory */
|
||||
struct vspace *s_vspace; /* which virtual space */
|
||||
int s_lock_count;
|
||||
int s_flags;
|
||||
union
|
||||
{
|
||||
union {
|
||||
int _winfo[WORDSPERSEG]; /* the actual segment */
|
||||
char _cinfo[BYTESPERSEG];
|
||||
} v_un;
|
||||
};
|
||||
};
|
||||
|
||||
#define s_winfo v_un._winfo
|
||||
#define s_cinfo v_un._cinfo
|
||||
@@ -50,15 +48,16 @@ struct vseg { /* structure of a segment in memory */
|
||||
/* masks for s_flags */
|
||||
#define S_DIRTY 01 /* segment has been modified */
|
||||
|
||||
long nswaps; /* number of swaps */
|
||||
long nmapsegs; /* number of mapseg calls */
|
||||
extern long nswaps; /* number of swaps */
|
||||
extern long nmapsegs; /* number of mapseg calls */
|
||||
|
||||
int vminit(), vmopen();
|
||||
struct vseg *vmmapseg();
|
||||
void vmlock(), vmunlock(), vmclrseg(), vmmodify();
|
||||
void vmflush(), vmclose();
|
||||
int vminit(), vmopen();
|
||||
struct vseg *vmmapseg();
|
||||
void vmlock(), vmunlock(), vmclrseg(), vmmodify();
|
||||
void vmflush(), vmclose();
|
||||
|
||||
typedef long VADDR;
|
||||
|
||||
#define VMMODIFY(seg) (seg->s_flags |= S_DIRTY)
|
||||
#define VSEG(va) ((short)(va >> LOG2BPS))
|
||||
#define VOFF(va) ((u_short)va % BYTESPERSEG)
|
||||
|
||||
20
lib/Makefile
20
lib/Makefile
@@ -1,21 +1,11 @@
|
||||
TOPSRC = $(shell cd ..; pwd)
|
||||
SUBDIR = startup libc libcurses libtermlib libwiznet
|
||||
SUBDIR = startup libc libm libcurses libtermlib libwiznet libreadline libgpanel
|
||||
PROG = ar as aout ld nm ranlib size strip
|
||||
|
||||
# Build a list of the host include directories.
|
||||
CPP = $(shell gcc -print-prog-name=cc1)
|
||||
HOSTINC = $(addprefix -I,$(shell echo | $(CPP) -v 2>&1 | grep '^ /.*include'))
|
||||
|
||||
# Add system include path
|
||||
ifeq (,$(wildcard /usr/include/i386-linux-gnu))
|
||||
HOSTINC += -I/usr/include
|
||||
else
|
||||
HOSTINC += -I/usr/include/i386-linux-gnu
|
||||
endif
|
||||
|
||||
CFLAGS += -nostdinc -fno-builtin -g -Werror -Wall -DCROSS -I. $(HOSTINC) \
|
||||
-I$(TOPSRC)/include -I$(TOPSRC)/src/cmd/ar \
|
||||
-I$(TOPSRC)/src/cmd/as
|
||||
CFLAGS = -Os -std=gnu89 -fno-builtin -g -Werror -Wall -DCROSS -I. \
|
||||
-idirafter $(TOPSRC)/include \
|
||||
-idirafter $(TOPSRC)/src/cmd/ar \
|
||||
-idirafter $(TOPSRC)/src/cmd/as
|
||||
LDFLAGS += -g
|
||||
|
||||
AR_OBJS = ar.o append.o archive.o contents.o delete.o extract.o \
|
||||
|
||||
@@ -8,7 +8,7 @@ vpath %.c $(LIBCDIR)/mips/sys $(LIBCDIR)/gen $(LIBCDIR)/stdio \
|
||||
$(LIBCDIR)/stdlib $(LIBCDIR)/string $(LIBCDIR)/inet \
|
||||
$(LIBCDIR)/compat $(LIBCDIR)/runtime
|
||||
|
||||
CFLAGS += -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
ASFLAGS += -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -I$(LIBCDIR)/mips/sys
|
||||
|
||||
# modules which can not use SYSCALL and must be assembled from sources. The
|
||||
@@ -87,15 +87,16 @@ OBJS += inet_addr.o inet_network.o inet_netof.o \
|
||||
inet_ntoa.o inet_lnaof.o inet_maddr.o
|
||||
|
||||
# libc/compat
|
||||
OBJS += creat.o ftime.o gethostid.o gtty.o memccpy.o memchr.o \
|
||||
OBJS += creat.o ftime.o gethostid.o memccpy.o memchr.o \
|
||||
memcmp.o memcpy.o memset.o nice.o pause.o rand.o \
|
||||
sethostid.o setregid.o setreuid.o setrgid.o setruid.o \
|
||||
sigcompat.o strchr.o strrchr.o stty.o times.o tmpnam.o \
|
||||
sigcompat.o strchr.o strrchr.o times.o tmpnam.o \
|
||||
utime.o
|
||||
|
||||
# libc/runtime
|
||||
OBJS += addsf3.o comparesf2.o divsf3.o fixsfsi.o floatsisf.o \
|
||||
mulsf3.o negsf2.o subsf3.o sc_case.o
|
||||
mulsf3.o negsf2.o subsf3.o sc_case.o fixunssfsi.o \
|
||||
floatunsisf.o
|
||||
|
||||
all: ../libc.a
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libcurses
|
||||
|
||||
CFLAGS += -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = addch.o addstr.o box.o clear.o clrtobot.o clrtoeol.o cr_put.o \
|
||||
cr_tty.o curses.o delch.o deleteln.o delwin.o endwin.o erase.o \
|
||||
|
||||
18
lib/libgpanel/Makefile
Normal file
18
lib/libgpanel/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
TOPSRC = $(shell cd ../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libgpanel
|
||||
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = open.o clear.o pixel.o line.o rect.o fill.o fill_triangle.o \
|
||||
circle.o image.o char.o text.o text_width.o
|
||||
|
||||
all: ../libgpanel.a
|
||||
|
||||
../libgpanel.a: ../ar ../ranlib $(OBJS)
|
||||
../ar rc $@ $(OBJS)
|
||||
../ranlib $@
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o a.out *.a
|
||||
18
lib/libm/Makefile
Normal file
18
lib/libm/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
TOPSRC = $(shell cd ../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libm
|
||||
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = asin.o atan.o exp.o erf.o floor.o fmod.o hypot.o j0.o j1.o \
|
||||
jn.o log.o pow.o sin.o sinh.o sqrt.o tan.o tanh.o
|
||||
|
||||
all: ../libm.a
|
||||
|
||||
../libm.a: ../ar ../ranlib $(OBJS)
|
||||
../ar rc $@ $(OBJS)
|
||||
../ranlib $@
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o a.out *.a
|
||||
17
lib/libreadline/Makefile
Normal file
17
lib/libreadline/Makefile
Normal file
@@ -0,0 +1,17 @@
|
||||
TOPSRC = $(shell cd ../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libreadline
|
||||
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = readline.o
|
||||
|
||||
all: ../libreadline.a
|
||||
|
||||
../libreadline.a: ../ar ../ranlib $(OBJS)
|
||||
../ar rc $@ $(OBJS)
|
||||
../ranlib $@
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o a.out *.a
|
||||
@@ -3,7 +3,7 @@ include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libtermlib
|
||||
|
||||
CFLAGS += -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = termcap.o tgoto.o tputs.o tcattr.o
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ include $(TOPSRC)/target.mk
|
||||
|
||||
vpath %.c $(TOPSRC)/src/libwiznet
|
||||
|
||||
CFLAGS += -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ $(DEFS) -Wa,-x -Wall -Werror
|
||||
|
||||
OBJS = w5100.o socket.o ethernet.o client.o server.o udp.o
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ TOPSRC = $(shell cd ../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
vpath %.c $(TOPSRC)/src/startup-mips
|
||||
|
||||
CFLAGS = -B$(TOPSRC)/lib/ -O -Wa,-x $(DEFS)
|
||||
CFLAGS = -Os -B$(TOPSRC)/lib/ -fno-integrated-as -Xassembler -x $(DEFS)
|
||||
|
||||
OBJS = ../crt0.o
|
||||
|
||||
|
||||
7
root/.profile
Normal file
7
root/.profile
Normal file
@@ -0,0 +1,7 @@
|
||||
echo 'erase ^?, kill ^U, intr ^C'
|
||||
stty dec
|
||||
PATH=/bin:/sbin:/etc
|
||||
export PATH
|
||||
HOME=/
|
||||
export HOME
|
||||
export TERM
|
||||
2129
rootfs.manifest
2129
rootfs.manifest
File diff suppressed because it is too large
Load Diff
8
share/.gitignore
vendored
8
share/.gitignore
vendored
@@ -1,4 +1,6 @@
|
||||
re.help
|
||||
misc
|
||||
unixbench
|
||||
calendar
|
||||
emg.keys
|
||||
misc
|
||||
re.help
|
||||
unixbench
|
||||
zoneinfo
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
|
||||
all: ashello echo chello stdarg skeleton
|
||||
|
||||
ashello: ashello.o
|
||||
$(LD) ashello.o -o $@
|
||||
|
||||
chello: chello.o
|
||||
$(CC) chello.o -o $@
|
||||
|
||||
echo: echo.o
|
||||
$(LD) $@.o -o $@
|
||||
|
||||
stdarg: stdarg.o
|
||||
$(CC) stdarg.o -o $@
|
||||
|
||||
skeleton: skeleton.o
|
||||
$(CC) skeleton.o -o $@
|
||||
|
||||
clean:
|
||||
rm -f *.o ashello echo chello stdarg skeleton *.dis *~
|
||||
@@ -1,29 +0,0 @@
|
||||
TOPSRC = $(shell cd ../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS += -Werror
|
||||
ASFLAGS += -DCROSS
|
||||
ASLDFLAGS = --oformat=elf32-tradlittlemips -N -nostartfiles -T $(TOPSRC)/src/elf32-mips.ld
|
||||
|
||||
all: chello cplus echo stdarg
|
||||
|
||||
chello: chello.o
|
||||
${CC} ${LDFLAGS} -o chello.elf chello.o ${LIBS}
|
||||
${OBJDUMP} -S chello.elf > chello.dis
|
||||
${SIZE} chello.elf
|
||||
${ELF2AOUT} chello.elf $@
|
||||
|
||||
cplus: cplus.o
|
||||
${CXX} ${LDFLAGS} -nostdlib -o cplus.elf cplus.o ${LIBS}
|
||||
${OBJDUMP} -S cplus.elf > cplus.dis
|
||||
${SIZE} cplus.elf
|
||||
${ELF2AOUT} cplus.elf $@
|
||||
|
||||
echo: echo.o
|
||||
${LD} ${ASLDFLAGS} -o $@.elf $@.o
|
||||
${OBJDUMP} -S $@.elf > $@.dis
|
||||
${SIZE} $@.elf
|
||||
${ELF2AOUT} $@.elf $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.elf ${MAN} chello cplus echo stdarg *.elf *.dis tags *~
|
||||
11
share/examples/asm/Makefile
Normal file
11
share/examples/asm/Makefile
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
all: ashello echo
|
||||
|
||||
ashello: ashello.o
|
||||
$(LD) ashello.o -o $@
|
||||
|
||||
echo: echo.o
|
||||
$(LD) $@.o -o $@
|
||||
|
||||
clean:
|
||||
rm -f *.o ashello echo *.dis *~
|
||||
17
share/examples/asm/Makefile-host
Normal file
17
share/examples/asm/Makefile-host
Normal file
@@ -0,0 +1,17 @@
|
||||
TOPSRC = $(shell cd ../../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS += -Werror
|
||||
ASFLAGS += -DCROSS
|
||||
ASLDFLAGS = --oformat=elf32-tradlittlemips -N -nostartfiles -T $(TOPSRC)/src/elf32-mips.ld
|
||||
|
||||
all: echo
|
||||
|
||||
echo: echo.o
|
||||
${LD} ${ASLDFLAGS} -o $@.elf $@.o
|
||||
${OBJDUMP} -S $@.elf > $@.dis
|
||||
${SIZE} $@.elf
|
||||
${ELF2AOUT} $@.elf $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.elf ${MAN} echo *.elf *.dis tags *~
|
||||
50
share/examples/c/Makefile
Normal file
50
share/examples/c/Makefile
Normal file
@@ -0,0 +1,50 @@
|
||||
CC = cc
|
||||
PROG = hello stdarg skeleton primelist primesum test1 test2 test3 \
|
||||
gpio adc rain q8 tetris lcd6
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
hello: hello.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
stdarg: stdarg.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
skeleton: skeleton.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
primelist: primelist.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
primesum: primesum.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
gpio: gpio.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
adc: adc.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
rain: rain.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
q8: q8.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
tetris: tetris.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
lcd6: lcd6.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
test1: test1.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
test2: test2.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
test3: test3.c
|
||||
$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $?
|
||||
|
||||
clean:
|
||||
rm -f *.o *~ $(PROG)
|
||||
27
share/examples/c/Makefile-host
Normal file
27
share/examples/c/Makefile-host
Normal file
@@ -0,0 +1,27 @@
|
||||
TOPSRC = $(shell cd ../../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS += -Werror -Wall
|
||||
|
||||
all: chello stdarg lcd6
|
||||
|
||||
chello: chello.o
|
||||
${CC} ${LDFLAGS} -o chello.elf chello.o ${LIBS}
|
||||
${OBJDUMP} -S chello.elf > chello.dis
|
||||
${SIZE} chello.elf
|
||||
${ELF2AOUT} chello.elf $@
|
||||
|
||||
tetris: tetris.o
|
||||
${CC} ${LDFLAGS} -o tetris.elf tetris.o ${LIBS}
|
||||
${OBJDUMP} -S tetris.elf > tetris.dis
|
||||
${SIZE} tetris.elf
|
||||
${ELF2AOUT} tetris.elf $@
|
||||
|
||||
lcd6: lcd6.o
|
||||
${CC} ${LDFLAGS} -o lcd6.elf lcd6.o ${LIBS}
|
||||
${OBJDUMP} -S lcd6.elf > lcd6.dis
|
||||
${SIZE} lcd6.elf
|
||||
${ELF2AOUT} lcd6.elf $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.elf ${MAN} chello stdarg lcd6 *.elf *.dis tags *~
|
||||
287
share/examples/c/lcd6.c
Normal file
287
share/examples/c/lcd6.c
Normal file
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* Demo for 6 digit LCD module based on HT1261 controller.
|
||||
* Based on example sources from http://www.canton-electronics.com
|
||||
*
|
||||
* Copyright (C) 2015 Serge Vakulenko
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* and its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that the above copyright notice appear in all
|
||||
* copies and that both that the copyright notice and this
|
||||
* permission notice and warranty disclaimer appear in supporting
|
||||
* documentation, and that the name of the author not be used in
|
||||
* advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission.
|
||||
*
|
||||
* The author disclaim all warranties with regard to this
|
||||
* software, including all implied warranties of merchantability
|
||||
* and fitness. In no event shall the author be liable for any
|
||||
* special, indirect or consequential damages or any damages
|
||||
* whatsoever resulting from loss of use, data or profits, whether
|
||||
* in an action of contract, negligence or other tortious action,
|
||||
* arising out of or in connection with the use or performance of
|
||||
* this software.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/gpio.h>
|
||||
|
||||
/*
|
||||
* Digits, decimal dots and battery levels:
|
||||
* A B C D E F
|
||||
* -- -- -- -- -- -- z
|
||||
* | | | | | | | | | | | | y
|
||||
* -- -- -- -- -- -- x
|
||||
* | | | | | | | | | | | |
|
||||
* -- -- -- c -- d -- e --
|
||||
*
|
||||
* Memory map:
|
||||
* Byte 0, bits 0-6 - segments of digit 'F'
|
||||
* Byte 0, bit 7 - decimal dot 'e'
|
||||
* Byte 1, bits 0-6 - segments of digit 'E'
|
||||
* Byte 1, bit 7 - decimal dot 'd'
|
||||
* Byte 2, bits 0-6 - segments of digit 'D'
|
||||
* Byte 2, bit 7 - decimal dot 'c'
|
||||
* Byte 3, bits 0-6 - segments of digit 'C'
|
||||
* Byte 3, bit 7 - battery level 'x'
|
||||
* Byte 4, bits 0-6 - segments of digit 'B'
|
||||
* Byte 4, bit 7 - battery level 'y'
|
||||
* Byte 5, bits 0-6 - segments of digit 'A'
|
||||
* Byte 5, bit 7 - battery level 'z'
|
||||
*
|
||||
* Segments are mapped to bits 0-6:
|
||||
* --4--
|
||||
* 0---5
|
||||
* --1--
|
||||
* 2---6
|
||||
* --3--
|
||||
*/
|
||||
|
||||
/*
|
||||
* Signal assignment.
|
||||
* LED modulee is connected to pins 16,17,18 of Fubarino SD board.
|
||||
*
|
||||
* Fubarino PIC32 LED module
|
||||
* --------------------------
|
||||
* 16 RE0 CS
|
||||
* 17 RE1 WR
|
||||
* 18 RE2 DATA
|
||||
*/
|
||||
#define gpio_cs_clear() ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 0)
|
||||
#define gpio_cs_set() ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 0)
|
||||
#define gpio_wr_clear() ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 1)
|
||||
#define gpio_wr_set() ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 1)
|
||||
#define gpio_data_clear() ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 2)
|
||||
#define gpio_data_set() ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 2)
|
||||
|
||||
/*
|
||||
* HT1621 commands
|
||||
*/
|
||||
#define HT_SYS_DIS 0x00 /* Turn off system osc and bias generator */
|
||||
#define HT_SYS_EN 0x01 /* Turn on system oscillator */
|
||||
#define HT_LCD_OFF 0x02 /* Turn off LCD bias generator */
|
||||
#define HT_LCD_ON 0x03 /* Turn on LCD bias generator */
|
||||
#define HT_CLOCK_XTAL 0x14 /* Crystal 32kHz */
|
||||
#define HT_CLOCK_RC 0x18 /* On-chip RC oscillator 256kHz */
|
||||
#define HT_CLOCK_EXT 0x1c /* External clock */
|
||||
#define HT_BIAS_1_3 0x21 /* LCD 1/3 bias option, 2 commons default */
|
||||
#define HT_COMMONS_3 0x04 /* 3 commons option */
|
||||
#define HT_COMMONS_4 0x08 /* 4 commons option */
|
||||
|
||||
/*
|
||||
* Mapping of symbols to segments.
|
||||
* 0, 1, 2, 3, 4, 5, 6, 7,
|
||||
* 8, 9, A, b, C, c, d, E,
|
||||
* F, H, h, L, n, N, o, P,
|
||||
* r, t, U, -, ,
|
||||
*/
|
||||
const char char_to_segm[] = {
|
||||
0x7D, 0x60, 0x3E, 0x7A, 0x63, 0x5B, 0x5F, 0x70,
|
||||
0x7F, 0x7B, 0x77, 0x4F, 0x1D, 0x0E, 0x6E, 0x1F,
|
||||
0x17, 0x67, 0x47, 0x0D, 0x46, 0x75, 0x37, 0x06,
|
||||
0x0F, 0x6D, 0x02, 0x00,
|
||||
};
|
||||
|
||||
/*
|
||||
* File descriptor for GPIO driver.
|
||||
*/
|
||||
int gpio;
|
||||
|
||||
/*
|
||||
* Suspend the process for some amount of milliseconds.
|
||||
*/
|
||||
void mdelay(unsigned msec)
|
||||
{
|
||||
usleep(msec * 1000);
|
||||
}
|
||||
|
||||
/*
|
||||
* Send a series of bits to HT1621.
|
||||
* Up to 8 bits, high bit first.
|
||||
* Max clock rate is 150kHz.
|
||||
*/
|
||||
void ht_send(int nbits, int data)
|
||||
{
|
||||
data <<= (8 - nbits);
|
||||
gpio_wr_clear();
|
||||
while (nbits-- > 0) {
|
||||
if (data & 0x80)
|
||||
gpio_data_set();
|
||||
else
|
||||
gpio_data_clear();
|
||||
gpio_wr_set();
|
||||
gpio_wr_clear();
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Send command to HT1621.
|
||||
*/
|
||||
void ht_cmd(int command)
|
||||
{
|
||||
gpio_cs_clear();
|
||||
ht_send(3, 0x4); /* Mode "100" */
|
||||
ht_send(8, command);
|
||||
gpio_cs_set();
|
||||
}
|
||||
|
||||
/*
|
||||
* Send data and command.
|
||||
*/
|
||||
void ht_write(int addr, int data)
|
||||
{
|
||||
gpio_cs_clear();
|
||||
ht_send(3, 0x5); /* Mode "101" */
|
||||
ht_send(6, addr << 1); /* Half-byte address 6 bits */
|
||||
ht_send(8, data); /* Data 8 bits */
|
||||
gpio_cs_set();
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize LCD controller.
|
||||
*/
|
||||
void lcd_init()
|
||||
{
|
||||
/* Open GPIO driver. */
|
||||
gpio = open("/dev/porta", 1);
|
||||
if (gpio < 0) {
|
||||
perror("/dev/porta");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Configure pins RE0-RE2 as outputs. */
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CONFOUT, 0x07);
|
||||
gpio_cs_set();
|
||||
gpio_wr_clear();
|
||||
|
||||
/* Setup appropriate HT1621 mode. */
|
||||
ht_cmd(HT_SYS_EN);
|
||||
ht_cmd(HT_CLOCK_RC);
|
||||
ht_cmd(HT_BIAS_1_3 | HT_COMMONS_4);
|
||||
ht_cmd(HT_LCD_ON);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set display memory to given value.
|
||||
*/
|
||||
void lcd_clear(int value)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<6; i++) {
|
||||
ht_write(i, value);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* LCD on/off.
|
||||
*/
|
||||
void lcd_enable(int on)
|
||||
{
|
||||
if (on)
|
||||
ht_cmd(HT_LCD_ON);
|
||||
else
|
||||
ht_cmd(HT_LCD_OFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* Display data.
|
||||
* val - Data to be displayed, 0-999999
|
||||
* dot - Display decimal dot, 0-3
|
||||
* bat - Battery level, 0-3
|
||||
*/
|
||||
void lcd_display(unsigned val, int dot, int bat)
|
||||
{
|
||||
int i, byte[6];
|
||||
|
||||
/* Set numeric value. */
|
||||
byte[5] = char_to_segm[val / 100000];
|
||||
byte[4] = char_to_segm[(val / 10000) % 10];
|
||||
byte[3] = char_to_segm[(val / 1000) % 10];
|
||||
byte[2] = char_to_segm[(val / 100) % 10];
|
||||
byte[1] = char_to_segm[(val / 10) % 10];
|
||||
byte[0] = char_to_segm[val % 10];
|
||||
|
||||
/* Enable decimal dot/ */
|
||||
switch (dot) {
|
||||
case 1:
|
||||
byte[0] |= 1 << 7;
|
||||
break;
|
||||
case 2:
|
||||
byte[1] |= 1 << 7;
|
||||
break;
|
||||
case 3:
|
||||
byte[2] |= 1 << 7;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (bat > 0)
|
||||
byte[3] |= 1 << 7;
|
||||
if (bat > 1)
|
||||
byte[4] |= 1 << 7;
|
||||
if (bat > 2)
|
||||
byte[5] |= 1 << 7;
|
||||
|
||||
for (i=0; i<6; i++) {
|
||||
ht_write(i, byte[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Initialize hardware. */
|
||||
lcd_init();
|
||||
|
||||
/* Blink all segments twice. */
|
||||
lcd_clear(0xff);
|
||||
mdelay(1000);
|
||||
lcd_clear(0);
|
||||
mdelay(1000);
|
||||
lcd_clear(0xff);
|
||||
mdelay(1000);
|
||||
lcd_clear(0);
|
||||
mdelay(1000);
|
||||
|
||||
/* Show all characters on all segments. */
|
||||
for (i=0; i<sizeof(char_to_segm); i++) {
|
||||
lcd_clear(char_to_segm[i]);
|
||||
mdelay(200);
|
||||
}
|
||||
lcd_clear(0);
|
||||
|
||||
/* Display counter 0 to 999999. */
|
||||
for (;;) {
|
||||
for (i=0; i<999999; i++) {
|
||||
lcd_display(i, i/10%4, i/10%4);
|
||||
mdelay(100);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
666
share/examples/c/tetris.c
Normal file
666
share/examples/c/tetris.c
Normal file
@@ -0,0 +1,666 @@
|
||||
/*
|
||||
* Tetris (C) Copyright 1995, Vadim Antonov
|
||||
* Port to RetroBSD (C) 2015, Serge Vakulenko
|
||||
*
|
||||
* This program is designed to run on Olimex Duinomite board
|
||||
* with SainSmart Graphic LCD4884 shield, modified for 3.3V.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* and its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that the above copyright notice appear in all
|
||||
* copies and that both that the copyright notice and this
|
||||
* permission notice and warranty disclaimer appear in supporting
|
||||
* documentation, and that the name of the author not be used in
|
||||
* advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission.
|
||||
*
|
||||
* The author disclaim all warranties with regard to this
|
||||
* software, including all implied warranties of merchantability
|
||||
* and fitness. In no event shall the author be liable for any
|
||||
* special, indirect or consequential damages or any damages
|
||||
* whatsoever resulting from loss of use, data or profits, whether
|
||||
* in an action of contract, negligence or other tortious action,
|
||||
* arising out of or in connection with the use or performance of
|
||||
* this software.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/gpio.h>
|
||||
|
||||
#define PITWIDTH 12
|
||||
#define PITDEPTH 21
|
||||
|
||||
#define NSHAPES 7
|
||||
#define NBLOCKS 5
|
||||
|
||||
#define FIN 999
|
||||
|
||||
typedef struct {
|
||||
int x, y;
|
||||
} coord_t;
|
||||
|
||||
typedef struct {
|
||||
int dx, dy;
|
||||
coord_t p[NBLOCKS];
|
||||
} shape_t;
|
||||
|
||||
const shape_t shape [NSHAPES] = {
|
||||
/* OOOO */ { 0, 3, { {0,0}, {0,1}, {0,2}, {0,3}, {FIN,FIN} } },
|
||||
|
||||
/* O */ { 1, 2, { {0,0}, {1,0}, {1,1}, {1,2}, {FIN,FIN} } },
|
||||
/* OOO */
|
||||
|
||||
/* O */ { 1, 2, { {0,1}, {1,0}, {1,1}, {1,2}, {FIN,FIN} } },
|
||||
/* OOO */
|
||||
|
||||
/* O */ { 1, 2, { {0,2}, {1,0}, {1,1}, {1,2}, {FIN,FIN} } },
|
||||
/* OOO */
|
||||
|
||||
/* OO */ { 1, 2, { {0,0}, {0,1}, {1,1}, {1,2}, {FIN,FIN} } },
|
||||
/* OO */
|
||||
|
||||
/* OO */ { 1, 2, { {0,1}, {0,2}, {1,0}, {1,1}, {FIN,FIN} } },
|
||||
/* OO */
|
||||
|
||||
/* OO */ { 1, 1, { {0,0}, {0,1}, {1,0}, {1,1}, {FIN,FIN} } },
|
||||
/* OO */
|
||||
};
|
||||
|
||||
int pit [PITDEPTH+1] [PITWIDTH];
|
||||
int pitcnt [PITDEPTH];
|
||||
coord_t old [NBLOCKS], new [NBLOCKS], chk [NBLOCKS];
|
||||
int gpio; /* File descriptor of GPIO driver. */
|
||||
int adc3; /* File descriptor of ADC3 driver. */
|
||||
|
||||
/*-------------------------------------------------------------
|
||||
* Definitions for a "digital" joystick at A0 analog input.
|
||||
* Button values are determined by resistors on a board.
|
||||
*/
|
||||
enum {
|
||||
JOYSTICK_LEFT,
|
||||
JOYSTICK_SELECT,
|
||||
JOYSTICK_DOWN,
|
||||
JOYSTICK_RIGHT,
|
||||
JOYSTICK_UP,
|
||||
JOYSTICK_IDLE = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize ADC for a joystick.
|
||||
*/
|
||||
void joystick_init()
|
||||
{
|
||||
/* Open ADC driver. */
|
||||
adc3 = open("/dev/adc3", 0);
|
||||
if (adc3 < 0) {
|
||||
perror("/dev/adc3");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get a state of joystick.
|
||||
* Convert ADC value to key number.
|
||||
* Input buttons are connected to a series network of resistors:
|
||||
* GND - 3.3k - 1k - 620 - 330 - 2k - +3.3V
|
||||
* Expected values are:
|
||||
* 0 - 144 - 329 - 506 - 741 - 1023
|
||||
*/
|
||||
int joystick_get()
|
||||
{
|
||||
static const unsigned level[5] = { 72, 236, 417, 623, 882 };
|
||||
unsigned input, k;
|
||||
char buf[16];
|
||||
|
||||
if (read(adc3, buf, sizeof(buf)) <= 0) {
|
||||
perror("adc");
|
||||
exit(-1);
|
||||
}
|
||||
input = strtol(buf, 0, 10);
|
||||
for (k=0; k<5; k++) {
|
||||
if (input < level[k]) {
|
||||
return k;
|
||||
}
|
||||
}
|
||||
return JOYSTICK_IDLE;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------
|
||||
* Routines for Nokia 5110 display.
|
||||
* See Philips PCD8544 datasheet.
|
||||
*/
|
||||
#define NROW 48
|
||||
#define NCOL 84
|
||||
|
||||
/*
|
||||
* Pinout for SainSmart Graphic LCD4884 Shield.
|
||||
*/
|
||||
#define MASKE_LCD_SCK (1 << 2) /* signal D2, pin RE2 */
|
||||
#define MASKE_LCD_MOSI (1 << 3) /* signal D3, pin RE3 */
|
||||
#define MASKE_LCD_DC (1 << 4) /* signal D4, pin RE4 */
|
||||
#define MASKE_LCD_CS (1 << 5) /* signal D5, pin RE5 */
|
||||
#define MASKE_LCD_RST (1 << 6) /* signal D6, pin RE6 */
|
||||
#define MASKE_LCD_BL (1 << 7) /* signal D7, pin RE7 */
|
||||
|
||||
static unsigned char gpanel_screen [NROW*NCOL/8];
|
||||
int gpanel_row, gpanel_col;
|
||||
|
||||
static void lcd_cs(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_CS);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_CS);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_rst(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_RST);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_RST);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_dc(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_DC);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_DC);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_bl(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_BL);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_BL);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_mosi(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_MOSI);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_MOSI);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_sck(unsigned on)
|
||||
{
|
||||
if (on) {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_SCK);
|
||||
} else {
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_SCK);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_write(unsigned byte, unsigned data_flag)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
lcd_cs(0);
|
||||
lcd_dc(data_flag);
|
||||
for (i=0; i<8; i++, byte<<=1) {
|
||||
lcd_mosi(byte & 0x80); /* SDIN = bit[i] */
|
||||
lcd_sck(0); /* SCLK = 0 */
|
||||
lcd_sck(1); /* SCLK = 1 */
|
||||
}
|
||||
lcd_cs(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up hardware for communication to Nokia 5110 LCD Display.
|
||||
* Do not clear the display.
|
||||
* Leave backlight turned off.
|
||||
*/
|
||||
void gpanel_init()
|
||||
{
|
||||
gpanel_row = 0;
|
||||
gpanel_col = 0;
|
||||
|
||||
/* Open GPIO driver. */
|
||||
gpio = open("/dev/porta", 0);
|
||||
if (gpio < 0) {
|
||||
perror("/dev/porta");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set pins as outputs.
|
||||
*/
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CONFOUT, MASKE_LCD_SCK |
|
||||
MASKE_LCD_MOSI | MASKE_LCD_DC | MASKE_LCD_CS |
|
||||
MASKE_LCD_RST | MASKE_LCD_BL);
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, MASKE_LCD_RST | MASKE_LCD_CS);
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, MASKE_LCD_SCK |
|
||||
MASKE_LCD_MOSI | MASKE_LCD_DC | MASKE_LCD_BL);
|
||||
|
||||
/* Turn off backlight. */
|
||||
lcd_bl(0);
|
||||
|
||||
/* Reset the display. */
|
||||
lcd_rst(0);
|
||||
usleep(10000); // need 1 usec
|
||||
lcd_rst(1);
|
||||
usleep(10000); // need 1 usec
|
||||
|
||||
lcd_write(0x21, 0); // Enable extended instruction set
|
||||
lcd_write(0xbf, 0); // Set Vop - contrast level
|
||||
lcd_write(0x04, 0); // Set temperature coefficient to 0
|
||||
lcd_write(0x14, 0); // Set bias to 4
|
||||
lcd_write(0x20, 0); // Back to normal instruction set
|
||||
lcd_write(0x0c, 0); // Set normal mode
|
||||
|
||||
/* Enable backlight. */
|
||||
lcd_bl(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the the LCD screen.
|
||||
*/
|
||||
void gpanel_clear()
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
/* Clear data */
|
||||
lcd_write(0x40, 0);
|
||||
lcd_write(0x80, 0);
|
||||
for (i=0; i<NROW*NCOL/8; i++) {
|
||||
gpanel_screen[i] = 0;
|
||||
lcd_write(0, 1);
|
||||
}
|
||||
gpanel_row = 0;
|
||||
gpanel_col = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lights a single pixel in the specified color
|
||||
* at the specified x and y addresses
|
||||
*/
|
||||
void gpanel_pixel(int x, int y, int color)
|
||||
{
|
||||
unsigned char *data;
|
||||
|
||||
if (x >= NCOL || y >= NROW)
|
||||
return;
|
||||
data = &gpanel_screen [(y >> 3) * NCOL + x];
|
||||
|
||||
if (color)
|
||||
*data |= 1 << (y & 7);
|
||||
else
|
||||
*data &= ~(1 << (y & 7));
|
||||
|
||||
lcd_write(0x40 | (y >> 3), 0);
|
||||
lcd_write(0x80 | x, 0);
|
||||
lcd_write(*data, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw a filled rectangle in the specified color from (x1,y1) to (x2,y2).
|
||||
*
|
||||
* The best way to fill a rectangle is to take advantage of the "wrap-around" featute
|
||||
* built into the Philips PCF8833 controller. By defining a drawing box, the memory can
|
||||
* be simply filled by successive memory writes until all pixels have been illuminated.
|
||||
*/
|
||||
void gpanel_rect_filled(int x0, int y0, int x1, int y1, int color)
|
||||
{
|
||||
/* Temporary solution */
|
||||
int xmin, xmax, ymin, ymax, x, y;
|
||||
|
||||
/* calculate the min and max for x and y directions */
|
||||
if (x0 <= x1) {
|
||||
xmin = x0;
|
||||
xmax = x1;
|
||||
} else {
|
||||
xmin = x1;
|
||||
xmax = x0;
|
||||
}
|
||||
if (y0 <= y1) {
|
||||
ymin = y0;
|
||||
ymax = y1;
|
||||
} else {
|
||||
ymin = y1;
|
||||
ymax = y0;
|
||||
}
|
||||
for (y=ymin; y<=ymax; y++)
|
||||
for (x=xmin; x<=xmax; x++)
|
||||
gpanel_pixel(x, y, color);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------
|
||||
* Output piece coordinates given its center and angle
|
||||
*/
|
||||
void translate(const shape_t *t, const coord_t *c, int a, coord_t *res)
|
||||
{
|
||||
coord_t org, tmp;
|
||||
int yw, xw, i;
|
||||
|
||||
if (a & 1) { /* 90 deg */
|
||||
xw = t->dy;
|
||||
yw = t->dx;
|
||||
} else {
|
||||
xw = t->dx;
|
||||
yw = t->dy;
|
||||
}
|
||||
org = *c;
|
||||
org.x -= (xw + 1) / 2;
|
||||
org.y -= yw / 2;
|
||||
if (org.y < 0)
|
||||
org.y = 0;
|
||||
if (org.y + yw >= PITWIDTH && c->y <= PITWIDTH)
|
||||
org.y = PITWIDTH-1 - yw;
|
||||
for (i=0; t->p[i].x!=FIN; i++) {
|
||||
switch (a) {
|
||||
case 0:
|
||||
res[i].x = t->p[i].x;
|
||||
res[i].y = t->p[i].y;
|
||||
break;
|
||||
case 3:
|
||||
res[i].x = xw - t->p[i].y;
|
||||
res[i].y = t->p[i].x;
|
||||
break;
|
||||
case 2:
|
||||
res[i].x = xw - t->p[i].x;
|
||||
res[i].y = yw - t->p[i].y;
|
||||
break;
|
||||
case 1:
|
||||
res[i].x = t->p[i].y;
|
||||
res[i].y = yw - t->p[i].x;
|
||||
}
|
||||
res[i].x += org.x;
|
||||
res[i].y += org.y;
|
||||
}
|
||||
res[i].x = res[i].y = FIN;
|
||||
|
||||
do {
|
||||
xw = 0;
|
||||
for (i=0; res[i+1].x!=FIN; i++) {
|
||||
if (res[i].x < res[i+1].x)
|
||||
continue;
|
||||
if (res[i].x == res[i+1].x && res[i].y <= res[i+1].y)
|
||||
continue;
|
||||
xw++;
|
||||
tmp = res[i];
|
||||
res[i] = res[i+1];
|
||||
res[i+1] = tmp;
|
||||
}
|
||||
} while (xw);
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw the block
|
||||
*/
|
||||
void draw_block(int h, int w, int visible)
|
||||
{
|
||||
h *= 4;
|
||||
w *= 4;
|
||||
if (visible) {
|
||||
gpanel_rect_filled(NCOL-1 - h, w, NCOL-1 - (h + 3), w + 3, 1);
|
||||
} else {
|
||||
gpanel_rect_filled(NCOL-1 - h, w, NCOL-1 - (h + 3), w + 3, 0);
|
||||
|
||||
if (h == (PITDEPTH-1)*5)
|
||||
gpanel_pixel(NCOL-1 - (h + 3), w + 2, 1);
|
||||
|
||||
if (w == 0)
|
||||
gpanel_pixel(NCOL-1 - (h + 2), w, 1);
|
||||
else if (w % 16 == 12)
|
||||
gpanel_pixel(NCOL-1 - (h + 2), w + 3, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Move the piece
|
||||
*/
|
||||
void move(coord_t *old, coord_t *new)
|
||||
{
|
||||
for (;;) {
|
||||
if (old->x == FIN) {
|
||||
draw: if (new->x == FIN)
|
||||
break;
|
||||
if (new->x >= 0)
|
||||
draw_block(new->x, new->y, 1);
|
||||
new++;
|
||||
continue;
|
||||
}
|
||||
if (new->x == FIN) {
|
||||
clear: if (old->x >= 0)
|
||||
draw_block(old->x, old->y, 0);
|
||||
old++;
|
||||
continue;
|
||||
}
|
||||
if (old->x > new->x)
|
||||
goto draw;
|
||||
if (old->x < new->x)
|
||||
goto clear;
|
||||
if (old->y > new->y)
|
||||
goto draw;
|
||||
if (old->y != new->y)
|
||||
goto clear;
|
||||
/* old & new at the same place */
|
||||
old++;
|
||||
new++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw the pit
|
||||
*/
|
||||
void clear()
|
||||
{
|
||||
int h, w;
|
||||
|
||||
for (h=0; h<PITDEPTH; h++) {
|
||||
for (w=0; w<PITWIDTH; w++) {
|
||||
draw_block(h, w, 0);
|
||||
pit[h][w] = 0;
|
||||
}
|
||||
pitcnt[h] = 0;
|
||||
}
|
||||
for (w=0; w<PITWIDTH; w++)
|
||||
pit[PITDEPTH][w] = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* The piece reached the bottom
|
||||
*/
|
||||
void stopped(coord_t *c)
|
||||
{
|
||||
int h, nfull, w, k;
|
||||
|
||||
/* Count the full lines */
|
||||
nfull = 0;
|
||||
for (; c->x!=FIN; c++) {
|
||||
if (c->x <= 0) {
|
||||
/* Game over. */
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
pit[c->x][c->y] = 1;
|
||||
++pitcnt[c->x];
|
||||
if (pitcnt[c->x] == PITWIDTH)
|
||||
nfull++;
|
||||
}
|
||||
if (! nfull)
|
||||
return;
|
||||
|
||||
/* Clear upper nfull lines */
|
||||
for (h=0; h<nfull; h++) {
|
||||
for (w=0; w<PITWIDTH; w++) {
|
||||
if (pit[h][w]) {
|
||||
draw_block(h, w, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Move lines down */
|
||||
k = nfull;
|
||||
for (h=nfull; h<PITDEPTH && k>0; h++) {
|
||||
if (pitcnt[h-k] == PITWIDTH) {
|
||||
k--;
|
||||
h--;
|
||||
continue;
|
||||
}
|
||||
for (w=0; w<PITWIDTH; w++) {
|
||||
if (pit[h][w] != pit[h-k][w]) {
|
||||
draw_block(h, w, pit[h-k][w]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now fix the pit contents */
|
||||
for (h=PITDEPTH-1; h>0; h--) {
|
||||
if (pitcnt[h] != PITWIDTH)
|
||||
continue;
|
||||
memmove(pit[0]+PITWIDTH, pit[0], h * sizeof(pit[0]));
|
||||
memset(pit[0], 0, sizeof(pit[0]));
|
||||
memmove(pitcnt+1, pitcnt, h * sizeof(pitcnt[0]));
|
||||
pitcnt[0] = 0;
|
||||
h++;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int ptype; /* Piece type */
|
||||
int angle, anew; /* Angle */
|
||||
int msec; /* Timeout */
|
||||
coord_t c, cnew, *cp;
|
||||
unsigned up_pressed = 0, left_pressed = 0;
|
||||
unsigned right_pressed = 0, down_pressed = 0;
|
||||
|
||||
joystick_init();
|
||||
gpanel_init();
|
||||
gpanel_clear();
|
||||
|
||||
/* Draw the pit */
|
||||
clear();
|
||||
|
||||
newpiece:
|
||||
ptype = rand() % NSHAPES;
|
||||
angle = rand() % 3;
|
||||
|
||||
c.y = PITWIDTH/2 - 1;
|
||||
for (c.x= -2; ; c.x++) {
|
||||
translate(&shape[ptype], &c, angle, new);
|
||||
for (cp=new; cp->x!=FIN; cp++) {
|
||||
if (cp->x >= 0)
|
||||
goto ok;
|
||||
}
|
||||
}
|
||||
ok:
|
||||
/* Draw new piece */
|
||||
for (cp=new; cp->x!=FIN; cp++) {
|
||||
if (cp->x >= 0) {
|
||||
draw_block(cp->x, cp->y, 1);
|
||||
}
|
||||
}
|
||||
memcpy(old, new, sizeof old);
|
||||
|
||||
msec = 500;
|
||||
for (;;) {
|
||||
cnew = c;
|
||||
anew = angle;
|
||||
|
||||
if (msec <= 0) {
|
||||
/* Timeout: move down */
|
||||
msec = 500;
|
||||
cnew.x++;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
for (cp=chk; cp->x!=FIN; cp++) {
|
||||
if (cp->x >= 0 && pit[cp->x][cp->y]) {
|
||||
stopped(new);
|
||||
goto newpiece;
|
||||
}
|
||||
}
|
||||
goto check;
|
||||
}
|
||||
|
||||
int key = joystick_get();
|
||||
if (key != JOYSTICK_RIGHT)
|
||||
right_pressed = 0;
|
||||
else if (! right_pressed) {
|
||||
right_pressed = 1;
|
||||
|
||||
/* Right: rotate */
|
||||
if (--anew < 0)
|
||||
anew = 3;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
goto check;
|
||||
}
|
||||
|
||||
if (key != JOYSTICK_UP)
|
||||
up_pressed = 0;
|
||||
else if (! up_pressed) {
|
||||
up_pressed = 1;
|
||||
|
||||
/* Up: move left. */
|
||||
if (cnew.y <= 0)
|
||||
continue;
|
||||
cnew.y--;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
goto check;
|
||||
}
|
||||
|
||||
if (key != JOYSTICK_DOWN)
|
||||
down_pressed = 0;
|
||||
else if (! down_pressed) {
|
||||
down_pressed = 1;
|
||||
|
||||
/* Down: move right */
|
||||
if (cnew.y >= PITWIDTH-1)
|
||||
continue;
|
||||
cnew.y++;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
goto check;
|
||||
}
|
||||
|
||||
if (key != JOYSTICK_LEFT)
|
||||
left_pressed = 0;
|
||||
else if (! left_pressed) {
|
||||
left_pressed = 1;
|
||||
|
||||
/* Right: drop */
|
||||
for (;;) {
|
||||
cnew.x++;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
for (cp=chk; cp->x!=FIN; cp++) {
|
||||
if (cp->x >= 0 && pit[cp->x][cp->y]) {
|
||||
cnew.x--;
|
||||
translate(&shape[ptype], &cnew, anew, chk);
|
||||
move(new, chk);
|
||||
stopped(chk);
|
||||
goto newpiece;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
usleep(10000);
|
||||
msec -= 10;
|
||||
continue;
|
||||
check:
|
||||
for (cp=chk; cp->x!=FIN; cp++) {
|
||||
if (cp->y < 0 || cp->y >= PITWIDTH)
|
||||
goto done;
|
||||
}
|
||||
for (cp=chk; cp->x!=FIN; cp++) {
|
||||
if (cp->x >= 0 && pit[cp->x][cp->y])
|
||||
goto done;
|
||||
}
|
||||
c = cnew;
|
||||
angle = anew;
|
||||
memcpy(old, new, sizeof old);
|
||||
memcpy(new, chk, sizeof new);
|
||||
move(old, new);
|
||||
done: ;
|
||||
}
|
||||
}
|
||||
15
share/examples/cplus/Makefile-host
Normal file
15
share/examples/cplus/Makefile-host
Normal file
@@ -0,0 +1,15 @@
|
||||
TOPSRC = $(shell cd ../../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS += -Werror
|
||||
|
||||
all: cplus
|
||||
|
||||
cplus: cplus.o
|
||||
${CXX} ${LDFLAGS} -nostdlib -o cplus.elf cplus.o ${LIBS}
|
||||
${OBJDUMP} -S cplus.elf > cplus.dis
|
||||
${SIZE} cplus.elf
|
||||
${ELF2AOUT} cplus.elf $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.elf ${MAN} cplus *.elf *.dis tags *~
|
||||
24
share/examples/cube/Makefile
Normal file
24
share/examples/cube/Makefile
Normal file
@@ -0,0 +1,24 @@
|
||||
PROG = all backlight cube demo
|
||||
|
||||
# Duinomite board
|
||||
#OBJS = duinomite.o
|
||||
|
||||
# Fubarino board
|
||||
OBJS = fubarino.o
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
all: all.c $(OBJS)
|
||||
cc $@.c $(OBJS) -o $@
|
||||
|
||||
backlight: backlight.c $(OBJS)
|
||||
cc $@.c $(OBJS) -o $@
|
||||
|
||||
cube: cube.c $(OBJS)
|
||||
cc $@.c $(OBJS) -o $@
|
||||
|
||||
demo: demo.c $(OBJS)
|
||||
cc $@.c $(OBJS) -o $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *~ $(PROG)
|
||||
16
share/examples/cube/Makefile-host
Normal file
16
share/examples/cube/Makefile-host
Normal file
@@ -0,0 +1,16 @@
|
||||
TOPSRC = $(shell cd ../../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS += -Werror
|
||||
LIBS += -lm
|
||||
|
||||
#all: demo
|
||||
|
||||
demo: demo.o fubarino.o
|
||||
${CC} ${LDFLAGS} -o demo.elf demo.o fubarino.o ${LIBS}
|
||||
${OBJDUMP} -S demo.elf > demo.dis
|
||||
${SIZE} demo.elf
|
||||
${ELF2AOUT} demo.elf $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.elf ${MAN} demo *.elf *.dis tags *~
|
||||
1
share/examples/cube/README.txt
Normal file
1
share/examples/cube/README.txt
Normal file
@@ -0,0 +1 @@
|
||||
Examples for LED cube 8x8x8.
|
||||
25
share/examples/cube/all.c
Normal file
25
share/examples/cube/all.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Demo for LED cube 8x8x8.
|
||||
* Turn on all LEDs.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "cube.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
static unsigned char data[8] = {
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
};
|
||||
int i;
|
||||
|
||||
gpio_init();
|
||||
gpio_le(0);
|
||||
gpio_plane(data);
|
||||
gpio_ext(1);
|
||||
for (;;) {
|
||||
for (i=0; i<8; i++) {
|
||||
gpio_layer(i);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
20
share/examples/cube/backlight.c
Normal file
20
share/examples/cube/backlight.c
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Demo for LED cube 8x8x8.
|
||||
* Test backlight LEDs.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "cube.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
gpio_init();
|
||||
for (;;) {
|
||||
gpio_backlight_upper(1);
|
||||
usleep(500000);
|
||||
gpio_backlight_upper(0);
|
||||
gpio_backlight_lower(1);
|
||||
usleep(500000);
|
||||
gpio_backlight_lower(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
BIN
share/examples/cube/board.jpg
Normal file
BIN
share/examples/cube/board.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
73
share/examples/cube/cube.c
Normal file
73
share/examples/cube/cube.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Demo for LED cube 8x8x8.
|
||||
* Switch between two static images.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <sys/time.h>
|
||||
#include "cube.h"
|
||||
|
||||
void display(int duration, unsigned char *data)
|
||||
{
|
||||
struct timeval t0, now;
|
||||
int z, msec;
|
||||
|
||||
gettimeofday(&t0, 0);
|
||||
z = 0;
|
||||
for (;;) {
|
||||
/* Send layer data. Latch is active,
|
||||
* so previous layer is still displayed. */
|
||||
gpio_plane(data + z*CUBE_SIZE);
|
||||
|
||||
/* Disable output, activate latch,
|
||||
* switch to next layer. */
|
||||
gpio_oe(0);
|
||||
gpio_le(0);
|
||||
gpio_le(1);
|
||||
gpio_layer(z);
|
||||
gpio_oe(1);
|
||||
|
||||
/* Next layer. */
|
||||
z++;
|
||||
if (z >= CUBE_SIZE) {
|
||||
z = 0;
|
||||
|
||||
/* Check time. */
|
||||
gettimeofday(&now, 0);
|
||||
msec = (now.tv_sec - t0.tv_sec) * 1000;
|
||||
msec += (now.tv_usec - t0.tv_usec) / 1000;
|
||||
if (msec >= duration)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
static unsigned char foo[64] = {
|
||||
0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0x81, 0, 0, 0, 0, 0, 0, 0x81,
|
||||
0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff,
|
||||
};
|
||||
static unsigned char bar[64] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0,
|
||||
0, 0x42, 0, 0, 0, 0, 0x42, 0,
|
||||
0, 0x42, 0, 0, 0, 0, 0x42, 0,
|
||||
0, 0x42, 0, 0, 0, 0, 0x42, 0,
|
||||
0, 0x42, 0, 0, 0, 0, 0x42, 0,
|
||||
0, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
gpio_init();
|
||||
gpio_ext(1);
|
||||
for (;;) {
|
||||
display(500, foo);
|
||||
display(500, bar);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
13
share/examples/cube/cube.h
Normal file
13
share/examples/cube/cube.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Interface to LED cube 8x8x8.
|
||||
*/
|
||||
#define CUBE_SIZE 8
|
||||
|
||||
void gpio_init(void);
|
||||
void gpio_ext(int on);
|
||||
void gpio_oe(int active);
|
||||
void gpio_le(int active);
|
||||
void gpio_backlight_upper(int on);
|
||||
void gpio_backlight_lower(int on);
|
||||
void gpio_layer(int z);
|
||||
void gpio_plane(unsigned char *data);
|
||||
3118
share/examples/cube/demo.c
Normal file
3118
share/examples/cube/demo.c
Normal file
File diff suppressed because it is too large
Load Diff
145
share/examples/cube/duinomite.c
Normal file
145
share/examples/cube/duinomite.c
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Interface to LED cube 8x8x8.
|
||||
* The cube is connected to pins D0-D9 of Duinomite board.
|
||||
*
|
||||
* Pin PIC32 Function
|
||||
* ---------------
|
||||
* D0 RE0 Y0 \
|
||||
* D1 RE1 Y1 | Layer select
|
||||
* D2 RE2 Y2 /
|
||||
* D3 RE3 Y3 - Upper backlignt
|
||||
* D4 RE4 Y4 - Lower backlight
|
||||
* D5 RE5 SDI - Serial data \
|
||||
* D6 RE6 CLK - Clock | to shift registers
|
||||
* D7 RE7 /LE - Latch enable |
|
||||
* D8 RB11 /OE - Output enable /
|
||||
* D10 RD11 EXT - Unknown
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/gpio.h>
|
||||
#include "cube.h"
|
||||
|
||||
static int gpio;
|
||||
|
||||
void gpio_init()
|
||||
{
|
||||
char *devname = "/dev/porta";
|
||||
|
||||
/* Open GPIO driver. */
|
||||
gpio = open(devname, 1);
|
||||
if (gpio < 0) {
|
||||
perror(devname);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Configure pins RE0-RE7, RB11 and RD11 as output. */
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CONFOUT, 0xff);
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 0xff);
|
||||
ioctl(gpio, GPIO_PORTB | GPIO_CONFOUT, 1 << 11);
|
||||
ioctl(gpio, GPIO_PORTB | GPIO_CLEAR, 1 << 11);
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CONFOUT, 1 << 11);
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 11);
|
||||
}
|
||||
|
||||
void gpio_ext(int on)
|
||||
{
|
||||
/* EXT signal at RD11. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 11);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 11);
|
||||
}
|
||||
|
||||
void gpio_oe(int active)
|
||||
{
|
||||
/* /OE signal at RB11, active low. */
|
||||
if (active)
|
||||
ioctl(gpio, GPIO_PORTB | GPIO_CLEAR, 1 << 11);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTB | GPIO_SET, 1 << 11);
|
||||
}
|
||||
|
||||
void gpio_le(int active)
|
||||
{
|
||||
/* /LE signal at RE7, active low. */
|
||||
if (active)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 7);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 7);
|
||||
}
|
||||
|
||||
void gpio_backlight_upper(int on)
|
||||
{
|
||||
/* Y4 signal at RE4. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 4);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 4);
|
||||
}
|
||||
|
||||
void gpio_backlight_lower(int on)
|
||||
{
|
||||
/* Y3 signal at RE3. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 3);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 3);
|
||||
}
|
||||
|
||||
void gpio_layer(int z)
|
||||
{
|
||||
/* Y0-Y2 signals at RE0-RE23. */
|
||||
if (z & 1)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 0);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 0);
|
||||
|
||||
if (z & 2)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 1);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 1);
|
||||
|
||||
if (z & 4)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 2);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 2);
|
||||
}
|
||||
|
||||
void gpio_plane(unsigned char *data)
|
||||
{
|
||||
int i, n, val;
|
||||
|
||||
/* Send 8 bytes of tada to shift registers. */
|
||||
for (i=0; i<8; i+=2) {
|
||||
val = *data++;
|
||||
for (n=0; n<8; n++) {
|
||||
/* SDI signal at RE5. */
|
||||
if (val & 0x80)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 5);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 5);
|
||||
|
||||
/* CLK signal at RE6. */
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 6);
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 6);
|
||||
|
||||
val <<= 1;
|
||||
}
|
||||
val = *data++;
|
||||
for (n=0; n<8; n++) {
|
||||
/* SDI signal at RE5. */
|
||||
if (val & 1)
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 5);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 5);
|
||||
|
||||
/* CLK signal at RE6. */
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_SET, 1 << 6);
|
||||
ioctl(gpio, GPIO_PORTE | GPIO_CLEAR, 1 << 6);
|
||||
|
||||
val >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
143
share/examples/cube/fubarino.c
Normal file
143
share/examples/cube/fubarino.c
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Interface to LED cube 8x8x8.
|
||||
* The cube is connected to pins 4-13 of Fubarino board.
|
||||
*
|
||||
* Pin PIC32 Function
|
||||
* ---------------
|
||||
* 4 RD0 Y0 \
|
||||
* 5 RC13 Y1 | Layer select
|
||||
* 6 RC14 Y2 /
|
||||
* 7 RD1 Y3 - Upper backlignt
|
||||
* 8 RD2 Y4 - Lower backlight
|
||||
* 9 RD3 SDI - Serial data \
|
||||
* 10 RD4 CLK - Clock | to shift registers
|
||||
* 11 RD5 /LE - Latch enable |
|
||||
* 12 RD6 /OE - Output enable /
|
||||
* 13 RD7 EXT - Unknown
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/gpio.h>
|
||||
#include "cube.h"
|
||||
|
||||
static int gpio;
|
||||
|
||||
void gpio_init()
|
||||
{
|
||||
char *devname = "/dev/porta";
|
||||
|
||||
/* Open GPIO driver. */
|
||||
gpio = open(devname, 1);
|
||||
if (gpio < 0) {
|
||||
perror(devname);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* Configure pins RD0-RD7, RC13 and RC14 as output. */
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CONFOUT, 0xff);
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 0xff);
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_CONFOUT, 3 << 13);
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_CLEAR, 3 << 13);
|
||||
}
|
||||
|
||||
void gpio_ext(int on)
|
||||
{
|
||||
/* EXT signal at RD7. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 7);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 7);
|
||||
}
|
||||
|
||||
void gpio_oe(int active)
|
||||
{
|
||||
/* /OE signal at RD6, active low. */
|
||||
if (active)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 6);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 6);
|
||||
}
|
||||
|
||||
void gpio_le(int active)
|
||||
{
|
||||
/* /LE signal at RD5, active low. */
|
||||
if (active)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 5);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 5);
|
||||
}
|
||||
|
||||
void gpio_backlight_upper(int on)
|
||||
{
|
||||
/* Y4 signal at RD2. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 2);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 2);
|
||||
}
|
||||
|
||||
void gpio_backlight_lower(int on)
|
||||
{
|
||||
/* Y3 signal at RD1. */
|
||||
if (on)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 1);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 1);
|
||||
}
|
||||
|
||||
void gpio_layer(int z)
|
||||
{
|
||||
/* Y0-Y2 signals at RD0, RC13, RC14. */
|
||||
if (z & 1)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 0);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 0);
|
||||
|
||||
if (z & 2)
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_CLEAR, 1 << 13);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_SET, 1 << 13);
|
||||
|
||||
if (z & 4)
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_CLEAR, 1 << 14);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTC | GPIO_SET, 1 << 14);
|
||||
}
|
||||
|
||||
void gpio_plane(unsigned char *data)
|
||||
{
|
||||
int i, n, val;
|
||||
|
||||
/* Send 8 bytes of tada to shift registers. */
|
||||
for (i=0; i<8; i+=2) {
|
||||
val = *data++;
|
||||
for (n=0; n<8; n++) {
|
||||
/* SDI signal at RD3. */
|
||||
if (val & 0x80)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 3);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 3);
|
||||
|
||||
/* CLK signal at RD4. */
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 4);
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 4);
|
||||
|
||||
val <<= 1;
|
||||
}
|
||||
val = *data++;
|
||||
for (n=0; n<8; n++) {
|
||||
/* SDI signal at RD3. */
|
||||
if (val & 1)
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 3);
|
||||
else
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 3);
|
||||
|
||||
/* CLK signal at RD4. */
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_SET, 1 << 4);
|
||||
ioctl(gpio, GPIO_PORTD | GPIO_CLEAR, 1 << 4);
|
||||
|
||||
val >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
share/examples/cube/schematic.jpg
Normal file
BIN
share/examples/cube/schematic.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 264 KiB |
20
share/examples/curses/Makefile
Normal file
20
share/examples/curses/Makefile
Normal file
@@ -0,0 +1,20 @@
|
||||
PROG = flip jump timer typetext
|
||||
#CFLAGS = -DNCURSES_OPAQUE=0
|
||||
LIBS = -lcurses -ltermlib
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
clean:
|
||||
rm -f *.o *~ $(PROG)
|
||||
|
||||
flip: flip.c
|
||||
cc $(CFLAGS) -o $@ $@.c $(LIBS)
|
||||
|
||||
jump: jump.c
|
||||
cc $(CFLAGS) -o $@ $@.c $(LIBS)
|
||||
|
||||
timer: timer.c
|
||||
cc $(CFLAGS) -o $@ $@.c $(LIBS)
|
||||
|
||||
typetext: typetext.c
|
||||
cc $(CFLAGS) -o $@ $@.c $(LIBS)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user