home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / historic / v941.tgz / icon.v941src.tar / icon.v941src / ipl / progs / lister.icn < prev    next >
Text File  |  2000-07-29  |  14KB  |  433 lines

  1. ############################################################################
  2. #
  3. #    File:     lister.icn
  4. #
  5. #    Subject:  Program to list filess
  6. #
  7. #    Author:   Beppe Pavoletti
  8. #
  9. #    Date:     December 28, 1995
  10. #
  11. ############################################################################
  12. #
  13. #   This file is in the public domain.
  14. #
  15. ############################################################################
  16. #
  17. #  This program lists files.  Note that the language is in Italian.
  18. #
  19. ############################################################################
  20. #
  21. # PROGRAMMA LIST visualizzazione e stampa file
  22. #
  23. # Autore: Beppe Pavoletti
  24. #         Via Trieste 12 I-15011
  25. #         ACQUI TERME AL
  26. #
  27. # Tel. 0144.320218
  28. #
  29. # Versione 2.0   26.12.1993
  30.  
  31. ##############################################################################
  32.  
  33. procedure main()
  34.  
  35. local tasto
  36.  
  37. repeat {
  38.    righe(26)
  39.    write("▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒")
  40.    write()
  41.    write("       LIST V 2.0 -- Visualizzazione/elaborazione file  -- 26.12.1993")
  42.    write()
  43.    write("          di Beppe Pavoletti  Via Trieste 12  I-15011 ACQUI TERME AL ")
  44.    write()
  45.    write("                  ▓▒░  "||&dateline||" ░░░░░▒▒▒▒▓▓▓")
  46.    write()
  47.    write()
  48.    write("            A - Visualizzazione file            ")
  49.    write("            B - Stampa su file o stampante      ")
  50.    write("            C - Elaborazione file               ")
  51.    write("            D - Ricerca di stringhe             ")
  52.    write("            E - Cambia la directory corrente    ")
  53.    write()
  54.    write("              X - Torna al DOS                  ")
  55.    write()
  56.    writes("               SCELTA >> ")
  57.    repeat
  58.       { tasto:=getch()
  59.         if find(tasto,"aAbBcCdDeExX") then
  60.             break }
  61.    write()
  62.    write()
  63.    case tasto of {
  64.       "a"|"A": faivedere(dainome())
  65.       "b"|"B": stampa()
  66.       "c"|"C": trasforma() 
  67.       "d"|"D": cerca()
  68.       "e"|"E": cambiadir()
  69.       "x"|"X": exit(0) }                     # fine del case
  70.    }                                         # fine del repeat
  71. end
  72. ##############################################################################
  73.                                 
  74.                                 
  75. ##############################################################################
  76. procedure righe(quante)                              # produce righe vuote
  77.  
  78. local contarighe
  79.  
  80. contarighe:=1
  81. until contarighe = quante do
  82.       { write()
  83.         contarighe+:=1 }
  84. end
  85. ##############################################################################
  86.                                         
  87.  
  88. ##############################################################################
  89. procedure dainome()
  90.  
  91. local quale
  92.  
  93.    quale:=""
  94.    writes("Introdurre un nome di file valido: ")
  95.    while quale == "" do
  96.       quale:=read()
  97.    return quale
  98. end
  99. ##############################################################################
  100.  
  101.  
  102. ##############################################################################
  103. procedure lpag()
  104.  
  105. local valore
  106.  
  107. write()
  108. writes("Lunghezza di pagina (0 = nessun salto pagina) ")
  109. if numeric(valore:=read()) then
  110.     return valore
  111. else
  112.     return 0
  113. end
  114. ##############################################################################
  115.  
  116.  
  117. ##############################################################################
  118. procedure margs()
  119.  
  120. local margine
  121.  
  122. write()
  123. writes("Scostamento dal margine sinistro ")
  124. if numeric(margine:=read()) then
  125.     return repl(" ",margine)
  126. else
  127.     return ""
  128. end
  129. ##############################################################################
  130.  
  131.  
  132. ##############################################################################
  133. procedure numriga()
  134.  
  135. local risp                                    # risposta
  136.  
  137. write()
  138. writes("Stampa numeri di riga ? (S/N) ")
  139. repeat
  140.    { risp:=getch()
  141.      if find(risp,"sSnN") then
  142.          break }
  143. return risp
  144. end
  145. ##############################################################################
  146.  
  147.  
  148. ##############################################################################
  149. procedure compresso()
  150.  
  151. local risp                                    # risposta
  152.  
  153. write()
  154. writes("Attiva la stampa compressa con il carattere ASCII 15 ? (S/N) ")
  155. repeat
  156.    { risp:=getch()
  157.      if find(risp,"sSnN") then
  158.          break }
  159. return risp
  160. end
  161. ##############################################################################
  162.  
  163.  
  164.  
  165. ##############################################################################
  166. procedure trasforma()                    # elabora file
  167.  
  168. local tasto
  169.  
  170. repeat
  171.     { write()
  172.       write("  QUALE ELABORAZIONE VUOI EFFETTUARE ?")
  173.       write()
  174.       write("       A - Copia file")
  175.       write("       B - Elimina i fine riga (LF/CR)")
  176.       write("       C - Sostituzione carattere a scelta")
  177.       write("       D - Sostituisce le tabulazioni con spazi")
  178.       write("       E - Elimina i caratteri speciali (ASCII 0-31)")
  179.       write("       F - Elimina i caratteri ASCII estesi (> 126)")
  180.       write("       G - Elimina i caratteri speciali ed estesi")
  181.       write("       H - Elimina i caratteri spec. tranne segni diacritici")
  182.       write("       I - Elimina i caratteri speciali tranne LF/CR")
  183.       write()
  184.       write("          X - Menu principale")
  185.       write()
  186.       writes("       Scelta -->  ")
  187.       repeat
  188.         { tasto:=getch()
  189.           if find(tasto,"aAbBcCdDeEfFgGhHiIxX") then
  190.              break }
  191.       righe(3)
  192.       case tasto of {
  193.         "a"|"A": copiafile(1)
  194.         "b"|"B": copiafile(2)
  195.         "c"|"C": copiafile(3)
  196.         "d"|"D": copiafile(4)
  197.         "e"|"E": copiafile(5)
  198.         "f"|"F": copiafile(6)
  199.         "g"|"G": copiafile(7)
  200.         "h"|"H": copiafile(8)        
  201.         "i"|"I": copiafile(9)
  202.         "x"|"X": break } }                    # fine del repeat
  203. end
  204. ##############################################################################
  205.  
  206.  
  207. ##############################################################################
  208. procedure sceglinumero(messaggio)             # introduzione di un numero
  209.  
  210. local quale
  211.  
  212. write()
  213. writes(messaggio||"  ")
  214. repeat
  215.      { quale:=read()
  216.        if numeric(quale) then
  217.           if (quale > 0) then
  218.                break }
  219. write()
  220. return quale
  221. end
  222. ##############################################################################
  223.  
  224.  
  225. ##############################################################################
  226. procedure cambiadir()
  227.  
  228. local nomedir
  229.  
  230. write()
  231. writes("Passare alla directory ")
  232. if not chdir(nomedir:=read()) then
  233.       write(char(7)||"DIRECTORY NON ESISTENTE O NOME NON VALIDO")
  234. end
  235. ##############################################################################
  236.  
  237.  
  238. ##############################################################################
  239. procedure copiafile(switch)
  240.  
  241. local origine,dest,nome1,nome2,dati,dati2,car,x,vecchio,nuovo,quantispazi,acc
  242.  
  243. acc:='òàùèìüéäâåêëïîÄÅÉôöûÿÖÜáíóúñÑß'            # set dei caratteri accentati
  244. write()
  245. write("SCELTA FILE O DEVICE DI ORIGINE ")
  246. nome1:=dainome()
  247. write()
  248. write("SCELTA FILE O DEVICE DI DESTINAZIONE")
  249. nome2:=dainome()
  250. write()
  251. if (origine:=open(nome1,"ru")) & (dest:=open(nome2,"wu")) then     # apre i file   { while dati:=reads(origine,1000) do
  252.    { case switch of {
  253.      3: { vecchio:=sceglinumero("CODICE ASCII DEL CARATTERE DA SOSTITUIRE: ")
  254.           nuovo:=sceglinumero("CODICE ASCII DEL NUOVO CARATTERE") }
  255.      4: { quantispazi:=sceglinumero("QUANTI SPAZI PER UNA TABULAZIONE ? ") } }
  256.      while dati:=reads(origine,40000) do
  257.      { case switch of {
  258.          2:  every x:=(dati ? find(char(10)|char(13))) do
  259.                    dati[x]:=" "
  260.          3: { every x:=(dati ? find(char(vecchio))) do
  261.                    dati[x]:=char(nuovo) }
  262.          4: { dati2:=""
  263.               dati ? { while car:=move(1) do
  264.                          { if (car == "\t") then
  265.                               car:=repl(" ",quantispazi)
  266.                            dati2:=dati2||car } }
  267.               dati:=dati2 }
  268.          5: { dati2:=""
  269.               dati ? { while car:=move(1) do
  270.                          { if (ord(car) < 32) then
  271.                               car:=""
  272.                            dati2:=dati2||car } }
  273.               dati:=dati2 }
  274.          6: { dati2:=""
  275.               dati ? { while car:=move(1) do
  276.                          { if (ord(car) > 126) then
  277.                               car:=""
  278.                            dati2:=dati2||car } }
  279.               dati:=dati2 }
  280.          7: { dati2:=""
  281.               dati ? { while car:=move(1) do
  282.                          { if ((ord(car) > 126)|(ord(car) < 32)) then
  283.                               car:=""
  284.                            dati2:=dati2||car } }
  285.               dati:=dati2 }
  286.          8: { dati2:=""
  287.               dati ? { while car:=move(1) do
  288.                          { if ((ord(car) > 126) & (not find(car,acc))) then
  289.                               car:=""
  290.                            dati2:=dati2||car } }
  291.               dati:=dati2 }
  292.          9: { dati2:=""                                                
  293.               dati ? { while car:=move(1) do
  294.                          { if (ord(car) < 32) & ((ord(car) ~= 10) & (ord(car) ~= 13)) then
  295.                               car:=""
  296.                            dati2:=dati2||car } }
  297.               dati:=dati2 } }
  298.      writes(dest,dati) }                             # while dati:=
  299.      close(origine)
  300.      close(dest) }
  301. else
  302.    { write()
  303.      write(char(7)||"IMPOSSIBILE APRIRE I FILE DI INPUT E/O OUTPUT") }
  304. end
  305. ##############################################################################
  306.  
  307.  
  308. ##############################################################################
  309. procedure stampa()                               # stampa o duplica il file
  310.  
  311. local origine,dest,nome1,nome2,riga,contarighe,lungh,marg,nriga,comp
  312.  
  313. write("SCELTA FILE O DEVICE DI ORIGINE ")
  314. nome1:=dainome()
  315. write()
  316. write("SCELTA FILE O DEVICE DI DESTINAZIONE")
  317. nome2:=dainome()
  318. write()
  319. if (origine:=open(nome1,"r")) & (dest:=open(nome2,"w")) then     # apre i file
  320.       { lungh:=lpag()                         # sceglie la lunghezza pagina
  321.         nriga:=numriga()                      # stampa numeri di riga
  322.         if (not find(nriga,"sS")) then
  323.             marg:=margs()                     # scostamento dal margine
  324.     comp:=compresso()                            # stampa compressa
  325.     if find(comp,"sS") then                      
  326.    { write(dest,char(27)||char(120)||"0")     # imposta il draft
  327.      write(dest,char(27)||char(77))           # imposta l'elite
  328.         write(dest,char(15)) }                   # imposta il compresso
  329.      contarighe:=1
  330.         while riga:=read(origine) do
  331.           { if nriga == ("s"|"S") then
  332.                marg:=contarighe||" "
  333.             write(dest,marg||riga)
  334.             if (lungh ~= 0) & ((contarighe % lungh) = 0) then
  335.                write(dest,char(12))           # manda un salto pagina
  336.             contarighe+:=1 }                  # while riga
  337.         write(dest,char(12))                  # salto pagina alla file
  338.     write(dest,char(18))                  # annulla il compresso
  339.         close(origine)
  340.         close(dest)
  341.         write()
  342.         write("SCRITTE "||contarighe||" righe di "||nome1||" su "||nome2)
  343.         writes(" Invio per continuare ...")
  344.         read() }                              # if dest ...
  345. else
  346.    { write()
  347.      write("IMPOSSIBILE APRIRE I FILE DI INPUT E/O OUTPUT") }
  348. end
  349. ##############################################################################
  350.  
  351.  
  352. ##############################################################################
  353. procedure dimmelo()
  354.  
  355. local quale
  356.  
  357.    quale:=""
  358.    writes("Stringa da cercare  >>  ")
  359.    while quale == "" do
  360.       quale:=read()
  361.    return quale
  362. end
  363. ##############################################################################
  364.  
  365.  
  366. ##############################################################################
  367. procedure cerca()                               # ricerca di testo
  368.  
  369. local origine,dest,nome1,nome2,riga,posizione,contatrova,testo
  370.  
  371. write("SCELTA FILE O DEVICE DI ORIGINE ")
  372. nome1:=dainome()
  373. write()
  374. write("SCELTA FILE O DEVICE DI DESTINAZIONE")
  375. nome2:=dainome()
  376. write()                                                       
  377. testo:=dimmelo()                                  # testo da cercare
  378. contatrova:=0
  379. righe(25)
  380. if (origine:=open(nome1,"r")) & (dest:=open(nome2,"w")) then     # apre i file
  381.     { while riga:=reads(origine,40000) do
  382.       { every posizione:=(riga ? find(testo,riga)) do
  383.         { contatrova+:=1       
  384.           write(char(7)||riga[posizione-38:posizione+38])
  385.           write(dest,"Occorrenza "||string(contatrova)||" di "||testo)
  386.           write(dest,riga[posizione-38|1:posizione+38|(*riga-posizione)])
  387.           write(dest,"------------------------------------------")
  388.           write(dest)                                } }   #scrive                          
  389.       close(origine)
  390.       close(dest)
  391.       righe(4)                                                        
  392.       write("Ricerca di "||testo||" nel file "||nome1)
  393.       write("Trovate "||string(contatrova)||" occorrenze")
  394.       write() 
  395.       writes(" Invio per continuare ...")
  396.       read() }                              # if dest ...
  397. else
  398.    { righe(2)
  399.      write("IMPOSSIBILE APRIRE I FILE DI INPUT E/O OUTPUT") }
  400. end
  401. ##############################################################################
  402.  
  403.  
  404. ##############################################################################
  405. procedure faivedere(nfile)                     # fa vedere il file
  406.  
  407. local testo,riga,conta,x, count
  408.  
  409. if testo:=open(nfile,"r") then              # apre il file per la lettura
  410.   { count:=0
  411.      while riga:=read(testo) do                # ciclo lettura file
  412.       { write(riga)
  413.         count+:=1
  414.         if (count % 21) = 0 then               # fine pagina
  415.            { write()
  416.              write("▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒")
  417.              writes("   >> UN TASTO PER CONTINUARE   X PER USCIRE  ")
  418.              x:=getch()
  419.              if find(x,"xX") then
  420.             break  } }
  421.      close(testo)
  422.      write()
  423.      write()
  424.      write("   >>> RIGHE SCRITTE "||count)
  425.      writes("  Invio per continuare ...  ")
  426.      read() }
  427.    else                                       # l'apertura fallisce
  428.       { write()
  429.         write("IMPOSSIBILE APRIRE IL FILE !!") }
  430.    write()
  431. end
  432. #############################################################################
  433.