home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disc 55 / Commodore_Disc_55_19xx_-_de.d64 / dv.quell < prev    next >
Text File  |  2022-10-26  |  23KB  |  1,288 lines

  1. int len( )
  2. begin
  3.   ( , 0xffff , 0 find ) swap -
  4. bend
  5.  
  6. int $<( )
  7. int le ;
  8. begin
  9.   swap ( swap , swap , swap len le = 1 + copy ) swap le ] +
  10. bend
  11.  
  12. int inchar( str z )
  13. begin ,
  14.   ( str ] , ( len ) + , z ] find )
  15.   nif fert
  16.   str --] -
  17. : fert
  18. bend
  19.  
  20. int val( )
  21. int s , erg ;
  22. begin
  23.   s = 0 erg =
  24. : lab0 s ]++ by ] nif ff 0x1f and nif lab0
  25. : lab1 15 and ( erg ] 10 * ) + erg =
  26. : lab2 s ]++ by ] 0x1f and if lab1
  27.   erg ]
  28. : ff bend
  29.  
  30. int scan( an en str n )
  31. begin , nif fert
  32. : lab ( an ] , en ] , str by ]] find )
  33.   nif fert
  34.   an = ( an ]++ , str ] , n by ] comp )
  35.   nif lab an --]
  36. : fert bend
  37.  
  38. /* --- Bildschirm, Farbe und Cursor */
  39.  
  40. void modswap( )
  41. begin
  42.   0 syscon 64 == if ff 0xff5f sys
  43. : ff bend
  44.  
  45. void color( vf hf rf )
  46. begin , 0 ,
  47.   vf --] 5 syscon by =
  48.   hf ] nif ff 1 - 53281 by =
  49.   rf ] nif ff 1 - 53280 by =
  50. : ff bend
  51.  
  52. void at( y x )
  53. begin
  54.   yr by = y ] xr by =
  55.   clc 0xfff0 sys
  56. bend
  57.  
  58. char posxy( )
  59. begin
  60.   sec 0xfff0 sys xr by ] yr by ]
  61. bend
  62.  
  63. void tab( )
  64. begin
  65.   ( posxy swap ) ( , swap at )
  66. bend
  67.  
  68. void +tab( )
  69. begin
  70.   ( posxy ) + tab
  71. bend
  72.  
  73. void putc( )
  74. begin
  75.   ac by = 0xffd2 sys
  76. bend
  77.  
  78. void putl( )
  79. int zg ;
  80. begin
  81.   zg = go rd
  82. : wr putc
  83. : rd zg ]++ by ] if wr
  84. bend
  85.  
  86. void rputn( )
  87. begin
  88.   nif ff ( 10 / rputn )
  89.   swap 10 % '0' + putc
  90. : ff bend
  91.  
  92. void putn( )
  93. begin
  94.   nif ff rputn return
  95. : ff '0' putc
  96. bend
  97.  
  98. void print( liste )
  99. int zg ;
  100. begin , 0 ,
  101.   liste zg = ]
  102. : lab putl 2 zg += ] if lab
  103. bend
  104.  
  105. void fprint( string )
  106. int par , zg ;
  107. begin
  108.  , string par = ] zg =
  109. : lab1 zg by ]] nif ff
  110.   zg by ]] '%' == if zahl
  111.   zg ]++ by ] putc go lab1
  112. : zahl 2 par +=
  113.   zg ]++ par ]] putn go lab1
  114. : ff bend
  115.  
  116. char getc( )
  117. begin
  118.   0xffe4 sys ac by ]
  119. bend
  120.  
  121. char key( )
  122. begin
  123. : rd getc nif rd
  124. bend
  125.  
  126. int getl( str lim )
  127. def basin 0xffcf sys ac by ];
  128. begin
  129.   , go rd
  130. : wr swap str ]++ by =
  131. : rd basin '/n' == if ff
  132.   swap lim ]-- if wr
  133. : ne basin '/n' == nif ne
  134. : ff 0 str ] by = str ]
  135. bend
  136.  
  137. int getn( )
  138. char number[ 8 ;
  139. begin
  140.   number ( , 7 getl ) swap val
  141. bend
  142.  
  143.  
  144. char bfile[ 40 ;
  145. void open( lfn ger sek liste )
  146. def setlfs 0xffba sys;
  147. def setnam 0xffbd sys;
  148. def fopen 0xffc0 sys;
  149. int zg ;
  150. begin , 0xffff ,
  151.   lfn ] ac by =
  152.   ger ] xr by =
  153.   sek ] yr by = setlfs
  154.   sek ] not nif nam
  155.   liste zg = ] not nif nam
  156.   bfile swap
  157. : lab not $< ( 2 zg += ] ) not if lab
  158.   bfile len
  159. : nam ac by = bfile xr = setnam fopen
  160. bend
  161.  
  162. def # 0xffcc sys;
  163.  
  164. void #i( )
  165. begin
  166.   # swap xr by = 0xffc6 sys
  167. bend
  168.  
  169. void #o( )
  170. begin
  171.   # swap xr by = 0xffc9 sys
  172. bend
  173.  
  174. void close( )
  175. begin
  176.   # swap ac by = clc 0xffc3 sys
  177. bend
  178.  
  179. def stat 0x90 by ];
  180.  
  181. int load( ger fi adr )
  182. begin , 0 ,
  183.   0 ac by = ger ] xr by =
  184.   adr ] 0 == 1 and yr by = 0xffba sys
  185.   fi ] xr = ( len ) ac by = 0xffbd sys
  186.   0 ac by = adr ] xr = 0xffd5 sys xr ]
  187. bend
  188.  
  189. int wait-ready( )
  190. def ndx 3 syscon;
  191. def tastbuf 4 syscon;
  192. begin
  193.   ndx by ] nif fertig
  194.   ( "/3/134" , tastbuf by ] inchar )
  195.   if ff 0 ndx by =
  196. : schleife ndx by ] nif schleife
  197.   ( "/3/134" , tastbuf by ] inchar )
  198. : ff ( 0 ndx by = ) swap
  199. : fertig bend
  200.  
  201. void dirop( fi )
  202. begin
  203.   ( 8 , swap , 0 , fi ] open )
  204.   8 #i getc getc getc getc
  205. bend
  206.  
  207. void dir( fi ger )
  208. char zl , zh ;
  209. begin ,
  210.   147 putc ( fi ] , ger ] dirop )
  211.   stat nif lab1
  212.   8 close return
  213. : lab1 wait-ready if fertig
  214.   getc ( getc 256 * ) + putn ' ' putc
  215. : lab2 getc putc swap if lab2
  216.   '/n' putc getc getc stat nif lab1
  217. : fertig stat ( 8 close )
  218.   swap nif fert key
  219. : fert 147 putc bend
  220.  
  221. /* Menuesteuerung */
  222. void menp( zg )
  223. int zg ;
  224. begin
  225.   zg = go pruef
  226. : s1 ( , zg ]++ by ] at ) go zeich
  227. : s2 ( putc )
  228. : zeich zg ]++ by ] if s2
  229. : pruef zg ]++ by ] if s1
  230. bend
  231.  
  232. int menw( mf lim sp str )
  233. char rvon "/18" , rvoff "/146" ;
  234. int z , n , nr , zg ;
  235. begin , 0 , lim ]--
  236.   str ] nif s0 1000 > if wa
  237.   str ] 1 - nr =
  238. : s0 1 n = go anf
  239. : lo ( zg by ]] , zg ] 1 + by ] at )
  240.   ( zg ] 2 + print )
  241. : anf nr ] << mf ] + ] zg =
  242.   2 + by ] if anf1 sp ] nr -= go anf
  243. : anf1 ( zg by ]] , zg ] 1 + by ] at )
  244.   ( rvon , zg ] 2 + , rvoff print )
  245.   n ] if ff
  246. : wa ( str ] , key z = n = inchar )
  247.   nif cu 1 - nr = go lo
  248. : cu z ] '/n' == if lo
  249.   swap ( 0 n = )
  250.   swap 29 == if ri
  251.   swap 17 == if dn
  252.   swap 157 == if li
  253.   swap 145 == if ob
  254. : fe z ] 0 return
  255. : ri nr ] lim ] == if fe
  256.   nr ] sp ] % 1 + sp ] == if fe
  257.   nr ]++ go lo
  258. : li nr ] sp ] % nif fe
  259.   nr ]-- go lo
  260. : dn nr ] sp ] + lim ] > if fe
  261.   sp ] nr += go lo
  262. : ob nr ] sp ] - 0x8000 > if fe
  263.   sp ] nr -= go lo
  264. : ff nr ] 1 + bend
  265.  
  266. void mencrea( fz )
  267. begin swap
  268. : ne swap fz ] = ( 2 fz += )
  269.   ( swap 2 + , 0xffff , 0 find ) 1 +
  270.   ( by ] ) if ne
  271. bend
  272.  
  273. /* -Erweiterung fuer Eingabekomfort-- */
  274.  
  275. void wputc( z n )
  276. begin , go prf
  277. : wr z ] putc
  278. : prf n ]-- if wr
  279. bend
  280.  
  281. void wputl( str n )
  282. begin , go prf
  283. : wr str ] putl
  284. : prf n ]-- if wr
  285. bend
  286.  
  287. int cuwe ;
  288. int scu( )
  289. begin
  290.   sec 0xfff0 sys xr ] cuwe =
  291. bend
  292.  
  293. void pcu( )
  294. begin
  295.   xr = clc 0xfff0 sys
  296. bend
  297.  
  298. void rcu( )
  299. begin
  300.   cuwe ] pcu
  301. bend
  302.  
  303. char edl( str le )
  304. begin ,
  305.   scu str ] putl rcu
  306.   ( str ] , le ] getl )
  307. bend
  308.  
  309. void ksys( )
  310. begin
  311.   0xbb5 = 0xbb1 sys 0xff 0xbb6 by =
  312. bend
  313.  
  314. void cuon( )
  315. begin
  316.   0 syscon 128 == if c128
  317.   204 by = return
  318. : c128 0xcd6f ksys
  319. bend
  320.  
  321. void cuof( )
  322. begin
  323.   0 syscon 128 == if c128
  324.   1 204 by = 207 by ] nif ff
  325.   1 205 by = 0 204 by =
  326. : prf 207 by ] if prf 1 204 by =
  327. : ff return
  328. : c128 0xcd9f ksys
  329. bend
  330.  
  331. void cukey( )
  332. begin
  333.   cuon key ( cuof ) swap
  334. bend
  335.  
  336. char fkey( )
  337. char tast "/20/29/157{CBM-F}{CBM-C}{CBM-X}{CBM-V}{SHIFT-+}{CBM--}{SHIFT--}" ;
  338. int z , ptast ;
  339. begin
  340.   ptast =
  341. : lab cukey
  342.   z = ' ' >= ( z ] 'z' <= ) and
  343.   ( z ] 'A' >= ( z ] 'Z' <= ) and )
  344.   or if fert
  345.   ( ptast ] , z ] inchar ) if ff
  346.   ( tast , z ] inchar ) nif lab
  347. : fert z ] return
  348. : ff 0 bend
  349.  
  350. char fbegr "<>" ;
  351.  
  352. void putlen( zg n )
  353. begin , go prf
  354. : wr zg by ]] nif ff
  355.   putc zg ]++ go prf
  356. : ff ' ' putc
  357. : prf n ]-- if wr
  358. bend
  359.  
  360. void putf( sz lim )
  361. begin ,
  362.   fbegr by ] putc scu sz ] putl
  363.   ( ' ' , lim ] ( sz ] len ) - wputc )
  364.   fbegr 1 + by ] putc rcu
  365. bend
  366.  
  367. char edf( sz lim prf )
  368. def anf! vz ] sz ] == if next;
  369. def --]] --] by ];
  370. def --]= --] by =;
  371. def ]++] ]++ by ];
  372. def ]++= ]++ by =;
  373. def gr< vz ] gr ] <>;
  374. def pnex 157 putc go next;
  375. int vz , hz , z , gr ;
  376. begin , "/n" ,
  377.   ( sz ] , lim ] putf )
  378.   sz ] lim ] + 1 + hz = 2 - gr =
  379.   sz ] ( len ) + 1 + vz = 
  380. : an1 vz --]] hz --]=
  381. : an2 vz ] sz ] <> if an1
  382. : next prf ] fkey nif ff
  383.   20 == if del
  384.   swap 29 == if c>
  385.   swap 157 == if c<
  386.   swap z = gr< nif in.
  387.   swap hz ] == if in=
  388.   z ] vz ]++= putc
  389.   scu hz ] putl rcu go next
  390. : in. swap hz = z ] swap by = putc pnex
  391. : in= z ] vz ]++= putc hz ]++ go next
  392. : del anf! vz --] 157 putc scu
  393.   hz ] putl ' ' putc rcu go next
  394. : c< anf! vz --]] hz --]= pnex
  395. : c> gr< hz by ]] and nif next
  396.   hz ]++] vz ]++= 29 putc go next
  397. : ff swap ( 146 putc ) swap ( vz ] hz ] $< )
  398. bend
  399.  
  400. char getf( sz lim prf )
  401. begin , "/n" , 0 sz ] by =
  402.  ( sz ] , lim ] , prf ] edf )
  403. bend
  404.  
  405. char maske[ 201 ;
  406. int szm ;
  407.  
  408. int defm( str le )
  409. begin ,
  410.   szm ] if ov maske szm =
  411. : ov le ] szm ]++ by =
  412.   str ] szm ] = scu ( 2 szm += ) =
  413.   2 szm += 0 swap by =
  414. bend 
  415.  
  416. void clrm( )
  417. int zg ;
  418. begin
  419.   maske zg = szm = go prf
  420. : ne 0 zg ++] ] by = 4 zg +=
  421. : prf by ] if ne
  422. bend
  423.  
  424. void putm( )
  425. int zg ;
  426. begin
  427.   maske zg = szm = go prf
  428. : ne 3 zg += ] pcu
  429.   ( 2 zg -= ] , zg --] by ] putf )
  430.   5 zg +=
  431. : prf by ] if ne 146 putc
  432. bend
  433.  
  434. void edm( )
  435. int zg , n ;
  436. begin
  437.   putm
  438. : anf maske zg = go rd
  439. : auf zg ] maske == if ne 5 zg -=
  440. : ne 3 zg += ] pcu
  441.   ( 2 zg -= ] , zg --] by ] ,
  442.   "/3/134/145/19/17/n" edf swap )
  443.   n = 3 < if ff
  444.   swap 3 == if auf
  445.   swap 4 == if anf
  446.   5 zg +=
  447. : rd by ] if ne
  448. : ff n ] 1 - bend
  449.  
  450. void getm( )
  451. begin clrm edm bend
  452.  
  453. int mwahl( )
  454. int zg ;
  455. const up 145 dn 17 ;
  456. begin
  457.   maske zg =
  458. : rd zg ] 3 + ] pcu fbegr by ] putc
  459.   cukey ( 146 putc )
  460.   swap dn == if cdn
  461.   swap up == if cup
  462.   swap '/n' == nif rd
  463.   zg ++] ] return
  464. : cdn 5 zg += by ] if rd
  465. : cup zg ] maske == if rd
  466.   5 zg -= go rd
  467. bend
  468.  
  469. int fzahl , mema , fzzg ;
  470. def fzg 1 syscon;
  471. void setfz( )
  472. begin
  473.   fzahl = 1 + << fzg + ( fzg fzzg = ) =
  474.   mema =
  475. bend
  476.  
  477. void setfl( )
  478. begin
  479.   1 + mema ] + mema =
  480.   ( 2 fzzg += ) =
  481. bend
  482.  
  483. void feld( )
  484. begin
  485.   << fzg + ]
  486. bend
  487.  
  488. void flim( )
  489. begin
  490.   << fzg + 2 + ] swap ] - 1 -
  491. bend
  492.  
  493. void fe,li( )
  494. begin
  495.   ( feld ) , swap flim
  496. bend
  497.  
  498. int dfeld?( )
  499. int n , zg ;
  500. begin
  501.   zg = 0 n = go prf
  502. : ne swap feld zg ] == if ff
  503. : prf n ]++ fzahl <= if ne return
  504. : ff n ] bend
  505.  
  506. int datlen( )
  507. begin
  508.   ( , 0xffff , '/n' find ) swap -
  509. bend
  510.  
  511. int rzg , wzg ;
  512. int getd( str lim )
  513. int leq , lez ;
  514. begin ,
  515.   rzg by ]] nif ff
  516.   rzg ] ( , 0xffff , '/n' find )
  517.   swap - leq = lez = lim ] <= if ok
  518.   lim ] lez =
  519. : ok ( rzg ] , str ] , lez ] copy )
  520.   leq ++] rzg += lez ]
  521. : ff str ] + ( 0 swap by = ) swap
  522. bend
  523.  
  524. void getsm( )
  525. int i ;
  526. begin 0 i =
  527. : rd ( i ] fe,li getd )
  528.   i ++] fzahl ] <> if rd
  529. bend
  530.  
  531. void putd( )
  532. begin
  533.   wzg ] swap $< "/n" $< wzg =
  534. bend
  535.  
  536. int putsm( )
  537. int i ;
  538. begin 0 i =
  539. : wr i ] feld putd
  540.   i ++] fzahl ] <> if wr wzg ]
  541. bend
  542.  
  543. int puts( )
  544. int i ;
  545. begin 0 i =
  546. : wr i ] feld putl '/n' putc
  547.   i ++] fzahl ] <> if wr
  548. bend
  549.  
  550. int dsa( )
  551. int zg ;
  552. begin
  553.   zg =
  554. : lab zg --] by ] if lab zg ++]
  555. bend
  556.  
  557. int dfeld( zg n )
  558. begin ,
  559.   zg ] dsa zg = go prf
  560. : ne zg ( ] , 0xffff , '/n' find 1 + )
  561.   swap = by ] nif ff
  562. : prf n ]-- if ne zg ] return
  563. : ff zg --]
  564. bend
  565.  
  566. int ifeld , ian , indan , indend , izg , datend ;
  567.  
  568. void getds( )
  569. begin izg ]] nif ff
  570.   dsa rzg = getsm return
  571. : ff clrm bend
  572.  
  573. void skip+( )
  574. begin izg ] indend ] <> nif ff
  575.       3 izg -= ] if ff
  576.       3 izg += 0
  577. : ff bend
  578.  
  579. void skip-( )
  580. begin izg ] indan ] <> nif ff
  581.       3 izg += ] if ff
  582.       3 izg -= 0
  583. : ff bend
  584.  
  585. void ineu( )
  586. int zg ;
  587. begin
  588.   indan ] zg = go prf
  589. : ne ( , ifeld ] dfeld ) zg ] =
  590. : prf 3 zg -= ] if ne
  591. bend
  592.  
  593. void datorg( )
  594. int lz , sz ;
  595. char n "/n#" ;
  596. begin
  597.   ( n 1 + ) by =
  598.   0 ( 2 syscon 2 - indan = ) =
  599.   datend ] by =
  600.   2 syscon 5 - izg = sz =
  601.   mema ] lz = '/n' swap by =
  602.   go lab2
  603. : lab1 0 lz ++] by =
  604.   sz ] 2 + 0 swap by =
  605.   lz ++] sz ] = 3 sz -=
  606. : lab2 ( lz ] , datend ] , n , 2 scan ) lz = if lab1
  607.   sz ] indend = 0 swap =
  608.   ian ] ifeld = nif ff ineu
  609. : ff bend
  610.  
  611. void d=such( suwort swlen obgr )
  612. def o obgr;
  613. begin
  614.   indan ] swap - 3 / , int u 1 , m ;
  615. : next u ] o ] >= if ff
  616.   o ] u ] + >> m = 3 * indan ] swap -
  617.   ( ] , suwort ] , swlen ] <comp )
  618.   nif gr= m ] 1 + u = go next
  619. : gr= m ] o = go next
  620. : ff o ] 3 * indan ] swap - izg =
  621. bend
  622.  
  623. void d>such( suwort swlen obgr )
  624. def o obgr;
  625. begin
  626.   indan ] swap - 3 / , int u 1 , m ;
  627. : next u ] o ] >= if ff
  628.   o ] u ] + >> m = 3 * indan ] swap -
  629.   ( ] , suwort ] , swlen ] >comp )
  630.   if gr m ] 1 + u = go next
  631. : gr m ] o = go next
  632. : ff o ] 3 * indan ] swap - izg =
  633. bend
  634.  
  635. void einsort( )
  636. int dat , mf , dend ;
  637. begin 
  638. dend = 2 + by ] mf = dend ]] dat =
  639. "/255/255" dend ] =
  640. ( dat ] , ( datlen 1 + ) , dend ] d>such )
  641. ( dend ] 3 + , dend ] , izg ] swap - copy )
  642. izg ] 2 + mf ] swap by = dat ] izg ] =
  643. : fert bend
  644.  
  645. void datsort( )
  646. int zg ;
  647. begin indan ] 3 - zg = go prf
  648. : so swap einsort
  649. : prf 3 zg -= indend ] > if so
  650.   indan ] 3 - izg = getds bend
  651.  
  652. void neuind( )
  653. begin
  654.   putm mwahl dfeld? nif ff
  655.   1 - ifeld = ineu datsort
  656. : ff bend
  657.  
  658. void indin( )
  659. begin
  660.   ( 1 - , ifeld ] dfeld ) indend ] =
  661.   indend ] 2 + by 0 swap by =
  662.   indend ] einsort 3 indend -= 0 swap =
  663. bend
  664.  
  665. void datan( )
  666. int adr ;
  667. begin
  668.   edm datend ] 1 + wzg = putsm
  669.   0 swap by = wzg ] datend = indin
  670. getds bend
  671.  
  672. void >copy( q z n )
  673. begin ,
  674.   q += n ] z += go prf
  675. : ne q --] by ] z --] by =
  676. : prf n ]-- if ne
  677. bend
  678.  
  679. void datdel( )
  680. int zg , da , le ;
  681. begin
  682. izg ]] nif nix dsa da =
  683. ( indend ] , 3 + , izg ] indend ] - >copy )
  684. ( da ] ( len 1 + le = ) + , datend ]
  685. swap - 1 + da ] , swap copy )
  686. le ] datend -= 3 indend +=
  687. indan ] zg = go prf
  688. : korr le ] zg ] -=
  689. : prf 3 zg -= ] nif ff
  690.   da ] > nif prf go korr
  691. : ff izg ]] if nix
  692.   3 izg +=
  693. : nix bend
  694.  
  695. int getz( )
  696. int zg ;
  697. char number[ 8 ;
  698. begin
  699.   number zg =
  700. : vo getc ' ' == if vo
  701. : wr swap zg ]++ by =
  702.   getc ' ' == if ff
  703.   swap '/n' == nif wr
  704. : ff 0 zg ] by =
  705.   number val
  706. bend
  707.  
  708. int text , liste , sfl , pz , menvar[ 13 ;
  709. void menu( )
  710. int n 2 ;
  711. char m 23 1 "Neu" 23 5 "Aendern"
  712. 23 13 "Loeschen" 23 22 "Suchen"
  713. 23 29 "Index" 23 35 "Um" 24 1 "Disk" 24 6 "Print"
  714. 24 12 "Ende" 24 17 "Vor" 24 21 "Rueck" 24 27 "Mark" 24 32 "Opt/0" ;
  715. begin m menp
  716. ( menvar , m mencrea )
  717. ( menvar , 13 , , n >>= menw )
  718. bend
  719.  
  720. void bild( )
  721. int zg ;
  722. def .. zg ]++ by ];
  723. begin
  724.   147 putc text ] zg =
  725. : rd .. nif ff
  726.        '@' == if po
  727.   swap '/"' == if pr
  728.   swap '?' == if in
  729.   .. sfl ] if rd swap putc go rd
  730. : pr sfl ] if pr1 zg ] putl
  731. : pr1 zg ] ( len ) + 1 + zg = go rd
  732. : po ( .. , .. at ) go rd
  733. : in ( .. fe,li defm ) go rd
  734. : ff clrm menu bend
  735.  
  736. char gw( )
  737. begin
  738. : rd stat if ff
  739.   key ' ' == if rd
  740.   swap '/n' == if rd
  741.   swap return
  742. : ff 0 bend
  743.  
  744. void mload( ger fi )
  745. int n , ia , i0 ;
  746. def .. mema ]++ by =;
  747. begin ,
  748.   ( 9 , ger ] , 9 , fi ] open ) 9 #i
  749.   fbegr "<>" $< ian ia =
  750.   gw nif err go rd1
  751. : rd gw nif ff
  752. : rd1 '(' == if fz
  753.   swap ')' == if te
  754.   swap '<' == if beg
  755.   swap '>' == if rd
  756.   swap '//' == if fl
  757.   swap '*' == if li
  758.   swap ',' == if ko
  759.   swap ..
  760.   '@' == if po
  761.   swap '?' == if fe
  762.   swap '/"' == if pr
  763.   swap '.' == if ze
  764.   go err
  765. : fz getz n = setfz go rd
  766. : fl getz setfl n --] if fl
  767. : te mema ] text = go rd
  768. : li 0 .. mema ] liste =
  769. : ko getz 1 + .. getz .. go rd
  770. : po getz .. getz .. go rd
  771. : pwr swap ..
  772. : pr getc '/"' <> if pwr .. go rd
  773. : ze getz .. go rd
  774. : fe getz .. ia ] = i0 ia = go rd
  775. : beg getz fbegr by =
  776.   getz ( fbegr 1 + ) by = go rd
  777. : err 0 .. 9 close 0 return
  778. : ff 0 .. 9 close 1 bend
  779.  
  780. char zb[ 2 , buf[ 37 ;
  781.  
  782. void eg( z s n )
  783. begin ,
  784. ( z ] , s ] at ) scu ( buf , n ] edf )
  785. swap pcu ( ' ' , n ] wputc ) buf
  786. bend
  787.  
  788. void eing( )
  789. begin 0 buf = ( 21 , 1 , 16 eg ) bend
  790.  
  791. void dsuch( )
  792. begin
  793. ( eing , ( len ) , indend ] 3 + d=such ) getds
  794. bend
  795.  
  796. void sp( )
  797. begin
  798.   ( pz ] , 0 at ) swap putc
  799. bend
  800.  
  801. void shf( )
  802. int zg ;
  803. begin
  804.   liste ] zg = go ns
  805. : nf ( ' ' putc izg ]] nif nfn
  806.   izg ] 2 + by ] nif nfn
  807.   18 putc : nfn ) swap
  808.   ( 1 - feld , zg ]++ by ] putlen )
  809. : ns zg ]++ by ] if nf
  810.   '/n' putc
  811. bend
  812.  
  813. int afl ;
  814. void show( )
  815. int szg , n ;
  816. begin
  817.   0 pz =
  818.   20 n = 147 putc izg ] szg = getds
  819. : ne shf skip+ ( getds ) swap nif ff
  820.   n --] if ne
  821. : ff szg ] izg = getds afl ] nif fe menu
  822. : fe bend
  823.  
  824. void sk+( )
  825. begin
  826.   sfl ] if s skip+ getds putm return
  827. : s skip+ nif ff
  828.   ' ' sp
  829.   pz ++] 20 == nif sn show
  830. : sn '*' sp
  831. : ff getds bend
  832.  
  833. void sk-( )
  834. int temp , n ;
  835. begin
  836.   sfl ] if we skip- getds putm return
  837. : we skip- nif ff 
  838.   pz ] if s izg ] temp = 19 n =
  839. : r skip- n --] if r show go n2
  840. : ne skip+
  841. : n2 pz ]++ izg ] temp ] == nif ne
  842. : s ' ' sp pz ]-- '*' sp
  843. : ff getds bend
  844.  
  845. void skv+( )
  846. int n ;
  847. begin
  848.   20 n =
  849. : sk skip+ n --] if sk getds
  850. bend
  851.  
  852. void skv-( )
  853. int n ;
  854. begin
  855.   20 n =
  856. : sk skip- n --] if sk getds
  857. bend
  858.  
  859. void zeig( )
  860. begin
  861.   sfl ] if li putm return
  862. : li show '*' sp
  863. bend
  864.  
  865. void exc( )
  866. begin
  867.   sfl ] nif ff
  868.   ( 0 sfl = bild getds ) swap
  869. : ff bend
  870.  
  871. void res( )
  872. begin
  873.   swap sfl =
  874. bend
  875.  
  876. void mark( )
  877. begin
  878.   sfl ] if we 1 sfl = zeig
  879. : we izg ]] nif we1
  880.   izg ] 2 + 1 swap xor=
  881. : we1 ( pz ] , 0 at ) shf '*' sp sk+
  882. bend
  883.  
  884.  
  885. void lz( )
  886. begin
  887.   ( , 1 at ) ( ' ' , 38 wputc )
  888. bend
  889.  
  890. void setm( )
  891. int zg , n ;
  892. begin n =
  893.   izg ] zg = indan ] izg = go pr
  894. : rs izg ] 2 + n ] swap by =
  895. : pr skip+ if rs
  896. : ff zg ] izg = bend
  897.  
  898. void loesch( )
  899. begin
  900.   indan ] izg = go pr
  901. : do izg ]  2 + by ] nif pr
  902.   datdel 3 izg +=
  903. : pr skip+ if do
  904.   indan ] 3 - izg = getds
  905. bend
  906.  
  907. int ja?( )
  908. begin ( 21 , 1 at ) "wirklich j//n " putl cukey 'j' ==
  909.  ( ( 21 , 1 at ) ( ' ' , 12 wputc ) )
  910. swap bend
  911.  
  912. void opt( )
  913. int opv[ 3 ;
  914. char m 24 1 "Resmark" 24 9 "Setmark" 24 17 "Loeschen/0" ;
  915. def .. == if;
  916. begin
  917.   23 lz 24 lz m menp
  918.   ( opv , m mencrea )
  919.   ( opv , 3 , , 1 menw )
  920.   ( opv , 3 , , "rsl" menw ) nif ff
  921.   3 == if lo
  922.   swap 1 - setm go ff
  923. : lo ja? nif ff loesch
  924. : ff  ( 23 lz 24 lz ) ( menvar , 13 , , menw ) menu
  925. bend
  926.  
  927. void typ( )
  928. char ty "SEQ" "TD " "DV ";
  929. begin
  930.  4 * ty + ( 24 , 16 at ) swap putl
  931. bend
  932.  
  933. char file[ 17 ;
  934. void epp( a n v t s )
  935. int zg ;
  936. begin , a ] nif an file buf $<
  937.   ian ] ifeld ] == if an
  938.   swap ifeld = ineu datsort zeig
  939. : an ( 8 , 8 , 15 , bfile "s:" $< v ] $< buf $< bfile open ) 8 close
  940.   ( 8 , 8 , 8 , v ] , buf , t ] open ) 8 #o n ] nif we "##" putl
  941.   mema ] 1 + ( by ] ) nif we swap putl
  942. : we izg ] zg = indan ] izg = go pr
  943. : do a ] if al izg ] 2 + by ] nif pr
  944. : al s ] putl getds puts
  945. : pr skip+ if do
  946.   # 8 close zg ] izg = getds
  947. bend
  948.  
  949. void exp( a n )
  950. begin
  951.   , buf by ] nif ff
  952.   n ] nif s 1 == if t
  953.   ( a ] , n ] , "" , ",p,w" , "#" epp ) return
  954. : s ( a ] , n ] , "" , ",s,w" , "" epp ) return
  955. : t ( a ] , n ] , "d//" , ",p,w" , "*" epp )
  956. : ff bend
  957.  
  958. void ld( )
  959. int i , n , fi ; char z '#' ;
  960. begin
  961.   n = '#' z by = n ] nif s
  962.   buf fi = n ] 2 == if l '*' z by =
  963.   zb fi = "d//" ] zb =
  964. : l ( 8 , fi ] , mema ] 1 + load ) go ff
  965. : s ( 9 , 8 , 9 , buf open ) 9 #i
  966.   mema ] 1 + izg =
  967. : ns '#' izg ]++ by = fzahl ] i =
  968. : nf ( izg ] , 0xffff getl ) izg =
  969.   '/n' izg ]++ by =
  970.   i --] if nf stat nif ns
  971.   9 close izg ]
  972. : ff datend = z by ] datorg bend
  973.  
  974. void imp( )
  975. int i , n , z , fi ;
  976. def zg datend;
  977. begin n = buf fi =
  978.   "/0*#" n ] + by ] z = nif an
  979.   '#' == if an zb fi = "d//" ] zb =
  980. : an ( 8 , 8 , 8 , fi ] open ) 8 #i  z ] nif ns getc getc
  981. : ne getc stat if ff swap z ] == nif ne
  982. : af getc zg ++] by =  z ] == if fe
  983.   stat nif af
  984. : fe 0 zg ] by = zg ] indin stat nif af
  985.   go ff
  986. : ns zg ++] fzahl ] i =
  987. : nf ( zg ] , 0xffff getl ) zg =
  988.   '/n' zg ]++ by = i --] if nf 
  989.   0 zg ] by = zg ] indin stat nif ns
  990. : ff 8 close getds bend
  991.  
  992. int tyn 2 ;
  993.  
  994. void dirget( fi ger )
  995. int n ;
  996. def .. zg ]++ by = ;
  997. begin ,
  998.   int zg mema ] ;
  999.   147 putc ( fi ] , ger ] dirop )
  1000.   stat nif lab1
  1001.   8 close 0 return
  1002. : lab1 getc getc
  1003. : lab2 getc nif fertig
  1004.   '/"' <> if lab2
  1005.   17 zg ] + n = getc getc getc '#' 0
  1006. : lab3 swap zg ]++ by =
  1007.   getc '/"' <> if lab3
  1008.   '/n' ..
  1009.   zg ] n -=
  1010. : lab5 getc n --] if lab5
  1011. : lab6 getc if lab6
  1012.   getc getc
  1013.   stat nif lab1
  1014. : fertig 8 close zg ]
  1015. bend
  1016.  
  1017. void wr( )
  1018. begin
  1019.   ( swap ( ram ) swap ) swap ]++ by =
  1020. io bend
  1021.  
  1022. int drz ;
  1023. void druck( )
  1024. int zg ;
  1025. def .. zg wr;
  1026. begin
  1027.   ( 9 , 8 , 9 , buf open ) 9 #i
  1028.   ( buf , 16 getl )
  1029.   ram drz ] 4 + buf $< 1 + zg = stat if ff io
  1030. : rd gw nif ff
  1031.   ( .. ) swap
  1032.   ( "lvfN.r" , swap inchar ) if p1
  1033.   swap '/"' == if tx
  1034.   swap '?' == if fr
  1035.   swap '!' == if ru
  1036.   swap ':' == if p3
  1037.   swap 'o' == if p2
  1038.   swap ( "mn()+*" , swap inchar ) if rd
  1039.   io 9 close 0 return
  1040. : p3 getz ..
  1041. : p2 getz ..
  1042. : p1 getz .. go rd
  1043. : fr gw go frx
  1044. : frv swap ..
  1045. : frx getc '/"' <> if frv .. go p2
  1046. : tv swap ..
  1047. : tx getc '/"' <> if tv .. go rd
  1048. : ru getc
  1049.   '!' == nif rd zg ]-- '=' .. go p1
  1050. : ra swap .. getz .. go rd
  1051. : ff ram 0 zg ]++ by = zg ] drz ] =
  1052.   0 swap = drz ]] 2 + drz ] swap =
  1053. drz ]] drz = io 9 close 1 bend
  1054.  
  1055. int dpo , drw ;
  1056. void dp( )
  1057. begin
  1058.   ( dpo ] , 0 at ) swap putc
  1059. bend
  1060.  
  1061. int rpl( )
  1062. int zg ;
  1063. begin ] zg = go pr
  1064. : wr ( io ) swap putc ram
  1065. : pr zg ]++ by ] if wr
  1066. zg ] bend
  1067.  
  1068. void lpl( zg n )
  1069. begin , go prf
  1070. : wr zg by ]] nif ff
  1071.   ( io ) swap putc ram zg ]++ go prf
  1072. : ff io ' ' putc ram
  1073. : prf n ]-- if wr
  1074. bend
  1075.  
  1076. int varf( )
  1077. begin 37 * 0xfc00 + bend
  1078.  
  1079.  
  1080. int skm+( )
  1081. begin
  1082. : pr skip+ if rs return
  1083. : rs izg ] 2 + by ] nif pr
  1084. bend
  1085.  
  1086. void drucken( )
  1087. int zg , rand , var , mu , az ;
  1088. def .. zg ]++ by ];
  1089. def . == if;
  1090. def sw swap;
  1091. begin 0 rand = 0 az = ( 4 , 3 open ) 4 #o
  1092. ram drw ] 4 + ( len ) + 1 + zg = mu =
  1093. : rd io wait-ready if drua
  1094.   ram .. nif ff
  1095.   '/"' . tx
  1096. sw 'n' . cr
  1097. sw 'v' . va
  1098. sw '.' . pu
  1099. sw '?' . fr
  1100. sw 'r' . ra
  1101. sw 'f' . fd
  1102. sw '=' . al
  1103. sw 'N' . cm
  1104. sw 'l' . le
  1105. sw '!' . au
  1106. sw 'm' . mul
  1107. sw '+' . sk
  1108. sw '*' . sa
  1109. sw '(' . ka
  1110. sw ')' . kz
  1111. sw ':' . wd
  1112. sw 'o' . op
  1113.   go ff
  1114. : op ( 4 , .. , .. ( io 4 close ) swap open ) 4 #o go rd
  1115. : ra .. rand = go rd
  1116. : au var rpl go rd
  1117. : cm ( '/n' go le1
  1118. : wd ( .. go le1
  1119. : le ( ' '
  1120. : le1 , .. ( io ) swap wputc ) go rd
  1121. : al ( var ] , .. lpl ) go rd
  1122. : fd .. feld var = go rd
  1123. : pu .. ( io ) swap putc go rd
  1124. : kz skm+ nif sa getds
  1125. : mn mu ] zg = go rd 
  1126. : ka zg ] mu =
  1127. : sa indan ] izg =
  1128. : sk skm+ nif ff getds go rd
  1129. : va .. varf var = go rd
  1130. : mul zg ] mu = io #
  1131.   ( 21 , 1  at ) "Multidruck: " putl
  1132.   0 buf = ( 21 , 13 , 5 eg ) 21 lz buf val nif ff 1 - az = 4 #o go rd
  1133. : cr io '/n' putc ( ' ' , rand ] wputc ) go rd
  1134. : tx zg rpl zg = go rd
  1135. : fr io # ( 23 , 1 at ) ram zg rpl zg =
  1136.   .. varf var = .. if fr1 buf = go fr2
  1137. : fr1 buf var ] $<
  1138. : fr2 io ( 24 , 1 , 36 eg ) 4 #o ram var ] buf $< go rd
  1139. : drua # ( 21 , 1 at ) "Druck fortsetzen j//n" putl cukey 'n' == ( 21 lz ) swap if fert 4 #o go rd
  1140. : ff az ]-- if mn
  1141. : fert io 4 close bend
  1142.  
  1143.  
  1144. void drwahl( )
  1145. int zg ;
  1146. begin ram drw ]] nif ff io
  1147. 147 putc 0xd800 zg = go pr
  1148. : wr zg ] 4 + buf swap $<
  1149.   zg ]] zg = io ' ' putc buf putl '/n' putc
  1150. : pr ram zg ]] if wr
  1151. : ne io '*' dp key 17 == if dn
  1152. swap 145 == if up
  1153. swap 13 == if do go ne
  1154. : dn ram drw ]] nif ne ] nif ne
  1155.   io ' ' dp ram dpo ]++ drw ]] drw = go ne
  1156. : up ram drw ] 2 + ] nif ne
  1157.   io ' ' dp ram dpo ]-- drw ] 2 + ] drw = go ne
  1158. : do drucken
  1159. : ff io 0 bend
  1160.  
  1161. void dload( )
  1162. def .. mema ]++ by =;
  1163. int tp , zg , mn[ 2 ;
  1164. char m 24 1 "Anwendung" 24 11 "Typ:/0" ;
  1165. begin nif anf
  1166. : anfl 0 dpo = ram 0xd800 drz = drw =
  1167.  0 swap = 0xd802 = io 1 sfl = 0 afl = ian =
  1168. 1 setfz 20 setfl
  1169. mema ] liste = 1 .. 20 .. 0 ..
  1170. ( "$dv//*=s" , 8 dirget ) datend =
  1171. '#' datorg izg ]] nif anf zeig
  1172. : ne key 17 == if dn
  1173. swap 145 == if ob
  1174. swap '/n' == nif ne go an
  1175. : dn sk+ go ne
  1176. : ob sk- go ne
  1177. : an 1 afl = 0 sfl = izg ]] rzg =
  1178.  ( 8 , 8 , 8 , buf "dv//" $< ( , 13 getd ) buf open )
  1179.  8 #i ( buf , 16 getl ) stat tp = # buf by ] nif err
  1180.  ( 8 , buf mload ) nif berr tp ] nif da
  1181.  mema ] 1 + datend = '#' datorg 0 file = go ff
  1182. : da 8 #i ( buf , 16 getl ) stat tp = #
  1183.  file buf $< tyn ] ld tp ] if ff
  1184. : dr 8 #i ( buf , 16 getl ) stat tp = #
  1185.   druck nif derr tp ] nif dr
  1186. : ff 8 close bild getds zeig return
  1187. : err 8 close
  1188. : anf 147 putc m menp
  1189. ( mn , m mencrea )
  1190. ( mn , 2 , , 1 menw )
  1191. : nex tyn ] typ ( mn , 2 , , "at" menw )
  1192.  nif ne 1 == if anfl tyn ]++ 3 tyn %= go ne
  1193. : derr 8 close 147 putc "Fehler in Druckmaske/n" putl end
  1194. : berr 8 close 147 putc "Fehler in Bildschirmmaske/n" putl end
  1195. : fert bend
  1196.  
  1197. void disk( )
  1198. def n tyn;
  1199. int div[ 7 ;
  1200. char m 23 1 "Dir" 23 5 "Anwendung" 23 15 "Laden" 23 21 "Speichern" 23 31 "Import" 24 1 "Export" 24 11 "Typ:/0" ;
  1201. def .. == if;
  1202. def # swap;
  1203. begin
  1204. : an 23 lz 24 lz m menp
  1205.   ( div , m mencrea )
  1206.   ( div , 7 , , 1 menw )
  1207. : ne n ] typ
  1208.   ( div , 7 , , "dalsiet" menw ) nif ff
  1209.   1 .. di
  1210. # 2 .. anw
  1211. # 3 .. lo
  1212. # 4 .. sa
  1213. # 5 .. im
  1214. # 6 .. ex
  1215. # 7 .. ty
  1216.   go ff
  1217. : ty n ]++ 3 n %= go ne
  1218. : ex eing ( 0 , n ] exp ) go ff
  1219. : anw ja? nif ff dload go ff
  1220. : sa ( 21 , 1 at ) ( file , 16 putf ) 146 putc ( 21 , 1 at ) cuon
  1221. : sa1 3 syscon by ] nif sa1 cuof 4 syscon by ] '/n' == if san eing go saw
  1222. : san 21 lz key buf file $<
  1223. : saw ( 1 , n ] exp ) go ff
  1224. : di ( "$" , 8 dir )
  1225. sfl ] if di1 bild getds
  1226. : di1 zeig go ff
  1227. : im eing n ] imp getds zeig go ff
  1228. : lo eing buf by ] nif ff file buf $< n ] ld getds zeig
  1229. : ff ( 23 lz 24 lz ) ( menvar , 13 , , 7 menw ) menu
  1230. bend
  1231.  
  1232. void mlim( )
  1233. int n ;
  1234. begin
  1235.   indend ] swap - n = 200 > if ff
  1236.   ( 21 , 1 at ) ( "Noch frei: %" , n ] fprint )
  1237. : ff bend
  1238.  
  1239. void doit( )
  1240. const cup 145 cud 17 ;
  1241. def . return :;
  1242. def # swap;
  1243. def .. == if;
  1244. def (( exc (;
  1245. def )) ) res;
  1246. int z , gr ;
  1247. begin
  1248.   ( menvar , 13 , , "nalsiudpevrmo" menw  ( swap z = ) swap )
  1249.   nif ze
  1250.   1 .. neu
  1251. # 2 .. ed
  1252. # 3 .. lo
  1253. # 4 .. su
  1254. # 5 .. id
  1255. # 6 .. um
  1256. # 7 .. di
  1257. # 8 .. pr
  1258. # 9 .. ff
  1259. # 10 .. vb
  1260. # 11 .. rb
  1261. # 12 .. ma
  1262. # 13 .. op
  1263. : ze z ] 17 .. vor
  1264. # 145 .. rue
  1265. . vor sk+
  1266. . rue sk-
  1267. . vb skv+ zeig
  1268. . rb skv- zeig
  1269. . pr drwahl sfl ] if pr1 bild getds
  1270. : pr1 zeig
  1271. . su dsuch zeig
  1272. . id (( neuind )) zeig
  1273. . neu (( datend ] mlim clrm datan 21 lz )) zeig
  1274. . ma mark
  1275. . di disk
  1276. . op opt zeig
  1277. . lo ja? nif fe datdel getds zeig
  1278. . um exc 1 xor sfl = zeig
  1279. . ed datend ] gr = izg ]] nif ed1 izg ] 2 + by ]
  1280. : ed1 z = (( gr ] mlim datdel datan 21 lz )) izg ] 2 + z ] swap by = zeig
  1281. . ff ja? nif fe 147 putc end
  1282. : fe bend
  1283.  
  1284. main()
  1285. begin ram ( 0 varf , 0 , 370 fill ) io
  1286. 0 dload
  1287. : ta doit go ta
  1288. bend