城市记忆(4)赫连果城——(白口骝)薄骨律——刁公城

 

四 赫连果城——(白口骝)薄骨律镇——刁公城

  

很多人都知道唐代诗人韦蟾的两句诗:“贺兰山下果园成,塞北江南旧有名”。

那末,这个“果园”的具体位置究竟在什么地方?我可以肯定地对大家说:就在今天的吴忠!

从拙文《河奇--灵洲》中,大家已经知道“灵洲”就是以吴忠为中心的滨河平原地带,在北魏以前,它是被黄河环绕的一块方圆数千公里的丰饶洲渚;从《灵州--灵武》一文中,大家又知道“灵州”就是建在“灵洲”上的城市,它在宋代(含宋代)以前一直是宁夏北部的政治、经济、军事、文化中心,上演了许多威武雄壮的历史活剧(有另文专述)。在这些活剧中,就有一出是由赫连勃勃上演的。赫连勃勃是匈奴左贤王刘卫辰的儿子。因刘卫辰曾在公元365年被前秦符坚封为“夏阳公”,所以在公元407年,当赫连勃勃自称“天王”时,便以“大夏”为国号,建都统万(今陕西横山西北白城子),宁夏全境是其势力范围。自此以后,宁夏始有“夏”这个称号。赫连勃勃雄武一生,但也不忘文治,在连年征战之余,曾在今银川附近修建丽子园,即后来北魏时之怀远城;在今吴忠修建果园城,即以后北魏时之“薄骨律镇”。

“果园成”和“果园城”是什么关系呢?简单地说,“果园城”,就是因“果园成”而得名,即先在这里种植果木树,使其蔚然成林后,再修城池,城因果园而名。北魏郦道元在作《水经注》时,还曾见到“桑果余林,仍列洲上”的美景。这里还要消除一个误解,即以为唐诗人韦蟾的“贺兰山下果园成”之“成”是别字,有些人(如一些新闻媒体)曾仅据臆测便擅自将各种文献都写作“贺兰山下果园成”的“成”字改为“城”。其实这是不对的,也是很不严肃的。“果园成”即“成果园”。韦蟾的诗意是:贺兰山下果木树蔚然成林,这里在很早以前就有“塞上江南”这个美称了。由此可见,“塞上江南”不是指一个城池----“果园城”,而是指整个地区——贺兰山下“成为果园的那一带地方”,即古灵州平原。

其实,在赫连勃勃时代,果园城还有另外一个名字--“白口骝”。“白口骝”是什么意思呢?就是白马。《水经注》说:“赫连之世,有骏马死此,取马色以为邑号,故目城为‘白口骝’。” 在今人看来,用死马为城市取名不可思义。其实这是对古代少数民族生活习俗缺乏了解所至。古代北方少数民族有一个习俗:以白马为崇拜对象,他们在每一次重大庆典活动举办之时,常以杀白马为祭,这在文献上是有记载的。前些年发现的贺兰山岩画对此也有反映。在贺兰山之贺兰口,有一块巨石上凿有一幅岩画,专家根据其内容,命名为“祭祀图”。画面上有七个人连臂起舞,每个人头上都有光圈,表明七个人不是普通的牧民。他们或是部落首领、或是巫师。人前有一匹马,是献给神灵的牺牲白马。这就印证了中国古史上记载古代北方少数民族崇尚白色,并有杀白马祭祀神灵的习俗。据专家考证,凡是岩画比较集中的地方,就是古代少数民族最崇拜的地方。赫连氏能把修建在“河奇--灵洲”洲渚上的果园城命名为“白口骝”,说明他们对这个神奇的地方的崇拜,也可能,他们曾在此以白马为祭,搞过大型的庆典(祭祀)活动亦未可知。赫连氏入主吴忠(古代之灵州)后,“以五方之氏各有其姓,故修其教不改其俗,齐其政不易其宜”,有力地促进了当地经济的发展。

公元430年,北魏灭大夏,据有了宁夏,自然也据有了吴忠。北魏是由鲜卑拓跋氏建立的一个政权。拓跋是一个以畜牧业为主要经济生活的游牧民族,与赫连氏本属同族,“胡人谓父为鲜卑,母为铁弗”,这是鲜卑、铁弗两姓的来历。赫连氏本姓铁弗。在他自称“天子”之后,“自谓帝王者为天之子,遂改其姓为赫连氏,言其徽赫与天连也”,这是“铁弗”变“赫连”的来历。

由于灵洲是北魏防御柔然(蠕蠕)南下的边防重地,因此,北魏在夺取灵州不久,即太延二年(436年),在此设立了薄骨律镇。“薄骨律”是“白口骝”的音转,正所谓“音之谬,遂乃今称”。

“镇”是军政合一的建置。北魏初期,对边防军镇特别重视。皇帝亲自挑选最有名望和才能的人任各镇长官,不但官阶可以上升,而且还享受免除租赋的特别优惠政策。所以,当时的各类人才,都特别愿意到军镇去服务。太平真君五年(444年),北魏任名将刁雍为薄骨律镇将(即军政长官),对当时吴忠乃至宁夏地区的建设,发挥了很大的作用。

刁雍是一代名将。他到吴忠后,发现历年战乱,给当地的生产造成了极大的破坏:田野上虽有农夫耕作,但历朝修建的水利灌溉设施己崩颓毁废,无法使用,所以种田不多,弄得田园荒芜,当兵的没饭吃。于是,他向北魏皇帝上表请求批准在富平(今金积附近)修建一条新渠,以与已毁废的古渠相接。为了保证正常引水,他又在黄河中修建一座长270步的引水坝,将黄河之水引入渠内。这项工程建成后,扩大灌溉面积4万余顷,使因战争而荒芜了的农田重新能够耕种。刁雍对农田水利很内行。他既懂得在何处建坝引水、何处选择新渠路线,又懂得如何灌溉才能利于农作物生长。他根据农民的耕作实践总结出的一套灌溉制度行之有效。他说:“一旬之间,则水一遍。水凡四溉,谷得成实。”刁雍狠抓水利建设的直接结果是使吴忠的农业生产在很短的时间内得到恢复。仅仅过了两年(太平真君七年,公元446年),吴忠的粮食不但能供本地军民食用,而且还有余粮供应当时的另一军事重镇——沃野(今内蒙乌拉特旗南)食用。

刁雍在任薄骨律镇将期间,不但兴修水利,恢复农业生产,而且还十分注意发展水上交通运输。在他任薄骨律镇将的第三年,北魏太武帝命令薄骨律镇和高平、安定、统万四镇调集5000辆车将50万斛粮食运到沃野镇,以应军需。当时,从这些地方到沃野,路途遥远(最近距离800里)不说,而且中间还要穿越一段沙漠地带,十分难走。“轻车往来,犹以为难……设令载谷,不过20石,每涉深沙,必至滞陷。”而且,粮食都在黄河以西,要转到沃野,首先必须要渡过黄河。如果按5000辆车计算,每车装载20石,一次装运10万斛,一百多天才能打一个来回。一年最多运两趟,50万斛须得运三年!中间还会发生各种不测事件,5000辆牛车,不一定能全部到达。象这样劳民费时、荒废农民耕垦之业的事,刁雍不愿干。于是,他开动脑筋,决定开展黄河水运。经请示魏帝同意,他在牵屯山(今六盘山北段及香山)“河水之次”,造船300艘。一次运粮20万斛,方舟顺流,5天便到了。再从沃野逆流而返,只要10日功夫。合计一个往返只用60天。有3个来回即可运粮60万斛,既不费牛力,又不误农田。

薄骨律镇地处防御柔然南下侵扰的要地,原来士兵和军粮散处各地,四周没有屏蔽,非常容易受到柔然的攻击和掠夺。为改变这一被动局面,刁雍于太平真君九年(448年)再次上书魏帝,请求在河西修筑专门用于储备粮食的城堡。刁雍的表书说:“臣镇所绾河西,爰在边表,常惧不虞。平地积谷,实难守护。兵人散居,无所依恃。脱有妖奸,必至狼狈。虽欲自固,无以得全。今求造城储谷,置兵备守……立城之所,必在水陆之次。” 这个意见很快被批准。刁雍便利用农闲时间,由官府出资,让老百姓在水陆交通方便的地方,用两年时间修成了一座可供大量储备粮食和屯兵的城池。修筑这座城池,既未耽误农业生产,又未加重农民负担。为了表彰刁雍的功绩,魏帝将此城命名为“刁公城”。后人亦称薄骨律仓城,具体地址在今河西望洪乡附近。

刁雍武能征战,文能治国,为古代吴忠的发展做出了重大贡献,是一位杰出的军事家和政治家。我们不应忘记他。

(原载《吴忠日报》2004年2月26日、27日)

 

 

 

 

 

转载于:https://www.cnblogs.com/ysx4221/archive/2009/12/31/1637068.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可能的Java代码实现,实现了多线程卖票和进度条的显示: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TicketSeller extends JFrame { // 窗口中的白口卖票情况数量 private static final int SELLER_COUNT = 2; // 每个卖票情况的宽度 private static final int SELLER_WIDTH = 400; // 每个卖票情况的高度 private static final int SELLER_HEIGHT = 100; // 票的总数 private static final int TOTAL_TICKET_NUMBER = 131; private JPanel[] sellers; private JLabel[] sellerNames; private JLabel[] sellerTicketNumbers; private JLabel[] sellerSoldNumbers; private JProgressBar[] sellerProgressBars; private JButton manualButton; private JButton autoButton; private boolean isAuto; public TicketSeller() { setTitle("白口卖票情况进度显示"); // 初始化界面 initGUI(); // 初始化白口卖票情况 initSellers(); // 初始化按钮 initButtons(); // 初始化自动卖票线程 initAutoThread(); // 显示窗口 pack(); setVisible(true); } private void initGUI() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); setPreferredSize(new Dimension(SELLER_WIDTH * SELLER_COUNT, SELLER_HEIGHT + 100)); } private void initSellers() { sellers = new JPanel[SELLER_COUNT]; sellerNames = new JLabel[SELLER_COUNT]; sellerTicketNumbers = new JLabel[SELLER_COUNT]; sellerSoldNumbers = new JLabel[SELLER_COUNT]; sellerProgressBars = new JProgressBar[SELLER_COUNT]; for (int i = 0; i < SELLER_COUNT; i++) { sellers[i] = new JPanel(new GridLayout(4, 1)); sellerNames[i] = new JLabel("WY 1 131 1" + (char) ('A' + i)); sellerTicketNumbers[i] = new JLabel("票数: " + TOTAL_TICKET_NUMBER / SELLER_COUNT); sellerSoldNumbers[i] = new JLabel("已卖票数: 0"); sellerProgressBars[i] = new JProgressBar(0, TOTAL_TICKET_NUMBER / SELLER_COUNT); sellers[i].add(sellerNames[i]); sellers[i].add(sellerTicketNumbers[i]); sellers[i].add(sellerSoldNumbers[i]); sellers[i].add(sellerProgressBars[i]); add(sellers[i], BorderLayout.WEST); } } private void initButtons() { manualButton = new JButton("手动卖票"); autoButton = new JButton("自动卖票"); manualButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { isAuto = false; startSellingTickets(); } }); autoButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { isAuto = true; } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(manualButton); buttonPanel.add(autoButton); add(buttonPanel, BorderLayout.SOUTH); } private void initAutoThread() { Thread thread = new Thread(new Runnable() { @Override public void run() { while (true) { if (isAuto) { startSellingTickets(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); } private void startSellingTickets() { for (int i = 0; i < SELLER_COUNT; i++) { new Thread(new TicketSellingTask(i)).start(); } } private class TicketSellingTask implements Runnable { private int sellerIndex; public TicketSellingTask(int sellerIndex) { this.sellerIndex = sellerIndex; } @Override public void run() { int ticketNumber = Math.min((int) (Math.random() * 10), TOTAL_TICKET_NUMBER / SELLER_COUNT - getSellerSoldNumber(sellerIndex)); updateSellerSoldNumber(sellerIndex, getSellerSoldNumber(sellerIndex) + ticketNumber); updateProgressBar(sellerIndex); } } private int getSellerSoldNumber(int sellerIndex) { return Integer.parseInt(sellerSoldNumbers[sellerIndex].getText().substring(5)); } private void updateSellerSoldNumber(int sellerIndex, int soldNumber) { sellerSoldNumbers[sellerIndex].setText("已卖票数: " + soldNumber); } private void updateProgressBar(int sellerIndex) { int soldNumber = getSellerSoldNumber(sellerIndex); sellerProgressBars[sellerIndex].setValue(soldNumber); sellerProgressBars[sellerIndex].setString(soldNumber + "/" + TOTAL_TICKET_NUMBER / SELLER_COUNT); sellerProgressBars[sellerIndex].setStringPainted(true); } public static void main(String[] args) { new TicketSeller(); } } ``` 代码中,使用JFrame类实现窗口界面的显示,使用JPanel类实现每个白口卖票情况的显示区域,使用JProgressBar类实现进度条的显示。在每个白口卖票情况的显示区域中,显示该口口名称、分配的票数、已卖票数和进度条。在每个卖票情况中,使用Thread类和Runnable接口实现多线程操作,模拟不同的白口卖票情况并更新进度条和已卖票数的显示。使用JButton类实现手动和自动卖票的按钮,并使用ActionListener接口监听按钮事件。在自动卖票中,使用Thread.sleep()方法实现每次卖票间隔不少于1秒的要求。最后,通过调用JFrame类的setVisible()方法显示窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值