Changeset 7723


Ignore:
Timestamp:
2007-06-25T10:47:10+02:00 (11 years ago)
Author:
juhosg
Message:

[adm5120] from now on, the lzma loader is able to pass parameters to the kernel

Location:
trunk/target/linux
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/adm5120-2.6/image/Makefile

    r7673 r7723  
    88include $(INCLUDE_DIR)/image.mk 
    99 
     10IMGNAME = $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL) 
    1011LOADER_MAKE = $(MAKE) -C lzma-loader KDIR=$(KDIR) 
    1112 
    12 define PrepareLoader 
    13         $(LOADER_MAKE) LOADER=$(1) LOADER_DATA="" \ 
    14                 LZMA_TEXT_START=$(2) LZMA_STARTUP_ORG=$(3) \ 
    15                 compile 
    16  
    17 endef 
    18 define PrepareLZMAKernel 
    19         $(LOADER_MAKE) LOADER=vmlinux-lzma-$(1) LOADER_DATA=$(KDIR)/vmlinux.lzma \ 
    20                 LZMA_TEXT_START=$(2) LZMA_STARTUP_ORG=$(3) \ 
    21                 compile 
     13define Image/Build/Loader 
     14        $(LOADER_MAKE) LOADER=loader-$(1).$(2) LOADER_DATA="" \ 
     15                LZMA_TEXT_START=$(3) LZMA_STARTUP_ORG=$(4) \ 
     16                CONFIG_PASS_KARGS=$(5) CONFIG_BOARD=$(6) \ 
     17                compile loader.$(2) 
    2218endef 
    2319 
     
    2824define Image/Prepare 
    2925        cat $(KDIR)/vmlinux | $(STAGING_DIR)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma 
    30 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) 
    31         $(call PrepareLoader,generic,0x80500000,0) 
    32         $(call PrepareLoader,admboot,0x80500000,0x6D8) 
    33 else 
    34         $(call PrepareLZMAKernel,generic,0x80500000,0) 
    35         $(call PrepareLZMAKernel,admboot,0x80500000,0x6D8) 
    36 endif 
    3726endef 
    3827 
     
    4736endef 
    4837 
     38define Image/Build/TRX 
     39        $(STAGING_DIR)/bin/trx -o $(1) -f $(3) -f $(KDIR)/vmlinux.lzma \ 
     40                $(call trxalign/$(2)) -f $(KDIR)/root.$(2) 
     41endef 
     42 
     43define Image/Build/TRXNoloader 
     44        $(STAGING_DIR)/bin/trx -o $(1) -f $(KDIR)/vmlinux.lzma \ 
     45                $(call trxalign/$(2)) -f $(KDIR)/root.$(2) 
     46endef 
     47 
    4948define Image/Build/Compex 
    50         $(CP) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).trx $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).trx 
     49        $(call Image/Build/Loader,$(2),gz,0x80500000,0,y,$(2)) 
     50        $(call Image/Build/TRX,$(IMGNAME)-$(3)-$(2).trx,$(1),$(KDIR)/loader-$(2).gz) 
    5151endef 
    5252 
    5353define Image/Build/Edimax 
     54        $(call Image/Build/Loader,$(2),gz,0x80500000,0x6D8,y,$(2)) 
     55        $(call Image/Build/TRXNoloader,$(IMGNAME)-$(3)-$(2).trx,$(1)) 
    5456        $(STAGING_DIR)/bin/mkcsysimg -B $(4) -d -w \ 
    55                 -r $(KDIR)/loader-admboot.gz \ 
    56                 -x $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-noloader.trx \ 
    57                 $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).bin 
     57                -r $(KDIR)/loader-$(2).gz \ 
     58                -x $(IMGNAME)-$(3)-$(2).trx \ 
     59                $(IMGNAME)-$(3)-$(2).bin 
     60endef 
     61 
     62define Image/Build/Infineon 
     63        $(call Image/Build/Loader,$(2),gz,0x80500000,0x6D8,y,$(2)) 
     64        $(call Image/Build/TRXNoloader,$(IMGNAME)-$(3)-$(2).trx,$(1)) 
     65        dd if=$(KDIR)/loader-$(2).gz of=$(IMGNAME)-$(3)-$(2).img bs=64k conv=sync 
     66        cat $(IMGNAME)-$(3)-$(2).trx >>$(IMGNAME)-$(3)-$(2).img 
    5867endef 
    5968 
    6069define Image/Build/MyLoader 
    61         $(CP) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-noloader.trx $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).trx 
     70        $(call Image/Build/Loader,$(2),gz,0x80500000,0) 
     71        $(call Image/Build/TRXNoloader,$(IMGNAME)-$(3)-$(2).trx,$(1)) 
    6272        $(STAGING_DIR)/bin/mkmylofw -B $(4) \ 
    6373                -p0x20000:0x10000:ahp:0x80001000 \ 
    6474                -p0x30000:0 \ 
    65                 -b0x20000:0x10000:h:$(KDIR)/loader-generic.gz \ 
    66                 -b0x30000:0::$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).trx \ 
    67                 $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).bin 
     75                -b0x20000:0x10000:h:$(KDIR)/loader-$(2).gz \ 
     76                -b0x30000:0::$(IMGNAME)-$(3)-$(2).trx \ 
     77                $(IMGNAME)-$(3)-$(2).bin 
    6878endef 
    6979 
    7080define Image/Build/RouterBoard 
    71         $(CP) $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux 
     81        $(CP) $(KDIR)/vmlinux.elf $(IMGNAME)-vmlinux 
    7282endef 
    7383 
    7484define Image/Build 
    75         $(STAGING_DIR)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).trx -f $(KDIR)/loader-generic.gz -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1) 
    76         $(STAGING_DIR)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-noloader.trx -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1) 
    77 ifneq ($(1),jffs2-128K) 
    78         $(call Image/Build/Compex,$(1),wp54g-wrt,$(patsubst jffs2-%,jffs2,$(1))) 
     85# this line is here intentionally 
     86ifneq ($(1),jffs2-256k) 
     87ifneq ($(1),jffs2-128k) 
     88        $(call Image/Build/Compex,$(1),wp54g-wrt,$(patsubst jffs2-%,jffs2,$(1)),WP54G-WRT) 
    7989        $(call Image/Build/Edimax,$(1),br-6104k,$(patsubst jffs2-%,jffs2,$(1)),BR-6104K) 
    8090        $(call Image/Build/Edimax,$(1),br-6104kp,$(patsubst jffs2-%,jffs2,$(1)),BR-6104KP) 
     
    90100        $(call Image/Build/Edimax,$(1),br-6524wg,$(patsubst jffs2-%,jffs2,$(1)),BR-6524WG) 
    91101        $(call Image/Build/Edimax,$(1),br-6524wp,$(patsubst jffs2-%,jffs2,$(1)),BR-6524WP) 
     102        $(call Image/Build/Infineon,$(1),easy-5120,$(patsubst jffs2-%,jffs2,$(1))) 
     103        $(call Image/Build/Infineon,$(1),easy-5120-rt,$(patsubst jffs2-%,jffs2,$(1))) 
     104        $(call Image/Build/Infineon,$(1),easy-5120p-ata,$(patsubst jffs2-%,jffs2,$(1))) 
     105        $(call Image/Build/Infineon,$(1),easy-83000,$(patsubst jffs2-%,jffs2,$(1))) 
    92106        $(call Image/Build/MyLoader,$(1),np27g,$(patsubst jffs2-%,jffs2,$(1)),NP27G) 
    93107        $(call Image/Build/MyLoader,$(1),np28g,$(patsubst jffs2-%,jffs2,$(1)),NP28G) 
     
    98112        $(call Image/Build/MyLoader,$(1),wpp54ag,$(patsubst jffs2-%,jffs2,$(1)),WPP54AG) 
    99113endif 
     114endif 
    100115ifeq ($(1),tgz) 
    101116        $(call Image/Build/RouterBoard) 
     
    104119 
    105120define Image/Build/LZMAKernel 
    106         $(CP) $(KDIR)/loader-vmlinux-lzma-$(2).$(3) \ 
    107             $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux-lzma-$(1).$(3) 
     121        $(LOADER_MAKE) TARGET_DIR=$(BIN_DIR) \ 
     122                LOADER=openwrt-$(BOARD)-$(KERNEL)-ramfs-lzma-$(1).$(2) \ 
     123                LOADER_DATA=$(KDIR)/vmlinux.lzma \ 
     124                LZMA_TEXT_START=$(3) LZMA_STARTUP_ORG=$(4) \ 
     125                CONFIG_PASS_KARGS=$(5) CONFIG_BOARD=$(6) \ 
     126                compile loader.$(2) 
     127endef 
     128 
     129define Image/Build/LZMAKernel/Compex 
     130        $(call Image/Build/LZMAKernel,$(1),$(2),0x80500000,0,y,$(1)) 
     131endef 
     132 
     133define Image/Build/LZMAKernel/Generic 
     134        $(call Image/Build/LZMAKernel,$(1),$(2),0x80500000,0) 
     135endef 
     136 
     137define Image/Build/LZMAKernel/Admboot 
     138        $(call Image/Build/LZMAKernel,$(1),$(2),0x80500000,0x6D8,y,$(1)) 
    108139endef 
    109140 
    110141define Image/Build/Initramfs 
    111         $(call Image/Build/LZMAKernel,generic,generic,elf) 
    112         $(call Image/Build/LZMAKernel,rb-100,generic,elf) 
    113         $(call Image/Build/LZMAKernel,np27g,generic,bin) 
    114         $(call Image/Build/LZMAKernel,wp54g,generic,bin) 
    115         $(call Image/Build/LZMAKernel,br-6104k,admboot,gz) 
    116         $(call Image/Build/LZMAKernel,cas-771,admboot,gz) 
     142        $(call Image/Build/LZMAKernel/Generic,generic,bin) 
     143        $(call Image/Build/LZMAKernel/Generic,rb-100,elf) 
     144        $(call Image/Build/LZMAKernel/Generic,np27g,bin) 
     145        $(call Image/Build/LZMAKernel/Generic,wp54g,bin) 
     146        $(call Image/Build/LZMAKernel/Compex,wp54g-wrt,bin) 
     147        $(call Image/Build/LZMAKernel/Admboot,br-6104k,gz) 
     148        $(call Image/Build/LZMAKernel/Admboot,easy-5120,gz) 
     149        $(call Image/Build/LZMAKernel/Admboot,easy-83000,gz) 
     150        $(call Image/Build/LZMAKernel/Admboot,cas-630,gz) 
     151        $(call Image/Build/LZMAKernel/Admboot,cas-670,gz) 
     152        $(call Image/Build/LZMAKernel/Admboot,cas-700,gz) 
     153        $(call Image/Build/LZMAKernel/Admboot,cas-771,gz) 
     154        $(call Image/Build/LZMAKernel/Admboot,cas-790,gz) 
     155        $(call Image/Build/LZMAKernel/Admboot,cas-861,gz) 
    117156endef 
    118157 
    119158$(eval $(call BuildImage)) 
    120  
  • trunk/target/linux/adm5120-2.6/image/lzma-loader/Makefile

    r7673 r7723  
    99include $(TOPDIR)/rules.mk 
    1010 
    11 LOADER          := adm5120 
    12 LOADER_NAME     := loader-$(LOADER) 
     11LOADER          := loader.bin 
     12LOADER_NAME     := $(basename $(notdir $(LOADER))) 
    1313LOADER_DATA     := 
     14TARGET_DIR      := 
    1415 
    15 LOADER_BIN      := $(KDIR)/$(LOADER_NAME).bin 
    16 LOADER_GZ       := $(KDIR)/$(LOADER_NAME).gz 
    17 LOADER_ELF      := $(KDIR)/$(LOADER_NAME).elf 
     16ifeq ($(TARGET_DIR),) 
     17TARGET_DIR      := $(KDIR) 
     18endif 
     19 
     20LOADER_BIN      := $(TARGET_DIR)/$(LOADER_NAME).bin 
     21LOADER_GZ       := $(TARGET_DIR)/$(LOADER_NAME).gz 
     22LOADER_ELF      := $(TARGET_DIR)/$(LOADER_NAME).elf 
    1823 
    1924LZMA_STARTUP_ORG:= 0 
     
    2328PKG_BUILD_DIR := $(KDIR)/$(PKG_NAME) 
    2429 
    25 .PHONY : loader-compile 
     30.PHONY : loader-compile loader.bin loader.elf loader.gz 
    2631 
    2732$(PKG_BUILD_DIR)/.prepared: 
     
    3540                LZMA_TEXT_START=$(LZMA_TEXT_START) \ 
    3641                LOADER_DATA=$(LOADER_DATA) \ 
     42                CONFIG_BOARD=$(CONFIG_BOARD) \ 
     43                CONFIG_PASS_KARGS=$(CONFIG_PASS_KARGS) \ 
    3744                clean all 
    3845 
    39 $(LOADER_GZ): $(PKG_BUILD_DIR)/loader.bin 
    40         gzip -nc9 $< > $@ 
     46loader.gz: $(PKG_BUILD_DIR)/loader.bin 
     47        gzip -nc9 $< > $(LOADER_GZ) 
    4148 
    42 $(LOADER_ELF) : $(PKG_BUILD_DIR)/loader.elf 
    43         $(CP) $< $@ 
     49loader.elf: $(PKG_BUILD_DIR)/loader.elf 
     50        $(CP) $< $(LOADER_ELF) 
    4451 
    45 $(LOADER_BIN) : $(PKG_BUILD_DIR)/loader.bin 
    46         $(CP) $< $@ 
     52loader.bin: $(PKG_BUILD_DIR)/loader.bin 
     53        $(CP) $< $(LOADER_BIN) 
    4754 
    4855download: 
    4956prepare: $(PKG_BUILD_DIR)/.prepared 
    50 compile: loader-compile $(LOADER_BIN) $(LOADER_GZ) $(LOADER_ELF) 
     57compile: loader-compile 
    5158 
    5259install: 
     
    5461clean: 
    5562        rm -rf $(PKG_BUILD_DIR) 
    56         rm -f $(KDIR)/loader-*.gz $(KDIR)/loader-*.elf $(KDIR)/loader-*.bin 
     63 
  • trunk/target/linux/adm5120-2.6/image/lzma-loader/src/Makefile

    r7673 r7723  
    2626LZMA_STARTUP_ORG:= 0 
    2727LOADER_DATA     := 
     28CONFIG_PASS_KARGS := 
     29CONFIG_BOARD    := 
    2830 
    2931CC              := $(CROSS_COMPILE)gcc 
     
    5658endif 
    5759 
     60ifneq ($(strip $(CONFIG_PASS_KARGS)),) 
     61CFLAGS          += -DCONFIG_PASS_KARGS 
     62endif 
     63 
     64BOARD_DEF := $(strip $(CONFIG_BOARD)) 
     65BOARD_DEF := $(shell echo $(BOARD_DEF) | tr a-z A-Z | tr -d -) 
     66ifneq ($(BOARD_DEF),) 
     67CFLAGS          += -DCONFIG_BOARD_$(BOARD_DEF) 
     68endif 
     69 
    5870all: loader.bin 
    5971 
     
    8193 
    8294clean: 
    83         rm -f *.gz *.elf *.bin *.o 
     95        rm -f *.elf *.bin *.o 
    8496 
    8597 
  • trunk/target/linux/adm5120-2.6/image/lzma-loader/src/decompress.c

    r7673 r7723  
    3737 * 19-May-2007 Gabor Juhos 
    3838 *   endiannes related cleanups 
    39  *   add support for decompressing an embedded kernel  
     39 *   add support for decompressing an embedded kernel 
    4040 * 
    4141 */ 
     
    4343#include <stddef.h> 
    4444 
     45#include "config.h" 
    4546#include "LzmaDecode.h" 
    4647 
     
    110111extern void board_putc(int ch); 
    111112 
     113struct env_var { 
     114        char    *name; 
     115        char    *value; 
     116}; 
     117 
     118#ifdef CONFIG_PASS_KARGS 
     119#define ENVV(n,v)       {.name = (n), .value = (v)} 
     120struct env_var env_vars[] = { 
     121        ENVV("board_name",      CONFIG_BOARD_NAME), 
     122        ENVV(NULL, NULL) 
     123}; 
     124#endif 
     125 
    112126unsigned char *data; 
    113127unsigned long datalen; 
     
    168182} 
    169183 
     184#if !(LZMA_WRAPPER) 
    170185static unsigned char *find_kernel(void) 
    171186{ 
     
    179194                ret < ((unsigned char *)KSEG1ADDR(ADM5120_FLASH_END)); 
    180195                ret += TRX_ALIGN) { 
    181                  
     196 
    182197                if (read_le32(ret) == TRX_MAGIC) { 
    183198                        hdr = (struct trx_header *)ret; 
     
    188203        if (hdr == NULL) { 
    189204                print_str("not found!\n"); 
    190                 return NULL;     
     205                return NULL; 
    191206        } 
    192207 
     
    194209        print_hex((unsigned int)ret); 
    195210        print_str(", kernel in partition "); 
    196          
     211 
    197212        /* compressed kernel is in the partition 0 or 1 */ 
    198213        if ((read_le32(&hdr->offsets[1]) == 0) || 
     
    204219                print_str("1\n"); 
    205220        } 
    206                  
     221 
    207222        return ret; 
    208223} 
     224#endif /* !(LZMA_WRAPPER) */ 
    209225 
    210226static void halt(void) 
     
    232248        board_init(); 
    233249 
    234         print_str("\n\nLZMA loader for ADM5120, Copyright (C) 2007 OpenWrt.org\n\n"); 
     250        print_str("\n\nLZMA loader for " CONFIG_BOARD_NAME 
     251                        ", Copyright (C) 2007 OpenWrt.org\n\n"); 
    235252 
    236253#if LZMA_WRAPPER 
     
    302319        print_str("launching kernel...\n\n"); 
    303320 
     321#ifdef CONFIG_PASS_KARGS 
     322        reg_a0 = 0; 
     323        reg_a1 = 0; 
     324        reg_a2 = (unsigned long)env_vars; 
     325        reg_a3 = 0; 
     326#endif 
    304327        /* Jump to load address */ 
    305328        ((kernel_entry) LOADADDR)(reg_a0, reg_a1, reg_a2, reg_a3); 
    306329} 
    307  
    308  
  • trunk/target/linux/adm5120eb-2.6/image/Makefile

    r7673 r7723  
    88include $(INCLUDE_DIR)/image.mk 
    99 
     10IMGNAME = $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL) 
    1011LOADER_MAKE = $(MAKE) -C lzma-loader KDIR=$(KDIR) 
    1112 
    12 define CompileLoader 
    13         $(LOADER_MAKE) LOADER=$(1) LOADER_DATA="" \ 
    14                 LZMA_TEXT_START=$(2) LZMA_STARTUP_ORG=$(3) \ 
    15                 compile 
    16 endef 
    17  
    18 define CompileLZMAKernel 
    19         $(LOADER_MAKE) LOADER=vmlinux-lzma-$(1) LOADER_DATA=$(KDIR)/vmlinux.lzma \ 
    20                 LZMA_TEXT_START=$(2) LZMA_STARTUP_ORG=$(3) \ 
    21                 compile 
     13define Image/Build/Loader 
     14        $(LOADER_MAKE) LOADER=loader-$(1).$(2) LOADER_DATA="" \ 
     15                LZMA_TEXT_START=$(3) LZMA_STARTUP_ORG=$(4) \ 
     16                CONFIG_PASS_KARGS=$(5) CONFIG_BOARD=$(6) \ 
     17                compile loader.$(2) 
    2218endef 
    2319 
     
    2824define Image/Prepare 
    2925        cat $(KDIR)/vmlinux | $(STAGING_DIR)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma 
    30 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) 
    31         $(call CompileLoader,zyxel,0x80500000,0) 
    32 else     
    33         $(call CompileLZMAKernel,zyxel,0x80500000,0) 
    34 endif 
    3526endef 
    3627 
     
    4536endef 
    4637 
     38define Image/Build/TRX 
     39        $(STAGING_DIR)/bin/trx -o $(1) -f $(3) -f $(KDIR)/vmlinux.lzma \ 
     40                $(call trxalign/$(2)) -f $(KDIR)/root.$(2) 
     41endef 
     42 
     43define Image/Build/TRXNoloader 
     44        $(STAGING_DIR)/bin/trx -o $(1) -f $(KDIR)/vmlinux.lzma \ 
     45                $(call trxalign/$(2)) -f $(KDIR)/root.$(2) 
     46endef 
     47 
    4748define Image/Build/ZyXEL 
    48         $(CP) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-noloader.trx $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(3)-$(2).trx 
     49        $(call Image/Build/Loader,loader-$(2),gz,0x80500000,0) 
     50        $(call Image/Build/TRXNoloader,$(IMGNAME)-$(3)-$(2).trx,$(1)) 
     51        #TODO: firmware generation tool needed 
    4952endef 
    5053 
    5154define Image/Build 
    52         $(STAGING_DIR)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-noloader.trx -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1) 
    53 ifneq ($(1),jffs2-128K) 
    54         #FIXME: firware images yet 
    55 endif 
     55        #FIXME: No firmware images yet 
    5656endef 
    5757 
    5858define Image/Build/LZMAKernel 
    59         $(CP) $(KDIR)/loader-vmlinux-lzma-$(2).$(3) \ 
    60             $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux-lzma-$(1).$(3) 
     59        $(LOADER_MAKE) TARGET_DIR=$(BIN_DIR) \ 
     60                LOADER=openwrt-$(BOARD)-$(KERNEL)-ramfs-lzma-$(1).$(2) \ 
     61                LOADER_DATA=$(KDIR)/vmlinux.lzma \ 
     62                LZMA_TEXT_START=$(3) LZMA_STARTUP_ORG=$(4) \ 
     63                CONFIG_PASS_KARGS=$(5) CONFIG_BOARD=$(6) \ 
     64                compile loader.$(2) 
     65endef 
     66 
     67define Image/Build/LZMAKernel/ZyXEL 
     68        $(call Image/Build/LZMAKernel,$(1),$(2),0x80500000,0,y,$(1)) 
    6169endef 
    6270 
    6371define Image/Build/Initramfs 
    64         $(call Image/Build/LZMAKernel,p-334wt,zyxel,bin) 
    65         $(call Image/Build/LZMAKernel,p-335wt,zyxel,bin) 
     72        $(call Image/Build/LZMAKernel/Generic,p-334wt,bin) 
     73        $(call Image/Build/LZMAKernel/Generic,p-335,bin) 
    6674endef 
    6775 
Note: See TracChangeset for help on using the changeset viewer.