pre K&R Cã³ã³ãã¤ã©
UNIX V6ã®ã½ã¼ã¹ã³ã¼ããèªãã¨ãã«ããã¯ã«ãªããã®ã®ä¸ã¤ãK&R以åã®Cè¨èªã®ä»æ§ã§ããããããpre K&Rã¨å¼ã¶ãããã¥ã¢ã«ï¼ãC Reference Manualãï¼ãåå¨ããã®ã§ãèå³ã®ãã人ã¯ã©ãããã¡ãªã¿ã«UNIX V7ã§ã¯ãå¾ã«ã触ãããã¼ã¿ãã«Cã³ã³ãã¤ã©ã使ã£ã¦æ¸ãç´ããããLionsæ¬ãV7ãã¼ã¹ã ã£ãããã£ã¨èªã¿ãããã£ãã®ã«ãã
ã¨è¨ã£ã¦ãä»æ¹ãªãã®ã§ãpre K&Rã®ä¸çã«é£ã³è¾¼ãã§ã¿ããããã£ããã³ã¼ããè¦ã¦ãããã¾ãã¯mallocãmfreeã§ç©ºãé å管çã«ä½¿ããã¦ãæ§é ä½mapã®å®ç¾©ã¨ãã®å®ä½ã§ããã
0141 #define CMAPSIZ 100 0142 #define SMAPSIZ 100 0203 int coremap[CMAPSIZ]; 0204 int swapmap[SMAPSIZ]; 2515 struct map 2516 { 2517 char *m_size; /* ãµã¤ãº */ 2518 char *m_addr; /* ã¢ãã¬ã¹ */ 2519 };
ããããããã³ãã©ããããããã©ããã£ããmapæ§é ä½ãå®ç¾©ãã¦ããã®ã«ãstruct map coremap[XXX]ã§ã¯ãªããsizeof(struct map)ã¯4ãã¤ãã«ãªãã®ã§ãcoremapã¨swapmapã®ã¨ã³ããªæ°ã¯50ã«ãªã*1ã
ããã«m_sizeãm_addrã®åããªãchar *ãªã®ãï¼ã¨ããçåã湧ãèµ·ãããm_sizeã¯intã§ããããã ããm_addrããã¤ã³ã¿ã§ã¯ãªãï¼16bitã®ï¼ã¢ãã¬ã¹ã§ããã
ããã§åè¿°ã®ããã¥ã¢ã«ãè¦ã¦ãããããã®ã ã*2ãpre K&Rã«ã¯unsignedããªãã®ã ããã¤ã³ã¿ã¯å½ç¶unsignedãªã®ã§ãunsignedã使ãããå ´åã¯ãã¤ã³ã¿ï¼char *ï¼ã使ã£ã¦ããã®ã§ãããããããªãã¨ãã
ããããããã¨ããã§ã¯ããããªã³ã¼ããããã
6326: max(a, b) 6327: char *a, *b; 6328: { 6329: 6330: if(a > b) 6331: return(a); 6332: return(b); 6333: }
ç¶ãã¦ãputcharã®åé ãå°ãå¼ç¨ããã
2386 putchar(c) 2387 { 2388 register rc, s; 2389 rc = c; 2390 if(SW->integ == 0) 2391 return; 2392 while((KL->xsr&0200) ==0) 2393 ;
SWãKLã«ã¯ããããã³ã³ã½ã¼ã«ã¹ã¤ããã¬ã¸ã¹ã¿ãKL11ã·ãªã¢ã«ã©ã¤ã³ã³ã³ããã¼ã©ã®ã¢ãã¬ã¹ãæ ¼ç´ããã¦ããããããã¯8ããã表è¨ã ãããã§PDP-11ã®ã¢ã¼ããã¯ãã£ã«ã¤ãã¦å°ãè£è¶³ãã¦ããããPDP-11ã®ã·ã¹ãã ãã¹ã§ããUNIBUSã«ã¯ãCPUãã¡ã¢ãªãå¨è¾ºæ©å¨ããã©ããã«ã¤ãªãã£ã¦ãã*3ãUNIBUSã¯18ãããã®ã¢ãã¬ã¹ç©ºéãæã¡ãå¨è¾ºæ©å¨ããã®ã¢ãã¬ã¹ç©ºéã«ãããã³ã°ããããããããã¡ã¢ãªããããIOã§ããã
0165 #define KL 0177560 0166 #define SW 0177570
ããã§ã¯ã2390è¡ã®ãSW->integ == 0ããªã©ã¯ä½ãæå³ãã¦ããã®ã ãããï¼ãããã«ãSWã¯æ§é ä½ã§ããªãã®ã«ãã->integãã¨ã¢ã¯ã»ã¹ã§ããã®ï¼ãä¸æè°ã ããããä»é¢¨ã«è§£éããã¨ãã*(int *)SW == 0ãã«ãªããããã¦ãããæ¸ããã°ãªããªãçç±ã¯pre K&Rã«ã¯ãã£ã¹ãããªãããã ããã®ãããã¡ã¢ãªã¢ãã¬ã¹ãããããæ§é ä½ã¨ãã¦ã¢ã¯ã»ã¹ãã¦ãããã¤ã¾ããSW->integã ã¨0177560çªå°ãã2ãã¤ããèªã¿è¾¼ããKL->xsrã ã¨0177564çªå°*4ããã¨ãªãã
ã§ã¯integã¯ã©ãã§å®ç¾©ããã¦ããã®ãã¨ããã¨ã次ã®ããã«ãªã£ã¦ããããã®ãããªç¡åæ§é ä½ã¯ä»ãªãã³ã³ãã¤ã«ã¨ã©ã¼ã«ãªããã©ãpre K&Rã§ã¯OKã ã£ãã
0175 struct { int integ; }; 2313 struct { 2314 int rsr; 2315 int rbr; 2316 int xsr; 2317 int xbr; 2318 };
ããã«æ°æã¡æªãã¨ãããã注æãå¿ è¦ãªã®ã¯ãæ§é ä½ã®ã¡ã³ãã®åå空éãåä¸ã§ããç¹ã ããªã®ã§ãä¸è¨ã®ãããªç¡åæ§é ä½ï¼ããã¡ãã¡ã«åºç¾ãããèªãæ¹ã大å¤ã ãã©ãæ¸ãæ¹ãã¡ã³ãåãéè¤ããªãããã«ããã®ã¯å¤§å¤ã ã£ããããã
ã¾ãããã®è¾ºã¯æ £ãã®åé¡ã ã¨æãã®ã§ãé å¼µã£ã¦èªã¿é²ããã*5ã
ãã¦ãpre K&Rã®æåã深追ããããã®ã§ããã°ãCã³ã³ãã¤ã©ã®ã½ã¼ã¹ã³ã¼ããããã®ã§åç §ã§ããããã®å ¥ãå£ã¨ãã¦ã®ã¡ã¢ãæ®ãã¦ãããã
ã³ã³ãã¤ã©ãã©ã¤ãccã®ã½ã¼ã¹ã³ã¼ãã¯/usr/source/s1/cc.cã«ãç義ã®Cã³ã³ãã¤ã©ï¼Cã½ã¼ã¹ã³ã¼ãããPDP-11ã®ã¢ã»ã³ããªãåºåããï¼ã¯/usr/source/c以ä¸ã«åå¨ãããCã³ã³ãã¤ã©ã¯åºæ¬çã«2ãã¹ã«ãªã£ã¦ãã¦ãc0*.[cs]ã1ãã¹ç®ãc1*.[cs]ã2ãã¹ç®ã«ãªããããã¦-Oãªãã·ã§ã³æã«å®è¡ããããªããã£ãã¤ã¶ãc2*.[cs]ã§ãããå®è¡ãã¤ããªã¯/lib以ä¸ã«ã³ãã¼ãããccããå¼ã°ãããã¾ãã/lib/fc*ã¨ããå®è¡ãã¤ããªãåå¨ããããããã¯ã©ããæµ®åå°æ°ç¹ã¨ãã¥ã¬ã¼ã·ã§ã³ãããã¨ãã«ç¨ãããããã¾ããããªããã»ããµã¯ç¬ç«ããããã°ã©ã ã§ã¯ãªããccå é¨ã§å®è¡ããããã ã
*1:çµç«¯ã示ãããã«1ã¨ã³ããªã¯å¿ ãæ¶è²»ãããã®ã§ãå©ç¨å¯è½ãªã®ã¯49ã¨ã³ããªã¨ãªããããã»ã¹æ°ã®ä¸éï¼NPROCï¼ã50ãªã®ã§ãNPROC-1ããã»ã¹ãã¹ã¯ããã¢ã¦ãã§ããã ãã®swapmapã¯ããã®ããcoremapã¨ã³ããªæ°ã¨NPROCã®é¢ä¿ã¯ï¼ã次åèªæ¸ä¼ã®èª²é¡ããªã
*2:ã½ã¼ã¹ã³ã¼ãã追ã£ããããå ´åã¯/usr/source/c以ä¸ã«åå¨ããããã ãyacc以åã®ã³ã¼ããªã®ã§ãã¡ãã£ã¨ææ³ã追ã£ãããã®ã¯é¢åããã¾ãããã¼ã¯ã¼ãã調ã¹ãã ããªãgrepã§ååã§ãc00.cã®å é ã®é åkwtab[]ã§ãã¼ã¯ã¼ããå®ç¾©ãã¦ãããunsignedãshortããªããã
*3:å¾ã«UNIBUSã¯IOå°ç¨ã®ãã¹ã«ãªãã
*4:å½æã®æ¥æ¬äººã¯ãいななごろしãã¨ãã£ãèªååããã§ã¬ã¸ã¹ã¿ã®ã¢ãã¬ã¹ãè¦ããã¨ããã
*5:ããçªã£è¾¼ãã äºæ ãç¥ãããå ´åã¯ãUSENIX98ã®Stephen C Johnsonã«ããæå¾ è¬æ¼ãC and the AT&T Unix Port -- A Personal Historyãããå§ããåæ°ã¯ãã«ç ã§ãã¼ã¿ãã«Cã³ã³ãã¤ã©ï¼PCCï¼ãyaccãlintãå®è£ ãããã¨ã§ç¥ããã¦ãããå½æã¯Linusãå¨ç±ãã¦ããTransmetaã«å± ããã ããä½è«ã ãã©ãPCCã®ã¡ã³ããã³ã¹ã¯ç¶ãã¦ãã¦ãx86ã§ãåãããC99ã«ã対å¿ãã¦ãããããªãï¼Anders Magnusson 版 PCCï¼