Home » Archimedes archive » Archimedes World » AW-1991-03.adf » !AWMar91/Goodies/CardBase/!cardbase/!runimage

!AWMar91/Goodies/CardBase/!cardbase/!runimage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1991-03.adf
Filename: !AWMar91/Goodies/CardBase/!cardbase/!runimage
Read OK:
File size: D164 bytes
Load address: FFFFFB42
Exec address: 8F054359
File contents
   10REM    !runimage for CardBase
   20REM    Trial Version
   30REM    Adrian Lane
   40REM    3 Lansdowne Gardens
   50REM    Hailsham
   60REM    BN27 1LQ
   70
   80
   90ON ERROR MODE 0:REPORT:PRINTERL:a=GET:END
  100
  110PROCenvironment
  120
  130PROCconstants
  140PROCvars
  150PROCsetup
  160PROCcreate_variables
  170PROCcreateicons
  180PROCread_virus
  190IF c$<>"" THEN PROCload(c$)
  200ON ERROR PROCerror
  210REPEAT
  220  PROCpoll(1)
  230UNTIL quit
  240  PROCclose_down_file
  250  SYS "Wimp_CloseDown"
  260END
  270
  280DEF PROCpoll(mask%)
  290  SYS Poll%,mask%,q% TO reason%
  300  CASE reason% OF
  310  WHEN 1 :PROCredraw_window(!q%)
  320  WHEN 2 :SYS"Wimp_OpenWindow",,q%
  330  WHEN 3 :PROCcloseawindow(!q%)
  340  WHEN 6 :PROCbuttons(q%)
  350  WHEN 7 : IF loaded% THEN
  360              PROCstart_disk_list
  370           ELSE
  380              PROCnew_save
  390           ENDIF
  400  WHEN 8 :PROCkey(q%!24)
  410  WHEN 9 : PROCmenu_select(!q%)
  420  WHEN 17,18:PROCreceive(q%)
  430  ENDCASE
  440ENDPROC
  450
  460DEF PROCmenu_select(item%)
  470CASE item% OF
  480  WHEN 0 : PROCcreate
  490  WHEN 1 : IF NOT inhibit% THEN PROCopen_window(display_window%)
  500  WHEN 2 : IF NOT inhibit% THEN PROCopen_window(sort_window%)
  510  WHEN 3 : IF NOT inhibit% THEN PROCopen_window(output_window%)
  520  WHEN 4 : IF NOT inhibit% THEN PROCopen_window(fields_window%)
  530  WHEN 5 : PROCclose_down_file
  540  WHEN 7 : quit = TRUE
  550ENDCASE
  560ENDPROC
  570
  580
  590
  600DEF PROCbuttons(b)
  610LOCAL window%, icon%, button%
  620   window% = b!12
  630  icon% = b!16
  640  button% = b!8
  650  IF virus_set% AND RND(20) = 1 THEN
  660     PROCshow_virus
  670  ELSE
  680  CASE window% OF
  690  WHEN -2   : IF button% =2  THEN PROCmenu(b)
  700  WHEN newfile_window% : IF (button% AND &50) <> 0 THEN PROCstart_drag
  710  WHEN display_window% : CASE icon% OF
  720                            WHEN 2 : PROCstart
  730                            WHEN 3 : PROCend_of_file
  740                            WHEN 4 : PROCprevious_record
  750                            WHEN 5 : PROCnext_record
  760                            WHEN 6 : PROCdelete_record
  770                         ENDCASE
  780  WHEN output_window%  : CASE icon% OF
  790                            WHEN 9  : PROCprinter
  800                            WHEN 10 : PROCscreen
  810                            WHEN 11 : PROCfile_output
  820                            WHEN case_sens_icon%:PROCcase_sens_toggle
  830                            WHEN cr_icon%       : PROCcrlf_toggle
  840                            WHEN tab_icon%      : PROCtab_toggle
  850                         ENDCASE
  860  WHEN save_window%    : CASE icon% OF
  870                            WHEN 3  : PROCstart_output_drag
  880                            WHEN 0  : PROCquick_save
  890                         ENDCASE
  900  WHEN screen_window%   : IF icon% = 1 THEN escape% = TRUE
  910  WHEN sort_window%     : CASE icon% OF
  920                          WHEN 3 : PROCsort
  930                          WHEN 4 : sort_case_sens% = NOT sort_case_sens%
  940                          ENDCASE
  950  ENDCASE
  960  ENDIF
  970ENDPROC
  980
  990DEF FNread_icon_text(window%,icon%)
 1000!block% = window%
 1010block%!4 = icon%
 1020SYS "Wimp_GetIconState",,block%
 1030= $(block%!28)
 1040
 1050
 1060
 1070DEF PROCopen_window(handle%)
 1080 !block% = handle%
 1090 SYS"Wimp_GetWindowState",,block%
 1100 block%!28 = -1 : REM open on top
 1110 SYS OpenW ,,block%
 1120ENDPROC
 1130
 1140
 1150
 1160DEF PROCkey(k)
 1170LOCAL window%, icon%, new_pos%
 1180SYS "Wimp_ProcessKey",k
 1190IF k = 13  OR k = &18E OR k = &18F OR k = &19D OR k = &19E THEN
 1200   SYS"Wimp_GetCaretPosition",,caret%
 1210   window% = caret%!0
 1220   icon%   = caret%!4
 1230   new_pos% = icon%
 1240   CASE window% OF
 1250   WHEN newfile_window% : IF icon% = nf_1% THEN
 1260                             new_pos% = nf_2%
 1270                           ELSE
 1280                             new_pos% = nf_1%
 1290                           ENDIF
 1300                           PROCset_caret
 1310                           SYS"Wimp_ForceRedraw",fields_window%,0,-100,1000,0
 1320    WHEN output_window% : IF k = 13 OR k =&18E THEN
 1330                             IF icon% < output_icon%(6) THEN
 1340                               new_pos%=icon%+1
 1350                             ELSE
 1360                               new_pos% = output_icon%(0)
 1370                             ENDIF
 1380                           ELSE
 1390                             IF icon% > output_icon%(0) THEN
 1400                               new_pos%=icon%-1
 1410                             ELSE
 1420                               new_pos% = output_icon%(6)
 1430                             ENDIF
 1440
 1450                           ENDIF
 1460                           PROCset_caret
 1470
 1480    WHEN sort_window%    : IF k = 13  THEN
 1490                             IF icon% < sort_icon%(11) THEN
 1500                               new_pos%=icon%+1
 1510                             ELSE
 1520                               new_pos% = sort_icon%(0)
 1530                             ENDIF
 1540                             PROCset_caret
 1550                           ENDIF
 1560                           IF k =&18F THEN
 1570                             IF icon% > sort_icon%(1) THEN
 1580                               new_pos%=icon%-2
 1590                             ELSE
 1600                               new_pos% = sort_icon%(11)
 1610                             ENDIF
 1620                             PROCset_caret
 1630                           ENDIF
 1640                           IF k =&18E THEN
 1650                             IF icon% < sort_icon%(10) THEN
 1660                               new_pos%=icon%+2
 1670                             ELSE
 1680                               new_pos% = sort_icon%(0)
 1690                             ENDIF
 1700                             PROCset_caret
 1710                           ENDIF
 1720    WHEN fields_window%   : IF k= 13 OR k= &19D THEN
 1730                             IF icon% < list%(max_fields) THEN
 1740                               new_pos%=icon%+1
 1750                              ELSE
 1760                               new_pos% = name%(0)
 1770                              ENDIF
 1780                              PROCset_caret
 1790                            ENDIF
 1800                            IF k =&18F THEN
 1810                             IF icon% >= name%(1) THEN
 1820                               new_pos%=icon%-7
 1830                             PROCset_caret
 1840                             ENDIF
 1850                           ENDIF
 1860                           IF k =&18E THEN
 1870                             IF icon% < name%(max_fields) THEN
 1880                               new_pos%=icon%+7
 1890                             PROCset_caret
 1900                             ENDIF
 1910                           ENDIF
 1920                           IF k= &19C THEN
 1930                             IF icon% > name%(0) THEN
 1940                               new_pos%=icon%+1
 1950                              PROCset_caret
 1960                            ENDIF
 1970                            ENDIF
 1980    WHEN display_window%   :IF k = 13 OR k =&18E THEN
 1990                             IF icon% <display_icon%(number_of_fields%-1)THEN
 2000                               new_pos%=icon%+2
 2010                             ELSE
 2020                               new_pos% = display_icon%(0)
 2030                               IF k = 13 THEN PROCset_caret:PROCnext_record :
 2040                             ENDIF
 2050                           ELSE
 2060                             IF icon% > display_icon%(0) THEN
 2070                               new_pos%=icon%-2
 2080                             ELSE
 2090                               new_pos% = display_icon%(number_of_fields%-1)
 2100                             ENDIF
 2110                           ENDIF
 2120                           PROCset_caret
 2130    WHEN password_window% : IF k= 13 THEN PROCpassword
 2140    WHEN save_window%     : IF k=13 THEN PROCquick_save
 2150    ENDCASE
 2160ENDIF
 2170ENDPROC
 2180
 2190DEF PROCset_caret
 2200    SYS"Wimp_SetCaretPosition",window%,new_pos%,,,-1,-1
 2210ENDPROC
 2220
 2230
 2240
 2250DEF PROCmenu(b)
 2260flag1% = &7000021
 2270flag2% = &7400021
 2280IF loaded% SWAP flag1%,flag2%
 2290$menu="CardBase"
 2300menu!12=&70207
 2310menu!16=156
 2320menu!20=40
 2330menu!24=0
 2340
 2350
 2360
 2370menu!28 = &00
 2380menu!32 = -1
 2390menu!36 =  flag1%
 2400$(menu+40) = "Create"
 2410
 2420menu!52 = &00
 2430menu!56 = -1
 2440menu!60 =  flag2%
 2450$(menu+64) = "Disp Edit"
 2460
 2470menu!76 = &00
 2480menu!80 = -1
 2490menu!84 = flag2%
 2500$(menu+88) = "Sort"
 2510
 2520 
 2530menu!100 = &00
 2540menu!104 = -1
 2550menu!108 = flag2%
 2560$(menu+112) = "Output"
 2570 
 2580menu!124 = &00
 2590menu!128 = -1
 2600menu!132 = flag2%
 2610$(menu+136) = "Fields"
 2620
 2630menu!148 = &00
 2640menu!152 = -1
 2650menu!156 = flag2%
 2660$(menu+160) = "Close"
 2670
 2680
 2690
 2700menu!172 = &00
 2710menu!176 = info_window%
 2720menu!180 = &7000021
 2730$(menu+184) = "Info"
 2740
 2750
 2760menu!196=&80
 2770menu!200= -1
 2780menu!204=&7000021
 2790$(menu+208)="Quit"
 2800
 2810SYS "Wimp_CreateMenu",,menu,!b-64,136
 2820ENDPROC
 2830
 2840
 2850
 2860DEF PROCcloseawindow(handle%)
 2870!block%=handle%
 2880 SYS"Wimp_CloseWindow",,block%
 2890IF handle% = output_window% THEN PROCcloseawindow(save_window%)
 2900  REM recursive bit
 2910ENDPROC
 2920
 2930DEF PROCreceive(q%)
 2940CASE q%!16 OF
 2950WHEN 0:PROCfinish:END
 2960WHEN 2: PROCdatasave(q%)
 2970WHEN 3,5 : IF q%!12 = 0 THEN PROCdataload(q%)
 2980ENDCASE
 2990ENDPROC
 3000 
 3010
 3020
 3030
 3040DEF PROCsetup
 3050DIM block% 600
 3060DIM taskid%4:$taskid%="TASK"
 3070DIM q% &900,buffer% &800,endbuf% -1
 3080DIM menu 500
 3090DIM indirect% 2200
 3100DIM caret% 40
 3110curbuf%=buffer%
 3120SYS "Wimp_Initialise",200,!taskid%,"CardBase" TO version%
 3130SYS "Wimp_OpenTemplate",,"<CardBase$Dir>.Templates"
 3140SYS "Wimp_LoadTemplate",,q%,indirect%,indirect%+199,-1,"display",0
 3150SYS "Wimp_CreateWindow",,q% TO display_window%
 3160SYS "Wimp_LoadTemplate",,q%,indirect%+200,indirect%+399,-1,"fields",0
 3170SYS "Wimp_CreateWindow",,q% TO fields_window%
 3180SYS "Wimp_LoadTemplate",,q%,indirect%+400,indirect%+599,-1,"output",0
 3190SYS "Wimp_CreateWindow",,q% TO output_window%
 3200SYS "Wimp_LoadTemplate",,q%,indirect%+600,indirect%+799,-1,"proginfo",0
 3210SYS "Wimp_CreateWindow",,q% TO info_window%
 3220SYS "Wimp_LoadTemplate",,q%,indirect%+800,indirect%+999,-1,"sort",0
 3230SYS "Wimp_CreateWindow",,q% TO sort_window%
 3240SYS "Wimp_LoadTemplate",,q%,indirect%+1000,indirect%+1199,-1,"create",0
 3250SYS "Wimp_CreateWindow",,q% TO newfile_window%
 3260SYS "Wimp_LoadTemplate",,q%,indirect%+1200,indirect%+1399,-1,"password",0
 3270SYS "Wimp_CreateWindow",,q% TO password_window%
 3280SYS "Wimp_LoadTemplate",,q%,indirect%+1400,indirect%+1599,-1,"screen",0
 3290SYS "Wimp_CreateWindow",,q% TO screen_window%
 3300SYS "Wimp_LoadTemplate",,q%,indirect%+1600,indirect%+2000,-1,"save",0
 3310q%!64 = 1
 3320
 3330SYS "Wimp_CreateWindow",,q% TO save_window%
 3340SYS "Wimp_CloseTemplate"
 3350S%=OPENIN"<CardBase$Dir>.!Sprites"
 3360T%=EXT#S%+160
 3370CLOSE#S%
 3380DIM sprites% T%
 3390!sprites%=T%:sprites%!8=1
 3400SYS "OS_SpriteOp",&109,sprites%
 3410SYS "OS_SpriteOp",&10A,sprites%,"<CardBase$Dir>.!Sprites"
 3420iccalc%=FNiconbar
 3430quit = FALSE
 3440abort% = FALSE
 3450!q% = save_window%
 3460q%!4 = 2
 3470SYS"Wimp_GetIconState",,q%
 3480text_file_name% = q%!28
 3490ENDPROC
 3500
 3510
 3520 
 3530DEF FNiconbar
 3540!q%=-1
 3550q%!4=0
 3560q%!8=0
 3570q%!12=63
 3580q%!16=68
 3590q%!20=&2102
 3600spname$="!CardBase"
 3610DIM q%!24 (LENspname$+1)
 3620$(q%!24)=spname$
 3630q%!28=sprites%
 3640q%!32=LENspname$+1
 3650SYS "Wimp_CreateIcon",,q% TO ic%
 3660=ic%
 3670
 3680
 3690
 3700
 3710
 3720DEF PROCvars
 3730Wimp    = (1<<18) + (3<<6)
 3740CreateW = Wimp+1
 3750OpenW   = Wimp+5
 3760CloseW  = Wimp+6
 3770Poll%   = Wimp+7
 3780RedrawW = Wimp+8
 3790UpdateW = Wimp+9
 3800GetR%   = Wimp+10
 3810GetW    = Wimp+11
 3820GetP    = Wimp+15
 3830Drag    = Wimp+16
 3840CrMenu  = Wimp+20
 3850DcMenu  = Wimp+21
 3860file%   = 0
 3870inhibit% = FALSE
 3880case_sens_icon% = 13
 3890cr_icon%        = 15
 3900tab_icon%       = 17
 3910tabulate%       = TRUE
 3920sort_case_sens% = FALSE
 3930output_file_handle% = 0
 3940ENDPROC
 3950
 3960
 3970DEF PROCerror
 3980IF ERR = 17 THEN
 3990 PROCerror_message("Escape pressed"):END
 4000ELSE
 4010  PROCerror_message(REPORT$+" (internal error) "+STR$(ERL))
 4020ENDIF
 4030IF output_file_handle% > 0 THEN
 4040   CLOSE# output_file_handle%
 4050   output_file_handle%=0
 4060ENDIF
 4070abort% = FALSE
 4080ENDPROC
 4090
 4100
 4110
 4120
 4130
 4140
 4150DEF PROCerror_message(text$)
 4160SYS"Hourglass_Smash"
 4170SYS"Wimp_DragBox",,-1
 4180!block%=ERR
 4190$(block%+4)=text$
 4200SYS "Wimp_ReportError",block%,1,"!CardBase"
 4210ENDPROC
 4220
 4230
 4240DEF FNcancel_message(text$)
 4250REM returns 0,1,2 for
 4260LOCAL r0,r1
 4270SYS"Hourglass_Smash"
 4280SYS"Wimp_DragBox",,-1
 4290!block%=ERR
 4300$(block%+4)=text$
 4310SYS "Wimp_ReportError",block%,7,"!CardBase" TO r0,r1
 4320=r1
 4330ENDPROC
 4340
 4350
 4360DEF PROCglass(o%)
 4370IF o% THEN
 4380  SYS"Hourglass_On"
 4390ELSE
 4400  SYS"Hourglass_Off"
 4410ENDIF
 4420ENDPROC
 4430
 4440
 4450DEF PROCfinish
 4460SYS "Wimp_CloseDown"
 4470ENDPROC
 4480
 4490
 4500
 4510
 4520DEF PROCredraw_window(handle%)
 4530!block% = handle%
 4540SYS"Wimp_RedrawWindow",,block% TO more%
 4550WHILE more%
 4560  SYS "Wimp_GetRectangle",,block% TO more%
 4570ENDWHILE
 4580ENDPROC
 4590
 4600 
 4610DEF FNicon(whandle%,ix%,iy%,iw%,ih%,flag%, text$, d1%, d2%, d3%)
 4620block%!0 = whandle%
 4630block%!4 = ix%
 4640block%!8 = iy%
 4650block%!12 = ix% + iw%
 4660block%!16 = iy% + ih%
 4670block%!20 = flag%
 4680IF d1% = 0 THEN
 4690 $(block%!24) = text$
 4700ELSE
 4710   block%!24 = d1%
 4720   block%!28 = d2%
 4730   block%!32 = d3%
 4740ENDIF
 4750SYS"Wimp_CreateIcon",,block% TO ihandle%
 4760=ihandle%
 4770
 4780
 4790DEF PROCcreate_variables
 4800DIM message_block% 100
 4810DIM name%(max_fields),type%(max_fields),width%(max_fields),dp%(max_fields),min%(max_fields),max%(max_fields),list%(max_fields)
 4820DIM record_a$(max_fields), record_b$(max_fields), highest$(max_fields)
 4830DIM sort_line$(12), sort_operator$(6)
 4840DIM field_used%(max_fields)
 4850DIM current_field_value$(max_fields)
 4860DIM output_list$(6)
 4870DIM filename% 20
 4880DIM pathname% 200
 4890DIM record_number% 13
 4900DIM password% 13
 4910DIM in_password% 13
 4920DIM valid_name% 20
 4930DIM valid_password% 20
 4940DIM rec_number% 13
 4950DIM valid_type% 20
 4960DIM field_des% 2200
 4970DIM valid_integer% 10
 4980DIM output_list% 500
 4990DIM search_list% 200
 5000DIM output_icon%(6)
 5010DIM sort_field% 300
 5020DIM sort_icon%(12)
 5030DIM valid_sort% 20
 5040DIM display_data% 3000
 5050DIM display_icon%(max_fields*2)
 5060DIM output_display% 2000
 5070DIM matches% 20
 5080DIM output_rec% 20
 5090
 5100$valid_name%="Aa-zA-Z0-9"
 5110$valid_password% ="D*"
 5120$valid_type% = "ADNTdnt"
 5130$valid_integer% = "A0-9"
 5140$valid_sort% = "AaADd"
 5150 
 5160 
 5170$filename% = "DataFile"
 5180$pathname% = "DataFile"
 5190$password% = ""
 5200$in_password% = ""
 5210$rec_number% = "0"
 5220$search_list% = ""
 5230 
 5240loaded% = FALSE
 5250DIM f$(19,6)
 5260
 5270$text_file_name% = "Output"
 5280ENDPROC
 5290 
 5300
 5310DEF PROCcreateicons
 5320REM windowhandle,minx,miny,length, height, flags, sprite,text, valid, length
 5330REM text, no background is &7000511
 5340REM text, with background is &7000135
 5350REM writable icon, validated, in box is &700F53D
 5360nf_1% = FNicon(newfile_window%,200,-54,200,48,&700F53D,"",filename%,valid_name%,12)
 5370nf_2% =FNicon(newfile_window%,200,-108,200,48,&700F53D,"",password%,valid_password%,12)
 5380pw% =FNicon(password_window%,400,-200,200,48,&700F53D,"",in_password%,valid_password%,12)
 5390d% =FNicon(display_window%,270,-62,200,48,&7000135,"",filename%,-1,12)
 5400d% =FNicon(fields_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 5410d% =FNicon(output_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 5420d% =FNicon(screen_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 5430d% =FNicon(sort_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 5440d% =FNicon(display_window%,700,-62,180,48,&7000135,"",rec_number%,-1,12)
 5450
 5460FOR a% = field_des% TO field_des% + 2196 STEP 4
 5470  !a% = &D0D0D0D    : REM SET THE AYYAY TO EMPTY
 5480NEXT
 5490
 5500FOR a% = 0 TO 496 STEP 4
 5510  output_list%!a% = &D0D0D0D
 5520NEXT
 5530
 5540FOR a% = 0 TO 296 STEP 4
 5550  sort_field%!a% = &D0D0D0D
 5560NEXT
 5570
 5580FOR a% = 0 TO 1996 STEP 4
 5590  output_display%!a% = &D0D0D0D
 5600NEXT
 5610
 5620FOR a% = 0 TO 196 STEP 4
 5630  search_list%!a% = &D0D0D0D
 5640NEXT
 5650
 5660FOR a% = 0 TO 1996 STEP 4
 5670  output_display%!a% = &D0D0D0D
 5680NEXT
 5690
 5700
 5710
 5720FOR row% = 0 TO max_fields
 5730name%(row%) = FNicon(fields_window%,50,-250-row%*60,200,48,&700F535,"",field_des%+100*row%,valid_name%,20)
 5740type%(row%) = FNicon(fields_window%,330,-250-row%*60,40,48,&700F535,"",field_des%+22+100*row%,valid_type%,2)
 5750width%(row%) = FNicon(fields_window%,470,-250-row%*60,80,48,&700F535,"",field_des%+26+100*row%,valid_integer%,3)
 5760dp%(row%) = FNicon(fields_window%,600,-250-row%*60,80,48,&700F535,"",field_des%+32+100*row%,valid_integer%,2)
 5770min%(row%) = FNicon(fields_window%,730,-250-row%*60,130,48,&700F535,"",field_des%+35+100*row%,-1,12)
 5780max%(row%) = FNicon(fields_window%,870,-250-row%*60,130,48,&700F535,"",field_des%+47+100*row%,-1,12)
 5790list%(row%) =FNicon(fields_window%,1010,-250-row%*60,250,48,&700F535,"",field_des%+60+100*row%,-1,38)
 5800NEXT
 5810 
 5820y% = -120
 5830FOR a% = 0 TO 5
 5840  output_icon%(a%) =  FNicon(output_window%,200,y%-60*a%,700,48,&700F535,"",output_list%+70*a%,-1,60)
 5850NEXT
 5860output_icon%(6) =FNicon(output_window%,280,-480,620,48,&700F535,"",search_list%,-1,200)
 5870 
 5880
 5890
 5900y% = -260
 5910FOR a% = 0 TO 10 STEP 2
 5920  sort_icon%(a%) =FNicon(sort_window%,20,y%-30*a%,300,48,&700F535,"",sort_field%+25*a%,-1,20)
 5930 sort_icon%(a%+1) =FNicon(sort_window%,450,y%-30*a%,50,48,&700F535,"",sort_field%+22+25*a%,valid_sort%,2)
 5940NEXT
 5950
 5960
 5970
 5980REM this is the output display dindow
 5990
 6000y% = -120
 6010FOR a% = 0 TO 5
 6020 d% =  FNicon(screen_window%,200,y%-60*a%,700,48,&7000511,"",output_display%+300*a%,-1,250)
 6030NEXT
 6040d% =FNicon(screen_window%,620,-62,150,48,&7000135,"",output_rec%,-1,12)
 6050d% =FNicon(screen_window%,900,-62,150,48,&7000135,"",matches%,-1,12)
 6060 
 6070
 6080REM d% = FNicon(function%,16,-50,250,48,&7000511,"",t1%,-1,20)
 6090ENDPROC
 6100
 6110
 6120DEF PROCconstants
 6130  max_fields = 19
 6140  over_size  = 1.25
 6150  ALL        = TRUE
 6160  case_sens% = FALSE
 6170  crlf%      = FALSE
 6180  tabulate%  = TRUE
 6190ENDPROC
 6200
 6210DEF PROCcreate
 6220FOR a% = field_des% TO field_des% + 2196 STEP 4
 6230  !a% = &D0D0D0D    : REM SET THE AYYAY TO EMPTY
 6240NEXT
 6250$filename% = "DataFile"
 6260$pathname% = "DataFile"
 6270$password% = ""
 6280$rec_number% = "0"
 6290$search_list% = ""
 6300PROCopen_window(newfile_window%)
 6310PROCopen_window(fields_window%)
 6320window% = newfile_window%
 6330new_pos% = nf_1%
 6340PROCset_caret
 6350ENDPROC
 6360
 6370DEF PROCextract_field_description
 6380LOCAL rec%,pos%
 6390FOR rec% = 0 TO max_fields
 6400  pos% = field_des%+rec%*100
 6410  f$(rec%,0) = $pos%
 6420  pos% = field_des%+rec%*100+22
 6430  f$(rec%,1) = $pos%
 6440  pos% = field_des%+rec%*100+26
 6450  f$(rec%,2) = $pos%
 6460  pos% = field_des%+rec%*100+32
 6470  f$(rec%,3) = $pos%
 6480  pos% = field_des%+rec%*100+35
 6490  f$(rec%,4) = $pos%
 6500  pos% = field_des%+rec%*100+47
 6510  f$(rec%,5) = $pos%
 6520  pos% = field_des%+rec%*100+60
 6530  f$(rec%,6) = $pos%
 6540  IF LEN f$(rec%,0) > 0 THEN
 6550      field_used%(rec%) = TRUE
 6560  ELSE
 6570      field_used%(rec%) = FALSE
 6580  ENDIF
 6590NEXT
 6600d=FNField_des_ok
 6610ENDPROC
 6620 
 6630
 6640DEF FNfield_name_ok
 6650LOCAL rec%, rec1%, rec2%, length%, field%
 6660ok=TRUE
 6670FOR rec% = 0 TO max_fields
 6680   length% = 0
 6690   FOR field% = 0 TO 6
 6700     length% = length% + LEN(f$(rec%,field%))
 6710   NEXT
 6720   IF length% > 0 AND LEN(f$(rec%,0))=0 THEN
 6730      ok = FALSE
 6740      PROCerror_message("Field number "+STR$(rec%+1)+" does not have a name")
 6750   ENDIF
 6760NEXT
 6770FOR rec1% = 0 TO max_fields-1
 6780   FOR rec2% = rec1%+1 TO max_fields
 6790     IF f$(rec1%,0) = f$(rec2%,0) AND LEN(f$(rec2%,0)) >0 THEN
 6800       ok = FALSE
 6810       PROCerror_message("There are two fields with the name "+f$(rec2%,0))
 6820     ENDIF
 6830   NEXT
 6840NEXT
 6850=ok
 6860 
 6870
 6880
 6890DEF FNfield_len_ok
 6900LOCAL rec%
 6910FOR rec% = 0 TO max_fields
 6920 IF LEN(f$(rec%,0))>0 THEN
 6930   IF VAL(f$(rec%,2))=0 THEN
 6940      PROCerror_message("Field '"+f$(rec%,0)+"' must have a width greater than zero")
 6950   ENDIF
 6960   IF (f$(rec%,1)="N" OR f$(rec%,1)="n") AND VAL(f$(rec%,2)) > 20 THEN
 6970      PROCerror_message("Field '"+f$(rec%,0)+"' is numeric so its width must not exceed 20")
 6980   ENDIF
 6990  ENDIF
 7000NEXT
 7010=TRUE
 7020
 7030
 7040DEF FNfield_type_ok
 7050LOCAL rec%
 7060FOR rec% = 0 TO max_fields
 7070   IF LEN(f$(rec%,0))>0 AND LEN(f$(rec%,1))=0 THEN
 7080      PROCerror_message("Field "+f$(rec%,0)+" does not have a type")
 7090   ENDIF
 7100NEXT
 7110=TRUE
 7120
 7130
 7140DEF FNfield_max_ok
 7150LOCAL rec%, ok%
 7160FOR rec% = 0 TO max_fields
 7170 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="N" OR f$(rec%,1) ="n") THEN
 7180  IF NOT FNnumeric(f$(rec%,4)) THEN
 7190    PROCerror_message("Field "+f$(rec%,0)+" does not have a numeric minimum")
 7200  ENDIF
 7210 ENDIF
 7220NEXT
 7230FOR rec% = 0 TO max_fields
 7240 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="N" OR f$(rec%,1) ="n") THEN
 7250  IF NOT FNnumeric(f$(rec%,5)) THEN
 7260    PROCerror_message("Field "+f$(rec%,0)+" does not have a numeric maximum")
 7270  ENDIF
 7280 ENDIF
 7290NEXT
 7300=ok%
 7310
 7320
 7330DEF FNfield_date_ok
 7340LOCAL rec%, ok%
 7350FOR rec% = 0 TO max_fields
 7360 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="D" OR f$(rec%,1) ="d")  THEN
 7370  IF NOT FNvalid_date(f$(rec%,4)) AND LEN(f$(rec%,4))>0  THEN
 7380    PROCerror_message("Field "+f$(rec%,0)+" does not have a correctly formed minimum date")
 7390  ENDIF
 7400 ENDIF
 7410NEXT
 7420FOR rec% = 0 TO max_fields
 7430 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="d" OR f$(rec%,1) ="D") THEN
 7440  IF NOT FNvalid_date(f$(rec%,5)) AND LEN(f$(rec%,5))>0 THEN
 7450    PROCerror_message("Field "+f$(rec%,0)+" does not have a correctly formed maximum date")
 7460  ENDIF
 7470 ENDIF
 7480NEXT
 7490=ok%
 7500
 7510
 7520
 7530
 7540DEF FNField_des_ok
 7550IF FNfield_name_ok AND FNfield_len_ok AND FNfield_type_ok AND FNfield_max_ok AND FNfield_date_ok    THEN
 7560  = TRUE
 7570ELSE
 7580  =FALSE
 7590ENDIF
 7600 
 7610
 7620DEF FNnumeric(text$)
 7630LOCAL i%, ok%
 7640ok%=TRUE
 7650IF LEN(text$) > 0 THEN
 7660  FOR i% = 1 TO LEN(text$)
 7670    c$ = MID$(text$,i%,1)
 7680    IF c$ <"." OR c$>"9" OR c$="/" THEN ok% = FALSE
 7690  NEXT
 7700ENDIF
 7710= ok%
 7720
 7730DEF FNvalid_date(date$)
 7740LOCAL ok%, day%, month%, year%
 7750ok% = TRUE               : REM allow zero null entries
 7760IF LEN(date$) >0 THEN
 7770IF LEN(date$) <>8 THEN
 7780 ok% = FALSE
 7790ELSE
 7800  day% = VAL(LEFT$(date$,2))
 7810  month% = VAL(MID$(date$,4,2))
 7820  year%  = VAL(MID$(date$,7,2))
 7830  IF year% MOD 4 = 0 THEN
 7840     days_in_feb% = 29
 7850  ELSE
 7860     days_in_feb% = 28
 7870  ENDIF
 7880  IF (day% > 31) OR (day% < 1) THEN ok% = FALSE
 7890  IF (month% >12) OR (month% < 1) THEN ok% = FALSE
 7900  CASE month% OF
 7910    WHEN 4,6,9,11 : IF day% > 30 THEN ok% = FALSE
 7920    WHEN 2        : IF day% > days_in_feb% THEN ok% = FALSE
 7930  ENDCASE
 7940ENDIF
 7950ENDIF
 7960=ok%
 7970
 7980
 7990DEF PROCstart_drag
 8000  LOCAL wex%,wey%
 8010  !block% = newfile_window%
 8020  SYS"Wimp_GetWindowState",,block%
 8030  wex% = block%!4 - block%!20
 8040  wey% = block%!16 - block%!24
 8050  block%!4 = 2 : REM icon handle for drag icon
 8060  SYS"Wimp_GetIconState",,block%
 8070  !block% = newfile_window%
 8080  block%!4 = 5
 8090  block%!8 = block%!8 +wex%
 8100  block%!12 = block%!12 +wey%
 8110  block%!16 = block%!16 +wex%
 8120  block%!20 = block%!20 +wey%
 8130  block%!24 = 0
 8140  block%!28 = 0
 8150  block%!32 = &7FFFFFFF
 8160  block%!36 = &7FFFFFFF
 8170  SYS"Wimp_DragBox",,block%
 8180ENDPROC
 8190
 8200
 8210DEF PROCnew_save
 8220PROCextract_field_description
 8230number_of_fields% = 0
 8240FOR rec% = 0 TO max_fields
 8250  IF LEN(f$(rec%,0)) > 0 THEN
 8260     number_of_fields% +=1
 8270  ENDIF
 8280NEXT
 8290IF number_of_fields% = 0 THEN
 8300   PROCerror_message("There must be at least one field defined")
 8310ELSE
 8320SYS"Wimp_GetPointerInfo",,block%
 8330block%!20 = 64
 8340block%!32 = 0
 8350block%!36 = 1
 8360block%!40 = block%!12
 8370block%!44 = block%!16
 8380block%!48 = !block%
 8390block%!52 = block%!4
 8400block%!56 = 10000 : REM size of the file
 8410block%!60 = &778  : REM file type of the file
 8420$(block%+64) = $filename%
 8430?(block%+65+LEN($filename%)) = 0
 8440SYS"Wimp_SendMessage",17,block%+20,block%!12,block%!16
 8450ENDIF
 8460ENDPROC
 8470
 8480DEF FNget_name(P%)
 8490A$=""
 8500WHILE ?P%<>0 AND ?P%<> 13
 8510 A$ = A$+CHR$?P%:P%+=1
 8520ENDWHILE
 8530=A$
 8540
 8550
 8560DEF FNleaf(path$)
 8570WHILE INSTR(path$,".")
 8580path$=MID$(path$,INSTR(path$,".")+1)
 8590ENDWHILE
 8600=path$
 8610
 8620
 8630DEF PROCdatasave(b)
 8640IF loaded% THEN
 8650FOR i% = 0 TO 96 STEP 4
 8660  message_block%!i% = b!i%
 8670NEXT
 8680REM copy the message block since wimp poll currupts it!
 8690PROCproduce_output(FNget_name(message_block%+44))
 8700IF FNget_name(message_block%+44) <> "<Wimp$Scrap>" THEN
 8710  $text_file_name%  = FNget_name(message_block%+44)
 8720ENDIF
 8730message_block%!12=message_block%!8
 8740message_block%!16=3
 8750!message_block% = 64
 8760SYS"Wimp_SendMessage",17,message_block%,message_block%!20,message_block%!24
 8770
 8780ELSE
 8790PROCsaveit(FNget_name(b+44))
 8800$pathname% = FNget_name(b+44)
 8810$filename% = FNleaf($pathname%)
 8820b!12=b!8
 8830b!16=3
 8840!b = 64
 8850SYS"Wimp_SendMessage",17,b,b!20,b!24
 8860ENDIF
 8870ENDPROC
 8880
 8890
 8900
 8910DEF PROCsaveit(name$)
 8920REM This saves a file the first time
 8930LOCAL  rec%
 8940file% = OPENOUT(name$)
 8950FOR a% = field_des% TO field_des% + 2196 STEP 4
 8960  PRINT#file%,!a%
 8970NEXT
 8980current_field_value$() = ""
 8990number_of_fields% = 0
 9000number_of_records% = 1
 9010record_size% = 0
 9020FOR rec% = 0 TO max_fields
 9030  record_size%=record_size%+VAL(f$(rec%,2))+2
 9040  IF LEN(f$(rec%,0)) > 0 THEN
 9050     number_of_fields% +=1
 9060  ENDIF
 9070NEXT
 9080record_size%=20+record_size%*over_size
 9090PRINT #file%,$password%
 9100PRINT #file%, $filename%
 9110PRINT #file%, number_of_records%
 9120PRINT #file%, record_size%
 9130PRINT #file%, number_of_fields%
 9140PRINT #file%, 1 : REM record number
 9150
 9160FOR rec% = 0 TO max_fields
 9170  PRINT #file%, field_used%(rec%)
 9180NEXT
 9190
 9200FOR a% = output_list% TO output_list%+496 STEP 4
 9210  PRINT #file%,!a%
 9220NEXT
 9230
 9240FOR a% = search_list% TO search_list%+196 STEP 4
 9250  PRINT #file%,!a%
 9260NEXT
 9270
 9280FOR a% = sort_field% TO sort_field%+296 STEP 4
 9290  PRINT #file%,!a%
 9300NEXT
 9310
 9320
 9330
 9340
 9350
 9360PROCwrite_record(1)
 9370CLOSE #file%
 9380file% = 0
 9390OSCLI("settype "+name$+" 778")
 9400PROCcloseawindow(newfile_window%)
 9410PROCcloseawindow(fields_window%)
 9420loaded% = FALSE
 9430PROCload(name$)
 9440ENDPROC
 9450
 9460
 9470
 9480DEF PROCload(name$)
 9490IF loaded% THEN
 9500   PROCerror_message("The file '"+$filename%+"' is still open and must be closed before a new file can be loaded")
 9510ELSE
 9520  PROCcloseawindow(newfile_window%)
 9530  PROCcloseawindow(fields_window%)
 9540  current_file_name$ = name$
 9550  file% = OPENUP(name$)
 9560  FOR a% = field_des% TO field_des% + 2196 STEP 4
 9570    INPUT#file%,!a%
 9580  NEXT
 9590  INPUT #file%,$password%
 9600  INPUT #file%, $filename%
 9610  INPUT #file%, number_of_records%
 9620  INPUT #file%, record_size%
 9630  INPUT #file%, number_of_fields%
 9640  INPUT #file%, current_rec%
 9650
 9660  FOR rec% = 0 TO max_fields
 9670     INPUT #file%, field_used%(rec%)
 9680  NEXT
 9690
 9700  FOR a% = output_list% TO output_list%+496 STEP 4
 9710    INPUT #file%,!a%
 9720  NEXT
 9730
 9740  FOR a% = search_list% TO search_list%+196 STEP 4
 9750    INPUT #file%,!a%
 9760  NEXT
 9770
 9780  FOR a% = sort_field% TO sort_field%+296 STEP 4
 9790    INPUT #file%,!a%
 9800  NEXT
 9810
 9820  PROCread_record(current_rec%)
 9830  $rec_number% = STR$(current_rec%)
 9840  loaded% = TRUE
 9850  PROCextract_field_description
 9860  PROCcreate_display_icons
 9870  PROCpassword_check
 9880  IF NOT inhibit% PROCopen_window(display_window%)
 9890ENDIF
 9900ENDPROC
 9910
 9920
 9930DEF PROCcreate_display_icons
 9940REM change validation string to match the type definition
 9950LOCAL d%, f%,l%,w%
 9960FOR f% = 0 TO number_of_fields% -1
 9970display_icon%(f%+number_of_fields%)=FNicon(display_window%,50,-300-f%*60,300,48,&7000511,"",field_des%+100*f%,-1,20)
 9980l% = VAL(f$(f%,2))       : REM set length of box to a suitable value
 9990w% = l%*16 +48
10000IF w%>400 THEN w%=400
10010display_icon%(f%) = FNicon(display_window%,400,-300-f%*60,w%,48,&700F535,"",display_data%+300*f%,-1,l%+1)
10020NEXT
10030ENDPROC
10040
10050DEF PROCdestroy_display_icons
10060FOR f% = 2*number_of_fields% -1 TO 0 STEP -1
10070  IF display_icon%(f%) > 0 THEN
10080    !block% = display_window%
10090    block%!4 = display_icon%(f%)
10100    SYS"Wimp_DeleteIcon",,block%
10110  ENDIF
10120NEXT
10130ENDPROC
10140
10150 
10160
10170DEF PROCenvironment
10180SYS "OS_GetEnv" TO c$
10190c$=RIGHT$(c$,LENc$-20)
10200WHILE  LEFT$(c$,1) <>" " AND LENc$ <>0
10210  c$=RIGHT$(c$,LENc$-1)
10220ENDWHILE
10230IF c$ = " " THEN c$ =""
10240ENDPROC
10250
10260REM DEF PROCenvironment
10270SYS "OS_GetEnv" TO c$
10280p = INSTR(c$,"""",INSTR(c$,"""")+1)
10290c$=MID$(c$,p+1)
10300WHILE LEFT$(c$,1)=" "
10310  c$=MID$(c$,2)
10320ENDWHILE
10330
10340ENDPROC
10350 
10360
10370
10380 
10390
10400
10410
10420DEF PROCackload(b)
10430b!12=b!8
10440b!16 = 4
10450!b = 64
10460SYS"Wimp_SendMessage",17,b,b!4
10470ENDPROC
10480
10490DEF PROCdataload(b)
10500IF b!40 = &778 THEN
10510  PROCload(FNget_name(b+44))
10520  PROCackload(b)
10530ENDIF
10540ENDPROC
10550
10560
10570
10580
10590
10600
10610DEF PROCextract_record_data
10620REM This takes the data from the icons and puts them into an array
10630LOCAL f%
10640FOR f% = 0 TO number_of_fields%-1
10650  p% =display_data%+f%*300
10660  current_field_value$(f%) = $p%
10670NEXT
10680ENDPROC
10690 
10700DEF PROCclear_record
10710LOCAL f%
10720FOR f% = 0 TO number_of_fields%-1
10730  p% =display_data%+f%*300
10740  $p% = ""
10750NEXT
10760ENDPROC
10770
10780
10790DEF FNdate(date$)
10800  =VAL(LEFT$(date$,2))+100*VAL(MID$(date$,4,2))+10000*VAL(RIGHT$(date$,2))
10810
10820
10830
10840DEF FNvalid_min(value$,type$,min$)
10850LOCAL ok%
10860ok% = TRUE
10870IF LEN min$ >0 AND LEN value$ > 0 THEN
10880CASE  type$ OF
10890  WHEN "t","T" : IF value$ < min$ THEN ok% = FALSE
10900  WHEN "N","n" : IF VAL(value$) < VAL(min$) THEN ok% = FALSE
10910  WHEN "D","d" : IF FNdate(value$) < FNdate(min$) THEN ok% = FALSE
10920ENDCASE
10930ENDIF
10940=ok%
10950
10960DEF FNvalid_max(value$,type$,max$)
10970LOCAL ok%
10980ok% = TRUE
10990IF LEN max$ >0 AND LEN value$ > 0 THEN
11000CASE  type$ OF
11010  WHEN "t","T" : IF value$ > max$ THEN ok% = FALSE
11020  WHEN "N","n" : IF VAL(value$) > VAL(max$) THEN ok% = FALSE
11030  WHEN "D","d" : IF FNdate(value$) > FNdate(max$) THEN ok% = FALSE
11040ENDCASE
11050ENDIF
11060=ok%
11070
11080DEF FNvalid_list(value$,type$,list$)
11090LOCAL ok%
11100ok% = TRUE
11110IF LEN list$ >0 THEN
11120  IF INSTR(list$,value$) = 0 THEN ok% = FALSE
11130ENDIF
11140=ok%
11150
11160
11170DEF FNvalid_record
11180ok% = TRUE
11190f% = -1
11200WHILE ok% AND f% < max_fields
11210  f%+=1
11220  IF field_used%(f%) THEN
11230     IF (f$(f%,1) = "d" OR f$(f%,1) ="D") AND NOT FNvalid_date(current_field_value$(f%)) THEN
11240       ok% = FALSE
11250       PROCerror_message("'"+f$(f%,0)+"' has an invalid date")
11260     ELSE
11270     IF NOT FNvalid_min(current_field_value$(f%),f$(f%,1),f$(f%,4)) THEN
11280       ok%=FALSE
11290       PROCerror_message("'"+f$(f%,0)+"' has a value which is too low" )
11300     ELSE
11310     IF NOT FNvalid_max(current_field_value$(f%),f$(f%,1),f$(f%,5)) THEN
11320       ok%=FALSE
11330       PROCerror_message("'"+f$(f%,0)+"' has a value which is too high" )
11340     ELSE
11350     IF NOT FNvalid_list(current_field_value$(f%),f$(f%,1),f$(f%,6)) THEN
11360       ok%=FALSE
11370     PROCerror_message("'"+f$(f%,0)+"' has a value which is not in the list")
11380     ELSE
11390       IF f$(f%,1) = "N" OR f$(f%,1)="n" AND VAL(f$(f%,3)) > 0 THEN
11400           A% = @%
11410           @% =&0102000A + VAL(f$(f%,3))*&100
11420           IF LENcurrent_field_value$(f%) >0 THEN
11430             current_field_value$(f%) = STR$(VAL(current_field_value$(f%)))
11440           ENDIF
11450           @%=A%
11460           IF RIGHT$(current_field_value$(f%),1) ="." THEN
11470             current_field_value$(f%)= LEFT$(current_field_value$(f%))
11480           ENDIF
11490     ENDIF
11500    ENDIF
11510     ENDIF
11520  ENDIF
11530    ENDIF
11540     ENDIF
11550ENDWHILE
11560=ok%
11570
11580DEF FNrecord_space
11590LOCAL total%
11600total% = 0
11610FOR f% = 0 TO max_fields
11620  total% = total% + LENcurrent_field_value$(f%)
11630NEXT
11640=total%
11650
11660
11670DEF PROCnext_record
11680PROCextract_record_data
11690IF FNvalid_record THEN
11700 IF NOT(FNrecord_space = 0 AND VAL($rec_number%) = number_of_records%) THEN
11710  PROCwrite_record(VAL($rec_number%))
11720  $rec_number% = STR$(VAL($rec_number%)+1)
11730  IF VAL($rec_number%) > number_of_records% THEN
11740     number_of_records%+=1
11750     PROCclear_record
11760  ELSE
11770     PROCread_record(VAL($rec_number%))
11780  ENDIF
11790 ENDIF
11800ENDIF
11810PROCupdate_display
11820ENDPROC
11830
11840DEF PROCprevious_record
11850PROCextract_record_data
11860IF FNvalid_record THEN
11870  PROCwrite_record(VAL($rec_number%))
11880  IF VAL($rec_number%) > 1 THEN
11890  $rec_number% = STR$(VAL($rec_number%)-1)
11900  PROCread_record(VAL($rec_number%))
11910  ELSE
11920    VDU7
11930  ENDIF
11940ENDIF
11950PROCupdate_display
11960ENDPROC
11970
11980DEF PROCstart
11990PROCextract_record_data
12000IF FNvalid_record THEN
12010  PROCwrite_record(VAL($rec_number%))
12020  IF VAL($rec_number%) > 1 THEN
12030  $rec_number% = STR$(1)
12040  PROCread_record(VAL($rec_number%))
12050  ELSE
12060    VDU7
12070  ENDIF
12080ENDIF
12090PROCupdate_display
12100ENDPROC
12110
12120
12130
12140
12150DEF PROCend_of_file
12160PROCextract_record_data
12170IF FNvalid_record THEN
12180  PROCwrite_record(VAL($rec_number%))
12190  IF VAL($rec_number%)  < number_of_records% THEN
12200  $rec_number% = STR$( number_of_records%)
12210  PROCread_record(VAL($rec_number%))
12220  ELSE
12230    VDU7
12240  ENDIF
12250ENDIF
12260PROCupdate_display
12270ENDPROC
12280
12290DEF PROCupdate_display
12300   SYS"Wimp_ForceRedraw",display_window%,0,-1000,1000,0
12310   SYS"Wimp_GetCaretPosition",,caret%
12320   window% = caret%!0
12330   icon%   = caret%!4
12340   new_pos% = icon%
12350   PROCset_caret
12360ENDPROC
12370
12380
12390
12400DEF PROCread_record(position%)
12410LOCAL p%, pointer%, f%
12420current_field_value$() = ""
12430pointer% = 5000+position%*record_size%
12440PTR#file% = pointer%
12450bad_field% = FALSE
12460LOCAL ERROR
12470f% = 0
12480WHILE f% <(number_of_fields%  )  AND NOT bad_field%
12490  ON ERROR LOCAL bad_field% = TRUE
12500  IF NOT bad_field% THEN
12510    INPUT #file%, current_field_value$(f%)
12520    p% =display_data%+f%*300
12530    $p% =current_field_value$(f%)
12540    f% +=1
12550  ENDIF
12560ENDWHILE
12570RESTORE ERROR
12580ENDPROC
12590
12600
12610DEF PROCwrite_record(position%)
12620LOCAL p%, pointer%
12630pointer% = 5000+position%*record_size%
12640PTR#file% = pointer%
12650FOR f% = 0 TO number_of_fields%-1
12660 PRINT #file%, current_field_value$(f%)
12670NEXT
12680ENDPROC
12690
12700
12710DEF PROCclose_down_file
12720IF file% <> 0 THEN
12730  PTR#file% = 0
12740  number_of_fields% = 0
12750  FOR rec% = 0 TO max_fields
12760  IF LEN(f$(rec%,0)) > 0 THEN
12770     number_of_fields% +=1
12780  ENDIF
12790  NEXT
12800  IF FNfield_length_ok THEN
12810    FOR a% = field_des% TO field_des% + 2196 STEP 4
12820      PRINT#file%,!a%
12830    NEXT
12840    PRINT #file%,$password%
12850    PRINT #file%, $filename%
12860    PRINT #file%, number_of_records%
12870    PRINT #file%, record_size%
12880    PRINT #file%, number_of_fields%
12890    PRINT #file%, VAL($rec_number%)
12900    FOR rec% = 0 TO max_fields
12910      PRINT #file%, field_used%(rec%)
12920    NEXT
12930
12940    FOR a% = output_list% TO output_list%+496 STEP 4
12950        PRINT #file%,!a%
12960    NEXT
12970
12980    FOR a% = search_list% TO search_list%+196 STEP 4
12990       PRINT #file%,!a%
13000    NEXT
13010
13020    FOR a% = sort_field% TO sort_field%+296 STEP 4
13030       PRINT #file%,!a%
13040    NEXT
13050    PROCextract_record_data
13060    PROCwrite_record(VAL($rec_number%))
13070    CLOSE #file%
13080    file% = 0
13090    loaded% = FALSE
13100    inhibit% = FALSE
13110    PROCcloseawindow(display_window%)
13120    PROCcloseawindow(sort_window%)
13130    PROCcloseawindow(output_window%)
13140    PROCcloseawindow(fields_window%)
13150    PROCcloseawindow(password_window%)
13160    PROCcloseawindow(screen_window%)
13170    PROCcloseawindow(save_window%)
13180
13190    PROCdestroy_display_icons
13200  ELSE
13210    PROCerror_message("The field descriptor has been changed and is now too long. Either reduce the number of fields or reduce their length")
13220    quit% = FALSE
13230  ENDIF
13240ENDIF
13250ENDPROC
13260
13270DEF FNfield_length_ok
13280PROCextract_field_description
13290total% = 0
13300control% = 0
13310FOR f% = 0 TO max_fields
13320   total% = total% + VAL(f$(f%,2))
13330   IF LEN(f$(f%,0)) > 0 THEN control%+=2
13340NEXT
13350IF total% > record_size% - control% THEN
13360=FALSE
13370ELSE
13380=TRUE
13390
13400
13410DEF PROCpassword_check
13420  IF $password% <> "" THEN
13430    $in_password% = ""
13440    PROCopen_window(password_window%)
13450    inhibit% = TRUE
13460  ENDIF
13470ENDPROC
13480
13490
13500
13510DEF PROCpassword
13520  PROCcloseawindow(password_window%)
13530  IF LEFT$($password%,4) = LEFT$($in_password%,4) THEN
13540    inhibit% = FALSE
13550    PROCopen_window(display_window%)
13560  ELSE
13570    PROCerror_message("Incorrect password. File closing")
13580    PROCclose_down_file
13590  ENDIF
13600ENDPROC
13610
13620
13630DEF FNupper(text$)
13640LOCAL result$,i%,c$
13650result$=""
13660FOR i% = 1 TO LENtext$
13670 c$=MID$(text$,i%,1)
13680 IF c$>="a" AND c$<="z" THEN c$=CHR$(ASC(c$)AND&DF)
13690 result$=result$+c$
13700NEXT
13710=result$
13720
13730DEF FNreplace(object$,target$,by$)
13740LOCAL start%, position%
13750start% = INSTR(object$,target$)
13760WHILE start%
13770position% = LEN(object$)-LEN(target$)-start%+1
13780object$ = LEFT$(object$,start%-1)+by$+RIGHT$(object$,position%)
13790start% = INSTR(object$,target$,start%+LEN(by$))
13800ENDWHILE
13810=object$
13820
13830DEF FNoutput_upper(text$)
13840LOCAL result$,i%,c$
13850quote% = FALSE
13860result$=""
13870FOR i% = 1 TO LENtext$
13880 c$=MID$(text$,i%,1)
13890 IF c$ = CHR$34 THEN quote% = NOT quote%
13900 IF c$="," THEN c$ = "+"
13910 IF c$=";" AND i% < LENtext$ AND i% > 1 THEN c$="+"+CHR$34+" "+CHR$34+"+"
13920   IF NOT quote% THEN
13930    IF c$>="a" AND c$<="z" THEN c$=CHR$(ASC(c$)AND&DF)
13940   ENDIF
13950 result$=result$+c$
13960NEXT
13970=result$
13980
13990
14000DEF PROCextract_output_list
14010FOR list% = 0 TO 5
14020  pointer% = output_list% + list% * 70
14030  output_list$(list%) = $pointer%
14040  output_list$(list%) = FNoutput_upper(output_list$(list%))
14050NEXT
14060FOR f% = 0 TO max_fields
14070  IF LEN(f$(f%,0)) >0 THEN
14080   FOR list% = 0 TO 5
14090   IF LEN output_list$(list%) > 0 THEN
14100     output_list$(list%) = FNreplace(output_list$(list%),FNupper(f$(f%,0)),"current_field_value$("+STR$(f%)+")")
14110   ENDIF
14120   NEXT
14130  ENDIF
14140NEXT
14150FOR list% = 0 TO 5
14160IF LENoutput_list$(list%)>0 THEN
14170   LOCAL ERROR
14180   ON ERROR LOCAL : RESTORE ERROR :PROCoutput_error : NEXT
14190   REM PRINTEVAL(output_list$(list%)
14200   RESTORE ERROR
14210ENDIF
14220NEXT
14230ENDPROC
14240
14250
14260
14270DEF PROCoutput_error
14280  CASE ERR OF
14290  WHEN 9 : PROCerror_message("Output line "+STR$(list%+1)+" contains an unmatched quote")
14300  WHEN 26 : PROCerror_message("Output line "+STR$(list%+1)+" contains a reference to an unknown field")
14310  OTHERWISE : PROCerror_message("Looks like some other error at "+STR$(ERL))
14320  ENDCASE
14330ENDPROC
14340
14350ENDPROC
14360
14370
14380
14390DEF PROCcreate_search_string
14400  search_string$ = $search_list%
14410  IF case_sens% THEN
14420     search_string$ =FNoutput_upper(search_string$)
14430  ELSE
14440     search_string$ =FNupper(search_string$)
14450  ENDIF
14460FOR f% = 0 TO max_fields
14470  IF LEN(f$(f%,0)) >0 THEN
14480     CASE f$(f%,1) OF
14490     WHEN "t","T" : search_string$= FNreplace(search_string$,FNupper(f$(f%,0)),"current_field_value$("+STR$(f%)+")")
14500     WHEN "n","N" : search_string$= FNreplace(search_string$,FNupper(f$(f%,0)),"VALcurrent_field_value$("+STR$(f%)+")")
14510     WHEN "D","d" : PROCinsert_date
14520     ENDCASE
14530  ENDIF
14540NEXT
14550REM PRINT search_string$
14560REM PRINT EVAL(search_string$)
14570ENDPROC
14580
14590DEF PROCinsert_date
14600LOCAL l$,r$,position%
14610position% = INSTR(search_string$,FNupper(f$(f%,0)))
14620WHILE position% > 0
14630  position% = position% + LEN f$(f%,0)
14640  WHILE (MID$(search_string$,position%,1) <"0" OR MID$(search_string$,position%,1) >"1") AND position% < LENsearch_string$
14650     position% = position% +1
14660  ENDWHILE
14670  search_string$ = LEFT$(search_string$,position%-1)+"FNdate("+CHR$34+MID$(search_string$,position%,8)+CHR$34+")"+RIGHT$(search_string$,LENsearch_string$-position%-8)
14680l$ = LEFT$(search_string$,position%)
14690r$ = RIGHT$(search_string$,LEN(search_string$)-position%)
14700l$= FNreplace(l$,FNupper(f$(f%,0)),"FNdate(current_field_value$("+STR$(f%)+"))")
14710search_string$ = l$ + r$
14720position% = INSTR(search_string$,FNupper(f$(f%,0)))
14730ENDWHILE
14740ENDPROC
14750
14760
14770
14780 
14790
14800DEF FNvalid_search_criteria
14810LOCAL total%, ok%, list%, d
14820ok% = TRUE
14830IF LEN search_string$ = 0 THEN
14840   PROCerror_message("A search string must be entered. Use ALL to list all records")
14850ok%=FALSE
14860ENDIF
14870total% = 0
14880   FOR list% = 0 TO 5
14890     total% = total% + LEN (output_list$(list%))
14900   NEXT
14910IF total% = 0 THEN
14920ok%=FALSE
14930   PROCerror_message("At least one of the output lines must contain a field name.")
14940ENDIF
14950LOCAL ERROR
14960ON ERROR LOCAL ok% = FALSE :PROCerror_message("The search string contains a syntax error")
14970IF ok% THEN d=EVAL(search_string$)
14980RESTORE ERROR
14990=ok%
15000 
15010DEF PROCscreen
15020error% = FALSE
15030PROCextract_record_data
15040IF FNvalid_record THEN
15050  PROCwrite_record(VAL($rec_number%)) : REM save the latest record
15060  PROCextract_output_list
15070  PROCcreate_search_string
15080  IF FNvalid_search_criteria THEN
15090  FOR list% = 0 TO 5
15100    pointer% = output_display%+list%*300
15110    $pointer% = ""
15120  NEXT
15130  PROCopen_window(screen_window%)
15140  rec% = 1
15150  match% = 0
15160  $output_rec% = STR$rec%
15170  $matches% = STR$match%
15180  SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
15190  escape% = FALSE
15200  PROCpoll(0)
15210  WHILE rec% <= number_of_records% AND NOT escape%
15220    PROCread_record(rec%)
15230    IF NOT case_sens% THEN PROCconvert_record_case
15240    IF EVAL(search_string$) THEN
15250    PROCread_record(rec%) : REM because the case may be changed
15260    IF tabulate% THEN PROCtabulate
15270      match% +=1
15280      $output_rec% = STR$rec%
15290      $matches% = STR$match%
15300       FOR list% = 0 TO 5
15310        pointer% = output_display%+list%*300
15320        IF LEN(output_list$(list%)) >0 THEN
15330          PROCdo_list
15340        ELSE
15350          $pointer% = ""
15360         ENDIF
15370       NEXT
15380      SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
15390    ELSE
15400      $output_rec% = STR$rec%
15410      SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
15420    ENDIF
15430    rec% +=1
15440    PROCpoll(0)
15450  ENDWHILE
15460  PROCread_record(VAL($rec_number%)) : REM reload the latest record
15470  IF NOT error% THEN
15480  IF escape%  THEN
15490      PROCerror_message("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
15500    ELSE
15510      PROCerror_message("Search complete. "+STR$(match%)+" matches have been found")
15520  ENDIF
15530  ENDIF
15540  ENDIF
15550ENDIF
15560ENDPROC
15570
15580
15590DEF PROCprinter
15600escape% = FALSE
15610IF FNprinter_on THEN
15620PROCextract_record_data
15630IF FNvalid_record THEN
15640  PROCwrite_record(VAL($rec_number%)) : REM save the latest record
15650  PROCextract_output_list
15660  PROCcreate_search_string
15670  IF FNvalid_search_criteria THEN
15680  FOR list% = 0 TO 5
15690    pointer% = output_display%+list%*300
15700    $pointer% = ""
15710  NEXT
15720  PROCopen_window(screen_window%)
15730  rec% = 1
15740  match% = 0
15750  $output_rec% = STR$rec%
15760  $matches% = STR$match%
15770  SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
15780  escape% = FALSE
15790  PROCpoll(0)
15800  WHILE rec% <= number_of_records% AND NOT escape%
15810    PROCread_record(rec%)
15820    IF NOT case_sens% THEN PROCconvert_record_case
15830    IF EVAL(search_string$) THEN
15840    PROCread_record(rec%) : REM because the case may be changed
15850    IF tabulate% THEN PROCtabulate
15860      match% +=1
15870      $output_rec% = STR$rec%
15880      $matches% = STR$match%
15890       FOR list% = 0 TO 5
15900        pointer% = output_display%+list%*300
15910        IF LEN(output_list$(list%)) >0 THEN
15920          PROCdo_list
15930          PROCprint($pointer%)
15940        ELSE
15950          $pointer% = ""
15960        ENDIF
15970       NEXT
15980      SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
15990    ELSE
16000      $output_rec% = STR$rec%
16010      SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
16020    ENDIF
16030    rec% +=1
16040    PROCpoll(0)
16050  ENDWHILE
16060  PROCread_record(VAL($rec_number%)) : REM reload the latest record
16070  IF NOT error% THEN
16080  IF escape%  THEN
16090      PROCerror_message("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
16100    ELSE
16110      PROCerror_message("Search complete. "+STR$(match%)+" matches have been found")
16120  ENDIF
16130  ENDIF
16140  ENDIF
16150ENDIF
16160ENDIF
16170ENDPROC
16180
16190
16200DEF PROCdo_list
16210   LOCAL ERROR
16220   ON ERROR LOCAL error% =TRUE
16230   IF NOT error% THEN
16240       $pointer% = EVAL(output_list$(list%))
16250   ELSE
16260     PROCcloseawindow(screen_window%)
16270     PROCerror_message("Line "+STR$(list%+1)+" contains an unknown field name or a syntax error")
16280     escape% = TRUE
16290   ENDIF
16300   RESTORE ERROR
16310ENDPROC
16320
16330 
16340
16350
16360
16370DEF PROCfile_output
16380  PROCopen_window(save_window%)
16390  window% = save_window%
16400  new_pos% = 2
16410  PROCset_caret
16420ENDPROC
16430 
16440 
16450DEF PROCprint(text$)
16460VDU2
16470FOR i%= 1 TO LENtext$
16480  VDU1,ASC(MID$(text$,i%,1))
16490NEXT
16500VDU1,13,1,10
16510VDU3
16520ENDPROC
16530
16540
16550
16560DEF FNprinter_on
16570VDU7
16580VDU 2,1,65,1,127,3
16590IF ADVAL(-4) >= 1023 THEN
16600=TRUE
16610ELSE
16620PROCerror_message("Printer is not responding. Output cancelled")
16630=FALSE
16640ENDIF
16650
16660
16670DEF PROCcase_sens_toggle
16680case_sens% = NOT case_sens%
16690ENDPROC
16700
16710
16720DEF PROCcrlf_toggle
16730crlf% = NOT crlf%
16740ENDPROC
16750
16760DEF PROCtab_toggle
16770tabulate% = NOT tabulate%
16780ENDPROC
16790
16800
16810DEF PROCconvert_record_case
16820LOCAL f%
16830FOR f% = 0 TO number_of_fields%
16840  current_field_value$(f%) = FNupper(current_field_value$(f%))
16850NEXT
16860ENDPROC
16870
16880
16890DEF PROCstart_output_drag
16900  LOCAL wex%,wey%
16910  IF (button% AND &50) <> 0 THEN
16920  !block% = save_window%
16930  SYS"Wimp_GetWindowState",,block%
16940  wex% = block%!4 - block%!20
16950  wey% = block%!16 - block%!24
16960  block%!4 = 3 : REM icon handle for drag icon
16970  SYS"Wimp_GetIconState",,block%
16980  !block% = save_window%
16990  block%!4 = 5
17000  block%!8 = block%!8 +wex%
17010  block%!12 = block%!12 +wey%
17020  block%!16 = block%!16 +wex%
17030  block%!20 = block%!20 +wey%
17040  block%!24 = 0
17050  block%!28 = 0
17060  block%!32 = &7FFFFFFF
17070  block%!36 = &7FFFFFFF
17080  SYS"Wimp_DragBox",,block%
17090  ENDIF
17100ENDPROC
17110
17120
17130DEF PROCstart_disk_list
17140SYS"Wimp_GetPointerInfo",,block%
17150block%!20 = 64
17160block%!32 = 0
17170block%!36 = 1
17180block%!40 = block%!12
17190block%!44 = block%!16
17200block%!48 = !block%
17210block%!52 = block%!4
17220block%!56 = 10000 : REM size of the file
17230block%!60 = &FFF  : REM file type of the file
17240$(block%+64) = FNleaf($text_file_name%)
17250?(block%+65+LENFNleaf($text_file_name%)) = 0
17260SYS"Wimp_SendMessage",17,block%+20,block%!12,block%!16
17270ENDPROC
17280
17290
17300
17310DEF PROCproduce_output(filename$)
17320error% = FALSE
17330PROCextract_record_data
17340IF FNvalid_record AND FNoverwrite_ok(filename$) THEN
17350  PROCwrite_record(VAL($rec_number%)) : REM save the latest record
17360  PROCextract_output_list
17370  PROCcreate_search_string
17380  IF FNvalid_search_criteria THEN
17390  FOR list% = 0 TO 5
17400    pointer% = output_display%+list%*300
17410    $pointer% = ""
17420  NEXT
17430  PROCopen_window(screen_window%)
17440  output_file_handle% = OPENOUT(filename$)
17450  rec% = 1
17460  match% = 0
17470  $output_rec% = STR$rec%
17480  $matches% = STR$match%
17490  SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
17500  escape% = FALSE
17510  PROCpoll(0)
17520  WHILE rec% <= number_of_records% AND NOT escape%
17530    PROCread_record(rec%)
17540    IF NOT case_sens% THEN PROCconvert_record_case
17550    IF EVAL(search_string$) THEN
17560    PROCread_record(rec%) : REM because the case may be changed
17570    IF tabulate% THEN PROCtabulate
17580      match% +=1
17590      $output_rec% = STR$rec%
17600      $matches% = STR$match%
17610        FOR list% = 0 TO 5
17620        pointer% = output_display%+list%*300
17630        IF LEN(output_list$(list%)) >0 THEN
17640          PROCdo_list
17650        PROCprint_to_the_disk($pointer%)
17660        ELSE
17670          $pointer% = ""
17680        ENDIF
17690      NEXT
17700      SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
17710    ELSE
17720      $output_rec% = STR$rec%
17730      SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
17740    ENDIF
17750    rec% +=1
17760    PROCpoll(0)
17770  ENDWHILE
17780  PROCread_record(VAL($rec_number%)) : REM reload the latest record
17790  IF NOT error% THEN
17800  IF escape%  THEN
17810      PROCerror_message("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
17820    ELSE
17830      PROCerror_message("Search complete. "+STR$(match%)+" matches have been found")
17840  ENDIF
17850  ENDIF
17860  CLOSE# output_file_handle%
17870  OSCLI("settype "+filename$+" text")
17880  ENDIF
17890  PROCcloseawindow(save_window%)
17900ENDIF
17910ENDPROC
17920
17930
17940DEF PROCprint_to_the_disk(text$)
17950IF LENtext$ > 0 THEN
17960FOR i%= 1 TO LENtext$
17970  BPUT#output_file_handle%,ASC(MID$(text$,i%,1))
17980NEXT
17990ENDIF
18000  IF crlf% THEN BPUT #output_file_handle%,13
18010  BPUT #output_file_handle%,10
18020ENDPROC
18030
18040
18050DEF PROCquick_save
18060  IF INSTR($text_file_name%,".") = 0 THEN
18070    PROCerror_message("To save, drag the icon to a directory viewer.")
18080  ELSE
18090    PROCproduce_output($text_file_name%)
18100  ENDIF
18110ENDPROC
18120
18130
18140
18150DEF FNoverwrite_ok(filename$)
18160LOCAL name$, type%
18170name$ = filename$ + CHR$0
18180SYS"OS_File",5,name$,,,,,0 TO type%
18190CASE type% OF
18200  WHEN 0 : = TRUE
18210  WHEN 1 : result% = FNcancel_message("A file of this name exists. Click on OK to replace it. Click on CANCEL to abort search")
18220           IF result% = 1 THEN
18230              = TRUE
18240           ELSE
18250              = FALSE
18260           ENDIF
18270  WHEN 2 : PROCerror_message("This is a directory name"):= FALSE
18280ENDCASE
18290
18300DEF FNfile_size
18310LOCAL r0,r1,r2
18320SYS"OS_Args",2,file% TO r0,r1,r2
18330=r2
18340
18350DEF PROCdelete_record
18360LOCAL present%
18370IF number_of_records% = 1 THEN
18380 PROCerror_message("The file contains only one record. This can not be deleted")
18390ELSE
18400  present% = VAL($rec_number%)
18410  IF present% = number_of_records% THEN
18420    number_of_records%=number_of_records%-1
18430    $rec_number% = STR$(number_of_records%)
18440    PROCread_record(VAL($rec_number%))
18450    PROCupdate_display
18460  ELSE
18470    proceed% = FALSE
18480    IF number_of_records% - present% < 500 THEN
18490       proceed% = TRUE
18500    ELSE
18510      IF FNcancel_message("This may take some time. Select OK to continue") = 1 THEN
18520       proceed% = TRUE
18530    ENDIF
18540    ENDIF
18550    IF proceed% THEN
18560    PROCglass(TRUE)
18570    total% = number_of_records% - present%
18580 
18590    done% = 0
18600    FOR i% = present% TO number_of_records% -1
18610       PROCread_record(i%+1)
18620       PROCwrite_record(i%)
18630       SYS"Hourglass_Percentage", done%/total% * 100
18640       done% +=1
18650    NEXT
18660    PROCglass(FALSE)
18670    number_of_records%=number_of_records%-1
18680    PROCread_record(present%)
18690    PROCupdate_display
18700    ENDIF
18710ENDIF
18720ENDIF
18730ENDPROC
18740
18750DEF PROCtabulate
18760LOCAL f%
18770FOR f% = 0 TO number_of_fields%
18780  current_field_value$(f%)=current_field_value$(f%)+STRING$(VALf$(f%,2)," ")
18790  current_field_value$(f%)=LEFT$( current_field_value$(f%),VALf$(f%,2))
18800NEXT
18810ENDPROC
18820 
18830
18840
18850DEF PROCsort
18860LOCAL memory%
18870memory_sort% = TRUE
18880IF FNextract_sort_condition THEN
18890  PROCextract_record_data
18900  PROCwrite_record(VAL($rec_number%))
18910  size% = FNfile_size + 5000
18920
18930  LOCAL ERROR
18940  ON ERROR LOCAL  memory_sort% = FALSE
18950  IF memory_sort% THEN
18960     SYS"OS_Module",6,,,size% TO r0,r1,memory%
18970     RESTORE ERROR
18980        PROCload_file_to_memory
18990
19000     PROCmemory_sort
19010
19020        PROCsave_file_from_memory
19030     SYS"OS_Module",7,,memory%
19040  ELSE
19050     RESTORE ERROR
19060     VDU7
19070     PROCdiscsort
19080  ENDIF
19090  PROCread_record(VAL($rec_number%))
19100  PROCupdate_display
19110ENDIF
19120ENDPROC
19130
19140
19150DEF PROCmemory_sort
19160PROCglass(TRUE)
19170max = number_of_records%
19180FOR current = 1 TO max-1
19190   PROCrecall_from_memory_a(current)
19200   highest = current               :REM record_b is highest so far
19210   PROCrecall_from_memory_b(current)
19220   FOR i = current +1 TO max
19230     PROCrecall_from_memory_a(i)
19240     IF FNcompare THEN
19250       highest = i
19260       PROCrecall_from_memory_b(highest)
19270     ENDIF
19280   NEXT
19290   PROCrecall_from_memory_a(current)
19300   PROCstore_in_memory_a(highest)
19310   PROCstore_in_memory_b(current)
19320   REM SWAP r(current),r(highest)
19330   SYS"Hourglass_Percentage", current/max * 100
19340   PROCpoll(0)
19350NEXT
19360PROCglass(FALSE)
19370ENDPROC
19380
19390
19400
19410DEF PROCdiscsort
19420max = number_of_records%
19430PROCglass(TRUE)
19440FOR current = 1 TO max-1
19450   PROCread_record_a(current)
19460   highest = current               :REM record_b is highest so far
19470   PROCread_record_b(current)
19480   FOR i = current +1 TO max
19490     PROCread_record_a(i)
19500     IF FNcompare THEN
19510       highest = i
19520       PROCread_record_b(highest)
19530     ENDIF
19540   NEXT
19550   PROCread_record_a(current)
19560   PROCwrite_record_a(highest)
19570   PROCwrite_record_b(current)
19580   REM SWAP r(current),r(highest)
19590   SYS"Hourglass_Percentage", current/max * 100
19600   PROCpoll(0)
19610NEXT
19620PROCglass(FALSE)
19630ENDPROC
19640
19650 
19660
19670
19680
19690 
19700
19710
19720
19730DEF PROCread_record_a(position%)
19740LOCAL  pointer%, f%
19750record_a$()=""
19760pointer% = 5000+position%*record_size%
19770PTR#file% = pointer%
19780bad_field% = FALSE
19790LOCAL ERROR
19800f% = 0
19810WHILE f% <(number_of_fields%  )  AND NOT bad_field%
19820  ON ERROR LOCAL bad_field% = TRUE
19830  IF NOT bad_field% THEN
19840    INPUT #file%, record_a$(f%)
19850    f% +=1
19860  ENDIF
19870ENDWHILE
19880RESTORE ERROR
19890ENDPROC
19900
19910
19920DEF PROCwrite_record_a(position%)
19930LOCAL pointer%
19940pointer% = 5000+position%*record_size%
19950PTR#file% = pointer%
19960FOR f% = 0 TO number_of_fields%-1
19970 PRINT #file%, record_a$(f%)
19980NEXT
19990ENDPROC
20000
20010DEF PROCread_record_b(position%)
20020LOCAL  pointer%, f%
20030record_b$() = ""
20040pointer% = 5000+position%*record_size%
20050PTR#file% = pointer%
20060bad_field% = FALSE
20070LOCAL ERROR
20080f% = 0
20090WHILE f% <(number_of_fields%  )  AND NOT bad_field%
20100  ON ERROR LOCAL bad_field% = TRUE
20110  IF NOT bad_field% THEN
20120    INPUT #file%, record_b$(f%)
20130    f% +=1
20140  ENDIF
20150ENDWHILE
20160RESTORE ERROR
20170ENDPROC
20180
20190
20200DEF PROCwrite_record_b(position%)
20210LOCAL pointer%
20220pointer% = 5000+position%*record_size%
20230PTR#file% = pointer%
20240FOR f% = 0 TO number_of_fields%-1
20250 PRINT #file%, record_b$(f%)
20260NEXT
20270ENDPROC
20280
20290
20300
20310DEF FNextract_sort_condition
20320LOCAL a%, left$, right$, f%
20330ok% = TRUE
20340FOR a% = 0 TO 5
20350  sort_line$(a%) = FNupper($(sort_field%+50*a%))
20360  pointer% = sort_field%+50*a%+22
20370  CASE $pointer% OF
20380   WHEN "A","a" :  sort_operator$(a%) = "<"
20390   WHEN "D","d" :  sort_operator$(a%) = ">"
20400   OTHERWISE
20410     sort_operator$(a%) = "TRUE"
20420   ENDCASE
20430   IF LEN sort_line$(a%) >0 THEN
20440     IF LEN $pointer% = 0 THEN
20450        PROCerror_message("Line "+STR$(a%+1)+" has a field name but the direction of the sort has not been specified.")
20460        ok% = FALSE
20470    ELSE
20480       f% = 0
20490       WHILE sort_line$(a%) <> FNupper(f$(f%,0)) AND f% < number_of_fields%
20500         f%+=1
20510       ENDWHILE
20520       IF sort_line$(a%) <> FNupper(f$(f%,0)) THEN
20530        PROCerror_message("Line "+STR$(a%+1)+" has a field called "+sort_line$(a%)+" this field does not exist")
20540        ok% = FALSE
20550       ENDIF
20560       left$ = sort_line$(a%)
20570       right$ = sort_line$(a%)
20580       CASE f$(f%,1) OF
20590       WHEN "D","d" : left$ = "FNdate(record_a$("+STR$f%+"))"
20600                      right$= "FNdate(record_b$("+STR$f%+"))"
20610       WHEN "N","n" : left$ = "VAL(record_a$("+STR$f%+"))"
20620                    : right$= "VAL(record_b$("+STR$f%+"))"
20630       WHEN "T","t" : IF sort_case_sens% THEN
20640                         left$ = "record_a$("+STR$f%+")"
20650                         right$= "record_b$("+STR$f%+")"
20660                      ELSE
20670                         left$ = "FNupper(record_a$("+STR$f%+"))"
20680                         right$= "FNupper(record_b$("+STR$f%+"))"
20690                      ENDIF
20700       ENDCASE
20710       IF sort_operator$(a%) = "TRUE" THEN
20720         sort_line$(a%)="TRUE"
20730       ELSE
20740         sort_line$(a%) = left$+sort_operator$(a%)+right$
20750         sort_line$(a%+6) = left$+"="+right$
20760       ENDIF
20770    ENDIF
20780   ELSE
20790     sort_line$(a%)="TRUE"
20800     sort_line$(a%+6)="TRUE"
20810    ENDIF
20820NEXT
20830=ok%
20840 
20850
20860
20870DEF FNcompare
20880LOCAL result%
20890result% = FALSE
20900IF EVALsort_line$(0) THEN
20910  result% = TRUE
20920ELSE
20930  IF EVALsort_line$(6) THEN
20940 
20950    IF EVALsort_line$(1) THEN
20960      result% = TRUE
20970    ELSE
20980     IF EVALsort_line$(7) THEN
20990 
21000       IF EVALsort_line$(2) THEN
21010        result% = TRUE
21020       ELSE
21030        IF EVALsort_line$(8) THEN
21040 
21050          IF EVALsort_line$(3) THEN
21060            result% = TRUE
21070          ELSE
21080            IF EVALsort_line$(9) THEN
21090 
21100              IF EVALsort_line$(4) THEN
21110                result% = TRUE
21120              ELSE
21130                IF EVALsort_line$(10) THEN
21140 
21150                   IF EVALsort_line$(5) THEN
21160                     result% = TRUE
21170                   ELSE
21180                     IF EVALsort_line$(11) THEN
21190 
21200                   ENDIF
21210                  ENDIF
21220
21230                ENDIF
21240              ENDIF
21250
21260            ENDIF
21270          ENDIF
21280
21290       ENDIF
21300     ENDIF
21310
21320    ENDIF
21330  ENDIF
21340 
21350  ENDIF
21360ENDIF
21370=result%
21380
21390DEF PROCload_file_to_memory
21400FOR rec% = 1 TO number_of_records%
21410  PROCread_record_a(rec%)
21420  PROCstore_in_memory_a(rec%)
21430NEXT
21440ENDPROC
21450
21460DEF PROCsave_file_from_memory
21470FOR rec% = 1 TO number_of_records%
21480  PROCrecall_from_memory_a(rec%)
21490  PROCwrite_record_a(rec%)
21500NEXT
21510ENDPROC
21520
21530
21540DEF PROCstore_in_memory_a(rec%)
21550pointer% = rec%*record_size%+memory%
21560FOR f% = 0 TO number_of_fields% -1
21570   $pointer% = record_a$(f%)
21580    pointer% = pointer% + LENrecord_a$(f%)+1
21590NEXT
21600ENDPROC
21610
21620DEF PROCstore_in_memory_b(rec%)
21630pointer% = rec%*record_size%+memory%
21640FOR f% = 0 TO number_of_fields% -1
21650   $pointer% = record_b$(f%)
21660    pointer% = pointer% + LENrecord_b$(f%)+1
21670NEXT
21680ENDPROC
21690
21700
21710DEF PROCrecall_from_memory_a(rec%)
21720pointer% = rec%*record_size%+memory%
21730FOR f% = 0 TO number_of_fields% -1
21740   record_a$(f%) = $pointer%
21750    pointer% = pointer% + LENrecord_a$(f%)+1
21760NEXT
21770ENDPROC
21780
21790DEF PROCrecall_from_memory_b(rec%)
21800pointer% = rec%*record_size%+memory%
21810FOR f% = 0 TO number_of_fields% -1
21820   record_b$(f%) = $pointer%
21830    pointer% = pointer% + LENrecord_b$(f%)+1
21840NEXT
21850ENDPROC
21860
21870
21880DEF PROCread_virus
21890LOCAL f%
21900f% = OPENIN("<CardBase$Dir>.date")
21910IF f% > 0 THEN
21920  virus_set% = TRUE
21930  DIM virus$(12)
21940  count% = -1
21950  REPEAT
21960     count% +=1
21970     no_more% = FNread_virus_line
21980  UNTIL count% = 10 OR no_more%
21990  CLOSE #f%
22000  IF LEFT$(virus$(0),6) <> MID$(TIME$,5,6) THEN
22010     virus_set% = FALSE
22020  ELSE
22030    no_of_vir_mess% = 0
22040    FOR j% = 1 TO 10
22050     IF LENvirus$(j%) > 0 THEN no_of_vir_mess%+=1
22060    NEXT
22070     current_vir_mess% = 1
22080    IF no_of_vir_mess% = 0 THEN virus_set% = FALSE
22090  ENDIF
22100ELSE
22110  virus_set% = FALSE
22120ENDIF
22130ENDPROC
22140 
22150
22160DEF FNread_virus_line
22170  PROCget_a_line
22180  WHILE LEFT$(line$,1) ="|" AND NOT EOF#f%
22190     PROCget_a_line
22200  ENDWHILE
22210  virus$(count%) = line$
22220= EOF #f%
22230
22240
22250DEF PROCget_a_line
22260  line$ =""
22270  c% = BGET#f%
22280  WHILE c% <> 10
22290    line$ = line$+CHR$c%
22300    c% = BGET#f%
22310  ENDWHILE
22320ENDPROC
22330
22340 
22350
22360DEF PROCshow_virus
22370PROCerror_message(virus$(current_vir_mess%))
22380current_vir_mess% +=1
22390IF current_vir_mess% > no_of_vir_mess% THEN
22400   current_vir_mess% =1
22410ENDIF
22420ENDPROC
22430
22440REM dummy
22450
22460
22470dummy

�    !runimage for CardBase
�    Trial Version
�    Adrian Lane
(�    3 Lansdowne Gardens
2�    Hailsham
<�    BN27 1LQ
F
P
Z� � � 0:�:�:a=�:�
d
n�environment
x
��constants
�	�vars
�
�setup
��create_variables
��createicons
��read_virus
�� c$<>"" � �load(c$)
�� � �error
��
�  �poll(1)
�
� quit
�  �close_down_file
�  ș "Wimp_CloseDown"
�

� �poll(mask%)
"!  ș Poll%,mask%,q% � reason%
,  Ȏ reason% �
6  � 1 :�redraw_window(!q%)
@"  � 2 :ș"Wimp_OpenWindow",,q%
J  � 3 :�closeawindow(!q%)
T  � 6 :�buttons(q%)
^  � 7 : � loaded% �
h"              �start_disk_list
r           �
|              �new_save
�           �
�  � 8 :�key(q%!24)
�  � 9 : �menu_select(!q%)
�  � 17,18:�receive(q%)
�  �
��
�
�� �menu_select(item%)
�Ȏ item% �
�  � 0 : �create
�8  � 1 : � � inhibit% � �open_window(display_window%)
�5  � 2 : � � inhibit% � �open_window(sort_window%)
�7  � 3 : � � inhibit% � �open_window(output_window%)
7  � 4 : � � inhibit% � �open_window(fields_window%)
  � 5 : �close_down_file
  � 7 : quit = �
&�
0�
:
D
N
X� �buttons(b)
b� window%, icon%, button%
l   window% = b!12
v  icon% = b!16
�  button% = b!8
�   � virus_set% � �(20) = 1 �
�     �show_virus
�  �
�  Ȏ window% �
�'  � -2   : � button% =2  � �menu(b)
�>  � newfile_window% : � (button% � &50) <> 0 � �start_drag
�$  � display_window% : Ȏ icon% �
�,                            � 2 : �start
�2                            � 3 : �end_of_file
�6                            � 4 : �previous_record
�2                            � 5 : �next_record
�4                            � 6 : �delete_record
                         �
$  � output_window%  : Ȏ icon% �
/                            � 9  : �printer
 .                            � 10 : �screen
*3                            � 11 : �file_output
4C                            � case_sens_icon%:�case_sens_toggle
>?                            � cr_icon%       : �crlf_toggle
H>                            � tab_icon%      : �tab_toggle
R                         �
\$  � save_window%    : Ȏ icon% �
f9                            � 3  : �start_output_drag
p2                            � 0  : �quick_save
z                         �
�4  � screen_window%   : � icon% = 1 � escape% = �
�%  � sort_window%     : Ȏ icon% �
�)                          � 3 : �sort
�G                          � 4 : sort_case_sens% = � sort_case_sens%
�                          �
�  �
�  �
��
�
�$� �read_icon_text(window%,icon%)
�!block% = window%
�block%!4 = icon%
�"ș "Wimp_GetIconState",,block%
= $(block%!28)


$
.� �open_window(handle%)
8 !block% = handle%
B$ È™"Wimp_GetWindowState",,block%
L# block%!28 = -1 : � open on top
V È™ OpenW ,,block%
`�
j
t
~
�
� �key(k)
�� window%, icon%, new_pos%
�ș "Wimp_ProcessKey",k
�;� k = 13  � k = &18E � k = &18F � k = &19D � k = &19E �
�(   ș"Wimp_GetCaretPosition",,caret%
�   window% = caret%!0
�   icon%   = caret%!4
�   new_pos% = icon%
�   Ȏ window% �
�,   � newfile_window% : � icon% = nf_1% �
�1                             new_pos% = nf_2%
�                            �
1                             new_pos% = nf_1%

                            �
)                           �set_caret
P                           È™"Wimp_ForceRedraw",fields_window%,0,-100,1000,0
(/    � output_window% : � k = 13 � k =&18E �
2<                             � icon% < output_icon%(6) �
<3                               new_pos%=icon%+1
F"                             �
P=                               new_pos% = output_icon%(0)
Z"                             �
d                            �
n<                             � icon% > output_icon%(0) �
x3                               new_pos%=icon%-1
�"                             �
�=                               new_pos% = output_icon%(6)
�"                             �
�
�                            �
�)                           �set_caret
�
�'    � sort_window%    : � k = 13  �
�;                             � icon% < sort_icon%(11) �
�3                               new_pos%=icon%+1
�"                             �
�;                               new_pos% = sort_icon%(0)
�"                             �
+                             �set_caret
                            �
*                           � k =&18F �
":                             � icon% > sort_icon%(1) �
,3                               new_pos%=icon%-2
6"                             �
@<                               new_pos% = sort_icon%(11)
J"                             �
T+                             �set_caret
^                            �
h*                           � k =&18E �
r;                             � icon% < sort_icon%(10) �
|3                               new_pos%=icon%+2
�"                             �
�;                               new_pos% = sort_icon%(0)
�"                             �
�+                             �set_caret
�                            �
�0    � fields_window%   : � k= 13 � k= &19D �
�>                             � icon% < list%(max_fields) �
�3                               new_pos%=icon%+1
�#                              �
�6                               new_pos% = name%(0)
�#                              �
�,                              �set_caret
�!                            �
+                            � k =&18F �
6                             � icon% >= name%(1) �
3                               new_pos%=icon%-7
&+                             �set_caret
0"                             �
:                            �
D*                           � k =&18E �
N>                             � icon% < name%(max_fields) �
X3                               new_pos%=icon%+7
b+                             �set_caret
l"                             �
v                            �
�*                           � k= &19C �
�5                             � icon% > name%(0) �
�3                               new_pos%=icon%+1
�,                              �set_caret
�!                            �
�!                            �
�1    � display_window%   :� k = 13 � k =&18E �
�M                             � icon% <display_icon%(number_of_fields%-1)�
�3                               new_pos%=icon%+2
�"                             �
�>                               new_pos% = display_icon%(0)
�G                               � k = 13 � �set_caret:�next_record :
�"                             �
                            �
=                             � icon% > display_icon%(0) �
3                               new_pos%=icon%-2
 "                             �
*P                               new_pos% = display_icon%(number_of_fields%-1)
4"                             �
>                            �
H)                           �set_caret
R0    � password_window% : � k= 13 � �password
\1    � save_window%     : � k=13 � �quick_save
f	    �
p�
z�
�
�� �set_caret
�:    ș"Wimp_SetCaretPosition",window%,new_pos%,,,-1,-1
��
�
�
�
�� �menu(b)
�flag1% = &7000021
�flag2% = &7400021
�� loaded% Ȕ flag1%,flag2%
�$menu="CardBase"
�menu!12=&70207
	menu!16=156
	menu!20=40
	
menu!24=0
	$
	.
	8
	Bmenu!28 = &00
	Lmenu!32 = -1
	Vmenu!36 =  flag1%
	`$(menu+40) = "Create"
	j
	tmenu!52 = &00
	~menu!56 = -1
	�menu!60 =  flag2%
	�$(menu+64) = "Disp Edit"
	�
	�menu!76 = &00
	�menu!80 = -1
	�menu!84 = flag2%
	�$(menu+88) = "Sort"
	�
	� 
	�menu!100 = &00
	�menu!104 = -1
	�menu!108 = flag2%
$(menu+112) = "Output"

 
menu!124 = &00
menu!128 = -1
(menu!132 = flag2%
2$(menu+136) = "Fields"
<
Fmenu!148 = &00
Pmenu!152 = -1
Zmenu!156 = flag2%
d$(menu+160) = "Close"
n
x
�
�menu!172 = &00
�menu!176 = info_window%
�menu!180 = &7000021
�$(menu+184) = "Info"
�
�
�menu!196=&80
�menu!200= -1
�menu!204=&7000021
�$(menu+208)="Quit"
�
�(ș "Wimp_CreateMenu",,menu,!b-64,136
�


"
,� �closeawindow(handle%)
6!block%=handle%
@! È™"Wimp_CloseWindow",,block%
J<� handle% = output_window% � �closeawindow(save_window%)
T  � recursive bit
^�
h
r� �receive(q%)
|Ȏ q%!16 �
�� 0:�finish:�
�� 2: �datasave(q%)
�'� 3,5 : � q%!12 = 0 � �dataload(q%)
��
��
� 
�
�
�
�� �setup
�� block% 600
�� taskid%4:$taskid%="TASK"
�%� q% &900,buffer% &800,endbuf% -1
� menu 500
� indirect% 2200
� caret% 40
&curbuf%=buffer%
0;ș "Wimp_Initialise",200,!taskid%,"CardBase" � version%
:6È™ "Wimp_OpenTemplate",,"<CardBase$Dir>.Templates"
DEÈ™ "Wimp_LoadTemplate",,q%,indirect%,indirect%+199,-1,"display",0
N0ș "Wimp_CreateWindow",,q% � display_window%
XHÈ™ "Wimp_LoadTemplate",,q%,indirect%+200,indirect%+399,-1,"fields",0
b/ș "Wimp_CreateWindow",,q% � fields_window%
lHÈ™ "Wimp_LoadTemplate",,q%,indirect%+400,indirect%+599,-1,"output",0
v/ș "Wimp_CreateWindow",,q% � output_window%
�Jș "Wimp_LoadTemplate",,q%,indirect%+600,indirect%+799,-1,"proginfo",0
�-ș "Wimp_CreateWindow",,q% � info_window%
�Fș "Wimp_LoadTemplate",,q%,indirect%+800,indirect%+999,-1,"sort",0
�-ș "Wimp_CreateWindow",,q% � sort_window%
�Jș "Wimp_LoadTemplate",,q%,indirect%+1000,indirect%+1199,-1,"create",0
�0ș "Wimp_CreateWindow",,q% � newfile_window%
�Lș "Wimp_LoadTemplate",,q%,indirect%+1200,indirect%+1399,-1,"password",0
�1ș "Wimp_CreateWindow",,q% � password_window%
�Jș "Wimp_LoadTemplate",,q%,indirect%+1400,indirect%+1599,-1,"screen",0
�/ș "Wimp_CreateWindow",,q% � screen_window%
�Hș "Wimp_LoadTemplate",,q%,indirect%+1600,indirect%+2000,-1,"save",0
�
q%!64 = 1
�

-ș "Wimp_CreateWindow",,q% � save_window%

È™ "Wimp_CloseTemplate"

!S%=�"<CardBase$Dir>.!Sprites"

 T%=�#S%+160

*�#S%

4� sprites% T%

>!sprites%=T%:sprites%!8=1

H"È™ "OS_SpriteOp",&109,sprites%

R<È™ "OS_SpriteOp",&10A,sprites%,"<CardBase$Dir>.!Sprites"

\iccalc%=�iconbar

fquit = �

pabort% = �

z!q% = save_window%

�q%!4 = 2

�ș"Wimp_GetIconState",,q%

�text_file_name% = q%!28

��

�

�

� 

�� �iconbar

�
!q%=-1

�
q%!4=0

�
q%!8=0

�q%!12=63

�q%!16=68
q%!20=&2102
spname$="!CardBase"
� q%!24 (�spname$+1)
$$(q%!24)=spname$
.q%!28=sprites%
8q%!32=�spname$+1
B"ș "Wimp_CreateIcon",,q% � ic%
L=ic%
V
`
j
t
~
�� �vars
�Wimp    = (1<<18) + (3<<6)
�CreateW = Wimp+1
�OpenW   = Wimp+5
�CloseW  = Wimp+6
�Poll%   = Wimp+7
�RedrawW = Wimp+8
�UpdateW = Wimp+9
�GetR%   = Wimp+10
�GetW    = Wimp+11
�GetP    = Wimp+15
�Drag    = Wimp+16
CrMenu  = Wimp+20

DcMenu  = Wimp+21
file%   = 0
inhibit% = �
(case_sens_icon% = 13
2cr_icon%        = 15
<tab_icon%       = 17
Ftabulate%       = �
Psort_case_sens% = �
Zoutput_file_handle% = 0
d�
n
x
�� �error
�� � = 17 �
�' �error_message("Escape pressed"):�
��
�2  �error_message(�$+" (internal error) "+�(�))
��
�� output_file_handle% > 0 �
�   �# output_file_handle%
�   output_file_handle%=0
��
�abort% = �
��
�



"
,
6� �error_message(text$)
@È™"Hourglass_Smash"
JÈ™"Wimp_DragBox",,-1
T
!block%=�
^$(block%+4)=text$
h.È™ "Wimp_ReportError",block%,1,"!CardBase"
r�
|
�
�� �cancel_message(text$)
�� returns 0,1,2 for
�� r0,r1
�ș"Hourglass_Smash"
�ș"Wimp_DragBox",,-1
�
!block%=�
�$(block%+4)=text$
�6ș "Wimp_ReportError",block%,7,"!CardBase" � r0,r1
�=r1
��
�
�
� �glass(o%)

� o% �
  È™"Hourglass_On"
&�
0  È™"Hourglass_Off"
:�
D�
N
X
b
� �finish
lÈ™ "Wimp_CloseDown"
v�
�
�
�
�
�� �redraw_window(handle%)
�!block% = handle%
�)ș"Wimp_RedrawWindow",,block% � more%
�ȕ more%
�,  ș "Wimp_GetRectangle",,block% � more%
��
��
�
� 
A� �icon(whandle%,ix%,iy%,iw%,ih%,flag%, text$, d1%, d2%, d3%)
block%!0 = whandle%
block%!4 = ix%
 block%!8 = iy%
*block%!12 = ix% + iw%
4block%!16 = iy% + ih%
>block%!20 = flag%
H� d1% = 0 �
R $(block%!24) = text$
\�
f   block%!24 = d1%
p   block%!28 = d2%
z   block%!32 = d3%
��
�*ș"Wimp_CreateIcon",,block% � ihandle%
�
=ihandle%
�
�
�� �create_variables
�� message_block% 100
ʀ� name%(max_fields),type%(max_fields),width%(max_fields),dp%(max_fields),min%(max_fields),max%(max_fields),list%(max_fields)
�H� record_a$(max_fields), record_b$(max_fields), highest$(max_fields)
�'� sort_line$(12), sort_operator$(6)
�� field_used%(max_fields)
�&� current_field_value$(max_fields)
�� output_list$(6)
� filename% 20
� pathname% 200
� record_number% 13
$� password% 13
.� in_password% 13
8� valid_name% 20
B� valid_password% 20
L� rec_number% 13
V� valid_type% 20
`� field_des% 2200
j� valid_integer% 10
t� output_list% 500
~� search_list% 200
�� output_icon%(6)
�� sort_field% 300
�� sort_icon%(12)
�� valid_sort% 20
�� display_data% 3000
�!� display_icon%(max_fields*2)
�� output_display% 2000
�� matches% 20
�� output_rec% 20
�
�$valid_name%="Aa-zA-Z0-9"
�$valid_password% ="D*"
$valid_type% = "ADNTdnt"

$valid_integer% = "A0-9"
$valid_sort% = "AaADd"
 
( 
2$filename% = "DataFile"
<$pathname% = "DataFile"
F$password% = ""
P$in_password% = ""
Z$rec_number% = "0"
d$search_list% = ""
n 
xloaded% = �
�� f$(19,6)
�
�$text_file_name% = "Output"
��
� 
�
�� �createicons
�N� windowhandle,minx,miny,length, height, flags, sprite,text, valid, length
�%� text, no background is &7000511
�'� text, with background is &7000135
�2� writable icon, validated, in box is &700F53D
�Vnf_1% = �icon(newfile_window%,200,-54,200,48,&700F53D,"",filename%,valid_name%,12)
�Znf_2% =�icon(newfile_window%,200,-108,200,48,&700F53D,"",password%,valid_password%,12)
\pw% =�icon(password_window%,400,-200,200,48,&700F53D,"",in_password%,valid_password%,12)
Id% =�icon(display_window%,270,-62,200,48,&7000135,"",filename%,-1,12)
Hd% =�icon(fields_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
"Hd% =�icon(output_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
,Hd% =�icon(screen_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
6Fd% =�icon(sort_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
@Kd% =�icon(display_window%,700,-62,180,48,&7000135,"",rec_number%,-1,12)
J
T-� a% = field_des% � field_des% + 2196 � 4
^2  !a% = &D0D0D0D    : � SET THE AYYAY TO EMPTY
h�
r
|� a% = 0 � 496 � 4
�   output_list%!a% = &D0D0D0D
��
�
�� a% = 0 � 296 � 4
�  sort_field%!a% = &D0D0D0D
��
�
�� a% = 0 � 1996 � 4
�#  output_display%!a% = &D0D0D0D
��
�
�� a% = 0 � 196 � 4
�   search_list%!a% = &D0D0D0D
�

� a% = 0 � 1996 � 4
&#  output_display%!a% = &D0D0D0D
0�
:
D
N
X� row% = 0 � max_fields
bmname%(row%) = �icon(fields_window%,50,-250-row%*60,200,48,&700F535,"",field_des%+100*row%,valid_name%,20)
lotype%(row%) = �icon(fields_window%,330,-250-row%*60,40,48,&700F535,"",field_des%+22+100*row%,valid_type%,2)
vswidth%(row%) = �icon(fields_window%,470,-250-row%*60,80,48,&700F535,"",field_des%+26+100*row%,valid_integer%,3)
�pdp%(row%) = �icon(fields_window%,600,-250-row%*60,80,48,&700F535,"",field_des%+32+100*row%,valid_integer%,2)
�gmin%(row%) = �icon(fields_window%,730,-250-row%*60,130,48,&700F535,"",field_des%+35+100*row%,-1,12)
�gmax%(row%) = �icon(fields_window%,870,-250-row%*60,130,48,&700F535,"",field_des%+47+100*row%,-1,12)
�hlist%(row%) =�icon(fields_window%,1010,-250-row%*60,250,48,&700F535,"",field_des%+60+100*row%,-1,38)
��
� 
�
y% = -120
�� a% = 0 � 5
�h  output_icon%(a%) =  �icon(output_window%,200,y%-60*a%,700,48,&700F535,"",output_list%+70*a%,-1,60)
��
�Zoutput_icon%(6) =�icon(output_window%,280,-480,620,48,&700F535,"",search_list%,-1,200)
� 
�


y% = -260
� a% = 0 � 10 � 2
 `  sort_icon%(a%) =�icon(sort_window%,20,y%-30*a%,300,48,&700F535,"",sort_field%+25*a%,-1,20)
*l sort_icon%(a%+1) =�icon(sort_window%,450,y%-30*a%,50,48,&700F535,"",sort_field%+22+25*a%,valid_sort%,2)
4�
>
H
R
\'� this is the output display dindow
f
p
y% = -120
z� a% = 0 � 5
�^ d% =  �icon(screen_window%,200,y%-60*a%,700,48,&7000511,"",output_display%+300*a%,-1,250)
��
�Jd% =�icon(screen_window%,620,-62,150,48,&7000135,"",output_rec%,-1,12)
�Gd% =�icon(screen_window%,900,-62,150,48,&7000135,"",matches%,-1,12)
� 
�
�@� d% = FNicon(function%,16,-50,250,48,&7000511,"",t1%,-1,20)
��
�
�
�� �constants
�  max_fields = 19
�  over_size  = 1.25
  ALL        = �
  case_sens% = �
  crlf%      = �
$  tabulate%  = �
.�
8
B
� �create
L-� a% = field_des% � field_des% + 2196 � 4
V2  !a% = &D0D0D0D    : � SET THE AYYAY TO EMPTY
`�
j$filename% = "DataFile"
t$pathname% = "DataFile"
~$password% = ""
�$rec_number% = "0"
�$search_list% = ""
�!�open_window(newfile_window%)
� �open_window(fields_window%)
�window% = newfile_window%
�new_pos% = nf_1%
��set_caret
��
�
� � �extract_field_description
�� rec%,pos%
�� rec% = 0 � max_fields
   pos% = field_des%+rec%*100

  f$(rec%,0) = $pos%
#  pos% = field_des%+rec%*100+22
  f$(rec%,1) = $pos%
(#  pos% = field_des%+rec%*100+26
2  f$(rec%,2) = $pos%
<#  pos% = field_des%+rec%*100+32
F  f$(rec%,3) = $pos%
P#  pos% = field_des%+rec%*100+35
Z  f$(rec%,4) = $pos%
d#  pos% = field_des%+rec%*100+47
n  f$(rec%,5) = $pos%
x#  pos% = field_des%+rec%*100+60
�  f$(rec%,6) = $pos%
�  � � f$(rec%,0) > 0 �
�      field_used%(rec%) = �
�  �
�      field_used%(rec%) = �
�  �
��
�d=�Field_des_ok
��
� 
�
�� �field_name_ok
�)� rec%, rec1%, rec2%, length%, field%
ok=�
� rec% = 0 � max_fields
   length% = 0
"   � field% = 0 � 6
,/     length% = length% + �(f$(rec%,field%))
6   �
@(   � length% > 0 � �(f$(rec%,0))=0 �
J      ok = �
TK      �error_message("Field number "+�(rec%+1)+" does not have a name")
^   �
h�
r� rec1% = 0 � max_fields-1
|%   � rec2% = rec1%+1 � max_fields
�:     � f$(rec1%,0) = f$(rec2%,0) � �(f$(rec2%,0)) >0 �
�       ok = �
�L       �error_message("There are two fields with the name "+f$(rec2%,0))
�
     �
�   �
��
�=ok
� 
�
�
�� �field_len_ok
�
� rec%
�� rec% = 0 � max_fields
 � �(f$(rec%,0))>0 �
   � �(f$(rec%,2))=0 �
V      �error_message("Field '"+f$(rec%,0)+"' must have a width greater than zero")
&   �
0A   � (f$(rec%,1)="N" � f$(rec%,1)="n") � �(f$(rec%,2)) > 20 �
:]      �error_message("Field '"+f$(rec%,0)+"' is numeric so its width must not exceed 20")
D   �
N  �
X�
b=�
l
v
�� �field_type_ok
�
� rec%
�� rec% = 0 � max_fields
�,   � �(f$(rec%,0))>0 � �(f$(rec%,1))=0 �
�E      �error_message("Field "+f$(rec%,0)+" does not have a type")
�   �
��
�=�
�
�
�� �field_max_ok
�� rec%, ok%
�� rec% = 0 � max_fields
> � �(f$(rec%,0))>0 � (f$(rec%,1) ="N" � f$(rec%,1) ="n") �
   � � �numeric(f$(rec%,4)) �
N    �error_message("Field "+f$(rec%,0)+" does not have a numeric minimum")
   �
* �
4�
>� rec% = 0 � max_fields
H> � �(f$(rec%,0))>0 � (f$(rec%,1) ="N" � f$(rec%,1) ="n") �
R   � � �numeric(f$(rec%,5)) �
\N    �error_message("Field "+f$(rec%,0)+" does not have a numeric maximum")
f  �
p �
z�
�=ok%
�
�
�� �field_date_ok
�� rec%, ok%
�� rec% = 0 � max_fields
�? � �(f$(rec%,0))>0 � (f$(rec%,1) ="D" � f$(rec%,1) ="d")  �
�6  � � �valid_date(f$(rec%,4)) � �(f$(rec%,4))>0  �
�\    �error_message("Field "+f$(rec%,0)+" does not have a correctly formed minimum date")
�  �
� �
��
�� rec% = 0 � max_fields
> � �(f$(rec%,0))>0 � (f$(rec%,1) ="d" � f$(rec%,1) ="D") �
5  � � �valid_date(f$(rec%,5)) � �(f$(rec%,5))>0 �
\    �error_message("Field "+f$(rec%,0)+" does not have a correctly formed maximum date")
$  �
. �
8�
B=ok%
L
V
`
j
t� �Field_des_ok
~[� �field_name_ok � �field_len_ok � �field_type_ok � �field_max_ok � �field_date_ok    �
�	  = �
��
�  =�
��
� 
�
�� �numeric(text$)
�
� i%, ok%
�	ok%=�
�� �(text$) > 0 �
�  � i% = 1 � �(text$)
�    c$ = �text$,i%,1)
-    � c$ <"." � c$>"9" � c$="/" � ok% = �

  �
�
	= ok%
(
2� �valid_date(date$)
<� ok%, day%, month%, year%
F5ok% = �               : � allow zero null entries
P� �(date$) >0 �
Z� �(date$) <>8 �
d ok% = �
n�
x  day% = �(�date$,2))
�  month% = �(�date$,4,2))
�  year%  = �(�date$,7,2))
�  � year% � 4 = 0 �
�     days_in_feb% = 29
�  �
�     days_in_feb% = 28
�  �
�*  � (day% > 31) � (day% < 1) � ok% = �
�-  � (month% >12) � (month% < 1) � ok% = �
�  Ȏ month% �
�*    � 4,6,9,11 : � day% > 30 � ok% = �
�4    � 2        : � day% > days_in_feb% � ok% = �
�  �
�
�
=ok%
"
,
6� �start_drag
@  � wex%,wey%
J  !block% = newfile_window%
T%  È™"Wimp_GetWindowState",,block%
^!  wex% = block%!4 - block%!20
h"  wey% = block%!16 - block%!24
r0  block%!4 = 2 : � icon handle for drag icon
|#  È™"Wimp_GetIconState",,block%
�  !block% = newfile_window%
�  block%!4 = 5
�  block%!8 = block%!8 +wex%
�!  block%!12 = block%!12 +wey%
�!  block%!16 = block%!16 +wex%
�!  block%!20 = block%!20 +wey%
�  block%!24 = 0
�  block%!28 = 0
�  block%!32 = &7FFFFFFF
�  block%!36 = &7FFFFFFF
�  ș"Wimp_DragBox",,block%
��
�
 
 � �new_save
 �extract_field_description
 &number_of_fields% = 0
 0� rec% = 0 � max_fields
 :  � �(f$(rec%,0)) > 0 �
 D     number_of_fields% +=1
 N  �
 X�
 b� number_of_fields% = 0 �
 lA   �error_message("There must be at least one field defined")
 v�
 �#ș"Wimp_GetPointerInfo",,block%
 �block%!20 = 64
 �block%!32 = 0
 �block%!36 = 1
 �block%!40 = block%!12
 �block%!44 = block%!16
 �block%!48 = !block%
 �block%!52 = block%!4
 �*block%!56 = 10000 : � size of the file
 �/block%!60 = &778  : � file type of the file
 �$(block%+64) = $filename%
 �"?(block%+65+�($filename%)) = 0
 �9ș"Wimp_SendMessage",17,block%+20,block%!12,block%!16
!�
!�
!
! � �get_name(P%)
!*	A$=""
!4ȕ ?P%<>0 � ?P%<> 13
!> A$ = A$+�?P%:P%+=1
!H�
!R=A$
!\
!f
!p� �leaf(path$)
!zȕ �path$,".")
!�path$=�path$,�path$,".")+1)
!��
!�
=path$
!�
!�
!�� �datasave(b)
!�� loaded% �
!�� i% = 0 � 96 � 4
!�  message_block%!i% = b!i%
!��
!�9� copy the message block since wimp poll currupts it!
!�1�produce_output(�get_name(message_block%+44))
!�6� �get_name(message_block%+44) <> "<Wimp$Scrap>" �
"6  $text_file_name%  = �get_name(message_block%+44)
"�
"&message_block%!12=message_block%!8
"$message_block%!16=3
".!message_block% = 64
"8NÈ™"Wimp_SendMessage",17,message_block%,message_block%!20,message_block%!24
"B
"L�
"V�saveit(�get_name(b+44))
"` $pathname% = �get_name(b+44)
"j"$filename% = �leaf($pathname%)
"tb!12=b!8
"~
b!16=3
"�!b = 64
"�'ș"Wimp_SendMessage",17,b,b!20,b!24
"��
"��
"�
"�
"�
"�� �saveit(name$)
"�&� This saves a file the first time
"��  rec%
"�file% = �(name$)
"�-� a% = field_des% � field_des% + 2196 � 4
#  �#file%,!a%
#
�
#current_field_value$() = ""
#number_of_fields% = 0
#(number_of_records% = 1
#2record_size% = 0
#<� rec% = 0 � max_fields
#F/  record_size%=record_size%+�(f$(rec%,2))+2
#P  � �(f$(rec%,0)) > 0 �
#Z     number_of_fields% +=1
#d  �
#n�
#x*record_size%=20+record_size%*over_size
#�� #file%,$password%
#�� #file%, $filename%
#� � #file%, number_of_records%
#�� #file%, record_size%
#�� #file%, number_of_fields%
#�!� #file%, 1 : � record number
#�
#�� rec% = 0 � max_fields
#�!  � #file%, field_used%(rec%)
#��
#�
#�.� a% = output_list% � output_list%+496 � 4
#�  � #file%,!a%
$�
$
$.� a% = search_list% � search_list%+196 � 4
$"  � #file%,!a%
$,�
$6
$@,� a% = sort_field% � sort_field%+296 � 4
$J  � #file%,!a%
$T�
$^
$h
$r
$|
$�
$��write_record(1)
$�� #file%
$�
file% = 0
$��("settype "+name$+" 778")
$�"�closeawindow(newfile_window%)
$�!�closeawindow(fields_window%)
$�loaded% = �
$��load(name$)
$��
$�
$�
$�
%� �load(name$)
%� loaded% �
%s   �error_message("The file '"+$filename%+"' is still open and must be closed before a new file can be loaded")
%&�
%0$  �closeawindow(newfile_window%)
%:#  �closeawindow(fields_window%)
%D   current_file_name$ = name$
%N  file% = �(name$)
%X/  � a% = field_des% � field_des% + 2196 � 4
%b    �#file%,!a%
%l  �
%v  � #file%,$password%
%�  � #file%, $filename%
%�"  � #file%, number_of_records%
%�  � #file%, record_size%
%�!  � #file%, number_of_fields%
%�  � #file%, current_rec%
%�
%�  � rec% = 0 � max_fields
%�$     � #file%, field_used%(rec%)
%�  �
%�
%�0  � a% = output_list% � output_list%+496 � 4
%�    � #file%,!a%
%�  �
&
&0  � a% = search_list% � search_list%+196 � 4
&    � #file%,!a%
&   �
&*
&4.  � a% = sort_field% � sort_field%+296 � 4
&>    � #file%,!a%
&H  �
&R
&\   �read_record(current_rec%)
&f$  $rec_number% = �(current_rec%)
&p  loaded% = �
&z   �extract_field_description
&�  �create_display_icons
&�  �password_check
&�0  � � inhibit% �open_window(display_window%)
&��
&��
&�
&�
&�� �create_display_icons
&�;� change validation string to match the type definition
&�� d%, f%,l%,w%
&�#� f% = 0 � number_of_fields% -1
&�wdisplay_icon%(f%+number_of_fields%)=�icon(display_window%,50,-300-f%*60,300,48,&7000511,"",field_des%+100*f%,-1,20)
&�Dl% = �(f$(f%,2))       : � set length of box to a suitable value
'w% = l%*16 +48
'� w%>400 � w%=400
'ldisplay_icon%(f%) = �icon(display_window%,400,-300-f%*60,w%,48,&700F535,"",display_data%+300*f%,-1,l%+1)
'$�
'.�
'8
'B� �destroy_display_icons
'L*� f% = 2*number_of_fields% -1 � 0 � -1
'V  � display_icon%(f%) > 0 �
'`!    !block% = display_window%
'j$    block%!4 = display_icon%(f%)
't#    È™"Wimp_DeleteIcon",,block%
'~  �
'��
'��
'�
'� 
'�
'�� �environment
'�ș "OS_GetEnv" � c$
'�c$=�c$,�c$-20)
'�ȕ  �c$,1) <>" " � �c$ <>0
'�  c$=�c$,�c$-1)
'��
'�� c$ = " " � c$ =""
(�
(

(� DEF PROCenvironment
(ș "OS_GetEnv" � c$
((p = �c$,"""",�c$,"""")+1)
(2c$=�c$,p+1)
(<ȕ �c$,1)=" "
(F  c$=�c$,2)
(P�
(Z
(d�
(n 
(x
(�
(� 
(�
(�
(�
(�� �ackload(b)
(�b!12=b!8
(�b!16 = 4
(�!b = 64
(�!ș"Wimp_SendMessage",17,b,b!4
(��
(�
(�� �dataload(b)
)� b!40 = &778 �
)  �load(�get_name(b+44))
)  �ackload(b)
)"�
),�
)6
)@
)J
)T
)^
)h
)r� �extract_record_data
)|D� This takes the data from the icons and puts them into an array
)�� f%
)�"� f% = 0 � number_of_fields%-1
)�  p% =display_data%+f%*300
)�$  current_field_value$(f%) = $p%
)��
)��
)� 
)�� �clear_record
)�� f%
)�"� f% = 0 � number_of_fields%-1
)�  p% =display_data%+f%*300
)�  $p% = ""
)��
*�
*
*
*&� �date(date$)
*09  =�(�date$,2))+100*�(�date$,4,2))+10000*�(�date$,2))
*:
*D
*N
*X#� �valid_min(value$,type$,min$)
*b	� ok%
*lok% = �
*v � � min$ >0 � � value$ > 0 �
*�Ȏ  type$ �
*�+  � "t","T" : � value$ < min$ � ok% = �
*�1  � "N","n" : � �(value$) < �(min$) � ok% = �
*�9  � "D","d" : � �date(value$) < �date(min$) � ok% = �
*��
*��
*�=ok%
*�
*�#� �valid_max(value$,type$,max$)
*�	� ok%
*�ok% = �
*� � � max$ >0 � � value$ > 0 �
*�Ȏ  type$ �
++  � "t","T" : � value$ > max$ � ok% = �
+1  � "N","n" : � �(value$) > �(max$) � ok% = �
+9  � "D","d" : � �date(value$) > �date(max$) � ok% = �
+ �
+*�
+4=ok%
+>
+H%� �valid_list(value$,type$,list$)
+R	� ok%
+\ok% = �
+f� � list$ >0 �
+p$  � �list$,value$) = 0 � ok% = �
+z�
+�=ok%
+�
+�
+�� �valid_record
+�ok% = �
+�f% = -1
+�ȕ ok% � f% < max_fields
+�  f%+=1
+�  � field_used%(f%) �
+�W     � (f$(f%,1) = "d" � f$(f%,1) ="D") � � �valid_date(current_field_value$(f%)) �
+�       ok% = �
+�?       �error_message("'"+f$(f%,0)+"' has an invalid date")
+�
     �
,E     � � �valid_min(current_field_value$(f%),f$(f%,1),f$(f%,4)) �
,       ok%=�
,I       �error_message("'"+f$(f%,0)+"' has a value which is too low" )
,$
     �
,.E     � � �valid_max(current_field_value$(f%),f$(f%,1),f$(f%,5)) �
,8       ok%=�
,BJ       �error_message("'"+f$(f%,0)+"' has a value which is too high" )
,L
     �
,VF     � � �valid_list(current_field_value$(f%),f$(f%,1),f$(f%,6)) �
,`       ok%=�
,jN     �error_message("'"+f$(f%,0)+"' has a value which is not in the list")
,t
     �
,~>       � f$(f%,1) = "N" � f$(f%,1)="n" � �(f$(f%,3)) > 0 �
,�           A% = @%
,�/           @% =&0102000A + �(f$(f%,3))*&100
,�/           � �current_field_value$(f%) >0 �
,�J             current_field_value$(f%) = �(�(current_field_value$(f%)))
,�           �
,�           @%=A%
,�4           � �current_field_value$(f%),1) ="." �
,�E             current_field_value$(f%)= �current_field_value$(f%))
,�           �
,�
     �
,�	    �
,�
     �
-  �
-
	    �
-
     �
-�
-(=ok%
-2
-<� �record_space
-F� total%
-Ptotal% = 0
-Z� f% = 0 � max_fields
-d1  total% = total% + �current_field_value$(f%)
-n�
-x=total%
-�
-�
-�� �next_record
-��extract_record_data
-�� �valid_record �
-�D � �(�record_space = 0 � �($rec_number%) = number_of_records%) �
-�$  �write_record(�($rec_number%))
-�)  $rec_number% = �(�($rec_number%)+1)
-�.  � �($rec_number%) > number_of_records% �
-�     number_of_records%+=1
-�     �clear_record
-�  �
-�&     �read_record(�($rec_number%))
.  �
. �
.�
."�update_display
.,�
.6
.@� �previous_record
.J�extract_record_data
.T� �valid_record �
.^$  �write_record(�($rec_number%))
.h  � �($rec_number%) > 1 �
.r)  $rec_number% = �(�($rec_number%)-1)
.|#  �read_record(�($rec_number%))
.�  �
.�
    �7
.�  �
.��
.��update_display
.��
.�
.�� �start
.��extract_record_data
.�� �valid_record �
.�$  �write_record(�($rec_number%))
.�  � �($rec_number%) > 1 �
.�  $rec_number% = �(1)
/#  �read_record(�($rec_number%))
/  �
/
    �7
/&  �
/0�
/:�update_display
/D�
/N
/X
/b
/l
/v� �end_of_file
/��extract_record_data
/�� �valid_record �
/�$  �write_record(�($rec_number%))
/�/  � �($rec_number%)  < number_of_records% �
/�+  $rec_number% = �( number_of_records%)
/�#  �read_record(�($rec_number%))
/�  �
/�
    �7
/�  �
/��
/��update_display
/��
/�
0� �update_display
0:   È™"Wimp_ForceRedraw",display_window%,0,-1000,1000,0
0(   È™"Wimp_GetCaretPosition",,caret%
0    window% = caret%!0
0*   icon%   = caret%!4
04   new_pos% = icon%
0>   �set_caret
0H�
0R
0\
0f
0p� �read_record(position%)
0z� p%, pointer%, f%
0�current_field_value$() = ""
0�*pointer% = 5000+position%*record_size%
0��#file% = pointer%
0�bad_field% = �
0�� �
0�
f% = 0
0�0ȕ f% <(number_of_fields%  )  � � bad_field%
0�  � � � bad_field% = �
0�  � � bad_field% �
0�*    � #file%, current_field_value$(f%)
0�     p% =display_data%+f%*300
0�%    $p% =current_field_value$(f%)
0�    f% +=1
1  �
1�
1� �
1$�
1.
18
1B� �write_record(position%)
1L� p%, pointer%
1V*pointer% = 5000+position%*record_size%
1`�#file% = pointer%
1j"� f% = 0 � number_of_fields%-1
1t' � #file%, current_field_value$(f%)
1~�
1��
1�
1�
1�� �close_down_file
1�� file% <> 0 �
1�  �#file% = 0
1�  number_of_fields% = 0
1�  � rec% = 0 � max_fields
1�  � �(f$(rec%,0)) > 0 �
1�     number_of_fields% +=1
1�  �
1�  �
2  � �field_length_ok �
2
1    � a% = field_des% � field_des% + 2196 � 4
2      �#file%,!a%
2	    �
2(    � #file%,$password%
22    � #file%, $filename%
2<$    � #file%, number_of_records%
2F    � #file%, record_size%
2P#    � #file%, number_of_fields%
2Z!    � #file%, �($rec_number%)
2d    � rec% = 0 � max_fields
2n%      � #file%, field_used%(rec%)
2x	    �
2�
2�2    � a% = output_list% � output_list%+496 � 4
2�        � #file%,!a%
2�	    �
2�
2�2    � a% = search_list% � search_list%+196 � 4
2�       � #file%,!a%
2�	    �
2�
2�0    � a% = sort_field% � sort_field%+296 � 4
2�       � #file%,!a%
2�	    �
2�    �extract_record_data
3&    �write_record(�($rec_number%))
3    � #file%
3    file% = 0
3"    loaded% = �
3,    inhibit% = �
36&    �closeawindow(display_window%)
3@#    �closeawindow(sort_window%)
3J%    �closeawindow(output_window%)
3T%    �closeawindow(fields_window%)
3^'    �closeawindow(password_window%)
3h%    �closeawindow(screen_window%)
3r#    �closeawindow(save_window%)
3|
3�    �destroy_display_icons
3�  �
3��    �error_message("The field descriptor has been changed and is now too long. Either reduce the number of fields or reduce their length")
3�    quit% = �
3�  �
3��
3��
3�
3�� �field_length_ok
3��extract_field_description
3�total% = 0
3�control% = 0
3�� f% = 0 � max_fields
4$   total% = total% + �(f$(f%,2))
4&   � �(f$(f%,0)) > 0 � control%+=2
4�
4&(� total% > record_size% - control% �
40=�
4:�
4D=�
4N
4X
4b� �password_check
4l  � $password% <> "" �
4v    $in_password% = ""
4�&    �open_window(password_window%)
4�    inhibit% = �
4�  �
4��
4�
4�
4�
4�� �password
4�%  �closeawindow(password_window%)
4�,  � �$password%,4) = �$in_password%,4) �
4�    inhibit% = �
4�%    �open_window(display_window%)
4�  �
5:    �error_message("Incorrect password. File closing")
5    �close_down_file
5  �
5 �
5*
54
5>� �upper(text$)
5H� result$,i%,c$
5Rresult$=""
5\� i% = 1 � �text$
5f c$=�text$,i%,1)
5p* � c$>="a" � c$<="z" � c$=�(�(c$)�&DF)
5z result$=result$+c$
5��
5�=result$
5�
5�#� �replace(object$,target$,by$)
5�� start%, position%
5�start% = �object$,target$)
5�
È• start%
5�.position% = �(object$)-�(target$)-start%+1
5�8object$ = �object$,start%-1)+by$+�object$,position%)
5�,start% = �object$,target$,start%+�(by$))
5��
5�=object$
5�
6� �output_upper(text$)
6� result$,i%,c$
6quote% = �
6$result$=""
6.� i% = 1 � �text$
68 c$=�text$,i%,1)
6B# � c$ = �34 � quote% = � quote%
6L � c$="," � c$ = "+"
6V= � c$=";" � i% < �text$ � i% > 1 � c$="+"+�34+" "+�34+"+"
6`   � � quote% �
6j-    � c$>="a" � c$<="z" � c$=�(�(c$)�&DF)
6t   �
6~ result$=result$+c$
6��
6�=result$
6�
6�
6�� �extract_output_list
6�� list% = 0 � 5
6�*  pointer% = output_list% + list% * 70
6�%  output_list$(list%) = $pointer%
6�>  output_list$(list%) = �output_upper(output_list$(list%))
6��
6�� f% = 0 � max_fields
6�  � �(f$(f%,0)) >0 �
7   � list% = 0 � 5
7
$   � � output_list$(list%) > 0 �
7o     output_list$(list%) = �replace(output_list$(list%),�upper(f$(f%,0)),"current_field_value$("+�(f%)+")")
7   �
7(   �
72  �
7<�
7F� list% = 0 � 5
7P� �output_list$(list%)>0 �
7Z
   � �
7d%   � � � : � � :�output_error : �
7n&   � PRINTEVAL(output_list$(list%)
7x
   � �
7��
7��
7��
7�
7�
7�
7�� �output_error
7�  Ȏ � �
7�T  � 9 : �error_message("Output line "+�(list%+1)+" contains an unmatched quote")
7�b  � 26 : �error_message("Output line "+�(list%+1)+" contains a reference to an unknown field")
7�@   : �error_message("Looks like some other error at "+�(�))
7�  �
7��
8
8�
8
8"
8,
86� �create_search_string
8@$  search_string$ = $search_list%
8J  � case_sens% �
8T6     search_string$ =�output_upper(search_string$)
8^  �
8h/     search_string$ =�upper(search_string$)
8r  �
8|� f% = 0 � max_fields
8�  � �(f$(f%,0)) >0 �
8�     Ȏ f$(f%,1) �
8�p     � "t","T" : search_string$= �replace(search_string$,�upper(f$(f%,0)),"current_field_value$("+�(f%)+")")
8�s     � "n","N" : search_string$= �replace(search_string$,�upper(f$(f%,0)),"VALcurrent_field_value$("+�(f%)+")")
8�!     � "D","d" : �insert_date
8�
     �
8�  �
8��
8�� PRINT search_string$
8� � PRINT EVAL(search_string$)
8��
8�
8�� �insert_date
9� l$,r$,position%
91position% = �search_string$,�upper(f$(f%,0)))
9È• position% > 0
9&(  position% = position% + � f$(f%,0)
90n  ȕ (�search_string$,position%,1) <"0" � �search_string$,position%,1) >"1") � position% < �search_string$
9:!     position% = position% +1
9D  �
9N�  search_string$ = �search_string$,position%-1)+"FNdate("+�34+�search_string$,position%,8)+�34+")"+�search_string$,�search_string$-position%-8)
9X#l$ = �search_string$,position%)
9b5r$ = �search_string$,�(search_string$)-position%)
9lOl$= �replace(l$,�upper(f$(f%,0)),"FNdate(current_field_value$("+�(f%)+"))")
9vsearch_string$ = l$ + r$
9�1position% = �search_string$,�upper(f$(f%,0)))
9��
9��
9�
9�
9�
9� 
9�
9�� �valid_search_criteria
9�� total%, ok%, list%, d
9�ok% = �
9�� � search_string$ = 0 �
9�U   �error_message("A search string must be entered. Use ALL to list all records")
:	ok%=�
:�
:total% = 0
:    � list% = 0 � 5
:*2     total% = total% + � (output_list$(list%))
:4   �
:>� total% = 0 �
:H	ok%=�
:RT   �error_message("At least one of the output lines must contain a field name.")
:\�
:f� �
:pN� � � ok% = � :�error_message("The search string contains a syntax error")
:z� ok% � d=�(search_string$)
:�� �
:�=ok%
:� 
:�
� �screen
:�error% = �
:��extract_record_data
:�� �valid_record �
:�?  �write_record(�($rec_number%)) : � save the latest record
:�  �extract_output_list
:�  �create_search_string
:�   � �valid_search_criteria �
:�  � list% = 0 � 5
:�,    pointer% = output_display%+list%*300
;    $pointer% = ""
;  �
;"  �open_window(screen_window%)
;$  rec% = 1
;.  match% = 0
;8  $output_rec% = �rec%
;B  $matches% = �match%
;L7  È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
;V  escape% = �
;`  �poll(0)
;j/  ȕ rec% <= number_of_records% � � escape%
;t    �read_record(rec%)
;~-    � � case_sens% � �convert_record_case
;�    � �(search_string$) �
;�>    �read_record(rec%) : � because the case may be changed
;�    � tabulate% � �tabulate
;�      match% +=1
;�      $output_rec% = �rec%
;�      $matches% = �match%
;�       � list% = 0 � 5
;�0        pointer% = output_display%+list%*300
;�)        � �(output_list$(list%)) >0 �
;�          �do_list
;�
        �
;�          $pointer% = ""
<         �
<
       �
<;      È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
<	    �
<(      $output_rec% = �rec%
<2=      È™"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
<<	    �
<F    rec% +=1
<P    �poll(0)
<Z  �
<d@  �read_record(�($rec_number%)) : � reload the latest record
<n  � � error% �
<x  � escape%  �
<�j      �error_message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
<�	    �
<�R      �error_message("Search complete. "+�(match%)+" matches have been found")
<�  �
<�  �
<�  �
<��
<��
<�
<�
<�� �printer
<�escape% = �
<�� �printer_on �
=�extract_record_data
=� �valid_record �
=?  �write_record(�($rec_number%)) : � save the latest record
="  �extract_output_list
=,  �create_search_string
=6   � �valid_search_criteria �
=@  � list% = 0 � 5
=J,    pointer% = output_display%+list%*300
=T    $pointer% = ""
=^  �
=h"  �open_window(screen_window%)
=r  rec% = 1
=|  match% = 0
=�  $output_rec% = �rec%
=�  $matches% = �match%
=�7  ș"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
=�  escape% = �
=�  �poll(0)
=�/  ȕ rec% <= number_of_records% � � escape%
=�    �read_record(rec%)
=�-    � � case_sens% � �convert_record_case
=�    � �(search_string$) �
=�>    �read_record(rec%) : � because the case may be changed
=�    � tabulate% � �tabulate
=�      match% +=1
=�      $output_rec% = �rec%
>      $matches% = �match%
>       � list% = 0 � 5
>0        pointer% = output_display%+list%*300
>&)        � �(output_list$(list%)) >0 �
>0          �do_list
>:          �print($pointer%)
>D
        �
>N          $pointer% = ""
>X
        �
>b       �
>l;      È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
>v	    �
>�      $output_rec% = �rec%
>�=      ș"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
>�	    �
>�    rec% +=1
>�    �poll(0)
>�  �
>�@  �read_record(�($rec_number%)) : � reload the latest record
>�  � � error% �
>�  � escape%  �
>�j      �error_message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
>�	    �
>�R      �error_message("Search complete. "+�(match%)+" matches have been found")
>�  �
?  �
?  �
?�
? �
?*�
?4
?>
?H� �do_list
?R
   � �
?\   � � � error% =�
?f   � � error% �
?p-       $pointer% = �(output_list$(list%))
?z   �
?�&     �closeawindow(screen_window%)
?�_     �error_message("Line "+�(list%+1)+" contains an unknown field name or a syntax error")
?�     escape% = �
?�   �
?�
   � �
?��
?�
?� 
?�
?�
?�
?�� �file_output
?�   �open_window(save_window%)
@  window% = save_window%
@  new_pos% = 2
@  �set_caret
@$�
@. 
@8 
@B� �print(text$)
@L�2
@V� i%= 1 � �text$
@`  �1,�(�text$,i%,1))
@j�
@t�1,13,1,10
@~�3
@��
@�
@�
@�
@�� �printer_on
@��7
@�� 2,1,65,1,127,3
@�� �(-4) >= 1023 �
@�=�
@��
@�A�error_message("Printer is not responding. Output cancelled")
@�=�
A�
A

A
A� �case_sens_toggle
A(case_sens% = � case_sens%
A2�
A<
AF
AP� �crlf_toggle
AZcrlf% = � crlf%
Ad�
An
Ax� �tab_toggle
A�tabulate% = � tabulate%
A��
A�
A�
A�� �convert_record_case
A�� f%
A� � f% = 0 � number_of_fields%
A�A  current_field_value$(f%) = �upper(current_field_value$(f%))
A��
A��
A�
A�
A�� �start_output_drag
B  � wex%,wey%
B  � (button% � &50) <> 0 �
B  !block% = save_window%
B"%  È™"Wimp_GetWindowState",,block%
B,!  wex% = block%!4 - block%!20
B6"  wey% = block%!16 - block%!24
B@0  block%!4 = 3 : � icon handle for drag icon
BJ#  È™"Wimp_GetIconState",,block%
BT  !block% = save_window%
B^  block%!4 = 5
Bh  block%!8 = block%!8 +wex%
Br!  block%!12 = block%!12 +wey%
B|!  block%!16 = block%!16 +wex%
B�!  block%!20 = block%!20 +wey%
B�  block%!24 = 0
B�  block%!28 = 0
B�  block%!32 = &7FFFFFFF
B�  block%!36 = &7FFFFFFF
B�  ș"Wimp_DragBox",,block%
B�  �
B��
B�
B�
B�� �start_disk_list
B�#ș"Wimp_GetPointerInfo",,block%
B�block%!20 = 64
Cblock%!32 = 0
Cblock%!36 = 1
Cblock%!40 = block%!12
C&block%!44 = block%!16
C0block%!48 = !block%
C:block%!52 = block%!4
CD*block%!56 = 10000 : � size of the file
CN/block%!60 = &FFF  : � file type of the file
CX*$(block%+64) = �leaf($text_file_name%)
Cb-?(block%+65+��leaf($text_file_name%)) = 0
Cl9È™"Wimp_SendMessage",17,block%+20,block%!12,block%!16
Cv�
C�
C�
C�
C� � �produce_output(filename$)
C�error% = �
C��extract_record_data
C�0� �valid_record � �overwrite_ok(filename$) �
C�?  �write_record(�($rec_number%)) : � save the latest record
C�  �extract_output_list
C�  �create_search_string
C�   � �valid_search_criteria �
C�  � list% = 0 � 5
C�,    pointer% = output_display%+list%*300
D    $pointer% = ""
D  �
D"  �open_window(screen_window%)
D (  output_file_handle% = �(filename$)
D*  rec% = 1
D4  match% = 0
D>  $output_rec% = �rec%
DH  $matches% = �match%
DR7  È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
D\  escape% = �
Df  �poll(0)
Dp/  ȕ rec% <= number_of_records% � � escape%
Dz    �read_record(rec%)
D�-    � � case_sens% � �convert_record_case
D�    � �(search_string$) �
D�>    �read_record(rec%) : � because the case may be changed
D�    � tabulate% � �tabulate
D�      match% +=1
D�      $output_rec% = �rec%
D�      $matches% = �match%
D�        � list% = 0 � 5
D�0        pointer% = output_display%+list%*300
D�)        � �(output_list$(list%)) >0 �
D�          �do_list
D�)        �print_to_the_disk($pointer%)
D�
        �
E          $pointer% = ""
E
        �
E      �
E$;      È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
E.	    �
E8      $output_rec% = �rec%
EB=      È™"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
EL	    �
EV    rec% +=1
E`    �poll(0)
Ej  �
Et@  �read_record(�($rec_number%)) : � reload the latest record
E~  � � error% �
E�  � escape%  �
E�j      �error_message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
E�	    �
E�R      �error_message("Search complete. "+�(match%)+" matches have been found")
E�  �
E�  �
E�  �# output_file_handle%
E�%  �("settype "+filename$+" text")
E�  �
E�!  �closeawindow(save_window%)
E��
E��
F
F

F� �print_to_the_disk(text$)
F� �text$ > 0 �
F(� i%= 1 � �text$
F2+  �#output_file_handle%,�(�text$,i%,1))
F<�
FF�
FP)  � crlf% � � #output_file_handle%,13
FZ  � #output_file_handle%,10
Fd�
Fn
Fx
F�� �quick_save
F�$  � �$text_file_name%,".") = 0 �
F�G    �error_message("To save, drag the icon to a directory viewer.")
F�  �
F�)    �produce_output($text_file_name%)
F�  �
F��
F�
F�
F�
F�� �overwrite_ok(filename$)
F�� name$, type%
F�name$ = filename$ + �0
G%ș"OS_File",5,name$,,,,,0 � type%
GȎ type% �
G  � 0 : = �
G"  � 1 : result% = �cancel_message("A file of this name exists. Click on OK to replace it. Click on CANCEL to abort search")
G,           � result% = 1 �
G6              = �
G@           �
GJ              = �
GT           �
G^:  � 2 : �error_message("This is a directory name"):= �
Gh�
Gr
G|� �file_size
G�� r0,r1,r2
G�"ș"OS_Args",2,file% � r0,r1,r2
G�=r2
G�
G�� �delete_record
G�� present%
G�� number_of_records% = 1 �
G�Q �error_message("The file contains only one record. This can not be deleted")
G��
G�   present% = �($rec_number%)
G�'  � present% = number_of_records% �
G�/    number_of_records%=number_of_records%-1
G�,    $rec_number% = �(number_of_records%)
H%    �read_record(�($rec_number%))
H    �update_display
H  �
H&    proceed% = �
H0/    � number_of_records% - present% < 500 �
H:       proceed% = �
HD	    �
HNS      � �cancel_message("This may take some time. Select OK to continue") = 1 �
HX       proceed% = �
Hb	    �
Hl	    �
Hv    � proceed% �
H�    �glass(�)
H�.    total% = number_of_records% - present%
H� 
H�    done% = 0
H�/    � i% = present% � number_of_records% -1
H�       �read_record(i%+1)
H�       �write_record(i%)
H�7       ș"Hourglass_Percentage", done%/total% * 100
H�       done% +=1
H�	    �
H�    �glass(�)
H�/    number_of_records%=number_of_records%-1
H�    �read_record(present%)
I    �update_display
I	    �
I�
I �
I*�
I4
I>� �tabulate
IH� f%
IR � f% = 0 � number_of_fields%
I\G  current_field_value$(f%)=current_field_value$(f%)+Ļf$(f%,2)," ")
IfD  current_field_value$(f%)=� current_field_value$(f%),�f$(f%,2))
Ip�
Iz�
I� 
I�
I�
I�� �sort
I�
� memory%
I�memory_sort% = �
I�� �extract_sort_condition �
I�  �extract_record_data
I�$  �write_record(�($rec_number%))
I�  size% = �file_size + 5000
I�
I�	  � �
I�  � � �  memory_sort% = �
J  � memory_sort% �
J0     ș"OS_Module",6,,,size% � r0,r1,memory%
J     � �
J$         �load_file_to_memory
J.
J8     �memory_sort
JB
JL"        �save_file_from_memory
JV!     È™"OS_Module",7,,memory%
J`  �
Jj     � �
Jt     �7
J~     �discsort
J�  �
J�#  �read_record(�($rec_number%))
J�  �update_display
J��
J��
J�
J�
J�� �memory_sort
J�
�glass(�)
J�max = number_of_records%
J�� current = 1 � max-1
J�%   �recall_from_memory_a(current)
KD   highest = current               :� record_b is highest so far
K
%   �recall_from_memory_b(current)
K   � i = current +1 � max
K!     �recall_from_memory_a(i)
K(     � �compare �
K2       highest = i
K<)       �recall_from_memory_b(highest)
KF
     �
KP   �
KZ%   �recall_from_memory_a(current)
Kd"   �store_in_memory_a(highest)
Kn"   �store_in_memory_b(current)
Kx#   � SWAP r(current),r(highest)
K�2   ș"Hourglass_Percentage", current/max * 100
K�   �poll(0)
K��
K�
�glass(�)
K��
K�
K�
K�
K�� �discsort
K�max = number_of_records%
K�
�glass(�)
K�� current = 1 � max-1
K�   �read_record_a(current)
LD   highest = current               :� record_b is highest so far
L   �read_record_b(current)
L   � i = current +1 � max
L"     �read_record_a(i)
L,     � �compare �
L6       highest = i
L@"       �read_record_b(highest)
LJ
     �
LT   �
L^   �read_record_a(current)
Lh   �write_record_a(highest)
Lr   �write_record_b(current)
L|#   � SWAP r(current),r(highest)
L�2   ș"Hourglass_Percentage", current/max * 100
L�   �poll(0)
L��
L�
�glass(�)
L��
L�
L� 
L�
L�
L�
L� 
L�
L�
M
M� �read_record_a(position%)
M�  pointer%, f%
M&record_a$()=""
M0*pointer% = 5000+position%*record_size%
M:�#file% = pointer%
MDbad_field% = �
MN� �
MX
f% = 0
Mb0ȕ f% <(number_of_fields%  )  � � bad_field%
Ml  � � � bad_field% = �
Mv  � � bad_field% �
M�    � #file%, record_a$(f%)
M�    f% +=1
M�  �
M��
M�� �
M��
M�
M�
M� � �write_record_a(position%)
M�� pointer%
M�*pointer% = 5000+position%*record_size%
M��#file% = pointer%
M�"� f% = 0 � number_of_fields%-1
N � #file%, record_a$(f%)
N�
N�
N 
N*� �read_record_b(position%)
N4�  pointer%, f%
N>record_b$() = ""
NH*pointer% = 5000+position%*record_size%
NR�#file% = pointer%
N\bad_field% = �
Nf� �
Np
f% = 0
Nz0ȕ f% <(number_of_fields%  )  � � bad_field%
N�  � � � bad_field% = �
N�  � � bad_field% �
N�    � #file%, record_b$(f%)
N�    f% +=1
N�  �
N��
N�� �
N��
N�
N�
N� � �write_record_b(position%)
N�� pointer%
N�*pointer% = 5000+position%*record_size%
O�#file% = pointer%
O"� f% = 0 � number_of_fields%-1
O � #file%, record_b$(f%)
O$�
O.�
O8
OB
OL
OV� �extract_sort_condition
O`� a%, left$, right$, f%
Ojok% = �
Ot� a% = 0 � 5
O~3  sort_line$(a%) = �upper($(sort_field%+50*a%))
O�%  pointer% = sort_field%+50*a%+22
O�  Ȏ $pointer% �
O�,   � "A","a" :  sort_operator$(a%) = "<"
O�,   � "D","d" :  sort_operator$(a%) = ">"
O�   
O�$     sort_operator$(a%) = "TRUE"
O�   �
O�   � � sort_line$(a%) >0 �
O�     � � $pointer% = 0 �
O�u        �error_message("Line "+�(a%+1)+" has a field name but the direction of the sort has not been specified.")
O�        ok% = �
O�	    �
P       f% = 0
P
I       ȕ sort_line$(a%) <> �upper(f$(f%,0)) � f% < number_of_fields%
P         f%+=1
P       �
P(1       � sort_line$(a%) <> �upper(f$(f%,0)) �
P2n        �error_message("Line "+�(a%+1)+" has a field called "+sort_line$(a%)+" this field does not exist")
P<        ok% = �
PF       �
PP!       left$ = sort_line$(a%)
PZ"       right$ = sort_line$(a%)
Pd       Ȏ f$(f%,1) �
Pn;       � "D","d" : left$ = "FNdate(record_a$("+�f%+"))"
Px>                      right$= "FNdate(record_b$("+�f%+"))"
P�8       � "N","n" : left$ = "VAL(record_a$("+�f%+"))"
P�;                    : right$= "VAL(record_b$("+�f%+"))"
P�*       � "T","t" : � sort_case_sens% �
P�9                         left$ = "record_a$("+�f%+")"
P�9                         right$= "record_b$("+�f%+")"
P�                      �
P�B                         left$ = "FNupper(record_a$("+�f%+"))"
P�B                         right$= "FNupper(record_b$("+�f%+"))"
P�                      �
P�       �
P�*       � sort_operator$(a%) = "TRUE" �
P�"         sort_line$(a%)="TRUE"
P�       �
Q=         sort_line$(a%) = left$+sort_operator$(a%)+right$
Q0         sort_line$(a%+6) = left$+"="+right$
Q       �
Q"	    �
Q,   �
Q6     sort_line$(a%)="TRUE"
Q@      sort_line$(a%+6)="TRUE"
QJ	    �
QT�
Q^=ok%
Qh 
Qr
Q|
Q�� �compare
Q�
� result%
Q�result% = �
Q�� �sort_line$(0) �
Q�  result% = �
Q��
Q�  � �sort_line$(6) �
Q� 
Q�    � �sort_line$(1) �
Q�      result% = �
Q�	    �
Q�     � �sort_line$(7) �
Q� 
R       � �sort_line$(2) �
R        result% = �
R       �
R&        � �sort_line$(8) �
R0 
R:           � �sort_line$(3) �
RD            result% = �
RN          �
RX"            � �sort_line$(9) �
Rb 
Rl$              � �sort_line$(4) �
Rv                result% = �
R�              �
R�'                � �sort_line$(10) �
R� 
R�)                   � �sort_line$(5) �
R�$                     result% = �
R�                   �
R�,                     � �sort_line$(11) �
R� 
R�                   �
R�                  �
R�
R�                �
R�              �
S
S            �
S          �
S 
S*       �
S4
     �
S>
SH	    �
SR  �
S\ 
Sf  �
Sp�
Sz=result%
S�
S�� �load_file_to_memory
S�#� rec% = 1 � number_of_records%
S�  �read_record_a(rec%)
S�  �store_in_memory_a(rec%)
S��
S��
S�
S�� �save_file_from_memory
S�#� rec% = 1 � number_of_records%
S�!  �recall_from_memory_a(rec%)
S�  �write_record_a(rec%)
S��
T�
T
T
T$� �store_in_memory_a(rec%)
T.(pointer% = rec%*record_size%+memory%
T8#� f% = 0 � number_of_fields% -1
TB    $pointer% = record_a$(f%)
TL.    pointer% = pointer% + �record_a$(f%)+1
TV�
T`�
Tj
Tt� �store_in_memory_b(rec%)
T~(pointer% = rec%*record_size%+memory%
T�#� f% = 0 � number_of_fields% -1
T�    $pointer% = record_b$(f%)
T�.    pointer% = pointer% + �record_b$(f%)+1
T��
T��
T�
T�
T�!� �recall_from_memory_a(rec%)
T�(pointer% = rec%*record_size%+memory%
T�#� f% = 0 � number_of_fields% -1
T�    record_a$(f%) = $pointer%
T�.    pointer% = pointer% + �record_a$(f%)+1
U�
U
�
U
U!� �recall_from_memory_b(rec%)
U((pointer% = rec%*record_size%+memory%
U2#� f% = 0 � number_of_fields% -1
U<    record_b$(f%) = $pointer%
UF.    pointer% = pointer% + �record_b$(f%)+1
UP�
UZ�
Ud
Un
Ux� �read_virus
U�� f%
U�!f% = �("<CardBase$Dir>.date")
U�� f% > 0 �
U�  virus_set% = �
U�  � virus$(12)
U�  count% = -1
U�  �
U�     count% +=1
U�$     no_more% = �read_virus_line
U�  � count% = 10 � no_more%
U�  � #f%
U�#  � �virus$(0),6) <> ��$,5,6) �
U�     virus_set% = �
V  �
V    no_of_vir_mess% = 0
V    � j% = 1 � 10
V"/     � �virus$(j%) > 0 � no_of_vir_mess%+=1
V,	    �
V6     current_vir_mess% = 1
V@.    � no_of_vir_mess% = 0 � virus_set% = �
VJ  �
VT�
V^  virus_set% = �
Vh�
Vr�
V| 
V�
V�� �read_virus_line
V�  �get_a_line
V�   ȕ �line$,1) ="|" � � �#f%
V�     �get_a_line
V�  �
V�  virus$(count%) = line$
V�= � #f%
V�
V�
V�� �get_a_line
V�  line$ =""
V�  c% = �#f%
W  È• c% <> 10
W    line$ = line$+�c%
W    c% = �#f%
W&  �
W0�
W:
WD 
WN
WX� �show_virus
Wb-�error_message(virus$(current_vir_mess%))
Wlcurrent_vir_mess% +=1
Wv+� current_vir_mess% > no_of_vir_mess% �
W�   current_vir_mess% =1
W��
W��
W�
W�� dummy
W�
W�
W�	dummy
�
00000000  0d 00 0a 1f f4 20 20 20  20 21 72 75 6e 69 6d 61  |.....    !runima|
00000010  67 65 20 66 6f 72 20 43  61 72 64 42 61 73 65 0d  |ge for CardBase.|
00000020  00 14 16 f4 20 20 20 20  54 72 69 61 6c 20 56 65  |....    Trial Ve|
00000030  72 73 69 6f 6e 0d 00 1e  14 f4 20 20 20 20 41 64  |rsion.....    Ad|
00000040  72 69 61 6e 20 4c 61 6e  65 0d 00 28 1c f4 20 20  |rian Lane..(..  |
00000050  20 20 33 20 4c 61 6e 73  64 6f 77 6e 65 20 47 61  |  3 Lansdowne Ga|
00000060  72 64 65 6e 73 0d 00 32  11 f4 20 20 20 20 48 61  |rdens..2..    Ha|
00000070  69 6c 73 68 61 6d 0d 00  3c 11 f4 20 20 20 20 42  |ilsham..<..    B|
00000080  4e 32 37 20 31 4c 51 0d  00 46 04 0d 00 50 04 0d  |N27 1LQ..F...P..|
00000090  00 5a 16 ee 20 85 20 eb  20 30 3a f6 3a f1 9e 3a  |.Z.. . . 0:.:..:|
000000a0  61 3d a5 3a e0 0d 00 64  04 0d 00 6e 10 f2 65 6e  |a=.:...d...n..en|
000000b0  76 69 72 6f 6e 6d 65 6e  74 0d 00 78 04 0d 00 82  |vironment..x....|
000000c0  0e f2 63 6f 6e 73 74 61  6e 74 73 0d 00 8c 09 f2  |..constants.....|
000000d0  76 61 72 73 0d 00 96 0a  f2 73 65 74 75 70 0d 00  |vars.....setup..|
000000e0  a0 15 f2 63 72 65 61 74  65 5f 76 61 72 69 61 62  |...create_variab|
000000f0  6c 65 73 0d 00 aa 10 f2  63 72 65 61 74 65 69 63  |les.....createic|
00000100  6f 6e 73 0d 00 b4 0f f2  72 65 61 64 5f 76 69 72  |ons.....read_vir|
00000110  75 73 0d 00 be 18 e7 20  63 24 3c 3e 22 22 20 8c  |us..... c$<>"" .|
00000120  20 f2 6c 6f 61 64 28 63  24 29 0d 00 c8 0e ee 20  | .load(c$)..... |
00000130  85 20 f2 65 72 72 6f 72  0d 00 d2 05 f5 0d 00 dc  |. .error........|
00000140  0e 20 20 f2 70 6f 6c 6c  28 31 29 0d 00 e6 0a fd  |.  .poll(1).....|
00000150  20 71 75 69 74 0d 00 f0  16 20 20 f2 63 6c 6f 73  | quit....  .clos|
00000160  65 5f 64 6f 77 6e 5f 66  69 6c 65 0d 00 fa 19 20  |e_down_file.... |
00000170  20 c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 44  | .. "Wimp_CloseD|
00000180  6f 77 6e 22 0d 01 04 05  e0 0d 01 0e 04 0d 01 18  |own"............|
00000190  12 dd 20 f2 70 6f 6c 6c  28 6d 61 73 6b 25 29 0d  |.. .poll(mask%).|
000001a0  01 22 21 20 20 c8 99 20  50 6f 6c 6c 25 2c 6d 61  |."!  .. Poll%,ma|
000001b0  73 6b 25 2c 71 25 20 b8  20 72 65 61 73 6f 6e 25  |sk%,q% . reason%|
000001c0  0d 01 2c 12 20 20 c8 8e  20 72 65 61 73 6f 6e 25  |..,.  .. reason%|
000001d0  20 ca 0d 01 36 1e 20 20  c9 20 31 20 3a f2 72 65  | ...6.  . 1 :.re|
000001e0  64 72 61 77 5f 77 69 6e  64 6f 77 28 21 71 25 29  |draw_window(!q%)|
000001f0  0d 01 40 22 20 20 c9 20  32 20 3a c8 99 22 57 69  |..@"  . 2 :.."Wi|
00000200  6d 70 5f 4f 70 65 6e 57  69 6e 64 6f 77 22 2c 2c  |mp_OpenWindow",,|
00000210  71 25 0d 01 4a 1d 20 20  c9 20 33 20 3a f2 63 6c  |q%..J.  . 3 :.cl|
00000220  6f 73 65 61 77 69 6e 64  6f 77 28 21 71 25 29 0d  |oseawindow(!q%).|
00000230  01 54 17 20 20 c9 20 36  20 3a f2 62 75 74 74 6f  |.T.  . 6 :.butto|
00000240  6e 73 28 71 25 29 0d 01  5e 17 20 20 c9 20 37 20  |ns(q%)..^.  . 7 |
00000250  3a 20 e7 20 6c 6f 61 64  65 64 25 20 8c 0d 01 68  |: . loaded% ...h|
00000260  22 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |"              .|
00000270  73 74 61 72 74 5f 64 69  73 6b 5f 6c 69 73 74 0d  |start_disk_list.|
00000280  01 72 10 20 20 20 20 20  20 20 20 20 20 20 cc 0d  |.r.           ..|
00000290  01 7c 1b 20 20 20 20 20  20 20 20 20 20 20 20 20  |.|.             |
000002a0  20 f2 6e 65 77 5f 73 61  76 65 0d 01 86 10 20 20  | .new_save....  |
000002b0  20 20 20 20 20 20 20 20  20 cd 0d 01 90 16 20 20  |         .....  |
000002c0  c9 20 38 20 3a f2 6b 65  79 28 71 25 21 32 34 29  |. 8 :.key(q%!24)|
000002d0  0d 01 9a 1d 20 20 c9 20  39 20 3a 20 f2 6d 65 6e  |....  . 9 : .men|
000002e0  75 5f 73 65 6c 65 63 74  28 21 71 25 29 0d 01 a4  |u_select(!q%)...|
000002f0  1a 20 20 c9 20 31 37 2c  31 38 3a f2 72 65 63 65  |.  . 17,18:.rece|
00000300  69 76 65 28 71 25 29 0d  01 ae 07 20 20 cb 0d 01  |ive(q%)....  ...|
00000310  b8 05 e1 0d 01 c2 04 0d  01 cc 19 dd 20 f2 6d 65  |............ .me|
00000320  6e 75 5f 73 65 6c 65 63  74 28 69 74 65 6d 25 29  |nu_select(item%)|
00000330  0d 01 d6 0e c8 8e 20 69  74 65 6d 25 20 ca 0d 01  |...... item% ...|
00000340  e0 13 20 20 c9 20 30 20  3a 20 f2 63 72 65 61 74  |..  . 0 : .creat|
00000350  65 0d 01 ea 38 20 20 c9  20 31 20 3a 20 e7 20 ac  |e...8  . 1 : . .|
00000360  20 69 6e 68 69 62 69 74  25 20 8c 20 f2 6f 70 65  | inhibit% . .ope|
00000370  6e 5f 77 69 6e 64 6f 77  28 64 69 73 70 6c 61 79  |n_window(display|
00000380  5f 77 69 6e 64 6f 77 25  29 0d 01 f4 35 20 20 c9  |_window%)...5  .|
00000390  20 32 20 3a 20 e7 20 ac  20 69 6e 68 69 62 69 74  | 2 : . . inhibit|
000003a0  25 20 8c 20 f2 6f 70 65  6e 5f 77 69 6e 64 6f 77  |% . .open_window|
000003b0  28 73 6f 72 74 5f 77 69  6e 64 6f 77 25 29 0d 01  |(sort_window%)..|
000003c0  fe 37 20 20 c9 20 33 20  3a 20 e7 20 ac 20 69 6e  |.7  . 3 : . . in|
000003d0  68 69 62 69 74 25 20 8c  20 f2 6f 70 65 6e 5f 77  |hibit% . .open_w|
000003e0  69 6e 64 6f 77 28 6f 75  74 70 75 74 5f 77 69 6e  |indow(output_win|
000003f0  64 6f 77 25 29 0d 02 08  37 20 20 c9 20 34 20 3a  |dow%)...7  . 4 :|
00000400  20 e7 20 ac 20 69 6e 68  69 62 69 74 25 20 8c 20  | . . inhibit% . |
00000410  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 66 69 65  |.open_window(fie|
00000420  6c 64 73 5f 77 69 6e 64  6f 77 25 29 0d 02 12 1c  |lds_window%)....|
00000430  20 20 c9 20 35 20 3a 20  f2 63 6c 6f 73 65 5f 64  |  . 5 : .close_d|
00000440  6f 77 6e 5f 66 69 6c 65  0d 02 1c 14 20 20 c9 20  |own_file....  . |
00000450  37 20 3a 20 71 75 69 74  20 3d 20 b9 0d 02 26 05  |7 : quit = ...&.|
00000460  cb 0d 02 30 05 e1 0d 02  3a 04 0d 02 44 04 0d 02  |...0....:...D...|
00000470  4e 04 0d 02 58 11 dd 20  f2 62 75 74 74 6f 6e 73  |N...X.. .buttons|
00000480  28 62 29 0d 02 62 1d ea  20 77 69 6e 64 6f 77 25  |(b)..b.. window%|
00000490  2c 20 69 63 6f 6e 25 2c  20 62 75 74 74 6f 6e 25  |, icon%, button%|
000004a0  0d 02 6c 15 20 20 20 77  69 6e 64 6f 77 25 20 3d  |..l.   window% =|
000004b0  20 62 21 31 32 0d 02 76  12 20 20 69 63 6f 6e 25  | b!12..v.  icon%|
000004c0  20 3d 20 62 21 31 36 0d  02 80 13 20 20 62 75 74  | = b!16....  but|
000004d0  74 6f 6e 25 20 3d 20 62  21 38 0d 02 8a 20 20 20  |ton% = b!8...   |
000004e0  e7 20 76 69 72 75 73 5f  73 65 74 25 20 80 20 b3  |. virus_set% . .|
000004f0  28 32 30 29 20 3d 20 31  20 8c 0d 02 94 14 20 20  |(20) = 1 .....  |
00000500  20 20 20 f2 73 68 6f 77  5f 76 69 72 75 73 0d 02  |   .show_virus..|
00000510  9e 07 20 20 cc 0d 02 a8  12 20 20 c8 8e 20 77 69  |..  .....  .. wi|
00000520  6e 64 6f 77 25 20 ca 0d  02 b2 27 20 20 c9 20 2d  |ndow% ....'  . -|
00000530  32 20 20 20 3a 20 e7 20  62 75 74 74 6f 6e 25 20  |2   : . button% |
00000540  3d 32 20 20 8c 20 f2 6d  65 6e 75 28 62 29 0d 02  |=2  . .menu(b)..|
00000550  bc 3e 20 20 c9 20 6e 65  77 66 69 6c 65 5f 77 69  |.>  . newfile_wi|
00000560  6e 64 6f 77 25 20 3a 20  e7 20 28 62 75 74 74 6f  |ndow% : . (butto|
00000570  6e 25 20 80 20 26 35 30  29 20 3c 3e 20 30 20 8c  |n% . &50) <> 0 .|
00000580  20 f2 73 74 61 72 74 5f  64 72 61 67 0d 02 c6 24  | .start_drag...$|
00000590  20 20 c9 20 64 69 73 70  6c 61 79 5f 77 69 6e 64  |  . display_wind|
000005a0  6f 77 25 20 3a 20 c8 8e  20 69 63 6f 6e 25 20 ca  |ow% : .. icon% .|
000005b0  0d 02 d0 2c 20 20 20 20  20 20 20 20 20 20 20 20  |...,            |
000005c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000005d0  c9 20 32 20 3a 20 f2 73  74 61 72 74 0d 02 da 32  |. 2 : .start...2|
000005e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000005f0  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 33 20  |            . 3 |
00000600  3a 20 f2 65 6e 64 5f 6f  66 5f 66 69 6c 65 0d 02  |: .end_of_file..|
00000610  e4 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.6              |
00000620  20 20 20 20 20 20 20 20  20 20 20 20 20 20 c9 20  |              . |
00000630  34 20 3a 20 f2 70 72 65  76 69 6f 75 73 5f 72 65  |4 : .previous_re|
00000640  63 6f 72 64 0d 02 ee 32  20 20 20 20 20 20 20 20  |cord...2        |
00000650  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000660  20 20 20 20 c9 20 35 20  3a 20 f2 6e 65 78 74 5f  |    . 5 : .next_|
00000670  72 65 63 6f 72 64 0d 02  f8 34 20 20 20 20 20 20  |record...4      |
00000680  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000690  20 20 20 20 20 20 c9 20  36 20 3a 20 f2 64 65 6c  |      . 6 : .del|
000006a0  65 74 65 5f 72 65 63 6f  72 64 0d 03 02 1e 20 20  |ete_record....  |
000006b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000006c0  20 20 20 20 20 20 20 cb  0d 03 0c 24 20 20 c9 20  |       ....$  . |
000006d0  6f 75 74 70 75 74 5f 77  69 6e 64 6f 77 25 20 20  |output_window%  |
000006e0  3a 20 c8 8e 20 69 63 6f  6e 25 20 ca 0d 03 16 2f  |: .. icon% ..../|
000006f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000700  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 39 20  |            . 9 |
00000710  20 3a 20 f2 70 72 69 6e  74 65 72 0d 03 20 2e 20  | : .printer.. . |
00000720  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000730  20 20 20 20 20 20 20 20  20 20 20 c9 20 31 30 20  |           . 10 |
00000740  3a 20 f2 73 63 72 65 65  6e 0d 03 2a 33 20 20 20  |: .screen..*3   |
00000750  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000760  20 20 20 20 20 20 20 20  20 c9 20 31 31 20 3a 20  |         . 11 : |
00000770  f2 66 69 6c 65 5f 6f 75  74 70 75 74 0d 03 34 43  |.file_output..4C|
00000780  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000790  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 63 61  |            . ca|
000007a0  73 65 5f 73 65 6e 73 5f  69 63 6f 6e 25 3a f2 63  |se_sens_icon%:.c|
000007b0  61 73 65 5f 73 65 6e 73  5f 74 6f 67 67 6c 65 0d  |ase_sens_toggle.|
000007c0  03 3e 3f 20 20 20 20 20  20 20 20 20 20 20 20 20  |.>?             |
000007d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |               .|
000007e0  20 63 72 5f 69 63 6f 6e  25 20 20 20 20 20 20 20  | cr_icon%       |
000007f0  3a 20 f2 63 72 6c 66 5f  74 6f 67 67 6c 65 0d 03  |: .crlf_toggle..|
00000800  48 3e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |H>              |
00000810  20 20 20 20 20 20 20 20  20 20 20 20 20 20 c9 20  |              . |
00000820  74 61 62 5f 69 63 6f 6e  25 20 20 20 20 20 20 3a  |tab_icon%      :|
00000830  20 f2 74 61 62 5f 74 6f  67 67 6c 65 0d 03 52 1e  | .tab_toggle..R.|
00000840  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000850  20 20 20 20 20 20 20 20  20 cb 0d 03 5c 24 20 20  |         ...\$  |
00000860  c9 20 73 61 76 65 5f 77  69 6e 64 6f 77 25 20 20  |. save_window%  |
00000870  20 20 3a 20 c8 8e 20 69  63 6f 6e 25 20 ca 0d 03  |  : .. icon% ...|
00000880  66 39 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f9              |
00000890  20 20 20 20 20 20 20 20  20 20 20 20 20 20 c9 20  |              . |
000008a0  33 20 20 3a 20 f2 73 74  61 72 74 5f 6f 75 74 70  |3  : .start_outp|
000008b0  75 74 5f 64 72 61 67 0d  03 70 32 20 20 20 20 20  |ut_drag..p2     |
000008c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000008d0  20 20 20 20 20 20 20 c9  20 30 20 20 3a 20 f2 71  |       . 0  : .q|
000008e0  75 69 63 6b 5f 73 61 76  65 0d 03 7a 1e 20 20 20  |uick_save..z.   |
000008f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000900  20 20 20 20 20 20 cb 0d  03 84 34 20 20 c9 20 73  |      ....4  . s|
00000910  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 20 20 20  |creen_window%   |
00000920  3a 20 e7 20 69 63 6f 6e  25 20 3d 20 31 20 8c 20  |: . icon% = 1 . |
00000930  65 73 63 61 70 65 25 20  3d 20 b9 0d 03 8e 25 20  |escape% = ....% |
00000940  20 c9 20 73 6f 72 74 5f  77 69 6e 64 6f 77 25 20  | . sort_window% |
00000950  20 20 20 20 3a 20 c8 8e  20 69 63 6f 6e 25 20 ca  |    : .. icon% .|
00000960  0d 03 98 29 20 20 20 20  20 20 20 20 20 20 20 20  |...)            |
00000970  20 20 20 20 20 20 20 20  20 20 20 20 20 20 c9 20  |              . |
00000980  33 20 3a 20 f2 73 6f 72  74 0d 03 a2 47 20 20 20  |3 : .sort...G   |
00000990  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000009a0  20 20 20 20 20 20 20 c9  20 34 20 3a 20 73 6f 72  |       . 4 : sor|
000009b0  74 5f 63 61 73 65 5f 73  65 6e 73 25 20 3d 20 ac  |t_case_sens% = .|
000009c0  20 73 6f 72 74 5f 63 61  73 65 5f 73 65 6e 73 25  | sort_case_sens%|
000009d0  0d 03 ac 1f 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
000009e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 cb 0d  |              ..|
000009f0  03 b6 07 20 20 cb 0d 03  c0 07 20 20 cd 0d 03 ca  |...  .....  ....|
00000a00  05 e1 0d 03 d4 04 0d 03  de 24 dd 20 a4 72 65 61  |.........$. .rea|
00000a10  64 5f 69 63 6f 6e 5f 74  65 78 74 28 77 69 6e 64  |d_icon_text(wind|
00000a20  6f 77 25 2c 69 63 6f 6e  25 29 0d 03 e8 15 21 62  |ow%,icon%)....!b|
00000a30  6c 6f 63 6b 25 20 3d 20  77 69 6e 64 6f 77 25 0d  |lock% = window%.|
00000a40  03 f2 14 62 6c 6f 63 6b  25 21 34 20 3d 20 69 63  |...block%!4 = ic|
00000a50  6f 6e 25 0d 03 fc 22 c8  99 20 22 57 69 6d 70 5f  |on%...".. "Wimp_|
00000a60  47 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 62  |GetIconState",,b|
00000a70  6c 6f 63 6b 25 0d 04 06  12 3d 20 24 28 62 6c 6f  |lock%....= $(blo|
00000a80  63 6b 25 21 32 38 29 0d  04 10 04 0d 04 1a 04 0d  |ck%!28).........|
00000a90  04 24 04 0d 04 2e 1b dd  20 f2 6f 70 65 6e 5f 77  |.$...... .open_w|
00000aa0  69 6e 64 6f 77 28 68 61  6e 64 6c 65 25 29 0d 04  |indow(handle%)..|
00000ab0  38 16 20 21 62 6c 6f 63  6b 25 20 3d 20 68 61 6e  |8. !block% = han|
00000ac0  64 6c 65 25 0d 04 42 24  20 c8 99 22 57 69 6d 70  |dle%..B$ .."Wimp|
00000ad0  5f 47 65 74 57 69 6e 64  6f 77 53 74 61 74 65 22  |_GetWindowState"|
00000ae0  2c 2c 62 6c 6f 63 6b 25  0d 04 4c 23 20 62 6c 6f  |,,block%..L# blo|
00000af0  63 6b 25 21 32 38 20 3d  20 2d 31 20 3a 20 f4 20  |ck%!28 = -1 : . |
00000b00  6f 70 65 6e 20 6f 6e 20  74 6f 70 0d 04 56 16 20  |open on top..V. |
00000b10  c8 99 20 4f 70 65 6e 57  20 2c 2c 62 6c 6f 63 6b  |.. OpenW ,,block|
00000b20  25 0d 04 60 05 e1 0d 04  6a 04 0d 04 74 04 0d 04  |%..`....j...t...|
00000b30  7e 04 0d 04 88 0d dd 20  f2 6b 65 79 28 6b 29 0d  |~...... .key(k).|
00000b40  04 92 1e ea 20 77 69 6e  64 6f 77 25 2c 20 69 63  |.... window%, ic|
00000b50  6f 6e 25 2c 20 6e 65 77  5f 70 6f 73 25 0d 04 9c  |on%, new_pos%...|
00000b60  1a c8 99 20 22 57 69 6d  70 5f 50 72 6f 63 65 73  |... "Wimp_Proces|
00000b70  73 4b 65 79 22 2c 6b 0d  04 a6 3b e7 20 6b 20 3d  |sKey",k...;. k =|
00000b80  20 31 33 20 20 84 20 6b  20 3d 20 26 31 38 45 20  | 13  . k = &18E |
00000b90  84 20 6b 20 3d 20 26 31  38 46 20 84 20 6b 20 3d  |. k = &18F . k =|
00000ba0  20 26 31 39 44 20 84 20  6b 20 3d 20 26 31 39 45  | &19D . k = &19E|
00000bb0  20 8c 0d 04 b0 28 20 20  20 c8 99 22 57 69 6d 70  | ....(   .."Wimp|
00000bc0  5f 47 65 74 43 61 72 65  74 50 6f 73 69 74 69 6f  |_GetCaretPositio|
00000bd0  6e 22 2c 2c 63 61 72 65  74 25 0d 04 ba 19 20 20  |n",,caret%....  |
00000be0  20 77 69 6e 64 6f 77 25  20 3d 20 63 61 72 65 74  | window% = caret|
00000bf0  25 21 30 0d 04 c4 19 20  20 20 69 63 6f 6e 25 20  |%!0....   icon% |
00000c00  20 20 3d 20 63 61 72 65  74 25 21 34 0d 04 ce 17  |  = caret%!4....|
00000c10  20 20 20 6e 65 77 5f 70  6f 73 25 20 3d 20 69 63  |   new_pos% = ic|
00000c20  6f 6e 25 0d 04 d8 13 20  20 20 c8 8e 20 77 69 6e  |on%....   .. win|
00000c30  64 6f 77 25 20 ca 0d 04  e2 2c 20 20 20 c9 20 6e  |dow% ....,   . n|
00000c40  65 77 66 69 6c 65 5f 77  69 6e 64 6f 77 25 20 3a  |ewfile_window% :|
00000c50  20 e7 20 69 63 6f 6e 25  20 3d 20 6e 66 5f 31 25  | . icon% = nf_1%|
00000c60  20 8c 0d 04 ec 31 20 20  20 20 20 20 20 20 20 20  | ....1          |
00000c70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000c80  20 20 20 6e 65 77 5f 70  6f 73 25 20 3d 20 6e 66  |   new_pos% = nf|
00000c90  5f 32 25 0d 04 f6 20 20  20 20 20 20 20 20 20 20  |_2%...          |
00000ca0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000cb0  20 20 cc 0d 05 00 31 20  20 20 20 20 20 20 20 20  |  ....1         |
00000cc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000cd0  20 20 20 20 6e 65 77 5f  70 6f 73 25 20 3d 20 6e  |    new_pos% = n|
00000ce0  66 5f 31 25 0d 05 0a 20  20 20 20 20 20 20 20 20  |f_1%...         |
00000cf0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000d00  20 20 20 cd 0d 05 14 29  20 20 20 20 20 20 20 20  |   ....)        |
00000d10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000d20  20 20 20 f2 73 65 74 5f  63 61 72 65 74 0d 05 1e  |   .set_caret...|
00000d30  50 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |P               |
00000d40  20 20 20 20 20 20 20 20  20 20 20 20 c8 99 22 57  |            .."W|
00000d50  69 6d 70 5f 46 6f 72 63  65 52 65 64 72 61 77 22  |imp_ForceRedraw"|
00000d60  2c 66 69 65 6c 64 73 5f  77 69 6e 64 6f 77 25 2c  |,fields_window%,|
00000d70  30 2c 2d 31 30 30 2c 31  30 30 30 2c 30 0d 05 28  |0,-100,1000,0..(|
00000d80  2f 20 20 20 20 c9 20 6f  75 74 70 75 74 5f 77 69  |/    . output_wi|
00000d90  6e 64 6f 77 25 20 3a 20  e7 20 6b 20 3d 20 31 33  |ndow% : . k = 13|
00000da0  20 84 20 6b 20 3d 26 31  38 45 20 8c 0d 05 32 3c  | . k =&18E ...2<|
00000db0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000dc0  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 69  |             . i|
00000dd0  63 6f 6e 25 20 3c 20 6f  75 74 70 75 74 5f 69 63  |con% < output_ic|
00000de0  6f 6e 25 28 36 29 20 8c  0d 05 3c 33 20 20 20 20  |on%(6) ...<3    |
00000df0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e00  20 20 20 20 20 20 20 20  20 20 20 6e 65 77 5f 70  |           new_p|
00000e10  6f 73 25 3d 69 63 6f 6e  25 2b 31 0d 05 46 22 20  |os%=icon%+1..F" |
00000e20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e30  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 05 50  |            ...P|
00000e40  3d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |=               |
00000e50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e60  6e 65 77 5f 70 6f 73 25  20 3d 20 6f 75 74 70 75  |new_pos% = outpu|
00000e70  74 5f 69 63 6f 6e 25 28  30 29 0d 05 5a 22 20 20  |t_icon%(0)..Z"  |
00000e80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e90  20 20 20 20 20 20 20 20  20 20 20 cd 0d 05 64 20  |           ...d |
00000ea0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000eb0  20 20 20 20 20 20 20 20  20 20 20 cc 0d 05 6e 3c  |           ...n<|
00000ec0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ed0  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 69  |             . i|
00000ee0  63 6f 6e 25 20 3e 20 6f  75 74 70 75 74 5f 69 63  |con% > output_ic|
00000ef0  6f 6e 25 28 30 29 20 8c  0d 05 78 33 20 20 20 20  |on%(0) ...x3    |
00000f00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000f10  20 20 20 20 20 20 20 20  20 20 20 6e 65 77 5f 70  |           new_p|
00000f20  6f 73 25 3d 69 63 6f 6e  25 2d 31 0d 05 82 22 20  |os%=icon%-1..." |
00000f30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000f40  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 05 8c  |            ....|
00000f50  3d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |=               |
00000f60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000f70  6e 65 77 5f 70 6f 73 25  20 3d 20 6f 75 74 70 75  |new_pos% = outpu|
00000f80  74 5f 69 63 6f 6e 25 28  36 29 0d 05 96 22 20 20  |t_icon%(6)..."  |
00000f90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000fa0  20 20 20 20 20 20 20 20  20 20 20 cd 0d 05 a0 04  |           .....|
00000fb0  0d 05 aa 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
00000fc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
00000fd0  0d 05 b4 29 20 20 20 20  20 20 20 20 20 20 20 20  |...)            |
00000fe0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00000ff0  73 65 74 5f 63 61 72 65  74 0d 05 be 04 0d 05 c8  |set_caret.......|
00001000  27 20 20 20 20 c9 20 73  6f 72 74 5f 77 69 6e 64  |'    . sort_wind|
00001010  6f 77 25 20 20 20 20 3a  20 e7 20 6b 20 3d 20 31  |ow%    : . k = 1|
00001020  33 20 20 8c 0d 05 d2 3b  20 20 20 20 20 20 20 20  |3  ....;        |
00001030  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001040  20 20 20 20 20 e7 20 69  63 6f 6e 25 20 3c 20 73  |     . icon% < s|
00001050  6f 72 74 5f 69 63 6f 6e  25 28 31 31 29 20 8c 0d  |ort_icon%(11) ..|
00001060  05 dc 33 20 20 20 20 20  20 20 20 20 20 20 20 20  |..3             |
00001070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001080  20 20 6e 65 77 5f 70 6f  73 25 3d 69 63 6f 6e 25  |  new_pos%=icon%|
00001090  2b 31 0d 05 e6 22 20 20  20 20 20 20 20 20 20 20  |+1..."          |
000010a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000010b0  20 20 20 cc 0d 05 f0 3b  20 20 20 20 20 20 20 20  |   ....;        |
000010c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000010d0  20 20 20 20 20 20 20 6e  65 77 5f 70 6f 73 25 20  |       new_pos% |
000010e0  3d 20 73 6f 72 74 5f 69  63 6f 6e 25 28 30 29 0d  |= sort_icon%(0).|
000010f0  05 fa 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |.."             |
00001100  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001110  cd 0d 06 04 2b 20 20 20  20 20 20 20 20 20 20 20  |....+           |
00001120  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001130  20 20 f2 73 65 74 5f 63  61 72 65 74 0d 06 0e 20  |  .set_caret... |
00001140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001150  20 20 20 20 20 20 20 20  20 20 20 cd 0d 06 18 2a  |           ....*|
00001160  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001170  20 20 20 20 20 20 20 20  20 20 20 e7 20 6b 20 3d  |           . k =|
00001180  26 31 38 46 20 8c 0d 06  22 3a 20 20 20 20 20 20  |&18F ...":      |
00001190  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000011a0  20 20 20 20 20 20 20 e7  20 69 63 6f 6e 25 20 3e  |       . icon% >|
000011b0  20 73 6f 72 74 5f 69 63  6f 6e 25 28 31 29 20 8c  | sort_icon%(1) .|
000011c0  0d 06 2c 33 20 20 20 20  20 20 20 20 20 20 20 20  |..,3            |
000011d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000011e0  20 20 20 6e 65 77 5f 70  6f 73 25 3d 69 63 6f 6e  |   new_pos%=icon|
000011f0  25 2d 32 0d 06 36 22 20  20 20 20 20 20 20 20 20  |%-2..6"         |
00001200  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001210  20 20 20 20 cc 0d 06 40  3c 20 20 20 20 20 20 20  |    ...@<       |
00001220  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001230  20 20 20 20 20 20 20 20  6e 65 77 5f 70 6f 73 25  |        new_pos%|
00001240  20 3d 20 73 6f 72 74 5f  69 63 6f 6e 25 28 31 31  | = sort_icon%(11|
00001250  29 0d 06 4a 22 20 20 20  20 20 20 20 20 20 20 20  |)..J"           |
00001260  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001270  20 20 cd 0d 06 54 2b 20  20 20 20 20 20 20 20 20  |  ...T+         |
00001280  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001290  20 20 20 20 f2 73 65 74  5f 63 61 72 65 74 0d 06  |    .set_caret..|
000012a0  5e 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |^               |
000012b0  20 20 20 20 20 20 20 20  20 20 20 20 20 cd 0d 06  |             ...|
000012c0  68 2a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |h*              |
000012d0  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 6b  |             . k|
000012e0  20 3d 26 31 38 45 20 8c  0d 06 72 3b 20 20 20 20  | =&18E ...r;    |
000012f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001300  20 20 20 20 20 20 20 20  20 e7 20 69 63 6f 6e 25  |         . icon%|
00001310  20 3c 20 73 6f 72 74 5f  69 63 6f 6e 25 28 31 30  | < sort_icon%(10|
00001320  29 20 8c 0d 06 7c 33 20  20 20 20 20 20 20 20 20  |) ...|3         |
00001330  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001340  20 20 20 20 20 20 6e 65  77 5f 70 6f 73 25 3d 69  |      new_pos%=i|
00001350  63 6f 6e 25 2b 32 0d 06  86 22 20 20 20 20 20 20  |con%+2..."      |
00001360  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001370  20 20 20 20 20 20 20 cc  0d 06 90 3b 20 20 20 20  |       ....;    |
00001380  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001390  20 20 20 20 20 20 20 20  20 20 20 6e 65 77 5f 70  |           new_p|
000013a0  6f 73 25 20 3d 20 73 6f  72 74 5f 69 63 6f 6e 25  |os% = sort_icon%|
000013b0  28 30 29 0d 06 9a 22 20  20 20 20 20 20 20 20 20  |(0)..."         |
000013c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013d0  20 20 20 20 cd 0d 06 a4  2b 20 20 20 20 20 20 20  |    ....+       |
000013e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013f0  20 20 20 20 20 20 f2 73  65 74 5f 63 61 72 65 74  |      .set_caret|
00001400  0d 06 ae 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
00001410  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
00001420  0d 06 b8 30 20 20 20 20  c9 20 66 69 65 6c 64 73  |...0    . fields|
00001430  5f 77 69 6e 64 6f 77 25  20 20 20 3a 20 e7 20 6b  |_window%   : . k|
00001440  3d 20 31 33 20 84 20 6b  3d 20 26 31 39 44 20 8c  |= 13 . k= &19D .|
00001450  0d 06 c2 3e 20 20 20 20  20 20 20 20 20 20 20 20  |...>            |
00001460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001470  20 e7 20 69 63 6f 6e 25  20 3c 20 6c 69 73 74 25  | . icon% < list%|
00001480  28 6d 61 78 5f 66 69 65  6c 64 73 29 20 8c 0d 06  |(max_fields) ...|
00001490  cc 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.3              |
000014a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000014b0  20 6e 65 77 5f 70 6f 73  25 3d 69 63 6f 6e 25 2b  | new_pos%=icon%+|
000014c0  31 0d 06 d6 23 20 20 20  20 20 20 20 20 20 20 20  |1...#           |
000014d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000014e0  20 20 20 cc 0d 06 e0 36  20 20 20 20 20 20 20 20  |   ....6        |
000014f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001500  20 20 20 20 20 20 20 6e  65 77 5f 70 6f 73 25 20  |       new_pos% |
00001510  3d 20 6e 61 6d 65 25 28  30 29 0d 06 ea 23 20 20  |= name%(0)...#  |
00001520  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001530  20 20 20 20 20 20 20 20  20 20 20 20 cd 0d 06 f4  |            ....|
00001540  2c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |,               |
00001550  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00001560  73 65 74 5f 63 61 72 65  74 0d 06 fe 21 20 20 20  |set_caret...!   |
00001570  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001580  20 20 20 20 20 20 20 20  20 cd 0d 07 08 2b 20 20  |         ....+  |
00001590  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000015a0  20 20 20 20 20 20 20 20  20 20 e7 20 6b 20 3d 26  |          . k =&|
000015b0  31 38 46 20 8c 0d 07 12  36 20 20 20 20 20 20 20  |18F ....6       |
000015c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000015d0  20 20 20 20 20 20 e7 20  69 63 6f 6e 25 20 3e 3d  |      . icon% >=|
000015e0  20 6e 61 6d 65 25 28 31  29 20 8c 0d 07 1c 33 20  | name%(1) ....3 |
000015f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001600  20 20 20 20 20 20 20 20  20 20 20 20 20 20 6e 65  |              ne|
00001610  77 5f 70 6f 73 25 3d 69  63 6f 6e 25 2d 37 0d 07  |w_pos%=icon%-7..|
00001620  26 2b 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |&+              |
00001630  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00001640  73 65 74 5f 63 61 72 65  74 0d 07 30 22 20 20 20  |set_caret..0"   |
00001650  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001660  20 20 20 20 20 20 20 20  20 20 cd 0d 07 3a 20 20  |          ...:  |
00001670  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001680  20 20 20 20 20 20 20 20  20 20 cd 0d 07 44 2a 20  |          ...D* |
00001690  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016a0  20 20 20 20 20 20 20 20  20 20 e7 20 6b 20 3d 26  |          . k =&|
000016b0  31 38 45 20 8c 0d 07 4e  3e 20 20 20 20 20 20 20  |18E ...N>       |
000016c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016d0  20 20 20 20 20 20 e7 20  69 63 6f 6e 25 20 3c 20  |      . icon% < |
000016e0  6e 61 6d 65 25 28 6d 61  78 5f 66 69 65 6c 64 73  |name%(max_fields|
000016f0  29 20 8c 0d 07 58 33 20  20 20 20 20 20 20 20 20  |) ...X3         |
00001700  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001710  20 20 20 20 20 20 6e 65  77 5f 70 6f 73 25 3d 69  |      new_pos%=i|
00001720  63 6f 6e 25 2b 37 0d 07  62 2b 20 20 20 20 20 20  |con%+7..b+      |
00001730  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001740  20 20 20 20 20 20 20 f2  73 65 74 5f 63 61 72 65  |       .set_care|
00001750  74 0d 07 6c 22 20 20 20  20 20 20 20 20 20 20 20  |t..l"           |
00001760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001770  20 20 cd 0d 07 76 20 20  20 20 20 20 20 20 20 20  |  ...v          |
00001780  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001790  20 20 cd 0d 07 80 2a 20  20 20 20 20 20 20 20 20  |  ....*         |
000017a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000017b0  20 20 e7 20 6b 3d 20 26  31 39 43 20 8c 0d 07 8a  |  . k= &19C ....|
000017c0  35 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |5               |
000017d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 e7 20  |              . |
000017e0  69 63 6f 6e 25 20 3e 20  6e 61 6d 65 25 28 30 29  |icon% > name%(0)|
000017f0  20 8c 0d 07 94 33 20 20  20 20 20 20 20 20 20 20  | ....3          |
00001800  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001810  20 20 20 20 20 6e 65 77  5f 70 6f 73 25 3d 69 63  |     new_pos%=ic|
00001820  6f 6e 25 2b 31 0d 07 9e  2c 20 20 20 20 20 20 20  |on%+1...,       |
00001830  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001840  20 20 20 20 20 20 20 f2  73 65 74 5f 63 61 72 65  |       .set_care|
00001850  74 0d 07 a8 21 20 20 20  20 20 20 20 20 20 20 20  |t...!           |
00001860  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001870  20 cd 0d 07 b2 21 20 20  20 20 20 20 20 20 20 20  | ....!          |
00001880  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001890  20 20 cd 0d 07 bc 31 20  20 20 20 c9 20 64 69 73  |  ....1    . dis|
000018a0  70 6c 61 79 5f 77 69 6e  64 6f 77 25 20 20 20 3a  |play_window%   :|
000018b0  e7 20 6b 20 3d 20 31 33  20 84 20 6b 20 3d 26 31  |. k = 13 . k =&1|
000018c0  38 45 20 8c 0d 07 c6 4d  20 20 20 20 20 20 20 20  |8E ....M        |
000018d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000018e0  20 20 20 20 20 e7 20 69  63 6f 6e 25 20 3c 64 69  |     . icon% <di|
000018f0  73 70 6c 61 79 5f 69 63  6f 6e 25 28 6e 75 6d 62  |splay_icon%(numb|
00001900  65 72 5f 6f 66 5f 66 69  65 6c 64 73 25 2d 31 29  |er_of_fields%-1)|
00001910  8c 0d 07 d0 33 20 20 20  20 20 20 20 20 20 20 20  |....3           |
00001920  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001930  20 20 20 20 6e 65 77 5f  70 6f 73 25 3d 69 63 6f  |    new_pos%=ico|
00001940  6e 25 2b 32 0d 07 da 22  20 20 20 20 20 20 20 20  |n%+2..."        |
00001950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001960  20 20 20 20 20 cc 0d 07  e4 3e 20 20 20 20 20 20  |     ....>      |
00001970  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001980  20 20 20 20 20 20 20 20  20 6e 65 77 5f 70 6f 73  |         new_pos|
00001990  25 20 3d 20 64 69 73 70  6c 61 79 5f 69 63 6f 6e  |% = display_icon|
000019a0  25 28 30 29 0d 07 ee 47  20 20 20 20 20 20 20 20  |%(0)...G        |
000019b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000019c0  20 20 20 20 20 20 20 e7  20 6b 20 3d 20 31 33 20  |       . k = 13 |
000019d0  8c 20 f2 73 65 74 5f 63  61 72 65 74 3a f2 6e 65  |. .set_caret:.ne|
000019e0  78 74 5f 72 65 63 6f 72  64 20 3a 0d 07 f8 22 20  |xt_record :..." |
000019f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a00  20 20 20 20 20 20 20 20  20 20 20 20 cd 0d 08 02  |            ....|
00001a10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a20  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 08 0c  |            ....|
00001a30  3d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |=               |
00001a40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 e7 20  |              . |
00001a50  69 63 6f 6e 25 20 3e 20  64 69 73 70 6c 61 79 5f  |icon% > display_|
00001a60  69 63 6f 6e 25 28 30 29  20 8c 0d 08 16 33 20 20  |icon%(0) ....3  |
00001a70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a80  20 20 20 20 20 20 20 20  20 20 20 20 20 6e 65 77  |             new|
00001a90  5f 70 6f 73 25 3d 69 63  6f 6e 25 2d 32 0d 08 20  |_pos%=icon%-2.. |
00001aa0  22 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |"               |
00001ab0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 cc 0d  |              ..|
00001ac0  08 2a 50 20 20 20 20 20  20 20 20 20 20 20 20 20  |.*P             |
00001ad0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001ae0  20 20 6e 65 77 5f 70 6f  73 25 20 3d 20 64 69 73  |  new_pos% = dis|
00001af0  70 6c 61 79 5f 69 63 6f  6e 25 28 6e 75 6d 62 65  |play_icon%(numbe|
00001b00  72 5f 6f 66 5f 66 69 65  6c 64 73 25 2d 31 29 0d  |r_of_fields%-1).|
00001b10  08 34 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |.4"             |
00001b20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001b30  cd 0d 08 3e 20 20 20 20  20 20 20 20 20 20 20 20  |...>            |
00001b40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001b50  cd 0d 08 48 29 20 20 20  20 20 20 20 20 20 20 20  |...H)           |
00001b60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001b70  f2 73 65 74 5f 63 61 72  65 74 0d 08 52 30 20 20  |.set_caret..R0  |
00001b80  20 20 c9 20 70 61 73 73  77 6f 72 64 5f 77 69 6e  |  . password_win|
00001b90  64 6f 77 25 20 3a 20 e7  20 6b 3d 20 31 33 20 8c  |dow% : . k= 13 .|
00001ba0  20 f2 70 61 73 73 77 6f  72 64 0d 08 5c 31 20 20  | .password..\1  |
00001bb0  20 20 c9 20 73 61 76 65  5f 77 69 6e 64 6f 77 25  |  . save_window%|
00001bc0  20 20 20 20 20 3a 20 e7  20 6b 3d 31 33 20 8c 20  |     : . k=13 . |
00001bd0  f2 71 75 69 63 6b 5f 73  61 76 65 0d 08 66 09 20  |.quick_save..f. |
00001be0  20 20 20 cb 0d 08 70 05  cd 0d 08 7a 05 e1 0d 08  |   ...p....z....|
00001bf0  84 04 0d 08 8e 10 dd 20  f2 73 65 74 5f 63 61 72  |....... .set_car|
00001c00  65 74 0d 08 98 3a 20 20  20 20 c8 99 22 57 69 6d  |et...:    .."Wim|
00001c10  70 5f 53 65 74 43 61 72  65 74 50 6f 73 69 74 69  |p_SetCaretPositi|
00001c20  6f 6e 22 2c 77 69 6e 64  6f 77 25 2c 6e 65 77 5f  |on",window%,new_|
00001c30  70 6f 73 25 2c 2c 2c 2d  31 2c 2d 31 0d 08 a2 05  |pos%,,,-1,-1....|
00001c40  e1 0d 08 ac 04 0d 08 b6  04 0d 08 c0 04 0d 08 ca  |................|
00001c50  0e dd 20 f2 6d 65 6e 75  28 62 29 0d 08 d4 15 66  |.. .menu(b)....f|
00001c60  6c 61 67 31 25 20 3d 20  26 37 30 30 30 30 32 31  |lag1% = &7000021|
00001c70  0d 08 de 15 66 6c 61 67  32 25 20 3d 20 26 37 34  |....flag2% = &74|
00001c80  30 30 30 32 31 0d 08 e8  1e e7 20 6c 6f 61 64 65  |00021..... loade|
00001c90  64 25 20 c8 94 20 66 6c  61 67 31 25 2c 66 6c 61  |d% .. flag1%,fla|
00001ca0  67 32 25 0d 08 f2 14 24  6d 65 6e 75 3d 22 43 61  |g2%....$menu="Ca|
00001cb0  72 64 42 61 73 65 22 0d  08 fc 12 6d 65 6e 75 21  |rdBase"....menu!|
00001cc0  31 32 3d 26 37 30 32 30  37 0d 09 06 0f 6d 65 6e  |12=&70207....men|
00001cd0  75 21 31 36 3d 31 35 36  0d 09 10 0e 6d 65 6e 75  |u!16=156....menu|
00001ce0  21 32 30 3d 34 30 0d 09  1a 0d 6d 65 6e 75 21 32  |!20=40....menu!2|
00001cf0  34 3d 30 0d 09 24 04 0d  09 2e 04 0d 09 38 04 0d  |4=0..$.......8..|
00001d00  09 42 11 6d 65 6e 75 21  32 38 20 3d 20 26 30 30  |.B.menu!28 = &00|
00001d10  0d 09 4c 10 6d 65 6e 75  21 33 32 20 3d 20 2d 31  |..L.menu!32 = -1|
00001d20  0d 09 56 15 6d 65 6e 75  21 33 36 20 3d 20 20 66  |..V.menu!36 =  f|
00001d30  6c 61 67 31 25 0d 09 60  19 24 28 6d 65 6e 75 2b  |lag1%..`.$(menu+|
00001d40  34 30 29 20 3d 20 22 43  72 65 61 74 65 22 0d 09  |40) = "Create"..|
00001d50  6a 04 0d 09 74 11 6d 65  6e 75 21 35 32 20 3d 20  |j...t.menu!52 = |
00001d60  26 30 30 0d 09 7e 10 6d  65 6e 75 21 35 36 20 3d  |&00..~.menu!56 =|
00001d70  20 2d 31 0d 09 88 15 6d  65 6e 75 21 36 30 20 3d  | -1....menu!60 =|
00001d80  20 20 66 6c 61 67 32 25  0d 09 92 1c 24 28 6d 65  |  flag2%....$(me|
00001d90  6e 75 2b 36 34 29 20 3d  20 22 44 69 73 70 20 45  |nu+64) = "Disp E|
00001da0  64 69 74 22 0d 09 9c 04  0d 09 a6 11 6d 65 6e 75  |dit"........menu|
00001db0  21 37 36 20 3d 20 26 30  30 0d 09 b0 10 6d 65 6e  |!76 = &00....men|
00001dc0  75 21 38 30 20 3d 20 2d  31 0d 09 ba 14 6d 65 6e  |u!80 = -1....men|
00001dd0  75 21 38 34 20 3d 20 66  6c 61 67 32 25 0d 09 c4  |u!84 = flag2%...|
00001de0  17 24 28 6d 65 6e 75 2b  38 38 29 20 3d 20 22 53  |.$(menu+88) = "S|
00001df0  6f 72 74 22 0d 09 ce 04  0d 09 d8 05 20 0d 09 e2  |ort"........ ...|
00001e00  12 6d 65 6e 75 21 31 30  30 20 3d 20 26 30 30 0d  |.menu!100 = &00.|
00001e10  09 ec 11 6d 65 6e 75 21  31 30 34 20 3d 20 2d 31  |...menu!104 = -1|
00001e20  0d 09 f6 15 6d 65 6e 75  21 31 30 38 20 3d 20 66  |....menu!108 = f|
00001e30  6c 61 67 32 25 0d 0a 00  1a 24 28 6d 65 6e 75 2b  |lag2%....$(menu+|
00001e40  31 31 32 29 20 3d 20 22  4f 75 74 70 75 74 22 0d  |112) = "Output".|
00001e50  0a 0a 05 20 0d 0a 14 12  6d 65 6e 75 21 31 32 34  |... ....menu!124|
00001e60  20 3d 20 26 30 30 0d 0a  1e 11 6d 65 6e 75 21 31  | = &00....menu!1|
00001e70  32 38 20 3d 20 2d 31 0d  0a 28 15 6d 65 6e 75 21  |28 = -1..(.menu!|
00001e80  31 33 32 20 3d 20 66 6c  61 67 32 25 0d 0a 32 1a  |132 = flag2%..2.|
00001e90  24 28 6d 65 6e 75 2b 31  33 36 29 20 3d 20 22 46  |$(menu+136) = "F|
00001ea0  69 65 6c 64 73 22 0d 0a  3c 04 0d 0a 46 12 6d 65  |ields"..<...F.me|
00001eb0  6e 75 21 31 34 38 20 3d  20 26 30 30 0d 0a 50 11  |nu!148 = &00..P.|
00001ec0  6d 65 6e 75 21 31 35 32  20 3d 20 2d 31 0d 0a 5a  |menu!152 = -1..Z|
00001ed0  15 6d 65 6e 75 21 31 35  36 20 3d 20 66 6c 61 67  |.menu!156 = flag|
00001ee0  32 25 0d 0a 64 19 24 28  6d 65 6e 75 2b 31 36 30  |2%..d.$(menu+160|
00001ef0  29 20 3d 20 22 43 6c 6f  73 65 22 0d 0a 6e 04 0d  |) = "Close"..n..|
00001f00  0a 78 04 0d 0a 82 04 0d  0a 8c 12 6d 65 6e 75 21  |.x.........menu!|
00001f10  31 37 32 20 3d 20 26 30  30 0d 0a 96 1b 6d 65 6e  |172 = &00....men|
00001f20  75 21 31 37 36 20 3d 20  69 6e 66 6f 5f 77 69 6e  |u!176 = info_win|
00001f30  64 6f 77 25 0d 0a a0 17  6d 65 6e 75 21 31 38 30  |dow%....menu!180|
00001f40  20 3d 20 26 37 30 30 30  30 32 31 0d 0a aa 18 24  | = &7000021....$|
00001f50  28 6d 65 6e 75 2b 31 38  34 29 20 3d 20 22 49 6e  |(menu+184) = "In|
00001f60  66 6f 22 0d 0a b4 04 0d  0a be 04 0d 0a c8 10 6d  |fo"............m|
00001f70  65 6e 75 21 31 39 36 3d  26 38 30 0d 0a d2 10 6d  |enu!196=&80....m|
00001f80  65 6e 75 21 32 30 30 3d  20 2d 31 0d 0a dc 15 6d  |enu!200= -1....m|
00001f90  65 6e 75 21 32 30 34 3d  26 37 30 30 30 30 32 31  |enu!204=&7000021|
00001fa0  0d 0a e6 16 24 28 6d 65  6e 75 2b 32 30 38 29 3d  |....$(menu+208)=|
00001fb0  22 51 75 69 74 22 0d 0a  f0 04 0d 0a fa 28 c8 99  |"Quit".......(..|
00001fc0  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
00001fd0  75 22 2c 2c 6d 65 6e 75  2c 21 62 2d 36 34 2c 31  |u",,menu,!b-64,1|
00001fe0  33 36 0d 0b 04 05 e1 0d  0b 0e 04 0d 0b 18 04 0d  |36..............|
00001ff0  0b 22 04 0d 0b 2c 1c dd  20 f2 63 6c 6f 73 65 61  |."...,.. .closea|
00002000  77 69 6e 64 6f 77 28 68  61 6e 64 6c 65 25 29 0d  |window(handle%).|
00002010  0b 36 13 21 62 6c 6f 63  6b 25 3d 68 61 6e 64 6c  |.6.!block%=handl|
00002020  65 25 0d 0b 40 21 20 c8  99 22 57 69 6d 70 5f 43  |e%..@! .."Wimp_C|
00002030  6c 6f 73 65 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |loseWindow",,blo|
00002040  63 6b 25 0d 0b 4a 3c e7  20 68 61 6e 64 6c 65 25  |ck%..J<. handle%|
00002050  20 3d 20 6f 75 74 70 75  74 5f 77 69 6e 64 6f 77  | = output_window|
00002060  25 20 8c 20 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |% . .closeawindo|
00002070  77 28 73 61 76 65 5f 77  69 6e 64 6f 77 25 29 0d  |w(save_window%).|
00002080  0b 54 15 20 20 f4 20 72  65 63 75 72 73 69 76 65  |.T.  . recursive|
00002090  20 62 69 74 0d 0b 5e 05  e1 0d 0b 68 04 0d 0b 72  | bit..^....h...r|
000020a0  12 dd 20 f2 72 65 63 65  69 76 65 28 71 25 29 0d  |.. .receive(q%).|
000020b0  0b 7c 0e c8 8e 20 71 25  21 31 36 20 ca 0d 0b 86  |.|... q%!16 ....|
000020c0  11 c9 20 30 3a f2 66 69  6e 69 73 68 3a e0 0d 0b  |.. 0:.finish:...|
000020d0  90 16 c9 20 32 3a 20 f2  64 61 74 61 73 61 76 65  |... 2: .datasave|
000020e0  28 71 25 29 0d 0b 9a 27  c9 20 33 2c 35 20 3a 20  |(q%)...'. 3,5 : |
000020f0  e7 20 71 25 21 31 32 20  3d 20 30 20 8c 20 f2 64  |. q%!12 = 0 . .d|
00002100  61 74 61 6c 6f 61 64 28  71 25 29 0d 0b a4 05 cb  |ataload(q%).....|
00002110  0d 0b ae 05 e1 0d 0b b8  05 20 0d 0b c2 04 0d 0b  |......... ......|
00002120  cc 04 0d 0b d6 04 0d 0b  e0 0c dd 20 f2 73 65 74  |........... .set|
00002130  75 70 0d 0b ea 10 de 20  62 6c 6f 63 6b 25 20 36  |up..... block% 6|
00002140  30 30 0d 0b f4 1e de 20  74 61 73 6b 69 64 25 34  |00..... taskid%4|
00002150  3a 24 74 61 73 6b 69 64  25 3d 22 54 41 53 4b 22  |:$taskid%="TASK"|
00002160  0d 0b fe 25 de 20 71 25  20 26 39 30 30 2c 62 75  |...%. q% &900,bu|
00002170  66 66 65 72 25 20 26 38  30 30 2c 65 6e 64 62 75  |ffer% &800,endbu|
00002180  66 25 20 2d 31 0d 0c 08  0e de 20 6d 65 6e 75 20  |f% -1..... menu |
00002190  35 30 30 0d 0c 12 14 de  20 69 6e 64 69 72 65 63  |500..... indirec|
000021a0  74 25 20 32 32 30 30 0d  0c 1c 0f de 20 63 61 72  |t% 2200..... car|
000021b0  65 74 25 20 34 30 0d 0c  26 13 63 75 72 62 75 66  |et% 40..&.curbuf|
000021c0  25 3d 62 75 66 66 65 72  25 0d 0c 30 3b c8 99 20  |%=buffer%..0;.. |
000021d0  22 57 69 6d 70 5f 49 6e  69 74 69 61 6c 69 73 65  |"Wimp_Initialise|
000021e0  22 2c 32 30 30 2c 21 74  61 73 6b 69 64 25 2c 22  |",200,!taskid%,"|
000021f0  43 61 72 64 42 61 73 65  22 20 b8 20 76 65 72 73  |CardBase" . vers|
00002200  69 6f 6e 25 0d 0c 3a 36  c8 99 20 22 57 69 6d 70  |ion%..:6.. "Wimp|
00002210  5f 4f 70 65 6e 54 65 6d  70 6c 61 74 65 22 2c 2c  |_OpenTemplate",,|
00002220  22 3c 43 61 72 64 42 61  73 65 24 44 69 72 3e 2e  |"<CardBase$Dir>.|
00002230  54 65 6d 70 6c 61 74 65  73 22 0d 0c 44 45 c8 99  |Templates"..DE..|
00002240  20 22 57 69 6d 70 5f 4c  6f 61 64 54 65 6d 70 6c  | "Wimp_LoadTempl|
00002250  61 74 65 22 2c 2c 71 25  2c 69 6e 64 69 72 65 63  |ate",,q%,indirec|
00002260  74 25 2c 69 6e 64 69 72  65 63 74 25 2b 31 39 39  |t%,indirect%+199|
00002270  2c 2d 31 2c 22 64 69 73  70 6c 61 79 22 2c 30 0d  |,-1,"display",0.|
00002280  0c 4e 30 c8 99 20 22 57  69 6d 70 5f 43 72 65 61  |.N0.. "Wimp_Crea|
00002290  74 65 57 69 6e 64 6f 77  22 2c 2c 71 25 20 b8 20  |teWindow",,q% . |
000022a0  64 69 73 70 6c 61 79 5f  77 69 6e 64 6f 77 25 0d  |display_window%.|
000022b0  0c 58 48 c8 99 20 22 57  69 6d 70 5f 4c 6f 61 64  |.XH.. "Wimp_Load|
000022c0  54 65 6d 70 6c 61 74 65  22 2c 2c 71 25 2c 69 6e  |Template",,q%,in|
000022d0  64 69 72 65 63 74 25 2b  32 30 30 2c 69 6e 64 69  |direct%+200,indi|
000022e0  72 65 63 74 25 2b 33 39  39 2c 2d 31 2c 22 66 69  |rect%+399,-1,"fi|
000022f0  65 6c 64 73 22 2c 30 0d  0c 62 2f c8 99 20 22 57  |elds",0..b/.. "W|
00002300  69 6d 70 5f 43 72 65 61  74 65 57 69 6e 64 6f 77  |imp_CreateWindow|
00002310  22 2c 2c 71 25 20 b8 20  66 69 65 6c 64 73 5f 77  |",,q% . fields_w|
00002320  69 6e 64 6f 77 25 0d 0c  6c 48 c8 99 20 22 57 69  |indow%..lH.. "Wi|
00002330  6d 70 5f 4c 6f 61 64 54  65 6d 70 6c 61 74 65 22  |mp_LoadTemplate"|
00002340  2c 2c 71 25 2c 69 6e 64  69 72 65 63 74 25 2b 34  |,,q%,indirect%+4|
00002350  30 30 2c 69 6e 64 69 72  65 63 74 25 2b 35 39 39  |00,indirect%+599|
00002360  2c 2d 31 2c 22 6f 75 74  70 75 74 22 2c 30 0d 0c  |,-1,"output",0..|
00002370  76 2f c8 99 20 22 57 69  6d 70 5f 43 72 65 61 74  |v/.. "Wimp_Creat|
00002380  65 57 69 6e 64 6f 77 22  2c 2c 71 25 20 b8 20 6f  |eWindow",,q% . o|
00002390  75 74 70 75 74 5f 77 69  6e 64 6f 77 25 0d 0c 80  |utput_window%...|
000023a0  4a c8 99 20 22 57 69 6d  70 5f 4c 6f 61 64 54 65  |J.. "Wimp_LoadTe|
000023b0  6d 70 6c 61 74 65 22 2c  2c 71 25 2c 69 6e 64 69  |mplate",,q%,indi|
000023c0  72 65 63 74 25 2b 36 30  30 2c 69 6e 64 69 72 65  |rect%+600,indire|
000023d0  63 74 25 2b 37 39 39 2c  2d 31 2c 22 70 72 6f 67  |ct%+799,-1,"prog|
000023e0  69 6e 66 6f 22 2c 30 0d  0c 8a 2d c8 99 20 22 57  |info",0...-.. "W|
000023f0  69 6d 70 5f 43 72 65 61  74 65 57 69 6e 64 6f 77  |imp_CreateWindow|
00002400  22 2c 2c 71 25 20 b8 20  69 6e 66 6f 5f 77 69 6e  |",,q% . info_win|
00002410  64 6f 77 25 0d 0c 94 46  c8 99 20 22 57 69 6d 70  |dow%...F.. "Wimp|
00002420  5f 4c 6f 61 64 54 65 6d  70 6c 61 74 65 22 2c 2c  |_LoadTemplate",,|
00002430  71 25 2c 69 6e 64 69 72  65 63 74 25 2b 38 30 30  |q%,indirect%+800|
00002440  2c 69 6e 64 69 72 65 63  74 25 2b 39 39 39 2c 2d  |,indirect%+999,-|
00002450  31 2c 22 73 6f 72 74 22  2c 30 0d 0c 9e 2d c8 99  |1,"sort",0...-..|
00002460  20 22 57 69 6d 70 5f 43  72 65 61 74 65 57 69 6e  | "Wimp_CreateWin|
00002470  64 6f 77 22 2c 2c 71 25  20 b8 20 73 6f 72 74 5f  |dow",,q% . sort_|
00002480  77 69 6e 64 6f 77 25 0d  0c a8 4a c8 99 20 22 57  |window%...J.. "W|
00002490  69 6d 70 5f 4c 6f 61 64  54 65 6d 70 6c 61 74 65  |imp_LoadTemplate|
000024a0  22 2c 2c 71 25 2c 69 6e  64 69 72 65 63 74 25 2b  |",,q%,indirect%+|
000024b0  31 30 30 30 2c 69 6e 64  69 72 65 63 74 25 2b 31  |1000,indirect%+1|
000024c0  31 39 39 2c 2d 31 2c 22  63 72 65 61 74 65 22 2c  |199,-1,"create",|
000024d0  30 0d 0c b2 30 c8 99 20  22 57 69 6d 70 5f 43 72  |0...0.. "Wimp_Cr|
000024e0  65 61 74 65 57 69 6e 64  6f 77 22 2c 2c 71 25 20  |eateWindow",,q% |
000024f0  b8 20 6e 65 77 66 69 6c  65 5f 77 69 6e 64 6f 77  |. newfile_window|
00002500  25 0d 0c bc 4c c8 99 20  22 57 69 6d 70 5f 4c 6f  |%...L.. "Wimp_Lo|
00002510  61 64 54 65 6d 70 6c 61  74 65 22 2c 2c 71 25 2c  |adTemplate",,q%,|
00002520  69 6e 64 69 72 65 63 74  25 2b 31 32 30 30 2c 69  |indirect%+1200,i|
00002530  6e 64 69 72 65 63 74 25  2b 31 33 39 39 2c 2d 31  |ndirect%+1399,-1|
00002540  2c 22 70 61 73 73 77 6f  72 64 22 2c 30 0d 0c c6  |,"password",0...|
00002550  31 c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |1.. "Wimp_Create|
00002560  57 69 6e 64 6f 77 22 2c  2c 71 25 20 b8 20 70 61  |Window",,q% . pa|
00002570  73 73 77 6f 72 64 5f 77  69 6e 64 6f 77 25 0d 0c  |ssword_window%..|
00002580  d0 4a c8 99 20 22 57 69  6d 70 5f 4c 6f 61 64 54  |.J.. "Wimp_LoadT|
00002590  65 6d 70 6c 61 74 65 22  2c 2c 71 25 2c 69 6e 64  |emplate",,q%,ind|
000025a0  69 72 65 63 74 25 2b 31  34 30 30 2c 69 6e 64 69  |irect%+1400,indi|
000025b0  72 65 63 74 25 2b 31 35  39 39 2c 2d 31 2c 22 73  |rect%+1599,-1,"s|
000025c0  63 72 65 65 6e 22 2c 30  0d 0c da 2f c8 99 20 22  |creen",0.../.. "|
000025d0  57 69 6d 70 5f 43 72 65  61 74 65 57 69 6e 64 6f  |Wimp_CreateWindo|
000025e0  77 22 2c 2c 71 25 20 b8  20 73 63 72 65 65 6e 5f  |w",,q% . screen_|
000025f0  77 69 6e 64 6f 77 25 0d  0c e4 48 c8 99 20 22 57  |window%...H.. "W|
00002600  69 6d 70 5f 4c 6f 61 64  54 65 6d 70 6c 61 74 65  |imp_LoadTemplate|
00002610  22 2c 2c 71 25 2c 69 6e  64 69 72 65 63 74 25 2b  |",,q%,indirect%+|
00002620  31 36 30 30 2c 69 6e 64  69 72 65 63 74 25 2b 32  |1600,indirect%+2|
00002630  30 30 30 2c 2d 31 2c 22  73 61 76 65 22 2c 30 0d  |000,-1,"save",0.|
00002640  0c ee 0d 71 25 21 36 34  20 3d 20 31 0d 0c f8 04  |...q%!64 = 1....|
00002650  0d 0d 02 2d c8 99 20 22  57 69 6d 70 5f 43 72 65  |...-.. "Wimp_Cre|
00002660  61 74 65 57 69 6e 64 6f  77 22 2c 2c 71 25 20 b8  |ateWindow",,q% .|
00002670  20 73 61 76 65 5f 77 69  6e 64 6f 77 25 0d 0d 0c  | save_window%...|
00002680  1b c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 54  |... "Wimp_CloseT|
00002690  65 6d 70 6c 61 74 65 22  0d 0d 16 21 53 25 3d 8e  |emplate"...!S%=.|
000026a0  22 3c 43 61 72 64 42 61  73 65 24 44 69 72 3e 2e  |"<CardBase$Dir>.|
000026b0  21 53 70 72 69 74 65 73  22 0d 0d 20 0f 54 25 3d  |!Sprites".. .T%=|
000026c0  a2 23 53 25 2b 31 36 30  0d 0d 2a 08 d9 23 53 25  |.#S%+160..*..#S%|
000026d0  0d 0d 34 11 de 20 73 70  72 69 74 65 73 25 20 54  |..4.. sprites% T|
000026e0  25 0d 0d 3e 1d 21 73 70  72 69 74 65 73 25 3d 54  |%..>.!sprites%=T|
000026f0  25 3a 73 70 72 69 74 65  73 25 21 38 3d 31 0d 0d  |%:sprites%!8=1..|
00002700  48 22 c8 99 20 22 4f 53  5f 53 70 72 69 74 65 4f  |H".. "OS_SpriteO|
00002710  70 22 2c 26 31 30 39 2c  73 70 72 69 74 65 73 25  |p",&109,sprites%|
00002720  0d 0d 52 3c c8 99 20 22  4f 53 5f 53 70 72 69 74  |..R<.. "OS_Sprit|
00002730  65 4f 70 22 2c 26 31 30  41 2c 73 70 72 69 74 65  |eOp",&10A,sprite|
00002740  73 25 2c 22 3c 43 61 72  64 42 61 73 65 24 44 69  |s%,"<CardBase$Di|
00002750  72 3e 2e 21 53 70 72 69  74 65 73 22 0d 0d 5c 14  |r>.!Sprites"..\.|
00002760  69 63 63 61 6c 63 25 3d  a4 69 63 6f 6e 62 61 72  |iccalc%=.iconbar|
00002770  0d 0d 66 0c 71 75 69 74  20 3d 20 a3 0d 0d 70 0e  |..f.quit = ...p.|
00002780  61 62 6f 72 74 25 20 3d  20 a3 0d 0d 7a 16 21 71  |abort% = ...z.!q|
00002790  25 20 3d 20 73 61 76 65  5f 77 69 6e 64 6f 77 25  |% = save_window%|
000027a0  0d 0d 84 0c 71 25 21 34  20 3d 20 32 0d 0d 8e 1d  |....q%!4 = 2....|
000027b0  c8 99 22 57 69 6d 70 5f  47 65 74 49 63 6f 6e 53  |.."Wimp_GetIconS|
000027c0  74 61 74 65 22 2c 2c 71  25 0d 0d 98 1b 74 65 78  |tate",,q%....tex|
000027d0  74 5f 66 69 6c 65 5f 6e  61 6d 65 25 20 3d 20 71  |t_file_name% = q|
000027e0  25 21 32 38 0d 0d a2 05  e1 0d 0d ac 04 0d 0d b6  |%!28............|
000027f0  04 0d 0d c0 05 20 0d 0d  ca 0e dd 20 a4 69 63 6f  |..... ..... .ico|
00002800  6e 62 61 72 0d 0d d4 0a  21 71 25 3d 2d 31 0d 0d  |nbar....!q%=-1..|
00002810  de 0a 71 25 21 34 3d 30  0d 0d e8 0a 71 25 21 38  |..q%!4=0....q%!8|
00002820  3d 30 0d 0d f2 0c 71 25  21 31 32 3d 36 33 0d 0d  |=0....q%!12=63..|
00002830  fc 0c 71 25 21 31 36 3d  36 38 0d 0e 06 0f 71 25  |..q%!16=68....q%|
00002840  21 32 30 3d 26 32 31 30  32 0d 0e 10 17 73 70 6e  |!20=&2102....spn|
00002850  61 6d 65 24 3d 22 21 43  61 72 64 42 61 73 65 22  |ame$="!CardBase"|
00002860  0d 0e 1a 18 de 20 71 25  21 32 34 20 28 a9 73 70  |..... q%!24 (.sp|
00002870  6e 61 6d 65 24 2b 31 29  0d 0e 24 14 24 28 71 25  |name$+1)..$.$(q%|
00002880  21 32 34 29 3d 73 70 6e  61 6d 65 24 0d 0e 2e 12  |!24)=spname$....|
00002890  71 25 21 32 38 3d 73 70  72 69 74 65 73 25 0d 0e  |q%!28=sprites%..|
000028a0  38 14 71 25 21 33 32 3d  a9 73 70 6e 61 6d 65 24  |8.q%!32=.spname$|
000028b0  2b 31 0d 0e 42 22 c8 99  20 22 57 69 6d 70 5f 43  |+1..B".. "Wimp_C|
000028c0  72 65 61 74 65 49 63 6f  6e 22 2c 2c 71 25 20 b8  |reateIcon",,q% .|
000028d0  20 69 63 25 0d 0e 4c 08  3d 69 63 25 0d 0e 56 04  | ic%..L.=ic%..V.|
000028e0  0d 0e 60 04 0d 0e 6a 04  0d 0e 74 04 0d 0e 7e 04  |..`...j...t...~.|
000028f0  0d 0e 88 0b dd 20 f2 76  61 72 73 0d 0e 92 1e 57  |..... .vars....W|
00002900  69 6d 70 20 20 20 20 3d  20 28 31 3c 3c 31 38 29  |imp    = (1<<18)|
00002910  20 2b 20 28 33 3c 3c 36  29 0d 0e 9c 14 43 72 65  | + (3<<6)....Cre|
00002920  61 74 65 57 20 3d 20 57  69 6d 70 2b 31 0d 0e a6  |ateW = Wimp+1...|
00002930  14 4f 70 65 6e 57 20 20  20 3d 20 57 69 6d 70 2b  |.OpenW   = Wimp+|
00002940  35 0d 0e b0 14 43 6c 6f  73 65 57 20 20 3d 20 57  |5....CloseW  = W|
00002950  69 6d 70 2b 36 0d 0e ba  14 50 6f 6c 6c 25 20 20  |imp+6....Poll%  |
00002960  20 3d 20 57 69 6d 70 2b  37 0d 0e c4 14 52 65 64  | = Wimp+7....Red|
00002970  72 61 77 57 20 3d 20 57  69 6d 70 2b 38 0d 0e ce  |rawW = Wimp+8...|
00002980  14 55 70 64 61 74 65 57  20 3d 20 57 69 6d 70 2b  |.UpdateW = Wimp+|
00002990  39 0d 0e d8 15 47 65 74  52 25 20 20 20 3d 20 57  |9....GetR%   = W|
000029a0  69 6d 70 2b 31 30 0d 0e  e2 15 47 65 74 57 20 20  |imp+10....GetW  |
000029b0  20 20 3d 20 57 69 6d 70  2b 31 31 0d 0e ec 15 47  |  = Wimp+11....G|
000029c0  65 74 50 20 20 20 20 3d  20 57 69 6d 70 2b 31 35  |etP    = Wimp+15|
000029d0  0d 0e f6 15 44 72 61 67  20 20 20 20 3d 20 57 69  |....Drag    = Wi|
000029e0  6d 70 2b 31 36 0d 0f 00  15 43 72 4d 65 6e 75 20  |mp+16....CrMenu |
000029f0  20 3d 20 57 69 6d 70 2b  32 30 0d 0f 0a 15 44 63  | = Wimp+20....Dc|
00002a00  4d 65 6e 75 20 20 3d 20  57 69 6d 70 2b 32 31 0d  |Menu  = Wimp+21.|
00002a10  0f 14 0f 66 69 6c 65 25  20 20 20 3d 20 30 0d 0f  |...file%   = 0..|
00002a20  1e 10 69 6e 68 69 62 69  74 25 20 3d 20 a3 0d 0f  |..inhibit% = ...|
00002a30  28 18 63 61 73 65 5f 73  65 6e 73 5f 69 63 6f 6e  |(.case_sens_icon|
00002a40  25 20 3d 20 31 33 0d 0f  32 18 63 72 5f 69 63 6f  |% = 13..2.cr_ico|
00002a50  6e 25 20 20 20 20 20 20  20 20 3d 20 31 35 0d 0f  |n%        = 15..|
00002a60  3c 18 74 61 62 5f 69 63  6f 6e 25 20 20 20 20 20  |<.tab_icon%     |
00002a70  20 20 3d 20 31 37 0d 0f  46 17 74 61 62 75 6c 61  |  = 17..F.tabula|
00002a80  74 65 25 20 20 20 20 20  20 20 3d 20 b9 0d 0f 50  |te%       = ...P|
00002a90  17 73 6f 72 74 5f 63 61  73 65 5f 73 65 6e 73 25  |.sort_case_sens%|
00002aa0  20 3d 20 a3 0d 0f 5a 1b  6f 75 74 70 75 74 5f 66  | = ...Z.output_f|
00002ab0  69 6c 65 5f 68 61 6e 64  6c 65 25 20 3d 20 30 0d  |ile_handle% = 0.|
00002ac0  0f 64 05 e1 0d 0f 6e 04  0d 0f 78 04 0d 0f 82 0c  |.d....n...x.....|
00002ad0  dd 20 f2 65 72 72 6f 72  0d 0f 8c 0e e7 20 9f 20  |. .error..... . |
00002ae0  3d 20 31 37 20 8c 0d 0f  96 27 20 f2 65 72 72 6f  |= 17 ....' .erro|
00002af0  72 5f 6d 65 73 73 61 67  65 28 22 45 73 63 61 70  |r_message("Escap|
00002b00  65 20 70 72 65 73 73 65  64 22 29 3a e0 0d 0f a0  |e pressed"):....|
00002b10  05 cc 0d 0f aa 32 20 20  f2 65 72 72 6f 72 5f 6d  |.....2  .error_m|
00002b20  65 73 73 61 67 65 28 f6  24 2b 22 20 28 69 6e 74  |essage(.$+" (int|
00002b30  65 72 6e 61 6c 20 65 72  72 6f 72 29 20 22 2b c3  |ernal error) "+.|
00002b40  28 9e 29 29 0d 0f b4 05  cd 0d 0f be 1f e7 20 6f  |(.)).......... o|
00002b50  75 74 70 75 74 5f 66 69  6c 65 5f 68 61 6e 64 6c  |utput_file_handl|
00002b60  65 25 20 3e 20 30 20 8c  0d 0f c8 1d 20 20 20 d9  |e% > 0 .....   .|
00002b70  23 20 6f 75 74 70 75 74  5f 66 69 6c 65 5f 68 61  |# output_file_ha|
00002b80  6e 64 6c 65 25 0d 0f d2  1c 20 20 20 6f 75 74 70  |ndle%....   outp|
00002b90  75 74 5f 66 69 6c 65 5f  68 61 6e 64 6c 65 25 3d  |ut_file_handle%=|
00002ba0  30 0d 0f dc 05 cd 0d 0f  e6 0e 61 62 6f 72 74 25  |0.........abort%|
00002bb0  20 3d 20 a3 0d 0f f0 05  e1 0d 0f fa 04 0d 10 04  | = .............|
00002bc0  04 0d 10 0e 04 0d 10 18  04 0d 10 22 04 0d 10 2c  |..........."...,|
00002bd0  04 0d 10 36 1b dd 20 f2  65 72 72 6f 72 5f 6d 65  |...6.. .error_me|
00002be0  73 73 61 67 65 28 74 65  78 74 24 29 0d 10 40 17  |ssage(text$)..@.|
00002bf0  c8 99 22 48 6f 75 72 67  6c 61 73 73 5f 53 6d 61  |.."Hourglass_Sma|
00002c00  73 68 22 0d 10 4a 18 c8  99 22 57 69 6d 70 5f 44  |sh"..J..."Wimp_D|
00002c10  72 61 67 42 6f 78 22 2c  2c 2d 31 0d 10 54 0d 21  |ragBox",,-1..T.!|
00002c20  62 6c 6f 63 6b 25 3d 9f  0d 10 5e 15 24 28 62 6c  |block%=...^.$(bl|
00002c30  6f 63 6b 25 2b 34 29 3d  74 65 78 74 24 0d 10 68  |ock%+4)=text$..h|
00002c40  2e c8 99 20 22 57 69 6d  70 5f 52 65 70 6f 72 74  |... "Wimp_Report|
00002c50  45 72 72 6f 72 22 2c 62  6c 6f 63 6b 25 2c 31 2c  |Error",block%,1,|
00002c60  22 21 43 61 72 64 42 61  73 65 22 0d 10 72 05 e1  |"!CardBase"..r..|
00002c70  0d 10 7c 04 0d 10 86 04  0d 10 90 1c dd 20 a4 63  |..|.......... .c|
00002c80  61 6e 63 65 6c 5f 6d 65  73 73 61 67 65 28 74 65  |ancel_message(te|
00002c90  78 74 24 29 0d 10 9a 17  f4 20 72 65 74 75 72 6e  |xt$)..... return|
00002ca0  73 20 30 2c 31 2c 32 20  66 6f 72 0d 10 a4 0b ea  |s 0,1,2 for.....|
00002cb0  20 72 30 2c 72 31 0d 10  ae 17 c8 99 22 48 6f 75  | r0,r1......"Hou|
00002cc0  72 67 6c 61 73 73 5f 53  6d 61 73 68 22 0d 10 b8  |rglass_Smash"...|
00002cd0  18 c8 99 22 57 69 6d 70  5f 44 72 61 67 42 6f 78  |..."Wimp_DragBox|
00002ce0  22 2c 2c 2d 31 0d 10 c2  0d 21 62 6c 6f 63 6b 25  |",,-1....!block%|
00002cf0  3d 9f 0d 10 cc 15 24 28  62 6c 6f 63 6b 25 2b 34  |=.....$(block%+4|
00002d00  29 3d 74 65 78 74 24 0d  10 d6 36 c8 99 20 22 57  |)=text$...6.. "W|
00002d10  69 6d 70 5f 52 65 70 6f  72 74 45 72 72 6f 72 22  |imp_ReportError"|
00002d20  2c 62 6c 6f 63 6b 25 2c  37 2c 22 21 43 61 72 64  |,block%,7,"!Card|
00002d30  42 61 73 65 22 20 b8 20  72 30 2c 72 31 0d 10 e0  |Base" . r0,r1...|
00002d40  07 3d 72 31 0d 10 ea 05  e1 0d 10 f4 04 0d 10 fe  |.=r1............|
00002d50  04 0d 11 08 10 dd 20 f2  67 6c 61 73 73 28 6f 25  |...... .glass(o%|
00002d60  29 0d 11 12 0a e7 20 6f  25 20 8c 0d 11 1c 16 20  |)..... o% ..... |
00002d70  20 c8 99 22 48 6f 75 72  67 6c 61 73 73 5f 4f 6e  | .."Hourglass_On|
00002d80  22 0d 11 26 05 cc 0d 11  30 17 20 20 c8 99 22 48  |"..&....0.  .."H|
00002d90  6f 75 72 67 6c 61 73 73  5f 4f 66 66 22 0d 11 3a  |ourglass_Off"..:|
00002da0  05 cd 0d 11 44 05 e1 0d  11 4e 04 0d 11 58 04 0d  |....D....N...X..|
00002db0  11 62 0d dd 20 f2 66 69  6e 69 73 68 0d 11 6c 17  |.b.. .finish..l.|
00002dc0  c8 99 20 22 57 69 6d 70  5f 43 6c 6f 73 65 44 6f  |.. "Wimp_CloseDo|
00002dd0  77 6e 22 0d 11 76 05 e1  0d 11 80 04 0d 11 8a 04  |wn"..v..........|
00002de0  0d 11 94 04 0d 11 9e 04  0d 11 a8 1d dd 20 f2 72  |............. .r|
00002df0  65 64 72 61 77 5f 77 69  6e 64 6f 77 28 68 61 6e  |edraw_window(han|
00002e00  64 6c 65 25 29 0d 11 b2  15 21 62 6c 6f 63 6b 25  |dle%)....!block%|
00002e10  20 3d 20 68 61 6e 64 6c  65 25 0d 11 bc 29 c8 99  | = handle%...)..|
00002e20  22 57 69 6d 70 5f 52 65  64 72 61 77 57 69 6e 64  |"Wimp_RedrawWind|
00002e30  6f 77 22 2c 2c 62 6c 6f  63 6b 25 20 b8 20 6d 6f  |ow",,block% . mo|
00002e40  72 65 25 0d 11 c6 0c c8  95 20 6d 6f 72 65 25 0d  |re%...... more%.|
00002e50  11 d0 2c 20 20 c8 99 20  22 57 69 6d 70 5f 47 65  |..,  .. "Wimp_Ge|
00002e60  74 52 65 63 74 61 6e 67  6c 65 22 2c 2c 62 6c 6f  |tRectangle",,blo|
00002e70  63 6b 25 20 b8 20 6d 6f  72 65 25 0d 11 da 05 ce  |ck% . more%.....|
00002e80  0d 11 e4 05 e1 0d 11 ee  04 0d 11 f8 05 20 0d 12  |............. ..|
00002e90  02 41 dd 20 a4 69 63 6f  6e 28 77 68 61 6e 64 6c  |.A. .icon(whandl|
00002ea0  65 25 2c 69 78 25 2c 69  79 25 2c 69 77 25 2c 69  |e%,ix%,iy%,iw%,i|
00002eb0  68 25 2c 66 6c 61 67 25  2c 20 74 65 78 74 24 2c  |h%,flag%, text$,|
00002ec0  20 64 31 25 2c 20 64 32  25 2c 20 64 33 25 29 0d  | d1%, d2%, d3%).|
00002ed0  12 0c 17 62 6c 6f 63 6b  25 21 30 20 3d 20 77 68  |...block%!0 = wh|
00002ee0  61 6e 64 6c 65 25 0d 12  16 12 62 6c 6f 63 6b 25  |andle%....block%|
00002ef0  21 34 20 3d 20 69 78 25  0d 12 20 12 62 6c 6f 63  |!4 = ix%.. .bloc|
00002f00  6b 25 21 38 20 3d 20 69  79 25 0d 12 2a 19 62 6c  |k%!8 = iy%..*.bl|
00002f10  6f 63 6b 25 21 31 32 20  3d 20 69 78 25 20 2b 20  |ock%!12 = ix% + |
00002f20  69 77 25 0d 12 34 19 62  6c 6f 63 6b 25 21 31 36  |iw%..4.block%!16|
00002f30  20 3d 20 69 79 25 20 2b  20 69 68 25 0d 12 3e 15  | = iy% + ih%..>.|
00002f40  62 6c 6f 63 6b 25 21 32  30 20 3d 20 66 6c 61 67  |block%!20 = flag|
00002f50  25 0d 12 48 0f e7 20 64  31 25 20 3d 20 30 20 8c  |%..H.. d1% = 0 .|
00002f60  0d 12 52 19 20 24 28 62  6c 6f 63 6b 25 21 32 34  |..R. $(block%!24|
00002f70  29 20 3d 20 74 65 78 74  24 0d 12 5c 05 cc 0d 12  |) = text$..\....|
00002f80  66 16 20 20 20 62 6c 6f  63 6b 25 21 32 34 20 3d  |f.   block%!24 =|
00002f90  20 64 31 25 0d 12 70 16  20 20 20 62 6c 6f 63 6b  | d1%..p.   block|
00002fa0  25 21 32 38 20 3d 20 64  32 25 0d 12 7a 16 20 20  |%!28 = d2%..z.  |
00002fb0  20 62 6c 6f 63 6b 25 21  33 32 20 3d 20 64 33 25  | block%!32 = d3%|
00002fc0  0d 12 84 05 cd 0d 12 8e  2a c8 99 22 57 69 6d 70  |........*.."Wimp|
00002fd0  5f 43 72 65 61 74 65 49  63 6f 6e 22 2c 2c 62 6c  |_CreateIcon",,bl|
00002fe0  6f 63 6b 25 20 b8 20 69  68 61 6e 64 6c 65 25 0d  |ock% . ihandle%.|
00002ff0  12 98 0d 3d 69 68 61 6e  64 6c 65 25 0d 12 a2 04  |...=ihandle%....|
00003000  0d 12 ac 04 0d 12 b6 17  dd 20 f2 63 72 65 61 74  |......... .creat|
00003010  65 5f 76 61 72 69 61 62  6c 65 73 0d 12 c0 18 de  |e_variables.....|
00003020  20 6d 65 73 73 61 67 65  5f 62 6c 6f 63 6b 25 20  | message_block% |
00003030  31 30 30 0d 12 ca 80 de  20 6e 61 6d 65 25 28 6d  |100..... name%(m|
00003040  61 78 5f 66 69 65 6c 64  73 29 2c 74 79 70 65 25  |ax_fields),type%|
00003050  28 6d 61 78 5f 66 69 65  6c 64 73 29 2c 77 69 64  |(max_fields),wid|
00003060  74 68 25 28 6d 61 78 5f  66 69 65 6c 64 73 29 2c  |th%(max_fields),|
00003070  64 70 25 28 6d 61 78 5f  66 69 65 6c 64 73 29 2c  |dp%(max_fields),|
00003080  6d 69 6e 25 28 6d 61 78  5f 66 69 65 6c 64 73 29  |min%(max_fields)|
00003090  2c 6d 61 78 25 28 6d 61  78 5f 66 69 65 6c 64 73  |,max%(max_fields|
000030a0  29 2c 6c 69 73 74 25 28  6d 61 78 5f 66 69 65 6c  |),list%(max_fiel|
000030b0  64 73 29 0d 12 d4 48 de  20 72 65 63 6f 72 64 5f  |ds)...H. record_|
000030c0  61 24 28 6d 61 78 5f 66  69 65 6c 64 73 29 2c 20  |a$(max_fields), |
000030d0  72 65 63 6f 72 64 5f 62  24 28 6d 61 78 5f 66 69  |record_b$(max_fi|
000030e0  65 6c 64 73 29 2c 20 68  69 67 68 65 73 74 24 28  |elds), highest$(|
000030f0  6d 61 78 5f 66 69 65 6c  64 73 29 0d 12 de 27 de  |max_fields)...'.|
00003100  20 73 6f 72 74 5f 6c 69  6e 65 24 28 31 32 29 2c  | sort_line$(12),|
00003110  20 73 6f 72 74 5f 6f 70  65 72 61 74 6f 72 24 28  | sort_operator$(|
00003120  36 29 0d 12 e8 1d de 20  66 69 65 6c 64 5f 75 73  |6)..... field_us|
00003130  65 64 25 28 6d 61 78 5f  66 69 65 6c 64 73 29 0d  |ed%(max_fields).|
00003140  12 f2 26 de 20 63 75 72  72 65 6e 74 5f 66 69 65  |..&. current_fie|
00003150  6c 64 5f 76 61 6c 75 65  24 28 6d 61 78 5f 66 69  |ld_value$(max_fi|
00003160  65 6c 64 73 29 0d 12 fc  15 de 20 6f 75 74 70 75  |elds)..... outpu|
00003170  74 5f 6c 69 73 74 24 28  36 29 0d 13 06 12 de 20  |t_list$(6)..... |
00003180  66 69 6c 65 6e 61 6d 65  25 20 32 30 0d 13 10 13  |filename% 20....|
00003190  de 20 70 61 74 68 6e 61  6d 65 25 20 32 30 30 0d  |. pathname% 200.|
000031a0  13 1a 17 de 20 72 65 63  6f 72 64 5f 6e 75 6d 62  |.... record_numb|
000031b0  65 72 25 20 31 33 0d 13  24 12 de 20 70 61 73 73  |er% 13..$.. pass|
000031c0  77 6f 72 64 25 20 31 33  0d 13 2e 15 de 20 69 6e  |word% 13..... in|
000031d0  5f 70 61 73 73 77 6f 72  64 25 20 31 33 0d 13 38  |_password% 13..8|
000031e0  14 de 20 76 61 6c 69 64  5f 6e 61 6d 65 25 20 32  |.. valid_name% 2|
000031f0  30 0d 13 42 18 de 20 76  61 6c 69 64 5f 70 61 73  |0..B.. valid_pas|
00003200  73 77 6f 72 64 25 20 32  30 0d 13 4c 14 de 20 72  |sword% 20..L.. r|
00003210  65 63 5f 6e 75 6d 62 65  72 25 20 31 33 0d 13 56  |ec_number% 13..V|
00003220  14 de 20 76 61 6c 69 64  5f 74 79 70 65 25 20 32  |.. valid_type% 2|
00003230  30 0d 13 60 15 de 20 66  69 65 6c 64 5f 64 65 73  |0..`.. field_des|
00003240  25 20 32 32 30 30 0d 13  6a 17 de 20 76 61 6c 69  |% 2200..j.. vali|
00003250  64 5f 69 6e 74 65 67 65  72 25 20 31 30 0d 13 74  |d_integer% 10..t|
00003260  16 de 20 6f 75 74 70 75  74 5f 6c 69 73 74 25 20  |.. output_list% |
00003270  35 30 30 0d 13 7e 16 de  20 73 65 61 72 63 68 5f  |500..~.. search_|
00003280  6c 69 73 74 25 20 32 30  30 0d 13 88 15 de 20 6f  |list% 200..... o|
00003290  75 74 70 75 74 5f 69 63  6f 6e 25 28 36 29 0d 13  |utput_icon%(6)..|
000032a0  92 15 de 20 73 6f 72 74  5f 66 69 65 6c 64 25 20  |... sort_field% |
000032b0  33 30 30 0d 13 9c 14 de  20 73 6f 72 74 5f 69 63  |300..... sort_ic|
000032c0  6f 6e 25 28 31 32 29 0d  13 a6 14 de 20 76 61 6c  |on%(12)..... val|
000032d0  69 64 5f 73 6f 72 74 25  20 32 30 0d 13 b0 18 de  |id_sort% 20.....|
000032e0  20 64 69 73 70 6c 61 79  5f 64 61 74 61 25 20 33  | display_data% 3|
000032f0  30 30 30 0d 13 ba 21 de  20 64 69 73 70 6c 61 79  |000...!. display|
00003300  5f 69 63 6f 6e 25 28 6d  61 78 5f 66 69 65 6c 64  |_icon%(max_field|
00003310  73 2a 32 29 0d 13 c4 1a  de 20 6f 75 74 70 75 74  |s*2)..... output|
00003320  5f 64 69 73 70 6c 61 79  25 20 32 30 30 30 0d 13  |_display% 2000..|
00003330  ce 11 de 20 6d 61 74 63  68 65 73 25 20 32 30 0d  |... matches% 20.|
00003340  13 d8 14 de 20 6f 75 74  70 75 74 5f 72 65 63 25  |.... output_rec%|
00003350  20 32 30 0d 13 e2 04 0d  13 ec 1d 24 76 61 6c 69  | 20........$vali|
00003360  64 5f 6e 61 6d 65 25 3d  22 41 61 2d 7a 41 2d 5a  |d_name%="Aa-zA-Z|
00003370  30 2d 39 22 0d 13 f6 1a  24 76 61 6c 69 64 5f 70  |0-9"....$valid_p|
00003380  61 73 73 77 6f 72 64 25  20 3d 22 44 2a 22 0d 14  |assword% ="D*"..|
00003390  00 1c 24 76 61 6c 69 64  5f 74 79 70 65 25 20 3d  |..$valid_type% =|
000033a0  20 22 41 44 4e 54 64 6e  74 22 0d 14 0a 1c 24 76  | "ADNTdnt"....$v|
000033b0  61 6c 69 64 5f 69 6e 74  65 67 65 72 25 20 3d 20  |alid_integer% = |
000033c0  22 41 30 2d 39 22 0d 14  14 1a 24 76 61 6c 69 64  |"A0-9"....$valid|
000033d0  5f 73 6f 72 74 25 20 3d  20 22 41 61 41 44 64 22  |_sort% = "AaADd"|
000033e0  0d 14 1e 05 20 0d 14 28  05 20 0d 14 32 1b 24 66  |.... ..(. ..2.$f|
000033f0  69 6c 65 6e 61 6d 65 25  20 3d 20 22 44 61 74 61  |ilename% = "Data|
00003400  46 69 6c 65 22 0d 14 3c  1b 24 70 61 74 68 6e 61  |File"..<.$pathna|
00003410  6d 65 25 20 3d 20 22 44  61 74 61 46 69 6c 65 22  |me% = "DataFile"|
00003420  0d 14 46 13 24 70 61 73  73 77 6f 72 64 25 20 3d  |..F.$password% =|
00003430  20 22 22 0d 14 50 16 24  69 6e 5f 70 61 73 73 77  | ""..P.$in_passw|
00003440  6f 72 64 25 20 3d 20 22  22 0d 14 5a 16 24 72 65  |ord% = ""..Z.$re|
00003450  63 5f 6e 75 6d 62 65 72  25 20 3d 20 22 30 22 0d  |c_number% = "0".|
00003460  14 64 16 24 73 65 61 72  63 68 5f 6c 69 73 74 25  |.d.$search_list%|
00003470  20 3d 20 22 22 0d 14 6e  05 20 0d 14 78 0f 6c 6f  | = ""..n. ..x.lo|
00003480  61 64 65 64 25 20 3d 20  a3 0d 14 82 0e de 20 66  |aded% = ...... f|
00003490  24 28 31 39 2c 36 29 0d  14 8c 04 0d 14 96 1f 24  |$(19,6)........$|
000034a0  74 65 78 74 5f 66 69 6c  65 5f 6e 61 6d 65 25 20  |text_file_name% |
000034b0  3d 20 22 4f 75 74 70 75  74 22 0d 14 a0 05 e1 0d  |= "Output"......|
000034c0  14 aa 05 20 0d 14 b4 04  0d 14 be 12 dd 20 f2 63  |... ......... .c|
000034d0  72 65 61 74 65 69 63 6f  6e 73 0d 14 c8 4e f4 20  |reateicons...N. |
000034e0  77 69 6e 64 6f 77 68 61  6e 64 6c 65 2c 6d 69 6e  |windowhandle,min|
000034f0  78 2c 6d 69 6e 79 2c 6c  65 6e 67 74 68 2c 20 68  |x,miny,length, h|
00003500  65 69 67 68 74 2c 20 66  6c 61 67 73 2c 20 73 70  |eight, flags, sp|
00003510  72 69 74 65 2c 74 65 78  74 2c 20 76 61 6c 69 64  |rite,text, valid|
00003520  2c 20 6c 65 6e 67 74 68  0d 14 d2 25 f4 20 74 65  |, length...%. te|
00003530  78 74 2c 20 6e 6f 20 62  61 63 6b 67 72 6f 75 6e  |xt, no backgroun|
00003540  64 20 69 73 20 26 37 30  30 30 35 31 31 0d 14 dc  |d is &7000511...|
00003550  27 f4 20 74 65 78 74 2c  20 77 69 74 68 20 62 61  |'. text, with ba|
00003560  63 6b 67 72 6f 75 6e 64  20 69 73 20 26 37 30 30  |ckground is &700|
00003570  30 31 33 35 0d 14 e6 32  f4 20 77 72 69 74 61 62  |0135...2. writab|
00003580  6c 65 20 69 63 6f 6e 2c  20 76 61 6c 69 64 61 74  |le icon, validat|
00003590  65 64 2c 20 69 6e 20 62  6f 78 20 69 73 20 26 37  |ed, in box is &7|
000035a0  30 30 46 35 33 44 0d 14  f0 56 6e 66 5f 31 25 20  |00F53D...Vnf_1% |
000035b0  3d 20 a4 69 63 6f 6e 28  6e 65 77 66 69 6c 65 5f  |= .icon(newfile_|
000035c0  77 69 6e 64 6f 77 25 2c  32 30 30 2c 2d 35 34 2c  |window%,200,-54,|
000035d0  32 30 30 2c 34 38 2c 26  37 30 30 46 35 33 44 2c  |200,48,&700F53D,|
000035e0  22 22 2c 66 69 6c 65 6e  61 6d 65 25 2c 76 61 6c  |"",filename%,val|
000035f0  69 64 5f 6e 61 6d 65 25  2c 31 32 29 0d 14 fa 5a  |id_name%,12)...Z|
00003600  6e 66 5f 32 25 20 3d a4  69 63 6f 6e 28 6e 65 77  |nf_2% =.icon(new|
00003610  66 69 6c 65 5f 77 69 6e  64 6f 77 25 2c 32 30 30  |file_window%,200|
00003620  2c 2d 31 30 38 2c 32 30  30 2c 34 38 2c 26 37 30  |,-108,200,48,&70|
00003630  30 46 35 33 44 2c 22 22  2c 70 61 73 73 77 6f 72  |0F53D,"",passwor|
00003640  64 25 2c 76 61 6c 69 64  5f 70 61 73 73 77 6f 72  |d%,valid_passwor|
00003650  64 25 2c 31 32 29 0d 15  04 5c 70 77 25 20 3d a4  |d%,12)...\pw% =.|
00003660  69 63 6f 6e 28 70 61 73  73 77 6f 72 64 5f 77 69  |icon(password_wi|
00003670  6e 64 6f 77 25 2c 34 30  30 2c 2d 32 30 30 2c 32  |ndow%,400,-200,2|
00003680  30 30 2c 34 38 2c 26 37  30 30 46 35 33 44 2c 22  |00,48,&700F53D,"|
00003690  22 2c 69 6e 5f 70 61 73  73 77 6f 72 64 25 2c 76  |",in_password%,v|
000036a0  61 6c 69 64 5f 70 61 73  73 77 6f 72 64 25 2c 31  |alid_password%,1|
000036b0  32 29 0d 15 0e 49 64 25  20 3d a4 69 63 6f 6e 28  |2)...Id% =.icon(|
000036c0  64 69 73 70 6c 61 79 5f  77 69 6e 64 6f 77 25 2c  |display_window%,|
000036d0  32 37 30 2c 2d 36 32 2c  32 30 30 2c 34 38 2c 26  |270,-62,200,48,&|
000036e0  37 30 30 30 31 33 35 2c  22 22 2c 66 69 6c 65 6e  |7000135,"",filen|
000036f0  61 6d 65 25 2c 2d 31 2c  31 32 29 0d 15 18 48 64  |ame%,-1,12)...Hd|
00003700  25 20 3d a4 69 63 6f 6e  28 66 69 65 6c 64 73 5f  |% =.icon(fields_|
00003710  77 69 6e 64 6f 77 25 2c  32 38 30 2c 2d 36 32 2c  |window%,280,-62,|
00003720  32 30 30 2c 34 38 2c 26  37 30 30 30 31 33 35 2c  |200,48,&7000135,|
00003730  22 22 2c 66 69 6c 65 6e  61 6d 65 25 2c 2d 31 2c  |"",filename%,-1,|
00003740  31 32 29 0d 15 22 48 64  25 20 3d a4 69 63 6f 6e  |12).."Hd% =.icon|
00003750  28 6f 75 74 70 75 74 5f  77 69 6e 64 6f 77 25 2c  |(output_window%,|
00003760  32 38 30 2c 2d 36 32 2c  32 30 30 2c 34 38 2c 26  |280,-62,200,48,&|
00003770  37 30 30 30 31 33 35 2c  22 22 2c 66 69 6c 65 6e  |7000135,"",filen|
00003780  61 6d 65 25 2c 2d 31 2c  31 32 29 0d 15 2c 48 64  |ame%,-1,12)..,Hd|
00003790  25 20 3d a4 69 63 6f 6e  28 73 63 72 65 65 6e 5f  |% =.icon(screen_|
000037a0  77 69 6e 64 6f 77 25 2c  32 38 30 2c 2d 36 32 2c  |window%,280,-62,|
000037b0  32 30 30 2c 34 38 2c 26  37 30 30 30 31 33 35 2c  |200,48,&7000135,|
000037c0  22 22 2c 66 69 6c 65 6e  61 6d 65 25 2c 2d 31 2c  |"",filename%,-1,|
000037d0  31 32 29 0d 15 36 46 64  25 20 3d a4 69 63 6f 6e  |12)..6Fd% =.icon|
000037e0  28 73 6f 72 74 5f 77 69  6e 64 6f 77 25 2c 32 38  |(sort_window%,28|
000037f0  30 2c 2d 36 32 2c 32 30  30 2c 34 38 2c 26 37 30  |0,-62,200,48,&70|
00003800  30 30 31 33 35 2c 22 22  2c 66 69 6c 65 6e 61 6d  |00135,"",filenam|
00003810  65 25 2c 2d 31 2c 31 32  29 0d 15 40 4b 64 25 20  |e%,-1,12)..@Kd% |
00003820  3d a4 69 63 6f 6e 28 64  69 73 70 6c 61 79 5f 77  |=.icon(display_w|
00003830  69 6e 64 6f 77 25 2c 37  30 30 2c 2d 36 32 2c 31  |indow%,700,-62,1|
00003840  38 30 2c 34 38 2c 26 37  30 30 30 31 33 35 2c 22  |80,48,&7000135,"|
00003850  22 2c 72 65 63 5f 6e 75  6d 62 65 72 25 2c 2d 31  |",rec_number%,-1|
00003860  2c 31 32 29 0d 15 4a 04  0d 15 54 2d e3 20 61 25  |,12)..J...T-. a%|
00003870  20 3d 20 66 69 65 6c 64  5f 64 65 73 25 20 b8 20  | = field_des% . |
00003880  66 69 65 6c 64 5f 64 65  73 25 20 2b 20 32 31 39  |field_des% + 219|
00003890  36 20 88 20 34 0d 15 5e  32 20 20 21 61 25 20 3d  |6 . 4..^2  !a% =|
000038a0  20 26 44 30 44 30 44 30  44 20 20 20 20 3a 20 f4  | &D0D0D0D    : .|
000038b0  20 53 45 54 20 54 48 45  20 41 59 59 41 59 20 54  | SET THE AYYAY T|
000038c0  4f 20 45 4d 50 54 59 0d  15 68 05 ed 0d 15 72 04  |O EMPTY..h....r.|
000038d0  0d 15 7c 16 e3 20 61 25  20 3d 20 30 20 b8 20 34  |..|.. a% = 0 . 4|
000038e0  39 36 20 88 20 34 0d 15  86 20 20 20 6f 75 74 70  |96 . 4...   outp|
000038f0  75 74 5f 6c 69 73 74 25  21 61 25 20 3d 20 26 44  |ut_list%!a% = &D|
00003900  30 44 30 44 30 44 0d 15  90 05 ed 0d 15 9a 04 0d  |0D0D0D..........|
00003910  15 a4 16 e3 20 61 25 20  3d 20 30 20 b8 20 32 39  |.... a% = 0 . 29|
00003920  36 20 88 20 34 0d 15 ae  1f 20 20 73 6f 72 74 5f  |6 . 4....  sort_|
00003930  66 69 65 6c 64 25 21 61  25 20 3d 20 26 44 30 44  |field%!a% = &D0D|
00003940  30 44 30 44 0d 15 b8 05  ed 0d 15 c2 04 0d 15 cc  |0D0D............|
00003950  17 e3 20 61 25 20 3d 20  30 20 b8 20 31 39 39 36  |.. a% = 0 . 1996|
00003960  20 88 20 34 0d 15 d6 23  20 20 6f 75 74 70 75 74  | . 4...#  output|
00003970  5f 64 69 73 70 6c 61 79  25 21 61 25 20 3d 20 26  |_display%!a% = &|
00003980  44 30 44 30 44 30 44 0d  15 e0 05 ed 0d 15 ea 04  |D0D0D0D.........|
00003990  0d 15 f4 16 e3 20 61 25  20 3d 20 30 20 b8 20 31  |..... a% = 0 . 1|
000039a0  39 36 20 88 20 34 0d 15  fe 20 20 20 73 65 61 72  |96 . 4...   sear|
000039b0  63 68 5f 6c 69 73 74 25  21 61 25 20 3d 20 26 44  |ch_list%!a% = &D|
000039c0  30 44 30 44 30 44 0d 16  08 05 ed 0d 16 12 04 0d  |0D0D0D..........|
000039d0  16 1c 17 e3 20 61 25 20  3d 20 30 20 b8 20 31 39  |.... a% = 0 . 19|
000039e0  39 36 20 88 20 34 0d 16  26 23 20 20 6f 75 74 70  |96 . 4..&#  outp|
000039f0  75 74 5f 64 69 73 70 6c  61 79 25 21 61 25 20 3d  |ut_display%!a% =|
00003a00  20 26 44 30 44 30 44 30  44 0d 16 30 05 ed 0d 16  | &D0D0D0D..0....|
00003a10  3a 04 0d 16 44 04 0d 16  4e 04 0d 16 58 1b e3 20  |:...D...N...X.. |
00003a20  72 6f 77 25 20 3d 20 30  20 b8 20 6d 61 78 5f 66  |row% = 0 . max_f|
00003a30  69 65 6c 64 73 0d 16 62  6d 6e 61 6d 65 25 28 72  |ields..bmname%(r|
00003a40  6f 77 25 29 20 3d 20 a4  69 63 6f 6e 28 66 69 65  |ow%) = .icon(fie|
00003a50  6c 64 73 5f 77 69 6e 64  6f 77 25 2c 35 30 2c 2d  |lds_window%,50,-|
00003a60  32 35 30 2d 72 6f 77 25  2a 36 30 2c 32 30 30 2c  |250-row%*60,200,|
00003a70  34 38 2c 26 37 30 30 46  35 33 35 2c 22 22 2c 66  |48,&700F535,"",f|
00003a80  69 65 6c 64 5f 64 65 73  25 2b 31 30 30 2a 72 6f  |ield_des%+100*ro|
00003a90  77 25 2c 76 61 6c 69 64  5f 6e 61 6d 65 25 2c 32  |w%,valid_name%,2|
00003aa0  30 29 0d 16 6c 6f 74 79  70 65 25 28 72 6f 77 25  |0)..lotype%(row%|
00003ab0  29 20 3d 20 a4 69 63 6f  6e 28 66 69 65 6c 64 73  |) = .icon(fields|
00003ac0  5f 77 69 6e 64 6f 77 25  2c 33 33 30 2c 2d 32 35  |_window%,330,-25|
00003ad0  30 2d 72 6f 77 25 2a 36  30 2c 34 30 2c 34 38 2c  |0-row%*60,40,48,|
00003ae0  26 37 30 30 46 35 33 35  2c 22 22 2c 66 69 65 6c  |&700F535,"",fiel|
00003af0  64 5f 64 65 73 25 2b 32  32 2b 31 30 30 2a 72 6f  |d_des%+22+100*ro|
00003b00  77 25 2c 76 61 6c 69 64  5f 74 79 70 65 25 2c 32  |w%,valid_type%,2|
00003b10  29 0d 16 76 73 77 69 64  74 68 25 28 72 6f 77 25  |)..vswidth%(row%|
00003b20  29 20 3d 20 a4 69 63 6f  6e 28 66 69 65 6c 64 73  |) = .icon(fields|
00003b30  5f 77 69 6e 64 6f 77 25  2c 34 37 30 2c 2d 32 35  |_window%,470,-25|
00003b40  30 2d 72 6f 77 25 2a 36  30 2c 38 30 2c 34 38 2c  |0-row%*60,80,48,|
00003b50  26 37 30 30 46 35 33 35  2c 22 22 2c 66 69 65 6c  |&700F535,"",fiel|
00003b60  64 5f 64 65 73 25 2b 32  36 2b 31 30 30 2a 72 6f  |d_des%+26+100*ro|
00003b70  77 25 2c 76 61 6c 69 64  5f 69 6e 74 65 67 65 72  |w%,valid_integer|
00003b80  25 2c 33 29 0d 16 80 70  64 70 25 28 72 6f 77 25  |%,3)...pdp%(row%|
00003b90  29 20 3d 20 a4 69 63 6f  6e 28 66 69 65 6c 64 73  |) = .icon(fields|
00003ba0  5f 77 69 6e 64 6f 77 25  2c 36 30 30 2c 2d 32 35  |_window%,600,-25|
00003bb0  30 2d 72 6f 77 25 2a 36  30 2c 38 30 2c 34 38 2c  |0-row%*60,80,48,|
00003bc0  26 37 30 30 46 35 33 35  2c 22 22 2c 66 69 65 6c  |&700F535,"",fiel|
00003bd0  64 5f 64 65 73 25 2b 33  32 2b 31 30 30 2a 72 6f  |d_des%+32+100*ro|
00003be0  77 25 2c 76 61 6c 69 64  5f 69 6e 74 65 67 65 72  |w%,valid_integer|
00003bf0  25 2c 32 29 0d 16 8a 67  6d 69 6e 25 28 72 6f 77  |%,2)...gmin%(row|
00003c00  25 29 20 3d 20 a4 69 63  6f 6e 28 66 69 65 6c 64  |%) = .icon(field|
00003c10  73 5f 77 69 6e 64 6f 77  25 2c 37 33 30 2c 2d 32  |s_window%,730,-2|
00003c20  35 30 2d 72 6f 77 25 2a  36 30 2c 31 33 30 2c 34  |50-row%*60,130,4|
00003c30  38 2c 26 37 30 30 46 35  33 35 2c 22 22 2c 66 69  |8,&700F535,"",fi|
00003c40  65 6c 64 5f 64 65 73 25  2b 33 35 2b 31 30 30 2a  |eld_des%+35+100*|
00003c50  72 6f 77 25 2c 2d 31 2c  31 32 29 0d 16 94 67 6d  |row%,-1,12)...gm|
00003c60  61 78 25 28 72 6f 77 25  29 20 3d 20 a4 69 63 6f  |ax%(row%) = .ico|
00003c70  6e 28 66 69 65 6c 64 73  5f 77 69 6e 64 6f 77 25  |n(fields_window%|
00003c80  2c 38 37 30 2c 2d 32 35  30 2d 72 6f 77 25 2a 36  |,870,-250-row%*6|
00003c90  30 2c 31 33 30 2c 34 38  2c 26 37 30 30 46 35 33  |0,130,48,&700F53|
00003ca0  35 2c 22 22 2c 66 69 65  6c 64 5f 64 65 73 25 2b  |5,"",field_des%+|
00003cb0  34 37 2b 31 30 30 2a 72  6f 77 25 2c 2d 31 2c 31  |47+100*row%,-1,1|
00003cc0  32 29 0d 16 9e 68 6c 69  73 74 25 28 72 6f 77 25  |2)...hlist%(row%|
00003cd0  29 20 3d a4 69 63 6f 6e  28 66 69 65 6c 64 73 5f  |) =.icon(fields_|
00003ce0  77 69 6e 64 6f 77 25 2c  31 30 31 30 2c 2d 32 35  |window%,1010,-25|
00003cf0  30 2d 72 6f 77 25 2a 36  30 2c 32 35 30 2c 34 38  |0-row%*60,250,48|
00003d00  2c 26 37 30 30 46 35 33  35 2c 22 22 2c 66 69 65  |,&700F535,"",fie|
00003d10  6c 64 5f 64 65 73 25 2b  36 30 2b 31 30 30 2a 72  |ld_des%+60+100*r|
00003d20  6f 77 25 2c 2d 31 2c 33  38 29 0d 16 a8 05 ed 0d  |ow%,-1,38)......|
00003d30  16 b2 05 20 0d 16 bc 0d  79 25 20 3d 20 2d 31 32  |... ....y% = -12|
00003d40  30 0d 16 c6 10 e3 20 61  25 20 3d 20 30 20 b8 20  |0..... a% = 0 . |
00003d50  35 0d 16 d0 68 20 20 6f  75 74 70 75 74 5f 69 63  |5...h  output_ic|
00003d60  6f 6e 25 28 61 25 29 20  3d 20 20 a4 69 63 6f 6e  |on%(a%) =  .icon|
00003d70  28 6f 75 74 70 75 74 5f  77 69 6e 64 6f 77 25 2c  |(output_window%,|
00003d80  32 30 30 2c 79 25 2d 36  30 2a 61 25 2c 37 30 30  |200,y%-60*a%,700|
00003d90  2c 34 38 2c 26 37 30 30  46 35 33 35 2c 22 22 2c  |,48,&700F535,"",|
00003da0  6f 75 74 70 75 74 5f 6c  69 73 74 25 2b 37 30 2a  |output_list%+70*|
00003db0  61 25 2c 2d 31 2c 36 30  29 0d 16 da 05 ed 0d 16  |a%,-1,60).......|
00003dc0  e4 5a 6f 75 74 70 75 74  5f 69 63 6f 6e 25 28 36  |.Zoutput_icon%(6|
00003dd0  29 20 3d a4 69 63 6f 6e  28 6f 75 74 70 75 74 5f  |) =.icon(output_|
00003de0  77 69 6e 64 6f 77 25 2c  32 38 30 2c 2d 34 38 30  |window%,280,-480|
00003df0  2c 36 32 30 2c 34 38 2c  26 37 30 30 46 35 33 35  |,620,48,&700F535|
00003e00  2c 22 22 2c 73 65 61 72  63 68 5f 6c 69 73 74 25  |,"",search_list%|
00003e10  2c 2d 31 2c 32 30 30 29  0d 16 ee 05 20 0d 16 f8  |,-1,200).... ...|
00003e20  04 0d 17 02 04 0d 17 0c  0d 79 25 20 3d 20 2d 32  |.........y% = -2|
00003e30  36 30 0d 17 16 15 e3 20  61 25 20 3d 20 30 20 b8  |60..... a% = 0 .|
00003e40  20 31 30 20 88 20 32 0d  17 20 60 20 20 73 6f 72  | 10 . 2.. `  sor|
00003e50  74 5f 69 63 6f 6e 25 28  61 25 29 20 3d a4 69 63  |t_icon%(a%) =.ic|
00003e60  6f 6e 28 73 6f 72 74 5f  77 69 6e 64 6f 77 25 2c  |on(sort_window%,|
00003e70  32 30 2c 79 25 2d 33 30  2a 61 25 2c 33 30 30 2c  |20,y%-30*a%,300,|
00003e80  34 38 2c 26 37 30 30 46  35 33 35 2c 22 22 2c 73  |48,&700F535,"",s|
00003e90  6f 72 74 5f 66 69 65 6c  64 25 2b 32 35 2a 61 25  |ort_field%+25*a%|
00003ea0  2c 2d 31 2c 32 30 29 0d  17 2a 6c 20 73 6f 72 74  |,-1,20)..*l sort|
00003eb0  5f 69 63 6f 6e 25 28 61  25 2b 31 29 20 3d a4 69  |_icon%(a%+1) =.i|
00003ec0  63 6f 6e 28 73 6f 72 74  5f 77 69 6e 64 6f 77 25  |con(sort_window%|
00003ed0  2c 34 35 30 2c 79 25 2d  33 30 2a 61 25 2c 35 30  |,450,y%-30*a%,50|
00003ee0  2c 34 38 2c 26 37 30 30  46 35 33 35 2c 22 22 2c  |,48,&700F535,"",|
00003ef0  73 6f 72 74 5f 66 69 65  6c 64 25 2b 32 32 2b 32  |sort_field%+22+2|
00003f00  35 2a 61 25 2c 76 61 6c  69 64 5f 73 6f 72 74 25  |5*a%,valid_sort%|
00003f10  2c 32 29 0d 17 34 05 ed  0d 17 3e 04 0d 17 48 04  |,2)..4....>...H.|
00003f20  0d 17 52 04 0d 17 5c 27  f4 20 74 68 69 73 20 69  |..R...\'. this i|
00003f30  73 20 74 68 65 20 6f 75  74 70 75 74 20 64 69 73  |s the output dis|
00003f40  70 6c 61 79 20 64 69 6e  64 6f 77 0d 17 66 04 0d  |play dindow..f..|
00003f50  17 70 0d 79 25 20 3d 20  2d 31 32 30 0d 17 7a 10  |.p.y% = -120..z.|
00003f60  e3 20 61 25 20 3d 20 30  20 b8 20 35 0d 17 84 5e  |. a% = 0 . 5...^|
00003f70  20 64 25 20 3d 20 20 a4  69 63 6f 6e 28 73 63 72  | d% =  .icon(scr|
00003f80  65 65 6e 5f 77 69 6e 64  6f 77 25 2c 32 30 30 2c  |een_window%,200,|
00003f90  79 25 2d 36 30 2a 61 25  2c 37 30 30 2c 34 38 2c  |y%-60*a%,700,48,|
00003fa0  26 37 30 30 30 35 31 31  2c 22 22 2c 6f 75 74 70  |&7000511,"",outp|
00003fb0  75 74 5f 64 69 73 70 6c  61 79 25 2b 33 30 30 2a  |ut_display%+300*|
00003fc0  61 25 2c 2d 31 2c 32 35  30 29 0d 17 8e 05 ed 0d  |a%,-1,250)......|
00003fd0  17 98 4a 64 25 20 3d a4  69 63 6f 6e 28 73 63 72  |..Jd% =.icon(scr|
00003fe0  65 65 6e 5f 77 69 6e 64  6f 77 25 2c 36 32 30 2c  |een_window%,620,|
00003ff0  2d 36 32 2c 31 35 30 2c  34 38 2c 26 37 30 30 30  |-62,150,48,&7000|
00004000  31 33 35 2c 22 22 2c 6f  75 74 70 75 74 5f 72 65  |135,"",output_re|
00004010  63 25 2c 2d 31 2c 31 32  29 0d 17 a2 47 64 25 20  |c%,-1,12)...Gd% |
00004020  3d a4 69 63 6f 6e 28 73  63 72 65 65 6e 5f 77 69  |=.icon(screen_wi|
00004030  6e 64 6f 77 25 2c 39 30  30 2c 2d 36 32 2c 31 35  |ndow%,900,-62,15|
00004040  30 2c 34 38 2c 26 37 30  30 30 31 33 35 2c 22 22  |0,48,&7000135,""|
00004050  2c 6d 61 74 63 68 65 73  25 2c 2d 31 2c 31 32 29  |,matches%,-1,12)|
00004060  0d 17 ac 05 20 0d 17 b6  04 0d 17 c0 40 f4 20 64  |.... .......@. d|
00004070  25 20 3d 20 46 4e 69 63  6f 6e 28 66 75 6e 63 74  |% = FNicon(funct|
00004080  69 6f 6e 25 2c 31 36 2c  2d 35 30 2c 32 35 30 2c  |ion%,16,-50,250,|
00004090  34 38 2c 26 37 30 30 30  35 31 31 2c 22 22 2c 74  |48,&7000511,"",t|
000040a0  31 25 2c 2d 31 2c 32 30  29 0d 17 ca 05 e1 0d 17  |1%,-1,20).......|
000040b0  d4 04 0d 17 de 04 0d 17  e8 10 dd 20 f2 63 6f 6e  |........... .con|
000040c0  73 74 61 6e 74 73 0d 17  f2 15 20 20 6d 61 78 5f  |stants....  max_|
000040d0  66 69 65 6c 64 73 20 3d  20 31 39 0d 17 fc 17 20  |fields = 19.... |
000040e0  20 6f 76 65 72 5f 73 69  7a 65 20 20 3d 20 31 2e  | over_size  = 1.|
000040f0  32 35 0d 18 06 14 20 20  41 4c 4c 20 20 20 20 20  |25....  ALL     |
00004100  20 20 20 3d 20 b9 0d 18  10 14 20 20 63 61 73 65  |   = .....  case|
00004110  5f 73 65 6e 73 25 20 3d  20 a3 0d 18 1a 14 20 20  |_sens% = .....  |
00004120  63 72 6c 66 25 20 20 20  20 20 20 3d 20 a3 0d 18  |crlf%      = ...|
00004130  24 14 20 20 74 61 62 75  6c 61 74 65 25 20 20 3d  |$.  tabulate%  =|
00004140  20 b9 0d 18 2e 05 e1 0d  18 38 04 0d 18 42 0d dd  | ........8...B..|
00004150  20 f2 63 72 65 61 74 65  0d 18 4c 2d e3 20 61 25  | .create..L-. a%|
00004160  20 3d 20 66 69 65 6c 64  5f 64 65 73 25 20 b8 20  | = field_des% . |
00004170  66 69 65 6c 64 5f 64 65  73 25 20 2b 20 32 31 39  |field_des% + 219|
00004180  36 20 88 20 34 0d 18 56  32 20 20 21 61 25 20 3d  |6 . 4..V2  !a% =|
00004190  20 26 44 30 44 30 44 30  44 20 20 20 20 3a 20 f4  | &D0D0D0D    : .|
000041a0  20 53 45 54 20 54 48 45  20 41 59 59 41 59 20 54  | SET THE AYYAY T|
000041b0  4f 20 45 4d 50 54 59 0d  18 60 05 ed 0d 18 6a 1b  |O EMPTY..`....j.|
000041c0  24 66 69 6c 65 6e 61 6d  65 25 20 3d 20 22 44 61  |$filename% = "Da|
000041d0  74 61 46 69 6c 65 22 0d  18 74 1b 24 70 61 74 68  |taFile"..t.$path|
000041e0  6e 61 6d 65 25 20 3d 20  22 44 61 74 61 46 69 6c  |name% = "DataFil|
000041f0  65 22 0d 18 7e 13 24 70  61 73 73 77 6f 72 64 25  |e"..~.$password%|
00004200  20 3d 20 22 22 0d 18 88  16 24 72 65 63 5f 6e 75  | = ""....$rec_nu|
00004210  6d 62 65 72 25 20 3d 20  22 30 22 0d 18 92 16 24  |mber% = "0"....$|
00004220  73 65 61 72 63 68 5f 6c  69 73 74 25 20 3d 20 22  |search_list% = "|
00004230  22 0d 18 9c 21 f2 6f 70  65 6e 5f 77 69 6e 64 6f  |"...!.open_windo|
00004240  77 28 6e 65 77 66 69 6c  65 5f 77 69 6e 64 6f 77  |w(newfile_window|
00004250  25 29 0d 18 a6 20 f2 6f  70 65 6e 5f 77 69 6e 64  |%)... .open_wind|
00004260  6f 77 28 66 69 65 6c 64  73 5f 77 69 6e 64 6f 77  |ow(fields_window|
00004270  25 29 0d 18 b0 1d 77 69  6e 64 6f 77 25 20 3d 20  |%)....window% = |
00004280  6e 65 77 66 69 6c 65 5f  77 69 6e 64 6f 77 25 0d  |newfile_window%.|
00004290  18 ba 14 6e 65 77 5f 70  6f 73 25 20 3d 20 6e 66  |...new_pos% = nf|
000042a0  5f 31 25 0d 18 c4 0e f2  73 65 74 5f 63 61 72 65  |_1%.....set_care|
000042b0  74 0d 18 ce 05 e1 0d 18  d8 04 0d 18 e2 20 dd 20  |t............ . |
000042c0  f2 65 78 74 72 61 63 74  5f 66 69 65 6c 64 5f 64  |.extract_field_d|
000042d0  65 73 63 72 69 70 74 69  6f 6e 0d 18 ec 0f ea 20  |escription..... |
000042e0  72 65 63 25 2c 70 6f 73  25 0d 18 f6 1b e3 20 72  |rec%,pos%..... r|
000042f0  65 63 25 20 3d 20 30 20  b8 20 6d 61 78 5f 66 69  |ec% = 0 . max_fi|
00004300  65 6c 64 73 0d 19 00 20  20 20 70 6f 73 25 20 3d  |elds...   pos% =|
00004310  20 66 69 65 6c 64 5f 64  65 73 25 2b 72 65 63 25  | field_des%+rec%|
00004320  2a 31 30 30 0d 19 0a 18  20 20 66 24 28 72 65 63  |*100....  f$(rec|
00004330  25 2c 30 29 20 3d 20 24  70 6f 73 25 0d 19 14 23  |%,0) = $pos%...#|
00004340  20 20 70 6f 73 25 20 3d  20 66 69 65 6c 64 5f 64  |  pos% = field_d|
00004350  65 73 25 2b 72 65 63 25  2a 31 30 30 2b 32 32 0d  |es%+rec%*100+22.|
00004360  19 1e 18 20 20 66 24 28  72 65 63 25 2c 31 29 20  |...  f$(rec%,1) |
00004370  3d 20 24 70 6f 73 25 0d  19 28 23 20 20 70 6f 73  |= $pos%..(#  pos|
00004380  25 20 3d 20 66 69 65 6c  64 5f 64 65 73 25 2b 72  |% = field_des%+r|
00004390  65 63 25 2a 31 30 30 2b  32 36 0d 19 32 18 20 20  |ec%*100+26..2.  |
000043a0  66 24 28 72 65 63 25 2c  32 29 20 3d 20 24 70 6f  |f$(rec%,2) = $po|
000043b0  73 25 0d 19 3c 23 20 20  70 6f 73 25 20 3d 20 66  |s%..<#  pos% = f|
000043c0  69 65 6c 64 5f 64 65 73  25 2b 72 65 63 25 2a 31  |ield_des%+rec%*1|
000043d0  30 30 2b 33 32 0d 19 46  18 20 20 66 24 28 72 65  |00+32..F.  f$(re|
000043e0  63 25 2c 33 29 20 3d 20  24 70 6f 73 25 0d 19 50  |c%,3) = $pos%..P|
000043f0  23 20 20 70 6f 73 25 20  3d 20 66 69 65 6c 64 5f  |#  pos% = field_|
00004400  64 65 73 25 2b 72 65 63  25 2a 31 30 30 2b 33 35  |des%+rec%*100+35|
00004410  0d 19 5a 18 20 20 66 24  28 72 65 63 25 2c 34 29  |..Z.  f$(rec%,4)|
00004420  20 3d 20 24 70 6f 73 25  0d 19 64 23 20 20 70 6f  | = $pos%..d#  po|
00004430  73 25 20 3d 20 66 69 65  6c 64 5f 64 65 73 25 2b  |s% = field_des%+|
00004440  72 65 63 25 2a 31 30 30  2b 34 37 0d 19 6e 18 20  |rec%*100+47..n. |
00004450  20 66 24 28 72 65 63 25  2c 35 29 20 3d 20 24 70  | f$(rec%,5) = $p|
00004460  6f 73 25 0d 19 78 23 20  20 70 6f 73 25 20 3d 20  |os%..x#  pos% = |
00004470  66 69 65 6c 64 5f 64 65  73 25 2b 72 65 63 25 2a  |field_des%+rec%*|
00004480  31 30 30 2b 36 30 0d 19  82 18 20 20 66 24 28 72  |100+60....  f$(r|
00004490  65 63 25 2c 36 29 20 3d  20 24 70 6f 73 25 0d 19  |ec%,6) = $pos%..|
000044a0  8c 1a 20 20 e7 20 a9 20  66 24 28 72 65 63 25 2c  |..  . . f$(rec%,|
000044b0  30 29 20 3e 20 30 20 8c  0d 19 96 1f 20 20 20 20  |0) > 0 .....    |
000044c0  20 20 66 69 65 6c 64 5f  75 73 65 64 25 28 72 65  |  field_used%(re|
000044d0  63 25 29 20 3d 20 b9 0d  19 a0 07 20 20 cc 0d 19  |c%) = .....  ...|
000044e0  aa 1f 20 20 20 20 20 20  66 69 65 6c 64 5f 75 73  |..      field_us|
000044f0  65 64 25 28 72 65 63 25  29 20 3d 20 a3 0d 19 b4  |ed%(rec%) = ....|
00004500  07 20 20 cd 0d 19 be 05  ed 0d 19 c8 13 64 3d a4  |.  ..........d=.|
00004510  46 69 65 6c 64 5f 64 65  73 5f 6f 6b 0d 19 d2 05  |Field_des_ok....|
00004520  e1 0d 19 dc 05 20 0d 19  e6 04 0d 19 f0 14 dd 20  |..... ......... |
00004530  a4 66 69 65 6c 64 5f 6e  61 6d 65 5f 6f 6b 0d 19  |.field_name_ok..|
00004540  fa 29 ea 20 72 65 63 25  2c 20 72 65 63 31 25 2c  |.). rec%, rec1%,|
00004550  20 72 65 63 32 25 2c 20  6c 65 6e 67 74 68 25 2c  | rec2%, length%,|
00004560  20 66 69 65 6c 64 25 0d  1a 04 08 6f 6b 3d b9 0d  | field%....ok=..|
00004570  1a 0e 1b e3 20 72 65 63  25 20 3d 20 30 20 b8 20  |.... rec% = 0 . |
00004580  6d 61 78 5f 66 69 65 6c  64 73 0d 1a 18 12 20 20  |max_fields....  |
00004590  20 6c 65 6e 67 74 68 25  20 3d 20 30 0d 1a 22 17  | length% = 0..".|
000045a0  20 20 20 e3 20 66 69 65  6c 64 25 20 3d 20 30 20  |   . field% = 0 |
000045b0  b8 20 36 0d 1a 2c 2f 20  20 20 20 20 6c 65 6e 67  |. 6..,/     leng|
000045c0  74 68 25 20 3d 20 6c 65  6e 67 74 68 25 20 2b 20  |th% = length% + |
000045d0  a9 28 66 24 28 72 65 63  25 2c 66 69 65 6c 64 25  |.(f$(rec%,field%|
000045e0  29 29 0d 1a 36 08 20 20  20 ed 0d 1a 40 28 20 20  |))..6.   ...@(  |
000045f0  20 e7 20 6c 65 6e 67 74  68 25 20 3e 20 30 20 80  | . length% > 0 .|
00004600  20 a9 28 66 24 28 72 65  63 25 2c 30 29 29 3d 30  | .(f$(rec%,0))=0|
00004610  20 8c 0d 1a 4a 10 20 20  20 20 20 20 6f 6b 20 3d  | ...J.      ok =|
00004620  20 a3 0d 1a 54 4b 20 20  20 20 20 20 f2 65 72 72  | ...TK      .err|
00004630  6f 72 5f 6d 65 73 73 61  67 65 28 22 46 69 65 6c  |or_message("Fiel|
00004640  64 20 6e 75 6d 62 65 72  20 22 2b c3 28 72 65 63  |d number "+.(rec|
00004650  25 2b 31 29 2b 22 20 64  6f 65 73 20 6e 6f 74 20  |%+1)+" does not |
00004660  68 61 76 65 20 61 20 6e  61 6d 65 22 29 0d 1a 5e  |have a name")..^|
00004670  08 20 20 20 cd 0d 1a 68  05 ed 0d 1a 72 1e e3 20  |.   ...h....r.. |
00004680  72 65 63 31 25 20 3d 20  30 20 b8 20 6d 61 78 5f  |rec1% = 0 . max_|
00004690  66 69 65 6c 64 73 2d 31  0d 1a 7c 25 20 20 20 e3  |fields-1..|%   .|
000046a0  20 72 65 63 32 25 20 3d  20 72 65 63 31 25 2b 31  | rec2% = rec1%+1|
000046b0  20 b8 20 6d 61 78 5f 66  69 65 6c 64 73 0d 1a 86  | . max_fields...|
000046c0  3a 20 20 20 20 20 e7 20  66 24 28 72 65 63 31 25  |:     . f$(rec1%|
000046d0  2c 30 29 20 3d 20 66 24  28 72 65 63 32 25 2c 30  |,0) = f$(rec2%,0|
000046e0  29 20 80 20 a9 28 66 24  28 72 65 63 32 25 2c 30  |) . .(f$(rec2%,0|
000046f0  29 29 20 3e 30 20 8c 0d  1a 90 11 20 20 20 20 20  |)) >0 .....     |
00004700  20 20 6f 6b 20 3d 20 a3  0d 1a 9a 4c 20 20 20 20  |  ok = ....L    |
00004710  20 20 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  |   .error_messag|
00004720  65 28 22 54 68 65 72 65  20 61 72 65 20 74 77 6f  |e("There are two|
00004730  20 66 69 65 6c 64 73 20  77 69 74 68 20 74 68 65  | fields with the|
00004740  20 6e 61 6d 65 20 22 2b  66 24 28 72 65 63 32 25  | name "+f$(rec2%|
00004750  2c 30 29 29 0d 1a a4 0a  20 20 20 20 20 cd 0d 1a  |,0))....     ...|
00004760  ae 08 20 20 20 ed 0d 1a  b8 05 ed 0d 1a c2 07 3d  |..   ..........=|
00004770  6f 6b 0d 1a cc 05 20 0d  1a d6 04 0d 1a e0 04 0d  |ok.... .........|
00004780  1a ea 13 dd 20 a4 66 69  65 6c 64 5f 6c 65 6e 5f  |.... .field_len_|
00004790  6f 6b 0d 1a f4 0a ea 20  72 65 63 25 0d 1a fe 1b  |ok..... rec%....|
000047a0  e3 20 72 65 63 25 20 3d  20 30 20 b8 20 6d 61 78  |. rec% = 0 . max|
000047b0  5f 66 69 65 6c 64 73 0d  1b 08 18 20 e7 20 a9 28  |_fields.... . .(|
000047c0  66 24 28 72 65 63 25 2c  30 29 29 3e 30 20 8c 0d  |f$(rec%,0))>0 ..|
000047d0  1b 12 1a 20 20 20 e7 20  bb 28 66 24 28 72 65 63  |...   . .(f$(rec|
000047e0  25 2c 32 29 29 3d 30 20  8c 0d 1b 1c 56 20 20 20  |%,2))=0 ....V   |
000047f0  20 20 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  |   .error_messag|
00004800  65 28 22 46 69 65 6c 64  20 27 22 2b 66 24 28 72  |e("Field '"+f$(r|
00004810  65 63 25 2c 30 29 2b 22  27 20 6d 75 73 74 20 68  |ec%,0)+"' must h|
00004820  61 76 65 20 61 20 77 69  64 74 68 20 67 72 65 61  |ave a width grea|
00004830  74 65 72 20 74 68 61 6e  20 7a 65 72 6f 22 29 0d  |ter than zero").|
00004840  1b 26 08 20 20 20 cd 0d  1b 30 41 20 20 20 e7 20  |.&.   ...0A   . |
00004850  28 66 24 28 72 65 63 25  2c 31 29 3d 22 4e 22 20  |(f$(rec%,1)="N" |
00004860  84 20 66 24 28 72 65 63  25 2c 31 29 3d 22 6e 22  |. f$(rec%,1)="n"|
00004870  29 20 80 20 bb 28 66 24  28 72 65 63 25 2c 32 29  |) . .(f$(rec%,2)|
00004880  29 20 3e 20 32 30 20 8c  0d 1b 3a 5d 20 20 20 20  |) > 20 ...:]    |
00004890  20 20 f2 65 72 72 6f 72  5f 6d 65 73 73 61 67 65  |  .error_message|
000048a0  28 22 46 69 65 6c 64 20  27 22 2b 66 24 28 72 65  |("Field '"+f$(re|
000048b0  63 25 2c 30 29 2b 22 27  20 69 73 20 6e 75 6d 65  |c%,0)+"' is nume|
000048c0  72 69 63 20 73 6f 20 69  74 73 20 77 69 64 74 68  |ric so its width|
000048d0  20 6d 75 73 74 20 6e 6f  74 20 65 78 63 65 65 64  | must not exceed|
000048e0  20 32 30 22 29 0d 1b 44  08 20 20 20 cd 0d 1b 4e  | 20")..D.   ...N|
000048f0  07 20 20 cd 0d 1b 58 05  ed 0d 1b 62 06 3d b9 0d  |.  ...X....b.=..|
00004900  1b 6c 04 0d 1b 76 04 0d  1b 80 14 dd 20 a4 66 69  |.l...v...... .fi|
00004910  65 6c 64 5f 74 79 70 65  5f 6f 6b 0d 1b 8a 0a ea  |eld_type_ok.....|
00004920  20 72 65 63 25 0d 1b 94  1b e3 20 72 65 63 25 20  | rec%..... rec% |
00004930  3d 20 30 20 b8 20 6d 61  78 5f 66 69 65 6c 64 73  |= 0 . max_fields|
00004940  0d 1b 9e 2c 20 20 20 e7  20 a9 28 66 24 28 72 65  |...,   . .(f$(re|
00004950  63 25 2c 30 29 29 3e 30  20 80 20 a9 28 66 24 28  |c%,0))>0 . .(f$(|
00004960  72 65 63 25 2c 31 29 29  3d 30 20 8c 0d 1b a8 45  |rec%,1))=0 ....E|
00004970  20 20 20 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |      .error_mes|
00004980  73 61 67 65 28 22 46 69  65 6c 64 20 22 2b 66 24  |sage("Field "+f$|
00004990  28 72 65 63 25 2c 30 29  2b 22 20 64 6f 65 73 20  |(rec%,0)+" does |
000049a0  6e 6f 74 20 68 61 76 65  20 61 20 74 79 70 65 22  |not have a type"|
000049b0  29 0d 1b b2 08 20 20 20  cd 0d 1b bc 05 ed 0d 1b  |)....   ........|
000049c0  c6 06 3d b9 0d 1b d0 04  0d 1b da 04 0d 1b e4 13  |..=.............|
000049d0  dd 20 a4 66 69 65 6c 64  5f 6d 61 78 5f 6f 6b 0d  |. .field_max_ok.|
000049e0  1b ee 0f ea 20 72 65 63  25 2c 20 6f 6b 25 0d 1b  |.... rec%, ok%..|
000049f0  f8 1b e3 20 72 65 63 25  20 3d 20 30 20 b8 20 6d  |... rec% = 0 . m|
00004a00  61 78 5f 66 69 65 6c 64  73 0d 1c 02 3e 20 e7 20  |ax_fields...> . |
00004a10  a9 28 66 24 28 72 65 63  25 2c 30 29 29 3e 30 20  |.(f$(rec%,0))>0 |
00004a20  80 20 28 66 24 28 72 65  63 25 2c 31 29 20 3d 22  |. (f$(rec%,1) ="|
00004a30  4e 22 20 84 20 66 24 28  72 65 63 25 2c 31 29 20  |N" . f$(rec%,1) |
00004a40  3d 22 6e 22 29 20 8c 0d  1c 0c 20 20 20 e7 20 ac  |="n") ....   . .|
00004a50  20 a4 6e 75 6d 65 72 69  63 28 66 24 28 72 65 63  | .numeric(f$(rec|
00004a60  25 2c 34 29 29 20 8c 0d  1c 16 4e 20 20 20 20 f2  |%,4)) ....N    .|
00004a70  65 72 72 6f 72 5f 6d 65  73 73 61 67 65 28 22 46  |error_message("F|
00004a80  69 65 6c 64 20 22 2b 66  24 28 72 65 63 25 2c 30  |ield "+f$(rec%,0|
00004a90  29 2b 22 20 64 6f 65 73  20 6e 6f 74 20 68 61 76  |)+" does not hav|
00004aa0  65 20 61 20 6e 75 6d 65  72 69 63 20 6d 69 6e 69  |e a numeric mini|
00004ab0  6d 75 6d 22 29 0d 1c 20  07 20 20 cd 0d 1c 2a 06  |mum").. .  ...*.|
00004ac0  20 cd 0d 1c 34 05 ed 0d  1c 3e 1b e3 20 72 65 63  | ...4....>.. rec|
00004ad0  25 20 3d 20 30 20 b8 20  6d 61 78 5f 66 69 65 6c  |% = 0 . max_fiel|
00004ae0  64 73 0d 1c 48 3e 20 e7  20 a9 28 66 24 28 72 65  |ds..H> . .(f$(re|
00004af0  63 25 2c 30 29 29 3e 30  20 80 20 28 66 24 28 72  |c%,0))>0 . (f$(r|
00004b00  65 63 25 2c 31 29 20 3d  22 4e 22 20 84 20 66 24  |ec%,1) ="N" . f$|
00004b10  28 72 65 63 25 2c 31 29  20 3d 22 6e 22 29 20 8c  |(rec%,1) ="n") .|
00004b20  0d 1c 52 20 20 20 e7 20  ac 20 a4 6e 75 6d 65 72  |..R   . . .numer|
00004b30  69 63 28 66 24 28 72 65  63 25 2c 35 29 29 20 8c  |ic(f$(rec%,5)) .|
00004b40  0d 1c 5c 4e 20 20 20 20  f2 65 72 72 6f 72 5f 6d  |..\N    .error_m|
00004b50  65 73 73 61 67 65 28 22  46 69 65 6c 64 20 22 2b  |essage("Field "+|
00004b60  66 24 28 72 65 63 25 2c  30 29 2b 22 20 64 6f 65  |f$(rec%,0)+" doe|
00004b70  73 20 6e 6f 74 20 68 61  76 65 20 61 20 6e 75 6d  |s not have a num|
00004b80  65 72 69 63 20 6d 61 78  69 6d 75 6d 22 29 0d 1c  |eric maximum")..|
00004b90  66 07 20 20 cd 0d 1c 70  06 20 cd 0d 1c 7a 05 ed  |f.  ...p. ...z..|
00004ba0  0d 1c 84 08 3d 6f 6b 25  0d 1c 8e 04 0d 1c 98 04  |....=ok%........|
00004bb0  0d 1c a2 14 dd 20 a4 66  69 65 6c 64 5f 64 61 74  |..... .field_dat|
00004bc0  65 5f 6f 6b 0d 1c ac 0f  ea 20 72 65 63 25 2c 20  |e_ok..... rec%, |
00004bd0  6f 6b 25 0d 1c b6 1b e3  20 72 65 63 25 20 3d 20  |ok%..... rec% = |
00004be0  30 20 b8 20 6d 61 78 5f  66 69 65 6c 64 73 0d 1c  |0 . max_fields..|
00004bf0  c0 3f 20 e7 20 a9 28 66  24 28 72 65 63 25 2c 30  |.? . .(f$(rec%,0|
00004c00  29 29 3e 30 20 80 20 28  66 24 28 72 65 63 25 2c  |))>0 . (f$(rec%,|
00004c10  31 29 20 3d 22 44 22 20  84 20 66 24 28 72 65 63  |1) ="D" . f$(rec|
00004c20  25 2c 31 29 20 3d 22 64  22 29 20 20 8c 0d 1c ca  |%,1) ="d")  ....|
00004c30  36 20 20 e7 20 ac 20 a4  76 61 6c 69 64 5f 64 61  |6  . . .valid_da|
00004c40  74 65 28 66 24 28 72 65  63 25 2c 34 29 29 20 80  |te(f$(rec%,4)) .|
00004c50  20 a9 28 66 24 28 72 65  63 25 2c 34 29 29 3e 30  | .(f$(rec%,4))>0|
00004c60  20 20 8c 0d 1c d4 5c 20  20 20 20 f2 65 72 72 6f  |  ....\    .erro|
00004c70  72 5f 6d 65 73 73 61 67  65 28 22 46 69 65 6c 64  |r_message("Field|
00004c80  20 22 2b 66 24 28 72 65  63 25 2c 30 29 2b 22 20  | "+f$(rec%,0)+" |
00004c90  64 6f 65 73 20 6e 6f 74  20 68 61 76 65 20 61 20  |does not have a |
00004ca0  63 6f 72 72 65 63 74 6c  79 20 66 6f 72 6d 65 64  |correctly formed|
00004cb0  20 6d 69 6e 69 6d 75 6d  20 64 61 74 65 22 29 0d  | minimum date").|
00004cc0  1c de 07 20 20 cd 0d 1c  e8 06 20 cd 0d 1c f2 05  |...  ..... .....|
00004cd0  ed 0d 1c fc 1b e3 20 72  65 63 25 20 3d 20 30 20  |...... rec% = 0 |
00004ce0  b8 20 6d 61 78 5f 66 69  65 6c 64 73 0d 1d 06 3e  |. max_fields...>|
00004cf0  20 e7 20 a9 28 66 24 28  72 65 63 25 2c 30 29 29  | . .(f$(rec%,0))|
00004d00  3e 30 20 80 20 28 66 24  28 72 65 63 25 2c 31 29  |>0 . (f$(rec%,1)|
00004d10  20 3d 22 64 22 20 84 20  66 24 28 72 65 63 25 2c  | ="d" . f$(rec%,|
00004d20  31 29 20 3d 22 44 22 29  20 8c 0d 1d 10 35 20 20  |1) ="D") ....5  |
00004d30  e7 20 ac 20 a4 76 61 6c  69 64 5f 64 61 74 65 28  |. . .valid_date(|
00004d40  66 24 28 72 65 63 25 2c  35 29 29 20 80 20 a9 28  |f$(rec%,5)) . .(|
00004d50  66 24 28 72 65 63 25 2c  35 29 29 3e 30 20 8c 0d  |f$(rec%,5))>0 ..|
00004d60  1d 1a 5c 20 20 20 20 f2  65 72 72 6f 72 5f 6d 65  |..\    .error_me|
00004d70  73 73 61 67 65 28 22 46  69 65 6c 64 20 22 2b 66  |ssage("Field "+f|
00004d80  24 28 72 65 63 25 2c 30  29 2b 22 20 64 6f 65 73  |$(rec%,0)+" does|
00004d90  20 6e 6f 74 20 68 61 76  65 20 61 20 63 6f 72 72  | not have a corr|
00004da0  65 63 74 6c 79 20 66 6f  72 6d 65 64 20 6d 61 78  |ectly formed max|
00004db0  69 6d 75 6d 20 64 61 74  65 22 29 0d 1d 24 07 20  |imum date")..$. |
00004dc0  20 cd 0d 1d 2e 06 20 cd  0d 1d 38 05 ed 0d 1d 42  | ..... ...8....B|
00004dd0  08 3d 6f 6b 25 0d 1d 4c  04 0d 1d 56 04 0d 1d 60  |.=ok%..L...V...`|
00004de0  04 0d 1d 6a 04 0d 1d 74  13 dd 20 a4 46 69 65 6c  |...j...t.. .Fiel|
00004df0  64 5f 64 65 73 5f 6f 6b  0d 1d 7e 5b e7 20 a4 66  |d_des_ok..~[. .f|
00004e00  69 65 6c 64 5f 6e 61 6d  65 5f 6f 6b 20 80 20 a4  |ield_name_ok . .|
00004e10  66 69 65 6c 64 5f 6c 65  6e 5f 6f 6b 20 80 20 a4  |field_len_ok . .|
00004e20  66 69 65 6c 64 5f 74 79  70 65 5f 6f 6b 20 80 20  |field_type_ok . |
00004e30  a4 66 69 65 6c 64 5f 6d  61 78 5f 6f 6b 20 80 20  |.field_max_ok . |
00004e40  a4 66 69 65 6c 64 5f 64  61 74 65 5f 6f 6b 20 20  |.field_date_ok  |
00004e50  20 20 8c 0d 1d 88 09 20  20 3d 20 b9 0d 1d 92 05  |  .....  = .....|
00004e60  cc 0d 1d 9c 08 20 20 3d  a3 0d 1d a6 05 cd 0d 1d  |.....  =........|
00004e70  b0 05 20 0d 1d ba 04 0d  1d c4 15 dd 20 a4 6e 75  |.. ......... .nu|
00004e80  6d 65 72 69 63 28 74 65  78 74 24 29 0d 1d ce 0d  |meric(text$)....|
00004e90  ea 20 69 25 2c 20 6f 6b  25 0d 1d d8 09 6f 6b 25  |. i%, ok%....ok%|
00004ea0  3d b9 0d 1d e2 14 e7 20  a9 28 74 65 78 74 24 29  |=...... .(text$)|
00004eb0  20 3e 20 30 20 8c 0d 1d  ec 19 20 20 e3 20 69 25  | > 0 .....  . i%|
00004ec0  20 3d 20 31 20 b8 20 a9  28 74 65 78 74 24 29 0d  | = 1 . .(text$).|
00004ed0  1d f6 19 20 20 20 20 63  24 20 3d 20 c1 74 65 78  |...    c$ = .tex|
00004ee0  74 24 2c 69 25 2c 31 29  0d 1e 00 2d 20 20 20 20  |t$,i%,1)...-    |
00004ef0  e7 20 63 24 20 3c 22 2e  22 20 84 20 63 24 3e 22  |. c$ <"." . c$>"|
00004f00  39 22 20 84 20 63 24 3d  22 2f 22 20 8c 20 6f 6b  |9" . c$="/" . ok|
00004f10  25 20 3d 20 a3 0d 1e 0a  07 20 20 ed 0d 1e 14 05  |% = .....  .....|
00004f20  cd 0d 1e 1e 09 3d 20 6f  6b 25 0d 1e 28 04 0d 1e  |.....= ok%..(...|
00004f30  32 18 dd 20 a4 76 61 6c  69 64 5f 64 61 74 65 28  |2.. .valid_date(|
00004f40  64 61 74 65 24 29 0d 1e  3c 1e ea 20 6f 6b 25 2c  |date$)..<.. ok%,|
00004f50  20 64 61 79 25 2c 20 6d  6f 6e 74 68 25 2c 20 79  | day%, month%, y|
00004f60  65 61 72 25 0d 1e 46 35  6f 6b 25 20 3d 20 b9 20  |ear%..F5ok% = . |
00004f70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3a 20  |              : |
00004f80  f4 20 61 6c 6c 6f 77 20  7a 65 72 6f 20 6e 75 6c  |. allow zero nul|
00004f90  6c 20 65 6e 74 72 69 65  73 0d 1e 50 13 e7 20 a9  |l entries..P.. .|
00004fa0  28 64 61 74 65 24 29 20  3e 30 20 8c 0d 1e 5a 14  |(date$) >0 ...Z.|
00004fb0  e7 20 a9 28 64 61 74 65  24 29 20 3c 3e 38 20 8c  |. .(date$) <>8 .|
00004fc0  0d 1e 64 0c 20 6f 6b 25  20 3d 20 a3 0d 1e 6e 05  |..d. ok% = ...n.|
00004fd0  cc 0d 1e 78 19 20 20 64  61 79 25 20 3d 20 bb 28  |...x.  day% = .(|
00004fe0  c0 64 61 74 65 24 2c 32  29 29 0d 1e 82 1d 20 20  |.date$,2))....  |
00004ff0  6d 6f 6e 74 68 25 20 3d  20 bb 28 c1 64 61 74 65  |month% = .(.date|
00005000  24 2c 34 2c 32 29 29 0d  1e 8c 1d 20 20 79 65 61  |$,4,2))....  yea|
00005010  72 25 20 20 3d 20 bb 28  c1 64 61 74 65 24 2c 37  |r%  = .(.date$,7|
00005020  2c 32 29 29 0d 1e 96 17  20 20 e7 20 79 65 61 72  |,2))....  . year|
00005030  25 20 83 20 34 20 3d 20  30 20 8c 0d 1e a0 1a 20  |% . 4 = 0 ..... |
00005040  20 20 20 20 64 61 79 73  5f 69 6e 5f 66 65 62 25  |    days_in_feb%|
00005050  20 3d 20 32 39 0d 1e aa  07 20 20 cc 0d 1e b4 1a  | = 29....  .....|
00005060  20 20 20 20 20 64 61 79  73 5f 69 6e 5f 66 65 62  |     days_in_feb|
00005070  25 20 3d 20 32 38 0d 1e  be 07 20 20 cd 0d 1e c8  |% = 28....  ....|
00005080  2a 20 20 e7 20 28 64 61  79 25 20 3e 20 33 31 29  |*  . (day% > 31)|
00005090  20 84 20 28 64 61 79 25  20 3c 20 31 29 20 8c 20  | . (day% < 1) . |
000050a0  6f 6b 25 20 3d 20 a3 0d  1e d2 2d 20 20 e7 20 28  |ok% = ....-  . (|
000050b0  6d 6f 6e 74 68 25 20 3e  31 32 29 20 84 20 28 6d  |month% >12) . (m|
000050c0  6f 6e 74 68 25 20 3c 20  31 29 20 8c 20 6f 6b 25  |onth% < 1) . ok%|
000050d0  20 3d 20 a3 0d 1e dc 11  20 20 c8 8e 20 6d 6f 6e  | = .....  .. mon|
000050e0  74 68 25 20 ca 0d 1e e6  2a 20 20 20 20 c9 20 34  |th% ....*    . 4|
000050f0  2c 36 2c 39 2c 31 31 20  3a 20 e7 20 64 61 79 25  |,6,9,11 : . day%|
00005100  20 3e 20 33 30 20 8c 20  6f 6b 25 20 3d 20 a3 0d  | > 30 . ok% = ..|
00005110  1e f0 34 20 20 20 20 c9  20 32 20 20 20 20 20 20  |..4    . 2      |
00005120  20 20 3a 20 e7 20 64 61  79 25 20 3e 20 64 61 79  |  : . day% > day|
00005130  73 5f 69 6e 5f 66 65 62  25 20 8c 20 6f 6b 25 20  |s_in_feb% . ok% |
00005140  3d 20 a3 0d 1e fa 07 20  20 cb 0d 1f 04 05 cd 0d  |= .....  .......|
00005150  1f 0e 05 cd 0d 1f 18 08  3d 6f 6b 25 0d 1f 22 04  |........=ok%..".|
00005160  0d 1f 2c 04 0d 1f 36 11  dd 20 f2 73 74 61 72 74  |..,...6.. .start|
00005170  5f 64 72 61 67 0d 1f 40  11 20 20 ea 20 77 65 78  |_drag..@.  . wex|
00005180  25 2c 77 65 79 25 0d 1f  4a 1f 20 20 21 62 6c 6f  |%,wey%..J.  !blo|
00005190  63 6b 25 20 3d 20 6e 65  77 66 69 6c 65 5f 77 69  |ck% = newfile_wi|
000051a0  6e 64 6f 77 25 0d 1f 54  25 20 20 c8 99 22 57 69  |ndow%..T%  .."Wi|
000051b0  6d 70 5f 47 65 74 57 69  6e 64 6f 77 53 74 61 74  |mp_GetWindowStat|
000051c0  65 22 2c 2c 62 6c 6f 63  6b 25 0d 1f 5e 21 20 20  |e",,block%..^!  |
000051d0  77 65 78 25 20 3d 20 62  6c 6f 63 6b 25 21 34 20  |wex% = block%!4 |
000051e0  2d 20 62 6c 6f 63 6b 25  21 32 30 0d 1f 68 22 20  |- block%!20..h" |
000051f0  20 77 65 79 25 20 3d 20  62 6c 6f 63 6b 25 21 31  | wey% = block%!1|
00005200  36 20 2d 20 62 6c 6f 63  6b 25 21 32 34 0d 1f 72  |6 - block%!24..r|
00005210  30 20 20 62 6c 6f 63 6b  25 21 34 20 3d 20 32 20  |0  block%!4 = 2 |
00005220  3a 20 f4 20 69 63 6f 6e  20 68 61 6e 64 6c 65 20  |: . icon handle |
00005230  66 6f 72 20 64 72 61 67  20 69 63 6f 6e 0d 1f 7c  |for drag icon..||
00005240  23 20 20 c8 99 22 57 69  6d 70 5f 47 65 74 49 63  |#  .."Wimp_GetIc|
00005250  6f 6e 53 74 61 74 65 22  2c 2c 62 6c 6f 63 6b 25  |onState",,block%|
00005260  0d 1f 86 1f 20 20 21 62  6c 6f 63 6b 25 20 3d 20  |....  !block% = |
00005270  6e 65 77 66 69 6c 65 5f  77 69 6e 64 6f 77 25 0d  |newfile_window%.|
00005280  1f 90 12 20 20 62 6c 6f  63 6b 25 21 34 20 3d 20  |...  block%!4 = |
00005290  35 0d 1f 9a 1f 20 20 62  6c 6f 63 6b 25 21 38 20  |5....  block%!8 |
000052a0  3d 20 62 6c 6f 63 6b 25  21 38 20 2b 77 65 78 25  |= block%!8 +wex%|
000052b0  0d 1f a4 21 20 20 62 6c  6f 63 6b 25 21 31 32 20  |...!  block%!12 |
000052c0  3d 20 62 6c 6f 63 6b 25  21 31 32 20 2b 77 65 79  |= block%!12 +wey|
000052d0  25 0d 1f ae 21 20 20 62  6c 6f 63 6b 25 21 31 36  |%...!  block%!16|
000052e0  20 3d 20 62 6c 6f 63 6b  25 21 31 36 20 2b 77 65  | = block%!16 +we|
000052f0  78 25 0d 1f b8 21 20 20  62 6c 6f 63 6b 25 21 32  |x%...!  block%!2|
00005300  30 20 3d 20 62 6c 6f 63  6b 25 21 32 30 20 2b 77  |0 = block%!20 +w|
00005310  65 79 25 0d 1f c2 13 20  20 62 6c 6f 63 6b 25 21  |ey%....  block%!|
00005320  32 34 20 3d 20 30 0d 1f  cc 13 20 20 62 6c 6f 63  |24 = 0....  bloc|
00005330  6b 25 21 32 38 20 3d 20  30 0d 1f d6 1b 20 20 62  |k%!28 = 0....  b|
00005340  6c 6f 63 6b 25 21 33 32  20 3d 20 26 37 46 46 46  |lock%!32 = &7FFF|
00005350  46 46 46 46 0d 1f e0 1b  20 20 62 6c 6f 63 6b 25  |FFFF....  block%|
00005360  21 33 36 20 3d 20 26 37  46 46 46 46 46 46 46 0d  |!36 = &7FFFFFFF.|
00005370  1f ea 1e 20 20 c8 99 22  57 69 6d 70 5f 44 72 61  |...  .."Wimp_Dra|
00005380  67 42 6f 78 22 2c 2c 62  6c 6f 63 6b 25 0d 1f f4  |gBox",,block%...|
00005390  05 e1 0d 1f fe 04 0d 20  08 04 0d 20 12 0f dd 20  |....... ... ... |
000053a0  f2 6e 65 77 5f 73 61 76  65 0d 20 1c 1e f2 65 78  |.new_save. ...ex|
000053b0  74 72 61 63 74 5f 66 69  65 6c 64 5f 64 65 73 63  |tract_field_desc|
000053c0  72 69 70 74 69 6f 6e 0d  20 26 19 6e 75 6d 62 65  |ription. &.numbe|
000053d0  72 5f 6f 66 5f 66 69 65  6c 64 73 25 20 3d 20 30  |r_of_fields% = 0|
000053e0  0d 20 30 1b e3 20 72 65  63 25 20 3d 20 30 20 b8  |. 0.. rec% = 0 .|
000053f0  20 6d 61 78 5f 66 69 65  6c 64 73 0d 20 3a 1b 20  | max_fields. :. |
00005400  20 e7 20 a9 28 66 24 28  72 65 63 25 2c 30 29 29  | . .(f$(rec%,0))|
00005410  20 3e 20 30 20 8c 0d 20  44 1e 20 20 20 20 20 6e  | > 0 .. D.     n|
00005420  75 6d 62 65 72 5f 6f 66  5f 66 69 65 6c 64 73 25  |umber_of_fields%|
00005430  20 2b 3d 31 0d 20 4e 07  20 20 cd 0d 20 58 05 ed  | +=1. N.  .. X..|
00005440  0d 20 62 1d e7 20 6e 75  6d 62 65 72 5f 6f 66 5f  |. b.. number_of_|
00005450  66 69 65 6c 64 73 25 20  3d 20 30 20 8c 0d 20 6c  |fields% = 0 .. l|
00005460  41 20 20 20 f2 65 72 72  6f 72 5f 6d 65 73 73 61  |A   .error_messa|
00005470  67 65 28 22 54 68 65 72  65 20 6d 75 73 74 20 62  |ge("There must b|
00005480  65 20 61 74 20 6c 65 61  73 74 20 6f 6e 65 20 66  |e at least one f|
00005490  69 65 6c 64 20 64 65 66  69 6e 65 64 22 29 0d 20  |ield defined"). |
000054a0  76 05 cc 0d 20 80 23 c8  99 22 57 69 6d 70 5f 47  |v... .#.."Wimp_G|
000054b0  65 74 50 6f 69 6e 74 65  72 49 6e 66 6f 22 2c 2c  |etPointerInfo",,|
000054c0  62 6c 6f 63 6b 25 0d 20  8a 12 62 6c 6f 63 6b 25  |block%. ..block%|
000054d0  21 32 30 20 3d 20 36 34  0d 20 94 11 62 6c 6f 63  |!20 = 64. ..bloc|
000054e0  6b 25 21 33 32 20 3d 20  30 0d 20 9e 11 62 6c 6f  |k%!32 = 0. ..blo|
000054f0  63 6b 25 21 33 36 20 3d  20 31 0d 20 a8 19 62 6c  |ck%!36 = 1. ..bl|
00005500  6f 63 6b 25 21 34 30 20  3d 20 62 6c 6f 63 6b 25  |ock%!40 = block%|
00005510  21 31 32 0d 20 b2 19 62  6c 6f 63 6b 25 21 34 34  |!12. ..block%!44|
00005520  20 3d 20 62 6c 6f 63 6b  25 21 31 36 0d 20 bc 17  | = block%!16. ..|
00005530  62 6c 6f 63 6b 25 21 34  38 20 3d 20 21 62 6c 6f  |block%!48 = !blo|
00005540  63 6b 25 0d 20 c6 18 62  6c 6f 63 6b 25 21 35 32  |ck%. ..block%!52|
00005550  20 3d 20 62 6c 6f 63 6b  25 21 34 0d 20 d0 2a 62  | = block%!4. .*b|
00005560  6c 6f 63 6b 25 21 35 36  20 3d 20 31 30 30 30 30  |lock%!56 = 10000|
00005570  20 3a 20 f4 20 73 69 7a  65 20 6f 66 20 74 68 65  | : . size of the|
00005580  20 66 69 6c 65 0d 20 da  2f 62 6c 6f 63 6b 25 21  | file. ./block%!|
00005590  36 30 20 3d 20 26 37 37  38 20 20 3a 20 f4 20 66  |60 = &778  : . f|
000055a0  69 6c 65 20 74 79 70 65  20 6f 66 20 74 68 65 20  |ile type of the |
000055b0  66 69 6c 65 0d 20 e4 1d  24 28 62 6c 6f 63 6b 25  |file. ..$(block%|
000055c0  2b 36 34 29 20 3d 20 24  66 69 6c 65 6e 61 6d 65  |+64) = $filename|
000055d0  25 0d 20 ee 22 3f 28 62  6c 6f 63 6b 25 2b 36 35  |%. ."?(block%+65|
000055e0  2b a9 28 24 66 69 6c 65  6e 61 6d 65 25 29 29 20  |+.($filename%)) |
000055f0  3d 20 30 0d 20 f8 39 c8  99 22 57 69 6d 70 5f 53  |= 0. .9.."Wimp_S|
00005600  65 6e 64 4d 65 73 73 61  67 65 22 2c 31 37 2c 62  |endMessage",17,b|
00005610  6c 6f 63 6b 25 2b 32 30  2c 62 6c 6f 63 6b 25 21  |lock%+20,block%!|
00005620  31 32 2c 62 6c 6f 63 6b  25 21 31 36 0d 21 02 05  |12,block%!16.!..|
00005630  cd 0d 21 0c 05 e1 0d 21  16 04 0d 21 20 13 dd 20  |..!....!...! .. |
00005640  a4 67 65 74 5f 6e 61 6d  65 28 50 25 29 0d 21 2a  |.get_name(P%).!*|
00005650  09 41 24 3d 22 22 0d 21  34 18 c8 95 20 3f 50 25  |.A$="".!4... ?P%|
00005660  3c 3e 30 20 80 20 3f 50  25 3c 3e 20 31 33 0d 21  |<>0 . ?P%<> 13.!|
00005670  3e 17 20 41 24 20 3d 20  41 24 2b bd 3f 50 25 3a  |>. A$ = A$+.?P%:|
00005680  50 25 2b 3d 31 0d 21 48  05 ce 0d 21 52 07 3d 41  |P%+=1.!H...!R.=A|
00005690  24 0d 21 5c 04 0d 21 66  04 0d 21 70 12 dd 20 a4  |$.!\..!f..!p.. .|
000056a0  6c 65 61 66 28 70 61 74  68 24 29 0d 21 7a 12 c8  |leaf(path$).!z..|
000056b0  95 20 a7 70 61 74 68 24  2c 22 2e 22 29 0d 21 84  |. .path$,".").!.|
000056c0  1f 70 61 74 68 24 3d c1  70 61 74 68 24 2c a7 70  |.path$=.path$,.p|
000056d0  61 74 68 24 2c 22 2e 22  29 2b 31 29 0d 21 8e 05  |ath$,".")+1).!..|
000056e0  ce 0d 21 98 0a 3d 70 61  74 68 24 0d 21 a2 04 0d  |..!..=path$.!...|
000056f0  21 ac 04 0d 21 b6 12 dd  20 f2 64 61 74 61 73 61  |!...!... .datasa|
00005700  76 65 28 62 29 0d 21 c0  0f e7 20 6c 6f 61 64 65  |ve(b).!... loade|
00005710  64 25 20 8c 0d 21 ca 15  e3 20 69 25 20 3d 20 30  |d% ..!... i% = 0|
00005720  20 b8 20 39 36 20 88 20  34 0d 21 d4 1e 20 20 6d  | . 96 . 4.!..  m|
00005730  65 73 73 61 67 65 5f 62  6c 6f 63 6b 25 21 69 25  |essage_block%!i%|
00005740  20 3d 20 62 21 69 25 0d  21 de 05 ed 0d 21 e8 39  | = b!i%.!....!.9|
00005750  f4 20 63 6f 70 79 20 74  68 65 20 6d 65 73 73 61  |. copy the messa|
00005760  67 65 20 62 6c 6f 63 6b  20 73 69 6e 63 65 20 77  |ge block since w|
00005770  69 6d 70 20 70 6f 6c 6c  20 63 75 72 72 75 70 74  |imp poll currupt|
00005780  73 20 69 74 21 0d 21 f2  31 f2 70 72 6f 64 75 63  |s it!.!.1.produc|
00005790  65 5f 6f 75 74 70 75 74  28 a4 67 65 74 5f 6e 61  |e_output(.get_na|
000057a0  6d 65 28 6d 65 73 73 61  67 65 5f 62 6c 6f 63 6b  |me(message_block|
000057b0  25 2b 34 34 29 29 0d 21  fc 36 e7 20 a4 67 65 74  |%+44)).!.6. .get|
000057c0  5f 6e 61 6d 65 28 6d 65  73 73 61 67 65 5f 62 6c  |_name(message_bl|
000057d0  6f 63 6b 25 2b 34 34 29  20 3c 3e 20 22 3c 57 69  |ock%+44) <> "<Wi|
000057e0  6d 70 24 53 63 72 61 70  3e 22 20 8c 0d 22 06 36  |mp$Scrap>" ..".6|
000057f0  20 20 24 74 65 78 74 5f  66 69 6c 65 5f 6e 61 6d  |  $text_file_nam|
00005800  65 25 20 20 3d 20 a4 67  65 74 5f 6e 61 6d 65 28  |e%  = .get_name(|
00005810  6d 65 73 73 61 67 65 5f  62 6c 6f 63 6b 25 2b 34  |message_block%+4|
00005820  34 29 0d 22 10 05 cd 0d  22 1a 26 6d 65 73 73 61  |4)."....".&messa|
00005830  67 65 5f 62 6c 6f 63 6b  25 21 31 32 3d 6d 65 73  |ge_block%!12=mes|
00005840  73 61 67 65 5f 62 6c 6f  63 6b 25 21 38 0d 22 24  |sage_block%!8."$|
00005850  17 6d 65 73 73 61 67 65  5f 62 6c 6f 63 6b 25 21  |.message_block%!|
00005860  31 36 3d 33 0d 22 2e 18  21 6d 65 73 73 61 67 65  |16=3."..!message|
00005870  5f 62 6c 6f 63 6b 25 20  3d 20 36 34 0d 22 38 4e  |_block% = 64."8N|
00005880  c8 99 22 57 69 6d 70 5f  53 65 6e 64 4d 65 73 73  |.."Wimp_SendMess|
00005890  61 67 65 22 2c 31 37 2c  6d 65 73 73 61 67 65 5f  |age",17,message_|
000058a0  62 6c 6f 63 6b 25 2c 6d  65 73 73 61 67 65 5f 62  |block%,message_b|
000058b0  6c 6f 63 6b 25 21 32 30  2c 6d 65 73 73 61 67 65  |lock%!20,message|
000058c0  5f 62 6c 6f 63 6b 25 21  32 34 0d 22 42 04 0d 22  |_block%!24."B.."|
000058d0  4c 05 cc 0d 22 56 1c f2  73 61 76 65 69 74 28 a4  |L..."V..saveit(.|
000058e0  67 65 74 5f 6e 61 6d 65  28 62 2b 34 34 29 29 0d  |get_name(b+44)).|
000058f0  22 60 20 24 70 61 74 68  6e 61 6d 65 25 20 3d 20  |"` $pathname% = |
00005900  a4 67 65 74 5f 6e 61 6d  65 28 62 2b 34 34 29 0d  |.get_name(b+44).|
00005910  22 6a 22 24 66 69 6c 65  6e 61 6d 65 25 20 3d 20  |"j"$filename% = |
00005920  a4 6c 65 61 66 28 24 70  61 74 68 6e 61 6d 65 25  |.leaf($pathname%|
00005930  29 0d 22 74 0c 62 21 31  32 3d 62 21 38 0d 22 7e  |)."t.b!12=b!8."~|
00005940  0a 62 21 31 36 3d 33 0d  22 88 0b 21 62 20 3d 20  |.b!16=3."..!b = |
00005950  36 34 0d 22 92 27 c8 99  22 57 69 6d 70 5f 53 65  |64.".'.."Wimp_Se|
00005960  6e 64 4d 65 73 73 61 67  65 22 2c 31 37 2c 62 2c  |ndMessage",17,b,|
00005970  62 21 32 30 2c 62 21 32  34 0d 22 9c 05 cd 0d 22  |b!20,b!24."...."|
00005980  a6 05 e1 0d 22 b0 04 0d  22 ba 04 0d 22 c4 04 0d  |...."..."..."...|
00005990  22 ce 14 dd 20 f2 73 61  76 65 69 74 28 6e 61 6d  |"... .saveit(nam|
000059a0  65 24 29 0d 22 d8 26 f4  20 54 68 69 73 20 73 61  |e$).".&. This sa|
000059b0  76 65 73 20 61 20 66 69  6c 65 20 74 68 65 20 66  |ves a file the f|
000059c0  69 72 73 74 20 74 69 6d  65 0d 22 e2 0b ea 20 20  |irst time."...  |
000059d0  72 65 63 25 0d 22 ec 14  66 69 6c 65 25 20 3d 20  |rec%."..file% = |
000059e0  ae 28 6e 61 6d 65 24 29  0d 22 f6 2d e3 20 61 25  |.(name$).".-. a%|
000059f0  20 3d 20 66 69 65 6c 64  5f 64 65 73 25 20 b8 20  | = field_des% . |
00005a00  66 69 65 6c 64 5f 64 65  73 25 20 2b 20 32 31 39  |field_des% + 219|
00005a10  36 20 88 20 34 0d 23 00  11 20 20 f1 23 66 69 6c  |6 . 4.#..  .#fil|
00005a20  65 25 2c 21 61 25 0d 23  0a 05 ed 0d 23 14 1f 63  |e%,!a%.#....#..c|
00005a30  75 72 72 65 6e 74 5f 66  69 65 6c 64 5f 76 61 6c  |urrent_field_val|
00005a40  75 65 24 28 29 20 3d 20  22 22 0d 23 1e 19 6e 75  |ue$() = "".#..nu|
00005a50  6d 62 65 72 5f 6f 66 5f  66 69 65 6c 64 73 25 20  |mber_of_fields% |
00005a60  3d 20 30 0d 23 28 1a 6e  75 6d 62 65 72 5f 6f 66  |= 0.#(.number_of|
00005a70  5f 72 65 63 6f 72 64 73  25 20 3d 20 31 0d 23 32  |_records% = 1.#2|
00005a80  14 72 65 63 6f 72 64 5f  73 69 7a 65 25 20 3d 20  |.record_size% = |
00005a90  30 0d 23 3c 1b e3 20 72  65 63 25 20 3d 20 30 20  |0.#<.. rec% = 0 |
00005aa0  b8 20 6d 61 78 5f 66 69  65 6c 64 73 0d 23 46 2f  |. max_fields.#F/|
00005ab0  20 20 72 65 63 6f 72 64  5f 73 69 7a 65 25 3d 72  |  record_size%=r|
00005ac0  65 63 6f 72 64 5f 73 69  7a 65 25 2b bb 28 66 24  |ecord_size%+.(f$|
00005ad0  28 72 65 63 25 2c 32 29  29 2b 32 0d 23 50 1b 20  |(rec%,2))+2.#P. |
00005ae0  20 e7 20 a9 28 66 24 28  72 65 63 25 2c 30 29 29  | . .(f$(rec%,0))|
00005af0  20 3e 20 30 20 8c 0d 23  5a 1e 20 20 20 20 20 6e  | > 0 ..#Z.     n|
00005b00  75 6d 62 65 72 5f 6f 66  5f 66 69 65 6c 64 73 25  |umber_of_fields%|
00005b10  20 2b 3d 31 0d 23 64 07  20 20 cd 0d 23 6e 05 ed  | +=1.#d.  ..#n..|
00005b20  0d 23 78 2a 72 65 63 6f  72 64 5f 73 69 7a 65 25  |.#x*record_size%|
00005b30  3d 32 30 2b 72 65 63 6f  72 64 5f 73 69 7a 65 25  |=20+record_size%|
00005b40  2a 6f 76 65 72 5f 73 69  7a 65 0d 23 82 17 f1 20  |*over_size.#... |
00005b50  23 66 69 6c 65 25 2c 24  70 61 73 73 77 6f 72 64  |#file%,$password|
00005b60  25 0d 23 8c 18 f1 20 23  66 69 6c 65 25 2c 20 24  |%.#... #file%, $|
00005b70  66 69 6c 65 6e 61 6d 65  25 0d 23 96 20 f1 20 23  |filename%.#. . #|
00005b80  66 69 6c 65 25 2c 20 6e  75 6d 62 65 72 5f 6f 66  |file%, number_of|
00005b90  5f 72 65 63 6f 72 64 73  25 0d 23 a0 1a f1 20 23  |_records%.#... #|
00005ba0  66 69 6c 65 25 2c 20 72  65 63 6f 72 64 5f 73 69  |file%, record_si|
00005bb0  7a 65 25 0d 23 aa 1f f1  20 23 66 69 6c 65 25 2c  |ze%.#... #file%,|
00005bc0  20 6e 75 6d 62 65 72 5f  6f 66 5f 66 69 65 6c 64  | number_of_field|
00005bd0  73 25 0d 23 b4 21 f1 20  23 66 69 6c 65 25 2c 20  |s%.#.!. #file%, |
00005be0  31 20 3a 20 f4 20 72 65  63 6f 72 64 20 6e 75 6d  |1 : . record num|
00005bf0  62 65 72 0d 23 be 04 0d  23 c8 1b e3 20 72 65 63  |ber.#...#... rec|
00005c00  25 20 3d 20 30 20 b8 20  6d 61 78 5f 66 69 65 6c  |% = 0 . max_fiel|
00005c10  64 73 0d 23 d2 21 20 20  f1 20 23 66 69 6c 65 25  |ds.#.!  . #file%|
00005c20  2c 20 66 69 65 6c 64 5f  75 73 65 64 25 28 72 65  |, field_used%(re|
00005c30  63 25 29 0d 23 dc 05 ed  0d 23 e6 04 0d 23 f0 2e  |c%).#....#...#..|
00005c40  e3 20 61 25 20 3d 20 6f  75 74 70 75 74 5f 6c 69  |. a% = output_li|
00005c50  73 74 25 20 b8 20 6f 75  74 70 75 74 5f 6c 69 73  |st% . output_lis|
00005c60  74 25 2b 34 39 36 20 88  20 34 0d 23 fa 12 20 20  |t%+496 . 4.#..  |
00005c70  f1 20 23 66 69 6c 65 25  2c 21 61 25 0d 24 04 05  |. #file%,!a%.$..|
00005c80  ed 0d 24 0e 04 0d 24 18  2e e3 20 61 25 20 3d 20  |..$...$... a% = |
00005c90  73 65 61 72 63 68 5f 6c  69 73 74 25 20 b8 20 73  |search_list% . s|
00005ca0  65 61 72 63 68 5f 6c 69  73 74 25 2b 31 39 36 20  |earch_list%+196 |
00005cb0  88 20 34 0d 24 22 12 20  20 f1 20 23 66 69 6c 65  |. 4.$".  . #file|
00005cc0  25 2c 21 61 25 0d 24 2c  05 ed 0d 24 36 04 0d 24  |%,!a%.$,...$6..$|
00005cd0  40 2c e3 20 61 25 20 3d  20 73 6f 72 74 5f 66 69  |@,. a% = sort_fi|
00005ce0  65 6c 64 25 20 b8 20 73  6f 72 74 5f 66 69 65 6c  |eld% . sort_fiel|
00005cf0  64 25 2b 32 39 36 20 88  20 34 0d 24 4a 12 20 20  |d%+296 . 4.$J.  |
00005d00  f1 20 23 66 69 6c 65 25  2c 21 61 25 0d 24 54 05  |. #file%,!a%.$T.|
00005d10  ed 0d 24 5e 04 0d 24 68  04 0d 24 72 04 0d 24 7c  |..$^..$h..$r..$||
00005d20  04 0d 24 86 04 0d 24 90  14 f2 77 72 69 74 65 5f  |..$...$...write_|
00005d30  72 65 63 6f 72 64 28 31  29 0d 24 9a 0c d9 20 23  |record(1).$... #|
00005d40  66 69 6c 65 25 0d 24 a4  0d 66 69 6c 65 25 20 3d  |file%.$..file% =|
00005d50  20 30 0d 24 ae 1e ff 28  22 73 65 74 74 79 70 65  | 0.$...("settype|
00005d60  20 22 2b 6e 61 6d 65 24  2b 22 20 37 37 38 22 29  | "+name$+" 778")|
00005d70  0d 24 b8 22 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |.$.".closeawindo|
00005d80  77 28 6e 65 77 66 69 6c  65 5f 77 69 6e 64 6f 77  |w(newfile_window|
00005d90  25 29 0d 24 c2 21 f2 63  6c 6f 73 65 61 77 69 6e  |%).$.!.closeawin|
00005da0  64 6f 77 28 66 69 65 6c  64 73 5f 77 69 6e 64 6f  |dow(fields_windo|
00005db0  77 25 29 0d 24 cc 0f 6c  6f 61 64 65 64 25 20 3d  |w%).$..loaded% =|
00005dc0  20 a3 0d 24 d6 10 f2 6c  6f 61 64 28 6e 61 6d 65  | ..$...load(name|
00005dd0  24 29 0d 24 e0 05 e1 0d  24 ea 04 0d 24 f4 04 0d  |$).$....$...$...|
00005de0  24 fe 04 0d 25 08 12 dd  20 f2 6c 6f 61 64 28 6e  |$...%... .load(n|
00005df0  61 6d 65 24 29 0d 25 12  0f e7 20 6c 6f 61 64 65  |ame$).%... loade|
00005e00  64 25 20 8c 0d 25 1c 73  20 20 20 f2 65 72 72 6f  |d% ..%.s   .erro|
00005e10  72 5f 6d 65 73 73 61 67  65 28 22 54 68 65 20 66  |r_message("The f|
00005e20  69 6c 65 20 27 22 2b 24  66 69 6c 65 6e 61 6d 65  |ile '"+$filename|
00005e30  25 2b 22 27 20 69 73 20  73 74 69 6c 6c 20 6f 70  |%+"' is still op|
00005e40  65 6e 20 61 6e 64 20 6d  75 73 74 20 62 65 20 63  |en and must be c|
00005e50  6c 6f 73 65 64 20 62 65  66 6f 72 65 20 61 20 6e  |losed before a n|
00005e60  65 77 20 66 69 6c 65 20  63 61 6e 20 62 65 20 6c  |ew file can be l|
00005e70  6f 61 64 65 64 22 29 0d  25 26 05 cc 0d 25 30 24  |oaded").%&...%0$|
00005e80  20 20 f2 63 6c 6f 73 65  61 77 69 6e 64 6f 77 28  |  .closeawindow(|
00005e90  6e 65 77 66 69 6c 65 5f  77 69 6e 64 6f 77 25 29  |newfile_window%)|
00005ea0  0d 25 3a 23 20 20 f2 63  6c 6f 73 65 61 77 69 6e  |.%:#  .closeawin|
00005eb0  64 6f 77 28 66 69 65 6c  64 73 5f 77 69 6e 64 6f  |dow(fields_windo|
00005ec0  77 25 29 0d 25 44 20 20  20 63 75 72 72 65 6e 74  |w%).%D   current|
00005ed0  5f 66 69 6c 65 5f 6e 61  6d 65 24 20 3d 20 6e 61  |_file_name$ = na|
00005ee0  6d 65 24 0d 25 4e 16 20  20 66 69 6c 65 25 20 3d  |me$.%N.  file% =|
00005ef0  20 ad 28 6e 61 6d 65 24  29 0d 25 58 2f 20 20 e3  | .(name$).%X/  .|
00005f00  20 61 25 20 3d 20 66 69  65 6c 64 5f 64 65 73 25  | a% = field_des%|
00005f10  20 b8 20 66 69 65 6c 64  5f 64 65 73 25 20 2b 20  | . field_des% + |
00005f20  32 31 39 36 20 88 20 34  0d 25 62 13 20 20 20 20  |2196 . 4.%b.    |
00005f30  e8 23 66 69 6c 65 25 2c  21 61 25 0d 25 6c 07 20  |.#file%,!a%.%l. |
00005f40  20 ed 0d 25 76 19 20 20  e8 20 23 66 69 6c 65 25  | ..%v.  . #file%|
00005f50  2c 24 70 61 73 73 77 6f  72 64 25 0d 25 80 1a 20  |,$password%.%.. |
00005f60  20 e8 20 23 66 69 6c 65  25 2c 20 24 66 69 6c 65  | . #file%, $file|
00005f70  6e 61 6d 65 25 0d 25 8a  22 20 20 e8 20 23 66 69  |name%.%."  . #fi|
00005f80  6c 65 25 2c 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |le%, number_of_r|
00005f90  65 63 6f 72 64 73 25 0d  25 94 1c 20 20 e8 20 23  |ecords%.%..  . #|
00005fa0  66 69 6c 65 25 2c 20 72  65 63 6f 72 64 5f 73 69  |file%, record_si|
00005fb0  7a 65 25 0d 25 9e 21 20  20 e8 20 23 66 69 6c 65  |ze%.%.!  . #file|
00005fc0  25 2c 20 6e 75 6d 62 65  72 5f 6f 66 5f 66 69 65  |%, number_of_fie|
00005fd0  6c 64 73 25 0d 25 a8 1c  20 20 e8 20 23 66 69 6c  |lds%.%..  . #fil|
00005fe0  65 25 2c 20 63 75 72 72  65 6e 74 5f 72 65 63 25  |e%, current_rec%|
00005ff0  0d 25 b2 04 0d 25 bc 1d  20 20 e3 20 72 65 63 25  |.%...%..  . rec%|
00006000  20 3d 20 30 20 b8 20 6d  61 78 5f 66 69 65 6c 64  | = 0 . max_field|
00006010  73 0d 25 c6 24 20 20 20  20 20 e8 20 23 66 69 6c  |s.%.$     . #fil|
00006020  65 25 2c 20 66 69 65 6c  64 5f 75 73 65 64 25 28  |e%, field_used%(|
00006030  72 65 63 25 29 0d 25 d0  07 20 20 ed 0d 25 da 04  |rec%).%..  ..%..|
00006040  0d 25 e4 30 20 20 e3 20  61 25 20 3d 20 6f 75 74  |.%.0  . a% = out|
00006050  70 75 74 5f 6c 69 73 74  25 20 b8 20 6f 75 74 70  |put_list% . outp|
00006060  75 74 5f 6c 69 73 74 25  2b 34 39 36 20 88 20 34  |ut_list%+496 . 4|
00006070  0d 25 ee 14 20 20 20 20  e8 20 23 66 69 6c 65 25  |.%..    . #file%|
00006080  2c 21 61 25 0d 25 f8 07  20 20 ed 0d 26 02 04 0d  |,!a%.%..  ..&...|
00006090  26 0c 30 20 20 e3 20 61  25 20 3d 20 73 65 61 72  |&.0  . a% = sear|
000060a0  63 68 5f 6c 69 73 74 25  20 b8 20 73 65 61 72 63  |ch_list% . searc|
000060b0  68 5f 6c 69 73 74 25 2b  31 39 36 20 88 20 34 0d  |h_list%+196 . 4.|
000060c0  26 16 14 20 20 20 20 e8  20 23 66 69 6c 65 25 2c  |&..    . #file%,|
000060d0  21 61 25 0d 26 20 07 20  20 ed 0d 26 2a 04 0d 26  |!a%.& .  ..&*..&|
000060e0  34 2e 20 20 e3 20 61 25  20 3d 20 73 6f 72 74 5f  |4.  . a% = sort_|
000060f0  66 69 65 6c 64 25 20 b8  20 73 6f 72 74 5f 66 69  |field% . sort_fi|
00006100  65 6c 64 25 2b 32 39 36  20 88 20 34 0d 26 3e 14  |eld%+296 . 4.&>.|
00006110  20 20 20 20 e8 20 23 66  69 6c 65 25 2c 21 61 25  |    . #file%,!a%|
00006120  0d 26 48 07 20 20 ed 0d  26 52 04 0d 26 5c 20 20  |.&H.  ..&R..&\  |
00006130  20 f2 72 65 61 64 5f 72  65 63 6f 72 64 28 63 75  | .read_record(cu|
00006140  72 72 65 6e 74 5f 72 65  63 25 29 0d 26 66 24 20  |rrent_rec%).&f$ |
00006150  20 24 72 65 63 5f 6e 75  6d 62 65 72 25 20 3d 20  | $rec_number% = |
00006160  c3 28 63 75 72 72 65 6e  74 5f 72 65 63 25 29 0d  |.(current_rec%).|
00006170  26 70 11 20 20 6c 6f 61  64 65 64 25 20 3d 20 b9  |&p.  loaded% = .|
00006180  0d 26 7a 20 20 20 f2 65  78 74 72 61 63 74 5f 66  |.&z   .extract_f|
00006190  69 65 6c 64 5f 64 65 73  63 72 69 70 74 69 6f 6e  |ield_description|
000061a0  0d 26 84 1b 20 20 f2 63  72 65 61 74 65 5f 64 69  |.&..  .create_di|
000061b0  73 70 6c 61 79 5f 69 63  6f 6e 73 0d 26 8e 15 20  |splay_icons.&.. |
000061c0  20 f2 70 61 73 73 77 6f  72 64 5f 63 68 65 63 6b  | .password_check|
000061d0  0d 26 98 30 20 20 e7 20  ac 20 69 6e 68 69 62 69  |.&.0  . . inhibi|
000061e0  74 25 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |t% .open_window(|
000061f0  64 69 73 70 6c 61 79 5f  77 69 6e 64 6f 77 25 29  |display_window%)|
00006200  0d 26 a2 05 cd 0d 26 ac  05 e1 0d 26 b6 04 0d 26  |.&....&....&...&|
00006210  c0 04 0d 26 ca 1b dd 20  f2 63 72 65 61 74 65 5f  |...&... .create_|
00006220  64 69 73 70 6c 61 79 5f  69 63 6f 6e 73 0d 26 d4  |display_icons.&.|
00006230  3b f4 20 63 68 61 6e 67  65 20 76 61 6c 69 64 61  |;. change valida|
00006240  74 69 6f 6e 20 73 74 72  69 6e 67 20 74 6f 20 6d  |tion string to m|
00006250  61 74 63 68 20 74 68 65  20 74 79 70 65 20 64 65  |atch the type de|
00006260  66 69 6e 69 74 69 6f 6e  0d 26 de 12 ea 20 64 25  |finition.&... d%|
00006270  2c 20 66 25 2c 6c 25 2c  77 25 0d 26 e8 23 e3 20  |, f%,l%,w%.&.#. |
00006280  66 25 20 3d 20 30 20 b8  20 6e 75 6d 62 65 72 5f  |f% = 0 . number_|
00006290  6f 66 5f 66 69 65 6c 64  73 25 20 2d 31 0d 26 f2  |of_fields% -1.&.|
000062a0  77 64 69 73 70 6c 61 79  5f 69 63 6f 6e 25 28 66  |wdisplay_icon%(f|
000062b0  25 2b 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |%+number_of_fiel|
000062c0  64 73 25 29 3d a4 69 63  6f 6e 28 64 69 73 70 6c  |ds%)=.icon(displ|
000062d0  61 79 5f 77 69 6e 64 6f  77 25 2c 35 30 2c 2d 33  |ay_window%,50,-3|
000062e0  30 30 2d 66 25 2a 36 30  2c 33 30 30 2c 34 38 2c  |00-f%*60,300,48,|
000062f0  26 37 30 30 30 35 31 31  2c 22 22 2c 66 69 65 6c  |&7000511,"",fiel|
00006300  64 5f 64 65 73 25 2b 31  30 30 2a 66 25 2c 2d 31  |d_des%+100*f%,-1|
00006310  2c 32 30 29 0d 26 fc 44  6c 25 20 3d 20 bb 28 66  |,20).&.Dl% = .(f|
00006320  24 28 66 25 2c 32 29 29  20 20 20 20 20 20 20 3a  |$(f%,2))       :|
00006330  20 f4 20 73 65 74 20 6c  65 6e 67 74 68 20 6f 66  | . set length of|
00006340  20 62 6f 78 20 74 6f 20  61 20 73 75 69 74 61 62  | box to a suitab|
00006350  6c 65 20 76 61 6c 75 65  0d 27 06 12 77 25 20 3d  |le value.'..w% =|
00006360  20 6c 25 2a 31 36 20 2b  34 38 0d 27 10 15 e7 20  | l%*16 +48.'... |
00006370  77 25 3e 34 30 30 20 8c  20 77 25 3d 34 30 30 0d  |w%>400 . w%=400.|
00006380  27 1a 6c 64 69 73 70 6c  61 79 5f 69 63 6f 6e 25  |'.ldisplay_icon%|
00006390  28 66 25 29 20 3d 20 a4  69 63 6f 6e 28 64 69 73  |(f%) = .icon(dis|
000063a0  70 6c 61 79 5f 77 69 6e  64 6f 77 25 2c 34 30 30  |play_window%,400|
000063b0  2c 2d 33 30 30 2d 66 25  2a 36 30 2c 77 25 2c 34  |,-300-f%*60,w%,4|
000063c0  38 2c 26 37 30 30 46 35  33 35 2c 22 22 2c 64 69  |8,&700F535,"",di|
000063d0  73 70 6c 61 79 5f 64 61  74 61 25 2b 33 30 30 2a  |splay_data%+300*|
000063e0  66 25 2c 2d 31 2c 6c 25  2b 31 29 0d 27 24 05 ed  |f%,-1,l%+1).'$..|
000063f0  0d 27 2e 05 e1 0d 27 38  04 0d 27 42 1c dd 20 f2  |.'....'8..'B.. .|
00006400  64 65 73 74 72 6f 79 5f  64 69 73 70 6c 61 79 5f  |destroy_display_|
00006410  69 63 6f 6e 73 0d 27 4c  2a e3 20 66 25 20 3d 20  |icons.'L*. f% = |
00006420  32 2a 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |2*number_of_fiel|
00006430  64 73 25 20 2d 31 20 b8  20 30 20 88 20 2d 31 0d  |ds% -1 . 0 . -1.|
00006440  27 56 1f 20 20 e7 20 64  69 73 70 6c 61 79 5f 69  |'V.  . display_i|
00006450  63 6f 6e 25 28 66 25 29  20 3e 20 30 20 8c 0d 27  |con%(f%) > 0 ..'|
00006460  60 21 20 20 20 20 21 62  6c 6f 63 6b 25 20 3d 20  |`!    !block% = |
00006470  64 69 73 70 6c 61 79 5f  77 69 6e 64 6f 77 25 0d  |display_window%.|
00006480  27 6a 24 20 20 20 20 62  6c 6f 63 6b 25 21 34 20  |'j$    block%!4 |
00006490  3d 20 64 69 73 70 6c 61  79 5f 69 63 6f 6e 25 28  |= display_icon%(|
000064a0  66 25 29 0d 27 74 23 20  20 20 20 c8 99 22 57 69  |f%).'t#    .."Wi|
000064b0  6d 70 5f 44 65 6c 65 74  65 49 63 6f 6e 22 2c 2c  |mp_DeleteIcon",,|
000064c0  62 6c 6f 63 6b 25 0d 27  7e 07 20 20 cd 0d 27 88  |block%.'~.  ..'.|
000064d0  05 ed 0d 27 92 05 e1 0d  27 9c 04 0d 27 a6 05 20  |...'....'...'.. |
000064e0  0d 27 b0 04 0d 27 ba 12  dd 20 f2 65 6e 76 69 72  |.'...'... .envir|
000064f0  6f 6e 6d 65 6e 74 0d 27  c4 17 c8 99 20 22 4f 53  |onment.'.... "OS|
00006500  5f 47 65 74 45 6e 76 22  20 b8 20 63 24 0d 27 ce  |_GetEnv" . c$.'.|
00006510  12 63 24 3d c2 63 24 2c  a9 63 24 2d 32 30 29 0d  |.c$=.c$,.c$-20).|
00006520  27 d8 1e c8 95 20 20 c0  63 24 2c 31 29 20 3c 3e  |'....  .c$,1) <>|
00006530  22 20 22 20 80 20 a9 63  24 20 3c 3e 30 0d 27 e2  |" " . .c$ <>0.'.|
00006540  13 20 20 63 24 3d c2 63  24 2c a9 63 24 2d 31 29  |.  c$=.c$,.c$-1)|
00006550  0d 27 ec 05 ce 0d 27 f6  17 e7 20 63 24 20 3d 20  |.'....'... c$ = |
00006560  22 20 22 20 8c 20 63 24  20 3d 22 22 0d 28 00 05  |" " . c$ ="".(..|
00006570  e1 0d 28 0a 04 0d 28 14  19 f4 20 44 45 46 20 50  |..(...(... DEF P|
00006580  52 4f 43 65 6e 76 69 72  6f 6e 6d 65 6e 74 0d 28  |ROCenvironment.(|
00006590  1e 17 c8 99 20 22 4f 53  5f 47 65 74 45 6e 76 22  |.... "OS_GetEnv"|
000065a0  20 b8 20 63 24 0d 28 28  1d 70 20 3d 20 a7 63 24  | . c$.((.p = .c$|
000065b0  2c 22 22 22 22 2c a7 63  24 2c 22 22 22 22 29 2b  |,"""",.c$,"""")+|
000065c0  31 29 0d 28 32 0f 63 24  3d c1 63 24 2c 70 2b 31  |1).(2.c$=.c$,p+1|
000065d0  29 0d 28 3c 11 c8 95 20  c0 63 24 2c 31 29 3d 22  |).(<... .c$,1)="|
000065e0  20 22 0d 28 46 0f 20 20  63 24 3d c1 63 24 2c 32  | ".(F.  c$=.c$,2|
000065f0  29 0d 28 50 05 ce 0d 28  5a 04 0d 28 64 05 e1 0d  |).(P...(Z..(d...|
00006600  28 6e 05 20 0d 28 78 04  0d 28 82 04 0d 28 8c 05  |(n. .(x..(...(..|
00006610  20 0d 28 96 04 0d 28 a0  04 0d 28 aa 04 0d 28 b4  | .(...(...(...(.|
00006620  11 dd 20 f2 61 63 6b 6c  6f 61 64 28 62 29 0d 28  |.. .ackload(b).(|
00006630  be 0c 62 21 31 32 3d 62  21 38 0d 28 c8 0c 62 21  |..b!12=b!8.(..b!|
00006640  31 36 20 3d 20 34 0d 28  d2 0b 21 62 20 3d 20 36  |16 = 4.(..!b = 6|
00006650  34 0d 28 dc 21 c8 99 22  57 69 6d 70 5f 53 65 6e  |4.(.!.."Wimp_Sen|
00006660  64 4d 65 73 73 61 67 65  22 2c 31 37 2c 62 2c 62  |dMessage",17,b,b|
00006670  21 34 0d 28 e6 05 e1 0d  28 f0 04 0d 28 fa 12 dd  |!4.(....(...(...|
00006680  20 f2 64 61 74 61 6c 6f  61 64 28 62 29 0d 29 04  | .dataload(b).).|
00006690  13 e7 20 62 21 34 30 20  3d 20 26 37 37 38 20 8c  |.. b!40 = &778 .|
000066a0  0d 29 0e 1c 20 20 f2 6c  6f 61 64 28 a4 67 65 74  |.)..  .load(.get|
000066b0  5f 6e 61 6d 65 28 62 2b  34 34 29 29 0d 29 18 11  |_name(b+44)).)..|
000066c0  20 20 f2 61 63 6b 6c 6f  61 64 28 62 29 0d 29 22  |  .ackload(b).)"|
000066d0  05 cd 0d 29 2c 05 e1 0d  29 36 04 0d 29 40 04 0d  |...),...)6..)@..|
000066e0  29 4a 04 0d 29 54 04 0d  29 5e 04 0d 29 68 04 0d  |)J..)T..)^..)h..|
000066f0  29 72 1a dd 20 f2 65 78  74 72 61 63 74 5f 72 65  |)r.. .extract_re|
00006700  63 6f 72 64 5f 64 61 74  61 0d 29 7c 44 f4 20 54  |cord_data.)|D. T|
00006710  68 69 73 20 74 61 6b 65  73 20 74 68 65 20 64 61  |his takes the da|
00006720  74 61 20 66 72 6f 6d 20  74 68 65 20 69 63 6f 6e  |ta from the icon|
00006730  73 20 61 6e 64 20 70 75  74 73 20 74 68 65 6d 20  |s and puts them |
00006740  69 6e 74 6f 20 61 6e 20  61 72 72 61 79 0d 29 86  |into an array.).|
00006750  08 ea 20 66 25 0d 29 90  22 e3 20 66 25 20 3d 20  |.. f%.).". f% = |
00006760  30 20 b8 20 6e 75 6d 62  65 72 5f 6f 66 5f 66 69  |0 . number_of_fi|
00006770  65 6c 64 73 25 2d 31 0d  29 9a 1e 20 20 70 25 20  |elds%-1.)..  p% |
00006780  3d 64 69 73 70 6c 61 79  5f 64 61 74 61 25 2b 66  |=display_data%+f|
00006790  25 2a 33 30 30 0d 29 a4  24 20 20 63 75 72 72 65  |%*300.).$  curre|
000067a0  6e 74 5f 66 69 65 6c 64  5f 76 61 6c 75 65 24 28  |nt_field_value$(|
000067b0  66 25 29 20 3d 20 24 70  25 0d 29 ae 05 ed 0d 29  |f%) = $p%.)....)|
000067c0  b8 05 e1 0d 29 c2 05 20  0d 29 cc 13 dd 20 f2 63  |....).. .)... .c|
000067d0  6c 65 61 72 5f 72 65 63  6f 72 64 0d 29 d6 08 ea  |lear_record.)...|
000067e0  20 66 25 0d 29 e0 22 e3  20 66 25 20 3d 20 30 20  | f%.).". f% = 0 |
000067f0  b8 20 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |. number_of_fiel|
00006800  64 73 25 2d 31 0d 29 ea  1e 20 20 70 25 20 3d 64  |ds%-1.)..  p% =d|
00006810  69 73 70 6c 61 79 5f 64  61 74 61 25 2b 66 25 2a  |isplay_data%+f%*|
00006820  33 30 30 0d 29 f4 0e 20  20 24 70 25 20 3d 20 22  |300.)..  $p% = "|
00006830  22 0d 29 fe 05 ed 0d 2a  08 05 e1 0d 2a 12 04 0d  |".)....*....*...|
00006840  2a 1c 04 0d 2a 26 12 dd  20 a4 64 61 74 65 28 64  |*...*&.. .date(d|
00006850  61 74 65 24 29 0d 2a 30  39 20 20 3d bb 28 c0 64  |ate$).*09  =.(.d|
00006860  61 74 65 24 2c 32 29 29  2b 31 30 30 2a bb 28 c1  |ate$,2))+100*.(.|
00006870  64 61 74 65 24 2c 34 2c  32 29 29 2b 31 30 30 30  |date$,4,2))+1000|
00006880  30 2a bb 28 c2 64 61 74  65 24 2c 32 29 29 0d 2a  |0*.(.date$,2)).*|
00006890  3a 04 0d 2a 44 04 0d 2a  4e 04 0d 2a 58 23 dd 20  |:..*D..*N..*X#. |
000068a0  a4 76 61 6c 69 64 5f 6d  69 6e 28 76 61 6c 75 65  |.valid_min(value|
000068b0  24 2c 74 79 70 65 24 2c  6d 69 6e 24 29 0d 2a 62  |$,type$,min$).*b|
000068c0  09 ea 20 6f 6b 25 0d 2a  6c 0b 6f 6b 25 20 3d 20  |.. ok%.*l.ok% = |
000068d0  b9 0d 2a 76 20 e7 20 a9  20 6d 69 6e 24 20 3e 30  |..*v . . min$ >0|
000068e0  20 80 20 a9 20 76 61 6c  75 65 24 20 3e 20 30 20  | . . value$ > 0 |
000068f0  8c 0d 2a 80 0f c8 8e 20  20 74 79 70 65 24 20 ca  |..*....  type$ .|
00006900  0d 2a 8a 2b 20 20 c9 20  22 74 22 2c 22 54 22 20  |.*.+  . "t","T" |
00006910  3a 20 e7 20 76 61 6c 75  65 24 20 3c 20 6d 69 6e  |: . value$ < min|
00006920  24 20 8c 20 6f 6b 25 20  3d 20 a3 0d 2a 94 31 20  |$ . ok% = ..*.1 |
00006930  20 c9 20 22 4e 22 2c 22  6e 22 20 3a 20 e7 20 bb  | . "N","n" : . .|
00006940  28 76 61 6c 75 65 24 29  20 3c 20 bb 28 6d 69 6e  |(value$) < .(min|
00006950  24 29 20 8c 20 6f 6b 25  20 3d 20 a3 0d 2a 9e 39  |$) . ok% = ..*.9|
00006960  20 20 c9 20 22 44 22 2c  22 64 22 20 3a 20 e7 20  |  . "D","d" : . |
00006970  a4 64 61 74 65 28 76 61  6c 75 65 24 29 20 3c 20  |.date(value$) < |
00006980  a4 64 61 74 65 28 6d 69  6e 24 29 20 8c 20 6f 6b  |.date(min$) . ok|
00006990  25 20 3d 20 a3 0d 2a a8  05 cb 0d 2a b2 05 cd 0d  |% = ..*....*....|
000069a0  2a bc 08 3d 6f 6b 25 0d  2a c6 04 0d 2a d0 23 dd  |*..=ok%.*...*.#.|
000069b0  20 a4 76 61 6c 69 64 5f  6d 61 78 28 76 61 6c 75  | .valid_max(valu|
000069c0  65 24 2c 74 79 70 65 24  2c 6d 61 78 24 29 0d 2a  |e$,type$,max$).*|
000069d0  da 09 ea 20 6f 6b 25 0d  2a e4 0b 6f 6b 25 20 3d  |... ok%.*..ok% =|
000069e0  20 b9 0d 2a ee 20 e7 20  a9 20 6d 61 78 24 20 3e  | ..*. . . max$ >|
000069f0  30 20 80 20 a9 20 76 61  6c 75 65 24 20 3e 20 30  |0 . . value$ > 0|
00006a00  20 8c 0d 2a f8 0f c8 8e  20 20 74 79 70 65 24 20  | ..*....  type$ |
00006a10  ca 0d 2b 02 2b 20 20 c9  20 22 74 22 2c 22 54 22  |..+.+  . "t","T"|
00006a20  20 3a 20 e7 20 76 61 6c  75 65 24 20 3e 20 6d 61  | : . value$ > ma|
00006a30  78 24 20 8c 20 6f 6b 25  20 3d 20 a3 0d 2b 0c 31  |x$ . ok% = ..+.1|
00006a40  20 20 c9 20 22 4e 22 2c  22 6e 22 20 3a 20 e7 20  |  . "N","n" : . |
00006a50  bb 28 76 61 6c 75 65 24  29 20 3e 20 bb 28 6d 61  |.(value$) > .(ma|
00006a60  78 24 29 20 8c 20 6f 6b  25 20 3d 20 a3 0d 2b 16  |x$) . ok% = ..+.|
00006a70  39 20 20 c9 20 22 44 22  2c 22 64 22 20 3a 20 e7  |9  . "D","d" : .|
00006a80  20 a4 64 61 74 65 28 76  61 6c 75 65 24 29 20 3e  | .date(value$) >|
00006a90  20 a4 64 61 74 65 28 6d  61 78 24 29 20 8c 20 6f  | .date(max$) . o|
00006aa0  6b 25 20 3d 20 a3 0d 2b  20 05 cb 0d 2b 2a 05 cd  |k% = ..+ ...+*..|
00006ab0  0d 2b 34 08 3d 6f 6b 25  0d 2b 3e 04 0d 2b 48 25  |.+4.=ok%.+>..+H%|
00006ac0  dd 20 a4 76 61 6c 69 64  5f 6c 69 73 74 28 76 61  |. .valid_list(va|
00006ad0  6c 75 65 24 2c 74 79 70  65 24 2c 6c 69 73 74 24  |lue$,type$,list$|
00006ae0  29 0d 2b 52 09 ea 20 6f  6b 25 0d 2b 5c 0b 6f 6b  |).+R.. ok%.+\.ok|
00006af0  25 20 3d 20 b9 0d 2b 66  12 e7 20 a9 20 6c 69 73  |% = ..+f.. . lis|
00006b00  74 24 20 3e 30 20 8c 0d  2b 70 24 20 20 e7 20 a7  |t$ >0 ..+p$  . .|
00006b10  6c 69 73 74 24 2c 76 61  6c 75 65 24 29 20 3d 20  |list$,value$) = |
00006b20  30 20 8c 20 6f 6b 25 20  3d 20 a3 0d 2b 7a 05 cd  |0 . ok% = ..+z..|
00006b30  0d 2b 84 08 3d 6f 6b 25  0d 2b 8e 04 0d 2b 98 04  |.+..=ok%.+...+..|
00006b40  0d 2b a2 13 dd 20 a4 76  61 6c 69 64 5f 72 65 63  |.+... .valid_rec|
00006b50  6f 72 64 0d 2b ac 0b 6f  6b 25 20 3d 20 b9 0d 2b  |ord.+..ok% = ..+|
00006b60  b6 0b 66 25 20 3d 20 2d  31 0d 2b c0 1c c8 95 20  |..f% = -1.+.... |
00006b70  6f 6b 25 20 80 20 66 25  20 3c 20 6d 61 78 5f 66  |ok% . f% < max_f|
00006b80  69 65 6c 64 73 0d 2b ca  0b 20 20 66 25 2b 3d 31  |ields.+..  f%+=1|
00006b90  0d 2b d4 19 20 20 e7 20  66 69 65 6c 64 5f 75 73  |.+..  . field_us|
00006ba0  65 64 25 28 66 25 29 20  8c 0d 2b de 57 20 20 20  |ed%(f%) ..+.W   |
00006bb0  20 20 e7 20 28 66 24 28  66 25 2c 31 29 20 3d 20  |  . (f$(f%,1) = |
00006bc0  22 64 22 20 84 20 66 24  28 66 25 2c 31 29 20 3d  |"d" . f$(f%,1) =|
00006bd0  22 44 22 29 20 80 20 ac  20 a4 76 61 6c 69 64 5f  |"D") . . .valid_|
00006be0  64 61 74 65 28 63 75 72  72 65 6e 74 5f 66 69 65  |date(current_fie|
00006bf0  6c 64 5f 76 61 6c 75 65  24 28 66 25 29 29 20 8c  |ld_value$(f%)) .|
00006c00  0d 2b e8 12 20 20 20 20  20 20 20 6f 6b 25 20 3d  |.+..       ok% =|
00006c10  20 a3 0d 2b f2 3f 20 20  20 20 20 20 20 f2 65 72  | ..+.?       .er|
00006c20  72 6f 72 5f 6d 65 73 73  61 67 65 28 22 27 22 2b  |ror_message("'"+|
00006c30  66 24 28 66 25 2c 30 29  2b 22 27 20 68 61 73 20  |f$(f%,0)+"' has |
00006c40  61 6e 20 69 6e 76 61 6c  69 64 20 64 61 74 65 22  |an invalid date"|
00006c50  29 0d 2b fc 0a 20 20 20  20 20 cc 0d 2c 06 45 20  |).+..     ..,.E |
00006c60  20 20 20 20 e7 20 ac 20  a4 76 61 6c 69 64 5f 6d  |    . . .valid_m|
00006c70  69 6e 28 63 75 72 72 65  6e 74 5f 66 69 65 6c 64  |in(current_field|
00006c80  5f 76 61 6c 75 65 24 28  66 25 29 2c 66 24 28 66  |_value$(f%),f$(f|
00006c90  25 2c 31 29 2c 66 24 28  66 25 2c 34 29 29 20 8c  |%,1),f$(f%,4)) .|
00006ca0  0d 2c 10 10 20 20 20 20  20 20 20 6f 6b 25 3d a3  |.,..       ok%=.|
00006cb0  0d 2c 1a 49 20 20 20 20  20 20 20 f2 65 72 72 6f  |.,.I       .erro|
00006cc0  72 5f 6d 65 73 73 61 67  65 28 22 27 22 2b 66 24  |r_message("'"+f$|
00006cd0  28 66 25 2c 30 29 2b 22  27 20 68 61 73 20 61 20  |(f%,0)+"' has a |
00006ce0  76 61 6c 75 65 20 77 68  69 63 68 20 69 73 20 74  |value which is t|
00006cf0  6f 6f 20 6c 6f 77 22 20  29 0d 2c 24 0a 20 20 20  |oo low" ).,$.   |
00006d00  20 20 cc 0d 2c 2e 45 20  20 20 20 20 e7 20 ac 20  |  ..,.E     . . |
00006d10  a4 76 61 6c 69 64 5f 6d  61 78 28 63 75 72 72 65  |.valid_max(curre|
00006d20  6e 74 5f 66 69 65 6c 64  5f 76 61 6c 75 65 24 28  |nt_field_value$(|
00006d30  66 25 29 2c 66 24 28 66  25 2c 31 29 2c 66 24 28  |f%),f$(f%,1),f$(|
00006d40  66 25 2c 35 29 29 20 8c  0d 2c 38 10 20 20 20 20  |f%,5)) ..,8.    |
00006d50  20 20 20 6f 6b 25 3d a3  0d 2c 42 4a 20 20 20 20  |   ok%=..,BJ    |
00006d60  20 20 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  |   .error_messag|
00006d70  65 28 22 27 22 2b 66 24  28 66 25 2c 30 29 2b 22  |e("'"+f$(f%,0)+"|
00006d80  27 20 68 61 73 20 61 20  76 61 6c 75 65 20 77 68  |' has a value wh|
00006d90  69 63 68 20 69 73 20 74  6f 6f 20 68 69 67 68 22  |ich is too high"|
00006da0  20 29 0d 2c 4c 0a 20 20  20 20 20 cc 0d 2c 56 46  | ).,L.     ..,VF|
00006db0  20 20 20 20 20 e7 20 ac  20 a4 76 61 6c 69 64 5f  |     . . .valid_|
00006dc0  6c 69 73 74 28 63 75 72  72 65 6e 74 5f 66 69 65  |list(current_fie|
00006dd0  6c 64 5f 76 61 6c 75 65  24 28 66 25 29 2c 66 24  |ld_value$(f%),f$|
00006de0  28 66 25 2c 31 29 2c 66  24 28 66 25 2c 36 29 29  |(f%,1),f$(f%,6))|
00006df0  20 8c 0d 2c 60 10 20 20  20 20 20 20 20 6f 6b 25  | ..,`.       ok%|
00006e00  3d a3 0d 2c 6a 4e 20 20  20 20 20 f2 65 72 72 6f  |=..,jN     .erro|
00006e10  72 5f 6d 65 73 73 61 67  65 28 22 27 22 2b 66 24  |r_message("'"+f$|
00006e20  28 66 25 2c 30 29 2b 22  27 20 68 61 73 20 61 20  |(f%,0)+"' has a |
00006e30  76 61 6c 75 65 20 77 68  69 63 68 20 69 73 20 6e  |value which is n|
00006e40  6f 74 20 69 6e 20 74 68  65 20 6c 69 73 74 22 29  |ot in the list")|
00006e50  0d 2c 74 0a 20 20 20 20  20 cc 0d 2c 7e 3e 20 20  |.,t.     ..,~>  |
00006e60  20 20 20 20 20 e7 20 66  24 28 66 25 2c 31 29 20  |     . f$(f%,1) |
00006e70  3d 20 22 4e 22 20 84 20  66 24 28 66 25 2c 31 29  |= "N" . f$(f%,1)|
00006e80  3d 22 6e 22 20 80 20 bb  28 66 24 28 66 25 2c 33  |="n" . .(f$(f%,3|
00006e90  29 29 20 3e 20 30 20 8c  0d 2c 88 16 20 20 20 20  |)) > 0 ..,..    |
00006ea0  20 20 20 20 20 20 20 41  25 20 3d 20 40 25 0d 2c  |       A% = @%.,|
00006eb0  92 2f 20 20 20 20 20 20  20 20 20 20 20 40 25 20  |./           @% |
00006ec0  3d 26 30 31 30 32 30 30  30 41 20 2b 20 bb 28 66  |=&0102000A + .(f|
00006ed0  24 28 66 25 2c 33 29 29  2a 26 31 30 30 0d 2c 9c  |$(f%,3))*&100.,.|
00006ee0  2f 20 20 20 20 20 20 20  20 20 20 20 e7 20 a9 63  |/           . .c|
00006ef0  75 72 72 65 6e 74 5f 66  69 65 6c 64 5f 76 61 6c  |urrent_field_val|
00006f00  75 65 24 28 66 25 29 20  3e 30 20 8c 0d 2c a6 4a  |ue$(f%) >0 ..,.J|
00006f10  20 20 20 20 20 20 20 20  20 20 20 20 20 63 75 72  |             cur|
00006f20  72 65 6e 74 5f 66 69 65  6c 64 5f 76 61 6c 75 65  |rent_field_value|
00006f30  24 28 66 25 29 20 3d 20  c3 28 bb 28 63 75 72 72  |$(f%) = .(.(curr|
00006f40  65 6e 74 5f 66 69 65 6c  64 5f 76 61 6c 75 65 24  |ent_field_value$|
00006f50  28 66 25 29 29 29 0d 2c  b0 10 20 20 20 20 20 20  |(f%))).,..      |
00006f60  20 20 20 20 20 cd 0d 2c  ba 14 20 20 20 20 20 20  |     ..,..      |
00006f70  20 20 20 20 20 40 25 3d  41 25 0d 2c c4 34 20 20  |     @%=A%.,.4  |
00006f80  20 20 20 20 20 20 20 20  20 e7 20 c2 63 75 72 72  |         . .curr|
00006f90  65 6e 74 5f 66 69 65 6c  64 5f 76 61 6c 75 65 24  |ent_field_value$|
00006fa0  28 66 25 29 2c 31 29 20  3d 22 2e 22 20 8c 0d 2c  |(f%),1) ="." ..,|
00006fb0  ce 45 20 20 20 20 20 20  20 20 20 20 20 20 20 63  |.E             c|
00006fc0  75 72 72 65 6e 74 5f 66  69 65 6c 64 5f 76 61 6c  |urrent_field_val|
00006fd0  75 65 24 28 66 25 29 3d  20 c0 63 75 72 72 65 6e  |ue$(f%)= .curren|
00006fe0  74 5f 66 69 65 6c 64 5f  76 61 6c 75 65 24 28 66  |t_field_value$(f|
00006ff0  25 29 29 0d 2c d8 10 20  20 20 20 20 20 20 20 20  |%)).,..         |
00007000  20 20 cd 0d 2c e2 0a 20  20 20 20 20 cd 0d 2c ec  |  ..,..     ..,.|
00007010  09 20 20 20 20 cd 0d 2c  f6 0a 20 20 20 20 20 cd  |.    ..,..     .|
00007020  0d 2d 00 07 20 20 cd 0d  2d 0a 09 20 20 20 20 cd  |.-..  ..-..    .|
00007030  0d 2d 14 0a 20 20 20 20  20 cd 0d 2d 1e 05 ce 0d  |.-..     ..-....|
00007040  2d 28 08 3d 6f 6b 25 0d  2d 32 04 0d 2d 3c 13 dd  |-(.=ok%.-2..-<..|
00007050  20 a4 72 65 63 6f 72 64  5f 73 70 61 63 65 0d 2d  | .record_space.-|
00007060  46 0c ea 20 74 6f 74 61  6c 25 0d 2d 50 0e 74 6f  |F.. total%.-P.to|
00007070  74 61 6c 25 20 3d 20 30  0d 2d 5a 19 e3 20 66 25  |tal% = 0.-Z.. f%|
00007080  20 3d 20 30 20 b8 20 6d  61 78 5f 66 69 65 6c 64  | = 0 . max_field|
00007090  73 0d 2d 64 31 20 20 74  6f 74 61 6c 25 20 3d 20  |s.-d1  total% = |
000070a0  74 6f 74 61 6c 25 20 2b  20 a9 63 75 72 72 65 6e  |total% + .curren|
000070b0  74 5f 66 69 65 6c 64 5f  76 61 6c 75 65 24 28 66  |t_field_value$(f|
000070c0  25 29 0d 2d 6e 05 ed 0d  2d 78 0b 3d 74 6f 74 61  |%).-n...-x.=tota|
000070d0  6c 25 0d 2d 82 04 0d 2d  8c 04 0d 2d 96 12 dd 20  |l%.-...-...-... |
000070e0  f2 6e 65 78 74 5f 72 65  63 6f 72 64 0d 2d a0 18  |.next_record.-..|
000070f0  f2 65 78 74 72 61 63 74  5f 72 65 63 6f 72 64 5f  |.extract_record_|
00007100  64 61 74 61 0d 2d aa 15  e7 20 a4 76 61 6c 69 64  |data.-... .valid|
00007110  5f 72 65 63 6f 72 64 20  8c 0d 2d b4 44 20 e7 20  |_record ..-.D . |
00007120  ac 28 a4 72 65 63 6f 72  64 5f 73 70 61 63 65 20  |.(.record_space |
00007130  3d 20 30 20 80 20 bb 28  24 72 65 63 5f 6e 75 6d  |= 0 . .($rec_num|
00007140  62 65 72 25 29 20 3d 20  6e 75 6d 62 65 72 5f 6f  |ber%) = number_o|
00007150  66 5f 72 65 63 6f 72 64  73 25 29 20 8c 0d 2d be  |f_records%) ..-.|
00007160  24 20 20 f2 77 72 69 74  65 5f 72 65 63 6f 72 64  |$  .write_record|
00007170  28 bb 28 24 72 65 63 5f  6e 75 6d 62 65 72 25 29  |(.($rec_number%)|
00007180  29 0d 2d c8 29 20 20 24  72 65 63 5f 6e 75 6d 62  |).-.)  $rec_numb|
00007190  65 72 25 20 3d 20 c3 28  bb 28 24 72 65 63 5f 6e  |er% = .(.($rec_n|
000071a0  75 6d 62 65 72 25 29 2b  31 29 0d 2d d2 2e 20 20  |umber%)+1).-..  |
000071b0  e7 20 bb 28 24 72 65 63  5f 6e 75 6d 62 65 72 25  |. .($rec_number%|
000071c0  29 20 3e 20 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  |) > number_of_re|
000071d0  63 6f 72 64 73 25 20 8c  0d 2d dc 1e 20 20 20 20  |cords% ..-..    |
000071e0  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
000071f0  64 73 25 2b 3d 31 0d 2d  e6 16 20 20 20 20 20 f2  |ds%+=1.-..     .|
00007200  63 6c 65 61 72 5f 72 65  63 6f 72 64 0d 2d f0 07  |clear_record.-..|
00007210  20 20 cc 0d 2d fa 26 20  20 20 20 20 f2 72 65 61  |  ..-.&     .rea|
00007220  64 5f 72 65 63 6f 72 64  28 bb 28 24 72 65 63 5f  |d_record(.($rec_|
00007230  6e 75 6d 62 65 72 25 29  29 0d 2e 04 07 20 20 cd  |number%))....  .|
00007240  0d 2e 0e 06 20 cd 0d 2e  18 05 cd 0d 2e 22 13 f2  |.... ........"..|
00007250  75 70 64 61 74 65 5f 64  69 73 70 6c 61 79 0d 2e  |update_display..|
00007260  2c 05 e1 0d 2e 36 04 0d  2e 40 16 dd 20 f2 70 72  |,....6...@.. .pr|
00007270  65 76 69 6f 75 73 5f 72  65 63 6f 72 64 0d 2e 4a  |evious_record..J|
00007280  18 f2 65 78 74 72 61 63  74 5f 72 65 63 6f 72 64  |..extract_record|
00007290  5f 64 61 74 61 0d 2e 54  15 e7 20 a4 76 61 6c 69  |_data..T.. .vali|
000072a0  64 5f 72 65 63 6f 72 64  20 8c 0d 2e 5e 24 20 20  |d_record ...^$  |
000072b0  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 bb 28  |.write_record(.(|
000072c0  24 72 65 63 5f 6e 75 6d  62 65 72 25 29 29 0d 2e  |$rec_number%))..|
000072d0  68 1d 20 20 e7 20 bb 28  24 72 65 63 5f 6e 75 6d  |h.  . .($rec_num|
000072e0  62 65 72 25 29 20 3e 20  31 20 8c 0d 2e 72 29 20  |ber%) > 1 ...r) |
000072f0  20 24 72 65 63 5f 6e 75  6d 62 65 72 25 20 3d 20  | $rec_number% = |
00007300  c3 28 bb 28 24 72 65 63  5f 6e 75 6d 62 65 72 25  |.(.($rec_number%|
00007310  29 2d 31 29 0d 2e 7c 23  20 20 f2 72 65 61 64 5f  |)-1)..|#  .read_|
00007320  72 65 63 6f 72 64 28 bb  28 24 72 65 63 5f 6e 75  |record(.($rec_nu|
00007330  6d 62 65 72 25 29 29 0d  2e 86 07 20 20 cc 0d 2e  |mber%))....  ...|
00007340  90 0a 20 20 20 20 ef 37  0d 2e 9a 07 20 20 cd 0d  |..    .7....  ..|
00007350  2e a4 05 cd 0d 2e ae 13  f2 75 70 64 61 74 65 5f  |.........update_|
00007360  64 69 73 70 6c 61 79 0d  2e b8 05 e1 0d 2e c2 04  |display.........|
00007370  0d 2e cc 0c dd 20 f2 73  74 61 72 74 0d 2e d6 18  |..... .start....|
00007380  f2 65 78 74 72 61 63 74  5f 72 65 63 6f 72 64 5f  |.extract_record_|
00007390  64 61 74 61 0d 2e e0 15  e7 20 a4 76 61 6c 69 64  |data..... .valid|
000073a0  5f 72 65 63 6f 72 64 20  8c 0d 2e ea 24 20 20 f2  |_record ....$  .|
000073b0  77 72 69 74 65 5f 72 65  63 6f 72 64 28 bb 28 24  |write_record(.($|
000073c0  72 65 63 5f 6e 75 6d 62  65 72 25 29 29 0d 2e f4  |rec_number%))...|
000073d0  1d 20 20 e7 20 bb 28 24  72 65 63 5f 6e 75 6d 62  |.  . .($rec_numb|
000073e0  65 72 25 29 20 3e 20 31  20 8c 0d 2e fe 19 20 20  |er%) > 1 .....  |
000073f0  24 72 65 63 5f 6e 75 6d  62 65 72 25 20 3d 20 c3  |$rec_number% = .|
00007400  28 31 29 0d 2f 08 23 20  20 f2 72 65 61 64 5f 72  |(1)./.#  .read_r|
00007410  65 63 6f 72 64 28 bb 28  24 72 65 63 5f 6e 75 6d  |ecord(.($rec_num|
00007420  62 65 72 25 29 29 0d 2f  12 07 20 20 cc 0d 2f 1c  |ber%))./..  ../.|
00007430  0a 20 20 20 20 ef 37 0d  2f 26 07 20 20 cd 0d 2f  |.    .7./&.  ../|
00007440  30 05 cd 0d 2f 3a 13 f2  75 70 64 61 74 65 5f 64  |0.../:..update_d|
00007450  69 73 70 6c 61 79 0d 2f  44 05 e1 0d 2f 4e 04 0d  |isplay./D.../N..|
00007460  2f 58 04 0d 2f 62 04 0d  2f 6c 04 0d 2f 76 12 dd  |/X../b../l../v..|
00007470  20 f2 65 6e 64 5f 6f 66  5f 66 69 6c 65 0d 2f 80  | .end_of_file./.|
00007480  18 f2 65 78 74 72 61 63  74 5f 72 65 63 6f 72 64  |..extract_record|
00007490  5f 64 61 74 61 0d 2f 8a  15 e7 20 a4 76 61 6c 69  |_data./... .vali|
000074a0  64 5f 72 65 63 6f 72 64  20 8c 0d 2f 94 24 20 20  |d_record ../.$  |
000074b0  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 bb 28  |.write_record(.(|
000074c0  24 72 65 63 5f 6e 75 6d  62 65 72 25 29 29 0d 2f  |$rec_number%))./|
000074d0  9e 2f 20 20 e7 20 bb 28  24 72 65 63 5f 6e 75 6d  |./  . .($rec_num|
000074e0  62 65 72 25 29 20 20 3c  20 6e 75 6d 62 65 72 5f  |ber%)  < number_|
000074f0  6f 66 5f 72 65 63 6f 72  64 73 25 20 8c 0d 2f a8  |of_records% ../.|
00007500  2b 20 20 24 72 65 63 5f  6e 75 6d 62 65 72 25 20  |+  $rec_number% |
00007510  3d 20 c3 28 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |= .( number_of_r|
00007520  65 63 6f 72 64 73 25 29  0d 2f b2 23 20 20 f2 72  |ecords%)./.#  .r|
00007530  65 61 64 5f 72 65 63 6f  72 64 28 bb 28 24 72 65  |ead_record(.($re|
00007540  63 5f 6e 75 6d 62 65 72  25 29 29 0d 2f bc 07 20  |c_number%))./.. |
00007550  20 cc 0d 2f c6 0a 20 20  20 20 ef 37 0d 2f d0 07  | ../..    .7./..|
00007560  20 20 cd 0d 2f da 05 cd  0d 2f e4 13 f2 75 70 64  |  ../..../...upd|
00007570  61 74 65 5f 64 69 73 70  6c 61 79 0d 2f ee 05 e1  |ate_display./...|
00007580  0d 2f f8 04 0d 30 02 15  dd 20 f2 75 70 64 61 74  |./...0... .updat|
00007590  65 5f 64 69 73 70 6c 61  79 0d 30 0c 3a 20 20 20  |e_display.0.:   |
000075a0  c8 99 22 57 69 6d 70 5f  46 6f 72 63 65 52 65 64  |.."Wimp_ForceRed|
000075b0  72 61 77 22 2c 64 69 73  70 6c 61 79 5f 77 69 6e  |raw",display_win|
000075c0  64 6f 77 25 2c 30 2c 2d  31 30 30 30 2c 31 30 30  |dow%,0,-1000,100|
000075d0  30 2c 30 0d 30 16 28 20  20 20 c8 99 22 57 69 6d  |0,0.0.(   .."Wim|
000075e0  70 5f 47 65 74 43 61 72  65 74 50 6f 73 69 74 69  |p_GetCaretPositi|
000075f0  6f 6e 22 2c 2c 63 61 72  65 74 25 0d 30 20 19 20  |on",,caret%.0 . |
00007600  20 20 77 69 6e 64 6f 77  25 20 3d 20 63 61 72 65  |  window% = care|
00007610  74 25 21 30 0d 30 2a 19  20 20 20 69 63 6f 6e 25  |t%!0.0*.   icon%|
00007620  20 20 20 3d 20 63 61 72  65 74 25 21 34 0d 30 34  |   = caret%!4.04|
00007630  17 20 20 20 6e 65 77 5f  70 6f 73 25 20 3d 20 69  |.   new_pos% = i|
00007640  63 6f 6e 25 0d 30 3e 11  20 20 20 f2 73 65 74 5f  |con%.0>.   .set_|
00007650  63 61 72 65 74 0d 30 48  05 e1 0d 30 52 04 0d 30  |caret.0H...0R..0|
00007660  5c 04 0d 30 66 04 0d 30  70 1d dd 20 f2 72 65 61  |\..0f..0p.. .rea|
00007670  64 5f 72 65 63 6f 72 64  28 70 6f 73 69 74 69 6f  |d_record(positio|
00007680  6e 25 29 0d 30 7a 16 ea  20 70 25 2c 20 70 6f 69  |n%).0z.. p%, poi|
00007690  6e 74 65 72 25 2c 20 66  25 0d 30 84 1f 63 75 72  |nter%, f%.0..cur|
000076a0  72 65 6e 74 5f 66 69 65  6c 64 5f 76 61 6c 75 65  |rent_field_value|
000076b0  24 28 29 20 3d 20 22 22  0d 30 8e 2a 70 6f 69 6e  |$() = "".0.*poin|
000076c0  74 65 72 25 20 3d 20 35  30 30 30 2b 70 6f 73 69  |ter% = 5000+posi|
000076d0  74 69 6f 6e 25 2a 72 65  63 6f 72 64 5f 73 69 7a  |tion%*record_siz|
000076e0  65 25 0d 30 98 16 cf 23  66 69 6c 65 25 20 3d 20  |e%.0...#file% = |
000076f0  70 6f 69 6e 74 65 72 25  0d 30 a2 12 62 61 64 5f  |pointer%.0..bad_|
00007700  66 69 65 6c 64 25 20 3d  20 a3 0d 30 ac 07 ea 20  |field% = ..0... |
00007710  85 0d 30 b6 0a 66 25 20  3d 20 30 0d 30 c0 30 c8  |..0..f% = 0.0.0.|
00007720  95 20 66 25 20 3c 28 6e  75 6d 62 65 72 5f 6f 66  |. f% <(number_of|
00007730  5f 66 69 65 6c 64 73 25  20 20 29 20 20 80 20 ac  |_fields%  )  . .|
00007740  20 62 61 64 5f 66 69 65  6c 64 25 0d 30 ca 1a 20  | bad_field%.0.. |
00007750  20 ee 20 85 20 ea 20 62  61 64 5f 66 69 65 6c 64  | . . . bad_field|
00007760  25 20 3d 20 b9 0d 30 d4  16 20 20 e7 20 ac 20 62  |% = ..0..  . . b|
00007770  61 64 5f 66 69 65 6c 64  25 20 8c 0d 30 de 2a 20  |ad_field% ..0.* |
00007780  20 20 20 e8 20 23 66 69  6c 65 25 2c 20 63 75 72  |   . #file%, cur|
00007790  72 65 6e 74 5f 66 69 65  6c 64 5f 76 61 6c 75 65  |rent_field_value|
000077a0  24 28 66 25 29 0d 30 e8  20 20 20 20 20 70 25 20  |$(f%).0.     p% |
000077b0  3d 64 69 73 70 6c 61 79  5f 64 61 74 61 25 2b 66  |=display_data%+f|
000077c0  25 2a 33 30 30 0d 30 f2  25 20 20 20 20 24 70 25  |%*300.0.%    $p%|
000077d0  20 3d 63 75 72 72 65 6e  74 5f 66 69 65 6c 64 5f  | =current_field_|
000077e0  76 61 6c 75 65 24 28 66  25 29 0d 30 fc 0e 20 20  |value$(f%).0..  |
000077f0  20 20 66 25 20 2b 3d 31  0d 31 06 07 20 20 cd 0d  |  f% +=1.1..  ..|
00007800  31 10 05 ce 0d 31 1a 07  f7 20 85 0d 31 24 05 e1  |1....1... ..1$..|
00007810  0d 31 2e 04 0d 31 38 04  0d 31 42 1e dd 20 f2 77  |.1...18..1B.. .w|
00007820  72 69 74 65 5f 72 65 63  6f 72 64 28 70 6f 73 69  |rite_record(posi|
00007830  74 69 6f 6e 25 29 0d 31  4c 12 ea 20 70 25 2c 20  |tion%).1L.. p%, |
00007840  70 6f 69 6e 74 65 72 25  0d 31 56 2a 70 6f 69 6e  |pointer%.1V*poin|
00007850  74 65 72 25 20 3d 20 35  30 30 30 2b 70 6f 73 69  |ter% = 5000+posi|
00007860  74 69 6f 6e 25 2a 72 65  63 6f 72 64 5f 73 69 7a  |tion%*record_siz|
00007870  65 25 0d 31 60 16 cf 23  66 69 6c 65 25 20 3d 20  |e%.1`..#file% = |
00007880  70 6f 69 6e 74 65 72 25  0d 31 6a 22 e3 20 66 25  |pointer%.1j". f%|
00007890  20 3d 20 30 20 b8 20 6e  75 6d 62 65 72 5f 6f 66  | = 0 . number_of|
000078a0  5f 66 69 65 6c 64 73 25  2d 31 0d 31 74 27 20 f1  |_fields%-1.1t' .|
000078b0  20 23 66 69 6c 65 25 2c  20 63 75 72 72 65 6e 74  | #file%, current|
000078c0  5f 66 69 65 6c 64 5f 76  61 6c 75 65 24 28 66 25  |_field_value$(f%|
000078d0  29 0d 31 7e 05 ed 0d 31  88 05 e1 0d 31 92 04 0d  |).1~...1....1...|
000078e0  31 9c 04 0d 31 a6 16 dd  20 f2 63 6c 6f 73 65 5f  |1...1... .close_|
000078f0  64 6f 77 6e 5f 66 69 6c  65 0d 31 b0 12 e7 20 66  |down_file.1... f|
00007900  69 6c 65 25 20 3c 3e 20  30 20 8c 0d 31 ba 11 20  |ile% <> 0 ..1.. |
00007910  20 cf 23 66 69 6c 65 25  20 3d 20 30 0d 31 c4 1b  | .#file% = 0.1..|
00007920  20 20 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |  number_of_fiel|
00007930  64 73 25 20 3d 20 30 0d  31 ce 1d 20 20 e3 20 72  |ds% = 0.1..  . r|
00007940  65 63 25 20 3d 20 30 20  b8 20 6d 61 78 5f 66 69  |ec% = 0 . max_fi|
00007950  65 6c 64 73 0d 31 d8 1b  20 20 e7 20 a9 28 66 24  |elds.1..  . .(f$|
00007960  28 72 65 63 25 2c 30 29  29 20 3e 20 30 20 8c 0d  |(rec%,0)) > 0 ..|
00007970  31 e2 1e 20 20 20 20 20  6e 75 6d 62 65 72 5f 6f  |1..     number_o|
00007980  66 5f 66 69 65 6c 64 73  25 20 2b 3d 31 0d 31 ec  |f_fields% +=1.1.|
00007990  07 20 20 cd 0d 31 f6 07  20 20 ed 0d 32 00 1a 20  |.  ..1..  ..2.. |
000079a0  20 e7 20 a4 66 69 65 6c  64 5f 6c 65 6e 67 74 68  | . .field_length|
000079b0  5f 6f 6b 20 8c 0d 32 0a  31 20 20 20 20 e3 20 61  |_ok ..2.1    . a|
000079c0  25 20 3d 20 66 69 65 6c  64 5f 64 65 73 25 20 b8  |% = field_des% .|
000079d0  20 66 69 65 6c 64 5f 64  65 73 25 20 2b 20 32 31  | field_des% + 21|
000079e0  39 36 20 88 20 34 0d 32  14 15 20 20 20 20 20 20  |96 . 4.2..      |
000079f0  f1 23 66 69 6c 65 25 2c  21 61 25 0d 32 1e 09 20  |.#file%,!a%.2.. |
00007a00  20 20 20 ed 0d 32 28 1b  20 20 20 20 f1 20 23 66  |   ..2(.    . #f|
00007a10  69 6c 65 25 2c 24 70 61  73 73 77 6f 72 64 25 0d  |ile%,$password%.|
00007a20  32 32 1c 20 20 20 20 f1  20 23 66 69 6c 65 25 2c  |22.    . #file%,|
00007a30  20 24 66 69 6c 65 6e 61  6d 65 25 0d 32 3c 24 20  | $filename%.2<$ |
00007a40  20 20 20 f1 20 23 66 69  6c 65 25 2c 20 6e 75 6d  |   . #file%, num|
00007a50  62 65 72 5f 6f 66 5f 72  65 63 6f 72 64 73 25 0d  |ber_of_records%.|
00007a60  32 46 1e 20 20 20 20 f1  20 23 66 69 6c 65 25 2c  |2F.    . #file%,|
00007a70  20 72 65 63 6f 72 64 5f  73 69 7a 65 25 0d 32 50  | record_size%.2P|
00007a80  23 20 20 20 20 f1 20 23  66 69 6c 65 25 2c 20 6e  |#    . #file%, n|
00007a90  75 6d 62 65 72 5f 6f 66  5f 66 69 65 6c 64 73 25  |umber_of_fields%|
00007aa0  0d 32 5a 21 20 20 20 20  f1 20 23 66 69 6c 65 25  |.2Z!    . #file%|
00007ab0  2c 20 bb 28 24 72 65 63  5f 6e 75 6d 62 65 72 25  |, .($rec_number%|
00007ac0  29 0d 32 64 1f 20 20 20  20 e3 20 72 65 63 25 20  |).2d.    . rec% |
00007ad0  3d 20 30 20 b8 20 6d 61  78 5f 66 69 65 6c 64 73  |= 0 . max_fields|
00007ae0  0d 32 6e 25 20 20 20 20  20 20 f1 20 23 66 69 6c  |.2n%      . #fil|
00007af0  65 25 2c 20 66 69 65 6c  64 5f 75 73 65 64 25 28  |e%, field_used%(|
00007b00  72 65 63 25 29 0d 32 78  09 20 20 20 20 ed 0d 32  |rec%).2x.    ..2|
00007b10  82 04 0d 32 8c 32 20 20  20 20 e3 20 61 25 20 3d  |...2.2    . a% =|
00007b20  20 6f 75 74 70 75 74 5f  6c 69 73 74 25 20 b8 20  | output_list% . |
00007b30  6f 75 74 70 75 74 5f 6c  69 73 74 25 2b 34 39 36  |output_list%+496|
00007b40  20 88 20 34 0d 32 96 18  20 20 20 20 20 20 20 20  | . 4.2..        |
00007b50  f1 20 23 66 69 6c 65 25  2c 21 61 25 0d 32 a0 09  |. #file%,!a%.2..|
00007b60  20 20 20 20 ed 0d 32 aa  04 0d 32 b4 32 20 20 20  |    ..2...2.2   |
00007b70  20 e3 20 61 25 20 3d 20  73 65 61 72 63 68 5f 6c  | . a% = search_l|
00007b80  69 73 74 25 20 b8 20 73  65 61 72 63 68 5f 6c 69  |ist% . search_li|
00007b90  73 74 25 2b 31 39 36 20  88 20 34 0d 32 be 17 20  |st%+196 . 4.2.. |
00007ba0  20 20 20 20 20 20 f1 20  23 66 69 6c 65 25 2c 21  |      . #file%,!|
00007bb0  61 25 0d 32 c8 09 20 20  20 20 ed 0d 32 d2 04 0d  |a%.2..    ..2...|
00007bc0  32 dc 30 20 20 20 20 e3  20 61 25 20 3d 20 73 6f  |2.0    . a% = so|
00007bd0  72 74 5f 66 69 65 6c 64  25 20 b8 20 73 6f 72 74  |rt_field% . sort|
00007be0  5f 66 69 65 6c 64 25 2b  32 39 36 20 88 20 34 0d  |_field%+296 . 4.|
00007bf0  32 e6 17 20 20 20 20 20  20 20 f1 20 23 66 69 6c  |2..       . #fil|
00007c00  65 25 2c 21 61 25 0d 32  f0 09 20 20 20 20 ed 0d  |e%,!a%.2..    ..|
00007c10  32 fa 1c 20 20 20 20 f2  65 78 74 72 61 63 74 5f  |2..    .extract_|
00007c20  72 65 63 6f 72 64 5f 64  61 74 61 0d 33 04 26 20  |record_data.3.& |
00007c30  20 20 20 f2 77 72 69 74  65 5f 72 65 63 6f 72 64  |   .write_record|
00007c40  28 bb 28 24 72 65 63 5f  6e 75 6d 62 65 72 25 29  |(.($rec_number%)|
00007c50  29 0d 33 0e 10 20 20 20  20 d9 20 23 66 69 6c 65  |).3..    . #file|
00007c60  25 0d 33 18 11 20 20 20  20 66 69 6c 65 25 20 3d  |%.3..    file% =|
00007c70  20 30 0d 33 22 13 20 20  20 20 6c 6f 61 64 65 64  | 0.3".    loaded|
00007c80  25 20 3d 20 a3 0d 33 2c  14 20 20 20 20 69 6e 68  |% = ..3,.    inh|
00007c90  69 62 69 74 25 20 3d 20  a3 0d 33 36 26 20 20 20  |ibit% = ..36&   |
00007ca0  20 f2 63 6c 6f 73 65 61  77 69 6e 64 6f 77 28 64  | .closeawindow(d|
00007cb0  69 73 70 6c 61 79 5f 77  69 6e 64 6f 77 25 29 0d  |isplay_window%).|
00007cc0  33 40 23 20 20 20 20 f2  63 6c 6f 73 65 61 77 69  |3@#    .closeawi|
00007cd0  6e 64 6f 77 28 73 6f 72  74 5f 77 69 6e 64 6f 77  |ndow(sort_window|
00007ce0  25 29 0d 33 4a 25 20 20  20 20 f2 63 6c 6f 73 65  |%).3J%    .close|
00007cf0  61 77 69 6e 64 6f 77 28  6f 75 74 70 75 74 5f 77  |awindow(output_w|
00007d00  69 6e 64 6f 77 25 29 0d  33 54 25 20 20 20 20 f2  |indow%).3T%    .|
00007d10  63 6c 6f 73 65 61 77 69  6e 64 6f 77 28 66 69 65  |closeawindow(fie|
00007d20  6c 64 73 5f 77 69 6e 64  6f 77 25 29 0d 33 5e 27  |lds_window%).3^'|
00007d30  20 20 20 20 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |    .closeawindo|
00007d40  77 28 70 61 73 73 77 6f  72 64 5f 77 69 6e 64 6f  |w(password_windo|
00007d50  77 25 29 0d 33 68 25 20  20 20 20 f2 63 6c 6f 73  |w%).3h%    .clos|
00007d60  65 61 77 69 6e 64 6f 77  28 73 63 72 65 65 6e 5f  |eawindow(screen_|
00007d70  77 69 6e 64 6f 77 25 29  0d 33 72 23 20 20 20 20  |window%).3r#    |
00007d80  f2 63 6c 6f 73 65 61 77  69 6e 64 6f 77 28 73 61  |.closeawindow(sa|
00007d90  76 65 5f 77 69 6e 64 6f  77 25 29 0d 33 7c 04 0d  |ve_window%).3|..|
00007da0  33 86 1e 20 20 20 20 f2  64 65 73 74 72 6f 79 5f  |3..    .destroy_|
00007db0  64 69 73 70 6c 61 79 5f  69 63 6f 6e 73 0d 33 90  |display_icons.3.|
00007dc0  07 20 20 cc 0d 33 9a 8e  20 20 20 20 f2 65 72 72  |.  ..3..    .err|
00007dd0  6f 72 5f 6d 65 73 73 61  67 65 28 22 54 68 65 20  |or_message("The |
00007de0  66 69 65 6c 64 20 64 65  73 63 72 69 70 74 6f 72  |field descriptor|
00007df0  20 68 61 73 20 62 65 65  6e 20 63 68 61 6e 67 65  | has been change|
00007e00  64 20 61 6e 64 20 69 73  20 6e 6f 77 20 74 6f 6f  |d and is now too|
00007e10  20 6c 6f 6e 67 2e 20 45  69 74 68 65 72 20 72 65  | long. Either re|
00007e20  64 75 63 65 20 74 68 65  20 6e 75 6d 62 65 72 20  |duce the number |
00007e30  6f 66 20 66 69 65 6c 64  73 20 6f 72 20 72 65 64  |of fields or red|
00007e40  75 63 65 20 74 68 65 69  72 20 6c 65 6e 67 74 68  |uce their length|
00007e50  22 29 0d 33 a4 11 20 20  20 20 71 75 69 74 25 20  |").3..    quit% |
00007e60  3d 20 a3 0d 33 ae 07 20  20 cd 0d 33 b8 05 cd 0d  |= ..3..  ..3....|
00007e70  33 c2 05 e1 0d 33 cc 04  0d 33 d6 16 dd 20 a4 66  |3....3...3... .f|
00007e80  69 65 6c 64 5f 6c 65 6e  67 74 68 5f 6f 6b 0d 33  |ield_length_ok.3|
00007e90  e0 1e f2 65 78 74 72 61  63 74 5f 66 69 65 6c 64  |...extract_field|
00007ea0  5f 64 65 73 63 72 69 70  74 69 6f 6e 0d 33 ea 0e  |_description.3..|
00007eb0  74 6f 74 61 6c 25 20 3d  20 30 0d 33 f4 10 63 6f  |total% = 0.3..co|
00007ec0  6e 74 72 6f 6c 25 20 3d  20 30 0d 33 fe 19 e3 20  |ntrol% = 0.3... |
00007ed0  66 25 20 3d 20 30 20 b8  20 6d 61 78 5f 66 69 65  |f% = 0 . max_fie|
00007ee0  6c 64 73 0d 34 08 24 20  20 20 74 6f 74 61 6c 25  |lds.4.$   total%|
00007ef0  20 3d 20 74 6f 74 61 6c  25 20 2b 20 bb 28 66 24  | = total% + .(f$|
00007f00  28 66 25 2c 32 29 29 0d  34 12 26 20 20 20 e7 20  |(f%,2)).4.&   . |
00007f10  a9 28 66 24 28 66 25 2c  30 29 29 20 3e 20 30 20  |.(f$(f%,0)) > 0 |
00007f20  8c 20 63 6f 6e 74 72 6f  6c 25 2b 3d 32 0d 34 1c  |. control%+=2.4.|
00007f30  05 ed 0d 34 26 28 e7 20  74 6f 74 61 6c 25 20 3e  |...4&(. total% >|
00007f40  20 72 65 63 6f 72 64 5f  73 69 7a 65 25 20 2d 20  | record_size% - |
00007f50  63 6f 6e 74 72 6f 6c 25  20 8c 0d 34 30 06 3d a3  |control% ..40.=.|
00007f60  0d 34 3a 05 cc 0d 34 44  06 3d b9 0d 34 4e 04 0d  |.4:...4D.=..4N..|
00007f70  34 58 04 0d 34 62 15 dd  20 f2 70 61 73 73 77 6f  |4X..4b.. .passwo|
00007f80  72 64 5f 63 68 65 63 6b  0d 34 6c 1a 20 20 e7 20  |rd_check.4l.  . |
00007f90  24 70 61 73 73 77 6f 72  64 25 20 3c 3e 20 22 22  |$password% <> ""|
00007fa0  20 8c 0d 34 76 1a 20 20  20 20 24 69 6e 5f 70 61  | ..4v.    $in_pa|
00007fb0  73 73 77 6f 72 64 25 20  3d 20 22 22 0d 34 80 26  |ssword% = "".4.&|
00007fc0  20 20 20 20 f2 6f 70 65  6e 5f 77 69 6e 64 6f 77  |    .open_window|
00007fd0  28 70 61 73 73 77 6f 72  64 5f 77 69 6e 64 6f 77  |(password_window|
00007fe0  25 29 0d 34 8a 14 20 20  20 20 69 6e 68 69 62 69  |%).4..    inhibi|
00007ff0  74 25 20 3d 20 b9 0d 34  94 07 20 20 cd 0d 34 9e  |t% = ..4..  ..4.|
00008000  05 e1 0d 34 a8 04 0d 34  b2 04 0d 34 bc 04 0d 34  |...4...4...4...4|
00008010  c6 0f dd 20 f2 70 61 73  73 77 6f 72 64 0d 34 d0  |... .password.4.|
00008020  25 20 20 f2 63 6c 6f 73  65 61 77 69 6e 64 6f 77  |%  .closeawindow|
00008030  28 70 61 73 73 77 6f 72  64 5f 77 69 6e 64 6f 77  |(password_window|
00008040  25 29 0d 34 da 2c 20 20  e7 20 c0 24 70 61 73 73  |%).4.,  . .$pass|
00008050  77 6f 72 64 25 2c 34 29  20 3d 20 c0 24 69 6e 5f  |word%,4) = .$in_|
00008060  70 61 73 73 77 6f 72 64  25 2c 34 29 20 8c 0d 34  |password%,4) ..4|
00008070  e4 14 20 20 20 20 69 6e  68 69 62 69 74 25 20 3d  |..    inhibit% =|
00008080  20 a3 0d 34 ee 25 20 20  20 20 f2 6f 70 65 6e 5f  | ..4.%    .open_|
00008090  77 69 6e 64 6f 77 28 64  69 73 70 6c 61 79 5f 77  |window(display_w|
000080a0  69 6e 64 6f 77 25 29 0d  34 f8 07 20 20 cc 0d 35  |indow%).4..  ..5|
000080b0  02 3a 20 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |.:    .error_mes|
000080c0  73 61 67 65 28 22 49 6e  63 6f 72 72 65 63 74 20  |sage("Incorrect |
000080d0  70 61 73 73 77 6f 72 64  2e 20 46 69 6c 65 20 63  |password. File c|
000080e0  6c 6f 73 69 6e 67 22 29  0d 35 0c 18 20 20 20 20  |losing").5..    |
000080f0  f2 63 6c 6f 73 65 5f 64  6f 77 6e 5f 66 69 6c 65  |.close_down_file|
00008100  0d 35 16 07 20 20 cd 0d  35 20 05 e1 0d 35 2a 04  |.5..  ..5 ...5*.|
00008110  0d 35 34 04 0d 35 3e 13  dd 20 a4 75 70 70 65 72  |.54..5>.. .upper|
00008120  28 74 65 78 74 24 29 0d  35 48 13 ea 20 72 65 73  |(text$).5H.. res|
00008130  75 6c 74 24 2c 69 25 2c  63 24 0d 35 52 0e 72 65  |ult$,i%,c$.5R.re|
00008140  73 75 6c 74 24 3d 22 22  0d 35 5c 15 e3 20 69 25  |sult$="".5\.. i%|
00008150  20 3d 20 31 20 b8 20 a9  74 65 78 74 24 0d 35 66  | = 1 . .text$.5f|
00008160  14 20 63 24 3d c1 74 65  78 74 24 2c 69 25 2c 31  |. c$=.text$,i%,1|
00008170  29 0d 35 70 2a 20 e7 20  63 24 3e 3d 22 61 22 20  |).5p* . c$>="a" |
00008180  80 20 63 24 3c 3d 22 7a  22 20 8c 20 63 24 3d bd  |. c$<="z" . c$=.|
00008190  28 97 28 63 24 29 80 26  44 46 29 0d 35 7a 17 20  |(.(c$).&DF).5z. |
000081a0  72 65 73 75 6c 74 24 3d  72 65 73 75 6c 74 24 2b  |result$=result$+|
000081b0  63 24 0d 35 84 05 ed 0d  35 8e 0c 3d 72 65 73 75  |c$.5....5..=resu|
000081c0  6c 74 24 0d 35 98 04 0d  35 a2 23 dd 20 a4 72 65  |lt$.5...5.#. .re|
000081d0  70 6c 61 63 65 28 6f 62  6a 65 63 74 24 2c 74 61  |place(object$,ta|
000081e0  72 67 65 74 24 2c 62 79  24 29 0d 35 ac 17 ea 20  |rget$,by$).5... |
000081f0  73 74 61 72 74 25 2c 20  70 6f 73 69 74 69 6f 6e  |start%, position|
00008200  25 0d 35 b6 1e 73 74 61  72 74 25 20 3d 20 a7 6f  |%.5..start% = .o|
00008210  62 6a 65 63 74 24 2c 74  61 72 67 65 74 24 29 0d  |bject$,target$).|
00008220  35 c0 0d c8 95 20 73 74  61 72 74 25 0d 35 ca 2e  |5.... start%.5..|
00008230  70 6f 73 69 74 69 6f 6e  25 20 3d 20 a9 28 6f 62  |position% = .(ob|
00008240  6a 65 63 74 24 29 2d a9  28 74 61 72 67 65 74 24  |ject$)-.(target$|
00008250  29 2d 73 74 61 72 74 25  2b 31 0d 35 d4 38 6f 62  |)-start%+1.5.8ob|
00008260  6a 65 63 74 24 20 3d 20  c0 6f 62 6a 65 63 74 24  |ject$ = .object$|
00008270  2c 73 74 61 72 74 25 2d  31 29 2b 62 79 24 2b c2  |,start%-1)+by$+.|
00008280  6f 62 6a 65 63 74 24 2c  70 6f 73 69 74 69 6f 6e  |object$,position|
00008290  25 29 0d 35 de 2c 73 74  61 72 74 25 20 3d 20 a7  |%).5.,start% = .|
000082a0  6f 62 6a 65 63 74 24 2c  74 61 72 67 65 74 24 2c  |object$,target$,|
000082b0  73 74 61 72 74 25 2b a9  28 62 79 24 29 29 0d 35  |start%+.(by$)).5|
000082c0  e8 05 ce 0d 35 f2 0c 3d  6f 62 6a 65 63 74 24 0d  |....5..=object$.|
000082d0  35 fc 04 0d 36 06 1a dd  20 a4 6f 75 74 70 75 74  |5...6... .output|
000082e0  5f 75 70 70 65 72 28 74  65 78 74 24 29 0d 36 10  |_upper(text$).6.|
000082f0  13 ea 20 72 65 73 75 6c  74 24 2c 69 25 2c 63 24  |.. result$,i%,c$|
00008300  0d 36 1a 0e 71 75 6f 74  65 25 20 3d 20 a3 0d 36  |.6..quote% = ..6|
00008310  24 0e 72 65 73 75 6c 74  24 3d 22 22 0d 36 2e 15  |$.result$="".6..|
00008320  e3 20 69 25 20 3d 20 31  20 b8 20 a9 74 65 78 74  |. i% = 1 . .text|
00008330  24 0d 36 38 14 20 63 24  3d c1 74 65 78 74 24 2c  |$.68. c$=.text$,|
00008340  69 25 2c 31 29 0d 36 42  23 20 e7 20 63 24 20 3d  |i%,1).6B# . c$ =|
00008350  20 bd 33 34 20 8c 20 71  75 6f 74 65 25 20 3d 20  | .34 . quote% = |
00008360  ac 20 71 75 6f 74 65 25  0d 36 4c 18 20 e7 20 63  |. quote%.6L. . c|
00008370  24 3d 22 2c 22 20 8c 20  63 24 20 3d 20 22 2b 22  |$="," . c$ = "+"|
00008380  0d 36 56 3d 20 e7 20 63  24 3d 22 3b 22 20 80 20  |.6V= . c$=";" . |
00008390  69 25 20 3c 20 a9 74 65  78 74 24 20 80 20 69 25  |i% < .text$ . i%|
000083a0  20 3e 20 31 20 8c 20 63  24 3d 22 2b 22 2b bd 33  | > 1 . c$="+"+.3|
000083b0  34 2b 22 20 22 2b bd 33  34 2b 22 2b 22 0d 36 60  |4+" "+.34+"+".6`|
000083c0  13 20 20 20 e7 20 ac 20  71 75 6f 74 65 25 20 8c  |.   . . quote% .|
000083d0  0d 36 6a 2d 20 20 20 20  e7 20 63 24 3e 3d 22 61  |.6j-    . c$>="a|
000083e0  22 20 80 20 63 24 3c 3d  22 7a 22 20 8c 20 63 24  |" . c$<="z" . c$|
000083f0  3d bd 28 97 28 63 24 29  80 26 44 46 29 0d 36 74  |=.(.(c$).&DF).6t|
00008400  08 20 20 20 cd 0d 36 7e  17 20 72 65 73 75 6c 74  |.   ..6~. result|
00008410  24 3d 72 65 73 75 6c 74  24 2b 63 24 0d 36 88 05  |$=result$+c$.6..|
00008420  ed 0d 36 92 0c 3d 72 65  73 75 6c 74 24 0d 36 9c  |..6..=result$.6.|
00008430  04 0d 36 a6 04 0d 36 b0  1a dd 20 f2 65 78 74 72  |..6...6... .extr|
00008440  61 63 74 5f 6f 75 74 70  75 74 5f 6c 69 73 74 0d  |act_output_list.|
00008450  36 ba 13 e3 20 6c 69 73  74 25 20 3d 20 30 20 b8  |6... list% = 0 .|
00008460  20 35 0d 36 c4 2a 20 20  70 6f 69 6e 74 65 72 25  | 5.6.*  pointer%|
00008470  20 3d 20 6f 75 74 70 75  74 5f 6c 69 73 74 25 20  | = output_list% |
00008480  2b 20 6c 69 73 74 25 20  2a 20 37 30 0d 36 ce 25  |+ list% * 70.6.%|
00008490  20 20 6f 75 74 70 75 74  5f 6c 69 73 74 24 28 6c  |  output_list$(l|
000084a0  69 73 74 25 29 20 3d 20  24 70 6f 69 6e 74 65 72  |ist%) = $pointer|
000084b0  25 0d 36 d8 3e 20 20 6f  75 74 70 75 74 5f 6c 69  |%.6.>  output_li|
000084c0  73 74 24 28 6c 69 73 74  25 29 20 3d 20 a4 6f 75  |st$(list%) = .ou|
000084d0  74 70 75 74 5f 75 70 70  65 72 28 6f 75 74 70 75  |tput_upper(outpu|
000084e0  74 5f 6c 69 73 74 24 28  6c 69 73 74 25 29 29 0d  |t_list$(list%)).|
000084f0  36 e2 05 ed 0d 36 ec 19  e3 20 66 25 20 3d 20 30  |6....6... f% = 0|
00008500  20 b8 20 6d 61 78 5f 66  69 65 6c 64 73 0d 36 f6  | . max_fields.6.|
00008510  18 20 20 e7 20 a9 28 66  24 28 66 25 2c 30 29 29  |.  . .(f$(f%,0))|
00008520  20 3e 30 20 8c 0d 37 00  16 20 20 20 e3 20 6c 69  | >0 ..7..   . li|
00008530  73 74 25 20 3d 20 30 20  b8 20 35 0d 37 0a 24 20  |st% = 0 . 5.7.$ |
00008540  20 20 e7 20 a9 20 6f 75  74 70 75 74 5f 6c 69 73  |  . . output_lis|
00008550  74 24 28 6c 69 73 74 25  29 20 3e 20 30 20 8c 0d  |t$(list%) > 0 ..|
00008560  37 14 6f 20 20 20 20 20  6f 75 74 70 75 74 5f 6c  |7.o     output_l|
00008570  69 73 74 24 28 6c 69 73  74 25 29 20 3d 20 a4 72  |ist$(list%) = .r|
00008580  65 70 6c 61 63 65 28 6f  75 74 70 75 74 5f 6c 69  |eplace(output_li|
00008590  73 74 24 28 6c 69 73 74  25 29 2c a4 75 70 70 65  |st$(list%),.uppe|
000085a0  72 28 66 24 28 66 25 2c  30 29 29 2c 22 63 75 72  |r(f$(f%,0)),"cur|
000085b0  72 65 6e 74 5f 66 69 65  6c 64 5f 76 61 6c 75 65  |rent_field_value|
000085c0  24 28 22 2b c3 28 66 25  29 2b 22 29 22 29 0d 37  |$("+.(f%)+")").7|
000085d0  1e 08 20 20 20 cd 0d 37  28 08 20 20 20 ed 0d 37  |..   ..7(.   ..7|
000085e0  32 07 20 20 cd 0d 37 3c  05 ed 0d 37 46 13 e3 20  |2.  ..7<...7F.. |
000085f0  6c 69 73 74 25 20 3d 20  30 20 b8 20 35 0d 37 50  |list% = 0 . 5.7P|
00008600  1e e7 20 a9 6f 75 74 70  75 74 5f 6c 69 73 74 24  |.. .output_list$|
00008610  28 6c 69 73 74 25 29 3e  30 20 8c 0d 37 5a 0a 20  |(list%)>0 ..7Z. |
00008620  20 20 ea 20 85 0d 37 64  25 20 20 20 ee 20 85 20  |  . ..7d%   . . |
00008630  ea 20 3a 20 f7 20 85 20  3a f2 6f 75 74 70 75 74  |. : . . :.output|
00008640  5f 65 72 72 6f 72 20 3a  20 ed 0d 37 6e 26 20 20  |_error : ..7n&  |
00008650  20 f4 20 50 52 49 4e 54  45 56 41 4c 28 6f 75 74  | . PRINTEVAL(out|
00008660  70 75 74 5f 6c 69 73 74  24 28 6c 69 73 74 25 29  |put_list$(list%)|
00008670  0d 37 78 0a 20 20 20 f7  20 85 0d 37 82 05 cd 0d  |.7x.   . ..7....|
00008680  37 8c 05 ed 0d 37 96 05  e1 0d 37 a0 04 0d 37 aa  |7....7....7...7.|
00008690  04 0d 37 b4 04 0d 37 be  13 dd 20 f2 6f 75 74 70  |..7...7... .outp|
000086a0  75 74 5f 65 72 72 6f 72  0d 37 c8 0c 20 20 c8 8e  |ut_error.7..  ..|
000086b0  20 9f 20 ca 0d 37 d2 54  20 20 c9 20 39 20 3a 20  | . ..7.T  . 9 : |
000086c0  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 22  |.error_message("|
000086d0  4f 75 74 70 75 74 20 6c  69 6e 65 20 22 2b c3 28  |Output line "+.(|
000086e0  6c 69 73 74 25 2b 31 29  2b 22 20 63 6f 6e 74 61  |list%+1)+" conta|
000086f0  69 6e 73 20 61 6e 20 75  6e 6d 61 74 63 68 65 64  |ins an unmatched|
00008700  20 71 75 6f 74 65 22 29  0d 37 dc 62 20 20 c9 20  | quote").7.b  . |
00008710  32 36 20 3a 20 f2 65 72  72 6f 72 5f 6d 65 73 73  |26 : .error_mess|
00008720  61 67 65 28 22 4f 75 74  70 75 74 20 6c 69 6e 65  |age("Output line|
00008730  20 22 2b c3 28 6c 69 73  74 25 2b 31 29 2b 22 20  | "+.(list%+1)+" |
00008740  63 6f 6e 74 61 69 6e 73  20 61 20 72 65 66 65 72  |contains a refer|
00008750  65 6e 63 65 20 74 6f 20  61 6e 20 75 6e 6b 6e 6f  |ence to an unkno|
00008760  77 6e 20 66 69 65 6c 64  22 29 0d 37 e6 40 20 20  |wn field").7.@  |
00008770  7f 20 3a 20 f2 65 72 72  6f 72 5f 6d 65 73 73 61  |. : .error_messa|
00008780  67 65 28 22 4c 6f 6f 6b  73 20 6c 69 6b 65 20 73  |ge("Looks like s|
00008790  6f 6d 65 20 6f 74 68 65  72 20 65 72 72 6f 72 20  |ome other error |
000087a0  61 74 20 22 2b c3 28 9e  29 29 0d 37 f0 07 20 20  |at "+.(.)).7..  |
000087b0  cb 0d 37 fa 05 e1 0d 38  04 04 0d 38 0e 05 e1 0d  |..7....8...8....|
000087c0  38 18 04 0d 38 22 04 0d  38 2c 04 0d 38 36 1b dd  |8...8"..8,..86..|
000087d0  20 f2 63 72 65 61 74 65  5f 73 65 61 72 63 68 5f  | .create_search_|
000087e0  73 74 72 69 6e 67 0d 38  40 24 20 20 73 65 61 72  |string.8@$  sear|
000087f0  63 68 5f 73 74 72 69 6e  67 24 20 3d 20 24 73 65  |ch_string$ = $se|
00008800  61 72 63 68 5f 6c 69 73  74 25 0d 38 4a 14 20 20  |arch_list%.8J.  |
00008810  e7 20 63 61 73 65 5f 73  65 6e 73 25 20 8c 0d 38  |. case_sens% ..8|
00008820  54 36 20 20 20 20 20 73  65 61 72 63 68 5f 73 74  |T6     search_st|
00008830  72 69 6e 67 24 20 3d a4  6f 75 74 70 75 74 5f 75  |ring$ =.output_u|
00008840  70 70 65 72 28 73 65 61  72 63 68 5f 73 74 72 69  |pper(search_stri|
00008850  6e 67 24 29 0d 38 5e 07  20 20 cc 0d 38 68 2f 20  |ng$).8^.  ..8h/ |
00008860  20 20 20 20 73 65 61 72  63 68 5f 73 74 72 69 6e  |    search_strin|
00008870  67 24 20 3d a4 75 70 70  65 72 28 73 65 61 72 63  |g$ =.upper(searc|
00008880  68 5f 73 74 72 69 6e 67  24 29 0d 38 72 07 20 20  |h_string$).8r.  |
00008890  cd 0d 38 7c 19 e3 20 66  25 20 3d 20 30 20 b8 20  |..8|.. f% = 0 . |
000088a0  6d 61 78 5f 66 69 65 6c  64 73 0d 38 86 18 20 20  |max_fields.8..  |
000088b0  e7 20 a9 28 66 24 28 66  25 2c 30 29 29 20 3e 30  |. .(f$(f%,0)) >0|
000088c0  20 8c 0d 38 90 16 20 20  20 20 20 c8 8e 20 66 24  | ..8..     .. f$|
000088d0  28 66 25 2c 31 29 20 ca  0d 38 9a 70 20 20 20 20  |(f%,1) ..8.p    |
000088e0  20 c9 20 22 74 22 2c 22  54 22 20 3a 20 73 65 61  | . "t","T" : sea|
000088f0  72 63 68 5f 73 74 72 69  6e 67 24 3d 20 a4 72 65  |rch_string$= .re|
00008900  70 6c 61 63 65 28 73 65  61 72 63 68 5f 73 74 72  |place(search_str|
00008910  69 6e 67 24 2c a4 75 70  70 65 72 28 66 24 28 66  |ing$,.upper(f$(f|
00008920  25 2c 30 29 29 2c 22 63  75 72 72 65 6e 74 5f 66  |%,0)),"current_f|
00008930  69 65 6c 64 5f 76 61 6c  75 65 24 28 22 2b c3 28  |ield_value$("+.(|
00008940  66 25 29 2b 22 29 22 29  0d 38 a4 73 20 20 20 20  |f%)+")").8.s    |
00008950  20 c9 20 22 6e 22 2c 22  4e 22 20 3a 20 73 65 61  | . "n","N" : sea|
00008960  72 63 68 5f 73 74 72 69  6e 67 24 3d 20 a4 72 65  |rch_string$= .re|
00008970  70 6c 61 63 65 28 73 65  61 72 63 68 5f 73 74 72  |place(search_str|
00008980  69 6e 67 24 2c a4 75 70  70 65 72 28 66 24 28 66  |ing$,.upper(f$(f|
00008990  25 2c 30 29 29 2c 22 56  41 4c 63 75 72 72 65 6e  |%,0)),"VALcurren|
000089a0  74 5f 66 69 65 6c 64 5f  76 61 6c 75 65 24 28 22  |t_field_value$("|
000089b0  2b c3 28 66 25 29 2b 22  29 22 29 0d 38 ae 21 20  |+.(f%)+")").8.! |
000089c0  20 20 20 20 c9 20 22 44  22 2c 22 64 22 20 3a 20  |    . "D","d" : |
000089d0  f2 69 6e 73 65 72 74 5f  64 61 74 65 0d 38 b8 0a  |.insert_date.8..|
000089e0  20 20 20 20 20 cb 0d 38  c2 07 20 20 cd 0d 38 cc  |     ..8..  ..8.|
000089f0  05 ed 0d 38 d6 1a f4 20  50 52 49 4e 54 20 73 65  |...8... PRINT se|
00008a00  61 72 63 68 5f 73 74 72  69 6e 67 24 0d 38 e0 20  |arch_string$.8. |
00008a10  f4 20 50 52 49 4e 54 20  45 56 41 4c 28 73 65 61  |. PRINT EVAL(sea|
00008a20  72 63 68 5f 73 74 72 69  6e 67 24 29 0d 38 ea 05  |rch_string$).8..|
00008a30  e1 0d 38 f4 04 0d 38 fe  12 dd 20 f2 69 6e 73 65  |..8...8... .inse|
00008a40  72 74 5f 64 61 74 65 0d  39 08 15 ea 20 6c 24 2c  |rt_date.9... l$,|
00008a50  72 24 2c 70 6f 73 69 74  69 6f 6e 25 0d 39 12 31  |r$,position%.9.1|
00008a60  70 6f 73 69 74 69 6f 6e  25 20 3d 20 a7 73 65 61  |position% = .sea|
00008a70  72 63 68 5f 73 74 72 69  6e 67 24 2c a4 75 70 70  |rch_string$,.upp|
00008a80  65 72 28 66 24 28 66 25  2c 30 29 29 29 0d 39 1c  |er(f$(f%,0))).9.|
00008a90  14 c8 95 20 70 6f 73 69  74 69 6f 6e 25 20 3e 20  |... position% > |
00008aa0  30 0d 39 26 28 20 20 70  6f 73 69 74 69 6f 6e 25  |0.9&(  position%|
00008ab0  20 3d 20 70 6f 73 69 74  69 6f 6e 25 20 2b 20 a9  | = position% + .|
00008ac0  20 66 24 28 66 25 2c 30  29 0d 39 30 6e 20 20 c8  | f$(f%,0).90n  .|
00008ad0  95 20 28 c1 73 65 61 72  63 68 5f 73 74 72 69 6e  |. (.search_strin|
00008ae0  67 24 2c 70 6f 73 69 74  69 6f 6e 25 2c 31 29 20  |g$,position%,1) |
00008af0  3c 22 30 22 20 84 20 c1  73 65 61 72 63 68 5f 73  |<"0" . .search_s|
00008b00  74 72 69 6e 67 24 2c 70  6f 73 69 74 69 6f 6e 25  |tring$,position%|
00008b10  2c 31 29 20 3e 22 31 22  29 20 80 20 70 6f 73 69  |,1) >"1") . posi|
00008b20  74 69 6f 6e 25 20 3c 20  a9 73 65 61 72 63 68 5f  |tion% < .search_|
00008b30  73 74 72 69 6e 67 24 0d  39 3a 21 20 20 20 20 20  |string$.9:!     |
00008b40  70 6f 73 69 74 69 6f 6e  25 20 3d 20 70 6f 73 69  |position% = posi|
00008b50  74 69 6f 6e 25 20 2b 31  0d 39 44 07 20 20 ce 0d  |tion% +1.9D.  ..|
00008b60  39 4e 93 20 20 73 65 61  72 63 68 5f 73 74 72 69  |9N.  search_stri|
00008b70  6e 67 24 20 3d 20 c0 73  65 61 72 63 68 5f 73 74  |ng$ = .search_st|
00008b80  72 69 6e 67 24 2c 70 6f  73 69 74 69 6f 6e 25 2d  |ring$,position%-|
00008b90  31 29 2b 22 46 4e 64 61  74 65 28 22 2b bd 33 34  |1)+"FNdate("+.34|
00008ba0  2b c1 73 65 61 72 63 68  5f 73 74 72 69 6e 67 24  |+.search_string$|
00008bb0  2c 70 6f 73 69 74 69 6f  6e 25 2c 38 29 2b bd 33  |,position%,8)+.3|
00008bc0  34 2b 22 29 22 2b c2 73  65 61 72 63 68 5f 73 74  |4+")"+.search_st|
00008bd0  72 69 6e 67 24 2c a9 73  65 61 72 63 68 5f 73 74  |ring$,.search_st|
00008be0  72 69 6e 67 24 2d 70 6f  73 69 74 69 6f 6e 25 2d  |ring$-position%-|
00008bf0  38 29 0d 39 58 23 6c 24  20 3d 20 c0 73 65 61 72  |8).9X#l$ = .sear|
00008c00  63 68 5f 73 74 72 69 6e  67 24 2c 70 6f 73 69 74  |ch_string$,posit|
00008c10  69 6f 6e 25 29 0d 39 62  35 72 24 20 3d 20 c2 73  |ion%).9b5r$ = .s|
00008c20  65 61 72 63 68 5f 73 74  72 69 6e 67 24 2c a9 28  |earch_string$,.(|
00008c30  73 65 61 72 63 68 5f 73  74 72 69 6e 67 24 29 2d  |search_string$)-|
00008c40  70 6f 73 69 74 69 6f 6e  25 29 0d 39 6c 4f 6c 24  |position%).9lOl$|
00008c50  3d 20 a4 72 65 70 6c 61  63 65 28 6c 24 2c a4 75  |= .replace(l$,.u|
00008c60  70 70 65 72 28 66 24 28  66 25 2c 30 29 29 2c 22  |pper(f$(f%,0)),"|
00008c70  46 4e 64 61 74 65 28 63  75 72 72 65 6e 74 5f 66  |FNdate(current_f|
00008c80  69 65 6c 64 5f 76 61 6c  75 65 24 28 22 2b c3 28  |ield_value$("+.(|
00008c90  66 25 29 2b 22 29 29 22  29 0d 39 76 1c 73 65 61  |f%)+"))").9v.sea|
00008ca0  72 63 68 5f 73 74 72 69  6e 67 24 20 3d 20 6c 24  |rch_string$ = l$|
00008cb0  20 2b 20 72 24 0d 39 80  31 70 6f 73 69 74 69 6f  | + r$.9.1positio|
00008cc0  6e 25 20 3d 20 a7 73 65  61 72 63 68 5f 73 74 72  |n% = .search_str|
00008cd0  69 6e 67 24 2c a4 75 70  70 65 72 28 66 24 28 66  |ing$,.upper(f$(f|
00008ce0  25 2c 30 29 29 29 0d 39  8a 05 ce 0d 39 94 05 e1  |%,0))).9....9...|
00008cf0  0d 39 9e 04 0d 39 a8 04  0d 39 b2 04 0d 39 bc 05  |.9...9...9...9..|
00008d00  20 0d 39 c6 04 0d 39 d0  1c dd 20 a4 76 61 6c 69  | .9...9... .vali|
00008d10  64 5f 73 65 61 72 63 68  5f 63 72 69 74 65 72 69  |d_search_criteri|
00008d20  61 0d 39 da 1b ea 20 74  6f 74 61 6c 25 2c 20 6f  |a.9... total%, o|
00008d30  6b 25 2c 20 6c 69 73 74  25 2c 20 64 0d 39 e4 0b  |k%, list%, d.9..|
00008d40  6f 6b 25 20 3d 20 b9 0d  39 ee 1c e7 20 a9 20 73  |ok% = ..9... . s|
00008d50  65 61 72 63 68 5f 73 74  72 69 6e 67 24 20 3d 20  |earch_string$ = |
00008d60  30 20 8c 0d 39 f8 55 20  20 20 f2 65 72 72 6f 72  |0 ..9.U   .error|
00008d70  5f 6d 65 73 73 61 67 65  28 22 41 20 73 65 61 72  |_message("A sear|
00008d80  63 68 20 73 74 72 69 6e  67 20 6d 75 73 74 20 62  |ch string must b|
00008d90  65 20 65 6e 74 65 72 65  64 2e 20 55 73 65 20 41  |e entered. Use A|
00008da0  4c 4c 20 74 6f 20 6c 69  73 74 20 61 6c 6c 20 72  |LL to list all r|
00008db0  65 63 6f 72 64 73 22 29  0d 3a 02 09 6f 6b 25 3d  |ecords").:..ok%=|
00008dc0  a3 0d 3a 0c 05 cd 0d 3a  16 0e 74 6f 74 61 6c 25  |..:....:..total%|
00008dd0  20 3d 20 30 0d 3a 20 16  20 20 20 e3 20 6c 69 73  | = 0.: .   . lis|
00008de0  74 25 20 3d 20 30 20 b8  20 35 0d 3a 2a 32 20 20  |t% = 0 . 5.:*2  |
00008df0  20 20 20 74 6f 74 61 6c  25 20 3d 20 74 6f 74 61  |   total% = tota|
00008e00  6c 25 20 2b 20 a9 20 28  6f 75 74 70 75 74 5f 6c  |l% + . (output_l|
00008e10  69 73 74 24 28 6c 69 73  74 25 29 29 0d 3a 34 08  |ist$(list%)).:4.|
00008e20  20 20 20 ed 0d 3a 3e 12  e7 20 74 6f 74 61 6c 25  |   ..:>.. total%|
00008e30  20 3d 20 30 20 8c 0d 3a  48 09 6f 6b 25 3d a3 0d  | = 0 ..:H.ok%=..|
00008e40  3a 52 54 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |:RT   .error_mes|
00008e50  73 61 67 65 28 22 41 74  20 6c 65 61 73 74 20 6f  |sage("At least o|
00008e60  6e 65 20 6f 66 20 74 68  65 20 6f 75 74 70 75 74  |ne of the output|
00008e70  20 6c 69 6e 65 73 20 6d  75 73 74 20 63 6f 6e 74  | lines must cont|
00008e80  61 69 6e 20 61 20 66 69  65 6c 64 20 6e 61 6d 65  |ain a field name|
00008e90  2e 22 29 0d 3a 5c 05 cd  0d 3a 66 07 ea 20 85 0d  |.").:\...:f.. ..|
00008ea0  3a 70 4e ee 20 85 20 ea  20 6f 6b 25 20 3d 20 a3  |:pN. . . ok% = .|
00008eb0  20 3a f2 65 72 72 6f 72  5f 6d 65 73 73 61 67 65  | :.error_message|
00008ec0  28 22 54 68 65 20 73 65  61 72 63 68 20 73 74 72  |("The search str|
00008ed0  69 6e 67 20 63 6f 6e 74  61 69 6e 73 20 61 20 73  |ing contains a s|
00008ee0  79 6e 74 61 78 20 65 72  72 6f 72 22 29 0d 3a 7a  |yntax error").:z|
00008ef0  1f e7 20 6f 6b 25 20 8c  20 64 3d a0 28 73 65 61  |.. ok% . d=.(sea|
00008f00  72 63 68 5f 73 74 72 69  6e 67 24 29 0d 3a 84 07  |rch_string$).:..|
00008f10  f7 20 85 0d 3a 8e 08 3d  6f 6b 25 0d 3a 98 05 20  |. ..:..=ok%.:.. |
00008f20  0d 3a a2 0d dd 20 f2 73  63 72 65 65 6e 0d 3a ac  |.:... .screen.:.|
00008f30  0e 65 72 72 6f 72 25 20  3d 20 a3 0d 3a b6 18 f2  |.error% = ..:...|
00008f40  65 78 74 72 61 63 74 5f  72 65 63 6f 72 64 5f 64  |extract_record_d|
00008f50  61 74 61 0d 3a c0 15 e7  20 a4 76 61 6c 69 64 5f  |ata.:... .valid_|
00008f60  72 65 63 6f 72 64 20 8c  0d 3a ca 3f 20 20 f2 77  |record ..:.?  .w|
00008f70  72 69 74 65 5f 72 65 63  6f 72 64 28 bb 28 24 72  |rite_record(.($r|
00008f80  65 63 5f 6e 75 6d 62 65  72 25 29 29 20 3a 20 f4  |ec_number%)) : .|
00008f90  20 73 61 76 65 20 74 68  65 20 6c 61 74 65 73 74  | save the latest|
00008fa0  20 72 65 63 6f 72 64 0d  3a d4 1a 20 20 f2 65 78  | record.:..  .ex|
00008fb0  74 72 61 63 74 5f 6f 75  74 70 75 74 5f 6c 69 73  |tract_output_lis|
00008fc0  74 0d 3a de 1b 20 20 f2  63 72 65 61 74 65 5f 73  |t.:..  .create_s|
00008fd0  65 61 72 63 68 5f 73 74  72 69 6e 67 0d 3a e8 20  |earch_string.:. |
00008fe0  20 20 e7 20 a4 76 61 6c  69 64 5f 73 65 61 72 63  |  . .valid_searc|
00008ff0  68 5f 63 72 69 74 65 72  69 61 20 8c 0d 3a f2 15  |h_criteria ..:..|
00009000  20 20 e3 20 6c 69 73 74  25 20 3d 20 30 20 b8 20  |  . list% = 0 . |
00009010  35 0d 3a fc 2c 20 20 20  20 70 6f 69 6e 74 65 72  |5.:.,    pointer|
00009020  25 20 3d 20 6f 75 74 70  75 74 5f 64 69 73 70 6c  |% = output_displ|
00009030  61 79 25 2b 6c 69 73 74  25 2a 33 30 30 0d 3b 06  |ay%+list%*300.;.|
00009040  16 20 20 20 20 24 70 6f  69 6e 74 65 72 25 20 3d  |.    $pointer% =|
00009050  20 22 22 0d 3b 10 07 20  20 ed 0d 3b 1a 22 20 20  | "".;..  ..;."  |
00009060  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 73 63 72  |.open_window(scr|
00009070  65 65 6e 5f 77 69 6e 64  6f 77 25 29 0d 3b 24 0e  |een_window%).;$.|
00009080  20 20 72 65 63 25 20 3d  20 31 0d 3b 2e 10 20 20  |  rec% = 1.;..  |
00009090  6d 61 74 63 68 25 20 3d  20 30 0d 3b 38 1a 20 20  |match% = 0.;8.  |
000090a0  24 6f 75 74 70 75 74 5f  72 65 63 25 20 3d 20 c3  |$output_rec% = .|
000090b0  72 65 63 25 0d 3b 42 19  20 20 24 6d 61 74 63 68  |rec%.;B.  $match|
000090c0  65 73 25 20 3d 20 c3 6d  61 74 63 68 25 0d 3b 4c  |es% = .match%.;L|
000090d0  37 20 20 c8 99 22 57 69  6d 70 5f 46 6f 72 63 65  |7  .."Wimp_Force|
000090e0  52 65 64 72 61 77 22 2c  73 63 72 65 65 6e 5f 77  |Redraw",screen_w|
000090f0  69 6e 64 6f 77 25 2c 30  2c 2d 35 30 30 2c 34 30  |indow%,0,-500,40|
00009100  30 30 2c 30 0d 3b 56 11  20 20 65 73 63 61 70 65  |00,0.;V.  escape|
00009110  25 20 3d 20 a3 0d 3b 60  0e 20 20 f2 70 6f 6c 6c  |% = ..;`.  .poll|
00009120  28 30 29 0d 3b 6a 2f 20  20 c8 95 20 72 65 63 25  |(0).;j/  .. rec%|
00009130  20 3c 3d 20 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  | <= number_of_re|
00009140  63 6f 72 64 73 25 20 80  20 ac 20 65 73 63 61 70  |cords% . . escap|
00009150  65 25 0d 3b 74 1a 20 20  20 20 f2 72 65 61 64 5f  |e%.;t.    .read_|
00009160  72 65 63 6f 72 64 28 72  65 63 25 29 0d 3b 7e 2d  |record(rec%).;~-|
00009170  20 20 20 20 e7 20 ac 20  63 61 73 65 5f 73 65 6e  |    . . case_sen|
00009180  73 25 20 8c 20 f2 63 6f  6e 76 65 72 74 5f 72 65  |s% . .convert_re|
00009190  63 6f 72 64 5f 63 61 73  65 0d 3b 88 1d 20 20 20  |cord_case.;..   |
000091a0  20 e7 20 a0 28 73 65 61  72 63 68 5f 73 74 72 69  | . .(search_stri|
000091b0  6e 67 24 29 20 8c 0d 3b  92 3e 20 20 20 20 f2 72  |ng$) ..;.>    .r|
000091c0  65 61 64 5f 72 65 63 6f  72 64 28 72 65 63 25 29  |ead_record(rec%)|
000091d0  20 3a 20 f4 20 62 65 63  61 75 73 65 20 74 68 65  | : . because the|
000091e0  20 63 61 73 65 20 6d 61  79 20 62 65 20 63 68 61  | case may be cha|
000091f0  6e 67 65 64 0d 3b 9c 1f  20 20 20 20 e7 20 74 61  |nged.;..    . ta|
00009200  62 75 6c 61 74 65 25 20  8c 20 f2 74 61 62 75 6c  |bulate% . .tabul|
00009210  61 74 65 0d 3b a6 14 20  20 20 20 20 20 6d 61 74  |ate.;..      mat|
00009220  63 68 25 20 2b 3d 31 0d  3b b0 1e 20 20 20 20 20  |ch% +=1.;..     |
00009230  20 24 6f 75 74 70 75 74  5f 72 65 63 25 20 3d 20  | $output_rec% = |
00009240  c3 72 65 63 25 0d 3b ba  1d 20 20 20 20 20 20 24  |.rec%.;..      $|
00009250  6d 61 74 63 68 65 73 25  20 3d 20 c3 6d 61 74 63  |matches% = .matc|
00009260  68 25 0d 3b c4 1a 20 20  20 20 20 20 20 e3 20 6c  |h%.;..       . l|
00009270  69 73 74 25 20 3d 20 30  20 b8 20 35 0d 3b ce 30  |ist% = 0 . 5.;.0|
00009280  20 20 20 20 20 20 20 20  70 6f 69 6e 74 65 72 25  |        pointer%|
00009290  20 3d 20 6f 75 74 70 75  74 5f 64 69 73 70 6c 61  | = output_displa|
000092a0  79 25 2b 6c 69 73 74 25  2a 33 30 30 0d 3b d8 29  |y%+list%*300.;.)|
000092b0  20 20 20 20 20 20 20 20  e7 20 a9 28 6f 75 74 70  |        . .(outp|
000092c0  75 74 5f 6c 69 73 74 24  28 6c 69 73 74 25 29 29  |ut_list$(list%))|
000092d0  20 3e 30 20 8c 0d 3b e2  16 20 20 20 20 20 20 20  | >0 ..;..       |
000092e0  20 20 20 f2 64 6f 5f 6c  69 73 74 0d 3b ec 0d 20  |   .do_list.;.. |
000092f0  20 20 20 20 20 20 20 cc  0d 3b f6 1c 20 20 20 20  |       ..;..    |
00009300  20 20 20 20 20 20 24 70  6f 69 6e 74 65 72 25 20  |      $pointer% |
00009310  3d 20 22 22 0d 3c 00 0e  20 20 20 20 20 20 20 20  |= "".<..        |
00009320  20 cd 0d 3c 0a 0c 20 20  20 20 20 20 20 ed 0d 3c  | ..<..       ..<|
00009330  14 3b 20 20 20 20 20 20  c8 99 22 57 69 6d 70 5f  |.;      .."Wimp_|
00009340  46 6f 72 63 65 52 65 64  72 61 77 22 2c 73 63 72  |ForceRedraw",scr|
00009350  65 65 6e 5f 77 69 6e 64  6f 77 25 2c 30 2c 2d 35  |een_window%,0,-5|
00009360  30 30 2c 34 30 30 30 2c  30 0d 3c 1e 09 20 20 20  |00,4000,0.<..   |
00009370  20 cc 0d 3c 28 1e 20 20  20 20 20 20 24 6f 75 74  | ..<(.      $out|
00009380  70 75 74 5f 72 65 63 25  20 3d 20 c3 72 65 63 25  |put_rec% = .rec%|
00009390  0d 3c 32 3d 20 20 20 20  20 20 c8 99 22 57 69 6d  |.<2=      .."Wim|
000093a0  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 73  |p_ForceRedraw",s|
000093b0  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 2c 36 32  |creen_window%,62|
000093c0  30 2c 2d 36 32 2c 37 37  30 2c 2d 31 34 0d 3c 3c  |0,-62,770,-14.<<|
000093d0  09 20 20 20 20 cd 0d 3c  46 10 20 20 20 20 72 65  |.    ..<F.    re|
000093e0  63 25 20 2b 3d 31 0d 3c  50 10 20 20 20 20 f2 70  |c% +=1.<P.    .p|
000093f0  6f 6c 6c 28 30 29 0d 3c  5a 07 20 20 ce 0d 3c 64  |oll(0).<Z.  ..<d|
00009400  40 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 28  |@  .read_record(|
00009410  bb 28 24 72 65 63 5f 6e  75 6d 62 65 72 25 29 29  |.($rec_number%))|
00009420  20 3a 20 f4 20 72 65 6c  6f 61 64 20 74 68 65 20  | : . reload the |
00009430  6c 61 74 65 73 74 20 72  65 63 6f 72 64 0d 3c 6e  |latest record.<n|
00009440  12 20 20 e7 20 ac 20 65  72 72 6f 72 25 20 8c 0d  |.  . . error% ..|
00009450  3c 78 12 20 20 e7 20 65  73 63 61 70 65 25 20 20  |<x.  . escape%  |
00009460  8c 0d 3c 82 6a 20 20 20  20 20 20 f2 65 72 72 6f  |..<.j      .erro|
00009470  72 5f 6d 65 73 73 61 67  65 28 22 53 74 6f 70 20  |r_message("Stop |
00009480  73 65 6c 65 63 74 65 64  2e 20 53 65 61 72 63 68  |selected. Search|
00009490  20 69 6e 63 6f 6d 70 6c  65 74 65 2e 20 22 2b c3  | incomplete. "+.|
000094a0  28 6d 61 74 63 68 25 29  2b 22 20 6d 61 74 63 68  |(match%)+" match|
000094b0  65 73 20 68 61 76 65 20  62 65 65 6e 20 66 6f 75  |es have been fou|
000094c0  6e 64 20 73 6f 20 66 61  72 22 29 0d 3c 8c 09 20  |nd so far").<.. |
000094d0  20 20 20 cc 0d 3c 96 52  20 20 20 20 20 20 f2 65  |   ..<.R      .e|
000094e0  72 72 6f 72 5f 6d 65 73  73 61 67 65 28 22 53 65  |rror_message("Se|
000094f0  61 72 63 68 20 63 6f 6d  70 6c 65 74 65 2e 20 22  |arch complete. "|
00009500  2b c3 28 6d 61 74 63 68  25 29 2b 22 20 6d 61 74  |+.(match%)+" mat|
00009510  63 68 65 73 20 68 61 76  65 20 62 65 65 6e 20 66  |ches have been f|
00009520  6f 75 6e 64 22 29 0d 3c  a0 07 20 20 cd 0d 3c aa  |ound").<..  ..<.|
00009530  07 20 20 cd 0d 3c b4 07  20 20 cd 0d 3c be 05 cd  |.  ..<..  ..<...|
00009540  0d 3c c8 05 e1 0d 3c d2  04 0d 3c dc 04 0d 3c e6  |.<....<...<...<.|
00009550  0e dd 20 f2 70 72 69 6e  74 65 72 0d 3c f0 0f 65  |.. .printer.<..e|
00009560  73 63 61 70 65 25 20 3d  20 a3 0d 3c fa 13 e7 20  |scape% = ..<... |
00009570  a4 70 72 69 6e 74 65 72  5f 6f 6e 20 8c 0d 3d 04  |.printer_on ..=.|
00009580  18 f2 65 78 74 72 61 63  74 5f 72 65 63 6f 72 64  |..extract_record|
00009590  5f 64 61 74 61 0d 3d 0e  15 e7 20 a4 76 61 6c 69  |_data.=... .vali|
000095a0  64 5f 72 65 63 6f 72 64  20 8c 0d 3d 18 3f 20 20  |d_record ..=.?  |
000095b0  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 bb 28  |.write_record(.(|
000095c0  24 72 65 63 5f 6e 75 6d  62 65 72 25 29 29 20 3a  |$rec_number%)) :|
000095d0  20 f4 20 73 61 76 65 20  74 68 65 20 6c 61 74 65  | . save the late|
000095e0  73 74 20 72 65 63 6f 72  64 0d 3d 22 1a 20 20 f2  |st record.=".  .|
000095f0  65 78 74 72 61 63 74 5f  6f 75 74 70 75 74 5f 6c  |extract_output_l|
00009600  69 73 74 0d 3d 2c 1b 20  20 f2 63 72 65 61 74 65  |ist.=,.  .create|
00009610  5f 73 65 61 72 63 68 5f  73 74 72 69 6e 67 0d 3d  |_search_string.=|
00009620  36 20 20 20 e7 20 a4 76  61 6c 69 64 5f 73 65 61  |6   . .valid_sea|
00009630  72 63 68 5f 63 72 69 74  65 72 69 61 20 8c 0d 3d  |rch_criteria ..=|
00009640  40 15 20 20 e3 20 6c 69  73 74 25 20 3d 20 30 20  |@.  . list% = 0 |
00009650  b8 20 35 0d 3d 4a 2c 20  20 20 20 70 6f 69 6e 74  |. 5.=J,    point|
00009660  65 72 25 20 3d 20 6f 75  74 70 75 74 5f 64 69 73  |er% = output_dis|
00009670  70 6c 61 79 25 2b 6c 69  73 74 25 2a 33 30 30 0d  |play%+list%*300.|
00009680  3d 54 16 20 20 20 20 24  70 6f 69 6e 74 65 72 25  |=T.    $pointer%|
00009690  20 3d 20 22 22 0d 3d 5e  07 20 20 ed 0d 3d 68 22  | = "".=^.  ..=h"|
000096a0  20 20 f2 6f 70 65 6e 5f  77 69 6e 64 6f 77 28 73  |  .open_window(s|
000096b0  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 29 0d 3d  |creen_window%).=|
000096c0  72 0e 20 20 72 65 63 25  20 3d 20 31 0d 3d 7c 10  |r.  rec% = 1.=|.|
000096d0  20 20 6d 61 74 63 68 25  20 3d 20 30 0d 3d 86 1a  |  match% = 0.=..|
000096e0  20 20 24 6f 75 74 70 75  74 5f 72 65 63 25 20 3d  |  $output_rec% =|
000096f0  20 c3 72 65 63 25 0d 3d  90 19 20 20 24 6d 61 74  | .rec%.=..  $mat|
00009700  63 68 65 73 25 20 3d 20  c3 6d 61 74 63 68 25 0d  |ches% = .match%.|
00009710  3d 9a 37 20 20 c8 99 22  57 69 6d 70 5f 46 6f 72  |=.7  .."Wimp_For|
00009720  63 65 52 65 64 72 61 77  22 2c 73 63 72 65 65 6e  |ceRedraw",screen|
00009730  5f 77 69 6e 64 6f 77 25  2c 30 2c 2d 35 30 30 2c  |_window%,0,-500,|
00009740  34 30 30 30 2c 30 0d 3d  a4 11 20 20 65 73 63 61  |4000,0.=..  esca|
00009750  70 65 25 20 3d 20 a3 0d  3d ae 0e 20 20 f2 70 6f  |pe% = ..=..  .po|
00009760  6c 6c 28 30 29 0d 3d b8  2f 20 20 c8 95 20 72 65  |ll(0).=./  .. re|
00009770  63 25 20 3c 3d 20 6e 75  6d 62 65 72 5f 6f 66 5f  |c% <= number_of_|
00009780  72 65 63 6f 72 64 73 25  20 80 20 ac 20 65 73 63  |records% . . esc|
00009790  61 70 65 25 0d 3d c2 1a  20 20 20 20 f2 72 65 61  |ape%.=..    .rea|
000097a0  64 5f 72 65 63 6f 72 64  28 72 65 63 25 29 0d 3d  |d_record(rec%).=|
000097b0  cc 2d 20 20 20 20 e7 20  ac 20 63 61 73 65 5f 73  |.-    . . case_s|
000097c0  65 6e 73 25 20 8c 20 f2  63 6f 6e 76 65 72 74 5f  |ens% . .convert_|
000097d0  72 65 63 6f 72 64 5f 63  61 73 65 0d 3d d6 1d 20  |record_case.=.. |
000097e0  20 20 20 e7 20 a0 28 73  65 61 72 63 68 5f 73 74  |   . .(search_st|
000097f0  72 69 6e 67 24 29 20 8c  0d 3d e0 3e 20 20 20 20  |ring$) ..=.>    |
00009800  f2 72 65 61 64 5f 72 65  63 6f 72 64 28 72 65 63  |.read_record(rec|
00009810  25 29 20 3a 20 f4 20 62  65 63 61 75 73 65 20 74  |%) : . because t|
00009820  68 65 20 63 61 73 65 20  6d 61 79 20 62 65 20 63  |he case may be c|
00009830  68 61 6e 67 65 64 0d 3d  ea 1f 20 20 20 20 e7 20  |hanged.=..    . |
00009840  74 61 62 75 6c 61 74 65  25 20 8c 20 f2 74 61 62  |tabulate% . .tab|
00009850  75 6c 61 74 65 0d 3d f4  14 20 20 20 20 20 20 6d  |ulate.=..      m|
00009860  61 74 63 68 25 20 2b 3d  31 0d 3d fe 1e 20 20 20  |atch% +=1.=..   |
00009870  20 20 20 24 6f 75 74 70  75 74 5f 72 65 63 25 20  |   $output_rec% |
00009880  3d 20 c3 72 65 63 25 0d  3e 08 1d 20 20 20 20 20  |= .rec%.>..     |
00009890  20 24 6d 61 74 63 68 65  73 25 20 3d 20 c3 6d 61  | $matches% = .ma|
000098a0  74 63 68 25 0d 3e 12 1a  20 20 20 20 20 20 20 e3  |tch%.>..       .|
000098b0  20 6c 69 73 74 25 20 3d  20 30 20 b8 20 35 0d 3e  | list% = 0 . 5.>|
000098c0  1c 30 20 20 20 20 20 20  20 20 70 6f 69 6e 74 65  |.0        pointe|
000098d0  72 25 20 3d 20 6f 75 74  70 75 74 5f 64 69 73 70  |r% = output_disp|
000098e0  6c 61 79 25 2b 6c 69 73  74 25 2a 33 30 30 0d 3e  |lay%+list%*300.>|
000098f0  26 29 20 20 20 20 20 20  20 20 e7 20 a9 28 6f 75  |&)        . .(ou|
00009900  74 70 75 74 5f 6c 69 73  74 24 28 6c 69 73 74 25  |tput_list$(list%|
00009910  29 29 20 3e 30 20 8c 0d  3e 30 16 20 20 20 20 20  |)) >0 ..>0.     |
00009920  20 20 20 20 20 f2 64 6f  5f 6c 69 73 74 0d 3e 3a  |     .do_list.>:|
00009930  1f 20 20 20 20 20 20 20  20 20 20 f2 70 72 69 6e  |.          .prin|
00009940  74 28 24 70 6f 69 6e 74  65 72 25 29 0d 3e 44 0d  |t($pointer%).>D.|
00009950  20 20 20 20 20 20 20 20  cc 0d 3e 4e 1c 20 20 20  |        ..>N.   |
00009960  20 20 20 20 20 20 20 24  70 6f 69 6e 74 65 72 25  |       $pointer%|
00009970  20 3d 20 22 22 0d 3e 58  0d 20 20 20 20 20 20 20  | = "".>X.       |
00009980  20 cd 0d 3e 62 0c 20 20  20 20 20 20 20 ed 0d 3e  | ..>b.       ..>|
00009990  6c 3b 20 20 20 20 20 20  c8 99 22 57 69 6d 70 5f  |l;      .."Wimp_|
000099a0  46 6f 72 63 65 52 65 64  72 61 77 22 2c 73 63 72  |ForceRedraw",scr|
000099b0  65 65 6e 5f 77 69 6e 64  6f 77 25 2c 30 2c 2d 35  |een_window%,0,-5|
000099c0  30 30 2c 34 30 30 30 2c  30 0d 3e 76 09 20 20 20  |00,4000,0.>v.   |
000099d0  20 cc 0d 3e 80 1e 20 20  20 20 20 20 24 6f 75 74  | ..>..      $out|
000099e0  70 75 74 5f 72 65 63 25  20 3d 20 c3 72 65 63 25  |put_rec% = .rec%|
000099f0  0d 3e 8a 3d 20 20 20 20  20 20 c8 99 22 57 69 6d  |.>.=      .."Wim|
00009a00  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 73  |p_ForceRedraw",s|
00009a10  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 2c 36 32  |creen_window%,62|
00009a20  30 2c 2d 36 32 2c 37 37  30 2c 2d 31 34 0d 3e 94  |0,-62,770,-14.>.|
00009a30  09 20 20 20 20 cd 0d 3e  9e 10 20 20 20 20 72 65  |.    ..>..    re|
00009a40  63 25 20 2b 3d 31 0d 3e  a8 10 20 20 20 20 f2 70  |c% +=1.>..    .p|
00009a50  6f 6c 6c 28 30 29 0d 3e  b2 07 20 20 ce 0d 3e bc  |oll(0).>..  ..>.|
00009a60  40 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 28  |@  .read_record(|
00009a70  bb 28 24 72 65 63 5f 6e  75 6d 62 65 72 25 29 29  |.($rec_number%))|
00009a80  20 3a 20 f4 20 72 65 6c  6f 61 64 20 74 68 65 20  | : . reload the |
00009a90  6c 61 74 65 73 74 20 72  65 63 6f 72 64 0d 3e c6  |latest record.>.|
00009aa0  12 20 20 e7 20 ac 20 65  72 72 6f 72 25 20 8c 0d  |.  . . error% ..|
00009ab0  3e d0 12 20 20 e7 20 65  73 63 61 70 65 25 20 20  |>..  . escape%  |
00009ac0  8c 0d 3e da 6a 20 20 20  20 20 20 f2 65 72 72 6f  |..>.j      .erro|
00009ad0  72 5f 6d 65 73 73 61 67  65 28 22 53 74 6f 70 20  |r_message("Stop |
00009ae0  73 65 6c 65 63 74 65 64  2e 20 53 65 61 72 63 68  |selected. Search|
00009af0  20 69 6e 63 6f 6d 70 6c  65 74 65 2e 20 22 2b c3  | incomplete. "+.|
00009b00  28 6d 61 74 63 68 25 29  2b 22 20 6d 61 74 63 68  |(match%)+" match|
00009b10  65 73 20 68 61 76 65 20  62 65 65 6e 20 66 6f 75  |es have been fou|
00009b20  6e 64 20 73 6f 20 66 61  72 22 29 0d 3e e4 09 20  |nd so far").>.. |
00009b30  20 20 20 cc 0d 3e ee 52  20 20 20 20 20 20 f2 65  |   ..>.R      .e|
00009b40  72 72 6f 72 5f 6d 65 73  73 61 67 65 28 22 53 65  |rror_message("Se|
00009b50  61 72 63 68 20 63 6f 6d  70 6c 65 74 65 2e 20 22  |arch complete. "|
00009b60  2b c3 28 6d 61 74 63 68  25 29 2b 22 20 6d 61 74  |+.(match%)+" mat|
00009b70  63 68 65 73 20 68 61 76  65 20 62 65 65 6e 20 66  |ches have been f|
00009b80  6f 75 6e 64 22 29 0d 3e  f8 07 20 20 cd 0d 3f 02  |ound").>..  ..?.|
00009b90  07 20 20 cd 0d 3f 0c 07  20 20 cd 0d 3f 16 05 cd  |.  ..?..  ..?...|
00009ba0  0d 3f 20 05 cd 0d 3f 2a  05 e1 0d 3f 34 04 0d 3f  |.? ...?*...?4..?|
00009bb0  3e 04 0d 3f 48 0e dd 20  f2 64 6f 5f 6c 69 73 74  |>..?H.. .do_list|
00009bc0  0d 3f 52 0a 20 20 20 ea  20 85 0d 3f 5c 16 20 20  |.?R.   . ..?\.  |
00009bd0  20 ee 20 85 20 ea 20 65  72 72 6f 72 25 20 3d b9  | . . . error% =.|
00009be0  0d 3f 66 13 20 20 20 e7  20 ac 20 65 72 72 6f 72  |.?f.   . . error|
00009bf0  25 20 8c 0d 3f 70 2d 20  20 20 20 20 20 20 24 70  |% ..?p-       $p|
00009c00  6f 69 6e 74 65 72 25 20  3d 20 a0 28 6f 75 74 70  |ointer% = .(outp|
00009c10  75 74 5f 6c 69 73 74 24  28 6c 69 73 74 25 29 29  |ut_list$(list%))|
00009c20  0d 3f 7a 08 20 20 20 cc  0d 3f 84 26 20 20 20 20  |.?z.   ..?.&    |
00009c30  20 f2 63 6c 6f 73 65 61  77 69 6e 64 6f 77 28 73  | .closeawindow(s|
00009c40  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 29 0d 3f  |creen_window%).?|
00009c50  8e 5f 20 20 20 20 20 f2  65 72 72 6f 72 5f 6d 65  |._     .error_me|
00009c60  73 73 61 67 65 28 22 4c  69 6e 65 20 22 2b c3 28  |ssage("Line "+.(|
00009c70  6c 69 73 74 25 2b 31 29  2b 22 20 63 6f 6e 74 61  |list%+1)+" conta|
00009c80  69 6e 73 20 61 6e 20 75  6e 6b 6e 6f 77 6e 20 66  |ins an unknown f|
00009c90  69 65 6c 64 20 6e 61 6d  65 20 6f 72 20 61 20 73  |ield name or a s|
00009ca0  79 6e 74 61 78 20 65 72  72 6f 72 22 29 0d 3f 98  |yntax error").?.|
00009cb0  14 20 20 20 20 20 65 73  63 61 70 65 25 20 3d 20  |.     escape% = |
00009cc0  b9 0d 3f a2 08 20 20 20  cd 0d 3f ac 0a 20 20 20  |..?..   ..?..   |
00009cd0  f7 20 85 0d 3f b6 05 e1  0d 3f c0 04 0d 3f ca 05  |. ..?....?...?..|
00009ce0  20 0d 3f d4 04 0d 3f de  04 0d 3f e8 04 0d 3f f2  | .?...?...?...?.|
00009cf0  12 dd 20 f2 66 69 6c 65  5f 6f 75 74 70 75 74 0d  |.. .file_output.|
00009d00  3f fc 20 20 20 f2 6f 70  65 6e 5f 77 69 6e 64 6f  |?.   .open_windo|
00009d10  77 28 73 61 76 65 5f 77  69 6e 64 6f 77 25 29 0d  |w(save_window%).|
00009d20  40 06 1c 20 20 77 69 6e  64 6f 77 25 20 3d 20 73  |@..  window% = s|
00009d30  61 76 65 5f 77 69 6e 64  6f 77 25 0d 40 10 12 20  |ave_window%.@.. |
00009d40  20 6e 65 77 5f 70 6f 73  25 20 3d 20 32 0d 40 1a  | new_pos% = 2.@.|
00009d50  10 20 20 f2 73 65 74 5f  63 61 72 65 74 0d 40 24  |.  .set_caret.@$|
00009d60  05 e1 0d 40 2e 05 20 0d  40 38 05 20 0d 40 42 13  |...@.. .@8. .@B.|
00009d70  dd 20 f2 70 72 69 6e 74  28 74 65 78 74 24 29 0d  |. .print(text$).|
00009d80  40 4c 06 ef 32 0d 40 56  14 e3 20 69 25 3d 20 31  |@L..2.@V.. i%= 1|
00009d90  20 b8 20 a9 74 65 78 74  24 0d 40 60 18 20 20 ef  | . .text$.@`.  .|
00009da0  31 2c 97 28 c1 74 65 78  74 24 2c 69 25 2c 31 29  |1,.(.text$,i%,1)|
00009db0  29 0d 40 6a 05 ed 0d 40  74 0e ef 31 2c 31 33 2c  |).@j...@t..1,13,|
00009dc0  31 2c 31 30 0d 40 7e 06  ef 33 0d 40 88 05 e1 0d  |1,10.@~..3.@....|
00009dd0  40 92 04 0d 40 9c 04 0d  40 a6 04 0d 40 b0 11 dd  |@...@...@...@...|
00009de0  20 a4 70 72 69 6e 74 65  72 5f 6f 6e 0d 40 ba 06  | .printer_on.@..|
00009df0  ef 37 0d 40 c4 14 ef 20  32 2c 31 2c 36 35 2c 31  |.7.@... 2,1,65,1|
00009e00  2c 31 32 37 2c 33 0d 40  ce 15 e7 20 96 28 2d 34  |,127,3.@... .(-4|
00009e10  29 20 3e 3d 20 31 30 32  33 20 8c 0d 40 d8 06 3d  |) >= 1023 ..@..=|
00009e20  b9 0d 40 e2 05 cc 0d 40  ec 41 f2 65 72 72 6f 72  |..@....@.A.error|
00009e30  5f 6d 65 73 73 61 67 65  28 22 50 72 69 6e 74 65  |_message("Printe|
00009e40  72 20 69 73 20 6e 6f 74  20 72 65 73 70 6f 6e 64  |r is not respond|
00009e50  69 6e 67 2e 20 4f 75 74  70 75 74 20 63 61 6e 63  |ing. Output canc|
00009e60  65 6c 6c 65 64 22 29 0d  40 f6 06 3d a3 0d 41 00  |elled").@..=..A.|
00009e70  05 cd 0d 41 0a 04 0d 41  14 04 0d 41 1e 17 dd 20  |...A...A...A... |
00009e80  f2 63 61 73 65 5f 73 65  6e 73 5f 74 6f 67 67 6c  |.case_sens_toggl|
00009e90  65 0d 41 28 1d 63 61 73  65 5f 73 65 6e 73 25 20  |e.A(.case_sens% |
00009ea0  3d 20 ac 20 63 61 73 65  5f 73 65 6e 73 25 0d 41  |= . case_sens%.A|
00009eb0  32 05 e1 0d 41 3c 04 0d  41 46 04 0d 41 50 12 dd  |2...A<..AF..AP..|
00009ec0  20 f2 63 72 6c 66 5f 74  6f 67 67 6c 65 0d 41 5a  | .crlf_toggle.AZ|
00009ed0  13 63 72 6c 66 25 20 3d  20 ac 20 63 72 6c 66 25  |.crlf% = . crlf%|
00009ee0  0d 41 64 05 e1 0d 41 6e  04 0d 41 78 11 dd 20 f2  |.Ad...An..Ax.. .|
00009ef0  74 61 62 5f 74 6f 67 67  6c 65 0d 41 82 1b 74 61  |tab_toggle.A..ta|
00009f00  62 75 6c 61 74 65 25 20  3d 20 ac 20 74 61 62 75  |bulate% = . tabu|
00009f10  6c 61 74 65 25 0d 41 8c  05 e1 0d 41 96 04 0d 41  |late%.A....A...A|
00009f20  a0 04 0d 41 aa 1a dd 20  f2 63 6f 6e 76 65 72 74  |...A... .convert|
00009f30  5f 72 65 63 6f 72 64 5f  63 61 73 65 0d 41 b4 08  |_record_case.A..|
00009f40  ea 20 66 25 0d 41 be 20  e3 20 66 25 20 3d 20 30  |. f%.A. . f% = 0|
00009f50  20 b8 20 6e 75 6d 62 65  72 5f 6f 66 5f 66 69 65  | . number_of_fie|
00009f60  6c 64 73 25 0d 41 c8 41  20 20 63 75 72 72 65 6e  |lds%.A.A  curren|
00009f70  74 5f 66 69 65 6c 64 5f  76 61 6c 75 65 24 28 66  |t_field_value$(f|
00009f80  25 29 20 3d 20 a4 75 70  70 65 72 28 63 75 72 72  |%) = .upper(curr|
00009f90  65 6e 74 5f 66 69 65 6c  64 5f 76 61 6c 75 65 24  |ent_field_value$|
00009fa0  28 66 25 29 29 0d 41 d2  05 ed 0d 41 dc 05 e1 0d  |(f%)).A....A....|
00009fb0  41 e6 04 0d 41 f0 04 0d  41 fa 18 dd 20 f2 73 74  |A...A...A... .st|
00009fc0  61 72 74 5f 6f 75 74 70  75 74 5f 64 72 61 67 0d  |art_output_drag.|
00009fd0  42 04 11 20 20 ea 20 77  65 78 25 2c 77 65 79 25  |B..  . wex%,wey%|
00009fe0  0d 42 0e 1e 20 20 e7 20  28 62 75 74 74 6f 6e 25  |.B..  . (button%|
00009ff0  20 80 20 26 35 30 29 20  3c 3e 20 30 20 8c 0d 42  | . &50) <> 0 ..B|
0000a000  18 1c 20 20 21 62 6c 6f  63 6b 25 20 3d 20 73 61  |..  !block% = sa|
0000a010  76 65 5f 77 69 6e 64 6f  77 25 0d 42 22 25 20 20  |ve_window%.B"%  |
0000a020  c8 99 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |.."Wimp_GetWindo|
0000a030  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
0000a040  42 2c 21 20 20 77 65 78  25 20 3d 20 62 6c 6f 63  |B,!  wex% = bloc|
0000a050  6b 25 21 34 20 2d 20 62  6c 6f 63 6b 25 21 32 30  |k%!4 - block%!20|
0000a060  0d 42 36 22 20 20 77 65  79 25 20 3d 20 62 6c 6f  |.B6"  wey% = blo|
0000a070  63 6b 25 21 31 36 20 2d  20 62 6c 6f 63 6b 25 21  |ck%!16 - block%!|
0000a080  32 34 0d 42 40 30 20 20  62 6c 6f 63 6b 25 21 34  |24.B@0  block%!4|
0000a090  20 3d 20 33 20 3a 20 f4  20 69 63 6f 6e 20 68 61  | = 3 : . icon ha|
0000a0a0  6e 64 6c 65 20 66 6f 72  20 64 72 61 67 20 69 63  |ndle for drag ic|
0000a0b0  6f 6e 0d 42 4a 23 20 20  c8 99 22 57 69 6d 70 5f  |on.BJ#  .."Wimp_|
0000a0c0  47 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 62  |GetIconState",,b|
0000a0d0  6c 6f 63 6b 25 0d 42 54  1c 20 20 21 62 6c 6f 63  |lock%.BT.  !bloc|
0000a0e0  6b 25 20 3d 20 73 61 76  65 5f 77 69 6e 64 6f 77  |k% = save_window|
0000a0f0  25 0d 42 5e 12 20 20 62  6c 6f 63 6b 25 21 34 20  |%.B^.  block%!4 |
0000a100  3d 20 35 0d 42 68 1f 20  20 62 6c 6f 63 6b 25 21  |= 5.Bh.  block%!|
0000a110  38 20 3d 20 62 6c 6f 63  6b 25 21 38 20 2b 77 65  |8 = block%!8 +we|
0000a120  78 25 0d 42 72 21 20 20  62 6c 6f 63 6b 25 21 31  |x%.Br!  block%!1|
0000a130  32 20 3d 20 62 6c 6f 63  6b 25 21 31 32 20 2b 77  |2 = block%!12 +w|
0000a140  65 79 25 0d 42 7c 21 20  20 62 6c 6f 63 6b 25 21  |ey%.B|!  block%!|
0000a150  31 36 20 3d 20 62 6c 6f  63 6b 25 21 31 36 20 2b  |16 = block%!16 +|
0000a160  77 65 78 25 0d 42 86 21  20 20 62 6c 6f 63 6b 25  |wex%.B.!  block%|
0000a170  21 32 30 20 3d 20 62 6c  6f 63 6b 25 21 32 30 20  |!20 = block%!20 |
0000a180  2b 77 65 79 25 0d 42 90  13 20 20 62 6c 6f 63 6b  |+wey%.B..  block|
0000a190  25 21 32 34 20 3d 20 30  0d 42 9a 13 20 20 62 6c  |%!24 = 0.B..  bl|
0000a1a0  6f 63 6b 25 21 32 38 20  3d 20 30 0d 42 a4 1b 20  |ock%!28 = 0.B.. |
0000a1b0  20 62 6c 6f 63 6b 25 21  33 32 20 3d 20 26 37 46  | block%!32 = &7F|
0000a1c0  46 46 46 46 46 46 0d 42  ae 1b 20 20 62 6c 6f 63  |FFFFFF.B..  bloc|
0000a1d0  6b 25 21 33 36 20 3d 20  26 37 46 46 46 46 46 46  |k%!36 = &7FFFFFF|
0000a1e0  46 0d 42 b8 1e 20 20 c8  99 22 57 69 6d 70 5f 44  |F.B..  .."Wimp_D|
0000a1f0  72 61 67 42 6f 78 22 2c  2c 62 6c 6f 63 6b 25 0d  |ragBox",,block%.|
0000a200  42 c2 07 20 20 cd 0d 42  cc 05 e1 0d 42 d6 04 0d  |B..  ..B....B...|
0000a210  42 e0 04 0d 42 ea 16 dd  20 f2 73 74 61 72 74 5f  |B...B... .start_|
0000a220  64 69 73 6b 5f 6c 69 73  74 0d 42 f4 23 c8 99 22  |disk_list.B.#.."|
0000a230  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
0000a240  6e 66 6f 22 2c 2c 62 6c  6f 63 6b 25 0d 42 fe 12  |nfo",,block%.B..|
0000a250  62 6c 6f 63 6b 25 21 32  30 20 3d 20 36 34 0d 43  |block%!20 = 64.C|
0000a260  08 11 62 6c 6f 63 6b 25  21 33 32 20 3d 20 30 0d  |..block%!32 = 0.|
0000a270  43 12 11 62 6c 6f 63 6b  25 21 33 36 20 3d 20 31  |C..block%!36 = 1|
0000a280  0d 43 1c 19 62 6c 6f 63  6b 25 21 34 30 20 3d 20  |.C..block%!40 = |
0000a290  62 6c 6f 63 6b 25 21 31  32 0d 43 26 19 62 6c 6f  |block%!12.C&.blo|
0000a2a0  63 6b 25 21 34 34 20 3d  20 62 6c 6f 63 6b 25 21  |ck%!44 = block%!|
0000a2b0  31 36 0d 43 30 17 62 6c  6f 63 6b 25 21 34 38 20  |16.C0.block%!48 |
0000a2c0  3d 20 21 62 6c 6f 63 6b  25 0d 43 3a 18 62 6c 6f  |= !block%.C:.blo|
0000a2d0  63 6b 25 21 35 32 20 3d  20 62 6c 6f 63 6b 25 21  |ck%!52 = block%!|
0000a2e0  34 0d 43 44 2a 62 6c 6f  63 6b 25 21 35 36 20 3d  |4.CD*block%!56 =|
0000a2f0  20 31 30 30 30 30 20 3a  20 f4 20 73 69 7a 65 20  | 10000 : . size |
0000a300  6f 66 20 74 68 65 20 66  69 6c 65 0d 43 4e 2f 62  |of the file.CN/b|
0000a310  6c 6f 63 6b 25 21 36 30  20 3d 20 26 46 46 46 20  |lock%!60 = &FFF |
0000a320  20 3a 20 f4 20 66 69 6c  65 20 74 79 70 65 20 6f  | : . file type o|
0000a330  66 20 74 68 65 20 66 69  6c 65 0d 43 58 2a 24 28  |f the file.CX*$(|
0000a340  62 6c 6f 63 6b 25 2b 36  34 29 20 3d 20 a4 6c 65  |block%+64) = .le|
0000a350  61 66 28 24 74 65 78 74  5f 66 69 6c 65 5f 6e 61  |af($text_file_na|
0000a360  6d 65 25 29 0d 43 62 2d  3f 28 62 6c 6f 63 6b 25  |me%).Cb-?(block%|
0000a370  2b 36 35 2b a9 a4 6c 65  61 66 28 24 74 65 78 74  |+65+..leaf($text|
0000a380  5f 66 69 6c 65 5f 6e 61  6d 65 25 29 29 20 3d 20  |_file_name%)) = |
0000a390  30 0d 43 6c 39 c8 99 22  57 69 6d 70 5f 53 65 6e  |0.Cl9.."Wimp_Sen|
0000a3a0  64 4d 65 73 73 61 67 65  22 2c 31 37 2c 62 6c 6f  |dMessage",17,blo|
0000a3b0  63 6b 25 2b 32 30 2c 62  6c 6f 63 6b 25 21 31 32  |ck%+20,block%!12|
0000a3c0  2c 62 6c 6f 63 6b 25 21  31 36 0d 43 76 05 e1 0d  |,block%!16.Cv...|
0000a3d0  43 80 04 0d 43 8a 04 0d  43 94 04 0d 43 9e 20 dd  |C...C...C...C. .|
0000a3e0  20 f2 70 72 6f 64 75 63  65 5f 6f 75 74 70 75 74  | .produce_output|
0000a3f0  28 66 69 6c 65 6e 61 6d  65 24 29 0d 43 a8 0e 65  |(filename$).C..e|
0000a400  72 72 6f 72 25 20 3d 20  a3 0d 43 b2 18 f2 65 78  |rror% = ..C...ex|
0000a410  74 72 61 63 74 5f 72 65  63 6f 72 64 5f 64 61 74  |tract_record_dat|
0000a420  61 0d 43 bc 30 e7 20 a4  76 61 6c 69 64 5f 72 65  |a.C.0. .valid_re|
0000a430  63 6f 72 64 20 80 20 a4  6f 76 65 72 77 72 69 74  |cord . .overwrit|
0000a440  65 5f 6f 6b 28 66 69 6c  65 6e 61 6d 65 24 29 20  |e_ok(filename$) |
0000a450  8c 0d 43 c6 3f 20 20 f2  77 72 69 74 65 5f 72 65  |..C.?  .write_re|
0000a460  63 6f 72 64 28 bb 28 24  72 65 63 5f 6e 75 6d 62  |cord(.($rec_numb|
0000a470  65 72 25 29 29 20 3a 20  f4 20 73 61 76 65 20 74  |er%)) : . save t|
0000a480  68 65 20 6c 61 74 65 73  74 20 72 65 63 6f 72 64  |he latest record|
0000a490  0d 43 d0 1a 20 20 f2 65  78 74 72 61 63 74 5f 6f  |.C..  .extract_o|
0000a4a0  75 74 70 75 74 5f 6c 69  73 74 0d 43 da 1b 20 20  |utput_list.C..  |
0000a4b0  f2 63 72 65 61 74 65 5f  73 65 61 72 63 68 5f 73  |.create_search_s|
0000a4c0  74 72 69 6e 67 0d 43 e4  20 20 20 e7 20 a4 76 61  |tring.C.   . .va|
0000a4d0  6c 69 64 5f 73 65 61 72  63 68 5f 63 72 69 74 65  |lid_search_crite|
0000a4e0  72 69 61 20 8c 0d 43 ee  15 20 20 e3 20 6c 69 73  |ria ..C..  . lis|
0000a4f0  74 25 20 3d 20 30 20 b8  20 35 0d 43 f8 2c 20 20  |t% = 0 . 5.C.,  |
0000a500  20 20 70 6f 69 6e 74 65  72 25 20 3d 20 6f 75 74  |  pointer% = out|
0000a510  70 75 74 5f 64 69 73 70  6c 61 79 25 2b 6c 69 73  |put_display%+lis|
0000a520  74 25 2a 33 30 30 0d 44  02 16 20 20 20 20 24 70  |t%*300.D..    $p|
0000a530  6f 69 6e 74 65 72 25 20  3d 20 22 22 0d 44 0c 07  |ointer% = "".D..|
0000a540  20 20 ed 0d 44 16 22 20  20 f2 6f 70 65 6e 5f 77  |  ..D."  .open_w|
0000a550  69 6e 64 6f 77 28 73 63  72 65 65 6e 5f 77 69 6e  |indow(screen_win|
0000a560  64 6f 77 25 29 0d 44 20  28 20 20 6f 75 74 70 75  |dow%).D (  outpu|
0000a570  74 5f 66 69 6c 65 5f 68  61 6e 64 6c 65 25 20 3d  |t_file_handle% =|
0000a580  20 ae 28 66 69 6c 65 6e  61 6d 65 24 29 0d 44 2a  | .(filename$).D*|
0000a590  0e 20 20 72 65 63 25 20  3d 20 31 0d 44 34 10 20  |.  rec% = 1.D4. |
0000a5a0  20 6d 61 74 63 68 25 20  3d 20 30 0d 44 3e 1a 20  | match% = 0.D>. |
0000a5b0  20 24 6f 75 74 70 75 74  5f 72 65 63 25 20 3d 20  | $output_rec% = |
0000a5c0  c3 72 65 63 25 0d 44 48  19 20 20 24 6d 61 74 63  |.rec%.DH.  $matc|
0000a5d0  68 65 73 25 20 3d 20 c3  6d 61 74 63 68 25 0d 44  |hes% = .match%.D|
0000a5e0  52 37 20 20 c8 99 22 57  69 6d 70 5f 46 6f 72 63  |R7  .."Wimp_Forc|
0000a5f0  65 52 65 64 72 61 77 22  2c 73 63 72 65 65 6e 5f  |eRedraw",screen_|
0000a600  77 69 6e 64 6f 77 25 2c  30 2c 2d 35 30 30 2c 34  |window%,0,-500,4|
0000a610  30 30 30 2c 30 0d 44 5c  11 20 20 65 73 63 61 70  |000,0.D\.  escap|
0000a620  65 25 20 3d 20 a3 0d 44  66 0e 20 20 f2 70 6f 6c  |e% = ..Df.  .pol|
0000a630  6c 28 30 29 0d 44 70 2f  20 20 c8 95 20 72 65 63  |l(0).Dp/  .. rec|
0000a640  25 20 3c 3d 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |% <= number_of_r|
0000a650  65 63 6f 72 64 73 25 20  80 20 ac 20 65 73 63 61  |ecords% . . esca|
0000a660  70 65 25 0d 44 7a 1a 20  20 20 20 f2 72 65 61 64  |pe%.Dz.    .read|
0000a670  5f 72 65 63 6f 72 64 28  72 65 63 25 29 0d 44 84  |_record(rec%).D.|
0000a680  2d 20 20 20 20 e7 20 ac  20 63 61 73 65 5f 73 65  |-    . . case_se|
0000a690  6e 73 25 20 8c 20 f2 63  6f 6e 76 65 72 74 5f 72  |ns% . .convert_r|
0000a6a0  65 63 6f 72 64 5f 63 61  73 65 0d 44 8e 1d 20 20  |ecord_case.D..  |
0000a6b0  20 20 e7 20 a0 28 73 65  61 72 63 68 5f 73 74 72  |  . .(search_str|
0000a6c0  69 6e 67 24 29 20 8c 0d  44 98 3e 20 20 20 20 f2  |ing$) ..D.>    .|
0000a6d0  72 65 61 64 5f 72 65 63  6f 72 64 28 72 65 63 25  |read_record(rec%|
0000a6e0  29 20 3a 20 f4 20 62 65  63 61 75 73 65 20 74 68  |) : . because th|
0000a6f0  65 20 63 61 73 65 20 6d  61 79 20 62 65 20 63 68  |e case may be ch|
0000a700  61 6e 67 65 64 0d 44 a2  1f 20 20 20 20 e7 20 74  |anged.D..    . t|
0000a710  61 62 75 6c 61 74 65 25  20 8c 20 f2 74 61 62 75  |abulate% . .tabu|
0000a720  6c 61 74 65 0d 44 ac 14  20 20 20 20 20 20 6d 61  |late.D..      ma|
0000a730  74 63 68 25 20 2b 3d 31  0d 44 b6 1e 20 20 20 20  |tch% +=1.D..    |
0000a740  20 20 24 6f 75 74 70 75  74 5f 72 65 63 25 20 3d  |  $output_rec% =|
0000a750  20 c3 72 65 63 25 0d 44  c0 1d 20 20 20 20 20 20  | .rec%.D..      |
0000a760  24 6d 61 74 63 68 65 73  25 20 3d 20 c3 6d 61 74  |$matches% = .mat|
0000a770  63 68 25 0d 44 ca 1b 20  20 20 20 20 20 20 20 e3  |ch%.D..        .|
0000a780  20 6c 69 73 74 25 20 3d  20 30 20 b8 20 35 0d 44  | list% = 0 . 5.D|
0000a790  d4 30 20 20 20 20 20 20  20 20 70 6f 69 6e 74 65  |.0        pointe|
0000a7a0  72 25 20 3d 20 6f 75 74  70 75 74 5f 64 69 73 70  |r% = output_disp|
0000a7b0  6c 61 79 25 2b 6c 69 73  74 25 2a 33 30 30 0d 44  |lay%+list%*300.D|
0000a7c0  de 29 20 20 20 20 20 20  20 20 e7 20 a9 28 6f 75  |.)        . .(ou|
0000a7d0  74 70 75 74 5f 6c 69 73  74 24 28 6c 69 73 74 25  |tput_list$(list%|
0000a7e0  29 29 20 3e 30 20 8c 0d  44 e8 16 20 20 20 20 20  |)) >0 ..D..     |
0000a7f0  20 20 20 20 20 f2 64 6f  5f 6c 69 73 74 0d 44 f2  |     .do_list.D.|
0000a800  29 20 20 20 20 20 20 20  20 f2 70 72 69 6e 74 5f  |)        .print_|
0000a810  74 6f 5f 74 68 65 5f 64  69 73 6b 28 24 70 6f 69  |to_the_disk($poi|
0000a820  6e 74 65 72 25 29 0d 44  fc 0d 20 20 20 20 20 20  |nter%).D..      |
0000a830  20 20 cc 0d 45 06 1c 20  20 20 20 20 20 20 20 20  |  ..E..         |
0000a840  20 24 70 6f 69 6e 74 65  72 25 20 3d 20 22 22 0d  | $pointer% = "".|
0000a850  45 10 0d 20 20 20 20 20  20 20 20 cd 0d 45 1a 0b  |E..        ..E..|
0000a860  20 20 20 20 20 20 ed 0d  45 24 3b 20 20 20 20 20  |      ..E$;     |
0000a870  20 c8 99 22 57 69 6d 70  5f 46 6f 72 63 65 52 65  | .."Wimp_ForceRe|
0000a880  64 72 61 77 22 2c 73 63  72 65 65 6e 5f 77 69 6e  |draw",screen_win|
0000a890  64 6f 77 25 2c 30 2c 2d  35 30 30 2c 34 30 30 30  |dow%,0,-500,4000|
0000a8a0  2c 30 0d 45 2e 09 20 20  20 20 cc 0d 45 38 1e 20  |,0.E..    ..E8. |
0000a8b0  20 20 20 20 20 24 6f 75  74 70 75 74 5f 72 65 63  |     $output_rec|
0000a8c0  25 20 3d 20 c3 72 65 63  25 0d 45 42 3d 20 20 20  |% = .rec%.EB=   |
0000a8d0  20 20 20 c8 99 22 57 69  6d 70 5f 46 6f 72 63 65  |   .."Wimp_Force|
0000a8e0  52 65 64 72 61 77 22 2c  73 63 72 65 65 6e 5f 77  |Redraw",screen_w|
0000a8f0  69 6e 64 6f 77 25 2c 36  32 30 2c 2d 36 32 2c 37  |indow%,620,-62,7|
0000a900  37 30 2c 2d 31 34 0d 45  4c 09 20 20 20 20 cd 0d  |70,-14.EL.    ..|
0000a910  45 56 10 20 20 20 20 72  65 63 25 20 2b 3d 31 0d  |EV.    rec% +=1.|
0000a920  45 60 10 20 20 20 20 f2  70 6f 6c 6c 28 30 29 0d  |E`.    .poll(0).|
0000a930  45 6a 07 20 20 ce 0d 45  74 40 20 20 f2 72 65 61  |Ej.  ..Et@  .rea|
0000a940  64 5f 72 65 63 6f 72 64  28 bb 28 24 72 65 63 5f  |d_record(.($rec_|
0000a950  6e 75 6d 62 65 72 25 29  29 20 3a 20 f4 20 72 65  |number%)) : . re|
0000a960  6c 6f 61 64 20 74 68 65  20 6c 61 74 65 73 74 20  |load the latest |
0000a970  72 65 63 6f 72 64 0d 45  7e 12 20 20 e7 20 ac 20  |record.E~.  . . |
0000a980  65 72 72 6f 72 25 20 8c  0d 45 88 12 20 20 e7 20  |error% ..E..  . |
0000a990  65 73 63 61 70 65 25 20  20 8c 0d 45 92 6a 20 20  |escape%  ..E.j  |
0000a9a0  20 20 20 20 f2 65 72 72  6f 72 5f 6d 65 73 73 61  |    .error_messa|
0000a9b0  67 65 28 22 53 74 6f 70  20 73 65 6c 65 63 74 65  |ge("Stop selecte|
0000a9c0  64 2e 20 53 65 61 72 63  68 20 69 6e 63 6f 6d 70  |d. Search incomp|
0000a9d0  6c 65 74 65 2e 20 22 2b  c3 28 6d 61 74 63 68 25  |lete. "+.(match%|
0000a9e0  29 2b 22 20 6d 61 74 63  68 65 73 20 68 61 76 65  |)+" matches have|
0000a9f0  20 62 65 65 6e 20 66 6f  75 6e 64 20 73 6f 20 66  | been found so f|
0000aa00  61 72 22 29 0d 45 9c 09  20 20 20 20 cc 0d 45 a6  |ar").E..    ..E.|
0000aa10  52 20 20 20 20 20 20 f2  65 72 72 6f 72 5f 6d 65  |R      .error_me|
0000aa20  73 73 61 67 65 28 22 53  65 61 72 63 68 20 63 6f  |ssage("Search co|
0000aa30  6d 70 6c 65 74 65 2e 20  22 2b c3 28 6d 61 74 63  |mplete. "+.(matc|
0000aa40  68 25 29 2b 22 20 6d 61  74 63 68 65 73 20 68 61  |h%)+" matches ha|
0000aa50  76 65 20 62 65 65 6e 20  66 6f 75 6e 64 22 29 0d  |ve been found").|
0000aa60  45 b0 07 20 20 cd 0d 45  ba 07 20 20 cd 0d 45 c4  |E..  ..E..  ..E.|
0000aa70  1c 20 20 d9 23 20 6f 75  74 70 75 74 5f 66 69 6c  |.  .# output_fil|
0000aa80  65 5f 68 61 6e 64 6c 65  25 0d 45 ce 25 20 20 ff  |e_handle%.E.%  .|
0000aa90  28 22 73 65 74 74 79 70  65 20 22 2b 66 69 6c 65  |("settype "+file|
0000aaa0  6e 61 6d 65 24 2b 22 20  74 65 78 74 22 29 0d 45  |name$+" text").E|
0000aab0  d8 07 20 20 cd 0d 45 e2  21 20 20 f2 63 6c 6f 73  |..  ..E.!  .clos|
0000aac0  65 61 77 69 6e 64 6f 77  28 73 61 76 65 5f 77 69  |eawindow(save_wi|
0000aad0  6e 64 6f 77 25 29 0d 45  ec 05 cd 0d 45 f6 05 e1  |ndow%).E....E...|
0000aae0  0d 46 00 04 0d 46 0a 04  0d 46 14 1f dd 20 f2 70  |.F...F...F... .p|
0000aaf0  72 69 6e 74 5f 74 6f 5f  74 68 65 5f 64 69 73 6b  |rint_to_the_disk|
0000ab00  28 74 65 78 74 24 29 0d  46 1e 12 e7 20 a9 74 65  |(text$).F... .te|
0000ab10  78 74 24 20 3e 20 30 20  8c 0d 46 28 14 e3 20 69  |xt$ > 0 ..F(.. i|
0000ab20  25 3d 20 31 20 b8 20 a9  74 65 78 74 24 0d 46 32  |%= 1 . .text$.F2|
0000ab30  2b 20 20 d5 23 6f 75 74  70 75 74 5f 66 69 6c 65  |+  .#output_file|
0000ab40  5f 68 61 6e 64 6c 65 25  2c 97 28 c1 74 65 78 74  |_handle%,.(.text|
0000ab50  24 2c 69 25 2c 31 29 29  0d 46 3c 05 ed 0d 46 46  |$,i%,1)).F<...FF|
0000ab60  05 cd 0d 46 50 29 20 20  e7 20 63 72 6c 66 25 20  |...FP)  . crlf% |
0000ab70  8c 20 d5 20 23 6f 75 74  70 75 74 5f 66 69 6c 65  |. . #output_file|
0000ab80  5f 68 61 6e 64 6c 65 25  2c 31 33 0d 46 5a 1f 20  |_handle%,13.FZ. |
0000ab90  20 d5 20 23 6f 75 74 70  75 74 5f 66 69 6c 65 5f  | . #output_file_|
0000aba0  68 61 6e 64 6c 65 25 2c  31 30 0d 46 64 05 e1 0d  |handle%,10.Fd...|
0000abb0  46 6e 04 0d 46 78 04 0d  46 82 11 dd 20 f2 71 75  |Fn..Fx..F... .qu|
0000abc0  69 63 6b 5f 73 61 76 65  0d 46 8c 24 20 20 e7 20  |ick_save.F.$  . |
0000abd0  a7 24 74 65 78 74 5f 66  69 6c 65 5f 6e 61 6d 65  |.$text_file_name|
0000abe0  25 2c 22 2e 22 29 20 3d  20 30 20 8c 0d 46 96 47  |%,".") = 0 ..F.G|
0000abf0  20 20 20 20 f2 65 72 72  6f 72 5f 6d 65 73 73 61  |    .error_messa|
0000ac00  67 65 28 22 54 6f 20 73  61 76 65 2c 20 64 72 61  |ge("To save, dra|
0000ac10  67 20 74 68 65 20 69 63  6f 6e 20 74 6f 20 61 20  |g the icon to a |
0000ac20  64 69 72 65 63 74 6f 72  79 20 76 69 65 77 65 72  |directory viewer|
0000ac30  2e 22 29 0d 46 a0 07 20  20 cc 0d 46 aa 29 20 20  |.").F..  ..F.)  |
0000ac40  20 20 f2 70 72 6f 64 75  63 65 5f 6f 75 74 70 75  |  .produce_outpu|
0000ac50  74 28 24 74 65 78 74 5f  66 69 6c 65 5f 6e 61 6d  |t($text_file_nam|
0000ac60  65 25 29 0d 46 b4 07 20  20 cd 0d 46 be 05 e1 0d  |e%).F..  ..F....|
0000ac70  46 c8 04 0d 46 d2 04 0d  46 dc 04 0d 46 e6 1e dd  |F...F...F...F...|
0000ac80  20 a4 6f 76 65 72 77 72  69 74 65 5f 6f 6b 28 66  | .overwrite_ok(f|
0000ac90  69 6c 65 6e 61 6d 65 24  29 0d 46 f0 12 ea 20 6e  |ilename$).F... n|
0000aca0  61 6d 65 24 2c 20 74 79  70 65 25 0d 46 fa 1a 6e  |ame$, type%.F..n|
0000acb0  61 6d 65 24 20 3d 20 66  69 6c 65 6e 61 6d 65 24  |ame$ = filename$|
0000acc0  20 2b 20 bd 30 0d 47 04  25 c8 99 22 4f 53 5f 46  | + .0.G.%.."OS_F|
0000acd0  69 6c 65 22 2c 35 2c 6e  61 6d 65 24 2c 2c 2c 2c  |ile",5,name$,,,,|
0000ace0  2c 30 20 b8 20 74 79 70  65 25 0d 47 0e 0e c8 8e  |,0 . type%.G....|
0000acf0  20 74 79 70 65 25 20 ca  0d 47 18 0f 20 20 c9 20  | type% ..G..  . |
0000ad00  30 20 3a 20 3d 20 b9 0d  47 22 7f 20 20 c9 20 31  |0 : = ..G".  . 1|
0000ad10  20 3a 20 72 65 73 75 6c  74 25 20 3d 20 a4 63 61  | : result% = .ca|
0000ad20  6e 63 65 6c 5f 6d 65 73  73 61 67 65 28 22 41 20  |ncel_message("A |
0000ad30  66 69 6c 65 20 6f 66 20  74 68 69 73 20 6e 61 6d  |file of this nam|
0000ad40  65 20 65 78 69 73 74 73  2e 20 43 6c 69 63 6b 20  |e exists. Click |
0000ad50  6f 6e 20 4f 4b 20 74 6f  20 72 65 70 6c 61 63 65  |on OK to replace|
0000ad60  20 69 74 2e 20 43 6c 69  63 6b 20 6f 6e 20 43 41  | it. Click on CA|
0000ad70  4e 43 45 4c 20 74 6f 20  61 62 6f 72 74 20 73 65  |NCEL to abort se|
0000ad80  61 72 63 68 22 29 0d 47  2c 1e 20 20 20 20 20 20  |arch").G,.      |
0000ad90  20 20 20 20 20 e7 20 72  65 73 75 6c 74 25 20 3d  |     . result% =|
0000ada0  20 31 20 8c 0d 47 36 15  20 20 20 20 20 20 20 20  | 1 ..G6.        |
0000adb0  20 20 20 20 20 20 3d 20  b9 0d 47 40 10 20 20 20  |      = ..G@.   |
0000adc0  20 20 20 20 20 20 20 20  cc 0d 47 4a 15 20 20 20  |        ..GJ.   |
0000add0  20 20 20 20 20 20 20 20  20 20 20 3d 20 a3 0d 47  |           = ..G|
0000ade0  54 10 20 20 20 20 20 20  20 20 20 20 20 cd 0d 47  |T.           ..G|
0000adf0  5e 3a 20 20 c9 20 32 20  3a 20 f2 65 72 72 6f 72  |^:  . 2 : .error|
0000ae00  5f 6d 65 73 73 61 67 65  28 22 54 68 69 73 20 69  |_message("This i|
0000ae10  73 20 61 20 64 69 72 65  63 74 6f 72 79 20 6e 61  |s a directory na|
0000ae20  6d 65 22 29 3a 3d 20 a3  0d 47 68 05 cb 0d 47 72  |me"):= ..Gh...Gr|
0000ae30  04 0d 47 7c 10 dd 20 a4  66 69 6c 65 5f 73 69 7a  |..G|.. .file_siz|
0000ae40  65 0d 47 86 0e ea 20 72  30 2c 72 31 2c 72 32 0d  |e.G... r0,r1,r2.|
0000ae50  47 90 22 c8 99 22 4f 53  5f 41 72 67 73 22 2c 32  |G.".."OS_Args",2|
0000ae60  2c 66 69 6c 65 25 20 b8  20 72 30 2c 72 31 2c 72  |,file% . r0,r1,r|
0000ae70  32 0d 47 9a 07 3d 72 32  0d 47 a4 04 0d 47 ae 14  |2.G..=r2.G...G..|
0000ae80  dd 20 f2 64 65 6c 65 74  65 5f 72 65 63 6f 72 64  |. .delete_record|
0000ae90  0d 47 b8 0e ea 20 70 72  65 73 65 6e 74 25 0d 47  |.G... present%.G|
0000aea0  c2 1e e7 20 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  |... number_of_re|
0000aeb0  63 6f 72 64 73 25 20 3d  20 31 20 8c 0d 47 cc 51  |cords% = 1 ..G.Q|
0000aec0  20 f2 65 72 72 6f 72 5f  6d 65 73 73 61 67 65 28  | .error_message(|
0000aed0  22 54 68 65 20 66 69 6c  65 20 63 6f 6e 74 61 69  |"The file contai|
0000aee0  6e 73 20 6f 6e 6c 79 20  6f 6e 65 20 72 65 63 6f  |ns only one reco|
0000aef0  72 64 2e 20 54 68 69 73  20 63 61 6e 20 6e 6f 74  |rd. This can not|
0000af00  20 62 65 20 64 65 6c 65  74 65 64 22 29 0d 47 d6  | be deleted").G.|
0000af10  05 cc 0d 47 e0 20 20 20  70 72 65 73 65 6e 74 25  |...G.   present%|
0000af20  20 3d 20 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  | = .($rec_number|
0000af30  25 29 0d 47 ea 27 20 20  e7 20 70 72 65 73 65 6e  |%).G.'  . presen|
0000af40  74 25 20 3d 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |t% = number_of_r|
0000af50  65 63 6f 72 64 73 25 20  8c 0d 47 f4 2f 20 20 20  |ecords% ..G./   |
0000af60  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
0000af70  64 73 25 3d 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  |ds%=number_of_re|
0000af80  63 6f 72 64 73 25 2d 31  0d 47 fe 2c 20 20 20 20  |cords%-1.G.,    |
0000af90  24 72 65 63 5f 6e 75 6d  62 65 72 25 20 3d 20 c3  |$rec_number% = .|
0000afa0  28 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  |(number_of_recor|
0000afb0  64 73 25 29 0d 48 08 25  20 20 20 20 f2 72 65 61  |ds%).H.%    .rea|
0000afc0  64 5f 72 65 63 6f 72 64  28 bb 28 24 72 65 63 5f  |d_record(.($rec_|
0000afd0  6e 75 6d 62 65 72 25 29  29 0d 48 12 17 20 20 20  |number%)).H..   |
0000afe0  20 f2 75 70 64 61 74 65  5f 64 69 73 70 6c 61 79  | .update_display|
0000aff0  0d 48 1c 07 20 20 cc 0d  48 26 14 20 20 20 20 70  |.H..  ..H&.    p|
0000b000  72 6f 63 65 65 64 25 20  3d 20 a3 0d 48 30 2f 20  |roceed% = ..H0/ |
0000b010  20 20 20 e7 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |   . number_of_r|
0000b020  65 63 6f 72 64 73 25 20  2d 20 70 72 65 73 65 6e  |ecords% - presen|
0000b030  74 25 20 3c 20 35 30 30  20 8c 0d 48 3a 17 20 20  |t% < 500 ..H:.  |
0000b040  20 20 20 20 20 70 72 6f  63 65 65 64 25 20 3d 20  |     proceed% = |
0000b050  b9 0d 48 44 09 20 20 20  20 cc 0d 48 4e 53 20 20  |..HD.    ..HNS  |
0000b060  20 20 20 20 e7 20 a4 63  61 6e 63 65 6c 5f 6d 65  |    . .cancel_me|
0000b070  73 73 61 67 65 28 22 54  68 69 73 20 6d 61 79 20  |ssage("This may |
0000b080  74 61 6b 65 20 73 6f 6d  65 20 74 69 6d 65 2e 20  |take some time. |
0000b090  53 65 6c 65 63 74 20 4f  4b 20 74 6f 20 63 6f 6e  |Select OK to con|
0000b0a0  74 69 6e 75 65 22 29 20  3d 20 31 20 8c 0d 48 58  |tinue") = 1 ..HX|
0000b0b0  17 20 20 20 20 20 20 20  70 72 6f 63 65 65 64 25  |.       proceed%|
0000b0c0  20 3d 20 b9 0d 48 62 09  20 20 20 20 cd 0d 48 6c  | = ..Hb.    ..Hl|
0000b0d0  09 20 20 20 20 cd 0d 48  76 14 20 20 20 20 e7 20  |.    ..Hv.    . |
0000b0e0  70 72 6f 63 65 65 64 25  20 8c 0d 48 80 11 20 20  |proceed% ..H..  |
0000b0f0  20 20 f2 67 6c 61 73 73  28 b9 29 0d 48 8a 2e 20  |  .glass(.).H.. |
0000b100  20 20 20 74 6f 74 61 6c  25 20 3d 20 6e 75 6d 62  |   total% = numb|
0000b110  65 72 5f 6f 66 5f 72 65  63 6f 72 64 73 25 20 2d  |er_of_records% -|
0000b120  20 70 72 65 73 65 6e 74  25 0d 48 94 05 20 0d 48  | present%.H.. .H|
0000b130  9e 11 20 20 20 20 64 6f  6e 65 25 20 3d 20 30 0d  |..    done% = 0.|
0000b140  48 a8 2f 20 20 20 20 e3  20 69 25 20 3d 20 70 72  |H./    . i% = pr|
0000b150  65 73 65 6e 74 25 20 b8  20 6e 75 6d 62 65 72 5f  |esent% . number_|
0000b160  6f 66 5f 72 65 63 6f 72  64 73 25 20 2d 31 0d 48  |of_records% -1.H|
0000b170  b2 1d 20 20 20 20 20 20  20 f2 72 65 61 64 5f 72  |..       .read_r|
0000b180  65 63 6f 72 64 28 69 25  2b 31 29 0d 48 bc 1c 20  |ecord(i%+1).H.. |
0000b190  20 20 20 20 20 20 f2 77  72 69 74 65 5f 72 65 63  |      .write_rec|
0000b1a0  6f 72 64 28 69 25 29 0d  48 c6 37 20 20 20 20 20  |ord(i%).H.7     |
0000b1b0  20 20 c8 99 22 48 6f 75  72 67 6c 61 73 73 5f 50  |  .."Hourglass_P|
0000b1c0  65 72 63 65 6e 74 61 67  65 22 2c 20 64 6f 6e 65  |ercentage", done|
0000b1d0  25 2f 74 6f 74 61 6c 25  20 2a 20 31 30 30 0d 48  |%/total% * 100.H|
0000b1e0  d0 14 20 20 20 20 20 20  20 64 6f 6e 65 25 20 2b  |..       done% +|
0000b1f0  3d 31 0d 48 da 09 20 20  20 20 ed 0d 48 e4 11 20  |=1.H..    ..H.. |
0000b200  20 20 20 f2 67 6c 61 73  73 28 a3 29 0d 48 ee 2f  |   .glass(.).H./|
0000b210  20 20 20 20 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  |    number_of_re|
0000b220  63 6f 72 64 73 25 3d 6e  75 6d 62 65 72 5f 6f 66  |cords%=number_of|
0000b230  5f 72 65 63 6f 72 64 73  25 2d 31 0d 48 f8 1e 20  |_records%-1.H.. |
0000b240  20 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 28  |   .read_record(|
0000b250  70 72 65 73 65 6e 74 25  29 0d 49 02 17 20 20 20  |present%).I..   |
0000b260  20 f2 75 70 64 61 74 65  5f 64 69 73 70 6c 61 79  | .update_display|
0000b270  0d 49 0c 09 20 20 20 20  cd 0d 49 16 05 cd 0d 49  |.I..    ..I....I|
0000b280  20 05 cd 0d 49 2a 05 e1  0d 49 34 04 0d 49 3e 0f  | ...I*...I4..I>.|
0000b290  dd 20 f2 74 61 62 75 6c  61 74 65 0d 49 48 08 ea  |. .tabulate.IH..|
0000b2a0  20 66 25 0d 49 52 20 e3  20 66 25 20 3d 20 30 20  | f%.IR . f% = 0 |
0000b2b0  b8 20 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |. number_of_fiel|
0000b2c0  64 73 25 0d 49 5c 47 20  20 63 75 72 72 65 6e 74  |ds%.I\G  current|
0000b2d0  5f 66 69 65 6c 64 5f 76  61 6c 75 65 24 28 66 25  |_field_value$(f%|
0000b2e0  29 3d 63 75 72 72 65 6e  74 5f 66 69 65 6c 64 5f  |)=current_field_|
0000b2f0  76 61 6c 75 65 24 28 66  25 29 2b c4 bb 66 24 28  |value$(f%)+..f$(|
0000b300  66 25 2c 32 29 2c 22 20  22 29 0d 49 66 44 20 20  |f%,2)," ").IfD  |
0000b310  63 75 72 72 65 6e 74 5f  66 69 65 6c 64 5f 76 61  |current_field_va|
0000b320  6c 75 65 24 28 66 25 29  3d c0 20 63 75 72 72 65  |lue$(f%)=. curre|
0000b330  6e 74 5f 66 69 65 6c 64  5f 76 61 6c 75 65 24 28  |nt_field_value$(|
0000b340  66 25 29 2c bb 66 24 28  66 25 2c 32 29 29 0d 49  |f%),.f$(f%,2)).I|
0000b350  70 05 ed 0d 49 7a 05 e1  0d 49 84 05 20 0d 49 8e  |p...Iz...I.. .I.|
0000b360  04 0d 49 98 04 0d 49 a2  0b dd 20 f2 73 6f 72 74  |..I...I... .sort|
0000b370  0d 49 ac 0d ea 20 6d 65  6d 6f 72 79 25 0d 49 b6  |.I... memory%.I.|
0000b380  14 6d 65 6d 6f 72 79 5f  73 6f 72 74 25 20 3d 20  |.memory_sort% = |
0000b390  b9 0d 49 c0 1f e7 20 a4  65 78 74 72 61 63 74 5f  |..I... .extract_|
0000b3a0  73 6f 72 74 5f 63 6f 6e  64 69 74 69 6f 6e 20 8c  |sort_condition .|
0000b3b0  0d 49 ca 1a 20 20 f2 65  78 74 72 61 63 74 5f 72  |.I..  .extract_r|
0000b3c0  65 63 6f 72 64 5f 64 61  74 61 0d 49 d4 24 20 20  |ecord_data.I.$  |
0000b3d0  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 bb 28  |.write_record(.(|
0000b3e0  24 72 65 63 5f 6e 75 6d  62 65 72 25 29 29 0d 49  |$rec_number%)).I|
0000b3f0  de 1f 20 20 73 69 7a 65  25 20 3d 20 a4 66 69 6c  |..  size% = .fil|
0000b400  65 5f 73 69 7a 65 20 2b  20 35 30 30 30 0d 49 e8  |e_size + 5000.I.|
0000b410  04 0d 49 f2 09 20 20 ea  20 85 0d 49 fc 1d 20 20  |..I..  . ..I..  |
0000b420  ee 20 85 20 ea 20 20 6d  65 6d 6f 72 79 5f 73 6f  |. . .  memory_so|
0000b430  72 74 25 20 3d 20 a3 0d  4a 06 16 20 20 e7 20 6d  |rt% = ..J..  . m|
0000b440  65 6d 6f 72 79 5f 73 6f  72 74 25 20 8c 0d 4a 10  |emory_sort% ..J.|
0000b450  30 20 20 20 20 20 c8 99  22 4f 53 5f 4d 6f 64 75  |0     .."OS_Modu|
0000b460  6c 65 22 2c 36 2c 2c 2c  73 69 7a 65 25 20 b8 20  |le",6,,,size% . |
0000b470  72 30 2c 72 31 2c 6d 65  6d 6f 72 79 25 0d 4a 1a  |r0,r1,memory%.J.|
0000b480  0c 20 20 20 20 20 f7 20  85 0d 4a 24 20 20 20 20  |.     . ..J$    |
0000b490  20 20 20 20 20 f2 6c 6f  61 64 5f 66 69 6c 65 5f  |     .load_file_|
0000b4a0  74 6f 5f 6d 65 6d 6f 72  79 0d 4a 2e 04 0d 4a 38  |to_memory.J...J8|
0000b4b0  15 20 20 20 20 20 f2 6d  65 6d 6f 72 79 5f 73 6f  |.     .memory_so|
0000b4c0  72 74 0d 4a 42 04 0d 4a  4c 22 20 20 20 20 20 20  |rt.JB..JL"      |
0000b4d0  20 20 f2 73 61 76 65 5f  66 69 6c 65 5f 66 72 6f  |  .save_file_fro|
0000b4e0  6d 5f 6d 65 6d 6f 72 79  0d 4a 56 21 20 20 20 20  |m_memory.JV!    |
0000b4f0  20 c8 99 22 4f 53 5f 4d  6f 64 75 6c 65 22 2c 37  | .."OS_Module",7|
0000b500  2c 2c 6d 65 6d 6f 72 79  25 0d 4a 60 07 20 20 cc  |,,memory%.J`.  .|
0000b510  0d 4a 6a 0c 20 20 20 20  20 f7 20 85 0d 4a 74 0b  |.Jj.     . ..Jt.|
0000b520  20 20 20 20 20 ef 37 0d  4a 7e 12 20 20 20 20 20  |     .7.J~.     |
0000b530  f2 64 69 73 63 73 6f 72  74 0d 4a 88 07 20 20 cd  |.discsort.J..  .|
0000b540  0d 4a 92 23 20 20 f2 72  65 61 64 5f 72 65 63 6f  |.J.#  .read_reco|
0000b550  72 64 28 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  |rd(.($rec_number|
0000b560  25 29 29 0d 4a 9c 15 20  20 f2 75 70 64 61 74 65  |%)).J..  .update|
0000b570  5f 64 69 73 70 6c 61 79  0d 4a a6 05 cd 0d 4a b0  |_display.J....J.|
0000b580  05 e1 0d 4a ba 04 0d 4a  c4 04 0d 4a ce 12 dd 20  |...J...J...J... |
0000b590  f2 6d 65 6d 6f 72 79 5f  73 6f 72 74 0d 4a d8 0d  |.memory_sort.J..|
0000b5a0  f2 67 6c 61 73 73 28 b9  29 0d 4a e2 1c 6d 61 78  |.glass(.).J..max|
0000b5b0  20 3d 20 6e 75 6d 62 65  72 5f 6f 66 5f 72 65 63  | = number_of_rec|
0000b5c0  6f 72 64 73 25 0d 4a ec  19 e3 20 63 75 72 72 65  |ords%.J... curre|
0000b5d0  6e 74 20 3d 20 31 20 b8  20 6d 61 78 2d 31 0d 4a  |nt = 1 . max-1.J|
0000b5e0  f6 25 20 20 20 f2 72 65  63 61 6c 6c 5f 66 72 6f  |.%   .recall_fro|
0000b5f0  6d 5f 6d 65 6d 6f 72 79  5f 61 28 63 75 72 72 65  |m_memory_a(curre|
0000b600  6e 74 29 0d 4b 00 44 20  20 20 68 69 67 68 65 73  |nt).K.D   highes|
0000b610  74 20 3d 20 63 75 72 72  65 6e 74 20 20 20 20 20  |t = current     |
0000b620  20 20 20 20 20 20 20 20  20 20 3a f4 20 72 65 63  |          :. rec|
0000b630  6f 72 64 5f 62 20 69 73  20 68 69 67 68 65 73 74  |ord_b is highest|
0000b640  20 73 6f 20 66 61 72 0d  4b 0a 25 20 20 20 f2 72  | so far.K.%   .r|
0000b650  65 63 61 6c 6c 5f 66 72  6f 6d 5f 6d 65 6d 6f 72  |ecall_from_memor|
0000b660  79 5f 62 28 63 75 72 72  65 6e 74 29 0d 4b 14 1d  |y_b(current).K..|
0000b670  20 20 20 e3 20 69 20 3d  20 63 75 72 72 65 6e 74  |   . i = current|
0000b680  20 2b 31 20 b8 20 6d 61  78 0d 4b 1e 21 20 20 20  | +1 . max.K.!   |
0000b690  20 20 f2 72 65 63 61 6c  6c 5f 66 72 6f 6d 5f 6d  |  .recall_from_m|
0000b6a0  65 6d 6f 72 79 5f 61 28  69 29 0d 4b 28 15 20 20  |emory_a(i).K(.  |
0000b6b0  20 20 20 e7 20 a4 63 6f  6d 70 61 72 65 20 8c 0d  |   . .compare ..|
0000b6c0  4b 32 16 20 20 20 20 20  20 20 68 69 67 68 65 73  |K2.       highes|
0000b6d0  74 20 3d 20 69 0d 4b 3c  29 20 20 20 20 20 20 20  |t = i.K<)       |
0000b6e0  f2 72 65 63 61 6c 6c 5f  66 72 6f 6d 5f 6d 65 6d  |.recall_from_mem|
0000b6f0  6f 72 79 5f 62 28 68 69  67 68 65 73 74 29 0d 4b  |ory_b(highest).K|
0000b700  46 0a 20 20 20 20 20 cd  0d 4b 50 08 20 20 20 ed  |F.     ..KP.   .|
0000b710  0d 4b 5a 25 20 20 20 f2  72 65 63 61 6c 6c 5f 66  |.KZ%   .recall_f|
0000b720  72 6f 6d 5f 6d 65 6d 6f  72 79 5f 61 28 63 75 72  |rom_memory_a(cur|
0000b730  72 65 6e 74 29 0d 4b 64  22 20 20 20 f2 73 74 6f  |rent).Kd"   .sto|
0000b740  72 65 5f 69 6e 5f 6d 65  6d 6f 72 79 5f 61 28 68  |re_in_memory_a(h|
0000b750  69 67 68 65 73 74 29 0d  4b 6e 22 20 20 20 f2 73  |ighest).Kn"   .s|
0000b760  74 6f 72 65 5f 69 6e 5f  6d 65 6d 6f 72 79 5f 62  |tore_in_memory_b|
0000b770  28 63 75 72 72 65 6e 74  29 0d 4b 78 23 20 20 20  |(current).Kx#   |
0000b780  f4 20 53 57 41 50 20 72  28 63 75 72 72 65 6e 74  |. SWAP r(current|
0000b790  29 2c 72 28 68 69 67 68  65 73 74 29 0d 4b 82 32  |),r(highest).K.2|
0000b7a0  20 20 20 c8 99 22 48 6f  75 72 67 6c 61 73 73 5f  |   .."Hourglass_|
0000b7b0  50 65 72 63 65 6e 74 61  67 65 22 2c 20 63 75 72  |Percentage", cur|
0000b7c0  72 65 6e 74 2f 6d 61 78  20 2a 20 31 30 30 0d 4b  |rent/max * 100.K|
0000b7d0  8c 0f 20 20 20 f2 70 6f  6c 6c 28 30 29 0d 4b 96  |..   .poll(0).K.|
0000b7e0  05 ed 0d 4b a0 0d f2 67  6c 61 73 73 28 a3 29 0d  |...K...glass(.).|
0000b7f0  4b aa 05 e1 0d 4b b4 04  0d 4b be 04 0d 4b c8 04  |K....K...K...K..|
0000b800  0d 4b d2 0f dd 20 f2 64  69 73 63 73 6f 72 74 0d  |.K... .discsort.|
0000b810  4b dc 1c 6d 61 78 20 3d  20 6e 75 6d 62 65 72 5f  |K..max = number_|
0000b820  6f 66 5f 72 65 63 6f 72  64 73 25 0d 4b e6 0d f2  |of_records%.K...|
0000b830  67 6c 61 73 73 28 b9 29  0d 4b f0 19 e3 20 63 75  |glass(.).K... cu|
0000b840  72 72 65 6e 74 20 3d 20  31 20 b8 20 6d 61 78 2d  |rrent = 1 . max-|
0000b850  31 0d 4b fa 1e 20 20 20  f2 72 65 61 64 5f 72 65  |1.K..   .read_re|
0000b860  63 6f 72 64 5f 61 28 63  75 72 72 65 6e 74 29 0d  |cord_a(current).|
0000b870  4c 04 44 20 20 20 68 69  67 68 65 73 74 20 3d 20  |L.D   highest = |
0000b880  63 75 72 72 65 6e 74 20  20 20 20 20 20 20 20 20  |current         |
0000b890  20 20 20 20 20 20 3a f4  20 72 65 63 6f 72 64 5f  |      :. record_|
0000b8a0  62 20 69 73 20 68 69 67  68 65 73 74 20 73 6f 20  |b is highest so |
0000b8b0  66 61 72 0d 4c 0e 1e 20  20 20 f2 72 65 61 64 5f  |far.L..   .read_|
0000b8c0  72 65 63 6f 72 64 5f 62  28 63 75 72 72 65 6e 74  |record_b(current|
0000b8d0  29 0d 4c 18 1d 20 20 20  e3 20 69 20 3d 20 63 75  |).L..   . i = cu|
0000b8e0  72 72 65 6e 74 20 2b 31  20 b8 20 6d 61 78 0d 4c  |rrent +1 . max.L|
0000b8f0  22 1a 20 20 20 20 20 f2  72 65 61 64 5f 72 65 63  |".     .read_rec|
0000b900  6f 72 64 5f 61 28 69 29  0d 4c 2c 15 20 20 20 20  |ord_a(i).L,.    |
0000b910  20 e7 20 a4 63 6f 6d 70  61 72 65 20 8c 0d 4c 36  | . .compare ..L6|
0000b920  16 20 20 20 20 20 20 20  68 69 67 68 65 73 74 20  |.       highest |
0000b930  3d 20 69 0d 4c 40 22 20  20 20 20 20 20 20 f2 72  |= i.L@"       .r|
0000b940  65 61 64 5f 72 65 63 6f  72 64 5f 62 28 68 69 67  |ead_record_b(hig|
0000b950  68 65 73 74 29 0d 4c 4a  0a 20 20 20 20 20 cd 0d  |hest).LJ.     ..|
0000b960  4c 54 08 20 20 20 ed 0d  4c 5e 1e 20 20 20 f2 72  |LT.   ..L^.   .r|
0000b970  65 61 64 5f 72 65 63 6f  72 64 5f 61 28 63 75 72  |ead_record_a(cur|
0000b980  72 65 6e 74 29 0d 4c 68  1f 20 20 20 f2 77 72 69  |rent).Lh.   .wri|
0000b990  74 65 5f 72 65 63 6f 72  64 5f 61 28 68 69 67 68  |te_record_a(high|
0000b9a0  65 73 74 29 0d 4c 72 1f  20 20 20 f2 77 72 69 74  |est).Lr.   .writ|
0000b9b0  65 5f 72 65 63 6f 72 64  5f 62 28 63 75 72 72 65  |e_record_b(curre|
0000b9c0  6e 74 29 0d 4c 7c 23 20  20 20 f4 20 53 57 41 50  |nt).L|#   . SWAP|
0000b9d0  20 72 28 63 75 72 72 65  6e 74 29 2c 72 28 68 69  | r(current),r(hi|
0000b9e0  67 68 65 73 74 29 0d 4c  86 32 20 20 20 c8 99 22  |ghest).L.2   .."|
0000b9f0  48 6f 75 72 67 6c 61 73  73 5f 50 65 72 63 65 6e  |Hourglass_Percen|
0000ba00  74 61 67 65 22 2c 20 63  75 72 72 65 6e 74 2f 6d  |tage", current/m|
0000ba10  61 78 20 2a 20 31 30 30  0d 4c 90 0f 20 20 20 f2  |ax * 100.L..   .|
0000ba20  70 6f 6c 6c 28 30 29 0d  4c 9a 05 ed 0d 4c a4 0d  |poll(0).L....L..|
0000ba30  f2 67 6c 61 73 73 28 a3  29 0d 4c ae 05 e1 0d 4c  |.glass(.).L....L|
0000ba40  b8 04 0d 4c c2 05 20 0d  4c cc 04 0d 4c d6 04 0d  |...L.. .L...L...|
0000ba50  4c e0 04 0d 4c ea 05 20  0d 4c f4 04 0d 4c fe 04  |L...L.. .L...L..|
0000ba60  0d 4d 08 04 0d 4d 12 1f  dd 20 f2 72 65 61 64 5f  |.M...M... .read_|
0000ba70  72 65 63 6f 72 64 5f 61  28 70 6f 73 69 74 69 6f  |record_a(positio|
0000ba80  6e 25 29 0d 4d 1c 13 ea  20 20 70 6f 69 6e 74 65  |n%).M...  pointe|
0000ba90  72 25 2c 20 66 25 0d 4d  26 12 72 65 63 6f 72 64  |r%, f%.M&.record|
0000baa0  5f 61 24 28 29 3d 22 22  0d 4d 30 2a 70 6f 69 6e  |_a$()="".M0*poin|
0000bab0  74 65 72 25 20 3d 20 35  30 30 30 2b 70 6f 73 69  |ter% = 5000+posi|
0000bac0  74 69 6f 6e 25 2a 72 65  63 6f 72 64 5f 73 69 7a  |tion%*record_siz|
0000bad0  65 25 0d 4d 3a 16 cf 23  66 69 6c 65 25 20 3d 20  |e%.M:..#file% = |
0000bae0  70 6f 69 6e 74 65 72 25  0d 4d 44 12 62 61 64 5f  |pointer%.MD.bad_|
0000baf0  66 69 65 6c 64 25 20 3d  20 a3 0d 4d 4e 07 ea 20  |field% = ..MN.. |
0000bb00  85 0d 4d 58 0a 66 25 20  3d 20 30 0d 4d 62 30 c8  |..MX.f% = 0.Mb0.|
0000bb10  95 20 66 25 20 3c 28 6e  75 6d 62 65 72 5f 6f 66  |. f% <(number_of|
0000bb20  5f 66 69 65 6c 64 73 25  20 20 29 20 20 80 20 ac  |_fields%  )  . .|
0000bb30  20 62 61 64 5f 66 69 65  6c 64 25 0d 4d 6c 1a 20  | bad_field%.Ml. |
0000bb40  20 ee 20 85 20 ea 20 62  61 64 5f 66 69 65 6c 64  | . . . bad_field|
0000bb50  25 20 3d 20 b9 0d 4d 76  16 20 20 e7 20 ac 20 62  |% = ..Mv.  . . b|
0000bb60  61 64 5f 66 69 65 6c 64  25 20 8c 0d 4d 80 1f 20  |ad_field% ..M.. |
0000bb70  20 20 20 e8 20 23 66 69  6c 65 25 2c 20 72 65 63  |   . #file%, rec|
0000bb80  6f 72 64 5f 61 24 28 66  25 29 0d 4d 8a 0e 20 20  |ord_a$(f%).M..  |
0000bb90  20 20 66 25 20 2b 3d 31  0d 4d 94 07 20 20 cd 0d  |  f% +=1.M..  ..|
0000bba0  4d 9e 05 ce 0d 4d a8 07  f7 20 85 0d 4d b2 05 e1  |M....M... ..M...|
0000bbb0  0d 4d bc 04 0d 4d c6 04  0d 4d d0 20 dd 20 f2 77  |.M...M...M. . .w|
0000bbc0  72 69 74 65 5f 72 65 63  6f 72 64 5f 61 28 70 6f  |rite_record_a(po|
0000bbd0  73 69 74 69 6f 6e 25 29  0d 4d da 0e ea 20 70 6f  |sition%).M... po|
0000bbe0  69 6e 74 65 72 25 0d 4d  e4 2a 70 6f 69 6e 74 65  |inter%.M.*pointe|
0000bbf0  72 25 20 3d 20 35 30 30  30 2b 70 6f 73 69 74 69  |r% = 5000+positi|
0000bc00  6f 6e 25 2a 72 65 63 6f  72 64 5f 73 69 7a 65 25  |on%*record_size%|
0000bc10  0d 4d ee 16 cf 23 66 69  6c 65 25 20 3d 20 70 6f  |.M...#file% = po|
0000bc20  69 6e 74 65 72 25 0d 4d  f8 22 e3 20 66 25 20 3d  |inter%.M.". f% =|
0000bc30  20 30 20 b8 20 6e 75 6d  62 65 72 5f 6f 66 5f 66  | 0 . number_of_f|
0000bc40  69 65 6c 64 73 25 2d 31  0d 4e 02 1c 20 f1 20 23  |ields%-1.N.. . #|
0000bc50  66 69 6c 65 25 2c 20 72  65 63 6f 72 64 5f 61 24  |file%, record_a$|
0000bc60  28 66 25 29 0d 4e 0c 05  ed 0d 4e 16 05 e1 0d 4e  |(f%).N....N....N|
0000bc70  20 04 0d 4e 2a 1f dd 20  f2 72 65 61 64 5f 72 65  | ..N*.. .read_re|
0000bc80  63 6f 72 64 5f 62 28 70  6f 73 69 74 69 6f 6e 25  |cord_b(position%|
0000bc90  29 0d 4e 34 13 ea 20 20  70 6f 69 6e 74 65 72 25  |).N4..  pointer%|
0000bca0  2c 20 66 25 0d 4e 3e 14  72 65 63 6f 72 64 5f 62  |, f%.N>.record_b|
0000bcb0  24 28 29 20 3d 20 22 22  0d 4e 48 2a 70 6f 69 6e  |$() = "".NH*poin|
0000bcc0  74 65 72 25 20 3d 20 35  30 30 30 2b 70 6f 73 69  |ter% = 5000+posi|
0000bcd0  74 69 6f 6e 25 2a 72 65  63 6f 72 64 5f 73 69 7a  |tion%*record_siz|
0000bce0  65 25 0d 4e 52 16 cf 23  66 69 6c 65 25 20 3d 20  |e%.NR..#file% = |
0000bcf0  70 6f 69 6e 74 65 72 25  0d 4e 5c 12 62 61 64 5f  |pointer%.N\.bad_|
0000bd00  66 69 65 6c 64 25 20 3d  20 a3 0d 4e 66 07 ea 20  |field% = ..Nf.. |
0000bd10  85 0d 4e 70 0a 66 25 20  3d 20 30 0d 4e 7a 30 c8  |..Np.f% = 0.Nz0.|
0000bd20  95 20 66 25 20 3c 28 6e  75 6d 62 65 72 5f 6f 66  |. f% <(number_of|
0000bd30  5f 66 69 65 6c 64 73 25  20 20 29 20 20 80 20 ac  |_fields%  )  . .|
0000bd40  20 62 61 64 5f 66 69 65  6c 64 25 0d 4e 84 1a 20  | bad_field%.N.. |
0000bd50  20 ee 20 85 20 ea 20 62  61 64 5f 66 69 65 6c 64  | . . . bad_field|
0000bd60  25 20 3d 20 b9 0d 4e 8e  16 20 20 e7 20 ac 20 62  |% = ..N..  . . b|
0000bd70  61 64 5f 66 69 65 6c 64  25 20 8c 0d 4e 98 1f 20  |ad_field% ..N.. |
0000bd80  20 20 20 e8 20 23 66 69  6c 65 25 2c 20 72 65 63  |   . #file%, rec|
0000bd90  6f 72 64 5f 62 24 28 66  25 29 0d 4e a2 0e 20 20  |ord_b$(f%).N..  |
0000bda0  20 20 66 25 20 2b 3d 31  0d 4e ac 07 20 20 cd 0d  |  f% +=1.N..  ..|
0000bdb0  4e b6 05 ce 0d 4e c0 07  f7 20 85 0d 4e ca 05 e1  |N....N... ..N...|
0000bdc0  0d 4e d4 04 0d 4e de 04  0d 4e e8 20 dd 20 f2 77  |.N...N...N. . .w|
0000bdd0  72 69 74 65 5f 72 65 63  6f 72 64 5f 62 28 70 6f  |rite_record_b(po|
0000bde0  73 69 74 69 6f 6e 25 29  0d 4e f2 0e ea 20 70 6f  |sition%).N... po|
0000bdf0  69 6e 74 65 72 25 0d 4e  fc 2a 70 6f 69 6e 74 65  |inter%.N.*pointe|
0000be00  72 25 20 3d 20 35 30 30  30 2b 70 6f 73 69 74 69  |r% = 5000+positi|
0000be10  6f 6e 25 2a 72 65 63 6f  72 64 5f 73 69 7a 65 25  |on%*record_size%|
0000be20  0d 4f 06 16 cf 23 66 69  6c 65 25 20 3d 20 70 6f  |.O...#file% = po|
0000be30  69 6e 74 65 72 25 0d 4f  10 22 e3 20 66 25 20 3d  |inter%.O.". f% =|
0000be40  20 30 20 b8 20 6e 75 6d  62 65 72 5f 6f 66 5f 66  | 0 . number_of_f|
0000be50  69 65 6c 64 73 25 2d 31  0d 4f 1a 1c 20 f1 20 23  |ields%-1.O.. . #|
0000be60  66 69 6c 65 25 2c 20 72  65 63 6f 72 64 5f 62 24  |file%, record_b$|
0000be70  28 66 25 29 0d 4f 24 05  ed 0d 4f 2e 05 e1 0d 4f  |(f%).O$...O....O|
0000be80  38 04 0d 4f 42 04 0d 4f  4c 04 0d 4f 56 1d dd 20  |8..OB..OL..OV.. |
0000be90  a4 65 78 74 72 61 63 74  5f 73 6f 72 74 5f 63 6f  |.extract_sort_co|
0000bea0  6e 64 69 74 69 6f 6e 0d  4f 60 1b ea 20 61 25 2c  |ndition.O`.. a%,|
0000beb0  20 6c 65 66 74 24 2c 20  72 69 67 68 74 24 2c 20  | left$, right$, |
0000bec0  66 25 0d 4f 6a 0b 6f 6b  25 20 3d 20 b9 0d 4f 74  |f%.Oj.ok% = ..Ot|
0000bed0  10 e3 20 61 25 20 3d 20  30 20 b8 20 35 0d 4f 7e  |.. a% = 0 . 5.O~|
0000bee0  33 20 20 73 6f 72 74 5f  6c 69 6e 65 24 28 61 25  |3  sort_line$(a%|
0000bef0  29 20 3d 20 a4 75 70 70  65 72 28 24 28 73 6f 72  |) = .upper($(sor|
0000bf00  74 5f 66 69 65 6c 64 25  2b 35 30 2a 61 25 29 29  |t_field%+50*a%))|
0000bf10  0d 4f 88 25 20 20 70 6f  69 6e 74 65 72 25 20 3d  |.O.%  pointer% =|
0000bf20  20 73 6f 72 74 5f 66 69  65 6c 64 25 2b 35 30 2a  | sort_field%+50*|
0000bf30  61 25 2b 32 32 0d 4f 92  14 20 20 c8 8e 20 24 70  |a%+22.O..  .. $p|
0000bf40  6f 69 6e 74 65 72 25 20  ca 0d 4f 9c 2c 20 20 20  |ointer% ..O.,   |
0000bf50  c9 20 22 41 22 2c 22 61  22 20 3a 20 20 73 6f 72  |. "A","a" :  sor|
0000bf60  74 5f 6f 70 65 72 61 74  6f 72 24 28 61 25 29 20  |t_operator$(a%) |
0000bf70  3d 20 22 3c 22 0d 4f a6  2c 20 20 20 c9 20 22 44  |= "<".O.,   . "D|
0000bf80  22 2c 22 64 22 20 3a 20  20 73 6f 72 74 5f 6f 70  |","d" :  sort_op|
0000bf90  65 72 61 74 6f 72 24 28  61 25 29 20 3d 20 22 3e  |erator$(a%) = ">|
0000bfa0  22 0d 4f b0 08 20 20 20  7f 0d 4f ba 24 20 20 20  |".O..   ..O.$   |
0000bfb0  20 20 73 6f 72 74 5f 6f  70 65 72 61 74 6f 72 24  |  sort_operator$|
0000bfc0  28 61 25 29 20 3d 20 22  54 52 55 45 22 0d 4f c4  |(a%) = "TRUE".O.|
0000bfd0  08 20 20 20 cb 0d 4f ce  1e 20 20 20 e7 20 a9 20  |.   ..O..   . . |
0000bfe0  73 6f 72 74 5f 6c 69 6e  65 24 28 61 25 29 20 3e  |sort_line$(a%) >|
0000bff0  30 20 8c 0d 4f d8 1c 20  20 20 20 20 e7 20 a9 20  |0 ..O..     . . |
0000c000  24 70 6f 69 6e 74 65 72  25 20 3d 20 30 20 8c 0d  |$pointer% = 0 ..|
0000c010  4f e2 75 20 20 20 20 20  20 20 20 f2 65 72 72 6f  |O.u        .erro|
0000c020  72 5f 6d 65 73 73 61 67  65 28 22 4c 69 6e 65 20  |r_message("Line |
0000c030  22 2b c3 28 61 25 2b 31  29 2b 22 20 68 61 73 20  |"+.(a%+1)+" has |
0000c040  61 20 66 69 65 6c 64 20  6e 61 6d 65 20 62 75 74  |a field name but|
0000c050  20 74 68 65 20 64 69 72  65 63 74 69 6f 6e 20 6f  | the direction o|
0000c060  66 20 74 68 65 20 73 6f  72 74 20 68 61 73 20 6e  |f the sort has n|
0000c070  6f 74 20 62 65 65 6e 20  73 70 65 63 69 66 69 65  |ot been specifie|
0000c080  64 2e 22 29 0d 4f ec 13  20 20 20 20 20 20 20 20  |d.").O..        |
0000c090  6f 6b 25 20 3d 20 a3 0d  4f f6 09 20 20 20 20 cc  |ok% = ..O..    .|
0000c0a0  0d 50 00 11 20 20 20 20  20 20 20 66 25 20 3d 20  |.P..       f% = |
0000c0b0  30 0d 50 0a 49 20 20 20  20 20 20 20 c8 95 20 73  |0.P.I       .. s|
0000c0c0  6f 72 74 5f 6c 69 6e 65  24 28 61 25 29 20 3c 3e  |ort_line$(a%) <>|
0000c0d0  20 a4 75 70 70 65 72 28  66 24 28 66 25 2c 30 29  | .upper(f$(f%,0)|
0000c0e0  29 20 80 20 66 25 20 3c  20 6e 75 6d 62 65 72 5f  |) . f% < number_|
0000c0f0  6f 66 5f 66 69 65 6c 64  73 25 0d 50 14 12 20 20  |of_fields%.P..  |
0000c100  20 20 20 20 20 20 20 66  25 2b 3d 31 0d 50 1e 0c  |       f%+=1.P..|
0000c110  20 20 20 20 20 20 20 ce  0d 50 28 31 20 20 20 20  |       ..P(1    |
0000c120  20 20 20 e7 20 73 6f 72  74 5f 6c 69 6e 65 24 28  |   . sort_line$(|
0000c130  61 25 29 20 3c 3e 20 a4  75 70 70 65 72 28 66 24  |a%) <> .upper(f$|
0000c140  28 66 25 2c 30 29 29 20  8c 0d 50 32 6e 20 20 20  |(f%,0)) ..P2n   |
0000c150  20 20 20 20 20 f2 65 72  72 6f 72 5f 6d 65 73 73  |     .error_mess|
0000c160  61 67 65 28 22 4c 69 6e  65 20 22 2b c3 28 61 25  |age("Line "+.(a%|
0000c170  2b 31 29 2b 22 20 68 61  73 20 61 20 66 69 65 6c  |+1)+" has a fiel|
0000c180  64 20 63 61 6c 6c 65 64  20 22 2b 73 6f 72 74 5f  |d called "+sort_|
0000c190  6c 69 6e 65 24 28 61 25  29 2b 22 20 74 68 69 73  |line$(a%)+" this|
0000c1a0  20 66 69 65 6c 64 20 64  6f 65 73 20 6e 6f 74 20  | field does not |
0000c1b0  65 78 69 73 74 22 29 0d  50 3c 13 20 20 20 20 20  |exist").P<.     |
0000c1c0  20 20 20 6f 6b 25 20 3d  20 a3 0d 50 46 0c 20 20  |   ok% = ..PF.  |
0000c1d0  20 20 20 20 20 cd 0d 50  50 21 20 20 20 20 20 20  |     ..PP!      |
0000c1e0  20 6c 65 66 74 24 20 3d  20 73 6f 72 74 5f 6c 69  | left$ = sort_li|
0000c1f0  6e 65 24 28 61 25 29 0d  50 5a 22 20 20 20 20 20  |ne$(a%).PZ"     |
0000c200  20 20 72 69 67 68 74 24  20 3d 20 73 6f 72 74 5f  |  right$ = sort_|
0000c210  6c 69 6e 65 24 28 61 25  29 0d 50 64 18 20 20 20  |line$(a%).Pd.   |
0000c220  20 20 20 20 c8 8e 20 66  24 28 66 25 2c 31 29 20  |    .. f$(f%,1) |
0000c230  ca 0d 50 6e 3b 20 20 20  20 20 20 20 c9 20 22 44  |..Pn;       . "D|
0000c240  22 2c 22 64 22 20 3a 20  6c 65 66 74 24 20 3d 20  |","d" : left$ = |
0000c250  22 46 4e 64 61 74 65 28  72 65 63 6f 72 64 5f 61  |"FNdate(record_a|
0000c260  24 28 22 2b c3 66 25 2b  22 29 29 22 0d 50 78 3e  |$("+.f%+"))".Px>|
0000c270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c280  20 20 20 20 20 20 72 69  67 68 74 24 3d 20 22 46  |      right$= "F|
0000c290  4e 64 61 74 65 28 72 65  63 6f 72 64 5f 62 24 28  |Ndate(record_b$(|
0000c2a0  22 2b c3 66 25 2b 22 29  29 22 0d 50 82 38 20 20  |"+.f%+"))".P.8  |
0000c2b0  20 20 20 20 20 c9 20 22  4e 22 2c 22 6e 22 20 3a  |     . "N","n" :|
0000c2c0  20 6c 65 66 74 24 20 3d  20 22 56 41 4c 28 72 65  | left$ = "VAL(re|
0000c2d0  63 6f 72 64 5f 61 24 28  22 2b c3 66 25 2b 22 29  |cord_a$("+.f%+")|
0000c2e0  29 22 0d 50 8c 3b 20 20  20 20 20 20 20 20 20 20  |)".P.;          |
0000c2f0  20 20 20 20 20 20 20 20  20 20 3a 20 72 69 67 68  |          : righ|
0000c300  74 24 3d 20 22 56 41 4c  28 72 65 63 6f 72 64 5f  |t$= "VAL(record_|
0000c310  62 24 28 22 2b c3 66 25  2b 22 29 29 22 0d 50 96  |b$("+.f%+"))".P.|
0000c320  2a 20 20 20 20 20 20 20  c9 20 22 54 22 2c 22 74  |*       . "T","t|
0000c330  22 20 3a 20 e7 20 73 6f  72 74 5f 63 61 73 65 5f  |" : . sort_case_|
0000c340  73 65 6e 73 25 20 8c 0d  50 a0 39 20 20 20 20 20  |sens% ..P.9     |
0000c350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c360  20 20 20 20 6c 65 66 74  24 20 3d 20 22 72 65 63  |    left$ = "rec|
0000c370  6f 72 64 5f 61 24 28 22  2b c3 66 25 2b 22 29 22  |ord_a$("+.f%+")"|
0000c380  0d 50 aa 39 20 20 20 20  20 20 20 20 20 20 20 20  |.P.9            |
0000c390  20 20 20 20 20 20 20 20  20 20 20 20 20 72 69 67  |             rig|
0000c3a0  68 74 24 3d 20 22 72 65  63 6f 72 64 5f 62 24 28  |ht$= "record_b$(|
0000c3b0  22 2b c3 66 25 2b 22 29  22 0d 50 b4 1b 20 20 20  |"+.f%+")".P..   |
0000c3c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c3d0  20 20 20 cc 0d 50 be 42  20 20 20 20 20 20 20 20  |   ..P.B        |
0000c3e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c3f0  20 6c 65 66 74 24 20 3d  20 22 46 4e 75 70 70 65  | left$ = "FNuppe|
0000c400  72 28 72 65 63 6f 72 64  5f 61 24 28 22 2b c3 66  |r(record_a$("+.f|
0000c410  25 2b 22 29 29 22 0d 50  c8 42 20 20 20 20 20 20  |%+"))".P.B      |
0000c420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c430  20 20 20 72 69 67 68 74  24 3d 20 22 46 4e 75 70  |   right$= "FNup|
0000c440  70 65 72 28 72 65 63 6f  72 64 5f 62 24 28 22 2b  |per(record_b$("+|
0000c450  c3 66 25 2b 22 29 29 22  0d 50 d2 1b 20 20 20 20  |.f%+"))".P..    |
0000c460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c470  20 20 cd 0d 50 dc 0c 20  20 20 20 20 20 20 cb 0d  |  ..P..       ..|
0000c480  50 e6 2a 20 20 20 20 20  20 20 e7 20 73 6f 72 74  |P.*       . sort|
0000c490  5f 6f 70 65 72 61 74 6f  72 24 28 61 25 29 20 3d  |_operator$(a%) =|
0000c4a0  20 22 54 52 55 45 22 20  8c 0d 50 f0 22 20 20 20  | "TRUE" ..P."   |
0000c4b0  20 20 20 20 20 20 73 6f  72 74 5f 6c 69 6e 65 24  |      sort_line$|
0000c4c0  28 61 25 29 3d 22 54 52  55 45 22 0d 50 fa 0c 20  |(a%)="TRUE".P.. |
0000c4d0  20 20 20 20 20 20 cc 0d  51 04 3d 20 20 20 20 20  |      ..Q.=     |
0000c4e0  20 20 20 20 73 6f 72 74  5f 6c 69 6e 65 24 28 61  |    sort_line$(a|
0000c4f0  25 29 20 3d 20 6c 65 66  74 24 2b 73 6f 72 74 5f  |%) = left$+sort_|
0000c500  6f 70 65 72 61 74 6f 72  24 28 61 25 29 2b 72 69  |operator$(a%)+ri|
0000c510  67 68 74 24 0d 51 0e 30  20 20 20 20 20 20 20 20  |ght$.Q.0        |
0000c520  20 73 6f 72 74 5f 6c 69  6e 65 24 28 61 25 2b 36  | sort_line$(a%+6|
0000c530  29 20 3d 20 6c 65 66 74  24 2b 22 3d 22 2b 72 69  |) = left$+"="+ri|
0000c540  67 68 74 24 0d 51 18 0c  20 20 20 20 20 20 20 cd  |ght$.Q..       .|
0000c550  0d 51 22 09 20 20 20 20  cd 0d 51 2c 08 20 20 20  |.Q".    ..Q,.   |
0000c560  cc 0d 51 36 1e 20 20 20  20 20 73 6f 72 74 5f 6c  |..Q6.     sort_l|
0000c570  69 6e 65 24 28 61 25 29  3d 22 54 52 55 45 22 0d  |ine$(a%)="TRUE".|
0000c580  51 40 20 20 20 20 20 20  73 6f 72 74 5f 6c 69 6e  |Q@      sort_lin|
0000c590  65 24 28 61 25 2b 36 29  3d 22 54 52 55 45 22 0d  |e$(a%+6)="TRUE".|
0000c5a0  51 4a 09 20 20 20 20 cd  0d 51 54 05 ed 0d 51 5e  |QJ.    ..QT...Q^|
0000c5b0  08 3d 6f 6b 25 0d 51 68  05 20 0d 51 72 04 0d 51  |.=ok%.Qh. .Qr..Q|
0000c5c0  7c 04 0d 51 86 0e dd 20  a4 63 6f 6d 70 61 72 65  ||..Q... .compare|
0000c5d0  0d 51 90 0d ea 20 72 65  73 75 6c 74 25 0d 51 9a  |.Q... result%.Q.|
0000c5e0  0f 72 65 73 75 6c 74 25  20 3d 20 a3 0d 51 a4 16  |.result% = ..Q..|
0000c5f0  e7 20 a0 73 6f 72 74 5f  6c 69 6e 65 24 28 30 29  |. .sort_line$(0)|
0000c600  20 8c 0d 51 ae 11 20 20  72 65 73 75 6c 74 25 20  | ..Q..  result% |
0000c610  3d 20 b9 0d 51 b8 05 cc  0d 51 c2 18 20 20 e7 20  |= ..Q....Q..  . |
0000c620  a0 73 6f 72 74 5f 6c 69  6e 65 24 28 36 29 20 8c  |.sort_line$(6) .|
0000c630  0d 51 cc 05 20 0d 51 d6  1a 20 20 20 20 e7 20 a0  |.Q.. .Q..    . .|
0000c640  73 6f 72 74 5f 6c 69 6e  65 24 28 31 29 20 8c 0d  |sort_line$(1) ..|
0000c650  51 e0 15 20 20 20 20 20  20 72 65 73 75 6c 74 25  |Q..      result%|
0000c660  20 3d 20 b9 0d 51 ea 09  20 20 20 20 cc 0d 51 f4  | = ..Q..    ..Q.|
0000c670  1b 20 20 20 20 20 e7 20  a0 73 6f 72 74 5f 6c 69  |.     . .sort_li|
0000c680  6e 65 24 28 37 29 20 8c  0d 51 fe 05 20 0d 52 08  |ne$(7) ..Q.. .R.|
0000c690  1d 20 20 20 20 20 20 20  e7 20 a0 73 6f 72 74 5f  |.       . .sort_|
0000c6a0  6c 69 6e 65 24 28 32 29  20 8c 0d 52 12 17 20 20  |line$(2) ..R..  |
0000c6b0  20 20 20 20 20 20 72 65  73 75 6c 74 25 20 3d 20  |      result% = |
0000c6c0  b9 0d 52 1c 0c 20 20 20  20 20 20 20 cc 0d 52 26  |..R..       ..R&|
0000c6d0  1e 20 20 20 20 20 20 20  20 e7 20 a0 73 6f 72 74  |.        . .sort|
0000c6e0  5f 6c 69 6e 65 24 28 38  29 20 8c 0d 52 30 05 20  |_line$(8) ..R0. |
0000c6f0  0d 52 3a 20 20 20 20 20  20 20 20 20 20 20 e7 20  |.R:           . |
0000c700  a0 73 6f 72 74 5f 6c 69  6e 65 24 28 33 29 20 8c  |.sort_line$(3) .|
0000c710  0d 52 44 1b 20 20 20 20  20 20 20 20 20 20 20 20  |.RD.            |
0000c720  72 65 73 75 6c 74 25 20  3d 20 b9 0d 52 4e 0f 20  |result% = ..RN. |
0000c730  20 20 20 20 20 20 20 20  20 cc 0d 52 58 22 20 20  |         ..RX"  |
0000c740  20 20 20 20 20 20 20 20  20 20 e7 20 a0 73 6f 72  |          . .sor|
0000c750  74 5f 6c 69 6e 65 24 28  39 29 20 8c 0d 52 62 05  |t_line$(9) ..Rb.|
0000c760  20 0d 52 6c 24 20 20 20  20 20 20 20 20 20 20 20  | .Rl$           |
0000c770  20 20 20 e7 20 a0 73 6f  72 74 5f 6c 69 6e 65 24  |   . .sort_line$|
0000c780  28 34 29 20 8c 0d 52 76  1f 20 20 20 20 20 20 20  |(4) ..Rv.       |
0000c790  20 20 20 20 20 20 20 20  20 72 65 73 75 6c 74 25  |         result%|
0000c7a0  20 3d 20 b9 0d 52 80 13  20 20 20 20 20 20 20 20  | = ..R..        |
0000c7b0  20 20 20 20 20 20 cc 0d  52 8a 27 20 20 20 20 20  |      ..R.'     |
0000c7c0  20 20 20 20 20 20 20 20  20 20 20 e7 20 a0 73 6f  |           . .so|
0000c7d0  72 74 5f 6c 69 6e 65 24  28 31 30 29 20 8c 0d 52  |rt_line$(10) ..R|
0000c7e0  94 05 20 0d 52 9e 29 20  20 20 20 20 20 20 20 20  |.. .R.)         |
0000c7f0  20 20 20 20 20 20 20 20  20 20 e7 20 a0 73 6f 72  |          . .sor|
0000c800  74 5f 6c 69 6e 65 24 28  35 29 20 8c 0d 52 a8 24  |t_line$(5) ..R.$|
0000c810  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c820  20 20 20 20 20 72 65 73  75 6c 74 25 20 3d 20 b9  |     result% = .|
0000c830  0d 52 b2 18 20 20 20 20  20 20 20 20 20 20 20 20  |.R..            |
0000c840  20 20 20 20 20 20 20 cc  0d 52 bc 2c 20 20 20 20  |       ..R.,    |
0000c850  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c860  20 e7 20 a0 73 6f 72 74  5f 6c 69 6e 65 24 28 31  | . .sort_line$(1|
0000c870  31 29 20 8c 0d 52 c6 05  20 0d 52 d0 18 20 20 20  |1) ..R.. .R..   |
0000c880  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c890  cd 0d 52 da 17 20 20 20  20 20 20 20 20 20 20 20  |..R..           |
0000c8a0  20 20 20 20 20 20 20 cd  0d 52 e4 04 0d 52 ee 15  |       ..R...R..|
0000c8b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c8c0  cd 0d 52 f8 13 20 20 20  20 20 20 20 20 20 20 20  |..R..           |
0000c8d0  20 20 20 cd 0d 53 02 04  0d 53 0c 11 20 20 20 20  |   ..S...S..    |
0000c8e0  20 20 20 20 20 20 20 20  cd 0d 53 16 0f 20 20 20  |        ..S..   |
0000c8f0  20 20 20 20 20 20 20 cd  0d 53 20 04 0d 53 2a 0c  |       ..S ..S*.|
0000c900  20 20 20 20 20 20 20 cd  0d 53 34 0a 20 20 20 20  |       ..S4.    |
0000c910  20 cd 0d 53 3e 04 0d 53  48 09 20 20 20 20 cd 0d  | ..S>..SH.    ..|
0000c920  53 52 07 20 20 cd 0d 53  5c 05 20 0d 53 66 07 20  |SR.  ..S\. .Sf. |
0000c930  20 cd 0d 53 70 05 cd 0d  53 7a 0c 3d 72 65 73 75  | ..Sp...Sz.=resu|
0000c940  6c 74 25 0d 53 84 04 0d  53 8e 1a dd 20 f2 6c 6f  |lt%.S...S... .lo|
0000c950  61 64 5f 66 69 6c 65 5f  74 6f 5f 6d 65 6d 6f 72  |ad_file_to_memor|
0000c960  79 0d 53 98 23 e3 20 72  65 63 25 20 3d 20 31 20  |y.S.#. rec% = 1 |
0000c970  b8 20 6e 75 6d 62 65 72  5f 6f 66 5f 72 65 63 6f  |. number_of_reco|
0000c980  72 64 73 25 0d 53 a2 1a  20 20 f2 72 65 61 64 5f  |rds%.S..  .read_|
0000c990  72 65 63 6f 72 64 5f 61  28 72 65 63 25 29 0d 53  |record_a(rec%).S|
0000c9a0  ac 1e 20 20 f2 73 74 6f  72 65 5f 69 6e 5f 6d 65  |..  .store_in_me|
0000c9b0  6d 6f 72 79 5f 61 28 72  65 63 25 29 0d 53 b6 05  |mory_a(rec%).S..|
0000c9c0  ed 0d 53 c0 05 e1 0d 53  ca 04 0d 53 d4 1c dd 20  |..S....S...S... |
0000c9d0  f2 73 61 76 65 5f 66 69  6c 65 5f 66 72 6f 6d 5f  |.save_file_from_|
0000c9e0  6d 65 6d 6f 72 79 0d 53  de 23 e3 20 72 65 63 25  |memory.S.#. rec%|
0000c9f0  20 3d 20 31 20 b8 20 6e  75 6d 62 65 72 5f 6f 66  | = 1 . number_of|
0000ca00  5f 72 65 63 6f 72 64 73  25 0d 53 e8 21 20 20 f2  |_records%.S.!  .|
0000ca10  72 65 63 61 6c 6c 5f 66  72 6f 6d 5f 6d 65 6d 6f  |recall_from_memo|
0000ca20  72 79 5f 61 28 72 65 63  25 29 0d 53 f2 1b 20 20  |ry_a(rec%).S..  |
0000ca30  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 5f 61 28  |.write_record_a(|
0000ca40  72 65 63 25 29 0d 53 fc  05 ed 0d 54 06 05 e1 0d  |rec%).S....T....|
0000ca50  54 10 04 0d 54 1a 04 0d  54 24 1e dd 20 f2 73 74  |T...T...T$.. .st|
0000ca60  6f 72 65 5f 69 6e 5f 6d  65 6d 6f 72 79 5f 61 28  |ore_in_memory_a(|
0000ca70  72 65 63 25 29 0d 54 2e  28 70 6f 69 6e 74 65 72  |rec%).T.(pointer|
0000ca80  25 20 3d 20 72 65 63 25  2a 72 65 63 6f 72 64 5f  |% = rec%*record_|
0000ca90  73 69 7a 65 25 2b 6d 65  6d 6f 72 79 25 0d 54 38  |size%+memory%.T8|
0000caa0  23 e3 20 66 25 20 3d 20  30 20 b8 20 6e 75 6d 62  |#. f% = 0 . numb|
0000cab0  65 72 5f 6f 66 5f 66 69  65 6c 64 73 25 20 2d 31  |er_of_fields% -1|
0000cac0  0d 54 42 20 20 20 20 24  70 6f 69 6e 74 65 72 25  |.TB    $pointer%|
0000cad0  20 3d 20 72 65 63 6f 72  64 5f 61 24 28 66 25 29  | = record_a$(f%)|
0000cae0  0d 54 4c 2e 20 20 20 20  70 6f 69 6e 74 65 72 25  |.TL.    pointer%|
0000caf0  20 3d 20 70 6f 69 6e 74  65 72 25 20 2b 20 a9 72  | = pointer% + .r|
0000cb00  65 63 6f 72 64 5f 61 24  28 66 25 29 2b 31 0d 54  |ecord_a$(f%)+1.T|
0000cb10  56 05 ed 0d 54 60 05 e1  0d 54 6a 04 0d 54 74 1e  |V...T`...Tj..Tt.|
0000cb20  dd 20 f2 73 74 6f 72 65  5f 69 6e 5f 6d 65 6d 6f  |. .store_in_memo|
0000cb30  72 79 5f 62 28 72 65 63  25 29 0d 54 7e 28 70 6f  |ry_b(rec%).T~(po|
0000cb40  69 6e 74 65 72 25 20 3d  20 72 65 63 25 2a 72 65  |inter% = rec%*re|
0000cb50  63 6f 72 64 5f 73 69 7a  65 25 2b 6d 65 6d 6f 72  |cord_size%+memor|
0000cb60  79 25 0d 54 88 23 e3 20  66 25 20 3d 20 30 20 b8  |y%.T.#. f% = 0 .|
0000cb70  20 6e 75 6d 62 65 72 5f  6f 66 5f 66 69 65 6c 64  | number_of_field|
0000cb80  73 25 20 2d 31 0d 54 92  20 20 20 20 24 70 6f 69  |s% -1.T.    $poi|
0000cb90  6e 74 65 72 25 20 3d 20  72 65 63 6f 72 64 5f 62  |nter% = record_b|
0000cba0  24 28 66 25 29 0d 54 9c  2e 20 20 20 20 70 6f 69  |$(f%).T..    poi|
0000cbb0  6e 74 65 72 25 20 3d 20  70 6f 69 6e 74 65 72 25  |nter% = pointer%|
0000cbc0  20 2b 20 a9 72 65 63 6f  72 64 5f 62 24 28 66 25  | + .record_b$(f%|
0000cbd0  29 2b 31 0d 54 a6 05 ed  0d 54 b0 05 e1 0d 54 ba  |)+1.T....T....T.|
0000cbe0  04 0d 54 c4 04 0d 54 ce  21 dd 20 f2 72 65 63 61  |..T...T.!. .reca|
0000cbf0  6c 6c 5f 66 72 6f 6d 5f  6d 65 6d 6f 72 79 5f 61  |ll_from_memory_a|
0000cc00  28 72 65 63 25 29 0d 54  d8 28 70 6f 69 6e 74 65  |(rec%).T.(pointe|
0000cc10  72 25 20 3d 20 72 65 63  25 2a 72 65 63 6f 72 64  |r% = rec%*record|
0000cc20  5f 73 69 7a 65 25 2b 6d  65 6d 6f 72 79 25 0d 54  |_size%+memory%.T|
0000cc30  e2 23 e3 20 66 25 20 3d  20 30 20 b8 20 6e 75 6d  |.#. f% = 0 . num|
0000cc40  62 65 72 5f 6f 66 5f 66  69 65 6c 64 73 25 20 2d  |ber_of_fields% -|
0000cc50  31 0d 54 ec 20 20 20 20  72 65 63 6f 72 64 5f 61  |1.T.    record_a|
0000cc60  24 28 66 25 29 20 3d 20  24 70 6f 69 6e 74 65 72  |$(f%) = $pointer|
0000cc70  25 0d 54 f6 2e 20 20 20  20 70 6f 69 6e 74 65 72  |%.T..    pointer|
0000cc80  25 20 3d 20 70 6f 69 6e  74 65 72 25 20 2b 20 a9  |% = pointer% + .|
0000cc90  72 65 63 6f 72 64 5f 61  24 28 66 25 29 2b 31 0d  |record_a$(f%)+1.|
0000cca0  55 00 05 ed 0d 55 0a 05  e1 0d 55 14 04 0d 55 1e  |U....U....U...U.|
0000ccb0  21 dd 20 f2 72 65 63 61  6c 6c 5f 66 72 6f 6d 5f  |!. .recall_from_|
0000ccc0  6d 65 6d 6f 72 79 5f 62  28 72 65 63 25 29 0d 55  |memory_b(rec%).U|
0000ccd0  28 28 70 6f 69 6e 74 65  72 25 20 3d 20 72 65 63  |((pointer% = rec|
0000cce0  25 2a 72 65 63 6f 72 64  5f 73 69 7a 65 25 2b 6d  |%*record_size%+m|
0000ccf0  65 6d 6f 72 79 25 0d 55  32 23 e3 20 66 25 20 3d  |emory%.U2#. f% =|
0000cd00  20 30 20 b8 20 6e 75 6d  62 65 72 5f 6f 66 5f 66  | 0 . number_of_f|
0000cd10  69 65 6c 64 73 25 20 2d  31 0d 55 3c 20 20 20 20  |ields% -1.U<    |
0000cd20  72 65 63 6f 72 64 5f 62  24 28 66 25 29 20 3d 20  |record_b$(f%) = |
0000cd30  24 70 6f 69 6e 74 65 72  25 0d 55 46 2e 20 20 20  |$pointer%.UF.   |
0000cd40  20 70 6f 69 6e 74 65 72  25 20 3d 20 70 6f 69 6e  | pointer% = poin|
0000cd50  74 65 72 25 20 2b 20 a9  72 65 63 6f 72 64 5f 62  |ter% + .record_b|
0000cd60  24 28 66 25 29 2b 31 0d  55 50 05 ed 0d 55 5a 05  |$(f%)+1.UP...UZ.|
0000cd70  e1 0d 55 64 04 0d 55 6e  04 0d 55 78 11 dd 20 f2  |..Ud..Un..Ux.. .|
0000cd80  72 65 61 64 5f 76 69 72  75 73 0d 55 82 08 ea 20  |read_virus.U... |
0000cd90  66 25 0d 55 8c 21 66 25  20 3d 20 8e 28 22 3c 43  |f%.U.!f% = .("<C|
0000cda0  61 72 64 42 61 73 65 24  44 69 72 3e 2e 64 61 74  |ardBase$Dir>.dat|
0000cdb0  65 22 29 0d 55 96 0e e7  20 66 25 20 3e 20 30 20  |e").U... f% > 0 |
0000cdc0  8c 0d 55 a0 14 20 20 76  69 72 75 73 5f 73 65 74  |..U..  virus_set|
0000cdd0  25 20 3d 20 b9 0d 55 aa  12 20 20 de 20 76 69 72  |% = ..U..  . vir|
0000cde0  75 73 24 28 31 32 29 0d  55 b4 11 20 20 63 6f 75  |us$(12).U..  cou|
0000cdf0  6e 74 25 20 3d 20 2d 31  0d 55 be 07 20 20 f5 0d  |nt% = -1.U..  ..|
0000ce00  55 c8 13 20 20 20 20 20  63 6f 75 6e 74 25 20 2b  |U..     count% +|
0000ce10  3d 31 0d 55 d2 24 20 20  20 20 20 6e 6f 5f 6d 6f  |=1.U.$     no_mo|
0000ce20  72 65 25 20 3d 20 a4 72  65 61 64 5f 76 69 72 75  |re% = .read_viru|
0000ce30  73 5f 6c 69 6e 65 0d 55  dc 1e 20 20 fd 20 63 6f  |s_line.U..  . co|
0000ce40  75 6e 74 25 20 3d 20 31  30 20 84 20 6e 6f 5f 6d  |unt% = 10 . no_m|
0000ce50  6f 72 65 25 0d 55 e6 0b  20 20 d9 20 23 66 25 0d  |ore%.U..  . #f%.|
0000ce60  55 f0 23 20 20 e7 20 c0  76 69 72 75 73 24 28 30  |U.#  . .virus$(0|
0000ce70  29 2c 36 29 20 3c 3e 20  c1 91 24 2c 35 2c 36 29  |),6) <> ..$,5,6)|
0000ce80  20 8c 0d 55 fa 17 20 20  20 20 20 76 69 72 75 73  | ..U..     virus|
0000ce90  5f 73 65 74 25 20 3d 20  a3 0d 56 04 07 20 20 cc  |_set% = ..V..  .|
0000cea0  0d 56 0e 1b 20 20 20 20  6e 6f 5f 6f 66 5f 76 69  |.V..    no_of_vi|
0000ceb0  72 5f 6d 65 73 73 25 20  3d 20 30 0d 56 18 15 20  |r_mess% = 0.V.. |
0000cec0  20 20 20 e3 20 6a 25 20  3d 20 31 20 b8 20 31 30  |   . j% = 1 . 10|
0000ced0  0d 56 22 2f 20 20 20 20  20 e7 20 a9 76 69 72 75  |.V"/     . .viru|
0000cee0  73 24 28 6a 25 29 20 3e  20 30 20 8c 20 6e 6f 5f  |s$(j%) > 0 . no_|
0000cef0  6f 66 5f 76 69 72 5f 6d  65 73 73 25 2b 3d 31 0d  |of_vir_mess%+=1.|
0000cf00  56 2c 09 20 20 20 20 ed  0d 56 36 1e 20 20 20 20  |V,.    ..V6.    |
0000cf10  20 63 75 72 72 65 6e 74  5f 76 69 72 5f 6d 65 73  | current_vir_mes|
0000cf20  73 25 20 3d 20 31 0d 56  40 2e 20 20 20 20 e7 20  |s% = 1.V@.    . |
0000cf30  6e 6f 5f 6f 66 5f 76 69  72 5f 6d 65 73 73 25 20  |no_of_vir_mess% |
0000cf40  3d 20 30 20 8c 20 76 69  72 75 73 5f 73 65 74 25  |= 0 . virus_set%|
0000cf50  20 3d 20 a3 0d 56 4a 07  20 20 cd 0d 56 54 05 cc  | = ..VJ.  ..VT..|
0000cf60  0d 56 5e 14 20 20 76 69  72 75 73 5f 73 65 74 25  |.V^.  virus_set%|
0000cf70  20 3d 20 a3 0d 56 68 05  cd 0d 56 72 05 e1 0d 56  | = ..Vh...Vr...V|
0000cf80  7c 05 20 0d 56 86 04 0d  56 90 16 dd 20 a4 72 65  ||. .V...V... .re|
0000cf90  61 64 5f 76 69 72 75 73  5f 6c 69 6e 65 0d 56 9a  |ad_virus_line.V.|
0000cfa0  11 20 20 f2 67 65 74 5f  61 5f 6c 69 6e 65 0d 56  |.  .get_a_line.V|
0000cfb0  a4 20 20 20 c8 95 20 c0  6c 69 6e 65 24 2c 31 29  |.   .. .line$,1)|
0000cfc0  20 3d 22 7c 22 20 80 20  ac 20 c5 23 66 25 0d 56  | ="|" . . .#f%.V|
0000cfd0  ae 14 20 20 20 20 20 f2  67 65 74 5f 61 5f 6c 69  |..     .get_a_li|
0000cfe0  6e 65 0d 56 b8 07 20 20  ce 0d 56 c2 1c 20 20 76  |ne.V..  ..V..  v|
0000cff0  69 72 75 73 24 28 63 6f  75 6e 74 25 29 20 3d 20  |irus$(count%) = |
0000d000  6c 69 6e 65 24 0d 56 cc  0b 3d 20 c5 20 23 66 25  |line$.V..= . #f%|
0000d010  0d 56 d6 04 0d 56 e0 04  0d 56 ea 11 dd 20 f2 67  |.V...V...V... .g|
0000d020  65 74 5f 61 5f 6c 69 6e  65 0d 56 f4 0f 20 20 6c  |et_a_line.V..  l|
0000d030  69 6e 65 24 20 3d 22 22  0d 56 fe 0f 20 20 63 25  |ine$ ="".V..  c%|
0000d040  20 3d 20 9a 23 66 25 0d  57 08 11 20 20 c8 95 20  | = .#f%.W..  .. |
0000d050  63 25 20 3c 3e 20 31 30  0d 57 12 19 20 20 20 20  |c% <> 10.W..    |
0000d060  6c 69 6e 65 24 20 3d 20  6c 69 6e 65 24 2b bd 63  |line$ = line$+.c|
0000d070  25 0d 57 1c 11 20 20 20  20 63 25 20 3d 20 9a 23  |%.W..    c% = .#|
0000d080  66 25 0d 57 26 07 20 20  ce 0d 57 30 05 e1 0d 57  |f%.W&.  ..W0...W|
0000d090  3a 04 0d 57 44 05 20 0d  57 4e 04 0d 57 58 11 dd  |:..WD. .WN..WX..|
0000d0a0  20 f2 73 68 6f 77 5f 76  69 72 75 73 0d 57 62 2d  | .show_virus.Wb-|
0000d0b0  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 76  |.error_message(v|
0000d0c0  69 72 75 73 24 28 63 75  72 72 65 6e 74 5f 76 69  |irus$(current_vi|
0000d0d0  72 5f 6d 65 73 73 25 29  29 0d 57 6c 19 63 75 72  |r_mess%)).Wl.cur|
0000d0e0  72 65 6e 74 5f 76 69 72  5f 6d 65 73 73 25 20 2b  |rent_vir_mess% +|
0000d0f0  3d 31 0d 57 76 2b e7 20  63 75 72 72 65 6e 74 5f  |=1.Wv+. current_|
0000d100  76 69 72 5f 6d 65 73 73  25 20 3e 20 6e 6f 5f 6f  |vir_mess% > no_o|
0000d110  66 5f 76 69 72 5f 6d 65  73 73 25 20 8c 0d 57 80  |f_vir_mess% ..W.|
0000d120  1b 20 20 20 63 75 72 72  65 6e 74 5f 76 69 72 5f  |.   current_vir_|
0000d130  6d 65 73 73 25 20 3d 31  0d 57 8a 05 cd 0d 57 94  |mess% =1.W....W.|
0000d140  05 e1 0d 57 9e 04 0d 57  a8 0b f4 20 64 75 6d 6d  |...W...W... dumm|
0000d150  79 0d 57 b2 04 0d 57 bc  04 0d 57 c6 09 64 75 6d  |y.W...W...W..dum|
0000d160  6d 79 0d ff                                       |my..|
0000d164