home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / TINY_C.ZIP / PPSLF.TC < prev    next >
Text File  |  1999-03-05  |  6KB  |  401 lines

  1. putchar char c
  2. [if(c==0)c='"'
  3. return MC c,1
  4. ]
  5. getchar
  6. [return MC 2
  7. ]
  8. chrdy[return MC 12]
  9. pft char f(0),t(0)[MC f,t,13]
  10. gs char b(0)
  11. [int l
  12. while((b(l)=MC(2))!=13)[
  13. if(b(l)==21)[l=0;pl">"]
  14. else if(b(l)==127)[if(l>0)l=l-1;]
  15. else if(b(l)==18)[MC(13,1);pft b,b+l-1]
  16. else l=l+1
  17. ]
  18. b(l)=0
  19. return l
  20. ]
  21. ps char b(0)[
  22. int k(0);k(0)=1
  23. pft(b,b-1+scann(b,b+30000,0,k))
  24. ]
  25. pl char b(0)
  26. [MC 13,1
  27. ps b
  28. ]
  29. alpha char a
  30. [
  31. if((a>='a')*(a<='z'))return 1
  32. if((a>='A')*(a<='Z'))return 1
  33. ]
  34. num char b(5)
  35. int v(0)
  36. [int k
  37. v(0)=0
  38. while(k<5)
  39. [if((b(k)<'0')+(b(k)>'9'))return k
  40. v(0)=10*v(0)+b(k)-'0'
  41. k=k+1
  42. ]
  43. return k
  44. ]
  45. atoi char b(0)
  46. int v(0)
  47. [int k,s
  48. char c
  49. s=1
  50. c=b(0)
  51. while((c==' ')+(c=='-')+(c=='+'))
  52. [if(c=='-')s=-1
  53. c=b(k=k+1)
  54. ]
  55. k=k+num(b+k,v)
  56. v(0)=s*v(0)
  57. return k
  58. ]
  59. pn int n
  60. [
  61. MC ' ',1
  62. MC n,14
  63. ]
  64. gn
  65. [char b(20)
  66. int v(0)
  67. while(1)
  68. [gs b
  69. if(atoi b,v)return v(0)
  70. ps"number required "
  71. ]
  72. ]
  73. ceqn char a(0),b(0)
  74. int n
  75. [int k
  76. k=-1
  77. while((k=k+1)<n)if(a(k)!=b(k))return 0
  78. return 1
  79. ]
  80. index char i(0)
  81. int l
  82. char f(0)
  83. int n
  84. [
  85. if(n<=0)return 1
  86. if(l<=0)return 0
  87. int a,d(0)
  88. while(a+n<=l)[
  89. d(0)=1
  90. a=a+1+scann(i+a,i+l-n,f(0),d)
  91. if(d(0))return 0
  92. if(ceqn(i+a,f+1,n-1))return a
  93. ]
  94. ]
  95. move char a(0),b(0)
  96. [int k
  97. k=-1
  98. while(a(k=k+1)!=0)b(k)=a(k)
  99. b(k)=0
  100. return k
  101. ]
  102. gc
  103. [char f
  104. f=MC 2
  105. while(MC(2)!=13)[]
  106. return f
  107. ]
  108. movebl char a(0),b(0);int n
  109. [MC(a,b,n,7)]
  110. countch char a(0),b(0),c
  111. [return MC(a,b,c,8)]
  112. scann char a(0),b(0),c;int n(0)
  113. [return MC(a,b,c,n,9)]
  114. readfile char n(0),w(0),l(0)
  115. int u
  116. [int k,t
  117. MC(1,n,0,u,3)
  118. while(1)
  119. [
  120. k=MC(w,u,4)
  121. if(k<0)MC(u,6)
  122. if(k== -1)return t
  123. if(k< -1)return k
  124. t=t+k
  125. if((w=w+k)>l)
  126. [pl"Too big"
  127. return -2
  128. ]
  129. ]
  130. ]
  131. writefile char n(0),b(0),e(0)
  132. int u
  133. [int k,t,l
  134. MC(2,n,e-b+1,u,3)
  135. while(b<=e)
  136. [
  137. l=e-b
  138. if(l>127)l=127
  139. k=MC(b,b+l,u,5)
  140. if(k<0)return k
  141. if(k>0)return -k
  142. t=t+l+1
  143. b=b+l+1
  144. ]
  145. k=MC(u,6)
  146. if(k<0)return k
  147. if(k>0)return -k
  148. return t
  149. ]
  150. fopen int m;char n(0);int s,u[return MC m,n,s,u,3]
  151. fread char a(0);int u[return MC a,u,4]
  152. fwrite char f(0),t(0); int u[return MC f,t,u,5]
  153. fclose int u[MC u,6]
  154. fdos int f,a[return MC f,a,1001]
  155. sefcb char f(0),e(0)[return MC f,e,1002]
  156. prefcb char e(0)[MC e,1003]
  157. endlibrary
  158. int er(0),cu,lo,pe,lp
  159. int ll,la
  160. char ft(40),tt(40)
  161. int fl,tl
  162. char ln(120),pr( 5200)
  163. main
  164. [char c
  165. int v(1)
  166. lp= 5200
  167. pr(0)=13
  168. while(1)
  169. [ps ">
  170. ll=gs(ln)
  171. if(ll==0)[ln(0)='+';ln(1)=0]
  172. c=ln(0)
  173. if(c=='.')
  174. [if(num(ln+1,v))go(v)
  175. else if((ln(2)==0)+(alpha(ln(2))==0))
  176. [c=ln(1)
  177. if(c=='p')pt
  178. else if(c=='d')dl
  179. else if(c=='l')oi
  180. else if(c=='c')ch
  181. else if(c=='/')fa
  182. else if(c=='r')gi
  183. else if(c=='w')gu
  184. else if(c=='x')return
  185. else [ps"???";pl""]
  186. ]
  187. else if(ceqn(ln+1,"dir,3))[
  188. if(ln(4)==0)dir"*"
  189. else dir ln+5
  190. ]
  191. else st
  192. ]
  193. else if(c=='-')up
  194. else if(c=='+')do
  195. else in
  196. ]
  197. ]
  198. pi int n
  199. [int f,l,v(0)
  200. v(0)=n
  201. f=fc
  202. lo=lo+v(0)-1
  203. l=cu+scann(pr+cu,pr+pe,13,v)
  204. cu=l
  205. lo=lo-v(0)
  206. MC pr+f,pr+l,13
  207. ]
  208. fc
  209. [int k
  210. if((k=cu)==0)return 0
  211. while(pr(k=k-1)!=13)if(k<0)break
  212. return k+1
  213. ]
  214. lc
  215. [int k
  216. k=cu-1
  217. while(pr(k=k+1)!=13)if(k>=pe)break
  218. return k
  219. ]
  220. nl
  221. [if((cu=lc()+1)>pe)
  222. [cu=pe
  223. return 0
  224. ]
  225. return lo=lo+1
  226. ]
  227. bl
  228. [if((cu=fc()-1)<0)cu=0
  229. else lo=lo-1
  230. ]
  231. pt[
  232. int v(0)
  233. if(ln(2))num(ln+3,v)
  234. else v(0)=1
  235. pi(v(0))
  236. ]
  237. dl
  238. [int f,l,v(1)
  239. if(cu==0)
  240. [ps"cannot delete line 0";pl""
  241. return
  242. ]
  243. if(ln(2)==0)v(0)=1
  244. else num(ln+3,v)
  245. la=la-v(0)
  246. f=fc
  247. l=cu+scann(pr+cu,pr+pe,13,v)
  248. la=la+v(0)
  249. lo=lo-1
  250. cu=f-1
  251. if(l<pe)movebl(pr+l+1,pr+pe,-(l-f+1))
  252. pe=pe-(l-f+1)
  253. ]
  254. oi
  255. [
  256. int k
  257. if(ln(2)!=0)
  258. [fl=move(ln+3,ft)
  259. if(ft(0)=='^')ft(0)=13
  260. if(ft(fl-1)=='^')ft(fl-1)=13
  261. ]
  262. if(fl==0)
  263. [pl"locate what?";pl""
  264. return
  265. ]
  266. if(nl()!=0)[
  267. if(k=index(pr+cu-1,pe-cu+2,ft,fl)) [
  268. cu=cu-2+k
  269. if(pr(cu)==13)cu=cu+1
  270. lo=countch(pr,pr+cu-1,13)
  271. pi 1
  272. ]
  273. else[ps"?";pl""]
  274. ]
  275. else[ps"at bottom";pl""]
  276. ]
  277. ch[
  278. char d
  279. int p,f,l
  280. if(ln(2)!=0)[
  281. d=ln(2)
  282. p=2
  283. while((ln(p=p+1)!=d)[
  284. if(ln(p)==0)[
  285. ln(p+1)=0
  286. break
  287. ]
  288. ]
  289. ln(p)=0
  290. fl=move(ln+3,ft)
  291. tl=move(ln+p+1,tt)
  292. if(tl)if(tt(tl-1)==d)tl=tl-1
  293. ]
  294. f=fc
  295. l=lc()-1
  296. int k
  297. if(k=index(pr+f,l-f+1,ft,fl)) [
  298. cu=f+k-1
  299. movebl(pr+cu+fl,pr+pe,tl-fl)
  300. pe=pe+tl-fl
  301. if(tl)movebl(tt,tt+tl-1,pr+cu-tt)
  302. ]
  303. pi 1
  304. ]
  305. in
  306. [
  307. ll=ll+1
  308. if(pe+ll>lp)
  309. [ps"won't fit";pl""
  310. return
  311. ]
  312. if(nl)movebl(pr+cu,pr+pe,ll)
  313. else[cu=cu+1;lo=lo+1]
  314. pe=pe+ll
  315. movebl(ln,ln+ll-1,pr-ln+cu)
  316. pr(cu+ll-1)=13
  317. la=la+1
  318. ]
  319. wh
  320. [int f,l,u,b
  321. pn lo;ps" --- err ;pn er(0);pl"
  322. u=cu
  323. f=fc
  324. b=u-f
  325. l=lc
  326. f=f-1
  327. while((f=f+1)<l)putchar(pr(f));pl"
  328. while((b=b-1)>=0)putchar(' ')
  329. putchar '<';pl"
  330. ]
  331. do
  332. [int v(1)
  333. if(ln(1)==0)v(0)=1
  334. else num(ln+1,v)
  335. v(0)=v(0)+lo
  336. go(v)
  337. ]
  338. up
  339. [int v(1)
  340. if(ln(1)==0)v(0)=1
  341. else num(ln+1,v)
  342. if((v(0)=lo-v(0))<0)v(0)=0
  343. go(v)
  344. ]
  345. go int l(1)
  346. [lo=l(0)
  347. l(0)=l(0)+1
  348. cu=scann(pr,pr+pe,13,l)
  349. lo=lo-l(0)
  350. pi(1)
  351. ]
  352. fa
  353. [pn lo;pn la;pn pe;pn lp-pe;pl"]
  354. st
  355. [while(ll<=120)
  356. [ln(ll)=' '
  357. ll=ll+1
  358. ]
  359. MC(er,ln+1,pr+pe,pr,11)
  360. if(cu<0)cu=0;if(cu>pe)cu=pe
  361. lo=countch(pr,pr+cu-1,13)
  362. pl";pl"
  363. if(er(0))
  364. if(er(0)==99)[ps"stopped";pl""]
  365. else wh
  366. ]
  367. gi
  368. [int k
  369. k=readfile(ln+3,pr+pe+1,pr+lp,1)
  370. if(k<0)return
  371. pe=pe+k
  372. la=countch(pr+1,pr+pe,13)
  373. pn k;pl"";fa
  374. ]
  375. gu
  376. [fa
  377. if(ll>3)
  378. pn writefile(ln+3,pr+1,pr+pe,1)
  379. else ps"write what"
  380. pl"
  381. ]
  382. dir char f(0)
  383. [
  384. char e(36),d
  385. int k
  386. if(sefcb(f,e))[
  387. ps"???"
  388. return
  389. ]
  390. fdos(14,e(34))
  391. d=17
  392. while(1)[
  393. k=fdos(d,e)
  394. if(k==255)return
  395. k=129+32*(k%4)
  396. pft k,k+10
  397. pl""
  398. d=18
  399. ]
  400. ]
  401.