home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsr / sorter10 / OPL / SORTER.OPL
Text File  |  1992-11-30  |  3KB  |  236 lines

  1. rem * Phone Book Sorter for
  2. rem * Psion Series 3
  3. rem *
  4. rem * sort a data file by
  5. rem * its first field.  The first
  6. rem * field is assumed to be a
  7. rem * string.
  8. rem *
  9. rem * Tal Dayan,  Dec 92
  10. rem *
  11.  
  12. app Sorter
  13.      type 4
  14.      path "\dat"
  15.      ext "dbf"
  16.      icon "\opd\sorter.pic"
  17. enda
  18.   
  19.  
  20. proc main:
  21.  
  22.     statuswin on
  23.     rem screen 30, 9, 1, 1
  24.     gsetwin 0, 0, 185, 79
  25.     gborder $200+1
  26.     
  27.     at 3, 2
  28.     print "Sorter v1.00  by Tal Dayan"
  29.  
  30.     if cmd$(3)="C"
  31.         dInit
  32.             dText "",  "Only existing files can be sorted", 2
  33.             dButtons "Exit", -27
  34.         dialog
  35.         stop
  36.     endif
  37.     
  38.     open:(cmd$(2))
  39.  
  40.     if sorted%:
  41.         dInit
  42.             dText "",  "File already sorted", 2
  43.             dButtons "Exit", -27
  44.         dialog
  45.     else
  46.         at 3,4
  47.         print "["; count; "] entrys"
  48.         sort:
  49.         sound:
  50.         dInit
  51.             dText "",  "Sorting done", 2
  52.             dButtons "Exit", -27
  53.         dialog
  54.     endif
  55. endp
  56.  
  57.  
  58.    rem -- Open and sort the
  59.    rem -- file. This is done
  60.    rem -- by moving the record
  61.    rem -- with smallest name
  62.    rem -- to the end of the
  63.    rem -- file
  64.    
  65.  
  66. proc sort:
  67.     local n%
  68.         
  69.     n%=count
  70.     
  71.     busy "[Sorting] ", 1
  72.     
  73.     bar:(-1.0)
  74.     
  75.     while n% > 0
  76.         findNext: (n%)
  77.         update
  78.         n% = n% - 1
  79.         bar:(1.0 - flt(n%) / flt(count))
  80.     endwh
  81.     
  82.     Busy off
  83.     
  84. endp
  85.  
  86.  
  87.    rem -- Ask user for file
  88.    rem -- to sort and open it
  89.    rem -- as logical file A
  90.    
  91.  
  92. proc open:(fn$)
  93.     local fname$(254)
  94.     local e%
  95.     local ok%
  96.     local ask%
  97.     
  98.     if fn$=""
  99.         ask%=-1
  100.         fname$="\dat\*.dbf"
  101.     else
  102.         ask%=0
  103.         fname$=fn$
  104.     endif
  105.     
  106.     do
  107.         if ask%
  108.             dInit "Data file to sort"
  109.             dFile fname$, "", 16
  110.             if dialog = 0
  111.                 stop
  112.             endif
  113.         endif
  114.         
  115.         
  116.         trap open fname$,a,name$
  117.         if err = 0
  118.             ok% = 1
  119.         else
  120.             e%=err
  121.             dInit err$(e%)
  122.             dText "", " ", 0
  123.             dText "", fname$, 0
  124.             dText "", " ", 0
  125.             if ask%
  126.                 dButtons "Abort", -27, "Retry", -13
  127.             else
  128.                 dButtons "Abort", -27
  129.             endif
  130.             if dialog = 0
  131.                 stop
  132.             endif
  133.             ok% = 0
  134.         endif
  135.     until ok%
  136. endp
  137.  
  138.  
  139.  rem -- Position the file on
  140.  rem -- the smallest record
  141.  rem -- among the records
  142.  rem -- 1..n
  143.  
  144.  
  145. proc sorted%:
  146.     local ok%
  147.     local sel$(254)
  148.     
  149.     first
  150.     ok% = not 0
  151.     
  152.     sel$=lower$(a.name$)
  153.     while pos < count and ok%
  154.         next
  155.         if (lower$(a.name$) < sel$)
  156.             ok% = 0
  157.         else
  158.            sel$=lower$(a.name$)
  159.         endif
  160.     endwh
  161.     Busy off
  162.     return ok%
  163. endp
  164.  
  165.  
  166.  rem -- Position the file on
  167.  rem -- the smallest record
  168.  rem -- among the records
  169.  rem -- 1..n
  170.  
  171. proc findNext: (n%)
  172.     local sel%
  173.     local sel$(254)
  174.     first
  175.     sel%=1
  176.     sel$=lower$(a.name$)
  177.     while pos < n%
  178.         next
  179.         if (lower$(a.name$) < sel$)
  180.             sel%=pos
  181.             sel$=lower$(a.name$)
  182.         endif
  183.     endwh
  184.     position sel%
  185. endp
  186.  
  187.  
  188.    rem -- wait the user to
  189.    rem -- press Enter, used
  190.    rem -- for debuging only
  191.  
  192. proc wait:
  193.     local r$(5)
  194.     print "   continue...";
  195.     input r$
  196. endp
  197.  
  198.  
  199.     rem -- 
  200.     rem -- make sound
  201.     rem --
  202.     
  203.  
  204. proc sound:
  205.     local i%
  206.     i%=300
  207.     while i% < 1000
  208.         beep 2, i%
  209.         i% = i% + 150
  210.     endwh
  211. endp
  212.  
  213.  
  214. proc bar: (cmd)
  215.  
  216.     local x0%, y0%, w0%, h0%
  217.     local x1%, y1%, w1%, h1%
  218.     local s
  219.  
  220.     x0%= 9        :    y0%=50
  221.     w0%=164        :    h0%=12
  222.  
  223.     x1%=2            :    y1%=2
  224.  
  225.     w1%=w0%-5
  226.     h1%=h0%-5
  227.  
  228.     if (cmd < 0)
  229.         gCreate(x0%, y0%, w0%, h0%, 1)
  230.         gBorder 1
  231.     else
  232.         gAt x1%, y1%
  233.         gfill w1%*cmd, h1%, 0
  234.     endif
  235. endp
  236.