#99 Article 984 Posted at 1995/12/06 01:17:18 by MSP-Iris (MAP4370) [SAHOU]

Subject: Re:*7 プログラミングお作法の話 /948 ... /941 /940

こんなのも作ってみました。
 Cとアセンブラの融合です。
 TASM V2.0+MS-C V5.1(なんつー組み合わせじゃ(笑)。
--------------------------------------------
cr      equ     0dh
lf      equ     0ah
true = ( 0 eq 0 )
false= ( 0 eq 1 )

.model small,c
.186
locals __

PRTMSG  macro X
        mov ah,09
        mov dx,offset &X
        int 21h
endm

.code
        public PNYAN
PNYAN   proc near uses DS,ARG1:word
        mov ax,cs
        mov ds,ax
        mov cx,ARG1
__lp:   PRTMSG  cs:nyanmsg
        loop $-2                ;instead of 'loop __lp'
        PRTMSG  cs:nlmsg
        ret
nyanmsg db      'にゃん$'
nlmsg   db      cr,lf,'$'
endp
end
--------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern void PNYAN (int);

char *strgets (d,n,s) char *d,*s; int n; {      /*fgets-like strings copy*/
        strncpy(d,s,n-1);
        d[n-1]='\0';
        return(d);
        }

main (argc,argv) int argc; char *argv[]; {
        static char istg[4]; static int iprm;
        int i;

        if(argc<2)
                fgets(istg,4,stdin);
        else
                strgets(istg,4,argv[1]);

        iprm=atoi(istg);
        if(iprm<=0|iprm>999)
                abort();

        for(i=1;i<iprm;i++)
                {
                switch(i)
                        {
                        case 3: /*fall thru*/
                        case 5: PNYAN(i);
                                break;
                        default:printf("%i\n",i);
                                break;
                        }
                }
        PNYAN(iprm);
        }
--------------------------------------------
                                  MAP4370    MSP-Iris