gets関数の追加

ライブラリソースから[drive:\sdccdir]\lib\src\gets.cファイルにあるgets()関数のCソースを編集しコンパイルする。
gets()関数はgetchar()を内部で利用する。


修正箇所はputchar()部分を全てコメントアウト。
システムコール0x01番は内部でエコーバックするため、gets()関数内部putchar()による
エコーバック処理は必要無し。


gets.c
#include <stdio.h>

char *
gets (char *s)
{
  char c;
  unsigned int count = 0;

  while (1)
    {
      c = getchar ();
      switch(c)
      {
       case '\b': /* backspace */
          if (count)
            {
              //putchar ('\b');
              //putchar (' ');
	      //putchar ('\b');
	      --s;
	      --count;
            }
          break;

        case '\n':
        case '\r': /* CR or LF */
          //putchar ('\r');
          //putchar ('\n');
          *s = 0;
          return s;

        default:
          *s++ = c;
          ++count;
          //putchar (c);
          break;
        }
    }
}


修正後gets.cをコンパイル。

> sdcc -mz80 -c gets.c


修正版gets.cライブラリは↓
本来は標準入出力ライブラリとして他の関数を一つにまとめる。

> sdcclib gets.lib getchar.rel gets.rel



  • C言語からの利用

gets()関数のC言語の利用方法を示す。

#include <stdio.h>

void main(void){
	char buf[120];
 
	gets(buf);
}


> sdcc -mz80 -c source.c

> sdld -b _CODE=0x100 -b _DATA=0x100 -i out.ihx source.rel getchar.rel gets.rel

I/Oライブラリのgetchar()はアセンブラで実装されこの部分を変更すると異なる機種用が可能。
getchar()はCPM互換のシステムコールを用いるのでMSXDOS他CPM互換マシンで動作する。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年01月29日 13:06
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。